logic-circuit-design / practice / 04_Hexadecimal_Counter / rtl / HEXADECIMAL_COUNTER.v
HEXADECIMAL_COUNTER.v
Raw

// Top module
module HEXADECIMAL_COUNTER_TOP (
    CLK_50,  // 50MHz CLOCK
    RSTB,    // Asynchronous RESET (Negative logic)
    oSEG     // 7SEG output
);

    input          CLK_50;
    input          RSTB;
    output [6:0]   oSEG;
    wire   [3:0]   CNT;     // Counter OUTPUT
    
    SCLK_GEN U0(
        .CLK_IN(CLK_50),
        .CLK_OUT(SCLK)
    );
    
    HEXADECIMAL_COUNTER U1(
        .CLK(SCLK), 
        .RSTB(RSTB), 
        .oCNT(CNT)
    );
    
    SEG7_LUT U2(
        .iDIG(CNT), 
        .oSEG(oSEG)
    );

endmodule


// Hexadecimal (base-16) Counter
module HEXADECIMAL_COUNTER (
    CLK, 
    RSTB, 
    oCNT
);
    
    input          CLK;
    input          RSTB;
    output [3:0]   oCNT;
    
    reg [3:0]      CNT;
    
    assign oCNT = CNT;
    
    always @( posedge CLK or negedge RSTB )
        if ( !RSTB )
            CNT <= 0;
        else
            CNT <= CNT + 4'd1;

endmodule