继续uvm factory机制。
object和component类型使用轻量级的代表
class uvm_component_registery #(type T=uvm_component, string Tname="<unknown>") extends uvm_object_wrapper;
变量:
typedef uvm_component_registery #(T,Tname) this_type;
const ststic string type_name = Tname;
local static this_type me= get();
function/task
uvm_component_registery
virtual function uvm_component create_component(string name, uvm_component parent);
T obj;
obj = new(name,parrent);
return obj;
endfunction
virtual function string get_type_name();
return type_name;
static function this_type get();
if(me=null) begin
uvm_factory f=uvm_factory::get();
me = new();
f.register(me);
end
return me;
static function T create(string name,uvm_component parent, string contxt="");
uvm_object obj;
uvm_factory f= uvm_factory::get();
if(context=="" && parent != null)
contxt = parent.get_full_name();
obj = f.create_component_by_type(get(),contxt,name,parent);
cast(create,obj)
static function void set_type_override(uvm_object_wrapper override_type,bit replace=1)
factory.set_type_override_by_type(get(),override_type,replace);
static function void set_inst_override(uvm_object_wrapper override_type,string inst_path,uvm_component parent = null);
factory.set_inst_override_by_type(get(),override_type,inst_path);
class uvm_component_registery #(type T=uvm_component, string Tname="<unknown>") extends uvm_object_wrapper;
与上部分类似