버퍼를 하나 더 넣었는데 경로가 빨라지는 조건
많은 부하를 구동하는 신호에 버퍼를 추가하면 왜 빨라질까? 셀이 하나 더 들어가는데도 지연이 줄 수 있는 이유는 원래 드라이버가 감당하던 부하를 나누기 때문이다. Buffer insertion의 효과를 평가하려면 추가한 셀의 지연과 줄어든 부하 비용을 함께 계산해야 한다. 개선한 경로 바깥에서 바뀐 최소 지연도 확인할 필요가 있다.
드라이버가 직접 보는 부하를 바꾼다
원래 드라이버가 큰 부하 C를 직접 구동했다면, 버퍼를 넣은 뒤에는 주로 버퍼 입력과 앞쪽 배선의 부하를 구동한다. 버퍼는 뒤쪽 부하를 담당한다. 추가 버퍼가 충분히 강하고 적절한 위치에 있으면 원래 드라이버의 부하 감소가 셀 추가 비용보다 클 수 있다.
MIT의 배선 강의는 드라이버 저항과 부하 정전용량의 곱으로 지연을 근사하고, 배선의 분포 저항·정전용량을 함께 고려하는 모델도 설명한다. 이 RC 계산은 지연의 경향을 이해하기 위한 근사이며 정확한 파형의 특정 전압 도달 시간을 언제나 그대로 반환하는 식은 아니다. MIT 6.884 Wires, 11–13쪽
단순한 가상 부하에서 원래 드라이버의 등가 저항을 1kΩ, 부하를 100fF로 놓자. 배선의 별도 저항은 생략하고 지연 대용값 = RC로 정의하면 100ps다. 버퍼 입력은 5fF, 버퍼의 고유 지연은 20ps, 출력 저항은 100Ω이라고 가정한다. 버퍼를 넣은 대용값은 다음과 같다.
원래 드라이버 → 버퍼 입력: 1kΩ × 5fF = 5ps
버퍼 고유 지연: 20ps
버퍼 → 뒤쪽 부하: 100Ω × 100fF = 10ps
합계: 35ps
셀 하나가 늘었어도 100에서 35로 줄었다. 반대로 뒤쪽 부하가 5fF뿐이었다면 원래 값은 5ps이고 버퍼를 넣은 값은 5 + 20 + 0.5 = 25.5ps다. 작은 부하에서는 셀 추가 비용이 더 크다. 이 예제는 실제 라이브러리나 배치 결과가 아니라 정한 근사 모델의 비교다.
Fanout 개수만으로 부하를 알 수 없다
같은 수의 입력 핀을 연결해도 각 핀의 정전용량과 배선 길이가 다르면 부하는 다르다. 여러 부하를 한 버퍼가 맡을지, 분기마다 버퍼를 둘지에 따라서도 앞 드라이버가 보는 부하와 각 목적지의 경로가 바뀐다. 긴 배선을 분할하려면 위치와 배선의 RC도 중요하다.
OpenROAD의 repair_design은 최대 slew·정전용량·fanout 위반과 긴 배선의 RC 지연을 다루기 위해 버퍼를 넣고 셀 크기를 조정한다고 설명한다. 목적을 fanout 숫자 줄이기 하나로 한정해서 읽으면 어떤 net에 버퍼가 들어갔는지 이해하기 어렵다. OpenROAD Repair Design
또한 버퍼의 입력 slew와 뒤쪽 부하에 따라 고유 지연과 출력 파형도 달라진다. 위 예제처럼 20ps를 모든 경우에 고정하는 계산은 실제 라이브러리 평가를 대신하지 못한다. 삽입 위치가 이동하거나 배선이 우회하면 예상한 부하 분할도 달라질 수 있다.
빠르게 만든 분기가 hold에는 불리할 수 있다
Setup의 개선과 최소 지연의 변화를 보기 위해 별도의 가상 분기 경로를 놓자. 한 드라이버에서 먼 목적지와 가까운 목적지로 나뉘고, 먼 분기에 버퍼를 넣어 공통 드라이버의 부하도 줄어든다고 가정한다. 실제 셀 모델에서 계산한 결과라는 주장은 하지 않고, 경로 변화의 타이밍 의미를 확인할 숫자를 다음처럼 정한다.
먼 목적지의 최대 도착은 90ps에서 70ps로, 가까운 목적지의 최소 도착은 30ps에서 15ps로 바뀐다. 두 값에는 각 경로의 출발 지연이 포함되고, 요구 시간의 클록 관계는 변경되지 않았다고 하자. 먼 목적지의 setup 요구가 80ps라면 slack은 −10에서 +10ps로 개선된다. 가까운 목적지의 hold 요구가 20ps라면 slack은 도착에서 요구를 빼므로 +10에서 −5ps로 나빠진다.
버퍼가 있는 먼 경로를 개선한 동안, 버퍼를 지나지 않는 가까운 분기의 데이터도 공통 부하 감소로 더 빨리 올 수 있다는 조건이다. 실제 개선량은 회로와 분석 코너에서 확인해야 한다. 이 가상 숫자는 앞의 단일 부하 RC 예제에서 유도한 값이 아니다.
OpenROAD도 타이밍 개선에서 setup을 먼저 다루고 hold를 다음에 다루는 순서를 설명한다. 어느 한쪽을 고친 뒤 다른 검사가 그대로일 것이라고 가정하지 않는 접근이다. Repair Timing의 순서
삽입 전후에는 같은 조건으로 전체 분기를 읽는다
버퍼 수나 가장 나쁜 setup 경로 하나만 비교하기보다 변경된 net의 분기들이 어떤 부하를 보게 되었는지 확인하면 좋다. 각 목적지의 최대·최소 도착, slew와 부하를 같은 코너 및 클록 조건에서 비교한다. 추가 셀의 면적과 전력, 합법 배치 공간도 비용이다. 배치 기반 기생 성분은 최종 배선 기생 성분과 다를 수 있으므로 최종 결과에서 확인해야 한다.
Buffer insertion은 추가한 셀보다 더 큰 부하 비용을 줄일 때 효과가 있다. 효과적인 삽입 위치와 구동력은 그 균형으로 정하고, 바뀐 모든 분기의 시간 조건으로 검증한다. 셀이 늘었다는 사실도, 한 경로가 빨라졌다는 사실도 혼자서는 삽입의 성공을 결정하지 않는다.