我是靠谱客的博主 愉快冥王星,最近开发中收集的这篇文章主要介绍UVM中uvm_object类的identification方法总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

方法说明
set_name设定此对象的实例名,覆盖任何以前给定的名称。
get_name返回对象的名字,正如在new构造函数或set_name方法中提供的名字参数。
get_full_name返回此对象的完整层次结构名称。
get_type返回此对象的类型代理(封装器)。
get_object_type返回此对象的类型代理(封装器)。
get_type_name这个函数返回对象的类型名,通常是括在引号中的类型标识符。
get_inst_id返回对象的唯一数字实例标识符。
get_inst_count返回实例计数器的当前值,它表示在仿真中已分配的基于uvm_object的对象的总数。

set_name
virtual function void set_name (string name)
设置此对象的实例名,覆盖以前给出的任何名称。

get_name
virtual function string get_name ()
返回对象的名称,由新构造函数中的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的全名和sequencer名是很有用的。这为序列提供了完整的上下文,这在调试时非常有用。

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宏,则该函数由’uvm_utils宏实现。

get_object_type
virtual function uvm_object_wrapper get_object_type()
返回此对象的类型代理(封装器)。uvm_factory的基于类型的覆盖和创建方法接受uvm_object_wrapper的参数。如果实现了这个方法,就可以方便地提供这些参数。 此方法与静态get_type方法相同,但使用一个已经分配的对象来确定要访问的类型代理(而不是使用静态对象)。该方法的默认实现使用get_type_name的返回值对代理进行工厂查找。如果get_type_name返回的类型没有注册到工厂,则返回一个空句柄。
例如

class cmd extends uvm_object;
  typedef uvm_object_registry #(cmd) type_id;
  static function type_id get_type();
    return type_id::get();
  endfunction
  virtual function type_id get_object_type();
    return type_id::get();
  endfunction
endclass

如果使用’uvm_utils宏,则该函数由’uvm_utils宏实现。

get_type_name
virtual function string get_type_name()
这个函数返回对象的类型名称,通常是用引号括起来的类型标识符。它用于库中的各种调试函数,并被工厂用于创建对象。 这个函数必须在每个派生类中定义。
一个典型的实现如下

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

最后

以上就是愉快冥王星为你收集整理的UVM中uvm_object类的identification方法总结的全部内容,希望文章能够帮你解决UVM中uvm_object类的identification方法总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部