• clock_lexin


    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Engineer: connor jiao
    // Create Date: 14:02 2020/6/10
    // Design Name: 
    // Module Name: 
    // Function   :  
    //请基于f = 100Hz的Clock设计一个数字时钟,用Verilog实现以下功能
    
    //1、产生时、分、秒的计时
    
    //2、可通过3个按键来设置时、分、秒值
    // Revision 0.01 - File Created
    // Additional Comments:
    //////////////////////////////////////////////////////////////////////////////////
    module clock(
        input clk ,
        input rst_n ,
        input hour_set,
        input [4:0] hour_set_value ,
    
        input minute_set,
        input [5:0] minute_set_value ,
    
        input second_set ,
        input  [5:0] second_set_value ,
    
        output [5:0] second_out ,
        output [5:0] minute_out ,
        output [4:0] hour_out 
    );
    
        reg [5:0] second_reg ;
        reg [5:0] minute_reg ;
        reg [4:0] hour_reg ;
        always@(posedge clk or negedge rst_n ) begin
            if(!rst_n) begin
                second_reg <= 0 ;
            end
            else if(second_set) second_reg <= second_set_value ;
            else if(second_reg == 59) second_reg <= 0;
            else second_reg <= second_reg +1 ;
        end
    
        always@(posedge clk or negedge rst_n ) begin
            if(!rst_n) begin
                minute_reg <= 0 ;
            end
            else if(minute_set) minute_reg <= minute_set_value ;
            else if(minute_reg == 59 && second_reg == 59) minute_reg <= 0;
            else if(second_reg == 59) minute_reg <= minute_reg +1 ;
        end
    
        always@(posedge clk or negedge rst_n ) begin
            if(!rst_n) begin
                hour_reg <= 0 ;
            end
            else if(hour_set) hour_reg <= hour_set_value ;
            else if(hour_reg == 23 && minute_reg == 59 && second_reg == 59)   hour_reg <= 0;
            else if(minute_reg == 59 && second_reg == 59 ) hour_reg <= hour_reg +1 ;
        end    
    
    assign second_out =  second_reg ; 
    assign minute_out =   minute_reg; 
    assign hour_out =   hour_reg; 
    endmodule
    module  clock_tb ;
        reg clk ;
        reg rst_n ;
        reg hour_set ;
        reg [4:0] hour_set_value ;
        reg minute_set ;
        reg [5:0]minute_set_value ;
        reg second_set ;
        reg [5:0]second_set_value ;
     
        wire [5:0] second_out  ;
        wire [5:0] minute_out  ;
        wire [4:0] hour_out  ;
    
    initial begin
        clk = 0 ;
        rst_n = 0 ;
        hour_set = 0 ;
        hour_set_value = 0;
        minute_set = 0 ;
        minute_set_value = 0;
        second_set = 0 ;
        second_set_value = 0;
        
        #101 rst_n  = 1  ;
    
        @(posedge clk ) begin 
    
            hour_set = 1 ;
            hour_set_value= 10 ;
            minute_set = 1 ;
            minute_set_value = 10 ;
            second_set= 1 ;
            second_set_value = 10 ;
        end
        @(posedge clk ) begin 
            hour_set = 0;
            //hour_set_value= 0 ;
            minute_set = 0 ;
            //minute_set_value = 0 ;
            second_set= 0 ;
            //second_set_value = 0 ;
        end
    end
    
        always #5 clk =~clk ;
    
     clock clock(
        .clk(clk) ,
        .rst_n(rst_n) ,
        .hour_set(hour_set) ,
        .hour_set_value(hour_set_value) ,
    
        .minute_set(minute_set),
        .minute_set_value(minute_set_value) ,
    
        .second_set(second_set),
        .second_set_value(second_set_value) ,
    
        .second_out(second_out) ,
        .minute_out(minute_out) ,
        .hour_out(hour_out) 
    );
    
    endmodule

    YKJIAO
  • 相关阅读:
    vue 微信底部导航开始就隐藏
    复制内容到剪切板 兼容大部分手机浏览器
    复制内容到剪切板
    页面滚动到顶部 也可实现或底部或中部
    js判断当前是移动端还是ios端
    判断是否是微信浏览器打开
    vue 获取元素高度
    内容超出隐藏
    uni-app 动态修改标题栏按钮名称
    Docker 常用应用
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/13084866.html
Copyright © 2020-2023  润新知