数字时钟闹钟 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 仿真环境下的逻辑变化和功能关系。

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

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

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

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

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

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

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

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

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

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

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

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

部分代码

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

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

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