이번 글에서는 Vivado에서 64-bit Binary Adder(RCA) RTL 프로젝트를 합성(Synthesis)하는 과정을 정리했습니다.

64-bit adder RTL 합성에서는 보통 RTL Project 선택을 합니다.
1. RTL Project
추가 체크박스( RTL Project 아래 ):
2. Post-synthesis Project
3. I/O Planning Project
4. Imported Project
5. Example Project
이미 rtl 설계 파일이 있으니 Add Files을 눌러 파일(*.v)을 추가합니다.

물리/타이밍 제약 사항을 넣는 페이지입니다. Next 눌러줍니다.

가장 많이 이용하는 Basys3 보드를 선택했습니다. Finish 눌러줍니다.

합성할 모듈이 Top 모듈인지 확인하고 좌측에서 Run Synthesis를 눌러줍니다.

XDC(제약 사항)가 없는 합성이었기에 Open Synthesized Design을 선택합니다.

24 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered.
synth_design completed successfully

LUT: 108/20800
IOB: 193/ 106 (Top 포트가 a(64)+b(64)+sum(64)+c_out(1)=193비트라 Basys3 가용 I/O(106)를 초과합니다.)


rca_32bit 모듈 두 개를 사용하여 계층적으로 모델링 된 것과 입출력 포트가 제대로 합성된 것을 확인할 수 있습니다.

1. [Run Synthesis] 버튼을 눌러 실제 합성을 진행합니다.
2. Open Synthesized Design를 눌러 합성된 결과물을 확인합니다.
중앙의 흰 사각형/분홍 점 : 현재 배치된 셀, 즉 합성 결과물이 올라간 위치
상태 해석:
중앙에 배치된 셀이 매우 적고(흰 사각형 몇 개) 대부분의 칩 면적이 비어 있습니다. 이는 64비트 가산기 회로가 LUT 사용량이 낮아 칩의 극히 일부만 점유하고 있다는 것을 시각적으로 보여줍니다. I/O가 193비트로 핀 수를 초과했기 때문에 IOB 쪽에는 제대로 매핑이 되지 않은 상태로 보입니다.
report_timing -from [get_ports a[*]] -to [get_ports sum[*]] -setup 해당 명령어를 입력합니다.
결론 :
Half adder에서부터 RCA 64-bit adder까지의 계층적 구조적 한계, 즉 Ripple Carry 구조에서는 carry가 LSB에서 MSB 방향으로 직렬 전파되기 때문에 비트 수에 비례해 critical path가 길어지는 문제로 인해 net delay가 19.706ns 중 12.998ns를 차지할 만큼 배선 지연이 압도적으로 커졌습니다. 이로 인해 최대 동작 주파수가 약 50.74MHz에 그쳐 고속 설계 요구사항을 만족하기 어려우므로 하드웨어적 보완이 필요합니다.
해결 :
합성은 에러 없이 완료되었고, LUT 사용량도 낮은 수준으로 확인되었습니다. 다만 Top I/O가 193비트로 Basys3의 가용 I/O(106핀)를 초과하여 그대로 구현하기는 어려운 상황이며, 실제 FPGA에 올리려면 I/O 수를 줄이는 설계 수정이 선행되어야 합니다. 또한 이번 실습에서는 XDC 제약을 적용하지 않았기 때문에 타이밍 리포트는 참고 수준으로만 해석하였습니다.
다음 실습에서는 XDC 제약을 적용하여 실제 타이밍 에러를 직접 확인하고 디버깅하는 과정을 진행할 예정입니다.