1.phase 执行后还可以在执行一次前面的phase,phase之间可以跳来跳去。

2.例子,监测到reset_n 信号为低,则从main_phase 跳转到reset_phase。

1)driver:

UVM:5.1.7 phase 的跳转_数据

reset_phase 做一些清理工作,并等待复位。


2)top_tb:

UVM:5.1.7 phase 的跳转_数据_02


3)my_case0:

UVM:5.1.7 phase 的跳转_数据_03


4)结果:

UVM:5.1.7 phase 的跳转_数据_04

UVM_WARNING:因为在my_driver 中jump时,没有把my_case0的objection 撤销。


3.验证平台phase 运行图如下:

UVM:5.1.7 phase 的跳转_数据_05

1)灰色区域出现两次。

2)最难的地方在于跳转前后的清理和准备工作。objection杜宇scoreboard 来说,尤其严重。调整前,scoreboard 的expect_queue 的数据应该清空。


4.jump 的原型:

UVM:5.1.7 phase 的跳转_数据_06


1)jump 的参数必须是一个uvm_phase 类型的变量。有如下:(有些不能给jump 用)

UVM:5.1.7 phase 的跳转_数据_07

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。