数字时钟闹钟 FPGA 设计 Verilog Quartus
名称:数字时钟闹钟 FPGA 设计 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现一个基于 FPGA 的数字时钟与闹钟系统,使用 Verilog 编写,在 Quartus 环境下完成工程编译与实现。系统以 50MHz 时钟作为输入,通过分频得到 1Hz 计时节拍,完成时、分、秒的正常计时显示,并通过数码管进行时间输出。 设计支持计时模式和闹钟模式切换,可通过按键完成模式设置、时间修改、修改确认以及时分秒选择。计时状态下可设置当前时间,闹钟状态下可设置闹钟时间,并使用 LED 指示当前设置位置和工作模式,便于在开发板上观察操作状态。 当当前时间与闹钟设定时间匹配时,响铃模块输出蜂鸣器控制信号;按键也提供闹钟关闭控制。整体功能覆盖数字钟课程设计、FPGA 综合实验、Verilog 模块化设计练习等常见应用场景。运行环境
开发语言:Verilog 开发软件:Quartus 目标平台:Cyclone IV FPGA 开发板 工程包含 Quartus 工程文件、Verilog 源码文件、管脚约束文件、编译输出文件以及 ModelSim/NativeLink 相关仿真记录,可用于学习工程编译、模块连接、管脚分配和板级验证流程。设计思路
系统采用模块化结构设计,顶层模块 Digital_clock 负责连接各个功能模块,并统一管理外部时钟、按键、LED、蜂鸣器和数码管接口。50MHz 系统时钟首先进入分频模块,产生 1Hz 计时脉冲,为秒计数和闹钟比较提供时间基准。 按键输入经过下降沿检测模块处理后再送入控制逻辑,避免直接使用机械按键电平导致的误触发问题。key_0 用于切换计时和闹钟模式,key_1 用于进入设置修改,key_2 用于确认修改,key_3 用于切换时分秒修改项并兼作闹钟关闭控制。模式切换结果通过 led_mode 输出,时间设置状态通过 led_jishi_time 和 led_alarm_time 指示。 计时模块负责当前时间的时、分、秒计数与修改;闹钟设置模块负责闹钟时间寄存和修改;响铃模块将当前时间与闹钟时间进行比较,在匹配条件满足时输出 bell_out 控制蜂鸣器。显示模块将当前模式下需要显示的时间数据送到数码管,通过位选和段选完成动态扫描显示。 这种划分方式使计时、设置、响铃、显示和按键处理相对独立,便于阅读源码、单独调试模块,也方便在课程设计或实验报告中绘制 RTL 结构和说明各模块功能。模块结构
顶层模块:Digital_clock 主要模块包括: fenping:分频模块,将 50MHz 时钟分频得到 1Hz 计时信号。 key_jitter:按键下降沿检测模块,用于产生稳定的按键触发脉冲。 set_mode:模式设置模块,用于在计时模式和闹钟模式之间切换。 jishi:计时控制模块,完成当前时、分、秒计数与时间设置。 alarm_clock:闹钟设置模块,完成闹钟时、分、秒设置。 Bell:响铃模块,根据当前时间和闹钟时间输出蜂鸣器控制信号。 display:数码管显示模块,完成位选、段选和时间数据显示。开发板验证
本工程提供 Cyclone IV FPGA 开发板验证内容,并配有 Quartus 管脚约束/分配文件。外部接口覆盖 50MHz 时钟输入、4 个按键输入、计时设置 LED、闹钟设置 LED、秒指示灯、模式指示灯、蜂鸣器输出以及数码管位选和段选信号。 开发板验证重点包括:按键切换计时/闹钟模式、当前时间设置、闹钟时间设置、数码管动态显示、秒指示灯变化以及闹钟匹配后的蜂鸣器输出。管脚分配文件可作为上板编译和硬件连接检查的参考。
演示视频
配套演示视频展示数字时钟工程在开发板上的运行效果,可用于查看数码管显示、按键设置、模式切换和闹钟响铃等实际操作表现。仿真图/仿真说明/设计文档图片
设计文档包含工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图和 Testbench 相关内容。文档图示覆盖整体仿真图、分频模块、按键下降沿检测模块、模式设置、计时控制、闹钟设置、响铃模块和数码管显示模块,可用于理解模块层次、信号连接和仿真验证思路。
















部分代码
以下展示顶层模块 Digital_clock 的部分代码,完整源码请下载压缩包查看。
module Digital_clock( input clk_50M, input key_0,//模式设置按键(按下低电平)--4'd0:计时,4'd1:闹钟 input key_1,//设置修改(按下低电平) input key_2,//修改确认(按下低电平) input key_3,//修改时分秒,闹钟关闭(按下低电平) output [2:0] led_jishi_time,//设置时间指示灯(低电平亮) output [2:0] led_alarm_time,//设置闹钟指示灯(低电平亮) output second_led,//秒指示灯(低电平亮) output bell_out,//闹钟 output led_mode,//led显示当前模式(低电平亮)--4'd0:计时,4'd1:闹钟 output [3:0] bit_select,//数码管位选 output [7:0] seg_select//数码管段选 ); wire [3:0] state_mode;//当前模式,4'd0:计时,4'd1:闹钟 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 key_0_negedge; wire key_1_negedge; wire key_2_negedge; wire key_3_negedge; wire clk_1Hz; assign second_led = second_time[0]; //分频模块 fenping fenping_Hz( . clk_50M(clk_50M), . clk_1Hz(clk_1Hz) ); //按键下降沿检测模块 key_jitter key_0_jitter( . clkin(clk_50M), . key_in(key_0), . key_negedge(key_0_negedge) ); //按键下降沿检测模块 key_jitter key_1_jitter( . clkin(clk_50M), . key_in(key_1), . key_negedge(key_1_negedge) ); //按键下降沿检测模块 key_jitter key_2_jitter( . clkin(clk_50M), . key_in(key_2), . key_negedge(key_2_negedge) ); //按键下降沿检测模块 key_jitter key_3_jitter( . clkin(clk_50M), . key_in(key_3), . key_negedge(key_3_negedge) ); //模式设置 set_mode i_set_mode( . clk_50M(clk_50M), . set_mode_key(key_0_negedge), . led_mode(led_mode),//led显示当前模式 . state_mode(state_mode)//当前模式,4'd0:计时,4'd1:闹钟 ); //计时 jishi i_jishi( . clk_50M(clk_50M), . clk_1Hz(clk_1Hz), . state_mode(state_mode),//当前模式,4'd0:计时,4'd1:闹钟 . set_time_key(key_1_negedge),//设置时间 . confirm_key(key_2_negedge),//确认 . change_time_key(key_3_negedge),//设置时分秒 . led_jishi_time(led_jishi_time), . 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:闹钟 . set_time_key(key_1_negedge),//设置时间 . confirm_key(key_2_negedge),//确认 . change_time_key(key_3_negedge),//设置时分秒 . led_alarm_time(led_alarm_time), . 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), . clk_1Hz(clk_1Hz), . clear_alarm(key_3_negedge),//关闭闹钟键(key3) . 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)//蜂鸣器,为低电平时,蜂鸣器响 ); // ... 以下代码略,完整源码请下载压缩包查看
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 数字时钟闹钟 FPGA 设计 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 数字时钟闹钟 FPGA 设计 Verilog Quartus