2015-03-17 4 views
0

Я хотел бы подключить табло с секвенсором + монитор агента. Подключение монитора осуществляется с помощью анализа imp (uvm_analysis_imp), поскольку монитор держит порт анализа.UVM: соединительный секвенсор + монитор с табло

Однако, я не уверен, как подключить секвенсор и табло, так как секвенсор имеет uvm_seq_item_pull_imp и это не возможно просто подключить его к анализу имп. Моя идея состояла в том, чтобы проверить порт, который используется uvm_driver вместо этого, то есть uvm_seq_item_pull_port.

К сожалению, для подключения секвенсора и табло, похоже, не характерно, но для моих целей это было бы необходимо. Можно ли использовать uvm_seq_item_pull_port для подключения к секвенсер-табло или есть более простой способ?

ответ

4

Выполнение такого рода соединения между активным компонентом (секвенсором или драйвером), как правило, неодобрительно, из-за аспектов повторного использования (я обязан договориться о том, что: D). Однако это может иметь смысл на уровне SoC.

Что вы можете сделать, это создать свой собственный класс секвенсора (возможно, у вас его уже есть), который содержит порт анализа. Вам нужно будет продлить send_request(...), чтобы также написать элемент на этом порт анализа. Затем можно подключить этот анализ порт на табло, как для обычного монитора:

class some_sequencer extends uvm_sequencer #(some_item); 
    uvm_analysis_port #(some_item) aport; 

    function void send_request(uvm_sequence_base sequence_ptr, uvm_sequence_item t, bit rerandomize = 0); 
    some_item item; 
    if (!$cast(item, t)) 
     `uvm_fatal("CASTERR", "Can't cast") 
    super.send_request(sequence_ptr, t, rerandomize); 
    aport.write(item); 
    endfunction 
endclass 

Вы можете найти рабочий пример на EDAPlayground (примечание: Я взял некоторые ярлыки из принятых принципов кодирования УВМ).

+0

Hi Tudor! Это решение сработало для меня, спасибо! У меня уже сложилось впечатление, что это «нахмурилось», чтобы делать такие связи. Однако не могли бы вы объяснить, почему это проблематично в отношении аспектов повторного использования? Просто небольшое примечание для вашего примера кода: * aport * следует называть * some_port * здесь – sebs