get_imp() == uvm_shutdown_phase::get()) begin if(run_count == 0) begin phase.jump(uvm_pre_reset_phase::get()); run_count++; end end endfunction : phase_ready_to_end endclass : idle_reset_test_c 在final_phase期间,测试执行一个phase跳回到pre_reset_phase。这会触发上面显示的...
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)还可以向后跳转,如m...
以最常用的main_phase到reset_phase的跳转为例,假如在验证平台中监测到reset_n信号为低电平,则马上从main_phase跳转到reset_phase。该功能可以通过 begin@(negedgerst_n);phase.jump(uvm_reset_phase::get());end 来实现。jump函数的参数必须是一个uvm phase,但往前跳转从build到start_of_simulation的function ph...
其实jump并不是唯一的选择。在选择run_phase的方案下,一样可以通过做一个always on的等待reset assert...
reset_phase主要做一些清理工作,并等待复位完成。 跳转中最难的地方在于跳转前后的清理和准备工作。如上面的运行结果中的警告信息就是因为没有及时对objection进行清理。 对于scoreboard来说,这个问题可能尤其严重。在跳转前,scoreboard的expect_queue中的数据应该清空,同时要容忍跳转后DUT可能输出一些异常数据。 jump函数的...
默认情况下各phase是从上到下按时间顺序执行,但可以自定义做必要的跳转,如在main_phase执行过程中,突然遇到reset信号被置起,可以用jump()实现从mian_phase到reset_phase的跳转: phase.jump(uvm_reset_phase::get())taskmy_driver::main_phase(uvm_phase phase);`uvm_info("driver","main phase",UVM_LOW)for...
(7)super.build_phase:自动获取通过config_db::set设置的参数。如果要关掉这个功能,可以在自己的build_phase中不调用super.build_phase。 (8)对于直接扩展自uvm_component的类,出build_phase外,完全可以不必加上super.xxxx_phase语句。 (9)jump函数的参数,uvm_pre_reset_phase::get()后的所有phase都可以。
其实jump并不是唯一的选择。在选择run_phase的方案下,一样可以通过做一个always on的等待reset assert...
并不一定上述所有的 phase 都会用到,考虑个小问题,已经有了 9 主 phase,为什么还要引入 12 子phase 呢,这是为了有时候需要更加细化的进行一些 driver 工作,比如对 DUT 进行 reset 复位,如果我们在 reset_phase 进行了复位相关的操作,我们在运行到后续 phase 时,只需要 jump 到 reset_phase, 后续 phase 会依...
但是有了这些小的phase之后,分别在scoreboard和reference model及其它部分(如driver,monitor等)的reset_phase写好相关代码,之后想做一次复位操作,那么只要通过phase的jump,就会自动的条状回reset_phase。 第二个问题的:这12个动态运行的phase与run_phase之间是并列的关系,其运行结构大概如下所示:...