Skip to content

Commit d70ea47

Browse files
authored
Merge branch 'main' into asap25-release/das
2 parents 0a7a90c + 3855df6 commit d70ea47

35 files changed

Lines changed: 226 additions & 436 deletions

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,8 @@ jobs:
247247
run: pip install -r python-requirements.txt
248248
- name: Build Control Registers
249249
run: |
250-
git submodule update --init --recursive -- hardware/deps/register_interface
251-
git apply hardware/deps/patches/register_interface.patch
250+
make bender
251+
make update-deps
252252
make -C hardware/src/control_registers clean
253253
make -C hardware/src/control_registers all
254254
git diff --ignore-submodules=dirty --exit-code
@@ -259,7 +259,7 @@ jobs:
259259
- uses: actions/checkout@v4
260260
- name: Regenerate opcodes
261261
run: |
262-
make update_opcodes
262+
make update-opcodes
263263
git diff --exit-code
264264
265265
####################
@@ -518,7 +518,7 @@ jobs:
518518
run: |
519519
# Don't regenerate previously build artifacts
520520
sudo apt install device-tree-compiler
521-
make update_opcodes
521+
make update-opcodes
522522
touch $GITHUB_WORKSPACE/software/runtime/encoding.h
523523
touch $GITHUB_WORKSPACE/hardware/src/bootrom.sv
524524
touch $GITHUB_WORKSPACE/hardware/deps/snitch/src/riscv_instr.sv

.github/workflows/lint.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@ jobs:
6767
fi
6868
- name: Check for trailing whitespaces and tabs
6969
run: |
70-
git diff --check $base HEAD -- \
71-
':(exclude)**.def' \
72-
':(exclude)**.patch' \
73-
':(exclude)toolchain/**' \
74-
':(exclude)software/riscv-tests/**'
70+
git diff --check $base HEAD -- \
71+
':(exclude)**.def' \
72+
':(exclude)**.patch' \
73+
':(exclude)toolchain/**' \
74+
':(exclude)software/riscv-tests/**' \
75+
':(exclude)software/runtime/control_registers.h' \
76+
':(exclude)hardware/src/control_registers/*.sv'

.gitlab/.gitlab-ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ check-control-registers:
138138
check-opcodes:
139139
stage: test
140140
script:
141-
- make update_opcodes
141+
- make update-opcodes
142142
- git diff --exit-code
143143

144144
# Software tests
@@ -218,7 +218,7 @@ unit-tests:
218218
- $CI_PROJECT_DIR/scripts/memora_retry.sh get tc-riscv-gcc
219219
- $CI_PROJECT_DIR/scripts/memora_retry.sh get riscv-isa-sim
220220
- $CI_PROJECT_DIR/scripts/memora_retry.sh get verilator-model
221-
- make update_opcodes
221+
- make update-opcodes
222222
- touch $ROOT_DIR/software/runtime/encoding.h
223223
- touch $ROOT_DIR/hardware/src/bootrom.sv
224224
- touch $ROOT_DIR/hardware/deps/snitch/src/riscv_instr.sv

.gitmodules

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,9 @@
1010
[submodule "toolchain/verilator"]
1111
path = toolchain/verilator
1212
url = https://github.com/verilator/verilator.git
13-
[submodule "hardware/deps/axi"]
14-
path = hardware/deps/axi
15-
url = https://github.com/pulp-platform/axi.git
16-
[submodule "hardware/deps/cluster_interconnect"]
17-
path = hardware/deps/cluster_interconnect
18-
url = https://github.com/pulp-platform/cluster_interconnect.git
19-
[submodule "hardware/deps/common_cells"]
20-
path = hardware/deps/common_cells
21-
url = https://github.com/pulp-platform/common_cells.git
22-
[submodule "hardware/deps/common_verification"]
23-
path = hardware/deps/common_verification
24-
url = https://github.com/pulp-platform/common_verification.git
25-
[submodule "hardware/deps/register_interface"]
26-
path = hardware/deps/register_interface
27-
url = https://github.com/pulp-platform/register_interface.git
28-
[submodule "hardware/deps/tech_cells_generic"]
29-
path = hardware/deps/tech_cells_generic
30-
url = https://github.com/pulp-platform/tech_cells_generic.git
3113
[submodule "toolchain/riscv-opcodes"]
3214
path = toolchain/riscv-opcodes
3315
url = https://github.com/pulp-platform/riscv-opcodes.git
34-
[submodule "hardware/deps/apb"]
35-
path = hardware/deps/apb
36-
url = https://github.com/pulp-platform/apb.git
37-
[submodule "hardware/deps/fpnew"]
38-
path = hardware/deps/fpnew
39-
url = https://github.com/pulp-platform/cvfpu.git
40-
[submodule "hardware/deps/fpu_div_sqrt_mvp"]
41-
path = hardware/deps/fpu_div_sqrt_mvp
42-
url = https://github.com/pulp-platform/fpu_div_sqrt_mvp.git
4316
[submodule "hardware/deps/dram_rtl_sim"]
4417
path = hardware/deps/dram_rtl_sim
4518
url = https://github.com/pulp-platform/dram_rtl_sim.git
46-
[submodule "hardware/deps/cluster_icache"]
47-
path = hardware/deps/cluster_icache
48-
url = https://github.com/pulp-platform/cluster_icache.git

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
4343
- Add fp8 microkernels: axpy, matmul, batchnorm, layernorm, softmax
4444
- Optimize fp16 matmul kernel
4545
- Add fall through register after LSU input
46+
- Benderize MemPool dependencies
47+
- Update Verilator to 4.228
4648

4749
### Fixed
4850
- Fix type issue in `snitch_addr_demux`

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,4 @@ format:
240240
find ./software/data -name '*.py' -exec autopep8 --in-place --aggressive {} +
241241

242242
clean: clean-riscv-tests clean-deps
243-
rm -rf $(INSTALL_DIR)
243+
rm -rf $(INSTALL_DIR)

README.md

Lines changed: 66 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ This repository branch contains DAS extensions based on MemPool.
88

99
# MemPool
1010

11-
MemPool is a many-core system targeting image processing applications. It implements 256 RISC-V cores that can access a large, shared L1 memory in at most five cycles.
11+
MemPool is a many-core system targeting image processing and wireless applications. It implements 256 RISC-V cores that can access a large, shared L1 memory in at most five cycles. TeraPool and MinPool, respectively a 1024 RISC-V cores scaled-up and a 16 RISC-V cores scaled-down parametrizations of MemPool are also supported.
1212

13-
This repository contains the software and hardware of MemPool, as well as infrastructure for compilation and simulation.
13+
This repository contains the software and hardware of MinPool, MemPool, and TeraPool, as well as infrastructure for compilation and simulation.
1414

1515
## Structure
1616

@@ -42,12 +42,6 @@ If the repository path of any submodule changes, run the following command to ch
4242
git submodule sync --recursive
4343
```
4444

45-
MemPool requires to patch a few hardware dependencies. To update the dependencies and apply the patches, run the following command after checking out in the project's root directory:
46-
47-
```bash
48-
make update-deps
49-
```
50-
5145
## Build dependencies
5246
### Compiler
5347

@@ -68,13 +62,20 @@ make halide
6862

6963
### RTL Simulation
7064

71-
We use [Bender](https://github.com/pulp-platform/bender) to generate our simulation scripts. Make sure you have Bender installed, or install it in the MemPool repository with:
65+
We use [Bender](https://github.com/pulp-platform/bender) to checkout hardware dependencies and to generate our simulation scripts. Make sure you have Bender installed, or install it in the MemPool repository with:
7266

7367
```bash
7468
# Install Bender
7569
make bender
7670
```
7771

72+
To checkout the hardware dependencies using Bender run:
73+
74+
```bash
75+
# Update hardware dependencies
76+
make update-deps
77+
```
78+
7879
The RTL simulation, or more specifically, the tracing in the simulation, relies on the SPIKE simulator. To build it, run the following command in the project's directory:
7980

8081
```bash
@@ -191,6 +192,22 @@ To get a visualization of the traces, check out the `scripts/tracevis.py` script
191192

192193
We also provide Synopsys Spyglass linting scripts in the `hardware/spyglass`. Run `make lint` in the `hardware` folder, with a specific MemPool configuration, to run the tests associated with the `lint_rtl` target.
193194

195+
## Hardware Configurations
196+
197+
MemPool's core-count is parametrizable. In `./config`, the `config.mk` file includes other configuration files, which represent specific parametrizations of MemPool. We currently support three parametrizations:
198+
- `terapool`: 1024 cores, organized into 128 tiles with eight cores each
199+
- `mempool`: 256 cores, organized into 64 tiles with four cores each (default)
200+
- `minpool`: 16 cores, organized into 4 tiles with four cores each
201+
202+
The software and the hardware for different MemPool configurations can be compiled specifying the desired configuration on the command line. For example, to compile and simulate the `hello_world` app for TeraPool:
203+
```bash
204+
cd hardware
205+
# Compile the hello_world for TeraPool configuration
206+
config=terapool make COMPILER=gcc hello_world
207+
# Run the simulation with the *hello_world* binary loaded
208+
config=terapool app=baremetal/hello_world make sim
209+
```
210+
194211
## DRAMsys Co-Simulation
195212

196213
The MemPool system supports both on-chip SRAM or off-chip DRAM co-simulation for higher hierarchy memory transfering. For off-chip DRAM co-simulation, it incorporates the `dram_rtl_sim` tool as a submodule, build at `hardware/deps/dram_rtl_sim`. Leveraging DRAMSys5.0, it facilitates an effective co-simulation environment between RTL models and DRAMSys5.0 for the simulation of DRAM + CTRL models, with contemporary off-chip DRAM technologies (e.g., LPDDR, DDR, HBM).
@@ -225,7 +242,7 @@ For data transfer testing between the MemPool system and higher hierarchy memory
225242
**Note:** Currently, the simulation crafting tool for off-chip DRAM co-simulation is not open-sourced. We utilize the `Questasim` simulator exclusively.
226243

227244
## Publications
228-
If you use MemPool in your work or research, you can cite us:
245+
If you use MemPool or TeraPool in your work or research, you can cite us:
229246

230247
**MemPool: A Scalable Manycore Architecture with a Low-Latency Shared L1 Memory**
231248

@@ -244,8 +261,23 @@ If you use MemPool in your work or research, you can cite us:
244261
```
245262
This paper was published on [IEEE Xplore](https://ieeexplore.ieee.org/document/10227739) and is also available on [arXiv:2303.17742 [cs.AR]](https://arxiv.org/abs/2303.17742) and the [ETH Research Collection](https://doi.org/10.3929/ethz-b-000643341).
246263

264+
**TeraPool: A Physical Design Aware, 1024 RISC-V Cores Shared-L1-Memory Scaled-Up Cluster Design With High Bandwidth Main Memory Link**
265+
266+
```
267+
@article{Zhang2025TeraPool,
268+
title={TeraPool: A Physical Design Aware, 1024 RISC-V Cores Shared-L1-Memory Scaled-Up Cluster Design With High Bandwidth Main Memory Link},
269+
author={Zhang, Yichao and Bertuletti, Marco and Zhang, Chi and Riedel, Samuel and Shen, Diyou and Wang, Bowen and Vanelli-Coralli, Alessandro and Benini, Luca},
270+
journal={IEEE Transactions on Computers},
271+
year={2025},
272+
volume={74},
273+
number={11},
274+
pages={3667-3681},
275+
doi={10.1109/TC.2025.3603692}
276+
}
277+
```
278+
This paper was published on [IEEE Xplore](https://ieeexplore.ieee.org/document/11145329).
247279

248-
The following publications give more details about MemPool, its extensions, and use cases:
280+
The following publications give more details about MemPool, TeraPool, its extensions, and use cases:
249281

250282
### 2021
251283

@@ -631,6 +663,29 @@ This paper is available on [IEEE Xplore](https://ieeexplore.ieee.org/document/10
631663
```
632664
This paper is available on [ACM DIGITAL LIBRARY](https://dl.acm.org/doi/10.1145/3649476.3658735).
633665

666+
### 2025
667+
668+
</p>
669+
</details>
670+
671+
<details>
672+
<summary><i>A 66-Gb/s/5.5-W RISC-V Many-Core Cluster for 5G+ Software-Defined Radio Uplinks</i></summary>
673+
<p>
674+
675+
```
676+
@article{Bertuletti2025TeraPool,
677+
title={A 66-Gb/s/5.5-W RISC-V Many-Core Cluster for 5G+ Software-Defined Radio Uplinks},
678+
author={Bertuletti, Marco and Zhang, Yichao and Vanelli-Coralli, Alessandro and Benini, Luca},
679+
journal={IEEE Transactions on Very Large Scale Integration (VLSI) Systems},
680+
year={2025},
681+
volume={33},
682+
number={8},
683+
pages={2225-2238},
684+
doi={10.1109/TVLSI.2025.3576855}
685+
}
686+
```
687+
This paper is available on [IEEE Xplore](https://ieeexplore.ieee.org/abstract/document/11038837).
688+
634689
</p>
635690
</details>
636691

0 commit comments

Comments
 (0)