数字时钟 FPGA 设计 Verilog Quartus

名称:数字时钟 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

功能介绍

本工程实现一个基于Verilog的数字时钟,可完成秒、分、时的连续计数,并以数码管段码形式输出小时和分钟。设计采用60进制秒计数、60进制分钟计数和24进制小时计数的级联结构,计数满值时自动向高位时间单位产生进位,形成标准的24小时计时流程。 顶层提供小时校时、分钟十位校时和分钟个位校时控制接口,可在计时过程中对显示时间进行调整。秒信号同时输出到LED端口,可用于观察秒级时钟节拍。小时和分钟分别拆分为十位、个位后送入显示模块,输出四组8位数码管段码信号。 工程适合作为Verilog多进制计数器、进位级联、按键校时和数码管显示译码的综合练习参考。代码按功能拆分为顶层控制、60进制计数、24进制计数、辅助计数与显示模块,便于分别阅读、仿真和扩展。

运行环境

硬件描述语言:Verilog。 开发软件:Quartus。工程包含Quartus工程配置、编译结果和仿真相关文件;同时配有ModelSim RTL仿真脚本、波形配置及测试文件,可用于查看时钟计数与显示输出过程。

设计思路

本设计以数字时钟的计时流程为主线,将秒、分、时划分为相互级联的计数单元。秒计数达到60后产生进位脉冲驱动分钟计数,分钟计数达到60后继续向小时计数进位,小时部分按24小时制循环,实现完整的时分秒计时逻辑。 顶层将秒级时钟直接连接到秒指示输出,同时集中管理小时校时、分钟十位校时和分钟个位校时输入。分钟计数器接收两个独立校时按键,小时计数器接收小时校时按键,使计时与人工校时逻辑在同一层次清晰衔接。 显示部分将小时和分钟的4位BCD计数值转换为8位数码管段码输出。计数逻辑、进位逻辑与显示译码相互独立,便于理解多进制计数器级联、数字时钟状态组织及数码管驱动的实现方法。

模块结构

顶层模块top:连接秒、分、时计数器与数码管显示模块,处理校时按键、进位传递和外部输出。 counter_60:完成秒或分钟的60进制计数,输出十位、个位BCD计数值,并在计满时输出进位信号。 counter_24:完成小时24进制计数,输出小时十位和个位BCD计数值,支持小时校时控制。 counter_6、counter_10:提供十进制和六进制计数的基础功能,用于构建多进制计数逻辑。 dispaly:接收小时、分钟的BCD计数值,生成对应的数码管段码输出。

演示视频

提供时钟设计仿真演示视频,可结合计数变化和数码管显示过程查看工程运行效果。

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

设计文档覆盖工程文件、程序文件、编译过程、RTL电路结构、仿真设置和仿真图等内容,可用于了解工程层级关系及仿真配置。工程保留Quartus波形文件和ModelSim仿真环境,便于复现实时时钟计数、进位传递及小时分钟显示逻辑。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

部分代码

以下展示顶层模块 top 的部分代码,完整源码请下载压缩包查看。

module top(
input clk,
input set_key,//校时-小时
input set6_key,//校时十位-分钟
input set10_key,//校时个位-分钟
output second_led,//秒led灯
output [7:0] HEX_ten_minute,//计数值十位
output [7:0] HEX_one_minute,//计数值个位
output [7:0] HEX_ten_hour,//计数值十位
output [7:0] HEX_one_hour//计数值个位
);
wire cout_second;
wire cout_minute;
wire [3:0] cnt_ten_second;//计数值十位
wire [3:0] cnt_one_second;//计数值个位
wire [3:0] cnt_ten_minute;//计数值十位
wire [3:0] cnt_one_minute;//计数值个位
wire [3:0] cnt_ten_hour;//计数值十位
wire [3:0] cnt_one_hour;//计数值个位

assign second_led=clk;
//60进制计数器
counter_60 i_second(
. clk(clk),
. set6_key(1'd0),//校时十位
. set10_key(1'd0),//校时个位
. cnt_ten(cnt_ten_second),//计数值十位
. cnt_one(cnt_one_second),//计数值个位
. cout(cout_second)//满60进位
);

//60进制计数器
counter_60 i_minute(
. clk(cout_second),
. set6_key(set6_key),//校时十位
. set10_key(set10_key),//校时个位
. cnt_ten(cnt_ten_minute),//计数值十位
. cnt_one(cnt_one_minute),//计数值个位
. cout(cout_minute)//满60进位
);

//24进制计数器
counter_24 i_hour(
. clk(cout_minute),
. set_key(set_key),//校时
. cnt_ten(cnt_ten_hour),//计数值十位
. cnt_one(cnt_one_hour)//计数值个位
);

dispaly i_dispaly(
. clk(clk),
. cnt_ten_minute(cnt_ten_minute),//计数值十位
. cnt_one_minute(cnt_one_minute),//计数值个位
. cnt_ten_hour(cnt_ten_hour),//计数值十位
. cnt_one_hour(cnt_one_hour),//计数值个位
//数码管输出
. HEX_ten_minute(HEX_ten_minute),//计数值十位
. HEX_one_minute(HEX_one_minute),//计数值个位
. HEX_ten_hour(HEX_ten_hour),//计数值十位
. HEX_one_hour(HEX_one_hour)//计数值个位
);

endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 数字时钟 FPGA 设计 Verilog Quartus

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

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