HDlbits Count clock 12小时制时钟 verilog fpga

module top_module(
    input clk,
    input reset,
    input ena,
    output pm,
    output [7:0] hh,
    output [7:0] mm,
    output [7:0] ss); 
    
    reg [3:0] ssge;
    reg [3:0] ssshi;
    reg [3:0] mmge;
    reg [3:0] mmshi;
    reg [3:0] hhge;
    reg [3:0] hhshi;	
    
    always@(posedge clk)begin	//ss个位
        if(reset)begin
            ssge <= 4'h0;
        end
        else if(ena & (ssge == 4'h9))
            ssge <= 4'h0;      	
        else if(ena)
            ssge <= ssge+1; 
    end
    always@(posedge clk)begin	//ss十位
        if(reset)begin
            ssshi <= 4'h0;
        end
        else if(ena & (ssge == 4'h9)&(ssshi == 4'h5))
            ssshi <= 4'h0;      	
        else if(ena & (ssge == 4'h9))
            ssshi <= ssshi+1; 
    end
    
    always@(posedge clk)begin	//mm个位
        if(reset)begin
            mmge <= 4'h0;
        end
        else if(ena &(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            mmge <= 4'h0;      	
        else if(ena &(ssge == 4'h9)&(ssshi == 4'h5))
            mmge <= mmge+1; 
    end
    always@(posedge clk)begin	//mm十位
        if(reset)begin
            mmshi <= 4'h0;
        end
        else if(ena&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            mmshi <= 4'h0;      	
        else if(ena&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            mmshi <= mmshi+1; 
    end
    
    always@(posedge clk)begin	//hh个位
        if(reset)begin
            hhge <= 4'h2;
        end
        else if(ena&(hhshi == 4'h1)&(hhge == 4'h2)&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            hhge <= 4'h1; 
        else if(ena&(hhge == 4'h9)&(mmge == 4'h9)&(mmshi == 4'h5)&(ssge == 4'h9)&(ssshi == 4'h5))
            hhge <= 4'h0;      	
        else if(ena&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            hhge <= hhge+1; 
    end
    
    always@(posedge clk)begin	//hh十位
        if(reset)begin
            hhshi <= 4'h1;
        end
        else if(ena&(hhshi == 4'h2)&(hhge == 4'h3)&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            hhshi <= 4'h0;  
        else if(ena&(hhshi == 4'h1)&(hhge == 4'h2)&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            hhshi <= 4'h0 ;
        else if(ena&(hhge == 4'h9)&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            hhshi <= hhshi+1; 
    end
    
    always@(posedge clk)begin	//AM PM
        if(reset)begin
            pm <= 0;
        end
        else if(ena&pm&(hhshi == 4'h1)&(hhge == 4'h1)&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            pm <= 0;
        else if(ena&(hhshi == 4'h1)&(hhge == 4'h1)&(mmshi == 4'h5)&(mmge == 4'h9)&(ssge == 4'h9)&(ssshi == 4'h5))
            pm <= 1;

    end
    
    
    assign ss = {ssshi, ssge};
    assign mm = {mmshi, mmge};
    assign hh = {hhshi, hhge};
                  
endmodule


 

你可能感兴趣的:(fpga开发,硬件工程)