类构造函数中的uvm_组件父级
有一件事总是让我感到困惑:是否在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\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序列
我不明白你问题的第二部分(关于顺序),请你编辑你的问题以澄清。