1.uvm_component中的parent
UVM通过uvm_component来实现树形结构,所有的UVM树的节点都是一个uvm_component。每个uvm_component都有一个特点:他们在new的时候,需要指定一个类型为uvm_component,名字为parent的变量。
Function new(string name, uvm_component parent)
一般的,在使用的时候,parent都是this。假设现在有一个A派生自uvm_component,在A中有一个uvm_component B的成员变量,则A的定义如下: Class A extends uvm_component; uvm_compoent B; Function new(string name, uvm_component parent); super.new(name,parent); B = new(“B”,this); endfunction endclass
在B实例化的时候,就把this指针传递给了B,代表A是B的parent。
2.UVM树的根在哪里?
UVM中真正的树根是一个称为uvm_top的东西,uvm_top是一个全局变量,它是uvm_root的一个实例,而uvm_root派生自uvm_component,所以uvm_top本质上是一个uvm_component,它是树的根。
3.uvm_component的phase自动执行
Uvm_component有两大特性,除了上面提到的在new的时候需要指定一个parent外,另外一个重要的特性就是它具有phase自动执行的特性。当整棵树的build_phase执行完的时候,会自动执行connect_phase,以次类推。这样就可以最大程度上避免出错。