Конечный автомат
Часть раздела Основы путешествия по Verilog на Coddy — урок 88 из 90.
Задание
Конечный автомат — это схема, которая может находиться в одном из нескольких состояний. Для UART у нас есть разные состояния для каждого бита: ожидание (idle), стартовый бит, биты данных 0-7 и стоповый бит. Счетчик бит (cnt) сообщает нам, в каком состоянии мы находимся. На основе cnt мы решаем, какое значение отправить по линии tx.
У вас есть счетчик бит из предыдущего урока. Вам нужно модифицировать его для работы в качестве передатчика UART.
Значения бит для отправки (для буквы 'A')
| cnt | значение tx |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 1 |
| 10 | 1 |
Что нужно сделать
- Добавьте входной сигнал с именем
start - Добавьте выходной регистр
regс именемtx - В блоке
initialустановитеtx = 1(состояние ожидания — высокий уровень) - Измените логику счетчика:
- Когда
cnt == 0иstart == 1, установитеcnt <= 1(начало передачи) - Когда
cntнаходится в диапазоне от 1 до 9, увеличивайте его:cnt <= cnt + 1 - Когда
cnt == 10, сбросьте его в0
- Когда
Попробуйте сами
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
end
endmoduleВсе уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial