KLayout 으로 NSPL의 GPIO 패드 셀 수동 교체
주] 최신 디자인 킷 사용할 것
NSPL의 디자인 킷에서 제공된 GPIO 셀들을 Magic의 레이아웃 관리 체계로 불러들여 사용 해왔으나 아날로그 패드의 경우 이를 맞추는데 어려움이 발생 하였다(디지털 패드의 경우 몇번의 오류 끝에 실리콘 작동을 확인 하였으나 아날로 패드는 아직 검증되지 않았다.). 아날로그 셀의 경우 레이어 자동 생성 규칙이 일반 MOS 트랜지스터와 상이하기 때문이다. 예를 들어 다이오드의 경우 NSD와 PSD를 인접하여 놓고 만드는데, Magic의 MOS 트랜지스터 규칙은 디퓨젼을 그려놓으면 이를 ACTIVE 레이어로 인정하고 확장된 디퓨젼과 웰 레이어를 자동 생성 또는 삭제한다(이 자동 생성 룰은 레이아웃 툴마다 상이하다). 이는 디지털 MOS 트랜지스터를 기준으로 정한 규칙이므로 아날로그 영역임을 지정하고 자동 확장 생성 규칙에서 예외 시켜야 한다. 그렇지 않을 경우 웰 레이어를 자동으로 깔기 때문에 문제가 발생한다.
Magic의 MOS 트랜지스터의 레이어 생성 규칙을 잠시 들여다보자. 디퓨젼을 그려 놓으면 자동으로 바닥에 웰을 확장하여 깐다. 예를 들어 p-diff을 그리면 아래에 psub-diff와 n-well을 자동으로 확장하여 깐다. 그려놓은 p-diff는 실제로 Active 레이어가 되며 이를 확장하여 psub-diff 레이어와 그보다 더 확장한 n-well를 자동 생성한다. 자동으로 깔리는 n-well 위에는 n-diff 가 올 수 없다. 하지만 n-tab 과 p-tab 은 웰 위에 동일한 디퓨젼을 놓는(n-well 위에 n-diff)다. 이경우를 대비하여 디퓨젼(ndiff, pdiff)과 섭스트레이트(nsubdiff, psubdiff) 레이어를 구분하여 놓고 있다. 실제로 마스크 제작용 GDS 를 생성 할 때는 디퓨젼과 섭스트레이트는 각각 PSD, NSD로 합쳐진다.


[관련글] https://fun-teaching-goodkook.blogspot.com/2024/07/vlsi-3-magic-cmos-lvs.html
이 레이어 사용 규칙은 레이아웃 도구마다 상이하여 GDS 간 내보내기나 불러오기에 신중해야 한다. NSPL에서 제공한 GDS에서 레이어 사용 규칙이 난해한 부분이 있는데 특정 레이아웃 도구에 맞춰져 있는 탓이다.
NSPL의 GPIO 셀의 GDS를 살펴보면 n-well 위에 n-diff 가 필요하면 반드시 nsub-diff 레이어를 지정해야 하는데 이에 대한 부분이 혼재되어 있다. 사용한 레이아웃 도구에서는 문제되지 않는 모양이다. 만일 n-well 위에 n-diff 가 놓인 경우 Magic의 들여오기 룰은 불러오기를 실패하거나 n-diff를 p-diff로 변경하는 오류를 잃으킨다.
NSPL 디자인 룰 북의 2.1절에 나와있는 레이어가 실제 마스크 제작용이며 나머지 레이어들은 설계 툴의 참조용 레이어다. 2.2절의 레이어들은 DRC, LVS, TEXT 레이어 다. 이렇게 상이한 레이어 들의 호환성을 맞추기는 쉽지 않다.
[참조] 반도체 공정용 도면, 레이아웃의 양식은 다양하다. 전통적으로 CIF와 GDS 양식이 사용되었으나 보안에 취약하여 설계 도구 회사들은 저마다 양식을 써왔다. 최근 혼란을 피하기 위해 oa(open-access[link], 상용 EDA 연합체에서 제정[Sillicon Integration Initiative, Si2])와 oas(OASIS[link], 오픈-소스)가 제안되고 사용중이다.
현재 디자인 킷의 Magic 테크 파일에 아날로그 셀 부분이 미비되어 있어서 당분간 Magic으로 생성된 GDS는 KLayout 툴을 이용해 수동으로 GPIO 셀 교체 작업을 수행하기로 한다. 디지털 패드는 괜찮지만 기왕 수동 교체하기로 한 만큼 모두 적용한다. 디자인 킷이 어느정도 실리콘으로 작동하는 것이 확인 되었으나 여전히 추가할 일이 많이 남아있다.
1. Makefile 로 Top.gds 생성:
$ cd ~/ETRI050_DesignKit/Tutorials/2-7_Lab5_FIR_PE/chip_top
$ make extract_pad
$ make extract_pin_route
$ make generate_gds
2. klayout 을 편집 가능하게 설정
- File > setup 을 순서대소 선택하여 설정창 열기
- 'Use editing mode by default' 선택 후 'Apply' > 'Ok'
(klayout 을 재실행 해야 할 수도 있음)

3. 디자인 탑 GDS 읽기
- <design_name>_Top_F.gds 는 flat 된 것이므로 반드시 hierarchy GDS 을 읽을 것
- Layers 가 이름이 아닌 번호로 나올경우 Fiile > Load layer properties 로 'ETRI050_CMOS.lyp' 를 읽으면 레이어가 이름으로 바뀜

4. NSPL의 GPIO GDS 읽기
- 메뉴: File > Open in New Panel 선택 후,
~/ETRI050_DesignKit/pads_ETRI/GDS/ETRI_NSPL_GPIO_231208.gds 를 새 패널(New Panel)에서 읽기

4. NSPL의 GPIO 셀 복사
- 디자인에서 사용한 GPIO 하위 셀들을 확인
- 셀의 목록을 계층적으로 보여주는 Cells 창이 안보일 경우,
메뉴: View > Restore Window

- NSPL의 GPIO 셀 중 디자인에서 사용된 셀 복사
(Cells 창에서 마우스 오른쪽 버튼으로 플로팅 메뉴 사용)

6. GPIO 셀 붙여넣기
- 복사한 GPIO 셀들을 디자인 탑 gds 패널의 Cells 에 붙여 넣기

- 동일한 이름의 하위셀들이 있으므로 붙여넣은 셀의 이름 끝에 $1이 붙음
(Cells의 메뉴 중 Show As New Top을 선택하여 나열된 셀 중 디자인 탑을 최상위 셀을 지정)
7. GPIO 셀 대체 및 셀 이름 변경
- 디자인 탑 셀의 하위 셀 중 복사해온 셀로 대체(Replace Cell)


- 디자인 탑의 하위 셀들이 변경된 후 셀 이름에 $1이 붙어 있는데 보기 싫으므로 변경
8. 디자인 탑 GDS 저장
- 메뉴 : File > Save As 선택하여 gds 저장
[주의] Flat된 gds로는 통으로 셀 교체가 불가능 하므로 반드시 Hierarchcal GDS 사용할것
[숙제] Hierarchcal GDS 는 파일 크기도 작고 관리도 편해 보이는데 Core는 굳이 Flat하게 만드는 이유를 알아보자.