简易计时闹钟设计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


演示视频:

设计文档:

设计文档.doc

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)//启动

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 简易计时闹钟设计Verilog代码VIVADO仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

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

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