Спец курс (Языки верификации аппаратуры)/Практические задания 3 — различия между версиями
Материал из Wiki
Krucios (обсуждение | вклад) |
Vidokq (обсуждение | вклад) (→1) APB 2) |
||
(не показаны 10 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
+ | {{ЯВА TOC}} | ||
+ | |||
= Пример = | = Пример = | ||
https://www.edaplayground.com/x/4Cis | https://www.edaplayground.com/x/4Cis | ||
Строка 4: | Строка 6: | ||
= Задание = | = Задание = | ||
# Описать интерфейс по спецификации. | # Описать интерфейс по спецификации. | ||
− | ## Интерфейс должен включать тактовый сигнал clk и сигнал сброса rst_n. | + | ## Интерфейс должен включать тактовый сигнал clk и сигнал сброса rst_n (кроме UART). |
− | ## Если интерфейс | + | ## Если интерфейс содержит в себе шины адреса\данных, то ширины шин должны задаваться параметрами. |
# Описать класс транзакций для заданной спецификации. | # Описать класс транзакций для заданной спецификации. | ||
− | ## Класс транзакции должен включать все необходимые поля | + | ## Класс транзакции должен включать все необходимые поля. Поля зависят от варианта спецификации. Например, для APB транзакции обязательно должна содержать адрес, данные и тип транзакции. Для SPI и UART транзакций достаточно только одного поля - данные. Ready Valid интерфейс подразумевает передачу данных вместе с каким-то кодом ответа, поэтому, полями транзакции логично сделать данные и код ответа. |
## Поля должны быть объявлены, как случайные. | ## Поля должны быть объявлены, как случайные. | ||
## Класс должен иметь метод конвертации в строку. | ## Класс должен иметь метод конвертации в строку. | ||
Строка 13: | Строка 15: | ||
## Одним из полей драйвера должна быть ссылка на интерфейс. Эту ссылку необходимо передавать в конструктор драйвера. | ## Одним из полей драйвера должна быть ссылка на интерфейс. Эту ссылку необходимо передавать в конструктор драйвера. | ||
## Драйвер должен иметь метод task run(), который должен описывать логику работы драйвера. | ## Драйвер должен иметь метод task run(), который должен описывать логику работы драйвера. | ||
− | ## Драйвер должен сбрасываться заднему фронту сигнала сброса и продолжать свою работу на следующем переднем фронте тактового сигнала после переднего фронта сигнала сброса. | + | ## Драйвер должен сбрасываться заднему фронту сигнала сброса и продолжать свою работу на следующем переднем фронте тактового сигнала после переднего фронта сигнала сброса, если сигнал сброса предусмотрен в сспецификации. |
## Драйвер должен обрабатывать только одну транзакцию за раз. | ## Драйвер должен обрабатывать только одну транзакцию за раз. | ||
## Транзакции на обработку должны поступать в драйвер через очередь или мейлбокс. | ## Транзакции на обработку должны поступать в драйвер через очередь или мейлбокс. | ||
## После обработки транзакции драйвер должен поместить эту транзакцию в очередь или мейлбокс ответов. | ## После обработки транзакции драйвер должен поместить эту транзакцию в очередь или мейлбокс ответов. | ||
# Создать простой тестбенч, в котором создать объект драйвера и интерфейса. | # Создать простой тестбенч, в котором создать объект драйвера и интерфейса. | ||
− | ## Описать параллельные процессы для генерации тактового сигнала и | + | ## Описать параллельные процессы для генерации тактового сигнала и случайного управления сигналом сброса, если они предусмотрены спецификацией. |
## Описать еще один процесс, в котором создать драйвер, передав ему ссылку на интерфейс, запустить метод run() драйвера. | ## Описать еще один процесс, в котором создать драйвер, передав ему ссылку на интерфейс, запустить метод run() драйвера. | ||
## Параллельно запуску метода run() запустить процесс создания объектов транзакции. Этот процесс должен создавать объект транзакции, рандомизировать ее и передавать в драйвер для исполнения. | ## Параллельно запуску метода run() запустить процесс создания объектов транзакции. Этот процесс должен создавать объект транзакции, рандомизировать ее и передавать в драйвер для исполнения. | ||
Строка 24: | Строка 26: | ||
## Тестбенч должен демонстрировать работоспособность драйвера, а студент должен быть готов объяснять работу тестбенча. | ## Тестбенч должен демонстрировать работоспособность драйвера, а студент должен быть готов объяснять работу тестбенча. | ||
− | = Спецификации = | + | = Варианты (Спецификации) = |
== 1) APB 2 == | == 1) APB 2 == | ||
− | * [ | + | * [https://www.eecs.umich.edu/courses/eecs373/readings/IHI0024C_amba_apb_protocol_spec.pdf amba_apb_protocol_spec.pdf(30 July 2010)] |
+ | * [https://drive.google.com/open?id=1hjB7rGSIFMv1ARSujUzexUN2pC0GY7rM mirror_amba_apb_protocol_spec.pdf(30 July 2010)] | ||
+ | * Главы: 2.4, 5.1, 5.2 | ||
+ | |||
== 2) UART == | == 2) UART == | ||
* [https://ru.wikipedia.org/wiki/Универсальный_асинхронный_приёмопередатчик Статья с википедии про UART] | * [https://ru.wikipedia.org/wiki/Универсальный_асинхронный_приёмопередатчик Статья с википедии про UART] |
Текущая версия на 15:21, 11 декабря 2019
Лекции ЯВА
Лекции
Практические задания
Тесты
Табель успеваемости
Экзамен
Доп. материалы
Содержание |
Пример
https://www.edaplayground.com/x/4Cis
Задание
- Описать интерфейс по спецификации.
- Интерфейс должен включать тактовый сигнал clk и сигнал сброса rst_n (кроме UART).
- Если интерфейс содержит в себе шины адреса\данных, то ширины шин должны задаваться параметрами.
- Описать класс транзакций для заданной спецификации.
- Класс транзакции должен включать все необходимые поля. Поля зависят от варианта спецификации. Например, для APB транзакции обязательно должна содержать адрес, данные и тип транзакции. Для SPI и UART транзакций достаточно только одного поля - данные. Ready Valid интерфейс подразумевает передачу данных вместе с каким-то кодом ответа, поэтому, полями транзакции логично сделать данные и код ответа.
- Поля должны быть объявлены, как случайные.
- Класс должен иметь метод конвертации в строку.
- Описать класс мастер драйвера для заданной спецификации.
- Одним из полей драйвера должна быть ссылка на интерфейс. Эту ссылку необходимо передавать в конструктор драйвера.
- Драйвер должен иметь метод task run(), который должен описывать логику работы драйвера.
- Драйвер должен сбрасываться заднему фронту сигнала сброса и продолжать свою работу на следующем переднем фронте тактового сигнала после переднего фронта сигнала сброса, если сигнал сброса предусмотрен в сспецификации.
- Драйвер должен обрабатывать только одну транзакцию за раз.
- Транзакции на обработку должны поступать в драйвер через очередь или мейлбокс.
- После обработки транзакции драйвер должен поместить эту транзакцию в очередь или мейлбокс ответов.
- Создать простой тестбенч, в котором создать объект драйвера и интерфейса.
- Описать параллельные процессы для генерации тактового сигнала и случайного управления сигналом сброса, если они предусмотрены спецификацией.
- Описать еще один процесс, в котором создать драйвер, передав ему ссылку на интерфейс, запустить метод run() драйвера.
- Параллельно запуску метода run() запустить процесс создания объектов транзакции. Этот процесс должен создавать объект транзакции, рандомизировать ее и передавать в драйвер для исполнения.
- При необходимости, реализовать в тестбенче дополнительные процессы управления входными сигналами для драйвера. Например, для APB2 спецификации нужно реализовать процесс управления сигналами PREADY, PRDATA.
- Тестбенч должен демонстрировать работоспособность драйвера, а студент должен быть готов объяснять работу тестбенча.
Варианты (Спецификации)
1) APB 2
- amba_apb_protocol_spec.pdf(30 July 2010)
- mirror_amba_apb_protocol_spec.pdf(30 July 2010)
- Главы: 2.4, 5.1, 5.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.