«Бог не меняет того, что (происходит) с людьми, пока они сами не изменят своих помыслов.» Коран, Сура 12:13

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

Материал из Wiki
Перейти к: навигация, поиск
(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 ==
* [[File: IHI0024C_amba_apb_protocol_spec.pdf | IHI0024C_amba_apb_protocol_spec.pdf ]]
+
* [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

Задание

  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.

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