static function type_id get_type(); \ return type_id::get(); \ endfunction \ virtual function uvm_object_wrapper get_object_type(); \ return type_id::get(); \ endfunction T显然就是我们传入的component类,比如上文中的txt_driver,而后在m_uvm_component_registry_internal里做了这样的一步操作...
后面我们会讲create_object_by_type的实现。 uvm_facroty的单例模式实现 uvm_factory是一个virtual类,virtual类是没法被实例化的,所以我们前面讲的创建uvm_factory的实例其实创建的是从其派生而来的uvm_default_factory的唯一实例,所以我们并不是直接调用uvm_factory中的get函数来获取单例,而是借助于uvm_coreservice_...
$display("%0s",get_type()); $display(“%0s”,get_type_name()); … endclass 而这个class在env中例化: classjerry_envextendsuvm_env; … jerry_component u_jerry_c; … function void build_phase (uvm_phase phase); u_jerry_c = jerry_component::type_id::create(“u_jerry_so_cool”,t...
typedef uvm_object_registry #(cmd) type_id; static function type_id get_type(); returntype_id::get(); endfunction virtual function type_id get_object_type(); returntype_id::get(); endfunction endclass 如果使用'uvm_utils宏,则该函数由'uvm_utils宏实现。 get_type_name virtual function st...
21 //uvm_config_db#(uvm_object_wrapper)::set(this,22 //"env.i_agt.sqr.main_phase",23 //"default_sequence",24 // my_sequence::type_id::get());25 endfunction26 27 function void base_test::report_phase(uvm_phase phase);28 uvm_report_server server;29 int err_num;30 super.report...
static function type_id get_type(); \ return type_id::get(); \ endfunction \ virtual function uvm_object_wrapper get_object_type(); \ return type_id::get(); \ endfunction 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 这个宏里面只做了两件事情: ...
my_sequence::type_id::get() ); endfunction : build_phase 在env的connect_phase,连接ifu_sqr,lsu_sqr的实例。代码如下所示: function void my_env::connect_phase(uvm_pkg::uvm_phase phase); // TODO Auto-generated function stub super.connect_phase(phase); ...
uvm_config_db#(uvm_object_wrapper)::set(this,"env.i_agt.sqr.main_phase","default_sequence",case0_sequence::type_id::get()); (3)使用uvm_config_db#(uvm_sequence_base)配置default_sequence functionvoidmy_case0::build_phase(uvm_phase phase);case0_sequence cseq;super.build_phase(phase);...
位于uvm_globals.svh中的run_test()函数通过uvm_root::get()创建(这里应该是uvm_root::get()第一次被调用,所以说是创建了uvm_root的实列,其他地方调用是reuturn返回的实例,都是在此处创建的)唯一的uvm_root。然后调用uvm_root中的run_test()函数,代码如下图: ...
1 uvm_config_db# (uvm_object_wrapper)::set(null,"$full_path(sequencer.main_phase)","default_sequence",xx_sequence::type_id::get()); 1function xx::build_phase(uvm_phase phase);2 super.build_phase(phase);3 xx_sequence m_xx_sequence;4 m_xx_sequence = new("m_xx_sequ...