2.2.3 加入objection机制
先分析前面的:
上一节中虽然输出了"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)等语句是要消耗仿真时间的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步