Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
___________________________________________________________________
Факультет
«Радио и телевидение»
Кафедра
«Радиотехнических систем»
Лабораторная работа №4 по дисциплине «Микропроцессорные устройства»
«Изучение принципов работы универсального асинхронного приёмопередатчика (UART)»
Выполнили |
|
|
Студент группы БРВ2201 |
_________________________ |
Велит А.И. |
Студент группы БРВ2201 |
_________________________ |
Мусаев Д.Ш. |
Студент группы БРВ2201 |
_________________________ |
Зейналов Р.А. |
Проверил |
|
|
Ассистент кафедры РТС |
_________________________ |
Шубин Д.Н. |
Москва 2025
1. ЦЕЛЬ РАБОТЫ
Целями выполняемой лабораторной работы являются: изучение принципов создания проектов полностью на языке VHDL; изучение принципов работы интерфейса UART.
2. ТЕОРИТИЧЕСКАЯ ЧАСТЬ
Основной алгоритм работы находится в файле GPIO_demo.
Первое, что есть – это определение интерфейса взаимодействия с модулем:
где представлены следующие порты:
SW (вход) – переключатели, задающие значение для передачи;
BTN (вход) – кнопки управления;
CLK (вход) – тактовый сигнал системы;
LED (выход) – светодиоды для индикации состояния;
UART_TXD (выход) – последовательный выход UART.
Основной модуль использует два компонента: UART_TX_CTRL (осуществляет передачу байтов данных по линии UART_TX); btn_debounce (осуществляет формирования стабильных сигналов кнопок BTN, исключая механический дребезг кнопок).
Также в файле объявлен особый тип данный для состояния UART: UART_STATE_TYPE.
где:
RST_REG – сброс автомата;
LD_INIT_STR – формирование начальной строки;
SEND_CHAR – передача символа через UART;
RDY_LOW – ожидание начала передачи;
WAIT_RDY– ожидание окончания передачи;
WAIT_BTN – ожидание нажатия кнопки;
LD_BTN_STR – загрузка строки при нажатии кнопки.
Для строк определён отдельный тип данных CHAR_ARRAY, а также фиксированы длины определённых строк:
И служебные сигналы передачи: sendStr (содержит текущую передаваемую строку), strEnd (содержит длину передаваемой строки), strIndex (содержит индекс следующего символа передаваемой строки).
Отдельно задаются сигналы для определения нажатия кнопок:
и служебные сигналы контроля UART.
Управление светодиодами осуществляется нажатием пятой (BNT(4)) кнопки: если кнопка нажата, то все светодиоды гаснут, без нажатия светодиоды отображают состояние переключателей.
Обработка устранения дребезга кнопок осуществляется по фронту импульса опорной частоты вызовом компонента btn_debounce.
Итоговое значение кнопки получается логическим умножением текущего состояния кнопки и состояния из модуля btn_debounce:
При этом сигнал btnDetect активен ровно один такт.
Следующим основным блоком кода является описание логики работы состояния UART: процесс определяет, в каком состоянии находиться UARTконтроллер и какие действия выполнять: если нажата кнопка BTN(4), то начнётся передача. При старте формируется строка LD_INIT_STR, далее идёт посимвольная передача по UART, а после окончания передачи модуль переходит в режим ожидания нажатия кнопки BTN(4).
Формирование строки для передачи осуществляется процессом по импульсам тактовой частоты. Изначально создаются две строки: STR0 и STR1, заполненные пробелами. Так как UART интерпретирует каждый символ как 8-ми битный ASCII код, то и значения представлены в нём же (символ пробела X''20"). На каждом фронте тактового импульса проверяется состояние LD_INIT_STR: если оно активно, то последовательно в STR0 записывается текущее состояние переключателей SW. В результате получается строка, отражающая состояние переключателей SW в текстовом виде, которая и отправляется на передачу. Если кнопки не нажаты, то на выход передаётся строка пробелов STR1.
Отдельно описан контроль состояния текущего индекса символа и переход к следующему байту при передаче:
Также в модуле присутствует описание работы сигналов UART: при появлении состояния SEND_CHAR на вход uartData подаётся текущий символ из массива sendStr, а сигнал uartSend на один такт становится единицей, запуская передачу.
3. ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
В качестве исходных данных для выполнения экспериментальной части лабораторной работы выступают описанные выше файлы.
3.1. Симуляция с исходными файлами
Необходимо произвести симуляцию работы платы с исходными файлами: то есть кнопка BTN гасит все светодиоды при нажатии.
Результаты симуляции представлены ниже. на рисунке 2.1.1.
Рисунок 2.1.1 – Результаты симуляции исходных файлов
На рисунке 2.1.1 происходит следующее:
Опорный сигнал CLK установлен на частоту 100 МГц;
Сигнал BTN изначально установлен на 00000, однако в момент времени 0.2 мс значение BTN(4) устанавливается на 1 на 50 нс, а потом снова устанавливается на 0, что инициирует отправку данных.
Сигнал переключателей SW изначально установлен в позицию 10101010 и остаётся неизменным на протяжении всей симуляции.
Выходной сигнал LED изменяется в зависимости от нажатия BTN (4): изначально он повторяет значения SW, а в момент нажатия кнопки BTN(4) становится 00000000.
Пин uart_txd отражает передачу данных: всего передаётся 10 бит: старт-бит (0), 8 бит данных (по биту на символ) и стоп-бит (1).
Отдельно стоит заметить, что различная ширина импульсов при симуляции возникает из-за того, отправка битов по uart_txd осуществляется по фронту импульса синхронизации: смена бита txBit осуществляется по LOAD_BIT, а счётчик времени по bitTmr в состоянии SEND_BIT. То есть, если между этими двумя состояниями возникает тактовый переход или несовпадение момента установки txBit с обнулением bitTmr, один бит длится несколько периодов, а не один.
4.ВЫВОДЫ
Врезультате выполнения лабораторной работы было установлено, что предоставленный код действительно реализует алгоритм работы UART. Полученные выходные значения соответствуют ожидаемым, а по пину uart_txd передаётся корректная последовательность символов.
