UVM中所有的对象都应该在factory 中注册, utility 宏就是用于将对象注册到工厂的。
Utility Macros
utils宏主要用于将object 或 component 注册到工厂,它需要在每个从uvm_object派生的用户定义类中使用,包括所有类型的sequence items 和 components 。
Object Utility
所有直接从uvm_object或uvm_transaction派生的类都需要使用`uvm_object_utils宏进行注册。对于每个类,都必须显式定义new函数,并将类实例的名称作为参数。
class ABC extends uvm_object; // Register this user defined class with the factory `uvm_object_utils(ABC) function new(string name = "ABC"); super.new(name); endfunction endclass
Component Utility
所有直接或间接从uvm_component派生的类都需要使用`uvm_component_utils宏将它们注册到工厂。对于每个直接或间接从uvm_component派生的类,都必须显式定义new函数,并将类实例的名称和实例化此对象的父类的句柄作为参数。
class DEF extends uvm_component; // Class derived from uvm_component, register with factory `uvm_component_utils(DEF) function new(string name = "DEF", uvm_component parent=null); super.new(name, parent); endfunction endclass
factory注册后的类对象创建
建议通过调用type_id::create()方法来创建所有类对象已促进验证平台的灵活性和可重用性。
class ABC extends uvm_object; `uvm_object_utils(ABC) function new(string name = "ABC"); super.new(name); endfunction endclass class base_test extends uvm_test; `uvm_component_utils(base_test) function new(string name = "base_test", uvm_component parent=null); super.new(name, parent); endfunction virtual function void build_phase(uvm_phase phase); // An object of class "ABC" is instantiated in UVM by calling // its "create()" function which has been defined using a macro // as shown above ABC abc = ABC::create("abc_inst"); endfunction endclass
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !