位计数器
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 87 课,共 90 课。
挑战
在这一章中,你将一步步构建一个UART 发送器。UART 是 Universal Asynchronous Receiver-Transmitter 的缩写。它是一种简单的硬件协议,让两个设备只用一根线发送数据,再用另一根线接收数据,从而进行通信。
你可以把它想象成两个人打电话:一个人说话(发送),另一个人听(接收)。UART 一次发送一位数据,并用起始位和停止位标记每个字节的开始和结束。
UART 发送器会发送 10 位:起始位(1)、数据位(8)、停止位(1)。为了追踪当前发送到哪一位,我们需要一个位计数器,从 0 计数到 10。
位计数器的工作方式
- 从 0 开始
- 每个时钟周期加 1
- 达到 10 时,回到 0
- 一直重复
在这个任务中,我们暂时不重置它,只让它递增。
要做什么:
- 创建一个名为
uart_tx的模块,其中包含:- 一个输入:
clk - 一个输出:
cnt(4 位,类型为reg)
- 一个输入:
- 在模块内部:
- 在 initial 块开始时,将
cnt设为 0 - 添加一个
always @(posedge clk)块 - 让
cnt在每个时钟边沿加 1
- 在 initial 块开始时,将
亲手试试
// TODO: 创建模块 uart_tx,输入为 clk,输出为 cnt(4 位)
// TODO: 在 initial 块中将 cnt 的初始值设为 0
// TODO: 添加 always @(posedge clk) 块
// TODO: 将 cnt 加 1基础知识中的所有课
自己练习: Verilog 在线编译器