Редко, когда вам понадобится 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 категорически не рекомендует этот вид кодирования, так как эти зависимости делают код менее пригодным для повторного использования.
Иногда люди используют прямую определение типа, даже когда циклических зависимостей нет, потому что им лень компилировать свой код в правильном порядке зависимостей.