UVM实战_3_UVM验证平台的运行

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


前言

本篇内容主要总结UVM实战的第5章内容


一、phase机制

UVM由phase来管理验证平台的运行,这些phase统一以xxxx_phase来命名,且都有一个类型为uvm_phase、名字为phase的参数。

1. task phase与function phase

UVM中的phase按照是否消耗仿真时间,可以分成两大类,一类是function phase, 如build_phase、connect_phase等,这些phase通过函数来实现;另一类是task phase,如run_phase等,消耗仿真时间,通过任务来实现。
如下图所示,灰色背景是task phase,其他为function phase
在这里插入图片描述
上述phase使用频率最高的是build_phase、connect_phase和main_phase。

2. phase的执行顺序

  • 按时间顺序执行:
    上节展示的phase都会按图中的顺序自上而下自动执行,即build_phase->connect_phase->main_phase,这是时间的概念。

注意:
对于function phase来说,在同一时间只有一个phase在执行;
对于task phase来说,run_phase和pre_reset_phase等12个小phase并行运行,如下:

fork
	begin
		run_phase();
	end
	begin
		pre_reset_phase();
		...
		main_phase();
		...
		post_shutdown_phase();
	end
join

对于这12个小phase是按顺序执行的,同一phase在所有的component内必须全部执行完,才可以进入到下一个phase,效果如下图所示。
在这里插入图片描述
还有,run_phase和post_shutdown_phase必须全部执行完,才可以进入到下一个phase:extract_phase

  • 按空间顺序执行:

考虑这样的事情,对于build_phase或者connec_phase,是先执行my_case里的build_phase或者connec_phase还是先执行env的呢?

对于build来说,是先从树根到树叶的过程,即my_case -> env -> agt -> drv
对于其他phase,均是先从树叶到树根的过程 ,即drv -> agt -> env -> my_case

注意:对于耗时的phase,并不是等到“下面”的phase(如driver的run_phase)执行完才执行“上面”的phase(如agent的run_phase),而是将这些run_phase通过fork…join_none的形式全部启动。

3. super.phase的内容

看UVM环境会发现,有时候出现super.xxxx_phase,有时候又不会出现。那哪些需要加上super,哪些又可以不加呢?
答案就是除了build_phase或者扩展自用户自定义的类,其他的phase完全可以不必加上super.xxxx_phase

  • build_phase是因为设置了super.build_phase可以通过自动获取通过config_db::set设置的参数。
  • 自定义的的类,比如base_test类,且在其某个phase,如connect_phase中定义了一些重要内容,那么在具体测试用例的connect_phase中就不应该省略super.connect_phase。

4. phase的跳转

在前面的表述中,各个phase都是顺序执行的,前一个phase执行完才执行后一个。实际上phase之间也可以互相跳来跳去。

举例从main_phase到reset_phase,验证平台检测到reset_n信号为低电平,则马上从main_phase跳转到reset_phase,代码如下:

task my_driver::reset_phase(uvm_phase phase)
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值