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 class
和 implements
。然而,并非所有主要的模拟器供应商都没有实施改进。我猜 UVM 最终会被大修并在模拟器支持此功能成为主流后利用这些功能。
上面两个图是矛盾的。有人可以澄清这个 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 class
和 implements
。然而,并非所有主要的模拟器供应商都没有实施改进。我猜 UVM 最终会被大修并在模拟器支持此功能成为主流后利用这些功能。