微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 请教个UVM中virtual sequence的问题

请教个UVM中virtual sequence的问题

时间:10-02 整理:3721RD 点击:

virtual sequence中定义A,B 两个sequence,这两个sequence的body函数都有对应的pre_body和post_body在virtual sequence的body函数中通过`uvm_do_on的形式启动A,B sequence时,现象如下:
1)A,B 这两个sequence对应的body函数会被执行,而pre_body和post_body不会被执行;
2)virtual sequence的body函数对应的pre_body和post_body会执行。
如果采用手动的方式启动sequence,在virtual sequence的body函数中,先new A,B sequence,然后再通过seq.start启动sequence。A,B两个sequence的pre_body和post_body都能执行,在start后执行的。
麻烦各位同仁指导一二,为什么自动的方式(uvm_do_on)没法执行pre_body和post_body,是否需要特定的配置或语句? 多谢!

看一下cookbook,里面有讲为什么。不建议使用uvm_do, pre_body, post_body。

你去看一下uvm_do的macro的定义,里面有个开关,当使用uvm_do macro时,pre_body,post_body不会被调用,你可以想想为什么uvm默认会这样设置

多谢二位的耐心解答!原来一直走在不建议的路上...学习了,多谢!

感谢两位的耐心解答!原来我一直走在不建议的路上...学习了,多谢!

能解答下为什么默认设置是不执行pre_body和post_body吗?

uvm的一种推荐用法,是在pre_body和post_body中进行raise,drop objection的操作,pre_body和post_body只有在seq被set为default seq时才会执行,而在uvm_do macro中,当前seq是作为top seq中的一个sub seq或seq item进行调用的。理论上testbench的启动与关闭应该由top seq进行控制,并且尽可能只有一对raise和drop进行控制,防止过多的raise,drop引起不必要的问题,所以使用uvm_do时会屏蔽pre_body,post_body。如果想在seq body之前做一些事,可以重载pre_start,post_start task

谢谢分享,学习了!

7楼大牛,学习了

学习了,多谢分享

不太明白 先mark一下

学习了,多谢分享

1,为啥里面两个seq没有执行pre_body和post_body?
因为,在start的参数里有个call_pre_post,默认值是1,表示会调用pre_body和post_body,但是在uvm_do系里的宏里面,该形参传递的是0。所以,没有被调用。
2,为啥顶层的virtual sequence的pre_body和post_body被执行了?
因为,一般情况,顶层的virtual sequence会被设置为default sequence,在start_phase_sequence时,会直接调用start,此时call_pre_post用的是默认值1,所以调用了。

好牛,是看源码后了解的么?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top