uvm_object的理解

这里写图片描述

typedef class

typedef class uvm_component;
表示uvm_object会使用到uvm_component类,但是uvm_component类还没有定义。
不过,在uvm_object,暂时没发现使用。所以,个人理解,这一句删掉也没关系。

函数new

相关源代码:

static protected int m_inst_count; //m是member,成员的意思吧。类实例化的个数。
local int m_inst_id; //类实例化的id。跟类实例化个数有关系,比如类实例化3个,则类实例化的id为1,2,3
local string m_leaf_name; //类的实例化名称,是uvm树形层次结构的一个枝叶。

function uvm_object::new (string name="");

  m_inst_id = m_inst_count++;
  m_leaf_name = name;
endfunction

function int uvm_object::get_inst_count();
  return m_inst_count;
endfunction

function int uvm_object::get_inst_id();
  return m_inst_id;
endfunction

注意:
如果基类构造函数new()有参数,那么扩展类,必须有一个构造函数,并在构造函数的第一行调用基类的构造函数。

Class basel
     Function new(input  int var);
          this.var = var;//利用this关键词,把new函数的参数,传递给类成员变量。
     endfunction
     endclass
class  extended   extends basel
    function new(input int var);
      super.new(var);
    endfunction
endclass

变量use_uvm_seeding

相关源代码:

static bit use_uvm_seeding = 1; //静态变量,所以systemverilog全部对象,都可以访问它,可写可读。

function void uvm_object::reseed ();
  if(use_uvm_seeding)
    this.srandom(uvm_create_random_seed(get_type_name(), get_full_name())); //类的方法,如果使用成员函数和成员变量的话,需要this关键词定位为当前类。理解这个,需要了解成员变量和局部变量的区别。见下面介绍。//这里的意思,个人理解,是重新产生一个uvm_object类的随机种子,默认随机种子是与process进程有关。
endfunction

参考:
类声明中的静态方法,类的全范围内可以调用,也可以无创建对象的方式被访问,不可以访问非静态的成员(属性和其他方法);
不能声明为virtual,声明中不能使用this句柄;
this指针,涉及类的属性、变量参数、对象本地的变量参数或方法,应用在非静态方法中。

成员变量和局部变量的区别

1、成员变量和局部变更的类型可以是systemverilog中的任何一种数据类型.变量定义部分所定义的变更被称为类的成员变量(类里的变量),在方法体中定义的变量和方法的参数被称为局部变量(方法里的变量)。
2、成员变量在整个类内都有效,局部变量只在定义它的方法内有效。
3、成员变量又分为实例成员变量(实例变量)和类变量(静态变量)。、
4、如果局部变量的名字和成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。
5、如果局部变量的名字和成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成员变量,必须使用关键字this.【如果是静态成员变量,就不需要了。】

set_name get_name get_full_name

// get_name
// --------

function string uvm_object::get_name ();
  return m_leaf_name; //返回值是类的实例名称
endfunction


// get_full_name
// -------------

function string uvm_object::get_full_name ();//本意是全层次结构下的实例名称。这里看来就是枝叶的实例名称,没有结构层次。应该是因为uvm_object没有树形结构吧(uvm_component才有树形结构)。
  return get_name();
endfunction


// set_name
// --------

function void uvm_object::set_name (string name);
  m_leaf_name = name;//设置类的实例名称,跟new设置实例名称是一样的作用。
endfunction

上述函数有一些是virtual function,还有一些是静态函数。

  1. virtual function,这样扩展类中才可以重新定义。扩展类中函数,和基类中函数名一样时,通过supper.函数名,调用基类中函数。Systemverilog中不允许supper.supper.new方式经行多层调用。
  2. pure virtual function,在子类里定义这个函数。该类里,只声明。
  3. static function,函数内的变量,都是静态变量。定义静态函数,意义是为了访问一大堆静态变量。

上述函数,有一些是与uvm_object_wraper有关,属于factory的范畴,暂时搞不懂。后面再说。

functiondescription
get_typeReturns the type-proxy (wrapper) for this object.
get_object_typeReturns the type-proxy (wrapper) for this object.
get_type_nameThis function returns the type name of the object, which is typically the type identifier enclosed in quotes.

还有很多函数,pack、print、copy、clone、record之类的,先看uvm class reference文档再结合代码理解。

有需要的时候,再看吧。

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UVM (Unified Verification Methodology) 是一种用于数字IC验证的方法论,它的一个重要概念是UVM 对象包装器(UVM Object Wrapper)。UVM Object Wrapper是一种对验证环境中的基础对象进行封装的机制,以提供更高级的抽象层次和附加的功能。它使得验证环境更加统一和可管理,也提高了可重用性和可维护性。 ### 回答2: uvm_object_wrapper是UVM库中的一个类,用于实现动态类型的封装。它是一个模板类,通常用于创建UVM对象的实例。 在UVM中,我们可以使用uvm_object_wrapper来实例化各种不同类型的对象,无论是从uvm_object派生的类,还是从其它派生类。这是因为uvm_object_wrapper提供了一个统一的接口来封装各种类型的对象,并提供了一些实用的方法来进行对象的创建和销毁。 uvm_object_wrapper的特点之一是其灵活性。它使得我们不再需要在实例化对象时事先知道对象的确切类型,而是可以通过uvm_object_wrapper来动态确定对象的类型。这样一来,在使用UVM进行测试时,我们可以方便地在运行时动态地切换测试对象的类型,以满足测试的需求。 另一个重要的特点是uvm_object_wrapper提供了一种便于对象创建和销毁的方式。我们可以使用uvm_object_wrapper提供的create方法来创建对象的实例,并使用destroy方法来销毁对象。这种方式使得对象的创建和销毁可以更加灵活地进行管理,从而提高了代码的可维护性和可扩展性。 总之,uvm_object_wrapper是UVM库中一个非常有用的类,它提供了一种灵活和方便的方式来封装和管理对象的实例化。通过使用uvm_object_wrapper,我们可以在运行时动态确定对象的类型,并更加灵活地进行对象的创建和销毁。这些特性使得uvm_object_wrapper成为UVM测试框架中的一个重要组成部分。 ### 回答3: uvm_object_wrapper是SystemVerilog中用于包裹UVM (Universal Verification Methodology)对象的类。UVM是一种验证方法学,被广泛应用于硬件验证领域,它提供了一种结构化的测试环境和验证框架。 在UVM中,对象是被用来描述被验证的硬件模块、数据结构以及测试用例的抽象。uvm_object_wrapper类被设计用来方便地创建和管理这些对象。 uvm_object_wrapper类是UVM中的一个基类,它定义了用于创建和管理UVM对象的一些必要方法。通过继承uvm_object_wrapper类,可以创建自定义的UVM对象,并使用UVM框架的各种功能和方法。 uvm_object_wrapper类的主要方法包括:create、get_type_name和kind等。create方法用于创建UVM对象的实例,并返回一个指向该实例的句柄;get_type_name方法返回对象的类型名;kind方法返回对象的类型。 通过使用uvm_object_wrapper类,可以方便地创建和管理UVM对象。在测试环境中,可以使用这些对象进行数据生成、发送、接收和检查等操作。同时,uvm_object_wrapper类也支持对象的层次结构和继承关系,使得对复杂的测试用例和数据结构进行描述和管理变得简单和灵活。 总之,uvm_object_wrapper是UVM中用于包裹和管理UVM对象的类。它提供了创建对象、管理对象的各种方法,并支持对象的层次结构和继承关系。通过使用uvm_object_wrapper,可以方便地描述和管理UVM对象,实现高效的硬件验证。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值