根据uvm用户指南1.1,第62页:
“如果使用UVM现场自动化宏,则super.build_phase()将作为ubus_example_tb的build_phase()函数的第一行调用。这将更新ubus_example_tb的配置字段。”
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为什么“super.buildphase(阶段)”更新ubus_example_tb,而不是他的父级(超级)?
发布于 2020-06-05 07:14:59
如果不使用`uvm_component_utils_begin()宏,则不应在直接从uvm_component扩展的类中调用super.build_phase()。这会产生不必要的开销。如果确实使用宏,则该宏会插入一个从uvm_component::build_phase调用的虚拟函数。这就是从super.build_phase调用的内容。
我强烈建议不要使用字段宏,因为它们的效率非常低。参见this post,它展示了一行代码是如何扩展到50行的。
另外,要小心使用术语parent和super。当涉及到OOP继承时,我建议不要使用父级和子级。父母创造(构造)孩子,他们是不同于他们的父母的对象。当您继承属性时,该属性将成为您的属性,并且您的所有属性都属于一个对象。使用base和extended。
在构建分层树/图结构时,UVM使用术语父对象和子对象来表示对象之间的关系。uvm_component类有一个指向其父对象的句柄和一个指向所有子对象的句柄,以便您可以遍历层次结构。这个术语在大多数编程语言中使用,并且独立于OOP。
https://stackoverflow.com/questions/62197597
复制相似问题