factory所有的操作都是通过`uvm_object_utils`uvm_component_utils这两个宏来完成;

 

1.`uvm_object_utils

篇5-factory机制实现的原理(1)_IT

 

篇5-factory机制实现的原理(1)_参数化_02

 

篇5-factory机制实现的原理(1)_静态成员变量_03

2. `m_uvm_object_registry_internal

篇5-factory机制实现的原理(1)_IT_04

(1) factory机制的注册是在typedef uvm_object_registry#(T,`S`) type_id中实现的;

(2) typedef语句声明了一个参数化的类,类的名字为uvm_object_registry,参数有两个,一个是输入的类型T,一个是字符串S;

 

3. class uvm_object_registry

篇5-factory机制实现的原理(1)_静态成员变量_05

(1) uvm_object_registry派生于uvm_object_wrapper(uvm_object_wrapper是一个纯虚类);

(2) uvm_object_registry类内部有一个私有的静态成员变量me,通过调用get函数,创建一个me的实例,然后通过factoryregister函数注册到factory;

(3) typedef uvm_object_registry#(T1,S1) type1typedef uvm_object_registry#(T2,S2) type2在编译时,编译器会认为是两个类;

(4) 所谓的把一个object或者component注册到factory,其实注册的不是这个object或者component,而是uvm_object_registry#(T,S)uvm_component_registry#(T,S)的一个实例;