多功能数字时钟 FPGA 设计 Verilog Vivado

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

软件:Vivado

语言:Verilog

功能介绍

本设计实现了一个多功能数字时钟 FPGA 系统,顶层模块为 clock,输入包含 100MHz 系统时钟、复位信号以及模式切换、确认、选择、加减调节等按键信号,输出包含蜂鸣器 beep 信号。整体功能围绕数字计时、时间调整、闹钟设置和提示输出展开,适合用于 FPGA 数字钟、按键控制状态机、分频计时和闹钟逻辑等课程设计或工程学习。 工程内部通过分频模块把输入时钟转换为秒脉冲、2Hz、4Hz 等控制节拍,为计时器、控制器、时间调整和闹钟相关模块提供基础时序。用户可以通过 switch_mode、switch_enter、switch_pick、switch_up、switch_down 等输入完成不同工作模式下的选择与调整,控制器根据按键状态输出模式信号和使能信号,协调各个功能模块工作。 设计还包含 clock_set、time_adjust、timer、hour_alarm、clock_alarm、clock_music、output_pick 等功能模块,能够体现较完整的模块化数字系统设计思路。配套 testbench 覆盖 clock_set、controller、time_adjust、clock_alarm 等模块,便于在 Vivado 仿真环境中观察关键逻辑行为。

运行环境

开发语言:Verilog 开发软件:Vivado 工程文件:clock.xpr 仿真环境:Vivado Simulator / xsim,包含 clock_set_test、controller_test、time_adjust_test、clock_alarm_test 等 testbench 文件。

设计思路

系统采用顶层集成加功能模块分层的设计方式。clock 作为顶层模块,负责连接外部时钟、复位、按键输入和蜂鸣器输出,并在内部例化控制器、计时器、时间调整、闹钟设置、整点提示、分频等模块。各子模块之间通过小时、分钟、秒、模式、使能、进入信号等内部连线进行数据和控制交互,使系统结构清晰,便于单独仿真与后续扩展。 时钟处理部分先由顶层对 100MHz 输入时钟进行基础分频,形成 25MHz 等内部时钟,再由 fre_divider 进一步生成秒脉冲、2Hz 和 4Hz 等低频节拍。秒脉冲用于正常计时,2Hz 节拍用于按键调整和模式控制等低速逻辑,4Hz 等节拍可用于显示选择或提示类逻辑。通过这种方式,系统把高速 FPGA 时钟转换为适合人机交互和时间计数的稳定时序。 控制部分由 controller 根据模式键和确认键输出当前工作模式、时间调整使能、调整确认和闹钟设置使能等信号。timer 模块负责维护当前时分秒计数,并能接收 time_adjust 输出的调整值;clock_set 模块负责设置闹钟小时和分钟;hour_alarm、clock_alarm、clock_music 等模块负责根据当前时间和设置时间产生提示或蜂鸣相关输出。整体设计重点在于多模块协同、按键模式控制和计时逻辑的组合应用。 仿真设计按模块划分,分别为 clock_set、controller、time_adjust、clock_alarm 等关键功能提供 testbench。这样的验证方式可以先确认单个模块的状态变化、按键响应和输出逻辑,再结合顶层工程理解完整数字时钟系统的工作流程。

模块结构

顶层模块:clock 主要功能模块包括: fre_divider:分频模块,产生秒脉冲、2Hz、4Hz 等时钟节拍。 controller:控制模块,根据模式、确认等按键产生工作模式和控制使能信号。 timer:计时模块,维护当前小时、分钟、秒计数,并支持调整后的时间写入。 time_adjust:时间调整模块,根据选择键、加减键调整时分秒。 clock_set:闹钟设置模块,用于设置闹钟小时和分钟。 hour_alarm:整点或时间提示相关模块,结合当前计时信号产生提示输出。 clock_alarm:闹钟判断相关模块。 clock_music:蜂鸣或音乐提示相关模块。 output_pick:输出选择相关模块。 仿真模块包括:clock_set_test、controller_test、time_adjust_test、clock_alarm_test。

演示视频

提供仿真演示视频,可用于查看工程仿真过程和关键功能演示效果,文件名为“仿真视频.mp4”。

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

设计文档内容围绕 clock_set、Controller、time_adjust 等模块展开,包含对应 testbench 说明和仿真图,可作为理解模块输入输出关系、按键控制流程和仿真验证方法的参考。 仿真文件覆盖 clock_set_test、controller_test、time_adjust_test、clock_alarm_test 等模块,适合在 Vivado 中分别运行,观察闹钟设置、控制状态、时间调整和闹钟逻辑的时序变化。

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

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

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

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

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

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

部分代码

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

module clock(clk_100m,
             rst,switch_down,
             switch_enter,switch_mode,
             switch_pick,switch_up,
             beep);//?????100MHz
  
  input clk_100m;
  input rst;//???
  input switch_enter;//??????
  input switch_mode;//????????????????????
  input switch_pick;//????????????????
  input switch_up;//????
  input switch_down;//????
  output beep;//???
  
  wire [7:0] XLXN_4;//???????????????
  wire [7:0] XLXN_5;
  wire [7:0] XLXN_6;
  wire [7:0] XLXN_7;
  wire [7:0] XLXN_8;
  wire [7:0] XLXN_9;
  wire [7:0] XLXN_10;
  wire [7:0] XLXN_11;
  wire [2:0] XLXN_14;
  wire XLXN_15;
  wire XLXN_16;
  wire XLXN_17;
  wire XLXN_19;
  wire [5:0] XLXN_20;
  wire [5:0] XLXN_21;
  wire [5:0] XLXN_22;
  wire XLXN_24;
  wire [5:0] XLXN_33;
  wire [5:0] XLXN_34;
  wire XLXN_36;
  wire [5:0] XLXN_37;
  wire [5:0] XLXN_39;
  wire [5:0] XLXN_40;
  wire XLXN_50;
  wire XLXN_51;
  reg clk_25m;
  reg clk_50m;
  
  wire switch_up;
  
  assign switch_up=1;
      
  reg [1:0] div;//???
  always @(posedge clk_100m or negedge rst) begin
    if(!rst)
      div<=2'b00;
    else
      div<=div+1;
    end
    
  always @(posedge clk_100m or negedge rst) begin
    if(!rst)
      clk_25m<=0;
    else if(div==2'b00||div==2'b10)
      clk_25m<=~clk_25m;
    else
      clk_25m<=clk_25m;
    end
      
   controller XLXI_2 (.clk_2hz(XLXN_24),
                      .rst(rst),
                      .switch_enter(switch_enter),
                      .switch_mode(switch_mode),
                      .clock_set(XLXN_15),
                      .mode(XLXN_14[2:0]),
                      .time_adjust_enable(XLXN_16),
                      .time_adjust_enter(XLXN_17)
                      );//????
                      
    timer XLXI_3 (.clk_sec(XLXN_19),
                 .rst(rst),
                 .time_adjust_enter(XLXN_17),
                 .time_adjust_hou(XLXN_22[5:0]),
                 .time_adjust_min(XLXN_21[5:0]),
                 .time_adjust_sec(XLXN_20[5:0]),
                 .timer_hou(XLXN_33[5:0]),
                 .timer_min(XLXN_34[5:0]),
                 .timer_sec(XLXN_37[5:0])
              );//????
              
    time_adjust XLXI_4 (.clk_2hz(XLXN_24),
                        .rst(rst),
                        .switch_down(switch_down),
                        .switch_pick(switch_pick),
                        .switch_up(switch_up), 
                        .time_adj_enable(XLXN_16),
                        .hour(XLXN_22[5:0]),
                        .min(XLXN_21[5:0]),
                        .sec(XLXN_20[5:0])
                        );//??????
                        
    clock_set XLXI_5 (.clk_2hz(XLXN_24),
                      .clock_set(XLXN_15),
                      .rst(rst),
                      .switch_down(switch_down),
                      .switch_pick(switch_pick),
                      .switch_up(switch_up),
                      .clock_hour(XLXN_40[5:0]),
                      .clock_min(XLXN_39[5:0])
                      );//??????
                      
    hour_alarm XLXI_6 (.clk_sec(XLXN_19),
                       .clk_25m(clk_25m),
                       .rst(rst),
                       .timer_min(XLXN_34[5:0]),
                       .timer_sec(XLXN_37[5:0]),
                       .hour_alarm(XLXN_51)
                       );//??????
                       

    fre_divider XLXI_9 (.clk_25m(clk_25m),
                        .rst(rst),
                        .clk_sec(XLXN_19),
                        .clk_2hz(XLXN_24),
                        .clk_4hz(XLXN_36)
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

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

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

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