uvm_component的限制

uvm_component的限制,uvm_component是从uvm_object派生来的。从理论上来说,uvm_component应该具有uvm_object的所有的行为特征。但是,由于uvm_component是作为UVM树的结点存在的,这一特性使得它失去了uvm_object的某些特征。

在uvm_object中有clone函数,它用于分配一块内存空间,并把另一个实例复制到这块新的内存空间中。clone函数的使用方式如下:

class A extends uvm_object;
…
endclass
class my_env extends uvm_env;
  virtual function void build_phase(uvm_phase phase);
    A a1;
    A a2;
    a1 = new("a1");
    a1.data = 8'h9;
    $cast(a2, a1.clone());
  endfunction
endclass

上述的clone函数无法用于uvm_component中,因为一旦使用后,新clone出来的类,其parent参数无法指定。

copy函数也是uvm_object的一个函数,在使用copy前,目标实例必须已经使用new函数分配好了内存空间,而使用clone函数时,目标实例可以只是一个空指针。换言之,clone = new + copy

虽然uvm_component无法使用clone函数,但是可以使用copy函数。因为在调用copy之前,目标实例已经完成了实例化,其parent参数已经指定了。

uvm_component的另外一个限制是,位于同一个父结点下的不同的component,在实例化时不能使用相同的名字。如下的方式中都使用名字“a1”是会出错的:

class A extends uvm_component;
…
endclass
class my_env extends uvm_env;
  virtual function void build_phase(uvm_phase phase);
    A a1;    A a2;
    a1 = new("a1", this);
    a2 = new("a1", this);
  endfunction
endclass

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!