Как контролировать выходы DUT из теста / последовательности?

Я новичок в UVM. Пока мне удалось создать следующую среду для моего DUT.

Агенты с мониторами, драйверами и последовательностями для всех интерфейсов ввода-вывода из моего DUT. UVM env верхнего уровня. Последовательности для отправки действительных данных в DUT. Мне еще предстоит реализовать табло.

Мне трудно понять, как обрабатывать такие сценарии, как следующие:

Для интерфейса tb-dut TB должен ждать события (или транзакции) от DUT. После получения транзакции TB необходимо отправить ответ. Как лучше всего это реализовать? Как я могу отслеживать транзакцию DUT по последовательности? У моих агентов есть мониторы, которые будут отслеживать любые новые выходные сигналы от DUT. Итак, нужно ли мне каким-то образом переносить эти данные с монитора агента в мой класс теста / последовательности? Я знаю, что у монитора есть порт анализа, и его можно использовать для отправки полученных данных на табло для проверки. Итак, нужно ли мне использовать тот же порт для чтения выходных данных DUT, создания действительного ответа и отправки его в DUT?

Спасибо!


person newbie    schedule 28.03.2014    source источник


Ответы (2)


Это известно как подчиненная последовательность или ответчик. Протокол выглядит следующим образом

  1. Последовательность Slave отправляет запрос к драйверу - «Подскажите, что делать»
  2. Драйвер обнаруживает запрос уровня шины и возвращает информацию обратно в последовательность - «Это то, что вам следует сделать».
  3. Подчиненная последовательность делает то, что ей нужно, чтобы подготовить ответ, а затем отправляет элемент ответа драйверу - «Вот, держи».
  4. Драйвер завершает ответ на уровне шины содержимым элемента ответа, завершает рукопожатие, возвращаясь к последовательности - «Спасибо»

Более подробно это описано в Поваренной книге UVM Академии верификации.

person dave_59    schedule 28.03.2014
comment
Большое спасибо, Дэйв. Я работаю над последовательностью ответов. Я думаю, что мне удалось добиться определенного прогресса в получении данных запроса от DUT агенту ответа. Не могли бы вы взглянуть на мой последний вопрос по этому поводу? Я совершенно новичок в uvm land. Я был бы очень признателен за любой ввод / указатели ... stackoverflow.com/questions/23024817/ - person newbie; 12.04.2014

Это можно сделать с помощью uvm_object.

  1. Создайте базовый класс uvm_object. Определите свой виртуальный метод, например wait_state, но оставьте его пустым.
  2. Расширьте этот класс и реализуйте виртуальный метод. Включите класс в тестовую среду и создайте экземпляр объекта. Скажем, объект "my_tb"
  3. Используйте uvm_config_db # (uvm_object) :: set ..., чтобы передать его секвенсору
  4. Возьмите объект внутри секвенсора, используя uvm_config_db # (uvm_object) :: get ...
  5. Изнутри вашей последовательности: где угодно и когда угодно вы можете получить к ней доступ: p_sequencer.my_tb.wait_state ().
person AldoT    schedule 15.04.2014