UVM中phase的执行顺序

1 UVM中引入phase的原因

代码的书写顺序会影响代码的实现(代码之间存在依赖关系,如代码B依赖于代码A),所以区分出build_phase、connect_phase等,让被依赖的phase(代码A)先执行,依赖的phase(代码B)后执行,这样可以解决因代码顺序杂乱可能会引发的问题。

2 UVM中phase的执行顺序

  1. 按上图所示顺序自上而下执行不同phase,且同类phase执行完后,需要进行等待同步,然后才能执行下一类phase。而同类phase中不同component在UVM树种执行顺序如下:
    1. 直系关系的component
      1. build_phase:在UVM树中依据自上而下的顺序启动,顺序运行
      2. 除了build_phase之外的function phase:在UVM树中依据自下而上的顺序启动,顺序运行
      3. task_phase:在UVM树中依据自下而上的顺序启动,同时运行(通过fork…join_none多线程方式)
    2. 兄弟关系的component:在UVM树中依据字典序
    3. 叔侄关系的component:在UVM树中依据深度优先(即优先侄component执行)

注意:深度优先和广度优先的概念推荐观看这个视频:https://www.bilibili.com/video/BV1T64y147r1/

3 UVM中引入objection的原因

上文提到代码会依据不同phase的顺序自上而下执行,且同类phase执行完后,需要进行等待同步。而引入objection就是为了更好的控制同类phase中执行代码的同步用的。

4 UVM中引入domain的原因

体现不同component的独立性。例如,把两个时钟域隔开, 这样两个时钟域内的各个动态运行( run_time) 的phase就可以不必同步了。使用该机制可以搭建多时钟域DUT的UVM仿真平台。

注意:domain只能隔离run-time的phase, 对于其他phase, 其实还是同步的, 即两个domain的run_phase依然是同步的, 其他的function phase也是同步的。

5 参考资料

UVM实战(卷一) 张强 编著 机械工业出版社


如需了解更多相关内容,欢迎关注“多读点书”,让我们一起阅读,一起成长。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值