ABOUT ME

-

Today Visit
-
Yesterday Visit
-
Total Visit
-
  • [Verilog] Latch, Flipflop and Register
    컴퓨터 과학 깨달음/논리 회로 설계 2025. 11. 3. 17:05

    1) 이번 주 목표

    • SR Latch, D Latch, D Flip-Flop, JK Flip-Flop의 계층적 설계
    • 4-bit BCD 카운터 구현 및 Reset 신호 처리
    • 4-bit 병렬 레지스터 및 시프트 레지스터 설계
    • Testbench를 통한 타이밍 및 동작 검증

    2) D Flip-Flop (D_Flipflop.v)

    설계 아이디어

    • SR Latch → D Latch → Master-Slave 구조로 순차 구성.
    • SR Latch를 기반으로 D Latch를 만들고, 두 개의 D Latch를 직렬 연결하여 negative edge triggered D Flip-Flop 완성.
    • 클럭의 하강 에지(negative edge)에서 입력 D가 출력 Q로 전달됨.

    SR_Latch.v
    D_Latch.v
    D_Flipflop.v

     


    3) JK Flip-Flop (JK_Flipflop.v)

    설계 아이디어

    • D Flip-Flop 내부에 논리 조합(J, K, Q, Qn)을 추가하여 JK Flip-Flop 구성.
    • JK 조건에 따른 출력 변화:
    • JKQ(next)설명 
      0 0 유지 상태 유지
      0 1 0 리셋
      1 0 1 세트
      1 1 토글 반전
    • negative edge에서 Q의 변화를 관찰.

    JK_Flipflop.v


    4) 테스트 (tb_D_Flipflop.v / tb_JK_Flipflop.v)

    D_Flipflop 테스트

    • Clk: 3 time unit 주기로 토글
    • D: 5 time unit마다 0→1→0→1→0→0 변화
    • 결과: negative edge마다 D 값이 Q로 잘 전달됨.

    tb_D_Flipflop.v
    시뮬레이션 결과

    JK_Flipflop 테스트

    • Clk: 3 time unit 주기로 토글
    • (J, K): 5 time unit마다 (0,1) → (0,0) → (1,0) → (0,1) → (1,1) → (1,1) 순으로 변화
    • 결과: 각 negative edge에서 J, K 조건에 맞게 Q가 세트/리셋/토글됨.
    • 파형에서 안정적 전이 확인.

    tb_JK_Flipflop.v
    시뮬레이션 결과


    5) 4-bit BCD 카운터 (_4_bit_BCD_Counter.v)

    설계 아이디어

    • 출력: 0000 → 0001 → … → 1001 → 0000 반복 (0~9 주기)
    • 각 비트를 JK Flip-Flop으로 구성하여 클럭 하강 에지마다 동작.
    • **비동기 Reset(Rst)**을 추가하여 언제든 초기화 가능하도록 함.
    • 초기에는 Rst를 Counter 내부에서 제어했으나 Clk edge에 동기되어 비정상 동작 발생.
    • 최종 설계에서는 Rst 신호를 최상위 SR Latch까지 직접 전달해 완전한 비동기 리셋 구현.

    _4_bit_BCD_Counter.v


    6) 테스트 (tb_4_bit_BCD_Counter.v)

    • 초기 4 time unit 동안 rst = 1로 리셋
    • 이후 Clk을 5 time unit마다 반전시켜 negative edge에서 카운트 수행
    • 시뮬레이션 결과: Reset 후 0 → 1 → 2 → … → 9 → 0 → … 정상 반복 동작 확인

    🔎 팁: 비동기 리셋(asynchronous reset)은 클럭 타이밍과 무관하게 동작하므로, 신호 전달 경로를 latch 단계까지 연쇄적으로 고려해야 한다.

    tb_4_bit_BCD_Counter.v
    시뮬레이션 결과


    7) 4-bit 레지스터 (_4_bit_register.v)

    설계 아이디어

    • 입력: 4-bit input_bit
    • 출력: 4-bit output_bit (각 D Flip-Flop의 Q 출력)
    • 4개의 D Flip-Flop을 병렬 연결하여 4-bit 데이터를 저장
    • Reset 신호는 0으로 고정 (비활성 상태)
    • 각 Qn에는 버퍼를 두어 출력 안정화.

    _4_bit_register.v

    테스트 (tb_4_bit_register.v)

    • i = 0~15까지 증가시키며 input_bit에 입력
    • Clk을 5 time unit 간격으로 토글
    • 각 입력이 클럭 하강 에지에서 정상적으로 레지스터에 저장됨을 확인.

    tb_4_bit_register.v
    시뮬레이션 결과


    8) 4-bit 시프트 레지스터 (_4_bit_shift_register.v)

    설계 아이디어

    • 입력: 1-bit data_in
    • 각 Flip-Flop의 D 입력은 이전 단계 Q 출력(Qa→Qb→Qc→Qd)으로 연결
    • 클럭 하강 에지마다 데이터가 한 비트씩 오른쪽으로 이동
    • clear 신호가 1일 때 모든 Flip-Flop이 0000으로 초기화
    • reset 경로: D FF → D Latch → SR Latch 순으로 전파.

    _4_bit_shift_register.v

    테스트(tb_4_bit_shift_register.v)

    • Clear = 1로 초기화 → 0000 상태 확인
    • 이후 Clk을 up/down시키며 data를 연속 입력
    • 입력 비트가 순차적으로 Qa→Qb→Qc→Qd로 이동하는 파형 확인.

    tb_4_bit_shift_register.v
    시뮬레이션 결과


    9) FPGA 실습 결과

    _4_bit_BCD_Counter.v

    • FPGA 상에서 숫자 1, 2, 3, 4 순으로 출력됨
    • Clear(0) 시 clk에 상관 없이 0으로 reset

    1

    2

    3

    4

    clear(0)