数字时钟闹钟 FPGA 设计 Verilog Quartus(2)
名称:数字时钟闹钟 FPGA 设计 Verilog Quartus(2)
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本项目实现一个基于 FPGA 的多功能数字时钟,采用 Verilog 编写,在 Quartus 环境下完成工程设计、编译与仿真。系统以 50MHz 时钟为输入,完成时、分、秒计时,并通过 6 位数码管显示当前时间,适合作为 FPGA 时序逻辑、状态控制、数码管显示和综合工程训练案例。 设计支持正常计时、时间设置、闹钟时间显示、闹钟时间设置等工作模式。用户可以通过模式按键切换当前功能,通过小时和分钟调整按键修改当前时间或闹钟时间,并通过 LED 输出观察当前模式状态。 工程还支持 12 小时制与 24 小时制显示切换,并包含闹铃触发逻辑。当当前计时时间与设定闹钟时间一致时,闹铃使能信号有效,显示模块可结合该信号进行提示显示。整体功能覆盖数字钟课程设计中常见的计时、校时、闹钟、显示和开发板验证需求。运行环境
开发语言:Verilog 开发软件:Quartus 适用硬件:Cyclone IV FPGA 开发板 工程顶层:Digital_clock 主要文件:Digital_clock.v、fenping.v、set_mode.v、jishi.v、alarm_clock.v、Bell.v、display.v、Digital_clock.qsf设计思路
系统以 50MHz 时钟作为全局输入,通过分频模块生成 1Hz 计时节拍,作为秒计数递增的基础。顶层模块负责连接模式控制、正常计时、闹钟计时、闹铃判断和数码管显示,各模块之间通过时、分、秒信号以及 state_mode 状态信号协同工作。 模式控制部分根据 alarm_SW 和 MODE_SW 组合产生当前工作状态,并通过 led_mode 输出进行指示。正常计时模块在计时模式下按 1Hz 节拍运行,在设置时间模式下响应 AH_key 和 AM_key 对小时、分钟进行修改;闹钟模块采用相似的调整思路,用于保存闹钟时分秒。 闹铃判断模块将当前时间与闹钟时间进行比较,当时间匹配后输出 bell_out 使能信号,并提供约 5 秒的闹铃有效时间。显示模块根据当前模式选择显示正常时间或闹钟时间,同时结合 SW_hour 实现 12 小时制和 24 小时制切换,最终驱动 6 位低电平点亮数码管输出。模块结构
顶层模块为 Digital_clock,主要包含以下功能模块: fenping:分频模块,将 50MHz 输入时钟分频得到 1Hz 计时节拍。 set_mode:模式设置模块,根据 MODE_SW、alarm_SW 产生当前工作模式 state_mode,并输出 led_mode 状态指示。 jishi:正常计时模块,完成时、分、秒计数,并支持在设置模式下通过按键修改小时和分钟。 alarm_clock:闹钟设置模块,用于保存和调整闹钟时、分、秒。 Bell:闹铃判断模块,比较当前时间与闹钟时间,输出闹钟使能信号 bell_out。 display:显示模块,根据当前模式、12/24 小时制选择和闹铃状态驱动 HEX0 至 HEX5 数码管显示。开发板验证
本设计已配置面向 Cyclone IV FPGA 开发板的管脚约束文件,可用于开发板下载验证。工程中包含 Quartus 管脚分配信息,顶层端口覆盖 50MHz 时钟输入、模式设置按键、闹钟设置按键、小时/分钟调整按键、12/24 小时切换开关、模式 LED 指示以及 6 位数码管显示输出。 开发板验证时,用户可通过 MODE_SW、alarm_SW、AH_key、AM_key、SW_hour 等输入完成计时模式切换、时间调整、闹钟时间查看与设置、12/24 小时显示切换等操作;HEX0 至 HEX5 用于显示时分秒或闹钟时间,led_mode 用于指示当前工作模式。演示视频
配套演示视频展示数字时钟工程的实际运行效果,可直观看到数码管时间显示、模式切换、时间设置、闹钟设置以及闹铃触发相关现象,便于下载前了解设计功能和上板表现。仿真图/仿真说明/设计文档图片
设计文档内容包含工程文件、程序文件、程序编译、RTL 图、仿真图以及整体仿真图说明,并分别给出了分频模块、计时模块、模式设置、闹钟设置、闹铃模块和显示模块相关说明。工程中包含 display、Bell、alarm_clock、jishi 等仿真波形文件,可用于查看各模块在 Quartus 仿真环境下的逻辑变化和功能关系。











部分代码
以下展示顶层模块 Digital_clock 的部分代码,完整源码请下载压缩包查看。
module Digital_clock( input clk_50M,//时钟 input alarm_SW,//闹钟时间设置键,0--显示正常计时;1--显示设置闹钟时间 input MODE_SW,//MODE 模式设置按键--0:计时,1:设置时间 input AH_key,//AH 修改小时 input AM_key,//AM 修改分钟 input SW_hour,//12小时和24小时切换 output [3:0] led_mode,//led显示当前模式 output [7:0] HEX0,//数码管-低亮 output [7:0] HEX1,//数码管-低亮 output [7:0] HEX2,//数码管-低亮 output [7:0] HEX3,//数码管-低亮 output [7:0] HEX4,//数码管-低亮 output [7:0] HEX5 //数码管-低亮 ); wire [3:0] state_mode;//当前模式 wire [7:0] hour_time;//时 wire [7:0] minute_time;//分 wire [7:0] second_time;//秒 wire [7:0] alarm_hour_time;//闹钟时 wire [7:0] alarm_minute_time;//闹钟分 wire [7:0] alarm_second_time;//闹钟秒 wire clk_1Hz; wire bell_out; //分频到1Hz fenping fenping_Hz( . clk_50M(clk_50M), . clk_1Hz(clk_1Hz) ); //设置模式模块 set_mode i_set_mode( . clk_50M(clk_50M), . alarm_SW(alarm_SW), . MODE_SW(MODE_SW), . led_mode(led_mode),//led显示当前模式 . state_mode(state_mode)//当前模式,4'd0:计时,4'd1设置时间 ,4'd2显示闹钟时间,4'd3设置闹钟时间 ); //计时模块 jishi i_jishi( . clk_50M(clk_50M), . clk_1Hz(clk_1Hz), . state_mode(state_mode),//当前模式,4'd0:计时,4'd1设置时间 ,4'd2显示闹钟时间,4'd3设置闹钟时间 . AH_key(AH_key),//AH 修改小时 . AM_key(AM_key),//AM 修改分钟 . hour_time(hour_time),//时 . minute_time(minute_time),//分 . second_time(second_time)//秒 ); //闹钟模块 alarm_clock i_alarm_clock( . clk_50M(clk_50M), . state_mode(state_mode),////当前模式,4'd0:计时,4'd1设置时间 ,4'd2显示闹钟时间,4'd3设置闹钟时间 . AH_key(AH_key),//AH 修改小时 . AM_key(AM_key),//AM 修改分钟 . alarm_hour_time(alarm_hour_time),//时 . alarm_minute_time(alarm_minute_time),//分 . alarm_second_time(alarm_second_time)//秒 ); //闹铃模块 Bell i_Bell( . clk_50M(clk_50M), . alarm_hour_time(alarm_hour_time),//闹钟时 . alarm_minute_time(alarm_minute_time),//闹钟分 . alarm_second_time(alarm_second_time),//闹钟秒 . hour_time(hour_time),//时 . minute_time(minute_time),//分 . second_time(second_time),//秒 . bell_out(bell_out)////闹钟使能,5秒 ); //显示模块 display i_display( . clk(clk_50M), . SW_hour(SW_hour),//12小时和24小时切换 . state_mode(state_mode),//当前模式,4'd0:计时,4'd1设置时间 ,4'd2显示闹钟时间,4'd3设置闹钟时间 . bell_en(bell_out),//闹钟使能,5秒 . hour_time(hour_time),//时 . minute_time(minute_time),//分 . second_time(second_time),//秒 . alarm_hour_time(alarm_hour_time),//闹钟时 . alarm_minute_time(alarm_minute_time),//闹钟分 . alarm_second_time(alarm_second_time),//闹钟秒 . HEX0(HEX0),//数码管-低亮 . HEX1(HEX1),//数码管-低亮 . HEX2(HEX2),//数码管-低亮 . HEX3(HEX3),//数码管-低亮 . HEX4(HEX4),//数码管-低亮 . HEX5(HEX5) //数码管-低亮 ); endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 数字时钟闹钟 FPGA 设计 Verilog Quartus(2)
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 数字时钟闹钟 FPGA 设计 Verilog Quartus(2)