Files
SLWChipVerify/README.md
2026-04-19 16:14:05 +08:00

260 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`: 自动时序激励演示 DUT
- `examples/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`
## 快速开始
```bash
./slwchipverify/one_click_verify.sh
```
脚本会交互询问:
- Verilog 目录
- 输出目录
- 仿真周期、时钟周期、复位周期
随后自动完成:
- 递归扫描 `.v` 文件并解析模块结构
- 自动识别或选择顶层模块
- 自动生成 smoke testbench
- 自动调用 `iverilog + vvp` 仿真
- 自动生成 VCD 波形文件
也可以用非交互模式:
```bash
python3 slwchipverify/one_click_verify.py \
--dir simple_cpu \
--top simple_cpu \
--out slwchipverify_auto \
--cycles 40 \
--period 10 \
--reset-cycles 2
```
批量模式(自动跑所有候选顶层模块):
```bash
python3 slwchipverify/one_click_verify.py \
--cycles 40 \
--period 10 \
--reset-cycles 2 \
--batch-report slwchipverify/auto_batch/batch_summary.json
```
也可以直接通过启动脚本透传参数:
```bash
./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` 目录下执行:
```bash
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
```
成功时输出示例:
```text
[SLWChipVerify] PASS: 4/4 cases
[SLWChipVerify] Report written: .../slwchipverify/and_gate_report.json
```
时序模式示例(使用 `simple_cpu/simple_cpu.v`
```bash
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`
```bash
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
```bash
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
```bash
python3 slwchipverify/slwchipverify.py run \
-d simple_cpu/simple_cpu.v \
--top simple_cpu \
--spec slwchipverify/examples/simple_cpu_window_modes_spec.json
```
随机激励 + 可复现种子 + CI 报告导出:
```bash
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 仓库可用性验证示例:
```bash
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)`,用于轻量回归与冒烟验证
后续可扩展到事务级激励、功能覆盖点与协议检查器。
```