Dskpimc? · 2020年09月02日

UVM平台启动和结束

UVM中通过objection机制来控制验证平台的关闭。在每个phase中,UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真;如果没有,则马上结束当前phase。raise_objection语句必须在第一个消耗仿真时间的语句之前,如$display语句是不消耗仿真时间的,这些语句可以放在raise_objection之前,但是类似@(posedge top.clk)等语句是要消耗仿真时间的。当所有的phase都执行完毕后,就会调用$finish来将整个验证平台关掉。

采用run_test来启动UVM验证平台:

image.png
加参数run_test启动uvm验证平台

run_test语句会创建一个my_case0的实例,并会自动调用my_ case0的main_phase。仔细观察run_test语句,会发现传递给它的是一个字符串。UVM会根据这个字符串创建了其所代表类的一个实例(前提是这个类进行宏注册过了)。在UVM验证平台中,只要一个类使用uvm_component_utils注册且此类被实例化了,那么这个类的main_phase就会被自动调用,所以在driver中,最重要的就是实现main_phase。

UVM也提供对不加参数的run_test的支持:

image.png
不加参数run_test启动uvm验证平台

    在这种情况下,UVM会利用UVM_TESTNAME从命令行中寻找测试用例的名字,创建它的实例并运行,如下所示的代码也可以启动my_case0:

3.png

整个UVM验证平台启动及执行的流程如图所示:
4.png

测试用例启动及执行流程

    启动后,整棵UVM树的结构如图所示。

5.png

完整的UVM树

    uvm_top是一个全局变量,它是uvm_root的一个实例(而且也是唯一的一个实例),而uvm_root派生自uvm_component,所以uvm_top本质上是一个uvm_component,它是树的根。uvm_test_top的parent是uvm_top,而uvm_top的parent则是null。uvm_root的存在可以保证整个验证平台中只有一棵树,所有结点都是uvm_top的子节点。
    

更多相关阅读

芯片验证Systemverilog用例可重用方法
Makefile文件

作者:谷公子
首发博客:https://blog.csdn.net/W1Z1Q/article/details/100864767
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。
推荐阅读
关注数
11186
内容数
1222
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息