RISC-V SoC: 블록에서 칩으로에서는 RISC-V 코어를 중심으로 실제 칩을 만들었습니다. 패드 58개가 링을 이루어 lowRISC의 Ibex demo system을 둘러싸고, 시리즈 1의 코어가 하드 매크로로 들어가 있습니다. 그 칩은 와이어 본드 방식으로, 가장자리의 패드를 통해 패키지와 연결됩니다. 이번 시리즈에서는 같은 칩이 보드와 만나는 방식을 바꿉니다. 가장자리의 패드에서, 칩 표면의 범프로.
패드 링을 없애고, IO 셀을 칩 안으로 옮겨 각자의 범프 아래에 두고(에어리어 IO), 전원은 코어 전체에 놓인 범프로 들어오게 합니다. 그리고 플립칩과 와이어 본드 칩을 면적, 전원 그리드, IR 드롭, IO 타이밍, 코어 타이밍으로 비교합니다. 그중 숫자 하나는 보기보다 믿을 만하지 않았습니다.
이 글은 동영상 8편의 글 버전입니다. 모든 파일은 G2_demo_sky130 프로젝트에 있습니다.
| 출발점 | RISC-V SoC: 블록에서 칩으로의 와이어 본드 칩: 1.8 mm 다이, 패드 58개, sky130 |
| 변경 | 패드 링 없음: 에어리어 IO 셀 58개를 각자의 범프 아래에, 코어 위에 7 × 7 전원 범프 |
| 도구 | G2의 OpenROAD, OpenRCX, OpenSTA, 그리고 대체 재배선층 |
| 면적 | 한 변 1.8 → 1.5 mm: −31 % |
| 타이밍 | 홀드 충족. 코어 경계 셋업 −1.61 ns(와이어 본드는 −1.45 ns), 같은 코어 예산 |
1부: 왜, 그리고 무엇이 필요한가
#1왜 플립칩인가?
1:39YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
시리즈 2의 칩은 1.8 mm 정사각형이고, 1.3 mm 코어를 패드 58개가 둘러쌉니다. 패드 링이 다이의 절반 정도를 차지합니다. 크기를 정하는 것은 로직이 아니라 패드이고, 이 칩은 패드 제한입니다. 게다가 코어 전류는 모두 전원 패드 두 개로 들어와 링을 돌아서 갑니다.

와이어 본드 칩은 가장자리의 와이어로 패키지와 통신합니다. 플립칩은 칩을 뒤집어 앞면을 아래로 향하게 해서 솔더 범프 위에 올리고, 재배선층(RDL)이 범프와 회로를 잇습니다. 방법은 두 가지입니다. 기존 패드 링 위에 범프를 놓으면 링도 면적도 그대로입니다. 아니면 IO 셀을 칩 안, 범프 아래로 옮깁니다. 이것이 에어리어 IO이고, 우리가 만들 방식입니다.
#2메탈 5 위의 층
1:13YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
범프는 어디에 둘까요? 메탈 5는 칩의 전원 그리드가 씁니다. 메탈 4는 하드 코어의 몫입니다. 시리즈 2에서 칩이 최상층을 가질 수 있도록 코어가 메탈 5를 쓰지 않게 했습니다. 그래서 범프에는 메탈 5 위에 전용 층이 필요합니다.

작은 스크립트 gen_rdl_tech.py가 sky130 테크놀로지 LEF의 사본에 이를 추가합니다. 메탈 5에서 위로 올라가는 via5, rdl이라는 10 µm 두께의 층, 그리고 그 사이의 비아 셀 M5RDL입니다. 원래 sky130 파일은 건드리지 않습니다. 범프는 rdl 위의 60 µm 팔각형이고 핀은 하나입니다. 새 층에는 RC 파일에도 저항값이 필요합니다. IR 분석은 LEF가 아니라 여기서 저항을 읽기 때문에, 없으면 실패합니다. OpenROAD가 읽으면 15층입니다.
#3에어리어 IO 셀
1:03YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
시리즈 2의 IO 셀은 80 × 198 µm이고, 전원은 양쪽 가장자리의 가는 핀입니다. 다른 IO 셀과 나란히 링을 이뤄야만 쓸 수 있습니다.
그래서 같은 셀에 두 번째 물리 뷰를 만듭니다. 이름과 신호 핀이 같으므로 넷리스트와 타이밍 라이브러리는 바뀌지 않습니다. 하지만 어디에나 놓을 수 있는 작은 블록이 됩니다. 50 × 40 µm, 범프 핀은 rdl 위, 코어 전원은 메탈 4 레일이어서 칩의 전원 그리드가 다른 매크로처럼 연결할 수 있습니다.

모델링하지 않은 것은 3.3 V IO 전원과 패드의 아날로그 부분입니다. 실제 에어리어 IO 라이브러리에는 이것이 있지만, 우리 것은 대체품입니다. 사인오프 추출용으로 범프 핀을 메탈 2 스터브에 둔 버전도 생성합니다.
2부: 플립칩 플로어플랜
#4패드 링 없는 빌드
1:04YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
플립칩은 와이어 본드 칩 옆에 만드는 새 빌드 v02로, 넷리스트와 제약 조건은 같습니다. 설계 변수가 바뀝니다. 다이는 1.8 mm에서 1.5 mm로, 대체 테크놀로지, 범프, 그리고 링 셀 대신 에어리어 IO 셀입니다. 이제 모든 단계가 이 변수들을 읽으므로, 모든 단계에서 새 층이 보입니다.
플로어플랜에는 훅이 두 개 추가됩니다. 매크로 배치 전에 에어리어 IO, 전원 그리드 후에 범프입니다. 패드 링 스크립트는 없어졌고, 코어 링도 더 이상 패드를 찾지 않습니다. init은 몇 초면 끝나고, 로그에는 15층과 새 IO 뷰가 표시됩니다.
#5범프 아래의 IO
1:33YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
각 IO 셀을 칩 안 가장자리 근처에, 기존 링과 같은 순서로 놓습니다. 범프가 들어갈 수 있도록 한 변에 두 줄을 엇갈리게 배치합니다. 그리고 각 IO 셀의 범프 핀 바로 위에 범프를 놓습니다. 겹쳐 있으니 연결되고, 신호 배선이 필요 없습니다. 범프 간격은 같은 줄에서 140 µm, 줄 사이는 최소 92 µm입니다.
플로어플랜은 약 2분 걸립니다. 로그에는 IO 셀 58개와 IO 범프 58개가 배치되었고, 매크로 플레이서가 IO 셀 58개를 고정 매크로로 인식해 피해서 배치합니다. 칩의 매크로는 64개이고 그중 58개가 IO 셀이며, 다이 폭은 1,500 µm입니다.


3부: 전원과 IR 드롭
#6전원 범프와 IR 드롭
2:05YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
전원 범프는 코어 위에 7 × 7 격자로 놓이고, 전원과 접지가 번갈아 있습니다. 각 범프 아래에는 비아 어레이가 있어 같은 넷의 메탈 5 스트랩으로 내려갑니다. 전원 범프 25개, 접지 범프 24개, 비아는 약 450개입니다.
이제 전원과 접지가 실제 칩 포트가 되었으므로 전원 그리드 검사를 둘 다 할 수 있고, 둘 다 완전히 연결되어 있습니다. 와이어 본드 칩은 전원 포트가 없어서 이런 검사조차 할 수 없었습니다.
배치 시점에 전원 범프 25개를 기준으로 분석한 IR 드롭은 평균 약 0.5 mV(0.475 mV), 최악 지점 3.13 mV입니다. 와이어 본드 칩은 어떨까요? 로그에는 64 µV라고 나옵니다. 바로 윗줄이 이유를 보여 줍니다. 전원 포트가 없어서 도구가 범프 패턴을 임의로 만든 것입니다. 이 숫자는 처음부터 실제가 아니었습니다.
그래서 와이어 본드 칩의 전원이 실제로 어디서 들어오는지 도구에 알려 줍니다. 코어 전원 패드 두 개입니다. 패드마다 한 줄로 코어 링 위의 위치, 크기, 전압을 지정합니다. 같은 두 위치를 두 가지로 모델링했습니다.
| 와이어 본드 전원 입구 | 평균 | 최악 |
|---|---|---|
| 전원 패드마다 10 µm 점 | 4.19 mV | 9.29 mV |
| 패드 가장자리 전체(75 µm) | 0.45 mV | 2.18 mV |
| 플립칩, 전원 범프 25개 | 0.475 mV | 3.13 mV |
10 µm 점으로 보면 플립칩이 아홉 배 좋아 보입니다. 패드 가장자리 전체로 보면 그 차이는 사라집니다.

결국 와이어 본드의 숫자는 주로 전류 입구를 어떻게 모델링했는지를 보여 줄 뿐입니다. 패드, 링, 본딩 와이어를 지나는 실제 경로는 두 모델 어디에도 없습니다. 이 칩의 전력에서는 어느 쪽이든 1.6 V 중 몇 mV입니다. 플립칩이 확실히 주는 것은 전원이 다이 전체의 25곳에서 들어온다는 점입니다. 전력이 커져도 유효하고, 전원과 접지를 모두 검사할 수 있습니다.
4부: 배치, 배선, 사인오프
#7배치, CTS, 배선
1:21YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
클록 트리와 첫 홀드 수정은 시리즈 2와 같고, 단계마다 1분이 안 걸립니다. 연습 때는 이것으로 부족했습니다. 배선 후 실제 배선 때문에 디버그 모듈의 홀드가 약 3분의 1 ns 줄었습니다(엔드포인트 39개에서 −0.330 ns).
그래서 배선 단계에 훅을 추가합니다. 글로벌 배선 직후, 배선된 와이어로 타이밍을 추정하고 홀드를 수정한 다음 상세 배선을 합니다. 홀드만 수정합니다. 연습 때 이 시점에 셋업을 수정하자 출력 패드의 잘못된 추정을 쫓다가 상세 배선이 망가졌습니다.
배선은 약 13분입니다. 로그에는 홀드 엔드포인트 97개, 버퍼 31개가 나오고, 최악 홀드는 −0.539 ns에서 +0.101 ns가 됩니다. 포스트 라우트는 약 30분, 피니시는 3분이 걸리고 DRC 위반 8개가 남습니다. 데모이지 테이프아웃이 아닙니다. 피니시에서 빨갛게 표시되는 출력 패드 숫자는 이 단계의 와이어 본드 칩과 같으며, 사인오프에서 이 경로들을 제대로 확인합니다.

#8사인오프와 결론
2:17YouTube에서 보기(영어) ↗Bilibili에서 보기(중국어) ↗
사인오프는 추출에서 시작하는데, OpenRCX가 대체 층에서 크래시했습니다. 더 나쁜 것은 단계가 여전히 오류 0개로 표시되었다는 점입니다. 이는 G2의 버그 목록에 올라 있습니다. 이 설계에서 신호는 RDL 층을 전혀 지나지 않으므로, 다이만 따로 추출합니다. 메모리에서 범프와 RDL 도형을 지우고 원래 sky130 파일로 추출합니다. 범프는 패키지 모델의 몫입니다. 이렇게 하면 4개 코너 추출이 1분도 안 걸립니다.
OpenSTA는 와이어 본드 칩과 같은 스크립트로, 저속 코너와 고속 코너를 각각 약 15초에 분석합니다. 홀드는 충족합니다. 셋업은 엔드포인트 226개에서 1.61 ns 부족하며, 디버그 모듈의 메모리로 가는 경로입니다. 시리즈 2와 같은 코어 경계 경로입니다.
같은 IO 경로 스크립트를 두 칩에서 실행해 포트별 슬랙과 경로 중 코어 내부 부분을 출력합니다. 입력은 플립칩에서 약 2 ns 좋아졌습니다. 출력은 2~2.5 ns 나빠졌는데, 모두 코어 내부, 패드 셀 앞의 클록과 로직 부분이지 패드가 아닙니다. 원인은 아직 분리하지 못했습니다. 모든 IO 경로에는 여전히 10 ns 이상의 슬랙이 있습니다.

결론, 그리고 남은 것
- 면적: 31 % 감소, 한 변 1.8 mm에서 1.5 mm로.
- 전원 그리드: 전원과 접지 모두 검사 가능하고, 전원이 다이 전체의 25곳에서 들어옵니다.
- IR 드롭: 이 전력에서는 어느 쪽이든 몇 mV이며, 와이어 본드 숫자는 모델링 방법에 따라 달라집니다.
- IO 타이밍: 모든 IO 경로에 10 ns 이상의 슬랙. 출력은 코어 내부에서 약 2 ns 느립니다.
- 코어 타이밍: 이전과 같은 예산.
이 시리즈에서 하지 않은 것: 뷰는 대체품이며 DRC, LVS, GDS가 없습니다. 3.3 V IO 전원은 모델링하지 않았습니다. 범프와 RDL의 기생 성분은 추출하지 않았습니다. 코어 셋업 과제는 그대로이고, DRC 위반 8개가 남아 있습니다.
시청하고 직접 해 보기
- 동영상: YouTube 재생목록(영어)과 Bilibili 컬렉션(중국어).
- 이 시리즈가 출발하는 와이어 본드 칩: RISC-V SoC: 블록에서 칩으로.
- 프로젝트: G2_demo_sky130. G2는 무료 Community Edition으로 사용할 수 있습니다.
- G2나 직접 흐름을 실행하는 것에 관한 질문: support@deepdataflow.com. 라이선스와 협업: sales@deepdataflow.com.
