是否可以在assign语句之外调用SystemVerilog中的new?

时间:2018-06-12 11:13:38

标签: system-verilog

这就是我在SystemVerilog中使用new的方式:

class A;
endclass

A a = new();

但有时候,我不需要本地对象,我只想将它直接发送到一个A的函数。有没有办法在这里明确调用新函数:

function use_a(A obj);
endfunction

use_a(new());  // <--- How to write this call to specify which new to call?
use_a(A::new());   // <--- new not expected here :(

1 个答案:

答案 0 :(得分:3)

不幸的是,SystemVerilog的语法不允许这样做。特殊的new方法不是静态方法,并且由于定义了类内存管理的方式,类句柄必须存在于某个变量中。你可以通过围绕静态方法包装new来解决这个问题:

class A;
static function A create();
  create = new();
endfunction
endclass

...

use_a(A::create());

顺便说一句,UVM在BCL中有create个方法,你几乎不需要直接调用new()