• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

uvm_object中方法set_name/get_name/get_full_name/get_type/get_type_name等

  1. 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进行访问。

posted on 2022-06-26 12:56  SOC验证工程师  阅读(931)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3