Порты УВМ: поставить, получить, экспортировать, анализ

Пытаюсь освоить в УВМ, и совсем запутался в портах УВМ. Пожалуйста, помогите лучше разобраться в портах.

Так как я понял есть 3 основных типа портов

  1. Put-> get : производитель помещает данные, а потребитель получает данные. Это блокирующее заявление.
  2. Поместить->Экспорт->Имп
  3. Анализ->Подписчик: производитель передает данные, а другие подписчики получают их. Это неблокирующий оператор.

Также есть TLM_FIFO, которые позволяют буферизовать транзакцию для последующего использования. Он имеет 2 типа: uvm_tlm_fifo и uvm_tlm_analysis_fifo.

И мои вопросы:

  1. Правильно ли я понимаю?
  2. В чем разница между получением и экспортом?
  3. В чем разница между uvm_tlm_fifo и uvm_tlm_analysis_fifo?

Спасибо
Айк


person haykp    schedule 22.01.2016    source источник


Ответы (1)


Использование интерфейсов 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
comment
Большое спасибо sharvil111 за подробное объяснение!! Так можем ли мы сказать, что экспорт и получение — это одно и то же? Также, если для связи один-к-одному используется put-get, то зачем нам там нужен uvm_tlm_fifo? Другими словами, Initiator/Producer блокирует отправку транзакции и ждет, пока Target/Consumer обработает эту транзакцию, поэтому необходимо иметь FIFO там? - person haykp; 22.01.2016
comment
Порт/Экспорт — это типы соединений. В то время как put/get являются типами port. Термины инициатор - производитель, цель - потребитель относятся к компонентам, оба являются разными терминами. FIFO используются для буферизации данных. То есть для временного хранения. Допустим, ваш монитор отправил какие-то данные подписчику, а подписчик занят обработкой какой-то другой транзакции, затем эти данные хранятся в FIFO для последующей обработки, поэтому FIFO полезны. - person sharvil111; 22.01.2016
comment
sharvil111 большое спасибо за объяснение. Я думаю, мне нужно больше узнать о портах и ​​соединениях, если вы можете указать мне некоторые документы, это было бы здорово! - person haykp; 27.01.2016
comment
@haykp - Ссылка на главу 2 из руководства пользователя UVM в моем ответе - хороший материал для портов. Кроме того, этот сайт может быть полезен для понимания основ. - person sharvil111; 27.01.2016