先分析前面的:
上一节中虽然输出了"main_phase is called",但是"data is drived"并没有输出。但是既然进入了main_phase,应该会把这一整个任务执行完成才对,但是这里好像在执行的过程中被外力kill掉了?
UVM中通过objection来控制验证平台的关闭
在上一节中并没有调用finish语句,但是在运行到一半的时候仿真平台确实关闭了。
这是因为在每个phase中,UVM会检查是否会有objection被提起
(raise_objection),
如果有,那么等待这个objection被撤销(drop_objection)后停止仿真
如果没有,则马上结束当前phase
加入了objection机制的driver代码如下:
可以看到整个main_phase被包含在14行起objection和28行起objection之间,这样就能确保整个phase能执行完成。
其中raise_objection必须在main_phase中第一个消耗仿真时间的语句之前。
比如$display语句是不消耗仿真时间的,这些语句可以放在raise_objection之前
但是如果是@(posedge top.clk)等语句是要消耗仿真时间的。