Menu
Coddy logo textTech

Конечный автомат

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

challenge icon

Задание

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

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

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

cnttx value
01
10
21
30
40
50
60
70
81
90
101

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

  1. Добавьте вход с именем start
  2. Добавьте выходной reg с именем 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

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