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

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

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

Лекции

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

Тесты

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

Экзамен

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

Содержание

Пример

https://www.edaplayground.com/x/4Cis

Задание

  1. Описать интерфейс по спецификации.
    1. Интерфейс должен включать тактовый сигнал clk и сигнал сброса rst_n (кроме UART).
    2. Если интерфейс содержит в себе шины адреса\данных, то ширины шин должны задаваться параметрами.
  2. Описать класс транзакций для заданной спецификации.
    1. Класс транзакции должен включать все необходимые поля. Поля зависят от варианта спецификации. Например, для APB транзакции обязательно должна содержать адрес, данные и тип транзакции. Для SPI и UART транзакций достаточно только одного поля - данные. Ready Valid интерфейс подразумевает передачу данных вместе с каким-то кодом ответа, поэтому, полями транзакции логично сделать данные и код ответа.
    2. Поля должны быть объявлены, как случайные.
    3. Класс должен иметь метод конвертации в строку.
  3. Описать класс мастер драйвера для заданной спецификации.
    1. Одним из полей драйвера должна быть ссылка на интерфейс. Эту ссылку необходимо передавать в конструктор драйвера.
    2. Драйвер должен иметь метод task run(), который должен описывать логику работы драйвера.
    3. Драйвер должен сбрасываться заднему фронту сигнала сброса и продолжать свою работу на следующем переднем фронте тактового сигнала после переднего фронта сигнала сброса, если сигнал сброса предусмотрен в сспецификации.
    4. Драйвер должен обрабатывать только одну транзакцию за раз.
    5. Транзакции на обработку должны поступать в драйвер через очередь или мейлбокс.
    6. После обработки транзакции драйвер должен поместить эту транзакцию в очередь или мейлбокс ответов.
  4. Создать простой тестбенч, в котором создать объект драйвера и интерфейса.
    1. Описать параллельные процессы для генерации тактового сигнала и случайного управления сигналом сброса, если они предусмотрены спецификацией.
    2. Описать еще один процесс, в котором создать драйвер, передав ему ссылку на интерфейс, запустить метод run() драйвера.
    3. Параллельно запуску метода run() запустить процесс создания объектов транзакции. Этот процесс должен создавать объект транзакции, рандомизировать ее и передавать в драйвер для исполнения.
    4. При необходимости, реализовать в тестбенче дополнительные процессы управления входными сигналами для драйвера. Например, для APB2 спецификации нужно реализовать процесс управления сигналами PREADY, PRDATA.
    5. Тестбенч должен демонстрировать работоспособность драйвера, а студент должен быть готов объяснять работу тестбенча.

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

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.

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