본문 바로가기

Verilog/HDLbits

[HDLBits] Countbcd

1. 문제 및 설명

  • 4자리 BCD 카운터를 설계하시오.
    • 상위 세 자리에 대해서, 각 자릿수가 증가되어야 할 시점을 나타내는 Enable신호도 함께 출력하시오.

 

2. 모듈 정의

module top_module (
    input clk,
    input reset,   // Synchronous active-high reset
    output [3:1] ena,
    output [15:0] q);

 

 

 

3. 답

module top_module (
    input clk,
    input reset,   // Synchronous active-high reset
    output [3:1] ena,
    output [15:0] q);
    
    wire [3:0] upper;
    
    assign ena[1] = (q[3:0] == 4'd9);
    assign ena[2] = ena[1]&(q[7:4] == 4'd9);
    assign ena[3] = ena[1]&ena[2]&(q[11:8] == 4'd9);
    
    BCD_Counter i0 [3:0] (clk, reset, {ena[3:1], 1'b1}, q);


endmodule

module BCD_Counter(
	input clk,
	input reset,
    input ena,
    output reg [3:0] q
	);
	
    
	always @(posedge clk)
        begin
            if (reset || (q == 9&ena))	// Count to 10 requires rolling over 9->0 instead of the more natural 15->0
                begin
                    q <= 0;
                end
            else if(ena)
                begin
                    q <= q+1'b1;
                end
            else
                q <= q;
        end
        
	
endmodule

'Verilog > HDLbits' 카테고리의 다른 글

[HDLBits] Shift4  (0) 2026.01.14
[HDLBits] Count clock  (0) 2026.01.14
[HDLBits] Exams/ece241 2014 q7b  (0) 2026.01.14
[HDLBits] Exams/ece241 2014 q7a  (0) 2026.01.06
[HDLBits] Countslow  (0) 2026.01.05