Vivado Synthesis & Implementation 옵션/전략
완전 가이드 (Vivado 2025.1 기준)

이 문서는 Vivado의 SynthesisImplementation 단계에서 제공되는 Strategy/Directive/옵션을 체계적으로 정리하고, 언제 어떤 전략이 유리한지를 실무 관점에서 깊이 있게 설명합니다. 각 항목은 AMD 공식 문서(UG901/UG904/UG906)와 Tcl 명령 레퍼런스를 참고하여 작성되었습니다.

요약 — “성능 최적화”는 단일 옵션이 아니라, 전략(Strategy) → 각 단계별 Directive → 세부 스위치의 계층으로 이뤄진 조합입니다. 본 문서는 이 계층을 설계 특성(클럭, 자원, 혼잡, SLR/SSI, 전력)별로 분해해 권장 조합주의점을 제공합니다.

1) 전체 흐름과 핵심 개념

Vivado 구현 플로우는 Synthesisopt_designplace_designphys_opt_designroute_designpost-route phys_opt_design 순으로 진행됩니다. 각 단계는 Directive로 동작 방식이 달라지고, 여러 단계를 묶은 Strategy가 제공됩니다.

  • Strategy: 여러 단계의 Directive/스위치 세트를 사전에 구성해 둔 묶음.
  • Directive: 특정 단계(예: place_design -directive ExtraNetDelay_high)의 탐색/최적화 강도나 알고리즘을 선택.
  • 옵션/스위치: 각 명령의 세부 스위치(예: route_design -tns_cleanup)로 미세 조정.
핵심 원리
  • 정확한 제약(XDC)이 최우선 — 잘못된 set_clock_groups/set_false_path는 모든 전략의 효과를 무력화합니다.
  • 빨리 돌고 자주 비교 — Flow_Quick로 배치·라우팅 감을 잡고, 병목을 report_qor_suggestions로 보정 후 고강도 전략으로 승격.
  • 혼잡/SLR/고유틸 설계는 Congestion_*·Performance_SpreadSLL/BalanceSLL물리 구조를 건드리는 전략이 핵심.

2) Synthesis 옵션 심층 가이드 (UG901 기반)

※ 표기는 Vivado Tcl 옵션 표기와 동일하며, 대표적 효과/주의점을 정리했습니다. 전략별 기본값 매트릭스는 아래 3장 참조.

옵션의미/효과언제 유리한가주의/부작용
-flatten_hierarchy (none / rebuilt / full) 계층 평탄화 수준. rebuilt는 물리 최적화에 유리한 구조로 재구성. 모듈 경계가 타이밍 병목이면 rebuilt, 강한 최적화가 필요하면 full. 디버깅/에코(ECO) 난이도↑, 구문/속성의 범위가 달라질 수 있음.
-retiming 순차 경계(FF) 이동으로 경로 균형화(Setup 개선). 파이프라이닝 여지가 있고 레이턴시 제약이 느슨할 때. CDC/리셋/CE 제약이 복잡하면 제한적. RTL-게이트 매핑 추적 난이도↑.
-resource_sharing (auto/off) 연산 공유로 LUT/DSP 절감. 면적 압박, 저주파 설계. 공유 멀티플렉싱으로 Fmax 하락 가능. 고성능 설계는 off 권장.
-keep_equivalent_registers 동등 레지스터 제거 방지 → 복제 유지. 의도적 레지스터 복제/팬아웃 분산이 필요한 경우. 면적 증가. 다음 단계의 자동 복제 로직과 충돌 주의.
-no_lc LUT-Combining 비활성화. 혼잡/SLR 횡단 경로에서 국부 혼잡을 줄이고 라우팅 자유도↑. 자원↑. 타이트한 장치에서 사용 시 BRAM/DSP 인접 혼잡만 이동될 수 있음.
-no_srlextract, -shreg_min_size SRL로의 시프트레지스터 추출 제어. SRL이 타이밍/라우팅을 악화시키거나 디버그 용 레지스터 보존 필요 시. 자원↑. 반대로 SRL 추출이 유리한 딥-시프트에서는 성능/전력↓.
-fsm_extraction, FSM_ENCODING 속성 FSM 추출/인코딩(one-hot/gray/sequential/auto) 선택. 초고속(one-hot) 또는 면적(gray/sequential) 목표. 복잡 FSM에서 one-hot은 FF↑. 코딩 스타일과 일관성 필요.
-control_set_opt_threshold Control Set 최적화 임계값. 리셋/CE 분화 억제. Control Set 폭증으로 슬라이스 포장율/배치 실패 시. 과도한 병합은 기능적 의도(클럭게이팅/저전력) 왜곡 위험.
-max_bram/-max_uram/-max_dsp, -cascade_dsp 하드 블록 사용 상한/연쇄 사용 제어. IP와 사용자 로직이 하드 블록을 경쟁적으로 사용할 때. 억제 시 LUT 구현으로 Fmax↓·전력↑.

자세한 정의/속성 예제는 UG901의 Vivado Preconfigured StrategiesSynthesis Attributes 섹션을 참고하세요.

3) Synthesis 미리 구성된 전략과 적용 시나리오

아래 표는 대표 전략의 의도권장 사용 사례입니다. 실제 옵션 매트릭스는 Vivado 릴리즈마다 조금씩 달라질 수 있습니다.

전략의도/핵심 옵션권장 사례주의점
Vivado Synthesis Defaults 균형(성능/면적/런타임). -flatten_hierarchy rebuilt, 타이밍 구동 기본. 초기 기준선, 범용 프로젝트. 혼잡/고유틸/초고속에는 부족할 수 있음.
Flow_PerfOptimized_high 성능 우선. -resource_sharing off, 캐리체인 최적화 등. 고주파(DSP/파이프라인 충분)·저지연 경로. 자원 사용↑, 합성/구현 시간↑.
Flow_PerfThresholdCarry 캐리 체인 우선(가산/누산 경로 최적화). 산술 중심(DSP/LUT 캐리 혼합) 파이프라인. 비산술 경로에는 효과 제한.
Flow_AreaOptimized_high/_medium 면적 절감(공유/리맵/조합 압축). 소형 디바이스/비용 제약/저주파 제품. Fmax 하락 가능. 혼잡이 늘 수도 있음.
Flow_AlternateRoutability 배선 용이성 우선(혼잡 완화 지향). 초고유틸(>80%)·좁은 패키지·복잡 Floorplan. 성능/면적에서 일부 손실 가능.
Flow_RuntimeOptimized 최단 런타임(빠른 반복·자원/성능 타협). 아키텍처 탐색/빠른 기능 검증. QoR 낮음. 최종 빌드에 부적합.

전략별 상세 옵션 매트릭스는 UG901 “Vivado Preconfigured Strategies” 표를 참고하세요.

4) Implementation 전략: 목적/특징/적용 조건 (UG904 기반)

아래는 UG904의 Strategy 설명을 바탕으로, 실무 관점의 “언제 쓰나/무엇을 노리나”를 추가한 요약입니다.

전략핵심 특징권장 설계/상황주의점
Performance_Explore 여러 알고리즘 탐색(배치/라우팅/물리옵트)으로 타이밍 개선 시도. 범용 고성능 목표, 초기 클로저가 살짝 부족할 때. 런타임 증가.
Performance_ExplorePostRoutePhysOpt 라우팅 후 phys_opt_design 추가로 마무리 타이밍 개선. WNS 근접(±0.1~0.2ns) 상태에서 “마지막 1%”가 필요할 때. 런타임↑, 반복성(variability)↑.
Performance_ExploreWithRemap 리맵/저레벨 논리 재구성 + 라우터 타이밍 완화 억제. 조합 깊이가 과도한 경로, LUT 단계 압축 필요. 기능적 등가이지만 디버깅 난이도↑.
Performance_WLBlockPlacement(_FanoutOpt) BRAM/DSP 배선 길이 기반 배치, (FanoutOpt는 HFN 복제 강화). 메모리·DSP 허브형 구조(넓은 버스, NoC 앞뒤). 타이밍 구동 배치보다 제약 민감. 플로어플랜과 함께 사용 권장.
Performance_EarlyBlockPlacement RAM/DSP를 초기 단계에 고정해 나머지 로직 배치 유도. 하드블록 주변 병목(팬아웃/긴 버스) 정리. 초기 앵커가 부정확하면 전체 배치 품질 저하.
Performance_NetDelay_(high/low) 장거리/고팬아웃의 추정 지연 상향으로 보수적 배치 유도. 배치 후엔 맞았는데 라우팅 후 깨지는 케이스. 과도하면 면적/혼잡↑.
Performance_Retiming 배치/라우팅 비용함수에서 레지스터 이동·비용 가중. 레지스터 이동 여지가 있고 경로 불균형이 큰 설계. CDC/Reset 복잡도↑ 시 효율 제한.
Performance_RefinePlacement Post-placement 최적화 강도↑ + 라우터 타이밍 완화 금지. 배치 품질은 좋으나 라우팅 타이밍이 아슬아슬할 때. 런타임↑, 라우터 수렴성 민감.
Performance_(SpreadSLL/BalanceSLL/BalanceSLRs/HighUtilSLRs) SSI/SLR 분산·균형·고유틸 대응. SLR 횡단 경로가 주원인인 Versal/UltraScale+ 대형 디자인. Floorplan/XDC와 함께 쓰지 않으면 효과 제한.
Congestion_SpreadLogic_* 로직 확산(고/중/저)으로 국부 혼잡 완화. 배선 실패/DRC 혼잡 다수, TNS에 혼잡 기여가 큰 경우. 와이어 길이↑ → 전력/지연↑ 가능.
Area_Explore(_Sequential/_WithRemap) 면적 절감 초점(순차 영역/리맵 포함 변형). 자원 한계가 1순위일 때, 성능은 2순위. 타이밍 악화 가능.
Power_(DefaultOpt/ExploreArea) power_opt_design 중심 전력 절감. 전력 예산이 엄격한 제품(배터리/발열 민감). 작은 지연 증가 허용 필요.
Flow_(RunPhysOpt/RunPostRoutePhysOpt) 물리옵트 단계 활성(+ Post-route Explore). WNS 근접/추가 미세 최적화가 필요한 상황. 런타임/재현성 비용.
Flow_(RuntimeOptimized/Quick) 런타임 단축/최소 동작. 프로파일링/빠른 피봇. QoR 낮음, 배치/라우팅 타이밍 구동 약화.

5) 주요 Directives 상세

5.1 place_design – Placer Directives

Directive효과권장 사용
Explore세부/후처리 최적화 강도↑범용 성능 향상 탐색
WLDrivenBlockPlacementBRAM/DSP를 배선 길이 기준으로 배치메모리/연산 허브 설계
EarlyBlockPlacementRAM/DSP를 초기 앵커로 고정하드블록 중심 배치 필요
ExtraNetDelay_high/low장거리/고팬아웃에 지연 가산(보수적 추정)배치 OK→라우팅 Fail 패턴
AltSpreadLogic_(high/med/low)로직 확산으로 혼잡 완화국부 혼잡/라우팅 실패
SSI_*(SpreadSLLs/BalanceSLLs/BalanceSLRs/HighUtilSLRs)SLR 분산/균형/고유틸 대응SLR 횡단 경로 지배 설계
ExtraPostPlacementOptpost-place 최적화 강도↑배치 품질 미세 개선
RuntimeOptimized / Quick / Default런타임↔QoR 트레이드오프빠른 반복/기준선

5.2 route_design – Router Directives

Directive효과권장 사용
Explore/AggressiveExplore치열한 경로 탐색과 재라우팅WNS 근접, 마지막 개선
NoTimingRelaxation타이밍 완화 없이 원 제약 유지제약을 강하게 지키며 수렴 필요
AlternateCLBRouting대체 알고리즘(혼잡 해소 지향)UltraScale 혼잡/배선 실패
MoreGlobalIterations/HigherDelayCost/AdvancedSkewModeling글로벌 반복↑, 지연 비용 가중, 스큐 모델 정밀화고성능 타겟, 시간 여유 有
RuntimeOptimized/Quick/Default런타임↔QoR 트레이드오프프로파일링/기준선

5.3 phys_opt_design – Physical Optimization

팬아웃 복제, 경로 그룹 최적화, 인터커넥트 리타이밍, 홀드 수정, DSP/BRAM/URAM 레지스터 최적화 등 다수의 패스가 포함됩니다. post-placepost-route 모두 사용 가능하며, 전략에 따라 Explore·AggressiveExplore·AggressiveFanoutOpt 등으로 강도를 조절합니다.

5.4 opt/power 옵션

5.5 RQS(Report QoR Suggestions) 전략 연동

place_designRQS directive는 사전에 읽어둔 RQS 파일의 “전략 제안”을 직접 반영합니다. 정확한 레퍼런스 DCP와 최신 RQS 생성이 필수입니다.

6) QoR Suggestions(RQS) & Incremental 활용

6.1 표준 RQS 플로우

# (1) 기준선 합성/구현 후 RQS 생성
open_run impl_1
report_qor_suggestions -file rqs_impl1.rqs

# (2) 제안 적용(자동/수동)
read_qor_suggestions rqs_impl1.rqs

# (3) 전략에 RQS 연동(선택)
#  - place_design -directive RQS 가 RQS 전략 제안을 따르도록 설정
place_design -directive RQS

# (4) 반복: 새 DCP로 재구현 → 새 RQS 생성 → 적용
        

RQS는 옵션/속성/텍스트 권고를 포함합니다. 적용 후에는 관련 단계(합성/배치/라우팅)를 재실행해야 합니다.

6.2 Incremental(증분) + RQS

라우팅된 DCP에서 재사용 가능한 결과를 활용해 빠른 반복을 달성합니다. UltraScale/UltraScale+ 에 최적화되어 있으며, 레퍼런스 DCP의 QoR이 좋을수록 효과가 큽니다.

# 증분 모드
read_checkpoint -incremental ref_impl_routed.dcp
opt_design
place_design
phys_opt_design
route_design
        

7) 설계 유형별 추천 조합 & 실전 레시피

7.1 고성능(DSP/연산 파이프라인)

7.2 메모리/NoC 허브형(넓은 버스, BRAM/URAM 집중)

7.3 초고유틸(>80%)·혼잡 지배

7.4 SSI/SLR 횡단 지배

7.5 저전력 우선

7.6 빠른 반복/프로토타이핑

7.7 Tcl 레시피(샘플)

# 고성능 근접 마무리
opt_design
place_design -directive ExtraNetDelay_high
phys_opt_design -directive Explore
route_design  -directive NoTimingRelaxation -tns_cleanup
phys_opt_design -directive Explore   ;# post-route

# 혼잡 지배 대형 디자인
opt_design
place_design -directive AltSpreadLogic_high
route_design -directive AlternateCLBRouting
phys_opt_design -directive AggressiveExplore
    

8) 타이밍 클로저 체크리스트 & 디버깅 절차

  1. XDC 검증: report_timing_summary, report_clock_interaction, report_exceptions로 제약 이상 확인.
  2. 병목 분류: 경로 타입(DSP/BRAM/SLR/장거리/고팬아웃) → 혼잡/밀도제약 품질.
  3. 전략 선택: 성능/혼잡/전력/런타임 우선순위에 맞춰 7장 조합 적용.
  4. RQS 적용: report_qor_suggestionsread_qor_suggestions → 반복.
  5. 증분/재현성: 좋은 DCP를 기준으로 read_checkpoint -incremental 고려.
  6. 미세조정: phys_opt_design의 Fanout/Interconnect/Hold-fix 등 패스 선택적 강화.

라우터 -tns_cleanup은 WNS에 영향 없이 TNS 개선에 유용. 포스트라우트 phys_opt_design과 궁합이 좋습니다.

9) 버전/디바이스 주의사항

10) 참고 문헌 (AMD 공식)