第二种:将此sequence作为sequencer的某动态运行phase的default_phase时,starting_phase不为null。 functionvoidmy_case0::build_phase(uvm_phase phase); super.build_phase(phase); uvm_config_db#(uvm_object_wrapper)::set(this,// "env.i_agt.sqr.main_phase",// "default_sequence",// case0_sequence:...
phase总体可以分为function phase和task phase两大类,其中function phase 不消耗仿真时间,task phase 需要消耗仿真时间。如下图所示: 其中除uvm_run_phase 为task phase外,其余的均为function phase,而run_phase 又分为12个与之并行运行的12个小phase,同样这12phase也属于task phase,如下图所示: 在一般的应用中,...
uvm_reg_data_t value; if(starting_phase != null) starting_phase.raise_objection(this); #1000; // set value of registers via uvm_reg::poke() for UVM_BACKDOOR p_sequencer.p_rm.invert.poke(status, {15'h00, 1'b0}); p_sequencer.p_rm.counter.poke(status, {15'h00, 32'h2000f0})...
第⼆种:将此sequence作为sequencer的某动态运⾏phase的default_phase时,starting_phase不为null。function void my_case0::build_phase(uvm_phase phase);super.build_phase(phase);uvm_config_db#(uvm_object_wrapper)::set(this, // "env.i_agt.sqr.main_phase", // "default_sequence", /...
starting_phase.drop_objection(this); endtask `uvm_object_utils(my_sequence) endclass 从而,objection完全与sequence关联在了一起,在其他任何地方都不必再设置objection。 drain_time属于uvm_objection的一个特性。如果只在main_phase中调用set_drain_time函数设置drain_time,但是在其他phase,如configure_phase中没有...
c.uvm_config_db#(uvm_object_wrapper)::set(this, “sqr.main_phase”,”default_sequence”,my_sequence::get_type) ,这种启动方式和第二种类似,只是采用的是 sequence 类名。 taskmy_sequencer::main_phase(uvm_phase phase); ... seq.starting_phase= phase; ...
uvm_config_db#(uvm_objection_wrapper)::set(this,”env_sqr.main_phase”,”default_sequence”,mac_seq::type_id::get()); 当进入到main_phase时,这两个sequence会同步的启动,但是由于mac_seq要config_over事件的到来,所以它并不会马上产生transaction。而cpu_seq则会直接产生transaction,交给cpu_driver。当...
function void my_case0::build_phase(uvm_phase phase); super.build_phase(phase); uvm_config_db#(uvm_object_wrapper)::set(this, "env.i_agt.sqr.main_phase", "default_sequence", case0_sequence::type_id::get()); endfunction `endif ...
uvm_config_db#(uvm_object_wrapper)::set(this,'env.i_agt.sqr.main_phase','default_sequence',my_sequence::type_id::get()); endfunction endclass config_db的set语句就是通知sequencer,让其在运行到main_phase的时候自动启动前面定义的my_sequence,就是这里让sequence自动启动了。如果在这里把default_seq...
starting_phase.raise_objection(this, "Sequence started"); endtask ☐在启动sequence之前,如果要提起objection,则需要先设置starting_phase成员变量。从uvm-1.2开始,不推荐使用starting_phase变量,必须使用set_starting_phase方法设置: task run_phase(uvm_phase phase); ...