使用 Verilog 实现 FPGA 数码管计数器项目
本文将详细介绍一个基于 Verilog 的数码管计数器设计项目。本设计使用两个按键控制计数器的递增和复位,并在两个数码管上显示计数结果。同时,本文将详细解析每个模块的功能,包括计数器逻辑、数码管显示和按键消抖,并解释如何在设计中实现分频功能(尽管项目中未使用分频器模块)。
PS:由于偷懒,本文大部分文本由ai生成,代码是ai+人工调的,时序仿真基本正确,功能基本实现。
目录
- 计数器主模块 (
counter
) - 数码管显示模块 (
segment
) - 按键消抖模块 (
debounce
) - 分频器模块 (
prescaler
) - 测试模块 (
tb_counter
) - 设计说明和总结
1. 计数器主模块 (counter
)
counter
模块是整个项目的核心逻辑,包含了计数控制、按键状态检测以及输出显示处理。
module counter(clk, btn, seg, cat, bcd_num);
input clk; // 时钟信号,设计为100Hz
input [1:0] btn; // 两位按键,btn[1] 复位,btn[0] 递增
output [7:0] seg; // 数码管的显示输出
output [1:0] cat; // 数码管位选信号
output reg [7:0] bcd_num; // BCD编码,表示两位数的计数值,这个变量目前只用于仿真好观察,真正烧录要将这个删除,并且记得在端口里删除
wire clk_1; // 分频后的脉冲信号
wire [1:0] btn_state; // 中间变量,存放按键状态
//reg [7:0]bcd_num;
reg [6:0] counter = 7'b0000_000; // 用于控制计数器的递增速率
initial begin
bcd_num = 8'b0000_0000; // 初始化计数器
end
// 实例化按键消抖模块
debounce u_debounce_1 (.clk(clk), .button(btn[0]), .btn_st