Hello,
I have a basic question in all other tests ( apb_test_1, apb_test_2, apb_test_3 )
extending from apb_base_test. I have separate sequences for each test
apb_test_1 has apb_sequence_1 which need to be run in sequencer
apb_test_2 has apb_sequence_2 which need to be run in sequencer.
My question is since I am extending these tests from apb_base_test,
can I skip these
// 1. apb_env env; virtual dut_if if;
// 2. function new
// 3. build_phase
and directly write run_phase() method, and start the corresponding sequencer
OR
Do I need to write all 1,2,3 above?
JeffD
class apb_base_test extends uvm_test;
`uvm_component_utils(apb_base_test);
apb_env env;
virtual dut_if vif;
function new(string name = "apb_base_test", uvm_component parent = null);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase);
env = apb_env::type_id::create("env", this);
if (!uvm_config_db#(virtual dut_if)::get(this, "", "vif", vif)) begin
`uvm_fatal("build_phase", "No virtual interface specified for this test instance")
end
uvm_config_db#(virtual dut_if)::set( this, "env", "vif", vif);
endfunction
//Run phase - Create an abp_sequence and start it on the apb_sequencer
task run_phase( uvm_phase phase );
apb_sequence apb_seq;
apb_seq = apb_sequence::type_id::create("apb_seq");
phase.raise_objection( this, "Starting apb_base_seqin main phase" );
$display("%t Starting sequence apb_seq run_phase",$time);
apb_seq.start(env.agt.sqr);
#100ns;
phase.drop_objection( this , "Finished apb_seq in main phase" );
endtask
endclass
class apb_test_1 extends apb_base_test;
// Since I am extending from apb_base_test above, do I need to
// 1. apb_env env; virtual dut_if if;
// 2. function new
// 3. build_phase
// 4.
endclass