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机制的操作。 |
m_left_name | local string |
m_inst_id | local int |
m_inst_count | static protected int |
__m_uvm_status_container | static uvm_status_containter |
function
名称 | 描述 | return |
reseed | 在对象上调用 ~srandom~,使用UVM seeding机制重新播种对象,该机制基于类型名称和实例名称而不是基于线程中的实例位置设置种子。 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_count | static 返回实例化数量,表示仿真中已经分配的基于uvm_object的对象数量 | int |
get_type | static 返回此对象的类型代理(wrapper)。<uvm factory>的基于类型的覆盖和创建方法接受<uvm_object wrapper>的参数。这个方法如果实现了,可以作为提供这些参数的方便方法。 | uvm_object_wrapper |
get_object_type | virtual 与get_type()方法类似,但使用已分配的对象来确定要访问的类型代理(而不是使用静态对象) | uvm_object_wrapper |
get_type_name | 返回object的type_name,通常是用引号括起来的类型标识符。库中的各种调试函数都使用它。工厂用它创建object | string |
create | virtual create方法分配一个与此对象相同类型的新对象,并通过一个基本uvm对象句柄返回它。每个直接或间接从uvm_object派生的类都必须实现create方法 | uvm_object |
clone | virtual create + copy | uvm_object |
void | ||
sprint | string | |
do_print | virtual | void |
convert2string | virtual | string |
record | void | |
do_record | virtual | void |
copy | void | |
do_copy | virtual | void |
compare | bit | |
do_compare | virtual | bit |
pack | int | |
pack_bytes | int | |
pack_ints | int | |
do_pack | virtual | void |
unpack | int | |
unpack_bytes | int | |
unpack_ints | int | |
do_unpack | virtual | void |
set_int_local | virtual | void |
set_string_local | virtual | void |
set_object_local | virtual | void |
m_pack | local | void |
m_unpack_pre | local | void |
m_unpack_post | local | void |
__m_uvm_field_automation | virtual | void |
m_get_report_object | protected virtual | uvm_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