2. Getting started¶
PRISM contains the canonical software library in repo/prism-ccl and the RTL and verification environment in repo/prism-hdl.
Run the tests¶
From the repository root, the recommended command is:
It builds the test image and runs the complete suite with the same runner used locally. Run a smaller suite while developing with:
Use make env DOCKER=1 to print the environment and make build DOCKER=1 to check RTL elaboration without running tests. Remove DOCKER=1 only when Python, Verilator, Cocotb, and tshark are installed locally.
XML test reports are temporary and deleted by default. Preserve JUnit-compatible reports under build/prism-hdl/results/ with:
Build the OpenNIC targets¶
The production integration targets the official OpenNIC Shell on Alveo U50 and Alveo U280. Install Vivado 2026.1 for U50 and Vivado 2022.1 for U280, together with the required device and CMAC licenses. Where GNU Make is installed, use:
The dependency-free Python CLI through uv is the native cross-platform entrypoint and does not require Make:
The integration profiles only select shell-facing resources; they do not fork or specialize the PRISM RTL:
| Target | OpenNIC CMAC ports | AXI width/clock | Internal AXI capacity |
|---|---|---|---|
Alveo U50 (au50) | 1 | 512 bit at 250 MHz | 128 Gbit/s |
Alveo U280 (au280) | 2 | 512 bit at 250 MHz per port | 256 Gbit/s aggregate |
Both use the same defaults (ISSUE_SLICES=4, ACCUMULATOR_RANGES=32, and KULISCH_ACC_W=279). These remain elaboration parameters: a constrained build may reduce capacity or exact-accumulator width without changing the protocol. The rates above are raw internal AXI capacities (width × clock), not Ethernet wire rates. Each OpenNIC CMAC is a 100 GbE port; Ethernet framing further reduces the application-level numeric payload carried on that physical link.
OpenNIC builds expose those values directly, for example:
Keep four issue slices to retain the documented full-beat rate for every input format. A smaller value is a deliberate area/throughput trade-off. A smaller Kulisch width remains functional and saturating, but operations that need more exact state report ACCUMULATION_INEXACT.
The script pins the OpenNIC revision and keeps its clone, generated projects, logs, reports, and bitstreams under the repository build/ directory. On Windows, the CLI also uses a short temporary drive mapping to stay below Vivado's path-length limits.
For a shell-only timing baseline with the pinned upstream P2P plugin, run make open-nic-reference BOARD=au280. It uses the same CMAC count and keeps its generated project separate from the PRISM build.
The pinned OpenNIC revision supports Vivado 2022.1, which is used for U280. Vivado 2026.1 is newer than its documented release range, so a successful U50 implementation is the compatibility proof for that target. Both targets must complete synthesis and implementation before a change is accepted.
U50 laboratory power margin
The pinned OpenNIC README reports roughly 3.97 A of MGT current against a 4 A rail limit for its U50 design and describes its laboratory validation as limited. Review that upstream note and the board power/cooling setup before programming laboratory hardware.
Run standalone Vivado synthesis¶
The standalone project is a fast synthesizability check. It does not replace the complete OpenNIC implementation and timing reports.
The direct CLI is identical on Windows and Linux:
All generated projects, reports, logs, checkpoints, and bitstreams remain under build/ and are excluded from version control.
Windows without Make¶
Docker Desktop and PowerShell are sufficient. This command builds the image and runs the full suite in a container that is removed when the run finishes:
docker build --target test -t prism-hdl:dev -f repo/prism-hdl/Dockerfile .; if ($LASTEXITCODE -eq 0) { docker run --rm --mount "type=bind,source=$($PWD.Path),target=/work" --workdir /work --env PRISM_BUILD_DIR=/tmp/prism-build --env COVERAGE_FILE=/tmp/.coverage prism-hdl:dev }
DUT-observed captures are written to repo/prism-hdl/verification/traces/<test-name>/.
Where to start reading¶
RTL datapath
Start with
repo/prism-hdl/rtl.ffor the compile order, then followsrc/core/prism_collective_core.svthrough the complete pipeline.Protocol and CCL
Read
repo/prism-ccl/src/prism_ccl/protocol/for the canonical wire ABI, models, numeric formats, validation, and serialization.Verification
Open
repo/prism-hdl/verification/suites/for suite composition, then inspectverification/tests/for the corresponding test scenarios.