论文: 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 架构

UCV 架构对比 图1: 不同验证架构的比较 - (a) 传统 UVM (b) 模拟器中心 Cocotb (c) 软件原生 UCV

UCV 的核心洞察是将验证执行与模拟器运行时解耦,使验证逻辑能够独立于模拟器驱动的控制流演进。

三层软件原生架构

  1. HLL 用户 API 层: 为多种语言提供统一的编程接口开发验证组件
  2. 平台运行时层: 定义平台级时序和交互语义
  3. 后端适配器层: 将模拟器特定行为限制在受控边界内

三大关键技术

➀ 软件原生时序与交互

UCV 引入 XClockXData 实现软件原生时序模型:

方法 描述
XClock(pin, thigh, tlow) 主时钟和事件管理器
XEvent(conds, args, sclk, reactors) 注册事件;条件满足时触发 reactor
XEvent(conds, sclk).await 挂起执行直到条件满足
XTrigger(events, sclk) 手动触发指定事件
@XReactor(name) 装饰器将函数绑定为 reactor

四步确定性执行流程

  1. 处理所有待处理的软件事件(时间戳 T0)
  2. 缓冲写入在 T0 提交到模拟器
  3. 调用 HWStep() 将控制转移到模拟器
  4. 返回时按需读取信号并分派新事件

➁ 透明硬件-软件映射

通过 事件注册表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%

关键发现

  1. 软件背景新手表现: 5 名软件背景的本科生在 2 个月内确认了 10 个分支预测 Bug,而有经验的硬件工程师需要 5 个月才能识别 2 个类似的 Bug。

  2. Bug 发现: 11 名贡献者共同发现了 30 个以前未知的 XiangShan Bug(该处理器已被多家公司验证用于流片)。

  3. 覆盖率: 总体达到 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
速度

核心创新

  1. 软件原生时序模型: 在软件事件循环中重新设计事件调度,将模拟器作为可插拔后端
  2. 透明硬件-软件映射: 通过注册表和 XSocket 实现跨域事件同步和事务传输
  3. 非侵入式内省: 通过指针级访问实现高效调试,避免 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” 的技术解读。