名称: 多功能数字时钟计算器系统的设计Verilog代码Quartus Spirit_V4开发板
软件: Quartus II
语言: Verilog HDL
代码功能
本项目实现了一个高度集成的多功能数字系统,结合了数字时钟、计算器、闹钟、秒表和定时器五大功能。系统主要功能包括:
·多功能数字时钟:实时显示时分秒,支持时间设置和调整
·四则运算计算器:实现加减乘除运算,支持连续计算功能
·智能闹钟系统:可设置闹钟时间,具备闹钟提醒功能
·精确秒表功能:支持启动、暂停、复位操作,精度达到10毫秒
·倒计时定时器:实现可设置的定时功能,支持时分秒设置
·模式切换:通过按键在不同功能间无缝切换
·数码管显示:六位数码管动态显示各种模式下的数据
代码实现思路
系统架构设计
系统采用模块化分层设计,主要包含八大功能模块:
1.顶层控制模块:集成所有功能模块,实现模式切换和数据路由
2.计算器模块:实现四则运算功能,包含状态机和数字输入处理
3.时钟模块:实时时钟功能,支持时间设置和显示
4.闹钟模块:闹钟设置和提醒功能
5.秒表模块:高精度计时功能
6.定时器模块:倒计时功能
7.显示模块:六位数码管动态扫描显示
8.按键处理模块:按键消抖和状态检测
状态机设计
计算器模块采用六状态状态机实现完整的计算流程:
·输入第一个数 → 选择运算符 → 输入第二个数 → 确认计算 → 显示结果 → 连续计算
代码结构
模块层次结构
Digital_clock (顶层模块)
├── calculator (计算器模块)
│ ├── state_ctrl (状态控制)
│ └── num_in (数字输入)
├── jishi (时钟模块)
├── alarm_clock (闹钟模块)
├── stopwatch (秒表模块)
├── timing (定时器模块)
├── Bell (蜂鸣器控制)
├── set_mode (模式设置)
├── display (显示控制)
└── fenping (时钟分频)
模块功能描述
1.Digital_clock.v:顶层模块,集成所有功能模块
2.calculator.v:计算器核心模块,实现四则运算
3.state_ctrl.v:计算器状态机控制
4.num_in.v:数字输入处理,支持多位数字输入
5.jishi.v:实时时钟功能
6.alarm_clock.v:闹钟设置和控制
7.stopwatch.v:秒表计时功能
8.timing.v:倒计时定时器
9.display.v:六位数码管显示控制
10.fenping.v:时钟分频模块
显示系统设计
系统采用六位数码管动态扫描显示,根据不同模式显示相应数据:
·时钟模式:显示时分秒
·闹钟模式:显示闹钟设置时间
·秒表模式:显示分秒毫秒
·计算器模式:显示计算结果
本代码已在Spirit_V4开发板验证,Spirit_V4开发板如下,其他开发板可以修改管脚适配:
1.工程文件
2.程序文件
3.程序编译
4.管脚分配
5.RTL图
6.Testbench
7.仿真图
单模块仿真演示
计时模块
部分代码展示:
//设置闹钟模块 module alarm_clock( input clk_50M, input [3:0] state_mode,//当前模式,4'd0:计时,4'd1:闹钟,4'd2:跑表 input set_time_key,//设置时间 input confirm_key,//确认 input change_time_key,//设置时分秒 output [7:0] alarm_hour_time,//时 output [7:0] alarm_minute_time,//分 output [7:0] alarm_second_time//秒 ); reg [7:0] hour=8'd21;//时 reg [7:0] minute=8'd59;//分 reg [7:0] second=8'd00;//秒 parameter state_time=2'd0;//正常计时状态 parameter state_set_hour=2'd1;//设置小时状态 parameter state_set_minute=2'd2;//设置小时状态 parameter state_set_second=2'd3;//设置秒状态 reg [1:0] state=state_time;//默认正常计时状态 always@(posedge clk_50M) if(state_mode==4'd1)//当前模式,4'd0:计时,4'd1:闹钟,4'd2:跑表 case(state) state_time: if(set_time_key)//设置键按下,进入设置小时状态 state<=state_set_hour; else state<=state_time; state_set_hour: if(confirm_key)//确认键按下,进入设置分钟状态 state<=state_set_minute; else state<=state_set_hour; state_set_minute: if(confirm_key)//确认键按下,进入设置秒状态 state<=state_set_second; else state<=state_set_minute; state_set_second: if(confirm_key)//确认键按下,返回正常计时状态
178