数字时钟 FPGA 设计 VHDL Quartus(2)

📅 2026/7/2 21:38:54 👁️ 阅读次数 📝 编程学习
数字时钟 FPGA 设计 VHDL Quartus(2)

名称:数字时钟 FPGA 设计 VHDL Quartus(2)

软件:Quartus

语言:VHDL

功能介绍

本设计实现一个基于 FPGA 的数字时钟系统,采用 VHDL 编写,工程环境为 Quartus。系统支持正常计时显示、时间设置、闹钟时间设置、闹钟提示输出以及 1Hz 指示 LED 等功能,适合用于 FPGA 数字系统课程设计、时序逻辑综合实验和数码管显示控制学习。 数字钟通过六位数码管显示秒、分、时信息,HEX0 到 HEX5 分别承担秒个位、秒十位、分钟个位、分钟十位、小时个位、小时十位显示。外部开关和按键用于切换计时/设置模式、进入闹钟设置状态,并对小时和分钟进行调整,功能划分清晰,便于理解状态控制与计数逻辑之间的配合。 工程包含完整 Quartus 工程文件、VHDL 源码、仿真相关文件和设计说明图片内容,可用于编译、RTL 结构查看、波形仿真以及后续硬件引脚约束参考。对于需要学习 VHDL 模块化设计、分频计时、按键控制、闹钟比较和数码管译码显示的用户,该设计具有较好的参考价值。

运行环境

开发语言:VHDL 开发软件:Quartus 工程类型:FPGA 数字钟设计与仿真工程 顶层模块:Digital_clock 主要文件包括 Digital_clock.vhd、fenping.vhd、set_mode.vhd、jishi.vhd、display.vhd、Bell.vhd、alarm_clock.vhd、div_10.vhd 以及 Quartus 工程文件 Digital_clock.qpf、Digital_clock.qsf。

设计思路

设计以 Digital_clock 作为顶层模块,围绕“计时、设置、闹钟、显示”几个功能块展开。50MHz 输入时钟先经过分频处理,生成适合秒计数和显示控制使用的节拍信号,再由计时模块完成秒、分、时的递增逻辑,形成完整的数字时钟基础功能。 模式控制部分通过 alarm_SW、MODE_SW 以及小时/分钟调整按键实现不同工作状态切换。正常计时时,数码管显示当前时间;进入时间设置或闹钟设置状态后,按键用于修改小时、分钟等参数,led_mode 输出当前模式状态,便于观察系统处于计时、设置时间或闹钟相关状态。 闹钟功能单独划分为 alarm_clock 与 Bell 等相关模块,计时时间与设定闹钟时间匹配时产生响铃/提示输出。显示部分将计数结果转换为六位数码管段码,分别对应秒个位、秒十位、分个位、分十位、时个位、时十位,形成清晰的 HH:MM:SS 数字钟显示结构。

模块结构

主要模块包括: fenping:分频模块,用于从 50MHz 时钟产生计时所需节拍。 set_mode:模式设置模块,用于处理计时模式、时间设置模式等状态控制。 jishi:计时模块,完成秒、分、时计数逻辑。 alarm_clock:闹钟模块,用于闹钟时间相关控制与比较。 Bell:响铃提示模块,用于产生闹钟提示输出。 display:显示模块,用于将时间数据转换为数码管显示段码。 BCD/div_10:辅助转换或分解模块,用于配合数码管显示数据处理。 Digital_clock:顶层模块,连接时钟、开关、按键、LED、闹钟输出和六位数码管接口。

开发板验证

工程包含 Quartus 管脚约束/分配文件,可用于对应硬件工程的引脚绑定与综合实现参考。顶层端口覆盖 50MHz 时钟、模式切换开关、闹钟设置开关、小时/分钟调整按键、1Hz LED、闹钟输出 LED 以及 HEX0 到 HEX5 六位数码管显示接口,便于将数字钟功能映射到开发板外设资源。

演示视频

配套演示视频展示数字钟工程的运行效果,可直观看到计时显示、模式切换以及相关输出状态,适合在下载前了解工程功能表现。

演示视频请关注公众号后获取对应资料查看。

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

设计文档图片包含工程文件、程序文件、程序编译、RTL 图以及多组仿真图说明,覆盖整体仿真图、分频模块、设置模式模块、计时模块、闹钟模块、响铃模块和显示模块。仿真文件包含整体波形与各功能模块波形,可用于观察分频、计时、模式切换、闹钟判断和数码管显示输出等关键逻辑。

部分代码

以下展示顶层模块Digital_clock的部分代码,完整代码可关注下方公众号卡片获取。

ENTITY Digital_clock IS PORT ( clk_50M : IN STD_LOGIC; alarm_SW : IN STD_LOGIC;--SW0-闹钟时间设置键,0--显示正常计时;1--显示设置闹钟时间 MODE_SW : IN STD_LOGIC;--SW1-MODE 模式设置按键--0:计时,1:设置时间 AH_key_in : IN STD_LOGIC;--AH 修改小时--按下低电平 AM_key_in : IN STD_LOGIC;--AM 修改分钟--按下低电平 led_1Hz : OUT STD_LOGIC;--1S--led bell_out : OUT STD_LOGIC;--闹钟led led_mode : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--led显示当前模式 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管-低亮--秒钟个位 HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管-低亮--秒钟十位 HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管-低亮--分钟个位 HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管-低亮--分钟十位 HEX4 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管-低亮--小时个位 HEX5 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管-低亮--小时十位 ); END Digital_clock;

代码获取:下方公众号
“FPGA代码设计学习资料”