Как отправить данные из табло в последовательность

Мне нужно отправить данные из табло в мою последовательность чтения. Каков наилучший способ сделать это.

У меня есть последовательность чтения из памяти, которая должна начинаться после завершения последовательности записи. И так как последовательность записи генерирует случайные адреса записи в память, мне нужно где-то хранить эти адреса. И после окончания последовательности записи отправьте на чтение последовательности. Таким образом, я храню эти адреса в системе показателей, так как этот адрес мне нужен также в таблице результатов для сравнения с прочитанными данными позже. Теперь я не знаю, как отправить данные из Scorebaord для чтения последовательности. Я использую порты get-get, но мне не нравится идея, что мне нужно использовать uvm_tlm_fifo для их подключения. Есть другие идеи?

2 ответа

Табло и секвенсор являются компонентами. Лучше всего связываться между этими компонентами через интерфейсы TLM. Сделайте так, чтобы табло транслировало некоторую информацию из порта анализа, и чтобы этот порт подключался к импу TLM или fifo в секвенсоре.

Последовательность должна иметь указатель на свой собственный секвенсор, называемый p_sequencer. Затем он может дождаться получения FIFO информации с табло.

Порты TLM и fifo могут показаться чрезмерными, но они являются лучшим выбором по причинам повторного использования и переносимости. Предположим, у вас есть несколько табло, передающих данные в несколько разных последовательностей? Простое изменение соединений может включить такой сценарий без необходимости что-либо изменять.

Идея отправки данных с табло в последовательность противоречит общим принципам построения надежного испытательного стенда. Что вам лучше сделать, так это совместно использовать объект, который хранит эти адреса между последовательностями записи и чтения через соответствующие им секвенсоры. Чтобы упростить задачу, вы также можете использовать последовательность более высокого уровня, которая генерирует адреса и передает эту информацию последовательностям чтения и записи.

Если невозможно собрать данные из последовательности записи (т.е. последовательность записи генерирует список / очередь адресов) и разрешить основной / виртуальной последовательностям передать этот массив в последовательность чтения

main_sequence { 

write_sequence.start( ...);
write_sequence.get_address_list(arr);
read_sequence.set_address_list(arr);
read_sequence.start(...);

}

Мы могли бы попробовать подходы ниже -

1) Список может быть сохранен в секвенсоре. Поскольку секвенсор является частью агента, он будет доступен для всего запуска теста. Также это будет предоставлено последовательностям, даже если они запускаются из отдельного потока. Таким образом, две последовательности могут общаться через секвенсор.

write_sequence { 
  my_sequencer ;
  $cast(my_sequencer,m_sequencer);
  my_sequencer.set_address_list(arr);

}

read_sequence { 
  my_sequencer ;
  $cast(my_sequencer,m_sequencer);
  my_sequencer.get_address_list(arr);

}

2) Если вам нравится подход с использованием табло, вы можете создать класс, который будет обрабатывать получение и настройку списка адресов. Класс может быть создан в top-env и подключен к табло. Табло может затем использовать класс, чтобы установить список адресов. Последовательность чтения может получить дескриптор этого класса через uvm_config_db и использовать его для получения списка адресов. [класс также помещается в uvm_config_db в top-env ] . При таком подходе мы должны быть уверены, что табло получает и обрабатывает адреса до начала чтения.

Другие вопросы по тегам