类继承于UVM

classes inherited in UVM

我正在尝试学习 UVM,我只是想知道下图是否表示继承,例如 uvm_object 是否从 uvm_void 继承?我正在阅读 UVM 1.1 Class 参考资料。它在第 17 页提到

The uvm_void class is the base class for all UVM classes. It is an abstract class with no data members or functions. It allows for generic containers of objects to be created, similar to a void pointer in the C programming language. User classes derived directly from uvm_void inherit none of the UVM functionality, but such classes may be placed in uvm_void-typed containers along with other UVM objects.

如果 uvm_object 派生自 uvm_void,那么它如何具有 UVM 功能,因为 class 派生自 uvm_void 不应该具有任何 UVM 功能,但是uvm_object 有克隆、打印、打包、解包、记录、比较等方法

当我们写 class uvm_* extends uvm_* 例如。 class uvm_component extends uvm_object,是否推断继承?它在某处还提到了子类型这个词。子类型是否与派生的 class 相同?

'derived class' 是 'subtype' 的一种形式。 Subtypes vs Derived Types in C++

If uvm_object is derived from uvm_void, then how does it have UVM functionality since classes derived from uvm_void shouldn't have any UVM functionality, but uvm_object has methods like clone, print, pack, unpack, record, compare etc.

这个概念是不正确的,派生的 class 可以实现新的功能。限制,不能从抽象 classes 创建对象。父 class 句柄可以指向任何对象,只要它是子类型即可。句柄只能访问其自身类型的方法和成员,以及被覆盖的虚拟方法。因此,如果句柄指向子类型对象,则它无法访问该子类型添加的方法或成员。

uvm_void 是一个空摘要 class。如果你查看 UVM 源代码,你会看到它被污染为两行:

virtual class uvm_void;
endclass

uvm_void 的目的是拥有一个共同的父类型,因此稍后可以创建一个通用容器来容纳任何与 UVM 相关的对象。这样的容器甚至可以容纳继承自 uvm_void 且与 uvm_object 无关的用户定义的 class(实际上不应这样做)。

uvm_object 实现了 UVM 使用的基本功能。绝大多数 UVM classes 继承自 uvm_object 或其子类型之一。

是的。 UVM_VOID 是所有 UVM 组件和对象的父级 class。没什么。