Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CUsersMISHADocumentsМИЭТПрограммируемые логические интегральные схем.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.84 Mб
Скачать

Министерство образования и науки РФ

Федеральное государственное автономное

образовательное учреждение высшего образования

«Национальный исследовательский университет

«Московский институт электронной техники»

Факультет Микроприборов и технической кибернетики

Кафедра вычислительной техники

Практикум по программируемым логическим интегральным схемам

Отчет по курсовой работе

Работу выполнили

студенты группы МП-31

Денискин М.Ю.

Коробков Д.Ю.

Свинченко А.А.

Преподаватель:

Беклемишев Д.Н.

Москва 2017

Содержание

1. Постановка задачи

2. Средства разработки

3. Структура проекта

а) ps2protocol, KP, keytodigit

б) VGA

в) i2c

г) audiocodec, Mem

д) Labirint

4. Отладка устройства на учебном стенде

5. Заключение

6. Список использованной литературы

7. Приложение 1

8. Приложение 2

9. Приложение 3

10. Приложение 4

11. Приложение 5

Постановка задачи

Создание ВУ, которое выполняет следующие функции:

1. Выводит на экран монитора лабиринт с объектом на входе и позволяет пользователю

а) Задавать цвет лабиринта и объекта;

б) Перемещать объект влево, вправо, вверх и вниз при помощи клавиш клавиатуры с учётом наличия стенок в лабиринте;

в) Завершать показ лабиринта с объектом на экране монитора и начинать сначала.

2. Воспроизведение музыки через динамики: включение/выключение с помощью переключателя на учебном стенде.

Средства разработки

1. В ходе работы использовался САПР Quartus II и высокоуровневый язык описания аппаратуры Verilog HDL. При разработке ВУ применялись редакторы схем, кода Verilog HDL, средства симуляции и компиляции, встроенные в Quartus II.

2. Также использовался учебный стенд, который представляет собой плату, на которой размещены интегральная схема программируемой логики и устройства ввода/вывода (рис.1).

Рис.1. Внешний вид учебного стенда

На рис.2 приведена упрощенная структура стенда. Центральное место на плате занимает программируемая логическая интегральная схема фирмы Altera Cyclone II EP2C20F484C7N. Загрузка ОЗУ ПЛИС производится с помощью инструментального компьютера, кабеля программирования и САПР Quartus II.

Рис.2. Структура учебного стенда

Структура проекта

В состав ВУ входят следующие модули:

Labirint

VGA

ps2protocol, KP, keytodigit

audiocodec, Mem

i2c

Ниже представлено описание каждого из них.

ps2protocol, KP, keytodigit

Данные модули выполняют следующие функции:

1. Обеспечивают передачу кода нажатой клавиши с клавиатуры, работающей по интерфейсу PS/2, на ВУ, а также передачу на клавиатуру данных: байт данных задаётся с помощью переключателей 0-7 на стенде, а сам процесс передачи инициируется нажатием кнопки 1 (ps2protocol).

Рис.3. Временная диаграмма приёма кода клавиши (10001000)

2. Формируют сигнал нажатия клавиши KP («0», если ни одна из клавиш не нажата, иначе — «1») (KP).

3. Коды клавиш «0», «1», «2» - «E», «F» переводят в соответствующие шестнадцатеричные цифры и выдают сигнал, информирующий о нажатии данных клавиш (keytodigit).

HDL-описание этих модулей приведено в приложении 1.

VGA

Данный модуль обеспечивает передачу изображения на монитор по интерфейсу VGA совместно с модулем Labirint.

Рис.4. Временная диаграмма передачи строки пикселей по VGA. Передача кадра имеет тот же вид, за исключением того, что используется другая линия синхронизации — VSYNC

Режим VGA

Длины временных промежутков при передаче строки

Конфигурация

Разрешение

a (мс)

b (мс)

c (мс)

d (мс)

Частота передачи пикселей (МГц)

VGA (60 Гц)

640x480

3,8

1,9

25,4

0,6

25 (640/c)

Таблица 1. Характеристики передачи строки пикселей

Режим VGA

Длины временных промежутков при передаче кадра

Конфигурация

Разрешение

a (линии)

b (линии)

c (линии)

d (линии)

VGA (60 Гц)

640x480

2

33

480

10

Таблица 2. Характеристики передачи кадра

Цвет пикселей задаётся с помощью 3 составляющих: R, G, B. Каждая из них определяется 4 битами (в самом интерфейсе VGA составляющие цвета являются аналоговыми сигналами, но на стенде присутствуют три 4-битных ЦАП, которые формируют эти сигналы).

Рис.5. Схема подключения VGA

HDL-описание этого модуля приведено в приложении 2.

i2c

Этот модуль обеспечивает передачу данных по интерфейсу I2C на конфигурируемый 24-битный аудиокодек Wolfson WM8731, поддерживающий частоту дискретизации от 8 кГц до 96 кГц (при воспроизведении музыки используется 8 кГц) и имеющий линейный вход, линейных выход и вход для микрофона (используется только линейный выход).

Р ис.6. Временная диаграмма передачи данных на кодек по I2C

Рис.7. Схема подключения WM8731

Если при передаче данных приёмник (WM8731) не выставил «0» на шине данных I2C_SDAT при ответе, то на стенде загорается зелёный светодиод 1.

При успешной передаче по I2C загорается зелёный светодиод 0.

HDL-описание этого модуля приведено в приложении 3.

audiocodec, Mem

Данный модуль выполняет следующие функции:

  1. Хранит 53248 выборок звука, сжатых по алгоритму IMA ADPCM (находятся в модуле Mem — однопортовая ROM-память, сгенерированная средствами Quartus);

  2. Декодирует эти выборки в 16-битные коды и подаёт их на ЦАП в WM8731.

  3. Конфигурирует WM8731, посылая соответствующие данные по I2C.

Адрес регистра WM8731

Данные регистра WM8731

Что делает

0000110

001100111

Включает WM8731, линейный выход и ЦАП

0000100

000010000

Подключает к линейному выходу ЦАП

0000111

001010011

Задаёт следующие параметры:

1. Режим работы аудиокодека: Master Mode;

2. Режим подачи кода на ЦАП: DSP Mode A;

3. Размер выборок: 16 бит.

0001000

001001101

Задаёт следующие параметры:

1. Частота дискретизации ЦАП: 8 кГц;

2. Режим тактирования: USB Mode (12 МГц);

3. Входной тактовый сигнал делится на 2 (на вход подаётся 24 МГц).

0000010

0011111001

Изменяет значения на выходе ЦАП, близкие к 0 и подаваемые на левый динамик, для улучшения звука

0000011

0011111001

Изменяет значения на выходе ЦАП, близкие к 0 и подаваемые на правый динамик, для улучшения звука

Таблица 3. Настройки WM8731

При успешной конфигурации кодека загорается зелёный светодиод 3.

Рис.8. Временная диаграмма подачи выборки звука на ЦАП (n=16)

При выставлении «1» на линии LRCLK загорается зелёный светодиод 2 (если включена передача звука).

Воспроизведение музыки начинается, если переключатель 8 переведён в верхнее положение («1»). Звук перестаёт воспроизводиться, если этот переключатель в нижнем положении («0»).

HDL - описание этого модуля и выборки звука (в шестнадцатеричном виде) приведены в приложении 4.

Labirint

Это главный модуль. Он выполняет следующие задачи:

1. Хранит два кадра для монитора, один из которых изображает лабиринт, а другой — финальное сообщение. Также совместно с модулем VGA подаёт видеоданные на монитор.

Рис.9. Лабиринт.

Рис.10. Финальное сообщение

2. Обеспечивает передвижение объекта по лабиринту посредством нажатия пользователем клавиш «↑», «←», «→», «↓», учитывая наличие стенок.

3. Позволяет пользователю задавать цвет лабиринта и объекта, а также повторно запускать приложение с лабиринтом.

Алгоритм использования ВУ:

1. Ввод цвета лабиринта: на клавиатуре нажать на три клавиши, соответствующие шестнадцатеричным цифрам. Первая цифра - интенсивность красного цвета, вторая - зеленого, третья - синего. Возможен пропуск задания интенсивности цвета посредством нажатия на клавишу «Space».

2. Аналогично ввод цвета объекта. Цвета объекта и лабиринта не должны совпадать и не должны быть одновременно равны нулю.

3. Нажатие на клавишу «Enter».

4. После появления изображения лабиринта на экране монитора нужно переместить объект в лабиринте посредством нажатия клавиш «↑», «←», «→», «↓» к щели в самой правой стене этого лабиринта. При достижении данного места выведется сообщение «WIN!».

5. Нажатие на клавишу 0 на учебном стенде для перезапуска.

В любой момент времени можно перевести переключатель 8 в верхнее/нижнее положение, чтобы начать/остановить воспроизведение музыки.

HDL - описание данного модуля приведено в приложении 5.

Отладка устройства на учебном стенде

Отладку производим в соответствии с алгоритмом использования ВУ, описанным в предыдущем пункте.

Рис.11. Учебный стенд при вводе цвета лабиринта.

Рис.12. Учебный стенд при воспроизведении звука.

Рис.13. Экран монитора с лабиринтом и объектом.

Рис.14. Экран монитора с финальным сообщением.

Рис.15. Учебный стенд при прекращении показа лабиринта.

Заключение

В результате выполнения работы было разработано вычислительное устройство, выполняющее заданные функции, и была произведена его отладка на учебном стенде. Получены навыки в проектировании микропроцессорных систем, а также опыт работы со средствами разработки (САПР Quartus II и языком Verilog HDL).

Список использованной литературы

Беклемишев Д.Н., Орлов А.Н., Попов М.Г., Кудров А.А., Переверзев А.Л. Моделирование микропроцессорных систем на базе программируемых логических интегральных схем с использованием Verilog HDL и САПР Quartus II: учеб. пособие по курсу «Микропроцессорные средства и системы» / Под ред. А.Л. Переверзева. - М.: МИЭТ, 2014. - 100 с.: ил.

Приложение 1

module ps2protocol (

input clk50,

input dir,

input reset,

input [7:0] CODE,

inout PS2_CLK,

inout PS2_DAT,

output reg [7:0] KEYCODE,

output reg KP

);

reg [3:0] state;

reg dat;

reg clk;

reg [11:0] cnt;

reg start;

initial begin

state<=4'b0000;

dat<=1'b1;

clk<=1'b0;

cnt<=12'b0000_0000_0000;

start<=1'b0;

end

assign PS2_DAT=start?dat:1'bz;

assign PS2_CLK=clk?!clk:1'bz;

always @ (posedge clk50)

if (reset==1'b0)

begin

clk<=1'b0;

cnt<=12'b0000_0000_0000;

start<=1'b0;

end

else begin

if (!dir)

clk<=1'b1;

if (clk)

begin

cnt<=cnt+1;

if (cnt==12'd2990)

start<=1'b1;

if (cnt==12'd3000)

begin

clk<=1'b0;

cnt<=12'b0000_0000_0000;

end

end

if (state==4'b0000 && PS2_CLK==1'b1)

start<=1'b0;

end

always @ (negedge PS2_CLK ) begin

if (clk && state==4'b0000)

begin

dat<=1'b0;

state<=state+1;

end

if (start)

case (state)

4'b0001:

begin

dat<=CODE[0];

state<=state+1;

end

4'b0010:

begin

dat<=CODE[1];

state<=state+1;

end

4'b0011:

begin

dat<=CODE[2];

state<=state+1;

end

4'b0100:

begin

dat<=CODE[3];

state<=state+1;

end

4'b0101:

begin

dat<=CODE[4];

state<=state+1;

end

4'b0110:

begin

dat<=CODE[5];

state<=state+1;

end

4'b0111:

begin

dat<=CODE[6];

state<=state+1;

end

4'b1000:

begin

dat<=CODE[7];

state<=state+1;

end

4'b1001:

begin

dat<=!(^CODE);

state<=state+1;

end

4'b1010:

begin

dat<=1'b1;

state<=4'b0000;

end

endcase

else

case (state)

4'b0000:

if (PS2_DAT==1'b0)

begin

state<=state+1;

KP<=1'b0;

KEYCODE<=8'b0000_0000;

end

4'b0001:

begin

KEYCODE[0]<=PS2_DAT;

state<=state+1;

end

4'b0010:

begin

KEYCODE[1]<=PS2_DAT;

state<=state+1;

end

4'b0011:

begin

KEYCODE[2]<=PS2_DAT;

state<=state+1;

end

4'b0100:

begin

KEYCODE[3]<=PS2_DAT;

state<=state+1;

end

4'b0101:

begin

KEYCODE[4]<=PS2_DAT;

state<=state+1;

end

4'b0110:

begin

KEYCODE[5]<=PS2_DAT;

state<=state+1;

end

4'b0111:

begin

KEYCODE[6]<=PS2_DAT;

state<=state+1;

end

4'b1000:

begin

KEYCODE[7]<=PS2_DAT;

state<=state+1;

end

4'b1001:

begin

if (^KEYCODE==PS2_DAT)

KEYCODE<=8'b0000_0000;

state<=state+1;

end

4'b1010:

begin

if (PS2_DAT!=1)

KEYCODE<=8'b0000_0000;

state<=4'b0000;

KP<=1'b1;

end

endcase

end

endmodule

module KP (input [7:0] key, input ready, output reg KP=1'b0);

reg f=1'b0;

always @(posedge ready)

if (key==8'hF0)

f<=1'b1;

else

if (f)

begin

KP<=1'b0;

f<=1'b0;

end

else

KP<=1'b1;

endmodule

module keytodigit (input [7:0] key, output reg [3:0] digit, output reg err);

always @*

begin

err<=1'b0;

digit<=4'h0;

case (key)

8'h45:

digit<=4'h0;

8'h16:

digit<=4'h1;

8'h1E:

digit<=4'h2;

8'h26:

digit<=4'h3;

8'h25:

digit<=4'h4;

8'h2E:

digit<=4'h5;

8'h36:

digit<=4'h6;

8'h3D:

digit<=4'h7;

8'h3E:

digit<=4'h8;

8'h46:

digit<=4'h9;

8'h1C:

digit<=4'hA;

8'h32:

digit<=4'hB;

8'h21:

digit<=4'hC;

8'h23:

digit<=4'hD;

8'h24:

digit<=4'hE;

8'h2B:

digit<=4'hF;

default:

err<=1'b1;

endcase

end

endmodule