数字时钟闹钟 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、秒指示灯、模式指示灯、蜂鸣器输出以及数码管位选和段选信号。 开发板验证重点包括:按键切换计时/闹钟模式、当前时间设置、闹钟时间设置、数码管动态显示、秒指示灯变化以及闹钟匹配后的蜂鸣器输出。管脚分配文件可作为上板编译和硬件连接检查的参考。

数字时钟闹钟 FPGA 设计 Verilog Quartus 开发板验证图片 开发板.png

演示视频

配套演示视频展示数字时钟工程在开发板上的运行效果,可用于查看数码管显示、按键设置、模式切换和闹钟响铃等实际操作表现。

仿真图/仿真说明/设计文档图片

设计文档包含工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图和 Testbench 相关内容。文档图示覆盖整体仿真图、分频模块、按键下降沿检测模块、模式设置、计时控制、闹钟设置、响铃模块和数码管显示模块,可用于理解模块层次、信号连接和仿真验证思路。

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image10.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image11.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image12.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image13.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image14.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image15.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image16.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image17.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image7.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image8.png

数字时钟闹钟 FPGA 设计 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 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

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员