отчеты по лабораторным работам / лабораторная работа №3 / Лаб3 / lab3
.pdfЛабораторная работа № 3
“ Разработка цифровых схем с использованием языка VerilogHDL”
Цель работы:
Введение в технологии языкового проектирования цифровой аппаратуры.
Задачи:
1.Изучение языка Verilog;
2.Проектирование простейших цифровых устройств с использованием языка Verilog;
3.Ознакомление со средой цифрового моделирования ModelSim, средствами САПР Quartus для синтеза и временного анализа цифровых схем.
Инструментальные средства (оборудование и программное обеспечение) для выполнения работы:
Лабораторная работа выполняется в среде цифрового моделирования Modelsim
фирмы Mentor Graphics и САПР Quartus фирмы Altera.
Порядок выполнения работы:
1.По материалам лекций и вспомогательной литературы изучить основы языка Verilog. Ознакомиться с работой в САПР Quartus и среде моделирования Modelsim.
2.Спроектировать структурную схему устройства, реализующего заданную функциональность. Схема должна быть построена по принципу FSMD: тракт
данных + управляющий автомат.
3.Описать схему на языке Verilog.
4.Создать тестовое окружение (testbench), полностью покрывающее заданную функциональность. Провести моделирование в среде Modelsim. Результаты представить на временных диаграммах и в виде текстового лога тестрования.
5.В пакете Quartus провести синтез схемы на основе Verilog-описания. Оценить соответствие полученной после синтеза схемы с ранее составленной структурной схемой устройства.
6.В пакете Quartus провести временной анализ полученной схемы. Определить максимально допустимую частоту работы схемы. Определить критический путь.
Контрольные вопросы для защиты:
1.Поясните различие между типами reg и wire.
2.Какие значения может принимать битовый сигнал в Verilog?
3.При выполнении каких условий конструкция always будет синтезирована в виде комбинационной схемы?
4.Для чего используется конструкция initial?
5.Поясните назначение тестового окружения (testbench)?
6.Поясните разницу между блокирующим и не блокирующим присваиванием.
7.Из чего состоит интерфейс модуля в Verilog?
Варианты заданий:
Номер варианта, описание |
Входные порты |
|
Выходные порты |
1. Последовательностный |
clk – тактирование; |
result[LEN*2-1 : 0] – |
|
умножитель. Разрядность |
rst_n – асинхронный сброс |
результат; |
|
данных задается в виде |
(по уровню лог. 0); |
ready – сигнал готовности |
|
параметров модуля. |
A [LEN-1 : 0] – |
множимое; |
результата; |
|
B [LEN-1 : 0] – |
множитель; |
|
|
start – сигнал запуска |
|
|
|
операции; |
|
|
|
|
|
|
Рисунок 1 структурная схема умножителя
2. Блок вычисления |
clk – тактирование; |
sout [17:0] – выходные |
апериодической свертки. |
rst_n – асинхронный сброс |
данные (преобразованные) |
Разрядность данных – 8 бит. |
(по уровню лог. 0); |
valid – признак |
Размер ядра свертки – 3. |
sin[7:0] – линия |
достоверности данных на |
|
последовательной загрузки |
sout (устанавливается в 0 в |
|
данных/коэффициентов ядра |
момент загрузки |
|
свертки. |
коэффициентов) |
|
load_k – сигнал загрузки |
|
|
коэффициентов ядра свертки, |
|
|
если установлен в 1, значит |
|
|
следующие три отсчета на |
|
|
sin должны быть загружены |
|
|
в память коэффициентов. |
|
Апериодическая свертка задается формулой:
=
|
|
|
|
|
|
где |
= [ . . . . ] вектор ядра свертки (в данном случае |
задается тремя |
|||
числами, к примеру [ 1, 2, 1 ]) |
|
|
|
|
|
Xi – исходный сигнал. |
|
|
|
|
|
|
|
|
|
|
|
3. |
Блок вычисления |
clk – |
тактирование; |
sout [9:0] – |
выходные |
|
апериодической |
rst – |
асинхронный сброс (по |
данные (преобразованные) |
|
|
корреляции. Разрядность |
уровню лог. 1); |
valid – признак |
||
|
данных – 4 бит. |
sin[3:0] – линия |
достоверности данных на |
||
|
Размер ядра – 5. |
последовательной загрузки |
sout (устанавливается в 0 в |
||
|
данных/коэффициентов ядра |
момент загрузки |
|
свертки. |
коэффициентов) |
|
load_k – сигнал загрузки |
|
|
коэффициентов ядра |
|
|
корреляции, если установлен |
|
|
в 1, значит следующие |
|
|
четыре отсчета на sin |
|
|
должны быть загружены в |
|
|
память коэффициентов. |
|
Апериодическая корреляция задается формулой:
=
где = [ . . . . ] вектор ядра корреляции (в данном случае задается пятью числами, к примеру [ 1, 2, 1, 3, 1 ])
Xi – исходный сигнал.
4. |
Линейный усредняющий |
clk – |
тактирование; |
sout [9:0] – выходные |
|
фильтр. |
rst – |
асинхронный сброс (по |
данные (усредненный |
|
Разрядность данных – 8 бит. |
уровню лог. 1); |
сигнал) |
|
|
Размер окна усреднения – 4. |
sin[7:0] – линия |
|
|
|
|
последовательной загрузки |
valid – признак |
|
|
Весовые коэффициенты для |
данных (исходный сигнал) |
достоверности данных на |
|
|
каждого элемента задаются |
kin[7:0] – порт для загрузки |
sout (устанавливается в 0 |
|
|
в виде (1/n^2) : 0 , ½ , ¼ , |
весовых коэффициентов, по |
после перезагрузки |
|
|
1/8 |
2 бита на каждый |
коэффициентов) |
|
|
|
коэффициент |
|
|
|
|
kload – сигнал загрузки |
|
|
|
|
весовых коэффициентов |
|
|
|
|
|
|
|
5. |
Медианный фильтр |
clk – |
тактирование; |
sout [9:0] – выходные |
|
Разрядность данных – 8 бит. |
rst – |
асинхронный сброс (по |
данные (фильтрованный |
|
Размер окна (радиус) |
уровню лог. 1); |
сигнал) |
|
|
фильтра – |
sin[7:0] – линия |
|
|
|
программируемый (от 3 до |
последовательной загрузки |
valid – признак |
|
|
5) |
данных (исходный сигнал) |
достоверности данных на |
|
|
|
kin[1:0] – порт для загрузки |
sout (устанавливается в 0 |
|
|
|
размера окна (00 – 3, 01 – 4, |
после перезагрузки размера |
|
|
|
10 – 5, 11 – не используется ) |
окна) |
|
|
|
kload – сигнал загрузки |
|
|
|
|
размера окна |
|
|
|
|
|
|
|
6. |
Модуль, вычисляющий |
clk – |
тактирование; |
mem_out[7:0] – порт для |
|
определитель матрицы |
rst_n – синхронный сброс |
записи результата в память |
|
|
|
(по уровню лог. 0); |
addr[7:0] – адрес |
|
|
Размер матрицы 3x3 |
|
|
чтения/записи |
|
Разрядность данных 8 бит |
baseaddr[7:0] – базовый |
write_en |
|
|
|
адрес |
|
|
|
Элементы матрицы |
start – сигнал запуска |
|
|
|
расположены в памяти, |
вычислений |
|
|
|
последовательно, начиная с |
mem_in [7:0] – порт чтения |
|
|
|
базового адреса |
|
||
|
|
из памяти (асинхронное |
|
|
|
Результат сохраняется по |
чтение) |
|
|
|
адресу baseaddr - 1 |
|
|
|
|
Память моделируется в |
|
|
|
|
модуле тестового окружения |
|
|
|
|
(testbench) |
|
|
|
|
|
|
|
|
7. |
Модуль, осуществляющий |
clk – |
тактирование; |
mem_out[7:0] – порт для |
|
перемножение матриц |
rst_n – синхронный сброс |
записи результата в память |
|
|
|
(по уровню лог. 0); |
addr[7:0] - адрес |
|
|
Размер матриц 2x2 |
baseaddr[7:0] – базовый |
чтения/записи |
|
|
Разрядность данных 8 бит |
write_en |
||
|
|
адрес |
|
|
|
Элементы матриц |
start – сигнал запуска |
|
|
|
расположены в памяти, |
вычислений |
|
|
|
последовательно, начиная с |
mem_in [7:0] – порт чтения |
|
|
|
базового адреса |
|
||
|
|
из памяти (асинхронное |
|
|
|
Результат сохраняется по |
чтение) |
|
|
|
адресам начиная с baseaddr |
|
|
|
|
+ 8 |
|
|
|
|
Память моделируется в |
|
|
|
|
модуле тестового окружения |
|
|
|
|
|
|
|
|
8. |
Кодер кода Хемминга |
clk – |
тактирование; |
mem_out[7:0] – порт для |
|
|
rst_n – синхронный сброс |
записи результата в память |
|
Разрядность кода 7-4 |
(по уровню лог. 0); |
addr[7:0] - адрес |
||
|
|
|
|
чтения/записи |
Исходные данные хранятся в |
baseaddr[7:0] – базовый |
write_en |
||
памяти, начиная с базового адреса. |
адрес |
|
||
|
|
count[4:0] – число байт, |
|
|
Разрядность памяти – 8. Результат |
которые требуется |
|
||
кодирования одного байта |
закодировать |
|
||
исходных данных записывается в 2 |
start – сигнал запуска |
|
||
байта результата (2 бита не |
вычислений |
|
||
используются). |
mem_in [7:0] – порт чтения |
|
||
|
|
|
||
Память моделируется в модуле |
из памяти (асинхронное |
|
||
тестового окружения (testbench) |
чтение) |
|
||
|
|
|
|
|
|
|
|
|
|
9. |
Декодер кода Хемминга |
clk – |
тактирование; |
mem_out[7:0] – порт для |
|
|
rst – |
асинхронный сброс (по |
записи результата в память |
Разрядность кода 7-4 |
уровню лог. 1); |
addr[7:0] - адрес |
||
|
|
|
|
чтения/записи |
Исходные данные хранятся в |
baseaddr[7:0] – базовый |
write_en |
||
памяти, начиная с базового адреса. |
адрес |
|
||
Разрядность памяти – 8, 1 бит не |
count[4:0] – число байт, |
|
||
используется. |
которые требуется |
|
||
|
|
декодировать |
|
|
Память моделируется в модуле |
start – сигнал запуска |
|
||
тестового окружения (testbench) |
вычислений |
|
||
mem_in [7:0] – порт чтения из памяти (асинхронное чтение)
