PicoRV32
PicoRV32 is a small 32-bit RISC-V core with no cache of its own. It reaches the L1.5 through pico_l15_transducer.v and the related files that already exist in OpenPiton. MACE selects it with core="pico", which adds -pico and -rv32_target_triple=riscv64-unknown-elf to the sims command line. The second flag lets the installed riscv64-unknown-elf toolchain assemble RV32 code.
Status
MACE’s loop passes 2x2 and 4x4 PicoRV32 meshes on addi.S, with every tile reaching Hit Good trap, in the runs of the 0.0.1 pre-release. See Results.
Bring-up fixes
OpenPiton’s CI builds PicoRV32 under Verilator but does not run it. Three fixes make it run:
Fix |
Where |
Effect |
|---|---|---|
Self-boot gate |
|
The core’s internal |
Monitor tracking |
|
The monitor’s |
BIST self-clear |
RTL define |
OpenPiton’s generic SRAM model ( |
Fixes 6 and 7 come from scripts/patch_openpiton.sh. The BIST define is a build option, so a run has to request it:
By hand:
PitonConfig(core="pico", config_rtl=("CONFIG_DISABLE_BIST_CLEAR", "MINIMAL_MONITORING")).Through the loop: the planner emits a
CONFIG_RTL:line naming the define for its task. See Planner.
A task builds with its own CONFIG_RTL: flags plus those of every task it depends on, so each pico task needs the define directly or through a dependency.
Workloads
PicoRV32’s OpenPiton integration has an assembler (piton/tools/bin/rv32_as) but no C compiler, and no crt.S or syscalls.c under piton/verif/diag/assembly/include/riscv/pico/. Only assembly workloads such as addi.S run on it. A C workload like barrier_atomic.c never compiles, and every tile idles at its reset vector on an empty memory image.