«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.

Спец курс (Языки верификации аппаратуры)/Практические задания 4

Материал из Wiki
Перейти к: навигация, поиск
Лекции ЯВА

Лекции

Практические задания

Тесты

Табель успеваемости

Экзамен

Доп. материалы

Содержание

Пример

https://www.edaplayground.com/x/5jtm

Задание

  1. Использовать интерфейс из 3 лабораторной работы.
  2. Использовать класс транзакций из 3 лабораторной работы для заданной спецификации.
    1. Предусмотреть в транзакции поле для контроля задержки транзакции. Поле должно быть целочисленное и беззнаковое.
    2. Получив транзакцию, драйвер должен выдерживать паузу перед обработкой транзакции, равную значению задержки в объекте транзакции.
    3. Класс транзакции должен включать методы для сравнения с другими объектами транзакций.
  3. Описать класс монитора для заданной спецификации.
    1. Одним из полей монитора должен быть виртуальный интерфейс. Интерфейс нужно передать в монитор до начала работы монитора.
    2. Монитор должен иметь метод task run(), который должен формировать объекты транзакции исходя из изменений сигналов интерфейса.
    3. Монитор должен сбрасываться по заднему фронту сигнала сброса и продолжать свою работу на следующем переднем фронте тактового сигнала после переднего фронта сигнала сброса, если сигнал сброса предусмотрен в спецификации.
    4. Собранные транзакции монитор должен помещать в мейлбокс или очередь, расположенную в мониторе.
  4. Описать класс агента для заданной спецификации.
    1. Агент должен включать поле для конфигурации агента в пассивный и активный режимы работы.
    2. Агент должен включать в себя объекты монитора и драйвера. Объект драйвера включается только в случае активного агента.
    3. Агент должен иметь метод для передачи виртуального интерфейса драйверу и монитору.
    4. Агент должен иметь метод task run(), который запускает в параллель методы run драйвера и монитора.
  5. Создать простой тестбенч, в котором создать объект(ы) агента и интерфейса.
    1. Описать параллельные процессы для генерации тактового сигнала и случайного управления сигналом сброса, если они предусмотрены спецификацией.
    2. Описать еще один процесс, в котором создать агент, передав ему ссылку на интерфейс, запустить метод run() агента.
    3. Параллельно запуску метода run() запустить процесс создания объектов транзакции. Этот процесс должен создавать объект транзакции, рандомизировать его и передавать в драйвер для исполнения.
    4. При необходимости, реализовать в тестбенче дополнительные процессы управления входными сигналами для драйвера. Например, для APB2 спецификации нужно реализовать процесс управления сигналами PREADY, PRDATA.
    5. Описать еще один процесс, который будет сравнивать объекты транзакций, получаемые от монитора и передаваемые драйверу. Передаваемые драйверу транзакции можно получать из мейлбокса ответов драйвера, если он предусмотрен в драйвере.
    6. Тестбенч должен демонстрировать работоспособность агента, а студент должен быть готов объяснять работу тестбенча.
    7. Для интерфейсов SPI и UART тестбенч должен содержать 2 агента и 2 интерфейса, соединенные друг с другом следующим образом: TX (MOSI) первого к RX (MISO) второго и RX (MISO) первого к TX (MOSI) второго. Для UART запускать транзакции следует на двух агентах одновременно. Сравнивать нужно транзакции между двумя агентами следующим образом: транзакции первого драйвера сравнивать с транзакциями второго монитора и транзакции первого монитора сравнивать с транзакциями второго драйвера (только для UART).

Варианты (Спецификации)

1) APB 2

2) UART

3) SPI

4) Ready Valid

  • Интерфейс содержит следующие сигналы:
    • input clk - тактовый сигнал.
    • rst_n - сигнал сброса.
    • input ready - сигнал от слейва к мастеру, который означает, что data и resp валидны.
    • output valid - сигнал от мастера к слейву. Сигнализирует о запросе на вычитку данных слейва. Установив этот сигнал в значение 1, мастер обязан дождаться момента, когда слейв установит ready в 1.
    • input data (N-битная шина) - шина данных. Значения на ней валидны только когда ready == 1.
    • input resp - сигнал, сигнализирующий об ошибке. Значение валидно только при ready == 1. Значение 1 соответствует ошибке, 0 - ОК.
    • Транзакция считается завершенной, когда по переднему фронту тактового сигнала и ready, и valid имеют значение 1.

Пример взаимодействия