简易计时闹钟设计Verilog代码VIVADO仿真
名称:简易计时闹钟设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
简易计时闹钟
有四位数码管,前两位计分钟,表示00~99分钟,后面两位记秒,值为00~59秒。有三个按键,第一个是分键,第二个是秒键,第三个是启动/暂停键。功能:分秒两键同时按下清零且停止计时,外于设置态,按一次分键分钟加1,99增1变为0;按一次秒键秒增1,59增1变为0。此状态下按启动/暂停键开始计时,设置值为0000则为正计时,设置值为非零值则为倒计时。
正计时时,按启动/暂停键会暂停计时,再按启动/暂停键则会继续计时。
倒计时时,减到零时停止减数且发出警示蜂鸣声,直到启动/暂停键被按下时进入设置态且同时显示前设置值和停止发出蜂鸣声。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 要求
简易计时闹钟:有四位数码管,前两位计分钟,表示00~99分钟,后面两位记秒,值为00~59秒。有三个按键,第一个是分键,第二个是秒键,第三个是启动/暂停键。功能:分秒两键同时按下清零且停止计时,外于设置态,按一次分键分钟加1, 99增1变为0;按一次秒键秒增1,59增1变为0。此状态下按启动/暂停键开始计时,设置值为0000则为正计时,设置值为非零值则为倒计时。正计时时,按启动/暂停键会暂停计时,再按启动/暂停键则会继续计时。倒计时时,减到零时停止减数且发出警示蜂鸣声,直到启动/暂停键被按下时进入设置态且同时显示前设置值和停止发出蜂鸣声。
2. 工程文件

3. 程序文件

4. 程序编译

5. Testbench

6. 仿真图
整体仿真图

同时按下分钟和秒钟键,进入设置状态,设置为2分5秒,按下启动键开始倒计时

倒计时

倒计时结束,beep蜂鸣器拉高

直到启动/暂停键被按下时进入设置态且同时显示设置值和停止发出蜂鸣声
设置值为0000,启动正计时

暂停后按下启动继续计时

部分代码展示:
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2019/12/08 20:54:09 // Design Name: // Module Name: clock_timer // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module clock_timer( input clk_100Hz,//输入100Hz时钟,用于控制数码管 input clk_1Hz,//1秒时钟1Hz input min_button,//分键 input sec_button,//秒键 input startstop_button,//启动暂停 output beep,//蜂鸣器 output reg [7:0] SMG_HEX,//数码管段选 output reg [3:0] SMG_bit//数码管位选 ); reg min_button_buf0; reg sec_button_buf0; reg startstop_button_buf0; reg min_button_buf1; reg sec_button_buf1; reg startstop_button_buf1; //输入按键打2拍,用于求上升沿 always@(posedge clk_1Hz) begin min_button_buf0<=min_button; sec_button_buf0<=sec_button; startstop_button_buf0<=startstop_button; min_button_buf1<=min_button_buf0; sec_button_buf1<=sec_button_buf0; startstop_button_buf1<=startstop_button_buf0; end wire set_min_time; wire set_sec_time; wire startstop; assign set_min_time=min_button_buf0 & ~min_button_buf1;//按键上升沿 assign set_sec_time=sec_button_buf0 & ~sec_button_buf1;//按键上升沿 assign startstop =startstop_button_buf0 & ~startstop_button_buf1;//按键上升沿 parameter s_CLR=3'd0;//清零 parameter s_SET=3'd1;//设置 parameter s_INCRE=3'd2;//递增计时 parameter s_DECRE=3'd3;//递减计时 parameter s_SUSP=3'd4;//暂停计时 parameter s_STOP=3'd5;//停止计时 reg [2:0] state=s_INCRE; reg [7:0] min_time=8'd0;//分 reg [7:0] sec_time=8'd0;//秒 always@(posedge clk_1Hz) case(state) s_CLR://清零 state<=s_SET; s_SET://设置 if(startstop==1)//启动键 if((min_time==6'd0) & (sec_time==6'd0))//设置值0000 state<=s_INCRE;//递增计时 else state<=s_DECRE;//递减计时 s_INCRE://递增计时 if(startstop==1)//暂停键 state<=s_SUSP;//暂停 else if(set_min_time==1 && set_sec_time==1)//2键同时按下 state<=s_CLR; s_SUSP://暂停 if(startstop==1)//启动
代码文件(付费下载):
![]()
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 简易计时闹钟设计Verilog代码VIVADO仿真
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm