느린 신호 전이가 다음 셀의 지연까지 키우는 이유
배선 부하가 커져 첫 번째 셀이 느려졌다고 하자. 그 셀의 증가한 지연만 경로 합계에 더하면 충분할까? 출력 신호가 더 천천히 바뀌면 다음 셀도 다른 입력 조건을 받는다. Timing slew는 이 연결을 보여 주는 시간 값이다. 셀 지연을 회로도에 적힌 고정 숫자처럼 다루면, 한 단계의 변화가 다음 단계로 전달되는 효과를 놓친다.
에지가 도착한 시각과 에지가 바뀌는 데 걸린 시간
도착 시간은 신호가 분석 기준 전압을 통과하는 시각이다. Slew 또는 transition time은 정해진 두 전압 수준 사이를 이동하는 데 걸린 시간이다. 같은 기준점에 동시에 도착하더라도 어떤 파형은 빠르게, 다른 파형은 천천히 변할 수 있다. 따라서 arrival time만 같다고 다음 게이트에 같은 입력이 들어간다고 볼 수 없다.
전압 구간도 확인해야 한다. Slew를 항상 전원의 10%에서 90%까지의 시간이라고 외우면 라이브러리가 다른 기준을 사용할 때 문제가 생긴다. OpenSTA의 Liberty reader는 rise와 fall에 대해 입력·출력 지연 기준과 slew의 상한·하한 전압 속성을 따로 읽는다. 이 정의에 맞춰 라이브러리와 보고서를 해석해야 한다. LibertyReader.cc의 readThresholds
표의 두 축은 다음 셀까지 영향을 준다
일반적인 비선형 지연 표를 생각해 보자. 특정 입력 핀에서 출력 핀으로 전달되는 지연을 입력 slew와 출력 부하에 따라 저장한다. 출력 slew 역시 별도의 표로 계산한다. OpenSTA의 GateTableModel 구현은 입력 slew와 부하를 전달받아 gate delay와 출력 slew를 각각 구한다. 표 사이의 값을 계산하는 2차원 보간식도 구현에 들어 있다. TableModel.cc의 gateDelay와 findValueOrder2
원리를 보려고 실제 셀과 무관한 가상 표를 만들었다. 지연과 slew 단위는 ps, 부하는 fF다. 특정 전이와 핀 조합에 대한 셀 지연을 다음처럼 정의한다.
| 입력 slew | 부하 2fF | 부하 10fF |
|---|---|---|
| 20ps | 40ps | 80ps |
| 100ps | 100ps | 180ps |
입력 60ps, 부하 6fF는 두 축의 중간이다. 이 글의 표에 양선형 보간을 적용하면 네 모서리의 가중치가 모두 1/4가 되어 지연은 (40 + 80 + 100 + 180) / 4 = 100ps다. 입력 slew 한 축만 골라 평균하거나 부하만 보고 80ps를 쓰면 같은 값을 얻지 못한다. 실제 라이브러리는 더 많은 표 지점을 가질 수 있고, 축 순서와 지연 모델도 확인해야 한다.
여기에 출력 slew의 가상 표를 하나 더 놓자. 입력 20ps·부하 2fF에서 출력은 30ps, 입력 20ps·부하 10fF에서는 100ps라고 가정한다. 입력 100ps일 때는 각각 70ps와 180ps로 정한다. 지연 표의 숫자를 그대로 출력 slew로 쓰는 것이 아니라 별도의 특성값이다.
첫 셀의 나쁜 출력이 두 번째 셀의 입력이 된다
동일한 가상 셀 두 개를 연결하되, 첫 셀의 부하는 10fF, 두 번째는 2fF로 놓자. 첫 셀 입력 slew는 20ps다. 첫 지연은 80ps이고 출력 slew는 100ps다. 배선의 전파 지연과 파형 변화는 이 계산에서 생략하여 첫 출력 slew가 그대로 두 번째 입력에 도착한다고 가정한다.
두 번째 셀에는 이제 20ps가 아니라 100ps의 입력 slew를 넣어야 한다. 두 번째 지연은 100ps, 합계는 180ps다. 첫 셀 지연만 계산한 뒤 두 번째 입력을 처음과 같은 20ps로 고정하면 두 번째 지연을 40ps로 읽어 합계를 120ps로 과소평가한다. 차이 60ps는 셀 개수가 늘어서가 아니라 앞 셀의 출력 상태가 다음 셀의 동작을 바꾸어서 생겼다.
실제 배선에서는 분포 저항·정전용량과 수신 부하가 파형에 더 영향을 준다. 같은 총 정전용량이라도 배선의 저항과 분포가 다르면 수신 핀의 slew가 달라질 수 있다. 그러므로 위 예제처럼 wire delay를 생략한 두 셀 합계를 실제 배치·배선 결과로 옮겨 쓸 수는 없다. Rise와 fall, 입력 핀, 조건부 arc, 분석 코너도 같은 조건으로 비교해야 한다.
Slew 개선에도 원인을 따라가는 순서가 있다
나쁜 slew를 보자마자 드라이버를 크게 바꾸는 것이 항상 최선은 아니다. 더 큰 셀은 출력 구동을 강화하지만 앞 단계에 더 큰 입력 부하를 줄 수 있다. 부하를 나누거나 긴 배선을 분할하는 편이 효과적인 경우도 있다. OpenROAD는 repair_design에서 최대 slew·정전용량·fanout 위반에 버퍼를 넣고 셀 크기를 조정한다고 설명하며, 배치 기반 기생 성분이 최종 배선 기생 성분을 정확히 예측하지 못한다는 한계도 밝힌다. OpenROAD의 Repair Design
Slew 제한을 통과한 것과 setup·hold를 통과한 것도 각각 확인해야 한다. 제한은 모델과 설계 규칙의 허용 조건을 점검하고, slack은 해당 경로의 마감과 도착을 비교한다. 어느 하나의 통과가 다른 검사의 결과를 대신하지 않는다.
경로 지연을 제대로 이해하려면 각 셀의 지연 옆에 입력 slew와 출력 부하를 함께 읽으면 된다. 느려진 첫 셀의 비용은 그 셀에서 끝나지 않을 수 있다. 출력 파형을 다음 입력으로 전달해 계산할 때 비로소 경로 전체가 왜 느려졌는지, 어느 부하나 드라이버를 바꾸어야 하는지 설명할 수 있다.