출력 지연의 음수 min을 실제 hold 시간으로 읽기
칩 내부의 모든 경로가 주기를 만족해도 다른 칩과 연결하면 오류가 날 수 있다. 입력은 클록 에지와 동시에 핀에 나타나지 않고, 출력은 핀을 떠난 뒤에도 배선을 지나 상대 장치의 setup·hold 요구를 만족해야 한다. I/O delay는 이 외부 시간을 내부 타이밍 분석에 가져온다.
입력 핀에서 출발할 때도 이미 시간을 썼다
주기 10ns인 가상 인터페이스를 보자. 외부 장치와 내부 클록은 같은 위상의 기준 에지를 사용하고, 클록 배선 차이와 불확실성은 계산에서 생략한다. 외부 장치의 최대 clk-to-Q가 1.2ns, 최대 데이터 배선 지연이 0.8ns라면 입력 핀의 늦은 도착은 기준 에지 뒤 2ns다. 최소 값이 각각 0.2ns라면 이른 도착은 0.4ns다.
입력 핀부터 내부 목적 레지스터까지의 최대 지연이 6ns, 목적 setup이 0.5ns라면 총 도착은 8ns이고 필요한 시각은 9.5ns다. setup slack은 +1.5ns다. 입력 도착을 0ns로 놓으면 +3.5ns로 보이므로, 칩 밖에서 쓴 2ns만큼 내부 여유를 과대평가한다.
hold에서는 빠른 데이터가 문제다. 내부 최소 지연이 0.2ns, 목적 hold가 0.1ns라면 새 데이터의 이른 도착은 0.4 + 0.2 = 0.6ns여서 +0.5ns의 hold slack을 갖는다. 최대 도착 2ns를 최소 분석에도 쓰면 이른 변화에 대한 실제 요구를 제대로 검사하지 못한다. OpenSTA의 입력 지연 명령은 -max를 setup, -min을 hold 분석에 적용한다. 입력 지연의 분석 기준
물리 핀에 붙이지 않은 virtual clock을 외부 인터페이스의 기준으로 둘 수도 있다. 아래는 ns 단위와 위의 같은 위상 가정에 따른 예다.
create_clock -name core -period 10 [get_ports clk]
create_clock -name iface -period 10
set_input_delay -clock iface -max 2.0 [get_ports data_in]
set_input_delay -clock iface -min 0.4 [get_ports data_in]
virtual clock은 외부 기준을 표현하는 모델이며 새 하드웨어 클록을 만들지 않는다. core와 iface 사이의 실제 위상·지연 관계를 위 가정처럼 맞춰야 한다. 두 클록의 이름이 비슷하다는 이유로 동일한 기준이 되지는 않는다.
출력의 min에는 음수가 들어갈 수 있다
같은 기준 에지로 데이터를 받는 상대 장치의 setup이 1ns, 출력 핀 이후 배선의 최대 지연이 0.8ns라고 하자. 출력의 max 제약은 1.8ns다. 다음 기준 에지인 10ns에 상대가 받으려면 내부 출력은 늦어도 10 − 1.8 = 8.2ns에 핀에 도착해야 한다. 내부 출발 clk-to-Q부터 핀까지 최대 시간이 7.6ns라면 slack은 +0.6ns다.
hold 부호는 조금 덜 직관적이다. 상대 hold가 0.7ns, 출력 배선 최소 지연이 0.2ns라면 상대 입력은 현재 기준 에지 뒤 0.7ns까지 이전 데이터를 유지해야 한다. 배선이 0.2ns를 벌어 주므로 출력 핀에서 새 데이터가 나타나는 시각은 최소 0.5ns 뒤여야 한다.
이 조건을 출력 지연으로 적으면 min = 배선 최소 지연 − 상대 hold = 0.2 − 0.7 = −0.5ns다. 물리 배선의 지연이 음수라는 뜻이 아니다. 분석에 전달한 외부 요구의 부호다. AMD 원 문서는 클록 배선 차이까지 포함한 출력 max/min 식과 음수 min이 내부 최소 지연 요구를 만드는 예제를 제공한다. 출력 지연과 음수 min의 의미
set_output_delay -clock iface -max 1.8 [get_ports data_out]
set_output_delay -clock iface -min -0.5 [get_ports data_out]
내부의 새 데이터가 핀에 0.3ns 만에 나타난다고 하자. 상대까지는 0.5ns에 도착해 0.7ns의 hold를 0.2ns 부족하게 만족한다. 핀에서 계산해도 0.3 − 0.5 = −0.2ns다. 출력 max를 만족했다고 빠른 쪽 문제까지 해결된 것은 아니다.
인터페이스 명세의 기준점을 제약으로 옮기기
실제 보드에서는 두 장치에 도착하는 클록 지연의 차이도 들어간다. 외부 데이터시트 값이 어느 핀과 어느 에지를 기준으로 하는지, 데이터 배선의 min/max가 어느 구간인지부터 맞춘다. 이미 입력 수치에 포함한 지연을 클록 latency에도 다시 더하지 않도록 기준점을 기록해야 한다.
상승과 하강에서 모두 데이터를 받거나 여러 외부 클록이 같은 포트에 관계하면 각 에지와 추가 지연 조건을 따로 표현한다. 인터페이스 변경 뒤에는 명령이 실제 포트에 적용됐는지와 제약이 없는 입출력이 남았는지도 확인한다. 여기의 수치는 가상 예산 계산이며 특정 장치나 보드의 측정값이 아니다.
내부 경로의 성공은 외부 시간이 포함돼야 인터페이스의 성공으로 이어진다. I/O delay에서 max는 늦은 도착의 예산을, min은 너무 이른 변화의 한계를 가져온다. 출력 min의 −0.5ns를 핀의 +0.5ns 요구로 풀어 읽을 수 있다면, 제약의 부호보다 실제 시간축을 기준으로 판단할 수 있다.