了解UVM平台的一些相关知识
需要知道以下的一些晦涩要求
- uvm原则
- 验证平台中所有的组件应该派生自UVM中的类
- uvm机制
- phase机制
- 一般而言,从验证平台的构建,到配置,到连接,再到运行,最后需要一定的先后顺序。phase 可以满足这个需求。UVM中phase的设计哲学,在于不同时间做不同的事情。其中phase的自动执行的功能极大地方便了用户,phase的引入很大程度上解决了因为代码顺序杂乱可能会引发的问题。 因为连接的前提是所有的组件已经实例化,在phase机制中 实例化在build_phase 中实现,紧接着在connect_phase 中实现自动连接。其中的自动连接和科学的分区设计不言而喻。一定程度上减少平台开发者的工作量。
- object机制
- objection控制task phase的运行和终止 (所以在执行task phase 语句时 应该先执行phase.ralse_objection(this) 执行结束之后要执行 phase.drop_objection(this) ) 否则task phase 将不会被平台执行
- factory机制
- 可以在不更改代码的情况下实现不同对象的替换(实现了代码的复用),factory机制与override机制联合使用实现对象的替换
- config 机制
- 实现将虚拟接口句柄从静态验证平台模块传递到UVM object类中
- virtual interface的传递 使用config_db机制,具体包括set(在顶层中使用)和get(在对应的组件中使用)方法。
- TLM机制
- 建立专门的通信信道,避免通信出现混乱。每个信道相互独立互不影响。
- sequence机制
- 作用:控制并产生一系列的事务,并将事务发送给driver的一套机制
- 功能:
- 检测仲裁队列里是否有某个sequence发送transaction的请求;
- 检测driver是否申请transaction。
- field_automation机制
- 为了方便用户对事务进行打印、复制、打包、解压、比较、记录等一系列功能而建立的一套服务机制。(简化验证工程师的工作量 使得整个格式完整统一)
- 等
- phase机制
- uvm组件的功能
- DUT: 待测设计
- driver: 将获取的事务转化为pin级信号驱动DUT
- squencer:启动sequence产生事务,并将事务发送给driver
- monitor: 检测接口上的有效信号(包括被测设计的输入信号和输出信号),并将pin级的信号事务转化为事务级的数据包,再发送到analysis组件(包括reference model、scoreboared )进行分析和产生报告。
- agent: 将sequencer、driver和monitor封装起来,连接sequencer与driver。
- model: 模拟DUT的行为,根据激励来产生结果,该结果会送入scoreboard中做对比。
- scoreboard:比较预期的结果与DUT的输出结果是否一致。(也可以将功能覆盖率 嵌入到这个模块当中 实现覆盖率的收集)
- environment:通过某种方式将多个agent、reference model、scoreboard以及其他连接组件和配置组件连接起来。
- test_top:实例化env,配置env,启动测试平台。
- uvm宏
- uvm_do系列宏
- uvm_info宏
- 等
- 整体架构图
- uvm树