ЛАБОРАТОРНАЯ РАБОТА №4
1. Цель работы.
Целью работы является ознакомление с внешним видом проекта, созданным полностью на языке описания аппаратуры VHDL.
Домашнее задание:
2.Задания для выполнения лабораторной работы
2.1Предварительная подготовка к выполнению лабораторной работы
1.Изучить описание к данной лабораторной работе и рекомендованную литературу.
2.Ознакомиться с принципом работы универсального асинхронного при-
емопередатчика (Universal Asynchronous Receiver-Transmitter (UART))
3.Подготовить ответы на контрольные вопросы, приведенные в данном описании лабораторной работы.
4.Подготовить письменный отчет принятой на кафедре формы. Отчет должен содержать:
-титульный лист принятой на кафедре формы;
-номера лабораторной работы, варианта работы и формулировку цели работы;
-исходные данные выполняемого варианта;
-домашний расчет;
-результат выполнения работы;
-краткие выводы по работе.
2.2Выполнение исследований в лаборатории
Разделы выполнения лабораторной работы:
2.2.1.Создание проекта
2.2.2.Добавление и изменение источников VHDL
2.2.3.Вывод информации на компьютер.
Отладочная плата Atlys Spartan-6 оснащена интерфейсом универсального асинхронного приемопередатчика (UART), порт которого обозначен как J17
(Рис. 4.1).
Рис. 4.1. Порт UARTна плате Atlys Spartan-6
54
В данной работе будет задействована только передающая часть интерфейса от платы к компьютеру. Проект является модифицированной версией демонстрационного проекта для работы с GPIO периферией.
2.2.1 Создание проекта
Создание нового проекта нужно выполнить по пункту 2.2.1, но в настройках мастера нового проекта нужно выбрать файл верхнего уровня HDL (Рис.
4.2)
Рис. 4.2. Настройки нового проекта.
Настройки параметров платы в следующем шаге мастера создания нового проекта, как и в предыдущих лабораторных работах, менять не следует.
2.2.2 Добавление и изменение источников VHDL
В этой работе не будут создаваться новые файлы. Нужно добавить уже готовые VHDL файлы в этот проект.
Для этого нужно кликнуть правой кнопкой в свободной областе
«Hierarchy» и выбрать «Add Source» (Рис. 4.3.).
55
Рис. 4.3. Добавление готовых файлов-источников
И добавить следующие файлы: UART_TX_CTRL.vhd, GPIO_demo.vhd, btn_debounce.vhd и pins.ucf.
В появившемся окне (Рис. 4.4)убедиться, что нет ошибок и нажать «OK».
Рис. 4.4. Окно мастера импорта файлов в проект
После импорта в окне иерархии появится уже готовая к созданию конфигурационного файла иерархия (Рис. 4.5.).
56
Рис. 4.5. Иерархия проекта
В данной работе допускается изменения алгоритма работы. Все изменения должны касаться только файла верхнего уровня GPIO_demo.vhd, именно там содержится алгоритм работы. (Файл UART_TX_CTRL.vhd содержит описание работы интерфейса UART; файл btn_debounce.vhd отвечает за исправления явления дребезга контактов для кнопок и файл pins.ucf отвечает за связь с контактами отладочной платы)
Итак, какие строки кода интересны в данном проекте:
with BTN(4)select
LED <= SW when '0',
"00000000"when others;
Данные строки посылают своё состояние на светодиоды всегда, когда не нажата кнопка BTN(4), а когда она нажата – передает 0 на все светодиоды («гасит» их).
btn_reg_process : process (CLK) begin
if (rising_edge(CLK)) then
btnReg <= btnDeBnc(3 downto 0); end if;
end process;
Этот процесс btn_reg_process выполняет функцию избавления от дребезга контактов (иными словами выполняет файл btn_debounce.vhd).
string_load_process : process (CLK)
Процесс string_load_process выполняет одну из главных задач этого проекта – загрузку строк, которые отправляются на передачу. Рассмотрим его более подробно, построчно:
variable STR0 : CHAR_ARRAY(0 to 7) := (X"20", X"20", X"20", X"20", X"20", X"20",
57
X"20",
X"20");
variable STR1 : CHAR_ARRAY(0 to 1) := (X"20", X"20");
Эти две переменные типа CHAR_ARRAY (это пользовательский тип данных, он объявлен вверху файла и представляет собой 8-битный вектор) являются двумя строками, каждые значения которых собой представляют 8- битный вектор.
Строки STR0 и STR1заполнены символами «пробела» X"20" (Так как UART принимает данные в виде 8 бит и интерпретирует их в виде ASCII кода, то и значения, которыми мы оперируем, представляют соответственно
ASCII код).
begin
if (rising_edge(CLK)) then
if (uartState = LD_INIT_STR) then ind := 0;
while ind < 8 loop
if SW(ind) = '0' then
STR0(ind):= std_logic_vector(to_unsigned(character'pos('0'), 8));
elsif SW(ind) = '1' then
STR0(ind):= std_logic_vector(to_unsigned(character'pos('1'), 8));
end if;
ind := ind + 1; end loop;
sendStr <= STR0; strEnd <= 8;
Дальше на каждом цикле тактового счетчика, если состояние UART определено как LD_INIT_STR (т.е. нажата центральная кнопка на плате), то запускается цикл из 8 итераций, в каждой из которых считывается состояние соответствующего переключателя и в соответствующее место строки записывается 8-битное значение ASCIIкода «0» или «1». И строка отправляется на передачу.
elsif (uartState = LD_BTN_STR) then sendStr(0 to 1) <= STR1; strEnd <= 2;
end if; end if;
end process;
Если состояние UART определено как LD_BTN_STR (т.е. нажата любая из четырех оставшихся кнопок), то на передачу отправляются только два 8- битных значения строки STR1, которые содержат в себе ASCII значение символа «пробел».
Сохраните все изменения и успешно создайте конфигурационный файл (Пункт 1.4), а после загрузите его в отладочную плату (Пункт 1.5)
2.2.3. Вывод информации на компьютер
58
После конфигурирования платы не отключая питаниянужно вытащить кабель«плата-компьютер» из разъема PROG и подключить к разъему UART
(Рис. 4.1)
После подключения к разъему UART нужно запустить терминал Tera Term
В настройках подключения выбрать Serial и порт, отвечающий за подключенную плату (Рис. 4.6)
Рис. 4.6 Настройки терминала Tera Term
Все приготовления готовы, выбрав какую-либо комбинацию переключателей (зажгутся соответствующие светодиоды) (Рис. 4.7)
Рис 4.7. Пример комбинации переключателей
И после, нажав центральную кнопку в терминале должно высветиться следующее (Рис. 4.8):
59
Рис 4.8. Вывод информации в Tera Term
Это значит, что всё работает так, как и планировалось.
Можно изменить код проекта и попробовать новые функции или другой вывод информации.
3. Методические указания
Одной из важнейших задач проектирования микропроцессорных систем (МПС) является организация взаимодействия с устройствами ввода-вывода (УВВ) – источниками и приемниками данных. Устройства ввода-вывода различаются: разрядностью данных; быстродействием; управляющими сигналами; типом протокола, т.е. определенным порядком обмена.
Данные в УВВ изменяются в произвольный или определенный момент времени.
Соединение УВВ с системной шиной МПС осуществляется с помощью интерфейса ввода/вывода, который согласовывает сигналы УВВ с системной шиной МПС.
Как правило, интерфейс состоит из одного или нескольких портов ввода/вывода и схем управления ими. При проектировании интерфейса ввода/вывода необходимо обеспечить: хранение информации, поступающей от УВВ; доступ к информации со стороны микропроцессора; управление обменом; преобразование форматов данных.
Последовательный интерфейс использует одну сигнальную линию для передачи данных, по которой биты информации передаются друг за другом последовательно. При последовательной передаче сокращается количество сигнальных линий, что упрощает разводку проводников на печатной плате, уменьшает габариты устройства и позволяет делать более помехозащищенные интерфейсы. При последовательной передаче каждый информационный бит должен сопровождаться импульсом синхронизации — стробом. Если импульсы синхронизации передаются от одного устройства к другому по выде-
60
ленной линии, то такой интерфейс называют синхронным, в этом случае генератор синхронизации располагается на стороне устройства инициирующего передачу. Если же приемник и передатчик содержат каждый свой генератор синхроимпульсов, работающий на одной частоте, то такой интерфейс называется асинхронным. Получается, что приемник информации сам вырабатывает синхроимпульсы.
Периферийное устройство UART – это полнодуплексный Универсальный Асинхронный Приемник/Передатчик (Universal Asynchronous Receiver/Transmitter – UART), совместимый с промышленным стандартом 16450. UART преобразует данные между последовательным и параллельным форматами. Последовательная передача (прием) выполняется по асинхронному протоколу, который допускает изменение длины слова данных, различное число стоп-бит, формирование сигнала четности. UART также может включать аппаратные средства модемного управления и обработки прерываний.
При передаче по интерфейсу UART каждому байту данных предшествует СТАРТ-бит, сигнализирующий приемнику о начале посылки, за СТАРТбитом следуют биты данных. Завершает посылку СТОП-бит, гарантирующий паузу между посылками. СТАРТ-бит следующего байта посылается в любой момент после СТОП-бита, то есть между передачами возможны паузы произвольной длительности. СТАРТ-бит, обеспечивает простой механизм синхронизации приемника по сигналу от передатчика. Внутренний генератор синхроимпульсов приемника использует счетчик-делитель опорной частоты, обнуляемый в момент приема начала СТАРТ-бита. Этот счетчик генерирует внутренние стробы, по которым приемник фиксирует последующие принимаемые биты.
4.Контрольные вопросы
1.Какие функции выполняет порт последовательной передачи данных?
2.Опишите работу периферийного устройства UART. Пояснения сделайте с помощью временных диаграмм.
3.Что такое пользовательский тип данных в VHDL? Как он объявляется?
4.В какой код преобразуются данные, принятые UART?
5.Опишите назначение основных элементов отладочного набора для ПЛИС Xilinx Spartan.
6.Для чего в языке VHDL используются библиотеки?
7.В листинге файла GPIO_demo.vhd укажите декларацию компонентов проекта. Какие функции выполняют эти компоненты?
8.Правильно ли, что компоненты, декларируемые в архитектурном теле, должны специфицироваться полностью (т.е. вместе с интерфейсом и выполняемыми функциями)? Поясните на примере программы, приведенной в Приложении 3.1.
9.Сколько архитектурных тел может быть связано с одним entity? Поясните на примере программы, приведенной в Приложении 3.1.
10.Разрешается ли специфицировать начальное значение порта?
61
11.Поясните назначение каждого из блоков и особенности их реализаций. 12. В какой части VHDL-кода должны быть декларированы локальные
сигналы архитектурного тела? Поясните на примере программы, приведенной в Приложении 3.1.
13.С помощью фрагмента программы, приведенной в Приложении 3.1, поясните работу интерфейса UART.
14.С помощью фрагмента программы, приведенной в Приложении 3.1, поясните работу устройства, выполняющего функцию избавления от дребезга контактов.
5.Литература
1.Бабак В.П. VHDL: справочное пособие по основам языка / В.П. Бабак, А.Г. Корченко, Н.П. Тимошенко, С.Ф. Филоненко и др. – М.: Издательский дом «Додэка-XXI», 2008.
2.Тарасов И.Е. Разработка цифровых устройств на базе ПЛИС Xilinx с применением языка VHDL. –М.: Горячая линия-Телеком. – 2005. – С. 140145.
3.Бибило П.Н. Основы языка VHDL. 2-е изд. – М.: Солон-Р, 2002.
62
