System verilog super.build\u phase()做什么?

System verilog super.build\u phase()做什么?,system-verilog,uvm,System Verilog,Uvm,根据uvm用户指南1.1第62页: “如果使用UVM field automation宏,则调用super.build_phase()作为 ubus_示例_tb的build_phase()函数。这将更新 ubus_示例_tb。” 为什么“super.buildphase(phase)”更新ubus\u example\u tb而不是其父对象(super)?如果不使用`uvm\u component\u utils\u begin()宏,则不应在直接从uvm\u component扩展的类中调用s

根据uvm用户指南1.1第62页:

“如果使用UVM field automation宏,则调用super.build_phase()作为 ubus_示例_tb的build_phase()函数。这将更新 ubus_示例_tb。”


为什么“super.buildphase(phase)”更新ubus\u example\u tb而不是其父对象(super)?

如果不使用
`uvm\u component\u utils\u begin()
宏,则不应在直接从
uvm\u component扩展的类中调用
super.build\u phase()
。这会产生不必要的开销。如果确实使用了宏,则该宏将插入一个虚拟函数,该函数将从
uvm\u component::build\u phase
调用。这就是super.build\u阶段的调用

我强烈建议不要使用字段宏,因为它们效率很低。请参见该图,其中显示了一行代码如何扩展到50

还要注意“父级”和“超级”这两个词。我建议在提到OOP继承时不要使用父级和子级。父对象创建(构造)子对象,它们是与父对象不同的对象。继承属性时,该属性将成为您的属性,并且您的所有属性都属于一个对象。使用base和extended


在构建层次树/图结构时,UVM使用术语“父”和“子”来表示对象之间的关系。类uvm_组件具有其父级的句柄和其所有子级的句柄,因此可以遍历层次结构。此术语在大多数编程语言中使用,并且与OOP无关。

如果不使用
`uvm\u组件使用uls\u begin()
宏,则不应在直接从
uvm\u组件扩展的类中调用
super.build\u phase()
。这会产生不必要的开销。如果确实使用了宏,则该宏将插入一个虚拟函数,该函数将从
uvm\u component::build\u phase
调用。这就是super.build\u阶段的调用

我强烈建议不要使用字段宏,因为它们效率很低。请参见该图,其中显示了一行代码如何扩展到50

还要注意“父级”和“超级”这两个词。我建议在提到OOP继承时不要使用父级和子级。父对象创建(构造)子对象,它们是与父对象不同的对象。继承属性时,该属性将成为您的属性,并且您的所有属性都属于一个对象。使用base和extended

在构建层次树/图结构时,UVM使用术语“父”和“子”来表示对象之间的关系。类uvm_组件具有其父级的句柄和其所有子级的句柄,因此可以遍历层次结构。这个术语在大多数编程语言中使用,并且独立于OOP

 class ubus_example_tb extends uvm_env;
 ...
 ...
 // build_phase()
 virtual function void build_phase(uvm_phase phase);
 super.build_phase(phase); // Configure before creating the
 // subcomponents
 ...
 endclass : ubus_example_tb