uvm_port_base类派生正确的层次结构

时间:2016-10-26 10:27:37

标签: uvm

enter image description here

以上两个图是矛盾的。有人可以澄清这个类的正确的类继承吗?下面提到的是按顺序排列的两者的链接

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

1 个答案:

答案 0 :(得分:2)

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

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

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

例如,许多TLM类使用另一个要扩展的类来覆盖该参数。例如:

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作为父级,但它也获得了所有其他父级添加的所有附加功能。这种重定向继承是对multiple inheritance挑战一种只能支持单继承 * 的语言的工作。

* 截至2012年发布时,SystemVerilog添加了一个多重继承方法,通过添加interface class和{{1来启发/借用/类似于Java的问题方法}}。然而,并非所有主要模拟器供应商都没有实施改进。我猜测UVM最终将进行大修并在模拟器支持此主题后使用这些功能。