📌 𝐌𝐮𝐥𝐭𝐢𝐜𝐲𝐜𝐥𝐞 Path: Setup N만 늘리면 Hold가 과해질 수 있습니다
Multicycle path setup/hold edge relationships and `set_multicycle_path` scope

기능상 데이터가 3번째 clock edge에서만 캡처되는 경로라면, setup 분석의 capture edge를 3-cycle 관계로 옮길 수 있습니다. 하지만 set_multicycle_path 3 -setup은 setup만 바꾸지 않습니다. setup과 연결된 hold 관계도 함께 움직여 기본적으로 hold가 2-cycle 밀릴 수 있습니다.
같은 waveform의 동기 clock에서 3-cycle 경로를 의도했다면, 보통 다음처럼 setup과 hold를 한 쌍으로 지정합니다.
set_multicycle_path 3 -setup -from [get_pins u_src_reg/Q] -to [get_pins u_dst_reg/D]
set_multicycle_path 2 -hold -from [get_pins u_src_reg/Q] -to [get_pins u_dst_reg/D]
두 번째 명령은 hold check를 원래 edge 관계로 되돌립니다. 이를 빠뜨리면 실제 기능에는 필요 없는 hold 요구가 생겨 delay cell이 늘고, area와 power, congestion까지 악화될 수 있습니다.
이 제약은 기능을 만들어 주지 않습니다. source와 destination 사이에 중간 cycle의 유효 데이터 캡처가 없다는 설계 동작이 먼저 보장되어야 합니다. 타이밍 예외는 그 동작을 분석기에 설명하는 설정입니다.
다른 period나 phase를 가진 synchronous clock 사이에서는 -start와 -end가 어느 clock edge를 옮기는지 달라집니다. 같은 N-1 패턴을 복사하지 말고, 실제 launch/capture waveform을 기준으로 계산하세요.
Signoff에서는 report_timing으로 launch/capture edge와 setup/hold 관계를 확인하고, report_exceptions로 적용 endpoint, 우선순위, 부분 override를 확인합니다. 모든 PVT/RC corner에서 같은 의도가 유지되는지도 점검해야 합니다.
핵심: multicycle setup은 hold waiver가 아닙니다. 기능 조건, path scope, hold edge까지 한 세트로 검증하세요.
출처:
• AMD Vivado 2026.1 UG835, set_multicycle_path: https://docs.amd.com/r/en-US/ug835-vivado-tcl-commands/set_multicycle_path
• AMD Vivado 2026.1 UG903, Setup=3 / Hold=2: https://docs.amd.com/r/en-US/ug903-vivado-using-constraints/Example-Setup-3-start/Hold-2
• AMD Vivado 2026.1 UG949, Adding Multicycle Path Constraints: https://docs.amd.com/r/en-US/ug949-vivado-design-methodology/Adding-Multicycle-Path-Constraints
• AMD Vivado 2023.1 UG906, Reporting timing exception interactions: https://docs.amd.com/r/2023.1-English/ug906-vivado-design-analysis/Example-Reporting-the-Timing-Exceptions-Affecting-the-Timing-Analysis