数字时钟功能+Verilog+Quartus II
软件 :Quartus II
语言:Verilog
代码功能
本设计实现了一个数字时钟系统,具备计时、显示、闹钟和按键控制等功能。系统能够通过数码管实时显示分钟和秒钟,支持闹钟时间设置,并可通过按键实现模式切换和暂停/启动。设计重点在于时钟信号分频、消抖处理、计时逻辑和闹钟控制,适用于FPGA开发板的数字时钟应用。
代码实现思路
系统采用模块化设计,主要分为时钟分频、消抖、计时、显示和闹钟控制五大模块。时钟分频模块将高频时钟信号分频为1Hz,作为计时基准;消抖模块对按键输入进行稳定处理,防止误触发;计时模块实现分钟和秒钟的递增逻辑,并支持复位和溢出处理;显示模块将计时结果转换为数码管显示格式,支持模式切换显示闹钟时间;闹钟控制模块实现闹钟时间的设置和循环。各模块通过信号线互联,整体结构清晰,便于扩展和维护。
---本代码已在小脚丫开发板验证
代码结构
- clock.v:顶层模块,负责各功能模块的连接与信号分配。
- clk_div.v:时钟分频模块,将12MHz时钟分频为1Hz。
- key_xiaodou.v:按键消抖模块,稳定按键输入信号。
- clock_ctrl.v:计时控制模块,实现分钟和秒钟的递增及溢出处理。
- display.v:显示模块,将计时和闹钟数据转换为数码管显示格式。
- alarm_ctrl.v:闹钟控制模块,实现闹钟时间的设置与循环。
部分代码展示:
//秒表 module?clock( input?clk,//时钟 input?reset_n,//复位 input?stop_start_n,//暂停继续 input?mode_key,//模式切换 input?alarm_key, output?[1:0]?SEG_DIG, output?[7:0]?seg_1,//数码管 output?[7:0]?seg_2,//数码管 output?[7:0]?seg_3,//数码管 output?beep,//蜂鸣器 output?led//led闪烁 ); wire?[7:0]?minute_out;//计时值 wire?[7:0]?second_out;//秒钟 wire?clk_1Hz; wire?stop_start;//暂停继续 wire?mode_change; wire?alarm_add; wire?[3:0]?alarm_minute;//闹钟时间 wire?mode_select; //消抖模块 key_xiaodou?i0_key_xiaodou( .?clkin(clk), .?key_in(stop_start_n),//输入 .?key_negedge(stop_start)//消抖后按键下降沿 ); //消抖模块 key_xiaodou?i1_key_xiaodou( .?clkin(clk), .?key_in(mode_key),//输入 .?key_negedge(mode_change)//消抖后按键下降沿 ); //消抖模块 key_xiaodou?i2_key_xiaodou( .?clkin(clk), .?key_in(alarm_key),//输入 .?key_negedge(alarm_add)//消抖后按键下降沿 ); //分频模块 clk_div?i_clk_div( .?clk(clk),//12M .?reset_n(reset_n),//复位 .?stop_start(stop_start), .?clk_1Hz(clk_1Hz)//1Hz ); //计时控制模块 clock_ctrl?i_clock_ctrl( .?clk_1Hz(clk_1Hz),//1Hz .?reset_n(reset_n),//复位 .?minute_out(minute_out),//分钟值 .?second_out(second_out),//秒钟 .?led(led)//led闪烁 ); //闹钟控制模块 alarm_ctrl?i_alarm_ctrl( .?clk(clk),// .?reset_n(reset_n),//复位 .?alarm_add(alarm_add),//闹钟加 .?alarm_minute(alarm_minute)//闹钟时间 ); //显示模块 display?i_display( .?clk(clk),//12MHz .?reset_n(reset_n),//复位 .?mode_change(mode_change),//模式控制 .?alarm_minute(alarm_minute),//闹钟时间 .?second_out(second_out),//秒钟 .?minute_out(minute_out),//分钟 .?beep(beep), .?SEG_DIG(SEG_DIG), .?seg_1(seg_1),//数码管 .?seg_2(seg_2),//数码管 .?seg_3(seg_3) ); endmodule
代码下载(付费可见):
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1546