uvm_object中方法set_name/get_name/get_full_name/get_type/get_type_name等
- uvm_object
set_name --- 设置此对象的实例名,覆盖先前给出的任何名称。
get_name --- 返回对象的名称,由new构造函数中的name参数或set_name方法提供。
get_full_name --- 返回此对象的完整层次名字。
get_type --- 返回此对象的类型代理(包装器)。
get_type_name --- 此函数返回这个对象的类型名字,这个类型名字通常使用引号括起来的类型标识符。
new
function new (
string name = ""
)
使用给定的实例名创建一个新的uvm_object。如果没有提供name,则对象未命名。
set_name
virtual function void set_name (
string name
)
设定此对象的实例名,重写以前给出的任何名字。
get_name
virtual function string get_name ()
返回此对象的名字,此名字有new构造函数的name参数提供或set_name方法提供。
get_full_name
virtual function string get_full_name ()
返回此对象的完整层次结构名称。默认实现与get_name相同,因为uvm_objects本身不具有层次结构。
拥有层次结构的对象,比如uvm_components,会覆盖默认实现。其他对象可能和组件层次结构相关,但是他们本身不是组件。例如,uvm_sequence #(REQ, RSP)类通常和uvm_sequencer#(REQ, RSP)有关。在这种情况下,覆盖get_full_name来返回sequencer的全名和sequence的名是很有用的。这为sequence提供了上下文,这对调试有用。
get_type
static function uvm_object_wrapper get_type ()
返回此对象的类型代理。uvm_factory的基于类型的覆盖和创建方法接受uvm_object_wrapper的参数。
如果实现了该方法,可以将其用作提供这些参数的方便手段。该方法的默认实现会产生一个错误并返回null。要启用此方法,用户的子类型必须实现返回子类型包装器的版本。
例如
class cmd extends uvm_object;
typedef uvm_object_registry #(cmd) type_id;
static function type_id get_type();
return type_id::get();
endfunction
endclass
然后,使用
factory.set_type_override(cmd::get_type(),subcmd::get_type());
如果使用,此函数将通过`uvm_*_utils宏实现。
get_type_name
virtual function string get_type_name ()
这个函数返回此对象的类型名,通常是用引号括起来的类型标识符。它用于库中的各种调试函数,被factory机制用来创建对象。这个函数必须在每个派生类中定义。
一个典型的实现如下:
class mytype extends uvm_object;
...
const static string type_name = "mytype";
virtual function string get_type_name();
return type_name;
endfunction
我们定义type_name静态变量来允许访问类型名,而不需要类的对象,也就是说,允许通过作用域操作符mytype::type_name进行访问。
浙公网安备 33010602011771号