Menu
Coddy logo textTech

State Machine

Часть раздела Основы путешествия по Verilog на Coddy. Урок 88 из 90.

challenge icon

Задание

Конечный автомат — это схема, которая может находиться в одном из нескольких состояний. Для UART у нас есть отдельные состояния для каждого бита: idle, start, биты данных от 0 до 7 и stop. Счётчик битов (cnt) сообщает нам, в каком состоянии мы находимся. На основе значения cnt мы решаем, какое значение отправить по линии tx.

У тебя уже есть счётчик битов из предыдущего урока. Тебе нужно изменить его так, чтобы он работал как передатчик UART.

Значения битов для отправки (для буквы 'A')

cntзначение tx
01
10
21
30
40
50
60
70
81
90
101

Что нужно сделать

  1. Добавь вход с именем start
  2. Добавь выходной регистр с именем tx
  3. В блоке initial установи tx = 1 (в состоянии idle высокий уровень)
  4. Измени логику счётчика:
    • Когда 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

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog