uvm_port_base class 推导正确层次

uvm_port_base class derivation correct hierarchy

上面两个图是矛盾的。有人可以澄清这个 class 的正确 class 继承是什么吗?下面提到的是 link 两者的顺序

https://www.dvteclipse.com/uvm-1.2_Public_API/uvm_pkg-uvm_port_base.html

这有点偷偷摸摸,因为两者都是真的。查看源码,第一行 declare uvm_port_base

virtual class uvm_port_base #(type IF=uvm_void) extends IF;

uvm_port_base继承自IF,是一个参数。 IF 的默认值为 uvm_void

例如,许多 TLM classes 用另一个 class 覆盖参数以扩展。例如:

class uvm_blocking_put_export #(type T=int)
  extends uvm_port_base #(uvm_tlm_if_base #(T,T));

uvm_tlm_if_base 扩展形式 uvm_if_base_abstract,它扩展自 uvm_report_object,它扩展自 uvm_object,后者扩展自 uvm_void。基本上 uvm_blocking_put_export 仍然有 uvm_void 作为 parent,但它也得到了所有其他 parent 添加的所有附加功能。这种重定向的继承是一种解决 multiple inheritance 语言挑战的方法,它只能支持单一继承*


*从 2012 版开始,SystemVerilog 添加了多重继承方法 inspired/borrowed/similar-to Java 解决问题的方法,通过添加 interface classimplements。然而,并非所有主要的模拟器供应商都没有实施改进。我猜 UVM 最终会被大修并在模拟器支持此功能成为主流后利用这些功能。