RTL log #2 : 64-bit adder — Vivado 실습

YOUNGWOONG HAN·2026년 2월 25일

RTL log

목록 보기
2/3
post-thumbnail

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

1. 프로젝트 종류 선택

64-bit adder RTL 합성에서는 보통 RTL Project 선택을 합니다.

1. RTL Project

  • 가장 일반적인 HDL 설계용.
  • Verilog/VHDL 소스 추가, 합성, 구현, 타이밍 분석까지 가능

추가 체크박스( RTL Project 아래 ):

  • Do not specify sources at this time: 지금은 소스 안 넣고 빈 프로젝트만 생
    성.
  • Project is an extensible Vitis platform: Vitis 플랫폼 개발용(일반 RTL 합성
    에서는 보통 체크 안 함).

2. Post-synthesis Project

  • RTL이 아니라 이미 합성된 결과물(netlist/DCP) 기준으로 여는 프로젝트
  • 디바이스 리소스/배치/타이밍 분석 용도
  • 보통 초반 설계 단계에서는 잘 안 씀

3. I/O Planning Project

  • 소스 없이 핀맵/패키지(I/O) 계획만 먼저 할 때 사용
  • XDC 핀 배치 준비 용도

4. Imported Project

  • Synplify 같은 외부 툴 프로젝트를 Vivado로 가져올 때 사용
  • 일반 RTL 직접 작성 과제에서는 거의 안 씀

5. Example Project

  • Vivado 예제 템플릿으로 시작
  • 학습용/샘플 확인용

2. 프로젝트 소스 등록

이미 rtl 설계 파일이 있으니 Add Files을 눌러 파일(*.v)을 추가합니다.

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

3. 보드 선택

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

4. Run Synthesis

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

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

5. 결과 확인

1. 로그 확인

24 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered.

synth_design completed successfully

2. Report Utilization으로 사용 LUT/IOB 확인

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

3. Open Elaborated Design 확인


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

4. Device View 확인


1. [Run Synthesis] 버튼을 눌러 실제 합성을 진행합니다.
2. Open Synthesized Design를 눌러 합성된 결과물을 확인합니다.

중앙의 흰 사각형/분홍 점 : 현재 배치된 셀, 즉 합성 결과물이 올라간 위치

상태 해석:
중앙에 배치된 셀이 매우 적고(흰 사각형 몇 개) 대부분의 칩 면적이 비어 있습니다. 이는 64비트 가산기 회로가 LUT 사용량이 낮아 칩의 극히 일부만 점유하고 있다는 것을 시각적으로 보여줍니다. I/O가 193비트로 핀 수를 초과했기 때문에 IOB 쪽에는 제대로 매핑이 되지 않은 상태로 보입니다.

5. 데이터 패스 지연 시간 확인

  1. Tcl console 창에 report_timing -from [get_ports a[*]] -to [get_ports sum[*]] -setup 해당 명령어를 입력합니다.
  2. 해당 명령어는 Netlist을 그래프로 인식하고, 지정된 시작점(aa)에서 끝점(sumsum)까지의 모든 경로 중 가장 느린 최악의 경로를 찾아 지연 시간을 합산합니다.

    최악의 경로
  • 시작점 : a[2]
  • 끝점 : sum[61]
  • Data Path Delay : 19.706ns(logic delay 6.708ns, route delay 12.998ns)
  • Logic Levels : 28 (신호가 통과한 소자의 개수)
  • 최대 주파수 : 1/19.706ns50.74MHz1 / 19.706ns \approx 50.74MHz

결론 :
Half adder에서부터 RCA 64-bit adder까지의 계층적 구조적 한계, 즉 Ripple Carry 구조에서는 carry가 LSB에서 MSB 방향으로 직렬 전파되기 때문에 비트 수에 비례해 critical path가 길어지는 문제로 인해 net delay가 19.706ns 중 12.998ns를 차지할 만큼 배선 지연이 압도적으로 커졌습니다. 이로 인해 최대 동작 주파수가 약 50.74MHz에 그쳐 고속 설계 요구사항을 만족하기 어려우므로 하드웨어적 보완이 필요합니다.

해결 :

  • 게이트 레벨 모델링 대신 데이터 플로우 모델링(assign 할당문)으로 재합성하여, 합성 툴이 carry look-ahead 등 최적화된 내부 구조를 자동으로 선택할 수 있도록 한다.
  • carry chain의 중간에 pipeline register를 삽입해 critical path를 절반으로 단축한다.

마무리하며

합성은 에러 없이 완료되었고, LUT 사용량도 낮은 수준으로 확인되었습니다. 다만 Top I/O가 193비트로 Basys3의 가용 I/O(106핀)를 초과하여 그대로 구현하기는 어려운 상황이며, 실제 FPGA에 올리려면 I/O 수를 줄이는 설계 수정이 선행되어야 합니다. 또한 이번 실습에서는 XDC 제약을 적용하지 않았기 때문에 타이밍 리포트는 참고 수준으로만 해석하였습니다.

다음 실습에서는 XDC 제약을 적용하여 실제 타이밍 에러를 직접 확인하고 디버깅하는 과정을 진행할 예정입니다.

profile
electronic engineering student

0개의 댓글