验证白皮书中有一点说的不是很明确,在这里做一点补充。
在按照顺序运行task phase时,如果一个phase在平台内完全没有objection被提起,那么这个phase不会消耗仿真时间,但是phase内0时刻的代码依旧能够生效,并不是完全不进入这个phase。
事实上只要仔细想一下,肯定是需要进入0时刻来判断到底有没有objection被raise,这是笔者自己的一个思维误区,在这里做一个记录和share。
举一个常见的例子,我们在reset_phase中常常去做信号的初始化
virtual task reset_phase(uvm_phase phase);
vif.valid <= 0;
endtask
正如上面所说,对valid信号的赋值是能够生效的
这里还有一个点需要注意一下的是如果加上clocking block
如vif.cb.valid <= 0;
这样则是不会生效的,因为需要等待时钟沿。