Menu
CoddyTech

状态机

本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 88 课,共 90 课。

challenge icon

挑战

状态机是一种可以处于多个状态之一的电路。对于 UART,每个比特都有不同的状态:空闲、起始位、数据位 0-7 和停止位。比特计数器(cnt)会告诉我们当前处于哪个状态。我们根据 cnt 来决定在 tx 线路上发送什么值。

你已经有了上一课中的比特计数器。你需要修改它,让它能够用作 UART 发送器。

要发送的比特值(字母 'A')

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

要做什么

  1. 添加一个名为 start 的输入
  2. 添加一个名为 tx 的输出 reg
  3. 在 initial 块中,设置 tx = 1(空闲时为高电平)
  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 在线编译器