Menu
CoddyTech

Máy trạng thái

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 88 trên 90.

challenge icon

Thử thách

Máy trạng thái là một mạch có thể ở một trong nhiều trạng thái. Với UART, ta có các trạng thái khác nhau cho từng bit: chờ, bắt đầu, các bit dữ liệu từ 0 đến 7 và dừng. Bộ đếm bit (cnt) cho biết ta đang ở trạng thái nào. Dựa vào cnt, ta quyết định giá trị cần gửi trên đường truyền tx.

Bạn đã có bộ đếm bit từ bài học trước. Bạn cần chỉnh sửa bộ đếm này để nó hoạt động như một bộ phát UART.

Các giá trị bit cần gửi (cho chữ 'A')

cntgiá trị tx
01
10
21
30
40
50
60
70
81
90
101

Cần làm gì

  1. Thêm một đầu vào tên là start
  2. Thêm một đầu ra reg tên là tx
  3. Trong khối initial, đặt tx = 1 (mức cao khi chờ)
  4. Thay đổi logic của bộ đếm:
    • Khi cnt == 0 và start == 1, đặt cnt <= 1 (bắt đầu truyền)
    • Khi cnt nằm trong khoảng từ 1 đến 9, tăng giá trị: cnt <= cnt + 1
    • Khi cnt == 10, đặt lại về 0

Tự làm thử

module uart_tx (
  input clk,
  output reg [3:0] cnt
);

  initial begin
    cnt = 0;
  end

  always @(posedge clk) begin
      cnt <= cnt + 1;
  end

endmodule

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online