bb-invoke-verilator
调用 Verilator 5.012 编译 RTL + TB 并跑 coverage-driven simulation,产出 sim log / coverage.dat / VCD。触发场景:(1) bba-guru-verification 完成 TB 后跑回归;(2) RTL 修复后回归验证;(3) 显式 /bb-invoke-verilator。
SKILL.md.claude/skills/bb-invoke-verilator/SKILL.md
GitHubbb-invoke-verilator
职责
把 RTL(file_list.f)+ testbench(tb/tb_top.sv)编译为 verilator 可执行二进制并运行,产出 sim log、coverage 数据库、VCD 波形。
- 调用者:
bba-guru-verification - 下游消费者:
bb-collect-coverage(读coverage.dat) - 禁止使用:Task / Agent / Skill
Input Args
| arg | type | required | 默认 | 说明 |
|---|---|---|---|---|
| file_list | path | true | — | file_list.f,每行一个 RTL 源 |
| tb_top | path | true | — | designs/<name>/tb/tb_top.sv |
| design_name | string | true | — | 路径 designs/<name>/sim_results/ |
| sim_time | string | false | --time-resolution-unit 1ns |
时间单位 |
| seed | int | false | 1 |
+rand_seed=<seed> |
| enable_vcd | bool | false | true |
是否 --trace --trace-structs |
| stamp | string | false | <auto YYYYMMDD-HHMMSS> |
后缀 |
Output Contract
写入 designs/<name>/sim_results/,返回:
| field | 值 |
|---|---|
artifact_path |
designs/<name>/sim_results/<stamp>.log |
coverage_dat |
designs/<name>/sim_results/coverage.dat |
vcd_path |
designs/<name>/sim_results/<stamp>.vcd (与 .log 同级,fix H-09) |
obj_dir |
designs/<name>/sim_results/obj_dir_<stamp>/ |
script_path |
designs/<name>/sim_results/run_sim_<stamp>.sh |
valid |
bool(编译+运行成功) |
assertions_pass |
bool(无 %Error / Assertion failed) |
sim_time_ns |
int(log 末尾 $finish at) |
error |
string|null |
4-Phase 执行
Phase 1 — render_sim_script
scripts/render_verilator_sh.py 渲染:
#!/bin/bash
set -euo pipefail
source ~/wrk/eda_opensources/eda_env.sh
verilator --version | grep -q "Verilator 5.012" \
|| { echo "VERSION_MISMATCH"; exit 1; }
verilator --binary --coverage <vcd_flag> \
-f <file_list> <tb_top> \
--top-module tb_top \
-Mdir designs/<name>/sim_results/obj_dir_<stamp>/ \
-o sim_<stamp> -CFLAGS "-O2" -j 4
./designs/<name>/sim_results/obj_dir_<stamp>/sim_<stamp> \
+rand_seed=<seed> 2>&1 | tee designs/<name>/sim_results/<stamp>.log
verilator_coverage \
designs/<name>/sim_results/obj_dir_<stamp>/coverage.dat \
--write designs/<name>/sim_results/coverage.dat
<vcd_flag> = --trace --trace-structs 当 enable_vcd=true。
Phase 2 — run_sim
scripts/run_verilator.py:timeout 1800 bash <script_path>,追加 exit:<rc>。
Phase 3 — parse_sim_log
scripts/parse_sim_log.py:
$finish at <ns>→sim_time_ns%Error/Assertion failed→assertions_pass=falseexit:<rc>≠ 0 →valid=false
写 sim_summary_<stamp>.json。
Phase 4 — return
返回 JSON。下游 bb-collect-coverage 立即解析 coverage.dat。
收敛 / 失败
| 状态 | 处理 |
|---|---|
valid && assertions_pass |
调 bb-collect-coverage |
| 断言失败 | 开 rtl-needs-fix |
| Phase 2 timeout(1800s) | error="SIM_TIMEOUT" |
VERSION_MISMATCH |
修复 eda_env.sh |
| 编译失败 | 反馈 %Error: <file>:<line> |
资源索引
scripts/render_verilator_sh.py— Phase 1scripts/run_verilator.py— Phase 2scripts/parse_sim_log.py— Phase 3references/verilator_flags.mdGotcha/verilator_pitfalls.md