Когда мы используем "typedef class xxxxx" в uvm? - PullRequest
0 голосов
/ 18 сентября 2018

Я не знаком с uvm, но пытаюсь понять и изучать.

Я обнаружил приведенный ниже код при наклоне UVM.

typedef class driver; 
typedef class monitor;   

class env; driver d0; 
monitor mon0;   
function init_drvr (); 
d0 = new (); // initialize endfunction   
function init_mon (); 
mon0 = new (); // initialize endfunction endclass
endfunction
endclass

Особенно

typedef class driver; 
typedef class monitor;   

Возможно, это похоже на объявление чего-то, но почему эти typedef там есть?

Не могли бы вы дать мне знать, почему мы используем

typedef class driver; 

typedef class monitor;   

и как понять эту грамматику?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Редко, когда вам понадобится typedef class name в SystemVerilog.Большинство языков программирования требуют, чтобы идентификаторы, используемые в качестве имен типов, объявлялись до того, как на них можно будет ссылаться синтаксически.Единственное, что происходит, - это если у вас есть циклические ссылки на классы

class X;
  Y has_a_Y;
endclass
class Y;
  X has_a_X;
endclass

. Чтобы скомпилировать код для класса X, необходимо объявить класс Y.Если вы измените порядок компиляции классов, то X станет неизвестным.Поэтому мы используем то, что называется forward typedef

typedef class Y;
class X;
  Y has_a_Y;
endclass

Теперь класс X компилируется до тех пор, пока класс Y будет определен до закрытия текущей области.

Однако UVM категорически не рекомендует этот вид кодирования, так как эти зависимости делают код менее пригодным для повторного использования.

Иногда люди используют прямую определение типа, даже когда циклических зависимостей нет, потому что им лень компилировать свой код в правильном порядке зависимостей.

0 голосов
/ 18 сентября 2018

Это называется предварительным объявлением и является функцией большинства объектно-ориентированных языковых компиляторов. Он используется для объявления идентификатора, который еще не определен.

По сути, вы говорите компилятору, что существует класс с именами monitor и driver, который определен в другом месте в области компиляции. Это будет решено во время выполнения.

Для получения дополнительной информации обратитесь к следующей статье: (это на C ++, но концепция применима)

https://www.learncpp.com/cpp-tutorial/17-forward-declarations/

...