基于FPGA的简易计时闹钟设计Verilog代码VIVADO仿真

名称:基于FPGA的简易计时闹钟设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

简易计时闹钟:有四位数码管,前两位计分钟表示00~99分钟,后面两位记秒,值为00~59秒。有三个按键,第一个是分键,第二个是秒键,第三个是启动/暂停键。功能:分秒两键同时按下清零且停止计时,外于设置态,按一次分键分钟加1,99增1变为0;按一次秒键秒增159增1变为0。此状态下按启动/暂停键开始计时,设置值为0000则为正计时,设置值为非零值则为倒计时。正计时时,按启动暂停键会暂停计时,再按启动/暂停键则会继续计时。倒计时时,减到零时停止减数且发出警示蜂鸣声,直到启动/暂停键被按下时进入设置态且同时显示前设置值和停止发出蜂鸣声。


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档.doc

1. 工程文件

2. 程序文件

3. 程序编译

4. 仿真文件(testbech)

5. 仿真图

整体仿真图

同时按下2键,设置0000,启动正计时

正计时

暂停,继续

同时按下2键,设置0102,启动倒计时

倒计时

倒计时结束报警,按下启动暂停键取消报警,同时显示前设置值


部分代码展示:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2019/12/15 16:40:03
// Design Name: 
// Module Name: easy_clock
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
module easy_clock(
    input clk_100Hz,//时钟100Hz
    input min_BTN,//分键,按下高电平
    input sec_BTN,//秒键,按下高电平
    input ONOFF_BTN,//启动暂停键
    output reg Alarm_on,//蜂鸣器报警
output [3:0] SMG_weixuan,//数码管位选
    output reg [7:0] SMG_duanxuan//数码管段选
    );
reg clk_1Hz=0;//时钟1Hz
//100Hz分频到1Hz
reg [7:0] div_cnt=8'd0;
always@(posedge clk_100Hz)
if(div_cnt>=8'd99)
div_cnt<=8'd0;
else
div_cnt<=div_cnt+8'd1;
always@(posedge clk_100Hz)
if(div_cnt>=8'd49)
clk_1Hz<=1;
else
clk_1Hz<=0;
reg [2:0] current_state=state_zhengjishi;
parameter state_qingling=0,//清零计时值
  state_shezhi=1,//设置态
  state_qidong=2,//启动
  state_zhengjishi=3,//正计时
  state_daojishi=4,//倒计时
  state_zanting=5,//暂停
  state_tingzhi=6;//停止
//计时分秒
reg [7:0] minute=8'd0;
reg [7:0] second=8'd0;
//前设置值
reg [7:0] minutebefore=8'd0;
reg [7:0] secondbefore=8'd0;
//状态机控制
always@(posedge clk_1Hz)
begin
    case(current_state)
        state_qingling:
            current_state<=state_shezhi;//设置态
        state_shezhi:
            if(ONOFF_BTN==1)//启动、暂停键
                if(minute==6'd0 && second==6'd0)//设置值0000
                    current_state<=state_zhengjishi;//正计时
                else
                    current_state<=state_daojishi;//倒计时
        state_daojishi:
            if(minute==6'd0 && second==6'd0)//计时结束
                  current_state<=state_tingzhi;//停止        
state_zhengjishi:
            if(ONOFF_BTN==1)//启动暂停键
                current_state<=state_zanting;//暂停计时
            else if(min_BTN==1 && sec_BTN==1)//2键同时按下
                current_state<=state_qingling;//清零计时值
        state_zanting:
            if(ONOFF_BTN==1)//启动暂停键
                current_state<=state_zhengjishi;//正计时   
        state_tingzhi:
            if(ONOFF_BTN==1)//启动暂停键
                current_state<=state_shezhi;//设置
        default:
current_state<=state_qingling;//清零计时值
    endcase
end
always@(posedge clk_1Hz)
case(current_state)
    state_qingling:begin//清零
        minute<=8'd0;
        second<=8'd0;
        end
    state_shezhi:begin//设置态 
        minutebefore<=minute;//前设置值  
        secondbefore<=second;//前设置值             
if(min_BTN==1)//设置分
begin
            if(minute==8'd99)
                minute<=8'd0;
            else
                minute<=minute+8'd1;
end
        if(sec_BTN==1)//设置秒
begin
            if(second==8'd59)
                second<=8'd0;
            else
                second<=second+8'd1;
end
        end
    state_zhengjishi://正计时
         if(minute==8'd99 && second==8'd59)begin
            minute<=8'd0;
            second<=8'd0;
            end
         else if(second==8'd59) begin

 

代码文件(付费下载):



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

发表评论

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

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

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