Verilog_RTL 설계/Basys_3

[Sequential Circuit] Up_Counter

juniha 2025. 7. 7. 11:55

목적

  • 디지털 시스템 설계에서 다운 카운터의 동작을 구현하고 테스트

기본 구성

  • 4개의 .T_FF : 4비트 값을 기억
  • clk : 값이 변하는 시점 지성( 상승엣지 기준)
  • reset : 상태를 0000으로 초기화
  • enable : 카운팅을 제어하는 신호 (1일 때만 카운트)

사용 코드_ T_FF

module T_flip_flop_p(
    input clk, reset_p,
    input t,   
    output reg q);
    
    always @(posedge clk, posedge reset_p)begin
        if(reset_p) q = 0;
        else if(t) q = ~q;
        else q = q; 
    end
    
endmodule

 

사용 코드_1

module up_counter_asyc (
    input clk,         // 외부에서 주어지는 기본 클럭 입력
    input reset_p,     // 비동기 리셋 입력 (양의 엣지에서 동작한다고 가정)
    output [3:0] count // 4비트 카운터 출력 (0000 ~ 1111)
);

// 첫 번째 T 플립플롭: 가장 하위 비트 (LSB)
// 외부 clk를 직접 입력으로 받아 토글 (T=1, 항상 토글)
// count[0]은 1클럭마다 0↔1 전환 (1Hz 기준)
T_flip_flop_n T0(
    .clk(clk),           // 외부 클럭 입력
    .reset_p(reset_p),   // 비동기 리셋
    .t(1),               // T 입력은 항상 1 (토글 모드)
    .q(count[0])         // 출력은 count[0]
);

// 두 번째 T 플립플롭: 두 번째 비트
// 이전 출력(count[0])을 클럭으로 사용 → 비동기 구조
// count[0]이 토글될 때마다 이 플립플롭도 토글
T_flip_flop_n T1(
    .clk(count[0]),      // 이전 비트 출력이 클럭 역할
    .reset_p(reset_p),
    .t(1),
    .q(count[1])
);

// 세 번째 T 플립플롭
// count[1]이 토글될 때마다 이 플립플롭이 토글
T_flip_flop_n T2(
    .clk(count[1]),
    .reset_p(reset_p),
    .t(1),
    .q(count[2])
);

// 네 번째 T 플립플롭: 가장 상위 비트 (MSB)
// count[2]의 토글에 따라 토글
T_flip_flop_n T3(
    .clk(count[2]),
    .reset_p(reset_p),
    .t(1),
    .q(count[3])
);

endmodule

 

사용 코드_2

module up_counter_p(
    input clk,           // 클럭 입력
    input reset_p,       // 비동기 리셋 입력 (posedge에서 작동)
    input enable,        // enable 신호 (1일 때만 카운팅)
    output reg [3:0] count // 4비트 카운터 출력
);
    
    always @(posedge clk, posedge reset_p) begin
        if (reset_p)
            count = 0;              // 리셋 시 카운터를 0으로 초기화
        else if (enable)
            count = count + 1;      // enable이 1일 때마다 1씩 감소 (다운 카운트)
    end

endmodule

 


Schematic

Simulation

 

결과

  • 이 회로는 enable 신호가 있을 때 클럭 상승 엣지마다 1씩 증가하는 Up counter이다.
  • 비동기 리셋 신호를 통해 언제든지 출력을 초기화 할 수 있습니다.
  • 디지털 순차회로의 기본 구성요소로서 다양한 실습과 시스템에 적용될 수 있다.