类构造函数中的uvm_组件父级

类构造函数中的uvm_组件父级,uvm,Uvm,有一件事总是让我感到困惑:是否在uvm对象的类构造函数中添加uvm_组件父级。 正如我所理解的,对于从uvm\u组件继承的所有项,它们都需要uvm\u组件父项作为构造函数输入参数的一部分 function new (string name, uvm_component parent); super.new(name, parent); endfunction 但是所有类都是从uvm\u对象中继承的,它们不需要 我的问题是为什么 据我所知,我们为factory提供了uvm_组件父级,因为

有一件事总是让我感到困惑:是否在uvm对象的类构造函数中添加
uvm_组件父级
。 正如我所理解的,对于从
uvm\u组件继承的所有项,它们都需要
uvm\u组件父项作为构造函数输入参数的一部分

function new (string name, uvm_component parent);
    super.new(name, parent);
endfunction
但是所有类都是从
uvm\u对象中继承的,它们不需要

我的问题是为什么

据我所知,我们为factory提供了
uvm_组件父级
,因为factory可以替换这些对象,为什么uvm_对象继承类不需要被factory替换


对于uvm_序列,我注意到了一个更有趣的事实:所以uvm_序列构造函数不需要
uvm_组件父属性
属性,但是当我们按工厂创建序列时,我们提供了父参数

uvm_组件
派生的类的构造函数需要知道其父类的原因是,从
uvm_组件
派生的类是测试环境基础结构的一部分;该测试环境具有层次结构,每个组件都需要知道它在该层次结构中的位置。(例如,配置数据库使用组件层次结构。)

uvm_对象派生的类不属于测试环境的基础结构的一部分;它们是流经其中的数据

据我所知,我们正在为工厂提供uvm_组件 可以替换这些对象,为什么uvm_对象继承类不需要 被工厂取代

我认为您对
父类
基类
有些困惑

在UVM测试层次结构中,父类是在测试继承权上一级的类。例如:

uvm_test is the parent of uvm_env
uvm_env is the parent of uvm_agent
uvm_agent is the parent of uvm_driver, uvm_sequencer, uvm_monitor
这是在实例化
子组件时指定的
父组件。配置数据库、构建相位、检查相位等都需要它

另一方面,
base
类是一个面向对象的概念。您可以扩展基类并向其添加功能。例如,您可能会有以下情况:

my_agent_base extends uvm_agent (uvm_agent is base class, my_agent_base is derived)
my_agent_derived1 extends my_agent_base
my_agent_derived2 extends my_agent_base
如果您在工厂注册了所有这些组件,它允许您使用
my\u agent\u derived1
覆盖
my\u agent\u base
。这允许在测试台上以不同的行为交换组件

可以使用uvm_组件和uvm_对象执行此操作,没有问题。唯一需要的是你在工厂登记

通常,uvm_对象是在多次测试期间创建和销毁的动态对象

uvm_组件在整个测试期间持续存在,并具有执行阶段


希望这有助于

在UVM中,主要有3种类型的课程

  • uvm_组件-用于基于类的分层测试台结构
  • uvm_对象-用于测试台配置的数据结构
  • uvm_交易-刺激产生与分析
new
方法的参数值用于在链接列表中创建一个条目,UVM使用该条目在伪层次结构中定位
UVM_组件
,该列表用于消息传递和配置机制。因此,理想情况下,在通过
create
方法创建组件时,名称参数字符串应与组件的声明句柄相同,父参数应为关键字“this”,以便它引用正在其中创建组件的uvm_组件

uvm_object
类不需要这些东西,因为它不用于创建测试台的层次结构。而
uvm_序列
也仅从
uvm_对象
派生

uvm_对象->uvm_事务->uvm_序列项目-> uvm\U序列\U基->uvm\U序列


我不明白你问题的第二部分(关于顺序),请你编辑你的问题以澄清。