UVMphase机制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

UVM有一套属于自己的运行机制,名为phase机制,但是对于phase机制由谁产生,phase机制如何运行,经常让大家迷惑,接下来我将介绍一下phase机制

一、phase机制相比于SV带来了哪些便利?

SV无法保证例化的先后和组件在例化后的连接,也无法在底层组件例化前对其进行配置,而phase机制可以实现UVM在仿真阶段的层次化,不仅各个phase之间有先后执行顺序,同一phase之间的层次化组件之间的phase也有先后顺序

二、

调用机制

在这里插入图片描述run_test是顶层uvm_root的函数,uvm_top是uvm_root的唯一实例。phase是由uvm_top的run_test函数所调用,但是uvm_top是何时实例化的?top的run_test又是何时调用的那?
这实际由uvm_pkg完成,看下面代码。

task run_test(string test_name="");
	uvm_root top;
	uvm_coreservice_t cs;
	cs = uvm_coreservice_t::get();
	top = cs.get_root();
	top.run_test();
endtask

实际的例化和调用run_test都由全局函数run_test完成,这里的run_test由uvm_pkg提供。
run_test一般放在module的initial进行块中调用,如果没有提供参数,可以通过在仿真时使用UVM_TESTNAME = ~ 来传递参数,这样就可以灵活选择test。

编译顺序和运行顺序

0时刻前:
完成编译和建模

0时刻时:
完成硬件的always和initial语句,调用run_test开始执行phase机制(build_phase、connect_phase、end_of_elaboration_phase、start_of_simulation),这四个phase都是在0时刻完成

开始仿真(0时刻后):
完成run_phase或对应的12个phase

仿真结束:
执行extract_phase、check_phase、report_phase、final_phase


总结

UVM世界从一个run_test创建

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值