Как проверить, подключен ли порт анализа UVM?

Часто наши симуляции UVM терпят неудачу с сигнатурами, что мы заканчиваем отладку к несвязанным портам анализа.

Есть ли способ проверить, подключены ли порты анализа до run_phase?

3 ответа

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

В этих случаях я рекомендую проверить соединения импорта анализов во время end_of_elaboration_phase:

`CHECK_PORT_CONNECTION(my_analysis_imp)

Если указанный макрос определен следующим образом:

`define CHECK_PORT_CONNECTION(PORT) \
 begin \
 uvm_port_list list; \
 PORT.get_provided_to(list); \
 if (!list.size()) begin \
 `uvm_fatal("AP_CONNECT", \
 $sformatf("Analysis port %s not connected.", PORT.get_full_name())); \
 end \
 end

Полный рабочий пример с одним подключенным портом и одним не подключенным: http://www.edaplayground.com/x/2YG


Я считаю, что это должно быть ненужным, потому что эта проверка уже находится в uvm_port_base:: resol_bindings. Однако я считаю, что там есть ошибка. Ошибка заключается в том, что для imp size() не сообщается количество портов, привязанных к imp. Поэтому, если 3 порта привязаны к imp, тогда отчеты о размерах 1, даже если список портов имеет правильный размер.


Спасибо Виктору за пример. Я не знал логики, которую вы дали. Есть незначительная проблема в примере, который дал Виктор, w.r.t в объявлении uvm_analysis_imp. Для реализации множественного анализа следует использовать макрос uvm_analysis_imp_decl. См. Приведенную ниже ссылку для исправленного примера. http://www.edaplayground.com/x/3qx

NB: Проводка как ответ, так как я не могу ответить: (

licensed under cc by-sa 3.0 with attribution.