Vivado Synthesis & Implementation 옵션/전략
완전 가이드 (Vivado 2025.1 기준)
이 문서는 Vivado의 Synthesis 및 Implementation 단계에서 제공되는 Strategy/Directive/옵션을 체계적으로 정리하고, 언제 어떤 전략이 유리한지를 실무 관점에서 깊이 있게 설명합니다. 각 항목은 AMD 공식 문서(UG901/UG904/UG906)와 Tcl 명령 레퍼런스를 참고하여 작성되었습니다.
1) 전체 흐름과 핵심 개념
Vivado 구현 플로우는 Synthesis → opt_design → place_design → phys_opt_design → route_design → post-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 Strategies 및 Synthesis 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 | 세부/후처리 최적화 강도↑ | 범용 성능 향상 탐색 |
WLDrivenBlockPlacement | BRAM/DSP를 배선 길이 기준으로 배치 | 메모리/연산 허브 설계 |
EarlyBlockPlacement | RAM/DSP를 초기 앵커로 고정 | 하드블록 중심 배치 필요 |
ExtraNetDelay_high/low | 장거리/고팬아웃에 지연 가산(보수적 추정) | 배치 OK→라우팅 Fail 패턴 |
AltSpreadLogic_(high/med/low) | 로직 확산으로 혼잡 완화 | 국부 혼잡/라우팅 실패 |
SSI_*(SpreadSLLs/BalanceSLLs/BalanceSLRs/HighUtilSLRs) | SLR 분산/균형/고유틸 대응 | SLR 횡단 경로 지배 설계 |
ExtraPostPlacementOpt | post-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-place와 post-route 모두 사용 가능하며, 전략에 따라 Explore
·AggressiveExplore
·AggressiveFanoutOpt
등으로 강도를 조절합니다.
5.4 opt/power 옵션
opt_design
: Control Set Merging/Reduction, Remap, Resynth 등 논리 최적화.power_opt_design
: Clock Gating/CE 활용/인텔리전트 게이팅. 전력 목표 시 Power_* 전략과 병행.
5.5 RQS(Report QoR Suggestions) 전략 연동
place_design
의 RQS
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/연산 파이프라인)
- Synth: Flow_PerfOptimized_high (또는 기본 +
-resource_sharing off
,-retiming
검토) - Impl: Performance_Explore → 근접 시 ExplorePostRoutePhysOpt
- 보정:
route_design -directive NoTimingRelaxation
,-tns_cleanup
, post-routephys_opt_design
- 메모: DSP 캐스케이드/프리애더 속성(
USE_DSP
등)과 타겟 Fmax에 맞춘 파이프라이닝 단계.
7.2 메모리/NoC 허브형(넓은 버스, BRAM/URAM 집중)
- Synth: 기본 또는 면적/성능 균형.
- Impl: Performance_WLBlockPlacement(필요시 FanoutOpt) +
place_design -directive EarlyBlockPlacement
검토 - 보정: 라우팅은 AlternateCLBRouting 또는 Explore.
- 메모: 포트 바이트-스와즐/버스 대칭/층간 슬라이스 균형을 위한 Floorplan 함께 적용.
7.3 초고유틸(>80%)·혼잡 지배
- Synth:
-no_lc
고려, SRL 추출 억제(-no_srlextract
또는SHREG_EXTRACT=NO
)로 로컬 혼잡 완화. - Impl: Congestion_SpreadLogic_(high/med/low), UltraScale 계열은 AlternateCLBRouting
- 보정:
ExtraNetDelay_high
로 배치 단계의 낙관적 지연 추정을 교정.
7.4 SSI/SLR 횡단 지배
- Synth: 계층 유지보다
rebuilt
평탄화가 유리한 경우 다수. - Impl: Performance_SpreadSLL / BalanceSLL / BalanceSLRs / HighUtilSLRs
- 보정: SLR 크로싱 경로를 Path Group으로 묶고(타이밍 그룹) 파이프라인 보강.
7.5 저전력 우선
- Synth: 공유/게이팅 적극 활용, Flow_AreaOptimized_* + Power 조합.
- Impl: Power_DefaultOpt 또는 Power_ExploreArea로
power_opt_design
활성. - 보정: CE 기반 게이팅,
report_power
로 효과 검증.
7.6 빠른 반복/프로토타이핑
- Synth: Flow_RuntimeOptimized
- Impl: Flow_Quick (또는 RuntimeOptimized)
- 보정: 병목 구간만 부분 적용/부분 합성(OOC) 병행.
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) 타이밍 클로저 체크리스트 & 디버깅 절차
- XDC 검증:
report_timing_summary
,report_clock_interaction
,report_exceptions
로 제약 이상 확인. - 병목 분류: 경로 타입(DSP/BRAM/SLR/장거리/고팬아웃) → 혼잡/밀도 → 제약 품질.
- 전략 선택: 성능/혼잡/전력/런타임 우선순위에 맞춰 7장 조합 적용.
- RQS 적용:
report_qor_suggestions
→read_qor_suggestions
→ 반복. - 증분/재현성: 좋은 DCP를 기준으로
read_checkpoint -incremental
고려. - 미세조정:
phys_opt_design
의 Fanout/Interconnect/Hold-fix 등 패스 선택적 강화.
라우터 -tns_cleanup
은 WNS에 영향 없이 TNS 개선에 유용. 포스트라우트 phys_opt_design
과 궁합이 좋습니다.
9) 버전/디바이스 주의사항
- 전략/Directive 명칭은 릴리즈마다 소폭 변화. 빌드 로그 또는 “Listing the Strategies/Directives for a Release” 섹션으로 확인.
- Versal:
place_design
에서 NoC Compiler, VTree 옵션 등 Versal 전용 스위치 존재. 문서의 Versal 전용 챕터를 참고. - UltraScale 계열:
AlternateCLBRouting
은 혼잡 해소에 유용(라우터 런타임↑ 가능).
10) 참고 문헌 (AMD 공식)
- UG901 — Vivado Design Suite User Guide: Synthesis (2025.1) — Preconfigured Strategies 표, Synthesis Attributes.
- UG904 — Vivado Design Suite User Guide: Implementation (2025.1) — Implementation Strategy 설명, Placer/Router/Phys Opt Directives, RQS/Incremental.
- UG904 — Implementation Strategy Descriptions, Available Directives, Directives Mapping, route_design Tcl 레퍼런스.
- UG906 — Design Analysis and Closure Techniques (2025.1) — report_qor_suggestions, 타이밍/혼잡 분석.