数字时钟 FPGA 设计 Verilog Vivado

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

软件:Vivado

语言:Verilog

开发板/平台:Basys 3

功能介绍

本设计实现了一个基于 FPGA 的数字时钟系统,采用 Verilog 编写,在 Vivado 环境下完成工程搭建、仿真、综合实现和 bit 文件生成。系统主要功能包括小时、分钟、秒钟计时显示,按键设置时间,确认设置,以及在时分秒设置项之间切换。 顶层模块 digital_clock 面向 Basys 3 开发板接口设计,输入端包含 100MHz 系统时钟和三个板载按键,输出端包含 8 位 LED、两组数码管段选和两组数码管位选。数码管用于显示当前时间信息,LED 用于输出 PWM 控制效果,适合用于 FPGA 数字系统课程设计、计时器实验、按键消抖实验和数码管动态扫描实验。 工程结构按功能模块划分,包含分频、计时、按键消抖、数码管显示、占空比控制和 PWM 输出等部分。各模块之间通过清晰的时钟、控制信号和时间数据连接,便于阅读、修改和二次扩展,例如调整显示格式、扩展按键功能或改变 PWM 控制策略。

运行环境

开发语言:Verilog 开发软件:Vivado 适配开发板:Basys 3 顶层模块:digital_clock 工程包含 Vivado 工程文件、Verilog 源码、Testbench、Basys 3 管脚约束文件以及已生成的实现结果文件。

设计思路

系统以 100MHz 输入时钟为基准,先通过分频模块产生 1Hz 秒脉冲,作为数字时钟计时更新的核心节拍。计时模块围绕时、分、秒三个计数量设计,并结合设置、确认、切换三个按键输入,实现正常走时与手动校时之间的状态切换。 按键部分采用独立消抖模块处理,BTNL、BTNR、BTNU 分别生成稳定的按键上升沿信号,避免机械按键抖动造成重复触发。这样顶层模块只需要接收消抖后的单脉冲控制信号,逻辑层次清晰,也便于在仿真和上板时定位按键相关问题。 显示部分由数码管动态扫描模块完成,将小时、分钟、秒钟数据送到两组数码管段选和位选端口进行显示。PWM 相关逻辑由占空比控制模块和 PWM 控制模块组成,占空比信号与当前小时信息相关联,最终将 PWM 波形同步输出到 8 位 LED,用于形成可观察的亮灭控制效果。

模块结构

顶层模块:digital_clock,负责连接时钟输入、按键控制、计时数据、数码管显示和 LED PWM 输出。 主要子模块包括:fenping 分频模块,用于产生 1Hz 时钟;jishi 计时模块,用于完成时分秒计数与设置控制;key_jitter 按键消抖模块,用于处理设置、确认和切换按键;display_num 数码管显示模块,用于完成时分秒数据显示和动态扫描;duty_ctrl 占空比控制模块,用于生成 PWM 占空比控制信号;PWM_ctrl PWM 控制模块,用于输出 PWM 波形。

开发板验证

工程包含 Basys 3 开发板对应的管脚约束文件,按键、LED 与数码管接口均已完成约束分配,可用于 Vivado 综合、实现和生成 bit 文件后进行上板验证。 开发板验证图片展示了实物运行效果,数字时钟可在 Basys 3 板载数码管上显示时、分、秒信息,并通过按键完成时间设置、确认以及时分秒切换操作。LED 端口输出 PWM 波形状态,可结合时钟运行状态观察亮灭变化。

数字时钟 FPGA 设计 Verilog Vivado 开发板验证图片 上板验证.jpg

演示视频

配套演示视频展示了数字时钟在开发板上的运行效果,可直观看到数码管显示、按键设置和 LED 输出状态,便于下载前了解工程实际功能。

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

设计文档内容覆盖工程文件、程序文件、程序编译、RTL 图、管脚分配、Testbench 和仿真图,可用于了解工程搭建流程、模块连接关系和仿真验证方式。 仿真工程中包含 test_bench.v 和 Vivado XSIM 相关仿真结果文件,可作为学习数字时钟计时逻辑、按键控制流程和数码管显示逻辑的参考。

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

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

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

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

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

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

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

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

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

部分代码

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

module digital_clock(
input clk_100M,
input BTNL,//设置时间
input BTNR,//确认
input BTNU,//设置时分秒
//PWM输出
output[7:0] led,
//数码管显示
output   [7:0] dig_led_1,//数码管段选
output   [3:0] wei_led_1,//数码管位选
output   [7:0] dig_led_2,//数码管段选
output   [3:0] wei_led_2//数码管位选
    );
wire set_time_key;//设置时间
wire confirm_key;//确认
wire change_time_key;//设置时分秒
wire clk_1Hz;
wire [6:0] duty;//占空比控制信号,最大100
wire [7:0] hour_time;//时
wire [7:0] minute_time;//分
wire [7:0] second_time;//秒
wire PWM_wave;
key_jitter key_set_time_key(
     . clkin(clk_100M),
     . key_in(BTNL),//输入
	 . key_posedge(set_time_key),//消抖后按键上升沿
	 . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);

key_jitter key_confirm_key(
     . clkin(clk_100M),
     . key_in(BTNR),//输入
	 . key_posedge(confirm_key),//消抖后按键上升沿
	 . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);

key_jitter key_change_time_key(
     . clkin(clk_100M),
     . key_in(BTNU),//输入
	 . key_posedge(change_time_key),//消抖后按键上升沿
	 . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);

fenping i_fenping(
. clk_100M(clk_100M),
. clk_1Hz(clk_1Hz)
);

jishi i_jishi(
. clk_100M(clk_100M),
. clk_1Hz(clk_1Hz),
. set_time_key(set_time_key),//设置时间
. confirm_key(confirm_key),//确认
. change_time_key(change_time_key),//设置时分秒
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time)//秒
);

display_num i_display_num(
. clk(clk_100M),
. duty(duty),
. hour_time(hour_time),//时
. minute_time(minute_time),//分
. second_time(second_time),//秒
. dig_led_1(dig_led_1),
. wei_led_1(wei_led_1),
. dig_led_2(dig_led_2),
. wei_led_2(wei_led_2)
);

//占空比控制模块
duty_ctrl i_duty_ctrl(
. clk_100M(clk_100M),//输入100MHz
. hour_time(hour_time),//时
. duty(duty)
);

//PWM波控制模块
PWM_ctrl i_PWM_ctrl(
. clk_100M(clk_100M),//输入100MHz
. duty(duty),//占空比控制信号,最大100
. PWM_wave(PWM_wave)//输出占空比
);

assign led={PWM_wave,PWM_wave,PWM_wave,PWM_wave,PWM_wave,PWM_wave,PWM_wave,PWM_wave};

endmodule

代码文件(付费下载)

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

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

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