//基于【uvm实战】ch4.3.3 写的小测试
- 参数化类的继承
- 参数化类的override 覆盖
`ifndef MY_ENV__SV
`define MY_ENV__SV
class my_env extends uvm_env;
`uvm_component_utils(my_env)
my_agent i_agt;
my_agent o_agt;
my_model mdl;
// base_scoreboard scb;
base_scoreboard#(my_transaction) scb; //重点
// base_scoreboard#(uvm_sequence_item) scb;
uvm_tlm_analysis_fifo #(my_transaction) agt_scb_fifo;
uvm_tlm_analysis_fifo #(my_transaction) agt_mdl_fifo;
uvm_tlm_analysis_fifo #(my_transaction) mdl_scb_fifo;
function new(string name = "my_env", uvm_component parent);
super.new(name, parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
i_agt = my_agent::type_id::create("i_agt", this);
o_agt = my_agent::type_id::create("o_agt", this);
i_agt.is_active = UVM_ACTIVE;
o_agt.is_active = UVM_PASSIVE;
mdl = my_model::type_id::create("mdl", this);
base_scoreboard#(my_transaction)::type_id::set_type_override(my_scoreboard#(my_transaction)::get_type());//重点
// set_inst_override("scb","base_scoreboard#(my_transaction)","my_scoreboard$#(my_transaction)");
// factory.set_inst_override_by_type(base_scoreboard#(my_transaction)::get_type(),my_scoreboard#(my_transaction)::get_type(),"*");
scb = base_scoreboard#(my_transaction)::type_id::create("scb",this); //重点
`uvm_info("my_env",scb.get_type_name(),UVM_LOW)
agt_scb_fifo = new("agt_scb_fifo", this);
agt_mdl_fifo = new(