- Linux;
- Python 3.8 或更新版本;
- GNU Make、C++ compiler;
- PyYAML;
- Verilator 5.x。
安装 Python 依赖后先生成 Profile 配置:
python3 -m pip install --user PyYAML
make defconfig
make showconfigshowconfig 应显示 project_id=npc-riscv-open、当前 snapshot_id 和唯一的
profile_id。旧版 .config 不兼容新的 project/snapshot 字段;切换代码后
直接重新执行一个 defconfig target。
make rv32im_single_perf_defconfig
make rv32ima_sv32_linux_defconfig
make rv32im_ooo_4k_defconfigmake defconfig 默认选择 rv32im_ooo_4k。架构宽度、ISA、cache/TLB 和 OoO
机制由 Profile manifest 固定;命令行只用于镜像、watchdog、seed、trace 等
运行输入。
make config-check source-check docs-check public-hygiene
make verify-checksums
make sim-dry-run
make verilator-lint
make smoke
make regressionsim-dry-run 输出实际 top、filelist、define、latency 和 runner 命令,但不
启动长仿真。smoke 使用选中 Profile 的固定小程序;regression 只运行该
Profile manifest 明确列出的测试。
NPC_OPEN_IMAGE=/path/to/program.bin make simruntime 支持原始 binary,以及以 .hex 或 .mem 结尾的 word-oriented 文本
镜像。默认 PMEM 范围是 0x80000000..0x8FFFFFFF;文本镜像可用 @<hex_addr>
改变装载地址。镜像超出 PMEM 或无法解析时仿真直接失败。
可选环境输入包括:
| 变量 | 用途 |
|---|---|
NPC_OPEN_IMAGE |
覆盖 .config 中的程序镜像 |
NPC_PUBLIC_MEM_BASE/LIMIT |
调整 sparse PMEM 范围 |
NPC_PUBLIC_TOHOST |
设置 32-bit tohost 地址;默认不启用 |
VERILATOR |
指定 Verilator executable |
这些输入不会改变 Profile 的 ISA 或微架构身份。
| Profile | IF latency | LSU latency | memory latency |
|---|---|---|---|
rv32im_single_perf |
2 | 2 | 2 |
rv32ima_sv32_linux |
0 | 0 | 0 |
rv32im_ooo_4k |
2 | 3 | 2 |
这里的数字是公共 DPI transport 配置,不是 ASIC SRAM 时序,也不直接等于 cache hit latency。即使配置为 0,请求/响应仍遵循时钟化 ready/valid 仿真 协议,不应解释为组合逻辑 memory。
三个 defconfig 默认关闭 VCD 和 itrace,watchdog 为 20,000,000 cycles。
需要调试时可通过 Kconfig/.config 显式开启:
CONFIG_NPC_VCD,默认输出路径build/waves/sim.vcd;CONFIG_NPC_ITRACE,默认输出路径build/traces/itrace.log。
trace 会产生大量文件并降低宿主仿真速度,性能测量时应保持关闭。mtrace、 ftrace、pmemtrace、SDB、反汇编和 NVBoard 不属于公共 runtime。
默认仿真无需 NEMU。严格本地检查按 Profile 构建对应 reference:
make rv32im_ooo_4k_defconfig
make difftest-prepare NPC_NEMU_SOURCE_REPO=/path/to/ysyx-workbench
make difftestdifftest-prepare 从 manifest 锁定的 workbench commit 取得对应 NEMU tree,
在 flows/local/nemu/<profile>/ 构建 raw reference 和 MIT ABI adapter,并
记录二者 hash。该目录被 Git 忽略。
构建 NEMU 还需要 GNU Make、C compiler、libdl 和 readline development
library。make difftest 会验证 sidecar hash、Profile、reset vector 和 image,
直接传入 raw NEMU .so 会失败。
当前 adapter 逐 commit 检查 PC、instruction 和 GPR,支持 OoO 同周期双 退休。它不验证完整 Linux device/MMIO/interrupt 等价,详见 SoC 集成。
CoreMark 使用 hash-locked manifest,同时要求 binary 与 ELF:
make rv32im_single_perf_defconfig
NPC_OPEN_COREMARK_IMAGE=/path/to/coremark.bin \
NPC_OPEN_COREMARK_ELF=/path/to/coremark.elf \
make coremark-difftestmake coremark 默认不启用 difftest;make coremark-difftest 使用选中 Profile
的本地 adapter。runner 校验输入 hash 和 start/stop marker,并输出 timed、
whole、pre/post 计数及 CoreMark/MHz JSON。OoO 当前只使用 make coremark,因为
双退休 MMIO packet 的 reference 顺序仍有歧义。详见
CoreMark 计量证据。
构建、trace、local NEMU 和用户镜像输出应位于 Git 忽略路径。运行后使用:
git status --short受控 fresh clone 测试结束后,除被正确忽略的 .config、build/ 与
flows/local/ 外不得产生未跟踪文件。