1.phase 执行后还可以在执行一次前面的phase,phase之间可以跳来跳去。
2.例子,监测到reset_n 信号为低,则从main_phase 跳转到reset_phase。
1)driver:
reset_phase 做一些清理工作,并等待复位。
2)top_tb:
3)my_case0:
4)结果:
UVM_WARNING:因为在my_driver 中jump时,没有把my_case0的objection 撤销。
3.验证平台phase 运行图如下:
1)灰色区域出现两次。
2)最难的地方在于跳转前后的清理和准备工作。objection杜宇scoreboard 来说,尤其严重。调整前,scoreboard 的expect_queue 的数据应该清空。
4.jump 的原型:
1)jump 的参数必须是一个uvm_phase 类型的变量。有如下:(有些不能给jump 用)
2)不是所有phase都是jump参数。比如 uvm_build_phase::get()就会报错:
3)换成uvm_run_phase::get(),也会报错。因为run_phase 是和12小的并行的。
4)uvm_pre_reset_phase 之后的所有phase 都可以。
5)还可以向后跳转,如main_phase跳转到shutdown_phase。也可以是函数phase,如main_phase跳到final_phase。