Research Article
UCV: 通过软件原生优化普及和加速硬件验证
论文: Democratizing and Accelerating Hardware Verification with Software-Native Optimization
会议: ISCA 2026
核心贡献: UnityChip Verification (UCV) - 软件原生硬件验证平台
概述
硬件验证占据芯片开发约 70% 的工作量,验证工程师与设计师比例可达 5:1。传统硬件验证框架(如 UVM)强调资产复用,而新兴的基于软件的框架(如 Cocotb)将验证嵌入通用编程语言以提高可用性。然而,这些框架仍然是以模拟器为中心的,依赖模拟器控制的时序、事务生命周期和可观测性,这限制了验证的进一步普及和加速。
本文提出 UnityChip Verification (UCV),一个软件原生验证平台,将事件调度和控制重新置于显式的软件事件循环中,同时将模拟器视为可插拔的后端。
核心挑战
UCV 识别并解决了三个关键挑战:
❶ 编程范式差距
硬件遵循时钟驱动的事件驱动时序模型,而软件以顺序方式执行,没有原生的时钟概念。现有机制基于模拟器执行原语,只能满足一侧需求:
- Cycle-accurate step-peek(如 PyMTL、ChiselTest):提供可预测的同步语义,但限制为粗粒度的周期边界交互
- Callback-driven(如 Cocotb):扩展了表达能力,但将回调时序委托给模拟器,可能导致读取到瞬态或过时的值
❷ 验证组件的可组合性
现有的硬件验证 IP(VIP)生态系统已成熟且广泛采用,但这些组件与 RTL 模拟器耦合,依赖事件驱动控制流和基于事务的数据传输。软件框架缺乏事件同步和事务调度机制,难以直接复用这些组件。
❸ 性能与可调试性的权衡
高性能模拟器通过合并计算流和减少中间状态来优化性能,而调试需要插入调试代码和跟踪中间状态,这与性能优化相冲突。例如,Verilator 启用 VPI 调试会导致 70% 性能损失和程序大小翻倍。
UCV 架构
图1: 不同验证架构的比较 - (a) 传统 UVM (b) 模拟器中心 Cocotb (c) 软件原生 UCV
UCV 的核心洞察是将验证执行与模拟器运行时解耦,使验证逻辑能够独立于模拟器驱动的控制流演进。
三层软件原生架构
- HLL 用户 API 层: 为多种语言提供统一的编程接口开发验证组件
- 平台运行时层: 定义平台级时序和交互语义
- 后端适配器层: 将模拟器特定行为限制在受控边界内
三大关键技术
➀ 软件原生时序与交互
UCV 引入 XClock 和 XData 实现软件原生时序模型:
| 方法 | 描述 |
|---|---|
XClock(pin, thigh, tlow) |
主时钟和事件管理器 |
XEvent(conds, args, sclk, reactors) |
注册事件;条件满足时触发 reactor |
XEvent(conds, sclk).await |
挂起执行直到条件满足 |
XTrigger(events, sclk) |
手动触发指定事件 |
@XReactor(name) |
装饰器将函数绑定为 reactor |
四步确定性执行流程:
- 处理所有待处理的软件事件(时间戳 T0)
- 缓冲写入在 T0 提交到模拟器
- 调用
HWStep()将控制转移到模拟器 - 返回时按需读取信号并分派新事件
➁ 透明硬件-软件映射
通过 事件注册表 和 XSocket 实现跨域协调:
- 事件同步: 将硬件事件映射为软件可见的协调点
- 事务传输: 将多周期 VIP 事务提升为软件驱动的交互流
XSocket 使用有界线程池分派传输,将同步阻塞等待转换为异步阻塞,避免模拟器-软件进度死锁。
➂ 非侵入式内省层
UCV 通过稳定的低级指针钩子访问优化的电路状态,按需计算调试信号,无需在电路中保留额外的中间状态:
| 特性 | 传统 VPI/DPI | UCV MemD |
|---|---|---|
| 信号访问方式 | 模拟器接口调用 | 直接内存指针 |
| 运行时开销 | 高 | 低 |
| 性能影响 | 70% 性能损失 | 可忽略 |
| 多实例支持 | 有限 | 原生支持 |
性能评估
调试性能 (Q1)
图: XData 调试性能对比
在 XiangShan、CoupledL2 和 RocketChip 上的测试结果显示:
| 指标 | UCV MemD vs VPI | UCV MemD vs Cocotb |
|---|---|---|
| 模拟速度提升 | 4.8× - 17.5× | 16.3× - 25.2× |
| 峰值内存降低 | 13% - 77% | 46% - 77% |
多实例可扩展性 (Q2)
图: 并行测试 - 实例 vs 进程
多线程方法相比多进程实现:
- XiangShan: 内存使用减少 52%
- CoupledL2: 边际改善(主要由状态存储主导)
XSocket 事务吞吐量 (Q3)
| 模块 | 工具 | 验证代码行数 | 编译时间 | 执行时间 |
|---|---|---|---|---|
| NoC | UCV+UVM | 13,766 | 24.06s | 15.41s |
| NoC | UVM | 15,664 | 15.32s | 18.47s |
| ICache | UCV+UVM | 7,211 | 13.69s | 94.36s |
| ICache | UVM | 8,063 | 19.14s | 106.12s |
UCV XSocket 相比纯 UVM 基线:
- 运行时速度提升 16.6%
- 代码量减少 12%
软件时序开销 (Q4)
| 设计 | 相对 Verilator 基线开销 |
|---|---|
| XiangShan | < 3% |
| CoupledL2 | 14% - 55% |
| RocketChip | 14% - 55% |
大型设计在模拟器执行上花费大部分时间,因此时序支持的开销可忽略。
社区研究案例
参与者概况
为期六个月的社区研究(IRB 批准)结果显示:
| 类别 | 社区注册 | 测试用例贡献 | Bug 报告 | 行覆盖率 |
|---|---|---|---|---|
| 总体 | 520 | 25 (26.3%) | 11 | 98.30% |
| Python 经验 | 463 | 24 | 10 | 97.73% |
| UVM 经验 | 64 | 5 | 4 | 100% |
| 学生 | 271 | 20 | 6 | 97.45% |
| 工程师 | 249 | 5 | 5 | 100% |
关键发现
-
软件背景新手表现: 5 名软件背景的本科生在 2 个月内确认了 10 个分支预测 Bug,而有经验的硬件工程师需要 5 个月才能识别 2 个类似的 Bug。
-
Bug 发现: 11 名贡献者共同发现了 30 个以前未知的 XiangShan Bug(该处理器已被多家公司验证用于流片)。
-
覆盖率: 总体达到 98.3% 的行覆盖率。
代表性案例
| 案例 | 模块 | 工具 | 背景 | 持续时间 | Bug 发现 |
|---|---|---|---|---|---|
| CS#1 | BPU | UVM | HW 专家 | 5 个月 | 2 |
| CS#3 | BPU | UCV | SW 新手 | 2 个月 | 10 |
| CS#6 | NoC | UCV+ | SW 初级 | 2 周 | - |
| CS#9 | Decoder | UCV | HW 专家 | 1 个月 | 12 |
技术亮点总结
UCV 首次同时提供:
| 特性 | UVM | Cocotb | ChiselTest | UCV |
|---|---|---|---|---|
| 软件原生打包 | ✗ | ✔ | ✔ | ✔ |
| 事件驱动验证 | ✔ | ✗ | ✗ | ✔ |
| 硬件调试器 VIP | ✔ | ✔ | ✗ | ✔ |
| 速度 | 慢 | 慢 | 中 | 快 |
核心创新
- 软件原生时序模型: 在软件事件循环中重新设计事件调度,将模拟器作为可插拔后端
- 透明硬件-软件映射: 通过注册表和 XSocket 实现跨域事件同步和事务传输
- 非侵入式内省: 通过指针级访问实现高效调试,避免 VPI/DPI 开销
结论
UCV 通过软件原生优化方法,成功实现了硬件验证的普及化和加速:
- 性能: 相比 Cocotb 实现 25× 运行速度提升和 76% 内存使用降低
- 组件复用: 复用现有组件时吞吐量提高 16.6%
- 社区影响: 26.3% 的软件背景新手贡献者可运行测试,共同发现 30 个新 Bug
- 门槛降低: 软件工程师可在 2 个月内有效参与硬件验证
UCV 将硬件验证转变为现代软件工作流程,扩大了能够贡献有意义测试的人员范围,为开源硬件生态系统和芯片设计民主化提供了重要支持。
参考
- 论文: Democratizing and Accelerating Hardware Verification with Software-Native Optimization
- 会议: ISCA 2026
- 测试平台: XiangShan (3.4M LOC), RocketChip, CoupledL2
- 后端支持: Verilator, VCS, GHDL
本文是对 ISCA 2026 论文 “Democratizing and Accelerating Hardware Verification with Software-Native Optimization” 的技术解读。