-
[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)'컴퓨터 과학 깨달음 > 논리 회로 설계' 카테고리의 다른 글
[Verilog] 16x4 SRAM (0) 2025.11.06 [Verilog] Binary to 7 segment Converter & with ALU (0) 2025.10.17 [Verilog] 4-bit 가감산기, 곱셈기, 그리고 미니 ALU (2) 2025.10.04 [Verilog] 2 bit Adder and BCD converter (0) 2025.09.24 [Verilog] decoder and mux (0) 2025.09.17