Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b73aa13
Fix Hyperbus test
Xeratec Mar 6, 2026
7de6e42
Switch to 64-bit CVA6 (local Cheshire Version)
Xeratec Mar 4, 2026
3518ba7
Fix CVA6 Stall error
Xeratec Mar 18, 2026
9533591
Update Cheshire and regenerate Snitch Bootrom
Xeratec Mar 18, 2026
1680f99
Move Hyperbus to AXI LLC
Xeratec Mar 18, 2026
0ff4dc1
Enable LLC
Xeratec Mar 18, 2026
b9c65a7
Rebase to latest chimera template version
Xeratec Jul 8, 2026
1863d16
Init Claude files
Xeratec Jul 8, 2026
48f2d5e
sw: SoC verification framework + chimera-sdk integration
Xeratec Jul 8, 2026
3fbd6b1
Fix uartSimple test
Xeratec Jul 8, 2026
c728ebe
Cleanup and update chimera-sdk
Xeratec Jul 9, 2026
0ad9e5f
fix(cluster): give snitch_cluster its FP-subsystem config
Xeratec Jul 8, 2026
d8570bc
build: expose snitch_cluster_pkg for the cluster FP config; pin peakr…
Xeratec Jul 8, 2026
5c26f84
test: raise snrt per-test sim timeout to 3000s
Xeratec Jul 8, 2026
ede8c2c
rdl: SystemRDL global memory map (peakrdl) incl. the real cluster map
Xeratec Jul 8, 2026
70a4831
chore: pytest host/cluster markers, ignore build/, iis-env bootstrap
Xeratec Jul 9, 2026
56f6e60
rdl: generate the SoC-control register block from SystemRDL (retire r…
Xeratec Jul 9, 2026
a6f6a37
docs: RDL support overview across chimera and its dependencies
Xeratec Jul 9, 2026
237f259
Update to rebased cheshire
Xeratec Jul 9, 2026
36e3e82
fix(tests): Increase UART baud rate in simulation
Xeratec Jul 14, 2026
9363fa4
rdl: generate SoC register/addrmap headers; migrate Snitch bootrom of…
Xeratec Jul 16, 2026
c0ee86c
hw: source Snitch cluster wrapper from cfg/chimera.json; adopt bender…
Xeratec Jul 17, 2026
8fb1088
Bufixes
Xeratec Jul 19, 2026
3e263c2
Update bender dependencies
Xeratec Jul 19, 2026
7222f8a
build(rdl): clean up rdl.mk, fix venv python, prefix targets with chim-
Xeratec Jul 19, 2026
213c6e8
build(rdl): single cluster config — drive HW + SW from cfg/chimera.json
Xeratec Jul 19, 2026
74aaea6
build(rdl): render Snitch SW headers with the RTL clustergen
Xeratec Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ idma
hyperbus
snitch_cluster
.cache
deps/
# Bender checks its dependencies out into the repo-root deps/ only; anchor so it
# does not also ignore committed paths like sw/deps/chimera-sdk (the SDK submodule).
/deps/
*.OLD
*.egg-info/
*compile.log

# EMACS

Expand Down Expand Up @@ -41,6 +44,7 @@ utils/verible-verilog
*wave*.do
target/sim/models
target/sim/vsim/work
target/sim/vsim/runs
target/sim/vsim/transcript
target/sim/vsim/*.do
target/sim/vsim/trace*
Expand All @@ -53,3 +57,23 @@ vsim.wlf

nonfree/
working_dir/
build/

# GENERATED (SystemRDL / peakrdl)

.generated/
docs/addressmap.md

# TEST / PROFILING ARTIFACTS

chim-test-report.xml
gmon.out

# CONTAINERS

# Auto-pulled toolchain images (see scripts/sdk_container.sh); never commit them.
*.sif
.cache/containers/

# Claude
.claude/
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "sw/deps/chimera-sdk"]
path = sw/deps/chimera-sdk
url = https://github.com/Xeratec/chimera-sdk.git
branch = dev/multi-binary
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.11
13 changes: 13 additions & 0 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"configurations": [
{
"name": "chimera-sdk",
"compileCommands": "${workspaceFolder}/sw/deps/chimera-sdk/build/compile_commands.json",
"compilerPath": "/usr/pack/llvm-17.0.6-af/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "linux-clang-x64"
}
],
"version": 4
}
5 changes: 5 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"recommendations": [
"ms-vscode.cpptools"
]
}
3 changes: 3 additions & 0 deletions Bender.local
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
overrides:
common_cells: { git: "https://github.com/pulp-platform/common_cells.git", rev: ca9d577f2fbc45ec557ab4e0905bbfc154441540 } # snitch branch from 15.12.25 commit "Add iomsb function used in most other PULP repos"
axi: { git: "https://github.com/colluca/axi", rev: bd1abffc0812f8170902e5fb93142c7785c0b8c1 } # idma: { git: "https://github.com/pulp-platform/iDMA.git", rev: 28a36e5e07705549e59fc33db96ab681bc1ca88e}
55 changes: 32 additions & 23 deletions Bender.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ packages:
- obi_peripherals
- register_interface
axi:
revision: 8e04779f341eb2c89412aae92223a292beef487e
revision: bd1abffc0812f8170902e5fb93142c7785c0b8c1
version: null
source:
Git: https://github.com/colluca/axi
Expand All @@ -37,8 +37,8 @@ packages:
- register_interface
- tech_cells_generic
axi_riscv_atomics:
revision: 0ac3a78fe342c5a5b9b10bff49d58897f773059e
version: 0.8.2
revision: 97a1dd2ac643c276880420a0cf8eea697f228aa9
version: 0.8.3
source:
Git: https://github.com/pulp-platform/axi_riscv_atomics.git
dependencies:
Expand Down Expand Up @@ -71,7 +71,7 @@ packages:
- common_cells
- register_interface
cheshire:
revision: 1b6ba6294a5925a5dc199b4f98704adb76648ed1
revision: ad168f88f9d99e973d9ee147453ff911d4c79d6d
version: null
source:
Git: https://github.com/pulp-platform/cheshire.git
Expand All @@ -87,6 +87,7 @@ packages:
- common_cells
- common_verification
- cva6
- dram_rtl_sim
- idma
- irq_router
- opentitan_peripherals
Expand All @@ -95,8 +96,8 @@ packages:
- serial_link
- unbent
clic:
revision: 8ed76ffc779a435d0ed034f3068e4c3334fe2ecf
version: 2.0.0
revision: 6515a71eb4ae3b143ab912d265e79832b3179a76
version: 3.0.0
source:
Git: https://github.com/pulp-platform/clic.git
dependencies:
Expand Down Expand Up @@ -128,8 +129,8 @@ packages:
dependencies:
- common_cells
common_cells:
revision: 9afda9abb565971649c2aa0985639c096f351171
version: 1.38.0
revision: ca9d577f2fbc45ec557ab4e0905bbfc154441540
version: null
source:
Git: https://github.com/pulp-platform/common_cells.git
dependencies:
Expand All @@ -142,17 +143,24 @@ packages:
Git: https://github.com/pulp-platform/common_verification.git
dependencies: []
cva6:
revision: 630bd959c9cc69a35d461a2abc205310d2edacf8
revision: 4c02b24fe7c04690f626776a92274da24f80d1da
version: null
source:
Git: https://github.com/Scheremo/cva6.git
Git: https://github.com/pulp-platform/cva6.git
dependencies:
- axi
- common_cells
- fpnew
- tech_cells_generic
dram_rtl_sim:
revision: a764d5200a19cdd72a5237cbfb16985515a3058d
version: 0.1.2
source:
Git: https://github.com/pulp-platform/dram_rtl_sim.git
dependencies:
- axi
fpnew:
revision: a8e0cba6dd50f357ece73c2c955d96efc3c6c315
revision: e5aa6a01b5bbe1675c3aa8872e1203413ded83d1
version: null
source:
Git: https://github.com/pulp-platform/cvfpu.git
Expand All @@ -167,8 +175,8 @@ packages:
dependencies:
- common_cells
hyperbus:
revision: 841deb9d821b63bf05a1c85d3a4746352a8bcae2
version: null
revision: 2a14bd8f9a985b488ee23d240764f52f129f7729
version: 0.0.9
source:
Git: https://github.com/pulp-platform/hyperbus.git
dependencies:
Expand Down Expand Up @@ -198,7 +206,7 @@ packages:
- common_cells
- register_interface
memory_island:
revision: 64828cb7a9ccc1f1656ec92d06129072f445c319
revision: d072ba0945adad5ccd0af2d4604abe57c1058252
version: null
source:
Git: https://github.com/pulp-platform/memory_island.git
Expand Down Expand Up @@ -234,8 +242,8 @@ packages:
- register_interface
- tech_cells_generic
register_interface:
revision: 8e8c209ea559d3b54f45cf30fcce95ce70ff5e49
version: 0.4.6
revision: d6e1d4cdaab7870f4faf3f88a1c788eaf5ac129d
version: 0.4.7
source:
Git: https://github.com/pulp-platform/register_interface.git
dependencies:
Expand All @@ -252,26 +260,27 @@ packages:
- common_cells
- tech_cells_generic
scm:
revision: 472f99affe44ff7b282b519c047a3cfeb35b16c6
version: 1.2.0
revision: 1976c7efb4979271eee2abe262fde0f9a20e2557
version: 1.2.1
source:
Git: https://github.com/pulp-platform/scm.git
dependencies:
- tech_cells_generic
serial_link:
revision: c55df03a1da06b00e567cf968b1b1a5f40c9f802
version: 1.1.2
revision: d4e513aebd368d77808c5e6629a1e2729c16eba0
version: 2.0.0
source:
Git: https://github.com/pulp-platform/serial_link.git
dependencies:
- apb
- axi
- axi_stream
- common_cells
- register_interface
snitch_cluster:
revision: 5b2fccd96c42812774c20ab2f9b811e164809789
revision: c9cc25849984bf4589698d950e9f79a0631792b9
version: null
source:
Git: https://github.com/pulp-platform/snitch_cluster.git
Git: https://github.com/xeratec/snitch_cluster.git
dependencies:
- apb
- axi
Expand Down
22 changes: 9 additions & 13 deletions Bender.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,22 @@ package:
- "Lorenzo Leone <[email protected]>"

dependencies:
register_interface: { git: "https://github.com/pulp-platform/register_interface.git", version: 0.4.3 }
axi: { git: https://github.com/colluca/axi, rev: multicast }
cheshire: { git: "https://github.com/pulp-platform/cheshire.git", rev: 1b6ba6294a5925a5dc199b4f98704adb76648ed1}
snitch_cluster: { git: "https://github.com/pulp-platform/snitch_cluster.git", rev: 5b2fccd96c42812774c20ab2f9b811e164809789}
common_cells: { git: "https://github.com/pulp-platform/common_cells.git", version: 1.31.1}
register_interface: { git: "https://github.com/pulp-platform/register_interface.git", version: 0.4.7 }
axi: { git: "https://github.com/colluca/axi", rev: bd1abffc0812f8170902e5fb93142c7785c0b8c1 } #
cheshire: { git: "https://github.com/pulp-platform/cheshire.git", rev: wiesep/chimera-main }
snitch_cluster: { git: "https://github.com/xeratec/snitch_cluster.git", rev: wiesep/chimera-main } # main branch from 22.09.25 commit "treewide: Bump AXI after rebase"
common_cells: { git: "https://github.com/pulp-platform/common_cells.git", version: 1.39.0 }
idma: { git: "https://github.com/pulp-platform/iDMA.git", version: 0.6.5 }
memory_island: { git: "https://github.com/pulp-platform/memory_island.git", rev: 64828cb7a9ccc1f1656ec92d06129072f445c319 } # main branch
apb: { git: "https://github.com/pulp-platform/apb.git", version: 0.2.4 }
hyperbus: { git: "https://github.com/pulp-platform/hyperbus.git", rev: aottaviano/nonfree } # TMP: to fix hyperbus model issue
memory_island: { git: "https://github.com/pulp-platform/memory_island.git", rev: main }
apb: { git: "https://github.com/pulp-platform/apb.git", version: 0.2.4 }
hyperbus: { git: "https://github.com/pulp-platform/hyperbus.git", version : 0.0.9 }
tech_cells_generic: { git: "https://github.com/pulp-platform/tech_cells_generic.git", version: 0.2.12 }

export_include_dirs:
- hw/include

workspace:
package_links:
cheshire: cheshire
idma: idma

sources:

# Level 0
- hw/chimera_pkg.sv
- hw/regs/chimera_reg_pkg.sv
Expand Down
86 changes: 86 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# CLAUDE.md

Guidance for Claude Code (claude.ai/code) when working in this repository.

## What Chimera is

Chimera is an open-source, configurable heterogeneous SoC template (PULP Platform, ETH Zurich /
University of Bologna). It integrates:

- a **Cheshire** host SoC (64-bit CVA6, CLINT/PLIC/CLIC, JTAG debug, UART/I²C/SPI/GPIO, AXI LLC),
- up to **5 Snitch clusters** (9 cores each) as compute accelerators,
- a shared multi-banked **memory island** (`0x4800_0000`),
- a **HyperBus** controller for off-chip HyperRAM (`0x8000_0000`).

This repo is the *integration layer*: almost all leaf IP comes from Bender git dependencies
(cheshire, snitch_cluster, idma, memory_island, hyperbus, axi, common_cells, …). The RTL here
wires those together and adds SoC-control registers, a Snitch bootrom, and the cluster/memory
adapters.

## Documentation map

Detailed docs live in `docs/`:

- `docs/architecture.md` — SoC block diagram, HW module map, full address map.
- `docs/build-system.md` — Bender + Make flow, every target, dependency versions.
- `docs/software.md` — SW build, the cluster-offload model, test inventory, linker layout.
- `docs/verification.md` — current sim/test flow **and** the planned pytest-based framework.
- `docs/sdk-integration.md` — plan to adopt `chimera-sdk` as the SW layer.

`TODO.md` (repo root) tracks the active cleanup / verification-framework initiative.

## Environment

IIS members: `source iis-env.sh` (pins bender-0.31.0, questa-2022.3, RISC-V GCC 32/64, Snitch
LLVM, python3.11; auto-creates `.venv`). Non-IIS: `make python-venv`, install Bender, and a
RISC-V GCC toolchain (`RISCV_GCC_BINROOT`). See `README.md`.

## Build (current Bender + Make flow)

```sh
bender checkout
make chim-all # = HW (chs-hw-init sn-hw-all chim-bootrom-init) + SW (chim-sw) + sim (chim-sim)
```

Selective:
```sh
make chs-hw-init # patch PLIC, gen iDMA, build libchimera.a, then Cheshire chs-hw-all
make sn-hw-all # generate Snitch cluster RTL (uses cfg/default.json)
make chim-sw # build libchimera.a + all sw/tests/*.c -> *.memisl.elf
make chim-bootrom-init # Cheshire bootrom (⚠ requires chim-sw first)
make snitch_bootrom # regenerate hw/bootrom/snitch/snitch_bootrom.sv (rv32im)
make chim-sim # fetch HyperRAM model + compile RTL in Questa
make chim-run-batch BINARY=sw/tests/<test>.memisl.elf # run a test (batch)
make help # list all targets
```

Key gotchas:
- **`chim-sw` must run before `chim-bootrom-init`** (bootrom embeds SW).
- Host builds at `CHS_XLEN=64` (`rv64gc_zifencei`/`lp64d`); the Snitch bootrom is **rv32im**.
- Register offsets come from generated `sw/include/regs/soc_ctrl.h`; regenerate with
`make regenerate_soc_regs` after editing `hw/regs/chimera_regs.hjson`.
- Core counts are hardcoded in `chimera.mk` (`CLINTCORES/PLICCORES/PLIC_NUM_INTRS`) and must
track `ExtClusters`/`NrCores` in `hw/chimera_pkg.sv`.

## Running / writing tests

Today a "test" is a host (CVA6) ELF linked into the memory island; it drives SoC-control
registers and offloads functions to clusters via a shared-memory function-pointer + CLINT MSIP
mechanism. Pass/fail = the program's return code. CI runs a fixed matrix via `chim-run-batch`
and greps the transcript with `scripts/vsim_ret_error.sh`. See `docs/software.md` (offload model,
test inventory) and `docs/verification.md` (the planned pytest framework that replaces the
grep-the-transcript approach).

## Formatting

```sh
verible-verilog-format --flagfile .verilog_format --inplace hw/*.sv target/sim/src/*.sv
python scripts/run_clang_format.py -ir sw/ # llvm-12; on IIS pass --clang-format-executable=<pulp-llvm>/bin/clang-format
```

## Conventions

- Every source file carries an SPDX header (SHL-0.51 for HW/scripts, Apache-2.0 for SW and
generated register RTL).
- Do not commit build artifacts. Most are gitignored; note `build/` is currently a gap.
- `iis_compile.sh` is an empty placeholder (0 bytes) — safe to ignore/remove.
Loading