2023년 12월 31일 일요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [9]/입출력 패드 붙이기

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

IX. 입출력 패드 붙이기
    IX-1. KLayout: 레이아웃 형식 변환도구
    IX-2. oa(OpenAccess) 형식 레이아웃 .mag 로 변환
    IX-3. 코어와 패드의 배치 및 배선

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

IX. 입출력 패드 붙이기

RTL 문서를 합성하여 폭이 0.6 마이크로 미터 밖에 않되는 트랜지스터 수천개를 엮어 가로세로 1mm의 영역에 집적해 놨다. 이제 마이크로미터의 세계에서 미리미터의 세계로 옮겨갈 단계에 왔다. 반도체 부품은 결국 인간의 인지영역에서 사용된다. 적어도 기판에 땜을 하려면 미리미터 단위로 옮겨와야 한다. 마이크로 단위의 세계는 크기 만큼이나 작동에 필요한 에너지량도 매우 적다. CMOS 트랜지스터의 작동에 필요한 에너지는 나노 와트에 불과하다. 자연계에 부유하는 에너지에 과도하게 반응하거나 견디지 못히고 파괴되기도 한다. 마이크로 세계의 트랜지스터를 보호하고 의미있는 신호만을 걸러내는 장치가 입출력 패드(IO Pad)다[link].

[이미지 출처] De-Capped 6502, http://www.visual6502.org/docs/6502_in_action_14_web.pdf

[이미지 출처] https://pages.hmc.edu/harris/cmosvlsi/4e/lect/lect23.pdf

IX-1. KLayout: 레이아웃 형식 변환도구

ETRI 0.5um CMOS 공정의 PDK는 입출력 패드를 라이브러리로 제공하는데 파일 형식이 OAsis[link] 다. 이 형식은 오픈-소스 레이아웃 도구 Magic과 호환되지 않기 때문에 GDS-II로  변환 후 들여쓰기로 한다.

레이아웃 편집기들은 공정마다 정해진 레이어 규칙(디자인 룰)을 참조하여 변환한다. 레이아웃의 표현은 레이어 번호와 좌표로써 단순하다. 이에 덧붙여 반복 사용되는 블럭은 하위 블럭으로 정의하여 계층화된 레이아웃으로 기술한다. 레이아웃 편집기 Magic이 계층적 GDS를 바르게 처리하지 못하기 때문에 또다른 오픈-소스 KLayout[link]을 활용할 것이다. 두 도구는 비아(via)와 컨택(contact)을 처리하는 방식에서 큰 차이가 있다. Magic은 컷(cut)과 오버행(overhang)을 묶어서 표현하고 GDS 생성시 자동으로 구멍을 뚫는다. 그리고 Magic은 테크 파일에 정의되지 않은 레이어는 없는 것으로 무시하기 때문에 레이어 번호가 매우 중요한 반면 KLayout은 모든 레이어와 좌표를 있는 그대로 읽는다. KLayou 형식변환과 검토에 매우 유용한 도구로 쓰인다.

 


IX-2. .oa(OpenAccess) 형식 레이아웃 .mag 로 변환

기능은 단순한 선로에 불과 하나 마이크로 세계로 통하는 매우 중요한 역활을 담당하는 입출력 패드를 표준 셀 그리듯 쉽게 취급할 수 없다. 다행히 ETRI 공정의 PDK는 입출력 패드 셀 라이브리를 제공하고 있다.

ETRI 공정에서 제공한 입출력 패드 파일은 oa 형식 이다. 유사한 이름으로 OASIS(Open Artwork System Interchange Standare[link])가 있다. 반도체 도면 뿐만 아니라 PCB 도면, 기타 평면도를 그리는 상용 도구에서 사용된다[link]. LEF/DEF 처럼 전자설계 자동화 도구들 사이에 공용으로 사용하는 형식으로 추진 되었다. 이 형식은 집적회로 레이아웃으로 널리 쓰이는 GDS-II 형식을 이어받고 있다. 케이던스사의 버츄오소등 상용 레이아웃 도구에서 사용되고 있지만 Magic은 이 형식을 지원하지 않는다.

라이브러리로 제공된 OA(OpenAccess database)를 Magic에서 사용하려면 다소 복잡한 변환을 거쳐야 한다. 이 절차는 입출력 패드 뿐만 아니라 외부에서 (상용도구로) 제작된 레이아웃을 오픈-소스 레이아웃 도구로 들여올때 응용할 수 있다.

+-----------------------+
| OpenAccess DB: .oa    |
+-----------+-----------+
            |
    [Cadence Virtuoso]
            |
+-----------V-----------+
| GDS-II: .gds          |
+-----------+-----------+
            |
        [KLayout]
            |
+-----------V------------+
| GDS-II: .gds           |
+-----------+------------+
            |
[Magic: cif istyle lambda=0.3(ETRI)]
            |
+-----------V------------+
|    .mag (Flatten)      |
+------------------------+

단계 1 상용 도구에서 oa 형식 파일을 GDS-II 로 저장한다. Magic 은 계층화된 GDS를 제대로 처리하지 못하는 경우가 있으므로 평활화(flatten) 옵션을 주고 저장한다. 

    

단계 2. 만일 계층화된 GDS를 Magic에서 읽었을 때 문제가 발생하면 번거롭지만 KLayout 도구를 써서 GDS를 읽은 후 다시 저장한다. KLayout은 좋은 도구다.

단계 3. Klayout에서 저장한 GDS를 Magic 에서 읽는다. 이때 레이어 번호를 Magic의 레이어 이름으로 변경해 주어야 한다. Magic명령창에서 읽기 스타일을 lambda=0.3(ETRI) 으로 변경해 준다.

    % cif istyle lambda=0.3(ETRI)

비록 레이아웃을 기술하는 문법은 단순하지만 외부에서 공급되는 라이브러리를 들여올때 레이어 번호와 좌표계의 단위를 주의하여 맞춰줘야한다. 디자인 킷은 ETRI 050 공정의 GDS를 읽어들이기 위한 기술 파일을 제공한다. 디자인 킷의 tech 폴더에 이 기술 파일이 있다. ETRI 공정용 레이어 번호 변환 및 디자인 룰 검사가 기술되어 있다.

    ~/ETRI050_DesignKit/v.1a/tech/SCN3ME_SUBM.30.ETRI.tech

단계 4. Magic 에서 GDS 파일을 읽으면 계층적임을 알 수 있다. 패드 셀에 수천개의 비아(via)가 뚫리는데 이들이 모두 하위 블럭으로 취급한다. Magic 에서 이들을 다룰때 부하가 많이 걸리므로 평활화 시켜 단일 셀로 저장해 두는 편이 좋다. 입력 패드 셀 PIC를 읽고 평활화 시키는 명령은 아래와 같다.

    % gds read PIC
    % select top cell; unexpand
    % flatten PIC_F; load PIC_F
    % save PIC_F

IX-3. 코어와 패드의 배치 및 배선

KION 의 'My Chip' 제작 서비스[link]의 MPW 칩 크기는 1850x1850um 이며 28핀 PLCC 패키지로 제작해준다. 이 조건에 맞춰 외곽에 입출력 패드를 붙이고 중심부에 앞서 설계한 코어를 배치한 후 패드와 배선한다.

MPW는 서로다른 다수의 칩을 한 웨이퍼에서 제작되므로 칩크기와 패드의 위치가 고정되어 있다. 패드의 배치가 고정된 칩의 외형이 제공되므로 이를 따라야 한다. 디자인 킷에는 입출력 패드를 부착한 칩 레이아웃이 제공된다.

패드는 설계한 코어에 따라 입출력을 달리 붙이게된다. 코어를 설계할 때 입출력 핀의 배치 계획을 세워 놓도록 한다. 자동 배치도구 GrayWolf의 입출력 핀 배치 파일은 ALU_wrapper.cel2 다. ALU 예제의 경우 입출력 핀을 몇개의 모둠으로 나눠 입력 핀 iAB[7:0]은 왼쪽 패드에 출력 핀 oACC[7:0]은 오른쪽 패드에 그리고 제어 핀들은 윗쪽에 배치했다.

    padgroup input_B permute
    twpin_iAB[0]  nonfixed
    twpin_iAB[1]  nonfixed
    restrict side B

    padgroup input_L permute
    twpin_iAB[2]  nonfixed
    twpin_iAB[3]  nonfixed
    twpin_iAB[4]  nonfixed
    twpin_iAB[5]  nonfixed
    twpin_iAB[6]  nonfixed
    twpin_iAB[7]  nonfixed
    restrict side L

    padgroup control permute
    twpin_iSel[0]  nonfixed
    twpin_iSel[1]  nonfixed
    twpin_iOutSel  nonfixed
    twpin_reset  nonfixed
    twpin_clk  nonfixed
    restrict side T

    padgroup output_T permute
    twpin_oACC[7]  nonfixed
    twpin_oACC[6]  nonfixed
    restrict side T

    padgroup output_R permute
    twpin_oACC[5]  nonfixed
    twpin_oACC[4]  nonfixed
    twpin_oACC[3]  nonfixed
    twpin_oACC[2]  nonfixed
    twpin_oACC[1]  nonfixed
    twpin_oACC[0]  nonfixed
    restrict side R

디자인 킷은 코어와 입출력 패드 사이의 배선은 자동화 하지 못했다. Magic 레이아웃 도구를 써서 수동으로 연결해 주도록 한다. Magic 레이아웃 도구의 사용법은 설명서가 잘 준비되어 있으니 익혀두자[link].

예제 실행을 위한 폴더 구조

+---------------------------+
| ~/ETRI050_DesignKit/v.1a/ |
+-------+-------------------+
        |
        +-- Tools : Open-source archives
        |
        +-- digital_ETRI -> digital_ETRI050_m2d (symbolic link)
        |
        +-- pads_ETRI050
        |
        +-- scripts
        |
        +-- tech
        |
        +-- Ref_Design/ALU8 Project Home
                         |
                         +-- log
                         |
                         +-- source : RTL Verilog
                         |
                         +-- layout : P&R results
                         |
                         +-- simulation : C++ Tectbench
                         |
                         +-- synthesis : Synthesized netlists
                         |
                         +-- chiptop


단계 1. ALU8 에서 패드를 붙인 최종 칩 작업 폴더는 chiptop으로 한다.

    $ mkdir chiptop
    $ cd chiptop

단계 2. 셀 라이브러리 경로 심볼링크

    $ ln -s ../../../digital_ETRI
    $ ln -s ../../../pads_ETRI050

단계 3. 코어 심볼링크

    $ ln -s ../layout/ALU_wrapper_Fixed.mag ./ALU_wrapper_Core.mag

단계 4. MPW용 28핀 패드 프레임 복사

    $ cp ./pads_ETRI050/MPW_PAD_28Pin_frame.mag ./ALU_wrapper_Top.mag

단계 5. Magic의 리소스 파일 복사

    $ cp ../layout/.magicrc .

단계 6. Magic 리소스 파일 수정.

    $ vi .magicrc

    셀 라이브러리 경로 추가

    #-----------------------------------------------------
    # .magicrc startup file for ETRI050 project under qflow
    #-----------------------------------------------------
    path sys +/usr/local/share/qflow/tech/etri050
    tech load SCN3ME_SUBM.30.ETRI -noprompt
    scalegrid 1 2
    set GND gnd
    set VDD vdd
    drc euclidean on
    drc off

    addpath digital_ETRI
    addpath pads_ETRI050

    macro Control_XK_Pointer_Button4 {zoom 0.5}
    macro Control_XK_Pointer_Button5 {zoom 2}

단계 7. MPW 패드 프레임에 코어 배치

    $ magic -d XR ALU_wrapper_Core

    Magic 명령창에서 상자 커서를 위치한 후 코어셀 불러들이기

    % box 600um 600um 600um 600um
    % getcell ALU_wrapper_Core

28개 패드 중 0번과 14번은 각각 VDD 와 VSS로 지정했고 나머지는 모두 NC(No-Connectrd)다. 코어의 핀 배치에 맞춰 입출력 패드를 배정 한다.

단계 9. 그래픽 화면을 보며 NC 패드에 PIC(입력패드)와 POB8(출력 패드)를 달 수 있지만 번거롭다. Magic 레이아웃 파일은 일반 문자 파일이므로 문자 문서 편집기로 고치는 편이 수월하다. 대부분 전자설계 자동화 파일들이 일반 문자 파일이라서 양식만 이해하고 있다면 수정이 쉽다. 자동화 도구 만들기도 수월하다.

    % vi ALU_wrapper_Top.mag

앞서 자동배치시 핀배치 방향을 지정 했었다. 이에 맞춰 패드를 배정해 보자. 예를들어 PORT_2 를 찾아서 PAD_NC_F 패드를 입력 패드 라이브러리 PIC_F 로 바꿔준다. 출력 패드의 이름은 POB8_F 다.

    use PAD_NC_F  PORT_2    ---> use PIC_F   PORT_2
    use PAD_NC_F  PORT_13   ---> use POB8_F  PORT_2

단계 10. 코어에서 포트의 라벨을 찾아 각 패드에 연결해준다. 수평 배선을 금속2, 수직 배선은 금속3의 규칙을 반드시 따를 필요는 없다. 배선길이가 길다. 가급적 두껍게 사용하자. 3~4um가 적당하다.


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

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


댓글 없음:

댓글 쓰기