uvm源码阅读(2)——uvm_object

uvm_object.svh

description: uvm_object 是所有UVM数据和层次类的基类,主要定义一套common操作,create/copy/compare/print/record;从uvm_object派生的类必须实现纯虚拟方法,例如 create/get_type_by_name

extends from uvm_void;

define UVM_VCS_FGP:

FGP (Fine-Grained Parallelism): 细粒度并行仿真技术;VCS利用FGP技术动态调整算法,能够优化并充分利用多核和众核处理器平台,提高仿真性能

预定义类

typedef class uvm_report_object;
typedef class uvm_object_wrapper;
typedef class uvm_objection;          // uvm_object类中未使用
typedef class uvm_component;          // uvm_object类中未使用
typedef class uvm_status_container;
 

变量
名称描述
use_uvm_seeding

static 变量

表示启用或禁用UVM seeding机制。它全局影响reseed机制的操作。
启用后,基于uvm的对象将根据其类型和完整的层次名称而不是分配顺序进行seed。这提高了实例名在每个类型中都是唯一的对象的随机稳定性。<uvm_component>类是具有唯一实例名的类型的一个例子。

m_left_namelocal string
m_inst_idlocal int
m_inst_countstatic protected int
__m_uvm_status_containerstatic uvm_status_containter

function
名称描述return
reseed

在对象上调用 ~srandom~,使用UVM seeding机制重新播种对象,该机制基于类型名称和实例名称而不是基于线程中的实例位置设置种子。
如果< use_uvm_seeds >静态变量设置为0,则reseed()不执行任何函数。
 

uvm_create_random_seed方法根据字符串名称返回随机种子值,而后通过调用SV中的srandom方法手动播种当前类对象或者线程的RNG(Random Number Generator)

void
set_name

virtual

将字符串名称通过参数传递给内部变量m_leaf_name,用于重命名例化名

void
get_name

virtual

返回实例化名m_leaf_name

string
get_full_name

virtual

返回全部hierarchy name

string
get_inst_id

virtual

返回实例化 unique 数字 id

int
get_inst_countstatic 返回实例化数量,表示仿真中已经分配的基于uvm_object的对象数量int
get_type

static 

返回此对象的类型代理(wrapper)。<uvm factory>的基于类型的覆盖和创建方法接受<uvm_object wrapper>的参数。这个方法如果实现了,可以作为提供这些参数的方便方法。
此方法的默认实现会产生错误并返回null。要启用此方法,用户的子类型必须实现返回子类型包装器的版本

uvm_object_wrapper
get_object_type

virtual

与get_type()方法类似,但使用已分配的对象来确定要访问的类型代理(而不是使用静态对象)

uvm_object_wrapper
get_type_name
virtual function string get_type_name(); return "<unknown>"; endfunction

返回object的type_name,通常是用引号括起来的类型标识符。库中的各种调试函数都使用它。工厂用它创建object

string
create

virtual

virtual function uvm_object create (string name=""); return null; endfunction

create方法分配一个与此对象相同类型的新对象,并通过一个基本uvm对象句柄返回它。每个直接或间接从uvm_object派生的类都必须实现create方法

uvm_object

clone

virtual

create + copy

uvm_object
print

void

sprint

string
do_print

virtual

void
convert2string

virtual

string

record

void

do_record

virtual

void
copyvoid
do_copy

virtual

void
comparebit
do_compare

virtual

bit

packint
pack_bytes

int

pack_intsint
do_pack

virtual

void
unpackint
unpack_bytes

int

unpack_intsint
do_unpack

virtual

void
set_int_localvirtualvoid
set_string_localvirtualvoid
set_object_localvirtualvoid
m_packlocalvoid
m_unpack_prelocalvoid
m_unpack_postlocalvoid
__m_uvm_field_automationvirtualvoid
m_get_report_objectprotected virtualuvm_report_object
备注:
const

属性声明为常量,即“只读”。目的就是希望,别人可以读但是不能修改它的值。

公有性和私有性:
  • public: 默认为public,子类和类外皆可访问。
  • local:表示的成员或方法只对该类的对象可见,子类以及类外不可见。
  • protected: 表示的成员或方法对该类以及子类可见,对类外不可见。
xx&do_xx:

xx: 实现xx功能;

do_xx:用户可定义的方法

关于object factory注册:
`define uvm_object_utils(T)\
  `uvm_object_utils_begin(T)\
  `uvm_object_utils_end

`define uvm_object_param_utils(T)\
   `uvm_object_param_utils_begin (T)\
   `uvm_object_utils_end

`define uvm_object_utils_begin(T) \
   `m_uvm_object_registry_internal(T,T)
   `m_uvm_object_create_func(T)\
   `m_uvm_get_type_name_func (T) \
   `uvm_field_utils_begin(T)

`define uvm_object_param_utils_begin(T) \
   `m_uvm_object_registry_param(T)
   `m_uvm_object_create_func (T)\
   `uvm_field_utils_begin(T)

`define uvm_object_utils_end\
     end\
    endfunction

`define m_uvm_object_registry_internal(T,S)\
   typedef uvm_object_registery#(T,`"S`") type_id;\
   static function type_id get_type();\
     return type_id::get();
   endfunction\
   virtual function uvm_object_wrapper get_object_type();\
     return type_id::get();\
   endfunction

`define m_uvm_object_create_func(T)\
    function uvm_object create(string name="");\
      T tmp;\
      tmp = new(); \
      if(name!="")\
        tmp.set_name(name);\
      return tmp;
    endfunction

`define m_uvm_get_type_name_func(T) \
   const static string type_name = `"T`"; \
   virtual function string get_type_name();\
     return type_name;\
   endfunction

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值