Можно ли вызвать new в SystemVerilog вне оператора назначить? - PullRequest
0 голосов
/ 12 июня 2018

Вот как я обычно вызываю new в SystemVerilog:

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 голосов
/ 12 июня 2018

К сожалению, синтаксис SystemVerilog не позволяет этого.Специальный метод new не является статическим методом, и дескриптор класса должен существовать в некоторой переменной из-за способа управления памятью класса.Вы можете обойти это, обернув new вокруг статического метода:

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

...

use_a(A::create());

Кстати, у UVM есть методы create в BCL, и вам почти никогда не нужно напрямую вызывать new().

...