UVM中的utility宏

描述

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

 

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分