2024년 1월 1일 월요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [10]/마스크용 GDS 생성



ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [10]

X. 마스크 GDS 생성
X-1. GDS 생성 절차
X-2. GDS 생성 스크립트
X-3. 최종 GDS

-----------------------------

X. 마스크용 GDS 생성

X-1. GDS 생성 절차

코어와 입출력 패드를 모두 배선한 Magic 레이아웃은 공정에 제출할 마스크 제작용이 아니다. 레이아웃을 제작하고 편집을 위한 도구용 파일이다. Magic의 레이아웃 편집 파일로부터 마스크 제작용 GDS를 생성하는 과정은 아래와 같다.

+-------------------------+
| Ext.Tools: |
| IO Pads(GDS-II) |
+-----------+-----+-------+
|
+-----------V-------------+ +--------------------------+
| Imported IO Pad Cells | | Std-Cells: Synthesis+P&R |
| IO Pad Frames(magic) | | Core(magic) |
+-----------------+-------+ +--------+-----------------+
| |
+----V--------------------V--------+
| Magic:Core-to-IP Pad Routing |
| Chip-Top |
+----+------------+------------+---+
| | |
[xPad.py] | [xPin_Route.py]
| | |
+----------V-----+ +---V------+ +-V------------+
| IO Pad Frames | | Core | | Pad Route |
+-------+--------+ +-------+--+ +---+----------+
........... | | |
/ {flatten} {flatten}
: | {cif ostyle lambda=0.30(ETRI)}
: | | |
: +----V-------------------V----------V----+
: | GDS generation |
: | (Via & Contact Cut) |
: +----+--------------+---------------+----+
: | | |
scripts/ { cif istyle lambda=0.30(ETRI-G) }
[generate_chip.sh] | | |
: | | |

: +----V--------------V---------------V-----+
: | GDS Merge & Flatten: |
: | Chip-Top |
: +-------------------+---------------------+
: |
: { flatten }
: { gds labels no }
: |
: +-------------------V---------------------+
: | Chip-Top (GDS) |
: +-------------------+---------------------+
\......................... |
V
Chip-Top.gds

다소 복잡해 보이지만 GDS 생성 과정은 대부분 설계라기 보다 파일 형식 변환의 과정이다. 최종 GDS 를 생성 하기전에에 서로 다른 도구와 조건으로 만들어진 세부분으로 분리한 후 각각 조건에 맞게 처리한다.

입출력 패드는 공급된 레이아웃이다. 외부 도구를 써서 완성된 GDS로부터 배선 편집을 위해 Magic 으로 들여왔다. 외부에서 들여온 패드 셀의 GDS 라이브러리에는 이미 비아 구멍이 뚫려 있다. 따라서 Magic으로 DRC를 수행 할 필요도 없고 (엄청나게 많은 에러를 내다가 끝내 죽는 참사가 나기 때문에) 수행하면 않된다.

코어는 Magic 으로 제작된 표준 셀을 가지고 만들어 졌으며 자체 DRC를 수행 했다. 다시 DRC 할 필요는 없다. 하지만 ETRI 공정 규칙에 맞도록 비아와 컨택 구멍을 생성(Via & Contact cut generation)해야 한다. GDS 생성시 이 규정을 적용하기 위해 출력 스타일을 lambda=0.30(ETRI)로 지정을 지정한다.

Magic으로 코어와 입출력 사이의 패드를 수동 배선 했다. DRC를 수행해줘야 하며 코어와 마찬가지로 ETRI 공정 규칙에 맞도록 비아와 컨택 구멍을 뚫도록 GDS/CIF 생성 스타일을 적용해야 한다.

각각 생성된 GDS를 모두 합친 후 평활화(flatten) 하고 편집에 사용했던 라벨들을 제거한다. 이미 비아의 구멍(cut)이 뚫린 상태 이므로 GDS/CIF 출력 스타일은 lambda=0.30(ETRI-G)를 적용하여 평활화된 GDS를 생성한다.
X-2. GDS 생성 스크립트

위의 최종 GDS 생성 과정을 보면 코어와 패드의 배선을 위한 편집 이후 평탄화와 GDS 생성이 반복된다. 검증된 스크립트를 만들어 줌으로써 반복적인 명령의 사용으로 인한 오류가 끼어들지 않도록 한다. 디자인 킷은 이를 위해 몇가지 스크립트를 제공한다. 스크립트의 사용법은 다음과 같다.


xPad.py

입출력 패드와 코어를 배선하기 위해 합쳤던 레이아웃에서 패드만 분리한다. 사용법은 다음과 같다.

$ xPad.py ALU_wrapper

ALU_wrapper_Top.mag에서 패드와 프레임 부분만 분리한 ALU_wrapper_Pad.mag 를 생성한다.



xPin_Route.py

코어와 입출력 패드 사이를 연결 했던 배선 부분만을 분리한다. 사용법은 다음과 같다.

$ xPin_Route.py ALU_wrapper

ALU_wrapper_Top.mag에서 패드와 프레임 부분만 분리한 ALU_wrapper_Pin_Route.mag 를 생성한다.



generate_chip.sh

코어 ALU_warapper_Core.mag, 패드 프레임 ALU_wrapper_Pad.mag 그리고 배선 ALU_wrapper_Pin_Route.mag 를 합친 후 최종 GDS를 생성한다.


$ generate_chip.sh
usage: generate_chip <core name> <route_x> <route_y> <core_x> <core_y>


쉘 스크립트의 인수 중 <route_x> 와 <route_y>는 패드 배선 ALU_wrapper_Pin_Route의 좌측하단의 좌표, <core_x> 와 <core_y>는 코어 ALU_wrapper_Core의 좌측하단의 좌표로 단위는 마이크로 미터(um) 이다.

$ generate_chip.sh ALU_wrapper 398 385.5 596.55 602.4
X-3. 최종 GDS

ALU_wrapper_Top.gds:




----------------------------------------------

[목차][이전][다음]

댓글 없음:

댓글 쓰기