多功能数字时钟 Verilog ModelSim

名称:多功能数字时钟 Verilog ModelSim

语言:Verilog

功能介绍

多功能数字时钟 Verilog ModelSim 实现了 digital_clock 相关的 FPGA 逻辑功能,包含完整 HDL 源码、工程文件、设计说明和付费下载压缩包,适合作为数字逻辑课程设计、实验验证或二次开发参考。

核心顶层模块为 multi_func_clock,可从顶层端口、时钟复位、子模块例化和输出控制关系入手阅读代码。

正文整理了设计说明、关键结构和部分代码,便于快速了解工程实现方式。

运行环境

  • 源码语言:Verilog
  • 交付内容:HDL 源码、工程文件、设计说明和下载压缩包

设计思路

该工程可按自顶向下方式理解:先查看顶层模块端口定义,确认时钟、复位、输入输出接口,再顺着子模块例化关系分析控制路径和数据路径。

主要模块包括:multi_func_clock、clk_div、dig_segment、mode_ctrl、alarm_set、stopwatch、multi_func_clock_tb、beep_ctrl、key_debounce、time_cnt。调试时可先验证核心控制模块,再联调顶层工程。

模块结构

主要工程/源码文件如下:

  • multi_func_clock2/multi_func_clock.v
  • multi_func_clock2/clk_div.v
  • multi_func_clock2/dig_segment.v
  • multi_func_clock2/mode_ctrl.v
  • multi_func_clock2/alarm_set.v
  • multi_func_clock2/stopwatch.v
  • multi_func_clock2/multi_func_clock_tb.v
  • multi_func_clock2/beep_ctrl.v
  • multi_func_clock2/key_debounce.v
  • multi_func_clock2/time_cnt.v

演示视频

下方提供演示视频,可直接播放查看运行效果。

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

设计说明:

程序文件

程序编译

Testbench

仿真图

整体仿真图

按键消抖

分频模块

计时模块

闹钟设置模块

秒表模块

闹铃整点提示模块

显示模块

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

多功能数字时钟 Verilog ModelSim 设计文档图片 image10.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image11.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image12.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image13.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image14.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image15.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image16.png

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

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

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

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

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

多功能数字时钟 Verilog ModelSim 设计文档图片 image7.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image8.png

多功能数字时钟 Verilog ModelSim 设计文档图片 image9.png

部分代码

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

module multi_func_clock#(
parameter DIV_1HZ = 32'd50000000,
parameter DIV_100HZ = 32'd500000,
parameter DEBOUNCE_CNT = 20'hfffff
)(
input clk_in,//50MHz
input key_0,//模式设置按键--4'd0:计时,4'd1:闹钟,4'd2:跑表
input key_1,//修改时,秒表启动
input key_2,//修改分,秒表暂停
input key_3,//修改秒,秒表复位,闹钟关闭
output beep_led,//核心板H1 ,低电平亮
output [3:0] led //led显示时间,低电平亮
);

wire [3:0] mode;//模式,4'd0:计时,4'd1:闹钟,4'd2:跑表
wire [7:0] hour;//时
wire [7:0] minute;//分
wire [7:0] second;//秒
wire [7:0] alarm_hour;//闹钟时
wire [7:0] alarm_minute;//闹钟分
wire [7:0] alarm_second;//闹钟秒
wire [7:0] stopwatch_Millisecond;//10毫秒
wire [7:0] stopwatch_second;//秒
wire [7:0] stopwatch_minute;//分

wire key_0_p;
wire key_1_p;
wire key_2_p;
wire key_3_p;

wire clk_1Hz;
wire clk_100Hz;
//分频模块
clk_div #(
    .DIV_1HZ(DIV_1HZ),
    .DIV_100HZ(DIV_100HZ)
) i_clk_div(
. clk_in(clk_in),
. clk_1Hz(clk_1Hz),
. clk_100Hz(clk_100Hz)
);
//消抖模块
key_debounce #(
    .DEBOUNCE_CNT(DEBOUNCE_CNT)
) key_0_de(
. clk_in(clk_in),     
. key_in(key_0),
. key_neg(key_0_p)
);
//消抖模块
key_debounce #(
    .DEBOUNCE_CNT(DEBOUNCE_CNT)
) key_1_de(
. clk_in(clk_in),     
. key_in(key_1),
. key_neg(key_1_p)
);
//消抖模块
key_debounce #(
    .DEBOUNCE_CNT(DEBOUNCE_CNT)
) key_2_de(
. clk_in(clk_in),     
. key_in(key_2),
. key_neg(key_2_p)
);
//消抖模块
key_debounce #(
    .DEBOUNCE_CNT(DEBOUNCE_CNT)
) key_3_de(
. clk_in(clk_in),     
. key_in(key_3),
. key_neg(key_3_p)
);

//模式控制模块
mode_ctrl i_mode_ctrl(
. clk_in(clk_in),
. set_mode_key(key_0_p),
. mode(mode)//当前模式,4'd0:计时,4'd1:闹钟,4'd2:跑表
);

//计时模块
time_cnt i_time_cnt(
. clk_in(clk_in),
. clk_1Hz(clk_1Hz),
. mode(mode),//当前模式,4'd0:计时,4'd1:闹钟,4'd2:跑表

. hour_key(key_1_p),//设置时
. minute_key(key_2_p),//设置分
. second_key(key_3_p),//设置秒

. hour_time(hour),//时
. minute_time(minute),//分
. second_time(second)//秒
);

//闹钟设置模块
alarm_set i_alarm_set(
. clk_in(clk_in),
. mode(mode),//当前模式,4'd0:计时,4'd1:闹钟,4'd2:跑表

. hour_key(key_1_p),//设置时
. minute_key(key_2_p),//设置分
. second_key(key_3_p),//设置秒

. alarm_hour(alarm_hour),//时
. alarm_minute(alarm_minute),//分
. alarm_second(alarm_second)//秒
);

//秒表模块
stopwatch i_stopwatch(
. clk_in(clk_in),
. clk_100Hz(clk_100Hz),//100Hz--对应10ms
. mode(mode),//当前模式,4'd0:计时,4'd1:闹钟,4'd2:跑表
. start_key(key_1_p),//启动
. stop_key(key_2_p),//暂停
. reset_key(key_3_p),//复位
. stopwatch_Millisecond(stopwatch_Millisecond),//10毫秒
. stopwatch_second(stopwatch_second),//秒
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

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

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

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