Menu
CoddyTech

位计数器

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

challenge icon

挑战

在这一章中,你将一步步构建一个UART 发送器。UART 是 Universal Asynchronous Receiver-Transmitter 的缩写。它是一种简单的硬件协议,让两个设备只用一根线发送数据,再用另一根线接收数据,从而进行通信。

你可以把它想象成两个人打电话:一个人说话(发送),另一个人听(接收)。UART 一次发送一位数据,并用起始位和停止位标记每个字节的开始和结束。

UART 发送器会发送 10 位:起始位(1)、数据位(8)、停止位(1)。为了追踪当前发送到哪一位,我们需要一个位计数器,从 0 计数到 10。
位计数器的工作方式

  • 从 0 开始
  • 每个时钟周期加 1
  • 达到 10 时,回到 0
  • 一直重复

在这个任务中,我们暂时不重置它,只让它递增。

要做什么:

  1. 创建一个名为 uart_tx 的模块,其中包含:
    • 一个输入:clk
    • 一个输出:cnt(4 位,类型为 reg)
  2. 在模块内部:
    • 在 initial 块开始时,将 cnt 设为 0
    • 添加一个 always @(posedge clk) 块
    • 让 cnt 在每个时钟边沿加 1

亲手试试

// TODO: 创建模块 uart_tx,输入为 clk,输出为 cnt(4 位)

// TODO: 在 initial 块中将 cnt 的初始值设为 0

// TODO: 添加 always @(posedge clk) 块

// TODO: 将 cnt 加 1

基础知识中的所有课

自己练习: Verilog 在线编译器