UVM学习--基本概念篇1
- 三个EDA软件提供商共同支持。
- 通用的验证平台开发,贯穿于验证平台的可重用性。
- 第一种自动化方法和第二种自动化类库的集合。
- 不局限于特定的仿真器
- 提供一些可重用的类减轻复用工作量
- 支持CDV(覆盖率驱动)、CRV(受限随机)验证
- 支持寄存器模型
- 在new时指定parent参数形成树形结构
- 具有phase自动执行的特点
- 准静态实体(从创建开始到仿真结束一直存在)
- 存在控制仿真行为的phase机制
- 始终连接到硬件或者TLM端口
- 动态实体(需要时创建,不需要时销毁,相当于一个function)
- 不存在phase机制,不存在uvm拓扑结构中
- 不会连接到硬件或者TLM端口
- UVM中的phase绝大部分都是自底向上的,即从树叶到树根,只有两个phase是从树根到树叶的(自顶向下)。
- build_phase方法自顶向下执行,以便在顶部(测试)设置的配置可以向下传播到各component中。final_phase方法是自顶向下执行的,以允许top test控制底层final_phase方法的功能。
- run_phase和其他12个小phase是并行执行的,其他都是串行,后面12个小phase之间则是动态运行。
一般来说有两种启动方式,一种是在顶层模块的run_test()中添加测试用例名,一种是在命令行中指定测试用例。例如+UVM_TESTNAME =test1将启动测试用例名为test1的测试用例。
class是一个动态对象,因为它们可以在仿真的生命周期中销毁。特别指出:interface是静态对象,因此只能用于top、模块等静态对象中,driver为动态的对象类,因此driver等类中使用的为virtual interface,通过虚指针指向实际的interface。
- uvm_resource_db采取的是“last write wins”即对同一个配置,最后的写入有效;而uvm_config_db采取的是“parent wins”,它会首先按照层次采取最顶层的配置优先。
- uvm_resource_db给人带来的困惑是,如果高层次和低层次都对同一个配置变量进行了写入,那么在build阶段,由于是采取top-down的执行顺序,低层次的配置写入发生在最后,反而会作为有效值写入。因此uvm_resouce_db无法实现层次化的覆盖,这就不利于集成和复用。
- 另外uvm_resource_db只需要scope字符串参数,同时上下文的set/read中的scope必须保持一致。对于较简单和透明的环境,这一要求并不难,但是对于复杂的和封装完善的环境,这就对用户提出了更高的要求。因为用户需要对底层环境的验证IP了解更多,得知它们采用的scope参数,才能在顶层做出正确的参数匹配才可以完成配置。
-
创建一个实例
-
把实例进行随机化
-
随机化后的实例发送给sequencer
`uvm_rand_send需要创建实例的过程,其他是一样的,只是需要用户自己去创建一个sequence或者sequence item。
12、uvm_transaction和uvm_sequence_item之间的区别?
UVM中的objection机制是允许组件之间的分层状态通信,这有助于决定验证结束的时间。
每个内置phase都有一个内置的objection机制,它为组件和对象提供了一种同步其测试活动的方法,并指示何时可以安全地结束phase,最终确定验证进程的结束。
组件或sequence将在活动开始时raise objection(提起异议),该活动必须在phase结束之前完成,因此将在该活动结束时drop objection(撤销异议)。一旦所有被raise的 objection都被drop,phase就会终止。
一般来说,我们选择在sequencer或者顶层中使用objection,其他地方一般不使用,而使用方法在UVM1.1和UVM1.2中有些许差别。
16、什么是TLM fifo?
简而言之,TLM FIFO是两个UVM组件之间的FIFO,最好是在Monitor和Scoreboard之间。Monitor继续发送DATA,它将存储在TLM FIFO中,Scoreboard可以在需要时从TLM FIFO获取数据。实际上就是包装好的类,隐藏了IMP,减少了函数等,容易上手。
17、什么是analysis_port?
analysis_port (uvm_tlm_analysis_port) 是一种特定类型的事务级端口,可以连接到零个,一个或多个analysis export,组件可以通过该端口调用在另一个组件中实现的方法。
uvm_analysis_port向所有uvm_analysis_imp中实现的方法广播一个值。
uvm_analysis_imp接收uvm_analysis_port广播的所有transaction。
uvm_analysis_export将较低级别的uvm_analysis_imp导出到其父类一级。
18、什么是UVM寄存器模型?为什么需要它?
在验证上下文中,寄存器模型(或寄存器抽象层)是一组类,用于模拟DUT中寄存器和存储器的存储器映射行为,以便于激励生成和功能检查(以及可选的功能覆盖的某些方面)。UVM提供了一组基类,可以扩展它们以实现全面的寄存器建模功能。本质是重新定义了验证平台与DUT的寄存器接口,使得验证人员更好的组织及配置寄存器,简化流程。
因为有了寄存器模型,可以在任意task phase中使用寄存器模型以前门或者后门访问的方式读取配置寄存器的值,可以在某些function phase中以后门访问的方式读取寄存器的值。
欢迎点赞,关注,分享~~, 本文原发于微信公众号【 数字ic小站 】