• 使用BCD计数器设计时钟


    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Engineer: connor jiao
    // Create Date: 21:42 2020/8/5
    // Design Name: 
    // Module Name: 
    // Function   : 
    //用计数器设计一个带am/pm的12小时时钟。该计数器通过一个CLK进行计时,用ena使能信号来驱动时钟的递增。
    //reset信号将时钟复位为12:00 AM。 信号pm为0代表AM,为1代表PM。
    //hh、mm和ss由两个BCD计数器构成hours(01~12), minutes(00~59) , second(00~59)。
    //Reset信号比enable信号有更高的优先级,即使没有enable信号也可以进行复位操作。 
    // Revision 0.01 - File Created
    // Additional Comments:
    //////////////////////////////////////////////////////////////////////////////////
    module top_module(
        input clk,
        input reset,
        input ena,
        output reg pm,
        output reg [7:0] hh,
        output reg [7:0] mm,
        output reg [7:0] ss); 
        
        always@(posedge clk)
            if(reset)
                ss<='d0;
            else if(ena)
                if(ss==8'h59)
                    ss<='d0;
                else if(ss[3:0]=='d9)begin
                    ss[3:0]<='d0;
                    ss[7:4]<=ss[7:4]+1'b1;
                end
                else begin
                    ss[7:4]<=ss[7:4];
                    ss[3:0]<=ss[3:0]+1'b1;
                end
            else
                ss<=ss;      
        always@(posedge clk)
        begin
            if(reset)
                mm<='d0;
            else if(ena&&ss==8'h59)
                if(mm=='h59)
                    mm<='d0;
                else begin
                    if(mm[3:0]=='d9)begin
                        mm[3:0]<='d0;
                        mm[7:4]<=mm[7:4]+1'b1;
                    end
                    else begin
                        mm[3:0]<=mm[3:0]+1'b1;
                        mm[7:4]<=mm[7:4];
                    end
                end    
            else 
                mm<=mm;
        end        
        always@(posedge clk)
        begin
            if(reset)
                hh<=8'h12;
            else begin
                if(ena&&mm==8'h59&&ss==8'h59)
                    if(hh==8'h12)
                        hh<='d1;
                    else begin
                        if(hh[3:0]=='d9)begin
                            hh[3:0]<='d0;
                            hh[7:4]<=hh[7:4]+1'b1;
                        end
                        else begin
                            hh[3:0]<=hh[3:0]+1'b1;
                            hh[7:4]<=hh[7:4];
                        end
                    end
                else
                    hh<=hh;
            end
        end
        always@(posedge clk)
        begin
            if(reset)
                pm<=1'b0;
            else if(ena&&hh==8'h11&&mm==8'h59&&ss==8'h59)
                pm<=~pm;
            else
                pm<=pm;
        end
    endmodule
  • 相关阅读:
    LwIP源代码文件目录解析
    规划2014!
    test
    111
    df
    第一次北京之行
    Android02--debug.keystore的注册信息
    Android01--开发环境搭建
    dfd
    1007
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/13492503.html
Copyright © 2020-2023  润新知