Скачиваний:
35
Добавлен:
09.05.2014
Размер:
126.79 Кб
Скачать

Лабораторная работа № 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] – порт чтения из памяти (асинхронное чтение)

Соседние файлы в папке Лаб3