模块、子系统、SoC 三级验证差异
更新时间:2026-10-01。新人常以为系统级就是“更大的模块级”,实际三级目标、激励和检查手段完全不同,错配会漏掉互连类 bug。
本文要回答的问题
- 三级分别要证明什么,哪些 bug 只有某级抓得到?
- 激励和 checker 逐级怎么变?
- 精力怎么在三级间分配?
一、三级目标
| 级别 | 核心目标 | 典型手段 |
|---|---|---|
| block | 单元功能完整、所有边角 | 白盒、CRV、断言、细覆盖 |
| subsystem | 模块互连、协议转换、仲裁、端到端数据流 | 多 agent、部分真实模块、互连 check |
| SoC | 启动、地址映射、中断、时钟/电源、软件与真实用例 | 真实场景、固件协同、性能基准 |
二、只有特定级别抓得到的 bug
- block:内部状态机、FIFO 溢出、运算边界。
- subsystem:接口对接错(宽度/协议/字节序)、共享资源死锁、跨模块配置一致性——单模块都对、连起来错。
- SoC:地址映射冲突、中断路由、启动顺序、时钟电源联动、软件可见行为。
三、逐级演化
四、常见坑
- 指望系统级抓模块边角(慢且难定位,应在 block 关)。
- 只做 block,忽视 subsystem 互连,集成期集中爆雷。
- 系统级还沿用细粒度逐位比较,噪音淹没真问题。
- 各级覆盖率口径混用,误判进度。
- 资源全压一级,整体不均衡。
小结
block 关功能、subsystem 关互连、SoC 关真实系统行为,激励逐级真实化、检查逐级端到端化。下一篇 断言绑定与覆盖率检查方法。
总结
模块/子系统/SoC 三级验证不是“同一套放大”:block 级用白盒、CRV、断言和细覆盖证明单元功能与所有边角(内部状态机、FIFO 溢出、运算边界只在这级抓);subsystem 级靠多 agent 和部分真实模块,专抓单模块都对、连起来错的接口对接错(宽度/协议/字节序)、共享资源死锁、跨模块配置一致性;SoC 级用真实场景、固件协同和性能基准,证明启动、地址映射、中断路由、时钟电源联动与软件可见行为。逐级演化中激励越来越真实、checker 越来越偏端到端、细粒度断言逐级让位——切忌指望系统级抓模块边角、只做 block 忽视互连、各级覆盖率口径混用。