HDLbits: Countbcd

其实这道题目可以在上一道1000进制的基础上接着做。

module top_module (
    input clk,
    input reset,   // Synchronous active-high reset
    output [3:1] ena,
    output [15:0] q);
    
    wire [3:0] Q1,Q2,Q3,Q4;
    
    assign ena[1] = (Q1==9);
    assign ena[2] = (Q2==9 && Q1==9);
    assign ena[3] = (Q3==9 && Q2==9 && Q1==9);
    assign q = {Q4,Q3,Q2,Q1};
      
    counter counter1(clk,reset,1,Q1);
    counter counter2(clk,reset,ena[1],Q2);
    counter counter3(clk,reset,ena[2],Q3);
    counter counter4(clk,reset,ena[3],Q4);

endmodule


module counter(input clk, input reset, input enable, output [3:0] Q);
    always@(posedge clk)
        if(reset || (Q==9 &&  enable))
            Q <= 4'd0;
   		else if(enable)
            Q <=  Q + 1; 
    	else
            Q <=  Q;
endmodule

你可能感兴趣的:(fpga开发)