状态机
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 88 课,共 90 课。
挑战
状态机是一种可以处于多个状态之一的电路。对于 UART,每个比特都有不同的状态:空闲、起始位、数据位 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 | 1 |
| 9 | 0 |
| 10 | 1 |
要做什么
- 添加一个名为
start的输入 - 添加一个名为
tx的输出 reg - 在
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基础知识中的所有课
自己练习: Verilog 在线编译器