本文
芯片验证系列文章主要分为三部分:验证工程师与芯片验证、SV学习笔记、UVM学习笔记。此为 验证工程师与芯片验证 部分第二篇,主要介绍主要介绍测试平台、激励产生器、监测器、比较器。
版本 | 说明 |
---|---|
0.1 | 初版发布 |
参考
名称 | 作者 | 来源 |
---|---|---|
《芯片验证漫游指南》 | 刘斌 | 书籍 |
《全面的功能验证:完整的工业流程》 | Bruce Wile , John C. Goss , Wolfgang | 书籍 |
专业术语与缩略语
缩写 | 全称 | 说明 |
---|---|---|
tb | testbench | 测试平台 |
drv | driver | 驱动器 |
mon | monitor | 监测器 |
chk | checker | 比较器 |
ref | Reference Model | 参考模型 |
测试平台
什么是测试平台?
- 测试平台是整个验证系统的总称,包括验证结构中的各个组件、组件之间的连接关系、测试平台的配置和控制。
- 广义来讲,测试平台还包括编译仿真流程、结果分析报告和覆盖率检查等。
- 狭义来讲,测试平台主要关注结构和组件,如何产生所需输入,以及设计的功能检查。
经典的测试平台
经典的测试平台包含Clock/Reset组件、Driver组件、Monitor组件、Checker组件,其特性如下:
- 各个组件相互独立。
- 验证组件与设计之间需要连接。
- 验证组件之间也需要相互通信。
- 验证环境也需要时钟和复位信号的驱动。
验证语言趋势
- SystemVerilog使用比例为主导地位。
- SystemC和C/C++在验证部分也有应用空间。
- 验证方法学UVM的统一已经形成。
Clock/Reset组件
Clock/Reset组件就是指在testbench中产生时钟和复位信号,驱动DUT和Driver。严格来讲,算不上一个独立的组件,此功能在testbench完成。
Driver组件
- Driver主要职责是模拟与DUT交互模块的接口协议,模拟真实的接口信号驱动DUT。
- Driver的激励驱动要符合接口协议,但不局限于真实的硬件行为,可使用抽象的语言方法产生丰富的测试激励。
- 对于接口协议,如果是成熟的商业协议,建议使用第三方的商用接口ip/vip,这很大程度上节省时间和人力。
- 如果接口协议为非标准,应该查看功能描述文档,明确接口协议。
- Driver主要是与DUT相连接,也应该有时钟和复位的输入,确保driver的驱动激励与DUT接口保持时序同步。
- Driver与DUT的连接包含两部分:initiator(发起器)和responder(响应器)。发起器是指主动发起DUT接口驱动,响应器是指接收DUT接口信号,做出响应。
Monitor组件
监测DUT的信号
Monitor主要功能是监测DUT的边界或者内部信号,并且经过打包处理传送到其他组件:
- DUT边界信号:对于系统信号如时钟,可以监测频率变化;对于总线信号,可以监测传输类型和数据内容,以及总线时序是否符合协议。
- DUT内部信号:从灰盒验证的手段来看,往往需要监测内部关键信号,来反馈给Driver控制激励产生,或者完成覆盖率收集,以及其他内部功能检查。
Monitor的结构建议
- 独立性 :建议不同接口信号采用独立的Monitor。
- 复用性 :尽可能将组件做成验证IP,方便复用到其他环境。
- 可维护性 :保持代码和验证环境的可维护性。
- 封装性 :将Monitor和Driver一一对应,封装为一个小的单元,这样的小单元可以按照统一的方法实现,但又各自独立。
监测内部信号的建议
- 如没有特殊需求,采取灰盒验证,而非白盒。
- 监测内部信号应该尽量少(收集覆盖率除外),且应当为状态信号,不建议监测中间变量信号,因为其本身因时序问题信号留存不稳定,这种不稳定有可能影响到验证环境。
- 可以通过接口信息计算的,尽量减少监测内部信号,这样有悖于假定设计有bug的验证思想,如需采用内部信号,也要以动态检查或断言形式确保其逻辑正确性。
Checker组件
checker主要功能
checker主要承担模拟设计和功能检查的任务,主要包含以下功能:
- 接收缓存各个monitor收集的数据。
- 将DUT接口数据驱动给Reference Model,参考模型扮演了模拟DUT功能的角色。
- 通过数据比较,检查DUT输出接口是否与Reference Model产生的期望数据一致。
- 检查过程中保存整理验证信息,纳入检查报告中,便于仿真后的追溯。
总结来讲,Checker主要负责数据接收缓存、参考模型和检查报告。
checker比较方式
对于checker的数据比较,又可以分为两类:
- 线上比较(Online Check): 仿真时收集数据与参考模型实时比较,实时报告。
- 线下比较(Offline Checker): 将仿真时的数据结果保存到文件中,仿真结束后通过脚本或其他手段,进行数据比较。
checker实现结构建议
- 对于复杂的系统,建议集中管理checker,将不同monitor信息汇集于此,检查各个模块的功能,统一输出报告。
- monitor和driver相对独立且一一对应,建议封装在agent单元组件,而checker在验证环境中心化位置。
文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。