验证工程师与芯片验证(二)

本文

芯片验证系列文章主要分为三部分:验证工程师与芯片验证、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。