1) 이번 주 목표
- Binary → BCD 변환기 및 7-Segment 표시기 설계
- 카운터 기반 7-Segment 제어 로직 구현
- ALU 연산 결과를 7-Segment로 출력하는 통합 시스템 제작
2) Binary to BCD 변환기 (BCD.v)
설계 아이디어
- 입력 4-bit binary 값을 tens(십의 자리)와 ones(일의 자리)로 나누어 각각 4-bit BCD로 변환.
- 이전 주차에서 구현한 Binary to BCD 변환 모듈 재활용.
- 이 변환된 BCD 값을 7-segment 표시 모듈의 입력으로 사용.
BCD.v
3) BCD → 7-Segment 변환기 (BCD_7seg_Converter.v)
설계 아이디어
- 입력된 BCD 값을 case문으로 처리하여 0~9 각 숫자에 대해 켜야 할 segment(a~g)를 지정.
- 예:
- ‘0’ → 0b11000000
- ‘1’ → 0b11111001
- …
- ‘9’ → 0b10010000
- 각 segment 점등 패턴은 공통 애노드(common anode) 기준으로 작성.
BCD_7seg_Converter.v
4) 7-Segment 제어기 (seven_segment_controller.v)
설계 아이디어
- 3-bit 카운터를 사용해 8개의 7-Segment 디스플레이(seg0~seg7)를 순차적으로 구동.
- clk 상승 에지마다 counter가 1씩 증가, reset 시 초기화.
- counter 값에 따라 seg_COM과 seg_DATA를 선택적으로 출력.
- 병렬 7-Segment를 시간 다중화(Time-multiplexing) 방식으로 제어.
seven_segment_controller.v (1)
seven_segment_controller.v (2)
5) 통합 변환기 (Binary_7Seg_Converter.v)
설계 아이디어
- BCD, BCD_7seg_Converter, seven_segment_controller 모듈을 결합.
- Binary 입력 → BCD 변환 → 각 자릿수에 대한 7-Segment 점등 제어까지 일괄 수행.
- 전체 Schemetic에서 데이터 플로우(입력 → 변환 → 출력)가 명확히 확인됨.
Binary_7Seg_Converter.v
Schemetic of Binary_7Seg_Converter
6) 테스트 (tb_seven_segment.v)
테스트 구성
- binary 입력값을 0~15까지 순차적으로 변화시키며, 각 값에 대한 seg0~seg7 점등 확인.
- binary = 3 일 때:
- seg_DATA = 252, 242, 0, 0, 0, 0, 0, 0 → ‘03’ 출력 확인
- seg_COM = 01111111 → 10111111 → 11011111 순으로 정상 순회 확인.
tb_seven_segment.v
시뮬레이션 결과
7) ALU 결합 모듈 (Binary_to_7seg_ALU.v)
설계 아이디어
- 이전 주차 ALU(Adder/Subtractor/Multiplier 등)와 이번 주차 7-Segment 시스템 결합.
- ALU의 연산 결과(4-bit)를 Binary_7Seg_Converter 입력으로 연결.
- Schemetic 상에서도 데이터 흐름이 명확히 일치함.
ALU.v
Binary_to_7seg_ALU.v
Schemetic of Binary_to_7seg_ALU
8) 테스트 (tb_seven_segment_with_ALU.v)
테스트 시나리오
- data_A = 3, data_B = 2 고정.
- opcode를 0~5까지 증가시키며 연산 결과 및 7-Segment 표시 확인.
opcode연산예상 출력seg_DATA 예시
| 0 |
ADD (3+2) |
5 |
252 182 0 0 0 0 0 0 |
| 2 |
MUL (3×2) |
6 |
252 190 0 0 0 0 0 0 |
- 시뮬레이션 결과, 두 경우 모두 정상적으로 출력이 이루어짐.
tb_seven_segment_with_ALU
시뮬레이션 결과
9) FPGA 실습 결과
Binary_7Seg_Converter.v
- 실물 FPGA 상에서 1, 2, 6이 순차적으로 출력됨.
Binary_to_7seg_ALU.v
- 실제 확인된 연산 결과:
- 3 + 3 = 6
- 3 × 3 = 9
- 3 ^ 3 (XOR) → 정상 표시