Использование интерфейсов TLM изолирует каждый компонент от изменений в других компонентах по всей среде.
Для понимания переносов используются две общие терминологии: Производитель и Потребитель. Вместо производителя и потребителя подумайте о инициаторе и цели взаимодействия между компонентами.
К инициатору всегда подключен порт. Так же, как у драйвера есть seq_item_порт.
У цели всегда есть экспорт. Так же, как секвенсор с seq_item_экспортом.
Для портов Put/Get:
Initiator/Producer:
port.put(tr);
Target/Consumer: (Note the Input in task)
task pet(input simple_trans t);
//...
endtask
В порте put инициатором является производитель, который помещает транзакцию для < strong>потребитель. Инициатор/Производитель блокирует до тех пор, пока поставленная задача не будет разблокирована Целью/Потребителем.
Initiator/Consumer:
port.get(tr);
Target/Producer:(Note the Output in task)
task get(output simple_trans t);
//...
endtask
Находясь в порту получения, инициатором является потребитель. Потребитель запрашивает транзакцию, а производитель предоставляет ее. Инициатор/Потребитель блокируется до тех пор, пока задача получения не будет разблокирована Целью/Производителем.
Порты put/get обычно используются для обеспечения операционного поведения системы. Эти порты используются для общения.
Порты анализа обычно используются для трансляции транзакции. Метод write всегда является неблокирующим. Может быть ноль или более подключений к портам анализа. Опять же, правила для инициатора и цели остаются прежними.
Initiator:
port.write(tr);
Target:(Note the function, not task)
function void write(simple_trans tr);
//...
endfunction
Все порты требуют реализации методов в пользовательских классах. uvm_*_imp
используется для того же. В то время как буферизация данных может выполняться через FIFO.
Для портов анализа используется uvm_analysis_fifo
, так как эти FIFO должны иметь возможность дальнейшей трансляции транзакции. Размер анализируемого FIFO по умолчанию неограничен.
В то время как uvm_tlm_fifo
используется, когда используются порты put/get, то есть для связи один-к-одному. Размер анализируемого FIFO по умолчанию — 1, который можно изменить на неограниченный.
Опять же, FIFO всегда помещает/получает данные по запросу от компонента, отныне на обоих концах существует экспортный тип соединения.
Для получения дополнительной информации см. Руководство пользователя UVM.
person
sharvil111
schedule
22.01.2016