SLWChipVerify
SLWChipVerify 是一个轻量级芯片验证 EDA 工具(MVP),支持 Verilog 组合逻辑和时序逻辑验证。
功能
- 读取 JSON 验证规格
- 自动生成 testbench
examples/simple_cpu_seq_spec.json: 时序逻辑(simple_cpu)示例examples/simple_cpu_eventually_spec.json: 时序窗口断言(eventually)示例examples/simple_cpu_window_modes_spec.json: 时序窗口断言(always/never/until)示例examples/seq_auto_demo.v: 自动时序激励演示 DUTexamples/seq_auto_demo_spec.json: 自动时序激励演示规格examples/seq_random_demo_spec.json: 随机激励+固定种子示例examples/github_cpu_validation/projects.json: GitHub 热门 CPU 项目验证清单examples/github_cpu_validation/run_github_cpu_validation.py: GitHub 热门 CPU 自动验证脚本examples/github_cpu_validation/README.md: GitHub 热门 CPU 示例说明与打包方式
环境要求
vvp
快速开始
./slwchipverify/one_click_verify.sh
脚本会交互询问:
- Verilog 目录
- 输出目录
- 仿真周期、时钟周期、复位周期
随后自动完成:
- 递归扫描
.v文件并解析模块结构 - 自动识别或选择顶层模块
- 自动生成 smoke testbench
- 自动调用
iverilog + vvp仿真 - 自动生成 VCD 波形文件
也可以用非交互模式:
python3 slwchipverify/one_click_verify.py \
--dir simple_cpu \
--top simple_cpu \
--out slwchipverify_auto \
--cycles 40 \
--period 10 \
--reset-cycles 2
批量模式(自动跑所有候选顶层模块):
python3 slwchipverify/one_click_verify.py \
--cycles 40 \
--period 10 \
--reset-cycles 2 \
--batch-report slwchipverify/auto_batch/batch_summary.json
也可以直接通过启动脚本透传参数:
./slwchipverify/one_click_verify.sh --dir simple_cpu --batch --out slwchipverify/auto_batch
批量模式输出说明:
- 每个顶层模块会在输出目录下生成独立子目录(包含该模块 TB、仿真可执行文件、日志、VCD)
- 根输出目录下生成
batch_summary.json(或--batch-report指定路径) - 返回码:全部通过返回
0,若任一模块失败返回1
B) 规格驱动流程(高级)
在 Verilog-Learn 目录下执行:
python3 slwchipverify/slwchipverify.py run \
-d and-gate/top.v \
--top top \
--spec slwchipverify/examples/and_gate_spec.json \
--report slwchipverify/and_gate_report.json \
--keep \
--workdir slwchipverify/build \
--dump-vcd and_gate_verify.vcd
成功时输出示例:
[SLWChipVerify] PASS: 4/4 cases
[SLWChipVerify] Report written: .../slwchipverify/and_gate_report.json
时序模式示例(使用 simple_cpu/simple_cpu.v):
python3 slwchipverify/slwchipverify.py run \
-d simple_cpu/simple_cpu.v \
--top simple_cpu \
--spec slwchipverify/examples/simple_cpu_seq_spec.json \
--report slwchipverify/simple_cpu_seq_report.json
自动时序激励示例(binary_count):
python3 slwchipverify/slwchipverify.py run \
-d slwchipverify/examples/seq_auto_demo.v \
--top seq_auto_demo \
--spec slwchipverify/examples/seq_auto_demo_spec.json
窗口断言示例(N 周期内 eventually):
python3 slwchipverify/slwchipverify.py run \
-d simple_cpu/simple_cpu.v \
--top simple_cpu \
--spec slwchipverify/examples/simple_cpu_eventually_spec.json
窗口断言全集示例(always/never/until):
python3 slwchipverify/slwchipverify.py run \
-d simple_cpu/simple_cpu.v \
--top simple_cpu \
--spec slwchipverify/examples/simple_cpu_window_modes_spec.json
随机激励 + 可复现种子 + CI 报告导出:
python3 slwchipverify/slwchipverify.py run \
-d slwchipverify/examples/seq_auto_demo.v \
--top seq_auto_demo \
--spec slwchipverify/examples/seq_random_demo_spec.json \
--report slwchipverify/random_report.json \
--junit slwchipverify/random_junit.xml \
--csv slwchipverify/random_cases.csv
GitHub 热门 CPU 仓库可用性验证示例:
python3 slwchipverify/examples/github_cpu_validation/run_github_cpu_validation.py
JSON 规格格式
1) 组合逻辑(truth_table)
{ "inputs": ["a", "b"], "outputs": ["f"], "cases": [ { "name": "00", "in": {"a": 0, "b": 0}, "out": {"f": 0} } ] }
说明:
- `inputs` / `outputs` 可以是字符串数组,也可以使用对象指定位宽:
- `{"name": "data", "width": 8}`
- 值支持:
- 整数:`15`
- 常见前缀:`0b1010` / `0x1f` / `0o17`
- Verilog 字面量:`8'h1f` / `4'b1010`
### 2) 时序逻辑(sequential)
```json
{
"kind": "sequential",
"clock": {"name": "clk", "period_ns": 10, "initial": 0},
"reset": {"name": "rst", "active": 1, "cycles": 2},
"inputs": [],
"outputs": [],
"observes": [
{"name": "cnt", "expr": "dut.cnt", "width": 4}
],
"max_cycles": 6,
"auto_stimulus": {
"enabled": true,
"start_cycle": 0,
"mode": "random",
"seed": 20260419
},
"assertions": [
{"name": "reset0", "cycle": 0, "expect": {"cnt": 0}},
{"name": "inc3", "cycle": 3, "expect": {"cnt": 2}},
{
"name": "eventually_hit_3",
"cycle": 2,
"mode": "eventually",
}
]
}
- `clock`: 时钟定义(名称、周期、初值)
- `reset`: 复位定义(名称、有效电平、保持周期)
- `assertions.mode`: `cycle`(默认)/ `eventually` / `always` / `never` / `until`
- `assertions.within`: 窗口模式(eventually/always/never/until)使用,表示窗口宽度(从 `cycle` 起算 N 周期内)
- `assertions.until_expect`: `until` 模式必填,表示终止条件;在终止条件满足前,`expect` 必须持续成立
- `auto_stimulus`: 自动时序激励配置,支持 `binary_count` 和 `random`
- `auto_stimulus.seed`: 随机激励种子,保证可复现
覆盖率统计:
CI 集成报告:
- `--junit`: 导出 JUnit XML
- `--csv`: 导出逐用例 CSV
## GitHub Actions 示例
仓库已提供示例工作流:
- `.github/workflows/slwchipverify-ci.yml`
- 自动运行组合与时序验证
- 直接消费 `--junit` 产物并生成 GitHub Checks 测试结果
- 读取 `--csv` 并写入 Job Summary
- 上传 JSON/JUnit/CSV 报告为构建产物
```bash
./package_slwchipverify_source.sh
脚本会自动生成 ZIP 源码包(默认在 `dist/` 目录),包含:
- `slwchipverify/` 全部源码与示例
- `.github/workflows/slwchipverify-ci.yml`(如果存在)
可直接将 ZIP 解压后上传到 GitHub 仓库,或在本地解压后 `git init` / `git add` / `git commit` 推送。
## 返回码
- `0`: 全部用例通过
- `1`: 有用例失败
- `2`: 工具错误(规格错误、编译失败、仿真错误、超时等)
## 当前限制
- 时序模式当前不包含 UVM、约束随机激励、功能覆盖组等高级能力
- 随机激励当前基于仿真器 `$random(seed)`,用于轻量回归与冒烟验证
后续可扩展到事务级激励、功能覆盖点与协议检查器。
Description
Languages
Python
96.8%
Verilog
2.9%
Shell
0.3%