名称: 高精度秒表倒计时器系统的设计Verilog代码Quartus Spirit_V4开发板
软件: Quartus II
语言: Verilog
代码功能
本项目实现了一个高精度的秒表和倒计时器系统,具备两种工作模式和精确的时间控制功能。系统主要功能包括:
·高精度秒表功能:实现启动、暂停、复位操作,精度达到10毫秒
·倒计时器功能:可设置倒计时时间,支持分钟、秒钟、毫秒设置
·双模式切换:通过模式按键在秒表和倒计时器之间切换
·实时显示:六位数码管动态显示时间数据,支持小数点显示
·精确计时:基于100Hz时钟实现10毫秒级精度计时
·智能控制:按键消抖处理,确保操作稳定性
·状态指示:LED指示灯显示当前工作模式
代码实现思路
系统架构设计
系统采用模块化设计,主要包含五个核心功能模块:
1.顶层控制模块:集成所有功能模块,实现模式切换和数据路由
2.秒表模块:实现正计时功能,支持启动、暂停、复位操作
3.倒计时模块:实现倒计时功能,支持时间设置和倒计时控制
4.显示模块:六位数码管动态扫描显示,支持小数点显示
5.时钟分频模块:将50MHz时钟分频为100Hz工作时钟
状态机设计
秒表和倒计时模块均采用四状态状态机实现完整的控制流程:
·空闲状态:系统初始化,等待用户操作
·计时状态:正在计时或倒计时
·暂停状态:计时暂停,保持当前时间
·复位状态:时间清零,准备重新开始
代码结构
模块层次结构
Digital_clock (顶层模块)
├── stopwatch (秒表模块)
├── countdown (倒计时模块)
├── display (显示控制模块)
├── set_mode (模式设置模块)
└── fenping (时钟分频模块)
模块功能描述
1.Digital_clock.v:顶层模块,集成所有功能模块
2.stopwatch.v:秒表功能模块,实现正计时
3.countdown.v:倒计时功能模块,支持时间设置
4.display.v:显示控制,支持六位数码管动态扫描
5.set_mode.v:模式切换控制,LED状态指示
6.fenping.v:时钟分频,50MHz→100Hz
显示系统设计
系统采用六位数码管动态扫描显示,显示格式为:
·秒表模式:分 秒.毫秒(如:12 34.56)
·倒计时模式:分 秒.毫秒(如:05 30.00)
其中秒和毫秒之间的小数点通过特殊段选码实现,提高显示可读性。
本代码已在Spirit_V4开发板验证,Spirit_V4开发板如下,其他开发板可以修改管脚适配:
1.工程文件
2.程序文件
3.程序编译
4.RTL图
5.管脚分配
6.Testbench
7.仿真图
分频模块
倒计时模块
正计时模块
显示模块
按键模块
模块控制模块
部分代码展示:
module Digital_clock( input clk_50M, input start_stop_key,//跑表启动,暂停 input reset_key,//跑表复位 input mode_key,//模式按键 input set_minute_key,//设置时间 input set_second_key,//确认 input set_msecond_key,//设置时分秒 output [1:0] led_mode,//led显示当前模式 output [5:0] bit_select,//数码管位选 output [7:0] seg_select//数码管段选 ); wire [7:0] stopwatch_Millisecond;//10毫秒 wire [7:0] stopwatch_second;//秒 wire [7:0] stopwatch_minute;//分 wire [7:0] countdown_hour_time;//时 wire [7:0] countdown_minute_time;//分 wire [7:0] countdown_second_time;//秒 wire start_stop_key_negedge; wire reset_key_negedge; wire mode_key_negedge; wire set_minute_key_negedge; wire set_second_key_negedge; wire set_msecond_key_negedge; wire [1:0] state_mode;//当前模式,4'd0:正计时,4'd1:倒计时 wire clk_100Hz; //分频模块 fenping fenping_Hz( . clk_50M(clk_50M), . clk_100Hz(clk_100Hz)//分频到100Hz );
37