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里做了这样的一步操作...
(这个wrapper的类型是通过testcase的build_phase中set过来的virtual_sequence::type_id::get()获取的,也就是说set的是一个uvm_object_wrapper类型,而不是一个实例,uvm_object_wrapper作为一个UVM源代码中定义的基类可以接受任何类型) 1394行主动调用set_sequencer()将virtual_sequencer设置为virtual_sequence启动的seque...
408 typedef uvm_object_registry#(T,`"S`") type_id; \ //每个object都有一个属于自己的代理类,这个type_id就是对应object的代理 409 static function type_id get_type(); \ //uvm_object_registry针对每个object都是一个单态类,也就是一个object,有只有一个代理 410 return type_id::get(); \ /...
virtual function void my_env::build_phase(uvm_phase phase); uvm_config_db# (uvm_object_wrapper)::set(this, “agt.sqr.main_pahse”, “default_sequence”, my_sequence::type_id::get()); endtask 树形结构通信通道变化: 原始: 现在: 注意: 蓝色部分: top_tb与树形结构的连接 紫色部分: transa...
$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”,...
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...
宏会为注册的类创建一个名为type_id的静态代理类(因为专门用于代替new来构造函数),起到间接实例化对象的代理作用 get_type,返回对象类型 get_object_type返回对象类型,不是静态类 factory机制与override机制 需要在对象实例化之前完成替换 get_type通过宏来实现,因此需要注册宏 代码实现: 会自动把路径补全 代码实现...
type_id就是你注册到工厂里面的类型。这里一句话里用到了两次两个冒号,第一个双冒号是在工厂里面找到我们注册的类,第二个双冒号用来创建对象,输入的内容根据定义类继承的父类情况选择传入name+uvm_component parent还是name。 uvm_coreservice_t类 该类内置了UVM世界核心的组件和方法,它们主要包括: ...
virtual function uvm_object_wrapper get_object_type(); \ return type_id::get(); \ endfunction 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 这个宏里面只做了两件事情: 定义了一个参数化的类,这个参数化的类叫type_id; 给class定义了两个函数,get_type()函数与get_object_type()函数。
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); ...