Зарегистрируйте виртуальный класс на фабрике UVM

Есть ли у кого-нибудь способ зарегистрировать виртуальные классы на фабрике? Использование макроса object_utils определит метод type_id :: create (...), который вызывает new (...) для виртуального класса, что является недопустимым.

Естественно, переопределение типа будет обязательным для любого виртуального класса, зарегистрированного в фабрике. Было бы здорово, если бы у кого-нибудь было для этого изящное решение.


person Tudor Timi    schedule 05.03.2014    source источник


Ответы (1)


К сожалению, в UVM с виртуальным классом это невозможно сделать без воссоздания собственной фабрики. Однако вы можете использовать build_phase () этого класса, чтобы проверить, что класс был переопределен. В любом случае вы не сможете проверить это до времени выполнения. Таким образом, вы теряете проверку компилятора, которую предоставляет виртуальный класс, так зачем его использовать.

person dave_59    schedule 05.03.2014
comment
Я еще немного поигрался с этим, и он заработал, но с использованием внутренних макросов, которые вызывает uvm_object_utils. Это определенно плохая практика, но вот код для тех, кто любит приключения: edaplayground.com/x/3iJ - person Tudor Timi; 08.03.2014
comment
Поскольку вы участвуете в разработке UVM, может быть, вы можете рассмотреть это как функцию? @dave - person Tudor Timi; 08.03.2014
comment
Я подробно объясняю код фабрики в моем новом SystemVerilog OOP для проверки UVM конечно. - person dave_59; 26.05.2016