2024년 12월 22일 일요일

"내 칩 MPW"로 간지나는 아날로그 컴퓨터를 만들어볼까?

"내 칩 MPW"로 간지나는 아날로그 컴퓨터를 만들어볼까?

그동안 디지털 컴퓨팅 회로만 다뤄오다가 아날로그 컴퓨팅 회로가 궁금해졌다.

아날로그 컴퓨터를 처음 구경해 봤던것은 거의 40년 전쯤 방위병 군복무 때였다. 발칸포 부대의 정비대에서 배치되었었는데 심심하여 야전 매뉴얼이 있길래 회로도를 봤다. 거기에 아날로그 컴퓨터가 있었다. 레이더를 조준하고 전파를 발사하면 반사파를 받아 조준경에 선도각을 계산해 주는 컴퓨터였다. 짬밥이 늘어 전역할 즈음 선임병에게 부탁해 전동으로 작동하는 포탑에 타볼 수 있었다. 지나가는 비행기에 조준하고 레이더 전파를 발사하자 순간적으로 포탑을 휙 돌아갔다. 너무 신기한 나머지 작동 원리를 알려주고 싶었지만 석사출신 늙은(?) 방위병의 말을 들어줄리는 없어 입이 근질 거렸지만 참았다. 아날로그 컴퓨터의 경험은 그렇게 기억속에 뭍혔다.

인공지능을 "신경망"으로 구현한다는 디지털 컴퓨터가 초미의 관심사가 되었다. 디지털 컴퓨팅의 단점이라며 이런저런 이야기를 하며 아날로그 컴퓨팅이 미래라고 한다. Op-Amp 회로에 가산기, 적분기 같은 회로를 꾸밀 수 있으니 신경망을 구현할 수 있다는 것이다. 차동 증폭기를 응용하면 미분 방정식을 풀어 낸단다.

오픈-소스 아날로그 컴퓨터 키트 The Analog Thing 으로,

기계 진동을 해석하고,

뉴런 발화를 실험해보고,

로렌쯔 어트랙터를 실험할 수 있단다.

미분 방정식을 풀 수 있다니 호기심이 발동한다. 이 키트는 깃-허브에 공개되어 있다.

https://github.com/anabrid/the-analog-thing

https://the-analog-thing.org/

키트의 판매 가격이 만만치 않다.

한대 사볼까 하다가 마침 Op-Amps를 가지고 빵판 위에 아날로그 컴퓨터를 실험하는 동영상 이 있었다.

Building an Analog Computer with Op Amps

https://www.youtube.com/playlist?list=PL_R4uxT5thflWVbSWtl-rx5_C_q0RxjyV

마침 방학도 됐고 하니 시간이 있다면 따라해 보면 좋겠다. 아날로그 컴퓨터가 "인공지능 시대의 간지폭풍" 이란다!

단품 트랜지스터와 다이오드, 저항, 케패시터로 Op-Amp를 만들어 볼 수도 있다.

DIY Operational Amplifier

https://www.electroschematics.com/diy-operational-amplifier/

마침 동영상도 있다. (유튜브에는 없는게 없구나!)

Op-Amps

https://www.youtube.com/playlist?list=PLXDK0MeyK4ZgWkzd59wLkir7ZjI7fIsFn

Op-Amp를 넣어 "내 칩 MPW" 를 도전해 볼 만도 하겠다. 레이아웃 그리기는 그냥 "그리기"일 뿐이다. "설계"는 이해가 먼저다.


2024년 12월 21일 토요일

진출하기 전에 살펴보는 "파운드리에서 회로설계 엔지니어의 업무"

진출하기 전에 살펴보는 "파운드리에서 회로설계 엔지니어의 업무"

대학입시와 취업의 계절에 즈음하여 반도체관련 직군의 업무를 설명하는 정보(주로 유튜브 동영상)를 많이 접하게 된다. 마침 "파운드리에서 회로설계 엔지니어가 필요한 이유 (메모리 아니고 S.LSI 아니고 파운드리에 지원하는 이유)"라는 제목의 동영상을 접하게 됐다.


앞으로 "반도체" 분야로 진출할 생각이 있다면 이 동영상을 보면서 혼자 또는 여러 동료 학생들과 토론을 해보길 바란다. 그리고 다른이의 생각은 어떤지 그 아래 달린 댓글들도 살펴보자. 지난 몇년동안 학교에서 배웠던 그리고 수행했던 과제와 현재 실무자가 말하는 업무 내용은 다른 점이 많을 것이다. 동영상 내용 중 설계 도구(소프트웨어)에 대한 언급(오해?)도 있으니 주의깊게 들어보고 지적해 보자.

위의 동영상에서 말하는 내용은 다분히 디지털 설계에 치우쳐 있다. 반도체 물질(물리화학), 공정과 같은 제조와 장비(광학, 기계, 자동제어), 아날로그와 디지털 회로 설계(전자공학), 반도체 물류(경영, 산업공학), 테스트 기법, 설계 도구(소프트웨어)등 반도체 산업의 직군은 굉장히 넓다. 그중 디지털 설계는 한부분에 불과하다. 더 넓게 보자면 기본 구동 펌웨어(BIOS Firmware), 실시간 운영체제(RTOS)도 메모리의 내용을 설계하는 "반도체" 분야라 할 것이다. 웹 서버 같은 운영제제나 응용 프로그램도 역시 "반도체" 위에서 작동하는 것이지만 그렇게 까지 넓히지는 말자.

최근 "반도체"관련 인력난 이라면서 관련 학과 증원이 상당히 늘어 났다고 한다. 학과명 들도 미묘한 차이가 있다. 아마도 각 학교마다 보유한 교수인력의 특성에 따라 정해진 듣하다. 진학을 염두에 두었다면 "반도체" 만 볼 것이 아니라 해당 학교의 교수님 홈 페이지에 들러 내가 생각한 분야와 맞는지 한번쯤 살펴보길 권한다. 각 대학에 설치된 "반도체" 학과명들을 대략 나열해보면 아래와 같다.

"반도체 학과"
"반도체 공학과"
"나노 반도체 학과"
"지능형 반도체 공학과"
"반도체 과학기술학과"
"반도체 시스템 공학과"
"시스템 반도체 공학과"
"융합 반도체 공학 전공"
"지능형 반도체 융합 전자공학전공"
"물리반도체 학부"

무슨 차이일까? 위의 학과가 설치된 학교의 홈페이지들을 방문해 보면 단서가 잡힌다. "반도체 공학과"는 특색없이 전자공학과나 다름없어 보인다. "물리반도체"는 그냥 고체 물리학(Solid-State Physics)이다. 여기에 "지능형" 이라고 붙인 것은 혹시 "인공지능" 유행을 타려는 것 같아 마치 "바나나 맛" 우유가 연상되 개운치 않다. "반도체 시스템"은 반도체 제조공정을 강조하는 듣하고 "시스템 반도체"는 소위 말하는 SoC 설계에 자신이 있었나보다. 설계보다 검증과 테스트의 부담이 "무어의 법칙"을 무효화 시킨 원인이라는 점을 부인하지 못하지만 정작 검증과 설계 방법론(설계도구 소프트웨어)을 다루는 학과목이 눈에띄지 않는다.

우리나라의 "반도체" 산업이 제조에 치우친 탓인지 대부분 학과 내용이 "공정"이라는 인상을 준다. 학교에 직접 들어가 보지 않고 그들의 홍보 영상을 보니 그렇다는 것이다. 물론 설계 과목에서 검증을 다루고 있으리라 믿는다. 학교는 물론 학생 당사자들도 취업이 당장의 과제이니 업계에서 요구하는 인력양성 과정에 맞춰 지는 것은 어쩔 수 없는 현실인가보다.


2024년 12월 8일 일요일

반도체 웨이퍼 공정을 설명하는 두 동영상을 비교해 보자

반도체 웨이퍼 공정을 설명하는 두 동영상을 비교해 보자

두 그림의 다른 부분찾기를 가지고 지능이 어떻다느니 두뇌 나이가 어떻다느니 하는 것을 종종 본다. 좋지 않은 결과가 나오면 못마땅 하지만 하다보면 심심풀이 삼아 시간 죽이기는 그만이다.

아래의 두 동영상은 반도체 웨이퍼를 가공하는 과정을 설명하고 있다. 두 동영상을 비교하여 서로 어느 부분이 같게 또는 다르게 설명하고 있는지 찾아보자. 그러다 보면 반도체 칩 제조 과정의 이해를 한층 높일 수 있을 것이다.

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


[공정 소개] SK hynix Wafer Fabrication

반도체 칩 제조 과정을 보기좋게(?) 보여주고 있다.  이 애니매이션의 제작자는 반도체 관련분야의 전공자가 아닐 것이다. 하지만 제작하면서 전문가의 조력을 받았을 것이고 사후 감수도 했을 텐데 아쉬운 부분이 여럿 눈에 띈다. 아래의 동영상을 보고 불편한 부분을 지적질 해보자.


Chip Manufacturing - How are Microchips made? | Infineon

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







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

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

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

https://www.youtube.com/playlist?list=PLKtxx9TnH76QY5FjmO3NaUkVJvTPN9Vmg



2024년 12월 7일 토요일

디지털/아날로그 반도체 설계 자동화 도구를 소개하는 동영상

디지털/아날로그 반도체 설계 자동화 도구를 소개하는 동영상

수 많은 재능있고 헌신적인 사람들이 동영상을 자발적으로 만들어 보여주고 있다. 내용의 품질을 떠나 그들의 짧은 동영상 덕분에 편협함을 깨우칠 기회가 되어 고맙다. 반도체 설계도 예외는 아니다. 반도체 설계 도구를 설명하는 동영상을 발견 했다.

이 동영상들은 10분 미만의 시간에 반도체 설계 도구 들을 설명한다. 이 동영상에 여러 전문어(jargon)들이 등장한다. 짧은 시간내에 여러 도구들을 소개하려니 상세하지 않다. 간혹 세심함이 부족한 경우도 있다. 만일 생소한 용어나 약어들이 있다면 찾아서 자신만의 정의를 내려보자. 당장 취업을 앞두고 해당 업계 종사자들이 사용하는 전문어들에 익숙해보자. "말귀를 알아듣는 유능한 신입"이 될 것이다.

아래의 동영상을 보면 그가 말하는 것들이 부족 할 수도 있다. "내 칩 MPW"는 부족하거나 모호한 용어들을 실습을 통해 내것으로 만들 수 있는 기회가 될 것이다.

반도체 아날로그 회로설계 툴 8가지 소개! (아날로그 직무 지원자 필수 시청 영상)

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

디지털 회로설계 툴 9가지 소개 1편! (디지털 직무 지원자 필수 시청 영상)



2024년 10월 17일 목요일

Efficient Processing of Deep Neural Network: from Algorithms to Hardware Architectures

Efficient Processing of Deep Neural Network: from Algorithms to Hardware Architectures

"인공지능"이 세상의 모든 기술관련 매체의 지면을 뒤덮고 있다. 반도체 회로 설계와 컴퓨터 구조 분야는 온통 "깊은 신경망(Deep Neural Networks)"의 효율적(저전력!) 구현에 모여있다. 돌이켜보면 20세기말1990년대의 논문은 온통 효율적인 곱셈기와 누산기 설계로 채웠었다. 그때는 디지털 신호처리, 특히 멀티 미디어 코덱이 대상이었다. 신호처리에 특화된 명령이 범용 프로세서에 들어가고 저전력 공정 기술이 발달하자 전용 칩보다 유연한 저전력 CPU 세상이 됐다. 21세기 들어 고속 CPU와 GPU로 톡톡히 재미를 보다가 한계에 다다르자 다시 전용 칩(ASIC)이란다. 무슨 이야기들을 하는지 들여다 보면 결국 곱셈 잘하는 방법, 곱셈 횟수 줄이는 방법이다. 예전과 다른 점이라면 빠른 연산회로 연구에서 연산 횟수 줄이기로, 반복적인 상수 곱셈(DSP 고속 알고리즘의 특징)의 재활용에서 곱셈할 필요 없는 경우 찾기와 메모리 계층적 활용 등이다. 연산회로(Computer Arithmetics)에서 컴퓨터 구조(Computer Architecture)로 추상화 수준이 높아졌다. 어쨌든 다시 반도체 설계가 돌아오니 반갑다. 무엇보다도 강연을 보기 편하다! (음... 다 아는 얘기구먼...) 인공지능과 신경망 역시 한시대를 유행했었으니까...


Computer architecture for deep learning applications/David Brooks/Havard
https://alchem.usc.edu/ceng-seminar/slides/2017/Brooks_USC_April2017.pdf

강연을 들어보면 신경망을 현존 컴퓨터 구조로 구현해 놓으니 곱셈기보다 메모리에서 소모하는 전력이 훨씬 많다고 한다(저전력 곱셈 연산기 회로는 이미 30년전에 끝내놓았으니까!). 신경망 알고리즘을 쪼개 파이프라인 병렬처리 구조를 취하고  전역 메모리 구조보다 지역 메모리를 사용하는 방향으로 가자는 주장이다. 당연한 것을 인공지능에 얹어 현란하게 말하고 있다는 느낌이 든다. 어쨌든 오늘의 신경망 컴퓨팅을 아주 잘 정리하고 있는 강연 두편을 들어보자.

Efficient Processing of Deep Neural Network: from Algorithms to Hardware Architectures #NeurIPS2019

원고: https://eyeriss.mit.edu/2019_neurips_tutorial.pdf

Lecture 15 | Efficient Methods and Hardware for Deep Learning

원고: https://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture15.pdf

깃-허브에 실행 모델들이 있다. (오픈-소스 만세!)

A Scalable Eyeriss Model in SystemC
https://github.com/nietzhuang/Cycle-accurate-Eyeriss-model

Hierarchical Mesh NoC - Eyeriss v2
https://github.com/karthisugumar/CSE240D-Hierarchical_Mesh_NoC-Eyeriss_v2

요즘 학생들은 30년전에 신경망, 병렬처리, 고속 신호처리 알고리즘들이 학계를 휩쓸었던 것을 모르는지 신경망이 마치 새로운 분야로 알고 있다. 그때와 달라진 점이라면 규모가 어마어마하게 커졌고 공부할 수 있는 환경이 무척 풍부해 졌다는 것이다. 7백여개의 입력 층 노드, 수십개의 은익층 노드 그리고 10여개의 출력층 노드를 갖는 필기체 숫자인식 신경망 쯤이야 널리고 널렸다. 불과 30년전에는 석사 논문 쯤으로 등장할 법한 내용들을 고등학교 수준에서 구현하는 것을 보면 말이다. 

  

돌고 도는 것이 패션 뿐 만은 아니다.

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

블로그 관련글: "신경망(뉴럴 네트워크)": "뉴로모픽 컴퓨팅"의 "Hello, World!"
https://fun-teaching-goodkook.blogspot.com/2024/05/hello-world.html



2024년 10월 9일 수요일

오픈-소스 EDA 도구 활용 NSPL 0.5um CMOS 공정 표준-셀 디자인 킷

오픈-소스 EDA 도구 활용 NSPL 0.5um CMOS 공정 표준-셀 디자인 킷

Open-Source Std-Cell based Design Kit for NSPL/ETRI 0.5um CMOS process(2-Poly/3-Metal)

Github repo. link:
https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git



2024년 10월 3일 목요일

"내 칩 MPW" NSPL 0.5um CMOS 공정용 표준-셀 디자인 킷 버젼-F 공개

"내 칩 MPW" NSPL 0.5um CMOS 공정용 표준-셀 디자인 킷 버젼-F 공개

-----------------------------------------------------------------------------
[주의] 이 디자인 킷은 실리콘 검증 되지 않았음. 사용자의 주의를 요함.
(2024년 4차 "내 칩 MPW"에서 실리콘 검증 신청 예정)
-----------------------------------------------------------------------------

"내 칩 MPW"의 NSPL 0.5um CMOS/2P3M 공정용 오픈-소스 표준 셀 디자인 킷(a.k.a 경희대학교 DK)이 버젼 F로 업-데이트 되었다. 표준-셀이 두가지 버젼으로 발행되었다. 두 표준 셀의 특징인 이전 버젼 E 와 같다.[링크

버젼 F는 E 와 비교하면 다음과 같다.

1. 이전에 비하여 수직 트랙 수를 13에서 12로 낮춰 밀집도(density)를 높였다.
2. 두 표준-셀 유형을 교차 사용 할 수 있다.
    a. 표준-셀 I 형: digital_ETRI050_m1f
    b. 표준-셀 II 형: digital_ETRI050_m2f

3. 표준 셀을 두 예제에 적용하여 특징을 보면 다음과 같다.

예제1: FIR_PE

합성통계:
12. Printing statistics.
=== fir_pe ===
   Number of wires:                778
   Number of wire bits:            870
   Number of public wires:         778
   Number of public wire bits:     870
   Number of ports:                  8
   Number of port bits:             25
   Number of memories:               0
   Number of memory bits:            0
   Number of processes:              0
   Number of cells:                850
     AND2X2                         30
     AOI21X1                        74
     AOI22X1                        21
     BUFX2                           9
     DFFPOSX1                       75
     INVX1                         126
     NAND2X1                       145
     NAND3X1                        94
     NOR2X1                         85
     OAI21X1                       175
     OAI22X1                         6
     OR2X2                          10

* 전역 셋과 리셋이 없는 플립-플롭 DFFPOSX1 만 사용됨

P&R 레이아웃: Density = 0.7

1. 표준 셀 유형 I 사용(digital_ETRI050_m1f)

    Area: 867.9x844.2um
    DRC: m2 spacing(36), m2 spacing(16)
    Stacked VIA: 32 / VIA1+VIA2=~3.5k

2. 표준 셀 유형 II 사용(digital_ETRI050_m2f)

    Area: 864.9x841.2um
    DRC: m2 spacing(1)
    Stacked VIA: 3 / VIA1+VIA2=~2k

* 두 유형 모두 면적 차이는 없으나 DRC와 적층 비아의 생성에 큰 차이가 있다. 유형 II 표준-셀은 경우 포트(핀)을 m2 에 지정하기 위해 셀 내부에 VIA1를 사용하고 있다. 자동 배선기가 생성하는 비아의 갯수가 적고 적층 비아도 줄어든다.

* 자동 배선기(Qrouter)의 옵션에 적층 비아 금지를 주었으나 완전히 배제하지는 못한다.

예제2: ALU8

합성통계:
Printing statistics.
=== ALU_wrapper ===
   Number of wires:                945
   Number of wire bits:            991
   Number of public wires:         945
   Number of public wire bits:     991
   Number of ports:                  8
   Number of port bits:             22
   Number of memories:               0
   Number of memory bits:            0
   Number of processes:              0
   Number of cells:                977
     $scopeinfo                      1
     AND2X2                         40
     AOI21X1                        95
     AOI22X1                        37
     BUFX2                           9
     DFFPOSX1                       24
     DFFSR                           3
     INVX1                         139
     MUX2X1                          3
     NAND2X1                       171
     NAND3X1                       145
     NOR2X1                         63
     NOR3X1                          4
     OAI21X1                       219
     OAI22X1                         7
     OR2X2                          17

* 전역 셋과 리셋이 있는 플립-플롭이 단 3개 사용됨

P&R 레이아웃: Density = 0.59

1. 표준 셀 유형 I 사용(digital_ETRI050_m1f)

    자동 배선 실패
    (밀집도를 낮춰 자동 배선할 경우 면적이 넓어져 내칩 MPW 제한을 벗어남)

2. 표준 셀 유형 II 사용(digital_ETRI050_m2f)

    Area: 969.9x952.2um
    LVS: Mismatch Net(2)
    DRC: m2 spacing(5), m3 spacing(2)
    Stacked VIA: 7 / VIA1+VIA2=~3.1k

3. 표준 셀 유형 I에 유형 II의 DFFRS 셀 사용

    Area: 969.9x949.9um
    LVS: Mismatch Net(1)
    DRC: m2 spacing(32), m1 spacing(25)
    Stacked VIA: 35 / VIA1+VIA2=~4.3k

* 자동 배선에 성공 했음에도 불구하고 LVS 검사에서 불일치 네트가 발생된다. LVS는 배치 밀집도를 낮추면 제거할 수 있지만 내칩 MPW의 면적 제한을 벗어날 수 있다. LVS에서 핀 불일치가 아닌 이상 10개 미만의 네트 불일치는 레이아웃 수정이 가능 하다.

* 유형 I 만의 표준 셀로 자동 배선 실패하였으나 전역 리셋 신호를 가진 플립-플롭 DFFSR을 유형 II의 셀로 교체 한 경우에 자동 배선 성공한다. 배선 메탈 층의 갯수가 제한된 공정에서 전역 신호의 사용이 주는 영향은 아주 크다.

* 두 예제 설계의 결과를 보면 표준 셀의 최적화가 주는 영향을 잘 알 수 있다. 동일한 레이아웃 이지만 포트를 m1과 m2에 각각 달리준 경우 자동 배치배선의 결과(DRC, LVS, Stacked VIA)에 큰 차이를 보여준다.

* 디자인 킷에 제공된 표준-셀은 아주 기본적인 것들 만 있다. 다양한 기능의 표준 셀을 만들어 그 효과를 살펴보자. m1과 m2 를 혼용하여 포트(핀) 설정도 가능 하다.

* 디자인 킷에 표준 셀 제작을 위한 기준틀과 스크립트를 포함 시켰놓았다. 고유의 인-하우스 셀 레이아웃을 제작해 보기 바란다.

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

디자인 킷 내려받기 깃허브 저장소:
https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git

오픈-소스 내 칩 MPW 튜토리얼:
https://fun-teaching-goodkook.blogspot.com/2024/07/mpw.html

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


2024년 9월 30일 월요일

독일의 오픈-소스 도구를 활용한 반도체 설계 인증 교육과정

독일의 오픈-소스 도구를 활용한 반도체 설계 인증 교육과정
Development of Certificate Courses and Status Quo of Digital EDA Course using IHP-SG13G2 (C. Wittke)

OpenROAD 프로젝트 사이트(https://theopenroadproject.org/)에 올라온 최근 소식(2024년 9월 30일 현재)으로 독일에 반도체 설계 인증과정을 수립한다고 합니다. 발표 동영상을 보니 "내 칩 MPW"에서도 해볼만 합니다. 세계는 지금 오픈-소스 반도체 설계의 열풍이 불고 있군요.

Kudos to Christian Wittke (IHP) and Thorsten Knoll (HSRM) on their development of a Digital EDA Course using IHP-SG13G2 and OpenROAD ! See the video of Christian's ORConf 2024 talk at https://www.youtube.com/watch?v=Ozd_yXoExLo


IHP는 독일의 공공 연구소로 오픈-소스 PDK 를 개발한다. 자체 크린 룸을 가지고 있으며 MPW 서비스를 제공한다. 디지털 EDA 인증 과정 개발과 현재까지 진행 상황을 발표하겠다.

IHP와 이곳에서 진행하는 프로젝트에 대해서 설명은 이만하고 우리가 준비하고 있는 반도체 인증 교육 프로그램에 대하여 소개한도록 하겠다. 우리의 목표는 반도체 관련 분야의 진보된 교육과 훈련을 제공하는 것이다.

현재 서유럽(독일, 프랑스, 네델란드, 이태리)은 반도체 산업의 일력 부족이 심각하다. 10만여 인력 부족상태다. 2030년까지 13만 명에 이를 것으로 보인다. 향후 10년내 현재 인력들 마저 셋중 한명은 은퇴할 것이다. 과학기술(STEM)을 공부하는 학생들 중 반도체 분야에 전공하려는 숫자가 아주 적은 형편이다.

이에대한 해결책으로 새로운 인력층을 끌어들여야 한다. 대부분 남성 위주에서 여성, 은퇴후 재취업을 원하거나 이직을 고려중인 사람들이 관심을 유도해보려고 한다. 이 산업 분야의 매력을 보여주는 것도 중요하다. 그리고 실질적인 훈련이 되어야 한다.

[주] 반도체 분야가 한때 열풍이 불었던 시절이 있었다. 너도나도 베릴로그니 VHDL을 배우느라 여념이 없었다. 언어만 배워서 할 수 있는 일이란 없다는 것을 깨닳게 되자 흥미를 잃게됐다. 정보산업이 흥하면서 관심이 소프트웨어 개발에 쏠렸다. 범용 컴퓨터와 그래픽 기반 운영체제 상에서 즉시 결과를 보여주는 프로그래밍 언어는 배우는 재미가 있다. 결국 반도체, 특히 전용 반도체 하드웨어 설계 보다 범용 마이크로 프로세서를 활용한 응용 소프트웨어 개발에 치우쳤다. 범용 CPU가 고속화 되면서 전용 반도체 설계는 관심사에서 멀어졌다. 반도체 산업은 경쟁이 심하여 비밀주의와 폐쇄성이 높아지고 반도체 설계 교육은 기초와 이론에 머무를 뿐이었다. 특히 고가의 설계도구(컴파일러 소프트웨어)들은 장벽을 한층 높여 왔고 너무나 넓은 반도체 관련 학과목 간의 추상화 격차도 흥미를 잃게 만드는데 한몫했다. 간단한 인버터 레이아웃을 그리다가 하드웨어 언어로 넘어가더니 급기야 시스템 반도체 설계로 뛰어넘는 지경이다. 결국 학생들은 반도체 설계에서 멀어져만 갔다. 간단한 구문으로 애니메이션을 구현하는 것과 FPGA에 LED 켜보는 것에 드는 노고에 비해 결과로 얻는 흥미의 차이는 자명하지 않은가. 거대시설 산업이라 할 수 있는 소수의 반도체 공장에 비하면 정보산업 계통의 일자리는 넘치고 쉬워 보였을 것다.

정보통신 기술의 근간은 바로 반도체 였다는 점과 실질적인 반도체 산업을 떠받치는 기술에 주목하자. 시스템(CPU와 메모리로 구성되는 컴퓨터) 설계의 출발은 반도체 전자회로(트랜지스터)부터다.

우리의 강좌는 이들 사이의 간극을 좁힐 수 있는 실질적인 교육과 훈련을 제공하겠다. 연구소 및 기업체와 밀접한 협력 관계를 맺고 이들이 필요로하는 인증된 교육과정을 수립한다. IHP는 실제적인 훈련이 되도록 반도체를 설계하고 제작하는 공정시설(크린 룸)을 자체적으로 갖추고 있다.

[주] "내 칩 MPW"는 실질적 반도체 설계 교육에 요구되는 체계를 갖추고 있다. 현재 오픈 PDK로 SkyWater, GF, SG등은 130나노와 180나노 급 공정으로 4~5중 메탈 공정이다. "내 칩 MPW"서비스는 0.5um 공정이긴 하지만 반도체 설계 교육과 훈련에 공정의 선폭이 중요한 것이 아니다. 첨단 공정은 거대 설비에 맞겨두고 교육은 설계에 집중하자.

IHP는 독일 내 여러 관계사들과 협력하여 10여개의 과정을 갖춘 오픈-소스 기반의 2가지 인증교육과정을 준비하고 있는데 공개된 SG13G2 공정을 기반으로 한다.

https://github.com/IHP-GmbH/IHP-Open-PDK

인증과정 1. 디지털 회로 설계

- 반도체 설계 전반을 아우른다.
- 기초 회로(트랜지스터) 설계부터 행위 기술(RTL 합성)까지 다룬다.
- 시뮬레이션과 검증 기법 포함 한다.
- 제조 가능한 GDS 생성 까지.

[주] "내 칩 MPW"공정 표준-셀 디자인 킷은 합성, 자동배치배선, 사인 오프, GDS 생성과정을 모두 학습 할 수 있도록 준비되었다. SPICE, 베릴로그 HDL/VPI, C++/SystemC, FPGA를 활용한 Co-Simulation/Co-Emulation 체계를 갖추고 있다.

인증과정 2. 아날로그/디지털 혼합 신호 설계

- 전과정을 수행해 볼 수 있는 예제
- 디지털 설계와는 다른 단계 추가

[주] "내 칩 MPW" 공정은 '아날로그' 회로 설계가 준비되어 있다. PDK에 BJT(접합 트랜지스터), NMOS, PMOS, DIODE(다이오드), PCAP(컨덴서), PRES(저항) 등 아날로그 회로 설계용 PCELL 들을 제공한다. 조만간 이에 대한 방법도 튜토리얼로 준비할 예정이다.

디지털 설계과정을 소개한다.

오픈-소스 EDA 환경을 기반의 이 교육과정은 아래와 같은 내용을 포함한다.

- 교육과정은 오픈-소스 자체다.
- 교육 자료는 깃(공개 저장소)기반으로 공개한다.
- 칩을 만들기는 오픈-소스 도구들에 맞춰져 있다.
- OpenROAD 도구들과 IHP의 공개 PDK를 활용한다.
- 향후 공개될 더많은 "EDA 마법"들을 익히는데 도움이 될 것이다.

오픈-소스 도구들을 활용하므로써 누구나 칩을 설계 할 수 있게 한다는 것이 목표다. 현재 교육과정은 아래와 같은 절차를 거쳐 수립됐다.

탑-다운 방식:

- 선행 학습사항과 반도체 설계의 전체 과정
- 핵심 학습 부분 도출
- 학습 교재 구성 (교재의 장 구성, 강의와 자습, 실습 및 연습, 질문)
- 학습과정 시험실시 후 의견 수집 및 수정

정식과정은 5일간 이뤄지며 칩 설계에 필요한 10개의 강의로 구성됐다. 하루 두강좌이며 중간에 점심시간이 있다. 임원들을 위한 이틀짜리 요약강좌도 있다.

2024년 말까지 강좌안이 수립되면 2025년에 시험실시 될 것이다. 의견은 언재든 환영한다.

2025년 2월 10일부터 5일간 실험적으로 실시된다. 5일 강좌가 유용하지만 필요하다면 2일짜리 출장강좌도 가능하다. 시험 강좌에 참여는 무료다. 향후 정식강좌로 자리하면 유료화 한다. 어떤 문의든 환영한다.

시험 실시되는 강좌에 참여하기 바란다. 프랑크프루트 소재 IHP에 방문하여 공정 시설(크린룸)도 견학 할 수 있다. 위이퍼를 직접 들어보면 남다른 느낌이 들 것이다.

오픈-소스 코뮤니티에 감사한다. 그리고 독일의 공공 자금을 받고 진행하는 다른 오픈 PDK 프로젝트 들도 둘러보시라.

[주] 발표 후 질문 RF 반도체 설계에 대한 질문이 있었다. 이에 대해 아진 준비되지 않았다고 한다.


2024년 9월 28일 토요일

"내 칩 MPW" NSPL 0.5um CMOS 공정용 표준-셀 디자인 킷 버젼-E 공개

"내 칩 MPW" NSPL 0.5um CMOS 공정용 표준-셀 디자인 킷 버젼-E 공개

-----------------------------------------------------------------------------
[주의] 이 디자인 킷은 실리콘 검증 되지 않았음. 사용자의 주의를 요함
-----------------------------------------------------------------------------

"내 칩 MPW"의 NSPL 0.5um CMOS/2P3M 공정용 오픈-소스 표준 셀 디자인 킷(경희대학교 DK)이 업-데이트 되었다. 표준-셀이 두가지 버젼으로 발행되었는데 중요 갱신 사항은 아래와 같다.

* NSPL: National Semiconductor Public Laboratory at ETRI

1. 표준-셀 I 형: digital_ETRI050_m1e

- 입출력 포트가 MET1 레이어에 붙어 있어서 배선에 유리하여 밀집도를 더 높게 줄 수 있음.
- 면적 사용량이 약 10% 이상 개선됨
- 적층 비아를 많이 만들어 냄 (FIR_PE 예제의 경우 38개!)

2. 표준-셀 II 형: digital_ETRI050_m2e

- 입출력 포트가 MET2 레이어에 붙어 있어서 상대적으로 MET1를 전역 배선에 사용하기 불리함
- 적층 비아(stacked VIA)를 적게 만들어 냄 (FIR_PE 예제의 경우 8개!)

3. 공통 사항

- 배선 효율이 높아짐(LEF: 표준 셀의 핀/포트 및 OBS 영역 최적화)
- 자동 배선 후 DRC 갯수 감소(LEF: 배선 룰 재정의)
- 내부구조가 지나치게 복잡하여 전역 배선에 불리한 XOR, XNOR, LATCH, TBUF, HAX, FAX 셀을 합성에서 배제 함
    * 리버티 파일에서 해당 셀 매크로 정의에 dont_use 옵션 사용
    * OR, AND, NOR, NAND, INV 만으로 논리 조합회로 합성
- 표준-셀과 자동 배선기에서 생성된 배선 레이아웃에 대하여 상용 도구와 DRC 교차 검증

4. LEF 변경/최적화

- 표준 셀 배선 금지영역(OBS, obstruction) 및 포트(Pin/Port) 영역 재정의
- 배선 룰 재정의

    * metal1: 수직 배선/표준 셀 내부 및 지역배선 용

        PITCH=3.0um
        Offset=1.5um
        WIDTH=0.9um [NSPL Rule: 0.8um]
        SPACING=1.05um [NSPL Rule: 1.0um]

    * metal2: 수평 배선/전역배선 용

        PITCH=3.0um
        Offset=1.5um
        WIDTH=1.05un [NSPL Rule: 1.0um]
        SPACING=1.2um [NSPL Rule: 1.0um (배선 길이가 10um보다 긴 경우 1.2um)]

    * metal3: 수직 배선/전역배선 용

        PITCH=3.0um
        Offset=1.5um
        WIDTH=1.2um [NSPL Rule: 1.2um]
        SPACING=1.2um [NSPL Rule: 1.0um (배선 길이가 10um보다 긴 경우 1.2um)]

    * VIA1 & 2 (CONT)

        CUT=0.9um
        EXTENSION=0.6um
        SIZE=2.1um(=0.6+0.9+0.6)
        SPACING=0.9um

디자인 킷 내려받기 깃허브 저장소:
https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git

오픈-소스 내 칩 MPW 튜토리얼:
https://fun-teaching-goodkook.blogspot.com/2024/07/mpw.html







2024년 9월 25일 수요일

내 칩 만들기에 다리를 놓아준 오픈-소스 반도체 설계도구

내 칩 만들기에 다리를 놓아준 오픈-소스 반도체 설계도구

작년(2023년) 여름 "내 칩 MPW 서비스" 공고문을 접하고 잠시 추억에 잠겼었다. 내 칩을 처음 만들어 본 것은 30여년전 이다. 서울대 반도체 공동 연구소에서 학생들의 설계를 칩으로 만들어 준다는 공고를 보고 지원했었다. 그시절 VLSI 설계 과목이 대학원에 개설 되어 있었다. 물론 교과서 조차 모눈종이에 색연필로 그리는 수준이었으니 학교에 변변한 설계 소프트웨어가 있을리가 없었다. 겨우 회로도와 PCB 그리는 도구가 있었고 집적회로 간판을 단 연구실에 알테라사의 맥스 플러스가 도입되는 수준이었다. 다행이 학교에 인터넷이 개통되어 있어서 검색 끝에 Magic이라는 소프트웨어를 찾아냈고 소스 코드를 받아 썬 워크스테이션에서 컴파일 하여 사용할 수 있었다. 아마 그때 경험이 반도체 설계 도구가 평생 관심사가 된 계기였다.

"내 칩 MPW 서비스" 공고문에 "아날로그 CMOS"라는 문구가 눈에 띄었다. 표준 실리콘 공정인데 굳이 아날로그와 디지털 회로를 구분하는 이유가 있을까? 몇차례 통화와 전자메일을 주고받고 회로의 구분이 아니라 "풀-커스텀"이라는 뜻임을 알게됐다. 예상 했던 대로 디자인 룰을 공개 해 줄 터이니 그에 맞게 그려서 제출하면 만들어 주겠다고 한다. 알아서 그려오라는 요구는 30년 전에도 그랬다.

"내 칩 MPW 서비스"는 공공 연구기관에 설치된 반도체 제조공정을 학생들에게 개방해 시스템 반도체 설계 인력 양성에 기여 한다는 취지다. 내 칩을 만들어 보겠다며 흔히 접하는 파운드리 서비스를 제공하는 것이 아니다. 상용의 설계 자동화 도구에 맞춘 검증된 방법론과 각종 표준 셀  및 IP의 제공을 기대한다면 당연히 유료 파운드리 서비스를 찾아야한다. 계약을 맺고 비밀 유지 서약 없이는 파운드리 킷의 내용을 알 수도 없음은 물론이다.

최근 자유 소프트웨어 운동의 결실로 리눅스 운영체제와 소프트웨어 개발도구에 커다란 성과를 이뤘다. 하드웨어 설계도 예외는 아니어서 반도체 설계 도구 역시 큰 발전을 이뤘다. 겨우 레이아웃 도면을 그리는 소프트웨어와 회로 시뮬레이터에 불과 헀던 도구들의 영역은 베릴로그 시뮬레이션 과 합성 그리고 자동 배치배선, 마스크 레이아웃 생성에 이르기 까지 반도체 설계의 전과정을 아우른다. 더욱이 최근 세계유수의 IT기업들과 다소 낮은 정밀도의 반도체 공장들이 손잡고 PDK들을 개방하자 오픈-소스 반도체 설계 자동화 도구 운동은 더욱 가속화 되어 높은 완성도를 자랑한다. 대행사까지 등장하여  낮은 비용으로 내 칩 제작 서비스를 제공하고 있다. 학생과 연구자들은 물론 취미가들의 MPW 제작사례가 늘고 있다. 이들의 PDK는 NDA 따위는 필요없이 표준 셀과 오픈-소스 설계도구들을 모두 공개하고 있다.

"내 칩 MPW 서비스"는 풀-커스텀 설계다. 사실 알아서 설계도면을 그려내기란 쉽지 않다. 더구나 의미있는 디지털 알고리즘을 구현하기 위해 수천개의 트랜지스터가 들어가는 레이아웃을 그리기는 불가능 하다. 오픈-소스 도구들이 성숙해 있다니 내칩 MPW 서비스의 CMOS 공정용 설계 플로우를 세워볼 만 할거라는 생각이 들었다. 합성기와 자동 배치배선기에 사용가능하도록 표준 셀을 그리면 될 일 아닌가 싶었다. 예전부터 꿈꿔왔던 나만의 RTL 합성 방식의 설계와 검증 플로우를 구축하고 싶어졌다. 그렇게 마음먹고 시작한지 일년이 다되가는 지금 겨우 틀이 잡혀나가고 있다. 아쉽게도 두번의 테스트 칩 제작에 실패 했지만 공정을 맡아준 기관의 협조를 받아 상용 툴과 레이아웃 교차 검증을 어느정도 이뤄낸 지금 곧 실리콘 검증이라는 목표를 이룰 수 있으리라 기대한다. 일년여 동안 계획도 없던 밤샘이 여러날 이어지기도 했다. 더이상 없을 것 같았던 밤샘작업이라니, 이게 다 "내 칩 MPW" 때문이다. 오랜 꿈을 이루려는 판에 밤샘 쯤이야!

요즘 반도체 관련 뉴스에 인공지능이 빠지지 않는다. 시스템 반도체 열풍에 이어 이동통신이 휩쓸고 가더니 이제 인공지능이 일상적으로 등장한다. 하지만 대학의 수준이 이를 따라잡고 있는지 의문이다. 두어세대 전에는 대학의 수준이 동네 전파사를 훨씬 뛰어 넘었지만 지금은 한참 뒤쳐진 느낌이다. 그만큼 학생들의 갈증도 더해졌다. 인공지능이 되었든 이동통신이 되었든, 첨단  정보통신 산업의 기초는 트랜지스터 아니겠는가. 대학의 학과목 사이의 경계가 너무 넓다. "내칩 MPW 서비스"가 트랜지스터 회로에서 시스템 반도체로 뛰어버리는 격차를 채울 수 있길 바란다. 내칩 MPW에 오픈-소스 설계도구를 적용하므로서 반도체 공정, 알고리즘의 이식, 설계도구 개발 등 다양한 분야의 반도체 산업을 체험할 기회가 될 것이다.


2024년 9월 6일 금요일

$3,500짜리 MPW, 칩 이그나이트 미니(ChipIgnite-Mini)

$3,500짜리 MPW, 칩 이그나이트 미니(ChipIgnite-Mini)

매튜 벤 Matthew Venn 씨가 자유 실리콘 컨퍼런스 FSiC/Free Silicon Conference 2024에서 행한 키-노트 연설 영상이 있군요.

매튜 벤은 초 저비용 MPW 플랫 폼 Tiny Tapeout을 운용하고 있고 오픈-소스 베릴로그 RTL 합성기로 잘 알려진 YosysHQ 에도 참여하고 있습니다. 이 키노트 연설에서 자유 실리콘 운동의 최근 소식을 전하고 있는데 이어 반도체 설계의 붐이 일어나고 있다고 말합니다. 지난 수십년에 걸친 자유 소프트웨어 운동의 성공이 반도체 설계에도 이어질 전망을 하고 있습니다. MPW에 학부(심지어 고등학교) 학생들의 교육, 연구는 물론 취미가들이 참여하고 있다고 합니다. 자유실리콘 운동은 오픈-소스 반도체 설계도구의 무료사용과 저비용 MPW에 동력을 얻었다는군요.

하루 한뻘짓 Hackaday의 총회(슈퍼콘 2023)에서 매튜씨가 튜토리얼 세션을 진행했나봅니다. 단 3시간만에 테입-아웃까지 마친 껀수가 무려 30개라고.

나만의 칩 제작 앞에 놓은 모든 장벽은 무너졌다. 내 칩 만드는거 별거 아니네!!!


Tiny Tapeout(TT)은 한 칩에 여러개의 프로젝트를 올려서 제작해 줍니다. 웨이퍼를 여러개의 칩으로 나누고(MPW) 그 칩 내부를 다시 여러개 프로젝트가 공유(MPC)하여 최소 비용은 350달러라고 합니다.

전세계 50여개국에서 칩제작 지원이 쇄도 하고 있는데 취미가, 해커, 메이커들의 참여가 두드러집니다. 키노트를 마져 들어보면 재미있습니다. 80년대 마이컴 시대를 연 Z80을 재현한 이야기도 나오는 군요.

Z80은 갔지만 소픈소스 Z80은 영원하라

처음 TT를 시작한 것이 2020년 12월에 첫 테잎-아웃되서  2021년 10월(무려 1년)에 첫 칩을 받았는데 망했다고 합니다. 그해 12월에 2차 3차 MPW 테입-아웃으로 22년에 1월과 2월(3개월로 단축!)에 칩을 받았는데 성공적이었다고.

TT의 칩 면적 나눠쓰기 방식은 특이합니다. 마치 FPGA처럼 설계 면적을 구획지어 놨네요. 1천개의 로직 셀(게이트)가 들어간 165x100um 크기의 로직 타일 단위로 설계 면적이 할당 됩니다. 설계에 좀더 큰 면적을 원하면 비용을 더 내고 확장 할 수 있습니다. 타일 당 클럭과 리셋 그리고 24개의 입출력을 포함합니다. 설계는 논리 회로도를 그릴 수도 있고 베릴로그 합성도 가능 합니다. 디지털 뿐만 아니라 아날로그 회로를 넣을 수도 있군요.

통장 안깨고도 세상에 하나뿐인 칩을 갖는 방법

칩 이그나이트(ChipIgnite)는 eFabless 에서 운용하는 유료 MPW/MPC 인데 1칩은 1만 달러 가량, 4개 프로젝트를 나눠 쓰면 프로젝트당 3,500 달러 입니다. 3.5x5mm 면적에 외부 플래시 메모리 접근, SPI, UART 등을 갖추고 있는 RISC-V가 매크로로 들어가 있습니다. 사용자 설계는 자체 GPIO와 함께 위시본(Wishbone) 버스를 통해 RISC-V에 연결됩니다. 내장형 칩 테스트 체계를 갖추고 있는 셈입니다. 게다가 거의 매달 셔틀을 돌리고 있군요!

SkyWater130 5메탈(미니는 4메탈) 공정으로 오픈-소스 툴 플로우 OpenLane 환경에서 '누구나' 쉽게 아이디어를  내 칩으로 구현할 수 있습니다. 공식 표준-셀이 제공되고 합성은 Yosys, P&R은 OpenROAD, 레이아웃은 KLayout과 Magic 이 사용 됩니다.

"내 칩 MPW"는 0.5um(500nm)의 3중 메탈 공정인데 선폭이 좀 두껍고 메탈층이 한두개 적다는 점과 공식 표준 셀이 없고 개별 표준 셀은 아직 실리콘 검증 되지 않았다는 시급한 과제가 있습니다. 조만간 해소되리라고 예상해 봅니다. 지난 1차 테스트에서 레이어를 빼먹어서 아예 테스트를 못했고 이번에 2차 칩이 나오는데 기대하고 있습니다. 셔틀을 넣을 때마다 경희대 디자인 킷의 레이아웃 생성 테크 파일이 계속 수정을 거듭하게 되는군요. 않되면 3차, 4차 될때까지 해보려고 벼르고 있습니다.



2024년 8월 24일 토요일

"Verilog-Verilator-SystemC 방법론 기초" [부록] FIR 필터 PE 의 "내 칩MPW" 제출용 GDS 생성

"Verilog-Verilator-SystemC 방법론 기초"

[부록] FIR 필터 PE 의 "내 칩MPW" 제출용 GDS 생성

"Verilog-Verilator-SystemC 방법론 기초"는 "내 칩(My Chip) MPW 서비스": 오픈-소스 도구 활용 반도체 설계 특별과정 중 두번째 강좌로서 베릴로그(Verilog)와 오픈-소스 시뮬레이션 도구 Verilator 그리고 시스템 수준 검증 방법론 SystemC의 입문 과정이다. 컴퓨팅 언어를 활용한 디지털 회로의 설계와 검증을 다룬다(Quantative approach to digital circuit design using computing language and Open-Source EDA tools).

강의 내용은 아래와 같다.

[1] 도구 설치 [링크]
[2] 설계 언어 Verilog 와 검증 언어 SystemC/C++[링크]
[3] 하드웨어 기술 언어의 코딩 스타일[링크]
[4] 실습: 쉬프트 레지스터 [링크]
[5] 실습: FIR 필터 [링크]
[6] "내 칩 MPW" 요건에 맞춘 FIR 필터의 PE 설계[링크]

[부록] FIR 필터 PE의 "내 칩MPW" 제출용 GDS 생성[링크]

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

목차

i. 사전준비
    i-1. 디자인 킷(Design Kit) 내려받기
    i-2. 디렉토리 구조/심볼 링크 걸기
    i-3. 오픈- 소스 도구 설치(Installing Open-Source Tools)

ii. PE 합성, 자동 배치 및 배선, 레이아웃 검사(Synthesis, Auto-P&R, Layout Check)
    ii-1. 합성(Synthesize)
    ii-2. 합성 후 시뮬레이션(Post-Synthesis/Netlist Timing Simulation)
    
ii-3. 자동 배치(Auto-Placement)
    ii-4. 자동배선(Auto-Routing)
    ii-5. 표준 셀 병합 레이아웃 생성(Migration)
    ii-6. LVS 검증
    ii-7. DRC: 디자인 룰 검사

iii. 적층 비아 검사(Stacked VIA Check)

iv. 레이아웃 네트리스트 시뮬레이션(Layout Netlist Switch-Level Simulation)

v. 입출력 패드 부착(IO Pad)
    v-1. 최상위 레이아웃 작업 디렉토리, chip_top
    v-2. 칩 마킹/로고(Chip Marking/Logo)
    v-3. 패드 배치 계획(Chip-Top plan)
    v-4. 패드 배치 및 배선(Edit Chip-Top & Pad routing)

vi. 최종 GDS 생성(Final GDS generation)

vii. GDS 복기 (Review GDS)

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

i. 사전 준비

"내 칩MPW" 제출용 GDS 생성에 사용된 오픈-소스 반도체 설계 자동화 도구들은 다음과 같다.

    - Yosys, RTL synthesizer, https://github.com/YosysHQ
    - GrayWolf, Auto-Placer, https://github.com/rubund/graywolf
    - QRouter, Auto-Router, https://github.com/RTimothyEdwards/qrouter
    - Magic, VLSI layout editor, https://github.com/RTimothyEdwards/magic
    - KLayout, layout tool, https://www.klayout.de/
    - Netgen, LVS & LVL Netlist compare, https://github.com/RTimothyEdwards/netgen
    - QFlow with ETRI050 tech., https://github.com/RTimothyEdwards/qflow
    - SystemC, C++ class library for system level simulation & modeling, https://systemc.org/
    - Verilator, Verilog to SystemC/C++ converter, https://www.veripool.org/verilator/
    - gtkWave, digital waveform viewer, https://gtkwave.sourceforge.net/
    - ICARUS Verilog, HDL Simulator, https://github.com/steveicarus/iverilog


i-1. 디자인 킷 내려받기

표준 셀 기반 RTL 디자인 킷(Standard Cell Based RTL Design Kit)과 각 도구의 설치 스크립트는 아래의 깃-허브 저장소(github repository)에서 내려받을 수 있다.

    https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git

설계를 수행할 컴퓨팅 환경(운영체제)는 마이크로소프트 윈도우즈 11의 WSL2(Windows Sub-system Linux)에 설치된 리눅스 우분투 20.04 LTS 다. WSL2와 우분투의 설치 방법은 아래 링크를 참조한다.

    리눅스 및 VLSI 레이아웃 오픈-소스 도구 설치[링크]

리눅스 터미널을 열어 리눅스 프롬프트에서 git 명령으로 경희대학교 디자인-킷을 내려 받는다.

    $ cd
    $ git clone https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git

이 디자인 킷의 튜토리얼 디렉토리에  "내 칩(My Chip) MPW 서비스": 오픈-소스 도구 활용 반도체 설계 특별과정 예제들이 모두 포함되어 있다.

i-2. 디렉토리 구조: 심볼 링크 걸기

내려받은 디자인 킷의 디렉토리 이름이 매우 길어 번거롭다. 아래와 같이 심볼링크를 걸어두자.

    $ ln -s ~/ETRI-0.5um-CMOS-MPW-Std-Cell-DK ETRI050_DesignKit

디자인 킷의 폴더 구조는 아래와 같다.

표준 셀라이브러리가 저장된 디렉토리 digital_ETRI050_m2d 를 digital_ETRI로 심볼 링크를 건다.

    $ cd ~/ETRI050_DesignKit/
    $ ln -s digital_ETRI050_m2d digital_ETRI

앞으로 진행할 실습의 예제의 디렉토리는 ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE 다.  설계 과정마다 사용할 하위 디렉토리를 두고 있다. 예제를 다른 디렉토리로 옮겼을 경우 경로명에 유의한다.

베릴로그 RTL에서 반도체 제조 공정용 GDS를 얻기까지 여러 단계의 추상화 낮춤 과정(Lowering Abstraction Level)을 거친다. 그 과정의 각 단계마다 수많은 중간 파일들이 생성된다. 이 파일들의 역활과 용도의 이해는 매우 중요하다. 중간 파일이 삭제되거나 변경될 경우 모든 수고가 수포로 돌아가는 불상사가 생긴다. 이런 실수는 인간에 의해 발생 되기도 하지만 자동화 도구에 의해 저질러 질 수도 있다. 자동화 도구에 의해 생성되는 파일의 이름이 겹치는 경우 중요 설계 파일을 잃게 된다. 설계 과정 중 추상화 단계 마다 디렉토리로 관리하는 방법은 기초적이지만 사고 예방에 효과적이다.

i-3. 오픈- 소스 도구 설치

디자인 킷을 내려받게 되면 쉘 스크립트 들이 일반 텍스트 파일로 저장된다. 모두 실행가능한 쉘 스크립트, 파이썬 스크립트가 되도록 실행 속성을 부여해준다.

    $ cd
    $ chmod +x ~/ETRI050_DesignKit/Tools/*.sh
    $ chmod +x ~/ETRI050_DesignKit/scripts/*.sh
    $ chmod +x ~/ETRI050_DesignKit/scripts/*.py

Tools 디렉토리에 반도체 설계 오픈-소스 도구들을 모두 설치할 수 있는 스크립트 build_tools.sh 가 있다.

    $ cd ~/ETRI050_DesignKit/Tools
    $ ./build_tools.sh

이 스크립트로 설치할 도구들은 아래와 같다.

    gsl:       GNU Scientific Library
    graywolf:  GrayWolf Auto Placer
    qrouter:   Auto-Router
    irsim:     IRSim Switching Level Simulator
    magic:     VLSI Layout Tool
    klayout:   Layout Tool
    netgen:    NetGen Layout vs Schematic compare
    ngspice43: SPICE simulator
    xschem:    XSchem Schematic entry tool
    SystemC:   SystemC
    iverilog:  iVerilog HDL simulator
    Verilator: Verilog to C++/SystemC converter
    gtkwave:   gtkWave Digital waveform viewer
    yosys:     Yosys RTL Synthesizer
    QFlow:     qflow-1.4.100_etri050

인터넷을 통해 각 도구들의 원시 코드들을 내려 받고 빌드한다. 설치할 도구들이 상당히 많아서 완료하기까지 한시간 이상 소요된다. 중간에 설치를 위해 관리자 비밀번호(password)를 입력해야 하므로 컴퓨터 앞을 떠나지 않도록 한다. 개별 도구의 설치 스크립트도 있으므로 활용토록 한다.

ii. PE 합성 및 자동 배치 배선(Synthesis and Auto-P&R)

예제 디렉토리에 합성과 자동 배치배선을 수행할 수 있는 Makefile 이 준비 되어 있다. 각 도구들의 사용법은 추후 강좌에서 자세히 다룬다.

ii-1. 합성(Synthesize)

베릴로그 RTL의 합성기는 Yosys다.

    $ cd ~/ETRI050_DesignKit/2-6_Lab4_FIR_PE
    $ make synthesize

합성 로그를 통해 베릴로그 RTL 을 읽어 합성하는 과정을 볼 수 있다. 합성 로그 파일은 log/synth.log다. 그 일부는 아래와 같다.

디자인 킷의 리버티(Liberty) 파일 etri05_stdcells.lib 에서 표준 셀의 목록을 먼저 읽는다. 이어 설계 베릴로그 구문으로부터 논리식과 플립플롭, 래치 들을 추출 한다.

    qflow synthesize -T etri050 fir_pe

    --------------------------------
    Qflow project setup
    --------------------------------

    Technology set to etri050
    Regenerating files for existing project fir_pe
    Running yosys for verilog parsing and synthesis

    yosys  -s fir_pe.ys

     /----------------------------------------------------------------------------\
     |  yosys -- Yosys Open SYnthesis Suite                                       |
     |  Copyright (C) 2012 - 2024  Claire Xenia Wolf <claire@yosyshq.com>         |
     |  Distributed under an ISC-like license, type "license" to see terms        |
     \----------------------------------------------------------------------------/

     Yosys 0.44+39 (git sha1 27c143225, clang++ 10.0.0-4ubuntu1 -fPIC -O3)

    -- Executing script file `fir_pe.ys' --

    1. Executing Liberty frontend:
        /usr/local/share/qflow/tech/etri050/etri05_stdcells.lib
        Imported 39 cell types from liberty file.

    2. Executing Verilog-2005 frontend:
        /home/goodkook/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/source/fir_pe.v

    Parsing Verilog input from `/home/goodkook/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/source/fir_pe.v' to AST representation.

    Generating RTLIL representation for module `\fir_pe'.

    Successfully finished Verilog frontend.

베릴로그 RTL로부터 추출한 논리식을 최적화 도구 ABC를 사용하여 최적화 한다.

    3. Executing SYNTH pass.

    .......

    3.22. Executing ABC pass (technology mapping using ABC).

    3.22.1. Extracting gate netlist of module `\fir_pe' to `<abc-temp-dir>/input.blif'..
    Extracted 365 gates and 429 wires to a netlist network with 64 inputs and 41 outputs.

    3.22.1.1. Executing ABC.

    Running ABC command: "<yosys-exe-dir>/yosys-abc" -s -f <abc-temp-dir>/abc.script 2>&1

    ABC: ABC command line: "source <abc-temp-dir>/abc.script".
    ABC: 
    ABC: + read_blif <abc-temp-dir>/input.blif 
    ABC: + read_library <abc-temp-dir>/stdcells.genlib 
    ABC: Entered genlib library with 13 gates from file "<abc-temp-dir>/stdcells.genlib".
    ABC: + strash 
    ABC: + dretime 
    ABC: + map 
    ABC: + write_blif <abc-temp-dir>/output.blif 

    3.22.1.2. Re-integrating ABC results.
    ABC RESULTS:               MUX cells:       16
    ABC RESULTS:               NOT cells:        6
    ABC RESULTS:               AND cells:       37
    ABC RESULTS:              XNOR cells:       30
    ABC RESULTS:                OR cells:       36
    ABC RESULTS:              NAND cells:       33
    ABC RESULTS:             ORNOT cells:       12
    ABC RESULTS:               NOR cells:       30
    ABC RESULTS:            ANDNOT cells:       93
    ABC RESULTS:               XOR cells:       76
    ABC RESULTS:        internal signals:      324
    ABC RESULTS:           input signals:       64
    ABC RESULTS:          output signals:       41

    ............

디자인 킷에서 제공하는 표준 셀로 매핑하여 최종 네트리스트를 얻는다. 베릴로그 네트리스트 fir_pe.rtlnopwr.v 는 P&R에, SPICE 네트리스트 fir_pe.spc 는 LVS의 목적으로 사용된다.

    12. Printing statistics.
    === fir_pe ===
   Number of wires:                741
   Number of wire bits:            833
   Number of public wires:         741
   Number of public wire bits:     833
   Number of ports:                  8
   Number of port bits:             25
   Number of memories:               0
   Number of memory bits:            0
   Number of processes:              0
   Number of cells:                813
     AND2X2                         30
     AOI21X1                        72
     AOI22X1                        17
     BUFX2                           9
     DFFPOSX1                       75
     INVX1                         111
     NAND2X1                       147
     NAND3X1                        83
     NOR2X1                         62
     OAI21X1                       173
     OAI22X1                         7
     OR2X2                           8
     XNOR2X1                         7
     XOR2X1                         12

    Running vlog2Verilog for antenna cell mapping.

    vlog2Verilog -c -p -v vdd -g gnd  -l ...../etri050_stdcells.lef
       -o fir_pe.v fir_pe_sized.v

    Generating RTL verilog and SPICE netlist file in directory
    ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/synthesis

    Files:
        Verilog: synthesis/fir_pe.rtl.v
        Verilog: synthesis/fir_pe.rtlnopwr.v
        Verilog: synthesis/fir_pe.rtlbb.v
        Spice:   synthesis/fir_pe.spc

    ......

    Synthesis script ended on Fri 23 Aug 2024 01:48:17 PM KST

ii-2. 합성 후 기능 검증(Post Synthesis Simulation)

합성을 거치면서 RTL 에서 표준 셀의 네트리스트로 추상화 수준이 낮춰졌다. 표준 셀은 디지털 논리소자들(게이트와 플립플롭)을 뜻한다. 클럭의 시간순 행위 묘사에서 논리회로로 변경된 셈이다. 자동화 도구 합성기(synthesizer)에 의해 수행되는 매우 급격한 추상성 변화다. 기능성의 등가를 시뮬레이션을 통해 확인 한다.

디지털 논리소자의 모델에 시간 지연 정보를 담고 있으므로 합성으로 얻은 소자들의 경로를 바탕으로 타이밍 시뮬레이션도 가능하다. 다만 오픈-소스 Verilator 도구의 한계로 인해 표준셀의 시간 모형 베릴로그를 완벽히 지원하지 못한다. 베릴로그 모형을 가지고 논리 회로의 기능수준에서 검증을 실시한다.

표준 셀의 기능 수준 베릴로그 모형과 타이밍 모형을 비교하면 아래와 같다.

HDL 전용 시뮬레이터를 사용하면 타이밍 시뮬레이션이 가능하다. 표준 셀의 타이밍 베릴로그 모델과 기능 모델은 디자인 킷의 표준 셀 디렉토리에 있다. 타이밍 모델은 khu_etri05_stdcells.v 이다. 기능 모델 khu_etri05_stdcells_func.v 이다.

Verilator로 합성 후 베릴로그 네트리스트 시뮬레이션의 실행은 다음과 같다. 테스트 벤치는 RTL 시뮬레이션 때와 동일한 SystemC 환경이다. Verilator로 변환 한 fir_pe의 베릴로그 네트리스트 synthesis/fir_pe.v 와 지연정보없는 표준 셀 베릴로그 라이브러리를 digital_ETRI/khu_etri05_stdcells_func.v를 시뮬레이션 모델로 쓴다.

    $ make clean
    $ make build_net
    $ make run

Verilator는 UDP를 사용하는 타이밍 모델을 변환 할 수 없다. 타이밍 시뮬레이션을 위해 오픈-소스 베릴로그 시뮬레이터 iVerilog 를 사용한다.

    $ iverilog -g2005-sv -gspecify -o fir_pe  \
        ~/ETRI050_DesignKit/digital_ETRI/khu_etri05_stdcells.v  \
        ../synthesis/fir_pe.v fir_pe_TB.v

준비된 메이크 스크립트를 사용하면,

    $ make clean
    $ make build_tim
    $ make run_tim

베릴로그 테스트 벤치로 수많은 테스트 벡터를 동적으로 생성하기는 거의 불가능하다. 베릴로그는 프로그래밍 언어로 작성된 함수를 연결 할 수 있는 VPI(Verilog Procedural Interface)표준을 가지고 있다. iVerolog는 SystemVerilog의 DPI 표준을 아직 지원하지 않고 있다.

VPI 를 통해 SystemC 테스트 벤치를 활용할 수 있다. Verilator로 변환한 모델 source/fir_pe.v 와 SystemC 테스트벤치 그리고 VPI를 통해 베릴로그 DUT와 테스트 벤치를 모두 통합한 검증 환경은 아래와 같다. 합성한 네트리스트와 표준 셀 타이밍 모델을 DUT로 사용하여 시뮬레이션 할 수 있다.

예제에 VPI와 SystemC 테스트 벤치 활용 타이밍 시뮬레이션용 메이크 스크립트를 포함해 두었다.

    $ cd ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/simulation
    $ cd sc_vpi_co-sim
    $ make build_tim
    $ make run
    $ make wave

VCD 파형으로 지연을 관찰 할 수 있다.


ii-3. 자동 배치(Auto-Placement)

자동배치를 실시하기 전에 핀 배치 파일 fir_pe.cel2 을 만들어 두자.

    $ cd ~/ETRI050_DesignKit/2-6_Lab4_FIR_PE
    $ touch layout/fir_pe.cel2

이어서 자동 배치 수행,

    $ make place

자동배치의 로그 파일은 log/place.log 다. 로그 파일을 살펴보자. 먼저 LEF(Library Exchange Format) 파일에서 배치에 사용할 표준 셀의 크기와 입출력 포트 정보를 읽는다. 

    qflow place -T etri050 fir_pe

    --------------------------------
    Qflow project setup
    --------------------------------

    Technology set to etri050
    Regenerating files for existing project fir_pe
    Qrouter detail maze router version 1.4.87.T
    Reading LEF data from file
        /usr/local/share/qflow/tech/etri050/etri050_stdcells.lef.

    ......

    LEF Read: encountered 0 errors and 8 warnings total.

합성으로 얻은 베릴로그 네트리스트 fir_pe.rtlnopower.v 를 배치도구 graywolf 용 파일 fir-pe.cel로 변환한다.

    Running vlog2Cel to generate input files for graywolf

    vlog2Cel  -l etri050_stdcells.lef -u 100 \
        -o layout/fir_pe.cel \
            synthesis/fir_pe.rtlnopwr.v

    No fir_pe.cel1 file found for project. . .
        no partial blockages to apply to layout.

표준 셀 배치 밀집도(initial density)와 핀 배치를 참조하여 자동 배치를 수행한다. 아래의 경우 밀집도는 0.6 다.

    Running decongest to set initial density of 0.6

    decongest.tcl fir_pe  \
        etri050_stdcells.lef FILL,,, 0.6 \
        --units=100 --lib=etri05_stdcells.lib

    Reading FILL {} {} {} macros from LEF file.

    Unexpected input in LEF file:  Only macro defs were expected!

    Fixed density planning, density = 0.6
    Number of cells = 847, total width = 1088100
    Width of fill = 725400
    Width of decap = 0
    Width of antenna = 0
    Width of body ties = 0

    Done!

    Preparing pin placement hints from fir_pe.cel2
    Running GrayWolf placement
    graywolf  fir_pe

안테나 셀과 필러 셀 그리고 전원 선을 참조한다.

    Running getantennacell to determine cell to use for antenna anchors.
    getantennacell.tcl fir_pe etri050_stdcells.lef
    Running getfillcell to determine cell to use for fill.
    getfillcell.tcl fir_pe etri050_stdcells.lef FILL

    Running place2def to translate graywolf output to DEF format.
    place2def.tcl fir_pe FILL

    Running addspacers to generate power stripes and align cell right edge
    addspacers -stripe 8 225 PG  -p vdd -g gnd -f FILL -O \
        -l  etri050_stdcells.lef -o fir_pe_filled.def fir_pe

    Running arrangepins to adjust pin positions for optimal routing.

    ......

배치를 수행한 결과는 DEF(Design Exchange Format) 파일에 저장된다.

    Running place2def to translate graywolf output to DEF format.
    place2def.tcl fir_pe FILL 

    DEF database: 100 units per micron

    Limits: xbot = -802.0 ybot = -795.0 xtop = 87802.0 ytop = 82395.0
    Core values: 150 150 87450 82050
    Offsets: 150 150
    3 routing layers

    278 horizontal tracks from -600.0 to 82800.0 step 300 (M1, M3, ...)
    296 vertical tracks from -600.0 to 88200.0 step 300 (M2, M4, ...)
    Summary: Total components = 3266
      Fill cells  = 2419
      Other cells = 847

    Done with place2def.tcl

    ......

배선을 수행하면서 설계의 논리식과 직접 관계는 없는 구동 버퍼 등이 추가될 수 있으므로 LVS 용 SPICE 네트리스트를 재생산한다.

    Generating RTL verilog and SPICE netlist file in directory

        2-6_Lab4_FIR_PE/synthesis

    Files:
        Verilog: synthesis/fir_pe.rtl.v
        Verilog: synthesis/fir_pe.rtlnopwr.v
        Verilog: synthesis/fir_pe.rtlbb.v
        Spice:   synthesis/fir_pe.spc

    Running vlog2Spice.

    vlog2Spice -i -l etri050_stdcells.sp -o fir_pe.spc fir_pe.rtl.v

ii-4. 자동배선(Auto-Routing)

자동배선 도구는 Qrouter다. 자동 배치 수행,

    $ cd ~/ETRI050_DesignKit/2-6_Lab4_FIR_PE
    $ make route

자동배선 로그 파일은 log/route.log 다. 배선에 필요한 규칙을 얻기 위해 표준 셀 의 LEF를 읽는다. 배선에 사용할 금속 층의 종류와 두께 이격거리 그리고 배선 방향, 접점(컨택과 비아)의 크기 규칙들이 LEF에 정의 되어 있다.

    --------------------------------
    Qflow project setup
    --------------------------------

    Technology set to etri050
    Regenerating files for existing project fir_pe
    Running qrouter 1.4.87.T
    qrouter -noc  -s fir_pe.cfg

    *** Running stage1 routing with defaults

    Qrouter detail maze router version 1.4.87.T
    Reading LEF data from file
     /usr/local/share/qflow/tech/etri050/etri050_stdcells.lef.

자동배선의 결과 DEF를 읽어 배선해야 할 내용을 파악한다. 설계 명 fir_pe에 3331개의 서브 셀들이 있다. 필러 셀들이 포함되어서 합성의 결과보다 셀의 갯수가 상당히 증가했다. 배선할 네트의 수는 863개이며 고정된 네트는 없다. 배선에서 제외되는 2개의 특별 네트는 전원 VDD 과 접지 GND 다.

    Reading DEF data from file fir_pe.def.

    Diagnostic: Design name: "fir_pe"
      Processed 0 vias total.
      Processed 3331 subcell instances total.
      Processed 27 pins total.
      Processed 863 nets total (0 fixed).
      Processed 2 special nets total (4 fixed).

    DEF read: Processed 7117 lines.
    Output scale = microns / 100, precision 1
    There are 865 nets in this design.

    *** Running stage1 routing with defaults

자동 배선에 성공했다는 메시지를 봐야한다. 만일 배선에 실패하면 표준 셀 배치 밀집도를 낮춰서 자동 배치부터 다시 진행해야 한다. 표준 셀 배치 밀집도는 project_vars.sh 에서 설정한다. 배선완료 후 DEF, fir_pe_route.def 에 저장한다. 참고로 배치만 마친 DEF 는 fir_pe_unroute.def 다.

    ----------------------------------------------
    Progress: Stage 3 total routes completed: 7498
    No failed routes!
    ----------------------------------------------

    *** Writing DEF file fir_pe_route.def
    emit_routes():  DEF file has 863 nets and 4 specialnets.
    but qrouter wants to write 865 nets and specialnets.

    ----------------------------------------------
    Final: No failed routes!
    ----------------------------------------------

배선으로 인해 생기는 기생 RC 값은 STA(Static Timing Analysis)에서 타이밍 분석에 활용된다. [주] 경희대학교 디자인 킷의 RC 값은 유효하지 않다.

    *** Writing RC file fir_pe_route.rc

    DEF2Verilog -v synthesis/fir_pe.rtlnopwr.v \
            -o synthesis/fir_pe_postroute.v \
            -p vdd -g gnd  -l etri050_stdcells.lef fir_pe_route.def

자동 배선의 과정에서 네트리스트가 변경될 수 있다. 검증을 위해 SPICE 네트리스트를 재생성한다.

    Generating RTL verilog and SPICE netlist file in directory

        2-6_Lab4_FIR_PE/synthesis

    Running vlog2Verilog.
        vlog2Verilog -c -v vdd -g gnd -o fir_pe.rtl.anno.v  \
        fir_pe_postroute.v

    Running vlog2Spice.
        vlog2Spice -i -l etri050_stdcells.sp -o fir_pe.anno.spc  \
        fir_pe.rtl.anno.v

자동화 도구의 사용을 거치면서 발생할 만약의 경우를 대비하여 각 단계마다 검증용 네트리스트를 재생산하고 있다는 점에 주목하자. 이는 자동화 도구를 활용한 설계 플로우의 신뢰도를 담보하는 척도다.

ii-5. 표준 셀 병합 레이아웃 생성(Migration)

배치배선이 완료된 DEF에서 Magic 레이아웃 파일로 변환하는 과정이다. 금속층의 배선 정보를 담고 있는 DEF에 표준 셀을 병합해 넣는다.

    $ cd ~/ETRI050_DesignKit/2-6_Lab4_FIR_PE
    $ make migrate

레이아웃 도구 Magic를 파일 변환 용도로 사용하기 위햐 그래픽 화면 없이 tcl 명령 처리기(tcl interpreter)로 실행한 후 표준 셀 LEF 와 배선한 DEF를 읽어들여 레이아웃을 생성한다.

    qflow migrate -T etri050 fir_pe

    --------------------------------
    Qflow project setup
    --------------------------------

    magic -dnull -noconsole  migrate_fir_pe.tcl

    Starting magic under Tcl interpreter
    Using the terminal as the console.
    Using NULL graphics device.
    Processing system .magicrc file

    Input style lambda=0.30(p): scaleFactor=30, multiplier=1
    Reading LEF data from file
        /usr/local/share/qflow/tech/etri050/etri050_stdcells.lef.

    Reading DEF data from file fir_pe.def.
    DEF read, Line 13 (Error): END statement out of context.
      Processed 3331 subcell instances total.
      Processed 27 pins total.
      Processed 863 nets total.

DEF의 좌표 단위를 Magic의 테크 파일 단위에 맞춘다.

    Generating LEF output fir_pe.lef for cell fir_pe:
    Diagnostic:  Write LEF header for cell fir_pe
    Diagnostic:  Writing LEF output for cell fir_pe
    Diagnostic:  Scale value is 0.150000

표준 셀 레이아웃에서 내부의 포트와 트랜지스터 정보를 추출하여 회로검증용 SPICE 네트리스트를 추출 한다.

    Extracting FILL into FILL.ext:
    Extracting INVX1 into INVX1.ext:
    Extracting NAND3X1 into NAND3X1.ext:
    ......
    Extracting DFFPOSX1 into DFFPOSX1.ext:
    Extracting CLKBUF1 into CLKBUF1.ext:
    Extracting INVX8 into INVX8.ext:

    Extracting fir_pe into fir_pe.ext:
    exttospice finished.

레이아웃 디렉토리 layout 에 있는 Magic 의 자원 정의(resource context) 파일 .magicrc 을 참조하여 레이아웃 파일을 생성하게 되므로 표준 셀을 모아놓은 경로가 명시 되어야 한다. 테크 파일과 표준 셀의 경로(path)가 명시된 .magicrc 은 아래와 같다.

    #-----------------------------------------------------
    # .magicrc startup file for ETRI050 project under qflow
    #-----------------------------------------------------

    path sys +/usr/local/share/qflow/tech/etri050
    tech load SCN3ME_SUBM.30.ETRI -noprompt

    addpath ~/ETRI050_DesignKit/digital_ETRI

생성된 Magic 의 레이아웃은 ./layout/fir_pe.mag 다.

ii-6. LVS 검증

합성으로 얻은 네트리스트는 자동 배치와 배선의 과정을 거쳐 레이아웃 도면으로 변한다. 배선 자동화 도구 역시 소프트웨어로서 오류(bug)가 있을 수 있다는 점을 간과 해서는 않된다. 자동배선 도구가 엄청난 량의 네트를 배선하면서 배선이 성공적으로 수행되었다는 보고를 하더라도 안심할 수 없다. 변환이 이뤄질 때마다 등가성 검증은 필수다.

LVS(Layout Vs. Schematics)는 회로도와 레이아웃의 등가성을 확인하는 절차다. 합성과 자동배치로 얻은 네트리스트를 자동 배선 후 표준 셀 병합으로 얻은 레이아웃에서 추출한 네트리스트와 비교하여 두 트랜지스터 회로의 등가성을 확인한다. SPICE 네트리스트를 비교하는 도구는 netgen 이다.

    $ cd ~/ETRI050_DesignKit/2-6_Lab4_FIR_PE
    $ make lvs

로그 파일을 살펴보면 다음과 같다.

    qflow lvs -T etri050 fir_pe

    --------------------------------
    Qflow project setup
    --------------------------------

    Technology set to etri050
    Regenerating files for existing project fir_pe
    Warning:  No migration logfile found.
    Running netgen
    netgen -batch lvs "fir_pe.spice fir_pe" \
                      "synthesis/fir_pe.spc fir_pe" \
            etri050_setup.tcl comp.out -json -blackbox

    ......

    Contents of circuit 1:  Circuit: 'fir_pe'
    Circuit fir_pe contains 847 device instances.
      Class: OR2X2                 instances:   8
      Class: AOI22X1               instances:  17
      Class: NOR2X1                instances:  62
        ......
      Class: DFFPOSX1              instances:  75
      Class: INVX8                 instances:   1
    Circuit contains 865 nets.

    Contents of circuit 2:  Circuit: 'fir_pe'
    Circuit fir_pe contains 847 device instances.
      Class: OR2X2                 instances:   8
      Class: AOI22X1               instances:  17
      Class: NOR2X1                instances:  62
        ......

      Class: DFFPOSX1              instances:  75
      Class: INVX8                 instances:   1
    Circuit contains 865 nets.
    Circuit 1 contains 847 devices, Circuit 2 contains 847 devices.
    Circuit 1 contains 865 nets,    Circuit 2 contains 865 nets.

    Final result:
    Circuits match uniquely.

SPICE 네트리스트 양식으로 표현된 두 회로가 완벽히 일치한다는 결과를 얻었다.


ii-7. DRC: 디자인 룰 검사

레이아웃은 반도체 공정도면의 기하학적 표현이다. DRC(Design Rule check)는 레이아웃(평면도)이 반도체 제조 공장에서 허용하는 정밀도의 한계를 준수하고 있는지 검사한다. DRC를 수행하는 도구는 Magic 이다. 자동배선까지 끝낸 레이아웃 fir_pe.mag 이 저장된 디렉토리로 이동한 후 Magic을 실행한다.

    cd ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/layout
    magic -d XR fir_pe.mag

레이아웃을 편집할 수 있는 그림 창과 tcl 명령창이 열린다. 명령창에 DRC 기능을 켜고 포이터(마우스) 커서의 스냅을 해제한다.

    % drc on
    % grid off; snap grid

그림 창 의 메뉴 Options>DRC Manager 를 선택하면 디자인 룰을 위배한 목록을 보여주는 창이 열린다.

DRC 항목을 내려보면 위배된 지점의 위치가 나열된다. 해당 지점을 선택하고 확대(Zoom) 버튼을 누르면 오류가 난 지점을 보여준다.

하위 셀의 비아(via)가 배선으로 사용된 금속2(Metal2)와 너무 가깝다. 오류난 지점에 마우스 커서를 놓고 select 명령의 단축키 's' 를 눌러 동일 네트 인지 확인 한다. 동일 네트는 금속2로 메꿔준다.

나머지 오류도 모두 수정해 준다. 디자인 룰 오류가 해소되었는지 최종 확인한다. 표준 셀들이 배치될때 인접한 셀들 사이에 전원과 접지가 공유되도록 겹쳐 있다. 이는 계층적 레이아웃을 평활화(flatten)하면 해결될 것이므로 오류에서 제외한다.

불필요에 하게 표시된 에러 레이어를 삭제한다. 디자인 룰을 적용한 레이아웃을 저장하고 종료한다.

    % view
    % select top cell
    % drc off
    % erase errors
    % save fir_pe
    % quit

수동으로 레이아웃이 편집되었다. 아무리 세심하게 수정 했더라도 실수로부터 자유로울 수 없다 수정한 레이아웃에서 회로 네트리스트를 추출하여 LVS 검사를 실시한다.

Magic 레이아웃 파일에서 SPICE 네트리스트를 추출하는 스크립트를 디자인 킷 scripts 디렉토리에 작성해 두었다.

    $ ~/ETRI050_DesignKit/scripts/extract_spice.sh fir_pe

netgen 으로 LVS 를 실시한다.

    $ netgen -noc -batch lvs \
        "fir_pe.spice fir_pe"../synthesis/fir_pe.spc fir_pe" \
        ~/ETRI050_DesignKit/tech/etri050_setup.tcl \
        LVS_fir_pe.txt

레이아웃에서 추출한 네트리스트 fir_pe.spice 와 합성으로 생성된 네트리스트 ../synthesis/fir_pe.spc 를 트랜지스터 회로 수준에서 비교한다. LVS 결과 로그는 LVS_fir_pe.txt다.

Subcircuit summary:

Circuit 1: NAND2X1                 |Circuit 2: NAND2X1
-----------------------------------|---------------------------------
pfet (2)                           |pfet (2)
nfet (2)                           |nfet (2)
Number of devices: 4               |Number of devices: 4
Number of nets: 6                  |Number of nets: 6
---------------------------------------------------------------------
Netlists match uniquely.

    ...........

Circuit 1: INVX8                   |Circuit 2: INVX8
-----------------------------------|---------------------------------
Y                                  |Y
A                                  |A
vdd                                |vdd
gnd                                |gnd
---------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes INVX8 and INVX8 are equivalent.

Subcircuit summary:
Circuit 1: fir_pe                  |Circuit 2: fir_pe
-----------------------------------|---------------------------------
NAND2X1 (147)                      |NAND2X1 (147)
OAI22X1 (7)                        |OAI22X1 (7)
DFFPOSX1 (75)                      |DFFPOSX1 (75)

    ......

CLKBUF1 (8)                        |CLKBUF1 (8)
INVX2 (10)                         |INVX2 (10)
INVX8 (1)                          |INVX8 (1)
Number of devices: 847             |Number of devices: 847
Number of nets: 865                |Number of nets: 865
---------------------------------------------------------------------
Netlists match uniquely.
Subcircuit pins:
Circuit 1: fir_pe                  |Circuit 2: fir_pe
-----------------------------------|-------------------------
Vld                                |Vld
Yin[1]                             |Yin[1]
Yin[2]                             |Yin[2]
Xout[0]                            |Xout[0]
Xout[1]                            |Xout[1]

    ......                              ......

Yout[3]                            |Yout[3]
Rdy                                |Rdy
Cin[3]                             |Cin[3]
Cin[1]                             |Cin[1]
Cin[5]                             |Cin[5]
Cin[0]                             |Cin[0]
clk                                |clk
gnd                                |gnd                      
vdd                                |vdd
Xin[3]                             |Xin[3]

                ......
---------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes fir_pe and fir_pe are equivalent.
Final result: Circuits match uniquely.

netgen 의 LVS 는 SPICE 네트리스트 양식을 가지고 두 회로의 하위 회로 트랜지스터에서부터 배선된 네트, 입출력 포트까지 상당히 정밀하게 비교해준다.


iii. 적층 비아 검사(Stacked Via Check)

비아 (VIA)는 인접 금속층 사이의 접점이다. 비아를 겹쳐 놓아 다층 금속 간 접점을 만들기도 하지만 "내 칩 MPW" 공정은 적층 비아(Stacked VIA)를 허용하지 않는다.

자동 배선 도구 qrouter 가 적층 비아를 활용하지 않도록 Qflow 프로젝트 파일 project_vars.sh 에 다음과 같이 설정해 놓았다.

    set via_stacks = none

하지만 qrouter는 완벽히 차단하지 못하기 때문에 이를 찾아내 수정해 주어야 한다. 경희대학교 표준 셀 디자인 킷은 적층 비아를 찾아내는 파이썬 스크립트 check_via_stack.py 를 제공한다. 이 스크립트의 명령줄 사용법은 다음과 같다.

먼저 레이아웃이 저장된 폴더로 이동 후,

    $ cd ~/ETRI050_DesignKit/2-6_Lab4_FIR_PE
    $ cd layout

적층 비아 검사 스크립트 실행,

    $ ~/ETRI050_DesignKit/scripts/check_via_stack.py fir_pe m2contact m3contact 6

    Mult=1 / Div=2
    Stacked #1
    << m2contact >> rect 5453 2273 5467 2287
    << m3contact >> rect 5453 2273 5467 2287
    Box(Scaled): 2726 1136 2733 1143

    Stacked #2
    << m2contact >> rect 553 633 567 647
    << m3contact >> rect 553 633 567 647
    Box(Scaled): 276 316 283 323

    Stacked #3
    << m2contact >> rect 2153 633 2167 647
    << m3contact >> rect 2153 633 2167 647
    Box(Scaled): 1076 316 1083 323

    Stacked #4
    << m2contact >> rect 1013 113 1027 127
    << m3contact >> rect 1013 113 1027 127
    Box(Scaled): 506 56 513 63

    ***************************************
    4 Stacked Contact and/or Via found!
    Magic layout "fir_pe_Stacked.mag" created with DRC error layer

Magic 레이아웃 fir_pe.mag을 읽어 VIA1(m2contact, 금속1 과 2층의 접점)과 VIA2(m3contact, 금속2 와 3층의 접점)의 중심 간격이 6 그리드(1.8um) 이내인 경우 겹침으로 판정하여 이를 에러 레이어로 표시하고 fir_pe_Stacked.mag 에 저장한다.

겹친 비아 검사로 발견된 4개의 비아를 수정해준다.

    $ magic -d XR fir_pe_Stacked

전체 도면에서 겹친 비아로 표시된 위치를 찾기 위해 명령창에 다음과 같은 명령을 수행한다. 겹친 비아는 실제로 drc 오류는 아니지만 겹친 비아를 검사하면서 레이아웃에 오류 표기를 해놓았다.

    % view
    %select top cell
    % expand
    % drc find next
    Error area #1:
    Error area #2:
    Error area #3:
    Error area #4:

위의 명령으로 4곳의 오류 영역 중 하나가 편집 상자로 선택된다. 상자를 확대해보자.

    % findbox zoom

두 비아가 완전히 겹쳐 있어서 외형적으로 구분되지 않는다. 커서 상자 영역을 선택하여 레이어를 조회하면 두 메탈 컨택이 있다고 알려준다.

    % select area
    % what

두 비아 중 하나를 골라 이동시켜 겸친 비아를 해소한다.

겹친 비아를 찾아 모두 오류를 수정해 준다. 아래 명령으로 다음 겹친 비아를 찾아 상자를 이동 시킨 후 확대,

    % drc find next; findbox zoom

키보드 단축 키를 사용하면 레이아웃 편집이 수월하다. 레이어 편집 시 유용한 Magic의 키보드 단축키는 아래와 같다.

    v - view 전체 보기
    x - expand 하위 셀 내부 보기 확장
    X - un-expand  하위 셀 내부 감추기
    z - zoom in 확대
    Z - zoom out 축소

    s - select 마우스 포인터 아래 레이어 선택
    a - select area 상자 아래 레이어 선택

    숫자키 패드:
        5 - zoom box 상자 영역확대
        4/8/6/2 - move left/up/right/down 선택된 레이어 이동

    화살표 키:
        pan left/up/right/down 화면 이동

겹친 비아를 모두 해소된 레이아웃을 저장하고 Magic 종료,

    % view
    % select top cell
    % erase errors
    % save fir_pe

적층 비아 검사를 다시 실시하여 모두 해소 되었는지 확인한다.

    $ ~/ETRI050_DesignKit/scripts/check_via_stack.py fir_pe m2contact m3contact 6

편집한 레이아웃에 대하여 네트리스트 추출과 LVS 검사를 반복적으로 실시한다.

    $ ~/ETRI050_DesignKit/scripts/extract_spice.sh fir_pe

    $ netgen -noc -batch lvs \
        "fir_pe.spice fir_pe"../synthesis/fir_pe.spc fir_pe" \
        ~/ETRI050_DesignKit/tech/etri050_setup.tcl \
        LVS_fir_pe.txt

Magic을 그래픽 편집 창 없이 명령줄 만 띄워 디자인 룰 검사 재실시 한다. 

    $ magic -dnull -noconsole

Magic의 tcl 명령줄 프롬프트에서 drc 를 수행 하는 절차는 아래와 같다.

    % box 0 0 0 0
    % load vtop.mag -force
    % select top cell
    % drc on
    % drc check
    % drc statistics
    % drc count
    % drc find next

레이아웃 편집과 LVS 검사 및 DRC 를 반복적으로 수행 하면서 위의 명령들 일일이 입력하기 지루하다. 배쉬 쉘 스크립트를 만들어 두고 활용하면 편리하다.

LVS 검사 쉘 스크립트 run_lvs.sh 는 다음과 같다.

    #!/usr/bin/bash

    if [[ $# -ne 1 ]]; then
        echo " <Layout Name> missing."
    exit 2
    fi

    # Extract Spice for LVS
    ~/ETRI050_DesignKit/scripts/extract_spice.sh $1

    # LVS check with Synthesis netlist
    netgen -noc -batch lvs \
        "$1.spice $1" \
        "../synthesis/$1.spc $1" \
        ~/ETRI050_DesignKit/tech/etri050_setup.tcl \
        LVS_$1.txt

DRC 쉘 스크립트 run_drc.sh 는 다음과 같다.

    #!/usr/bin/bash

    if [[ $# -ne 1 ]]; then
        echo " <Layout Name> missing."
        exit 2
    fi

    drc off
    box 0 0 0 0
    load $1.mag -force
    view
    select top cell
    select area
    expand
    drc on
    drc check
    drc count
    drc why
    drc statistics
    box
    quit -noprompt
    EOF

쉘 스크립트를 활용, LVS 검사를 실시하여 합성 네트리스트와 레이아웃 네트리스트가 등가임을 확인한다.

    $ ~/ETRI050_DesignKit/scripts/run_lvs.sh fir_pe

    Circuit 1 contains 847 devices, Circuit 2 contains 847 devices.
    Circuit 1 contains 865 nets,    Circuit 2 contains 865 nets.

    Final result:
        Circuits match uniquely.

쉘 스크립트를 활용, DRC 를 실시하여 디자인 룰 오류가 없음을 확인한다.

    $ ~/ETRI050_DesignKit/scripts/run_drc.sh fir_pe

    Total DRC errors found: 0
    This layer can't abut or partially overlap between subcells
    Design-rule checker statistics (recent/total):
        Squares processed: 0/0
        Tiles processed: 250731/250731
        Edges pieces processed: 514947/514947
        Constraint areas checked: 2535603/2535603
        Multi-tile constraints: 1833408/1833408
        Interaction areas processed: 72/72
        Tiles processed for interactions: 250731/250731
        Tiles processed for arrays: 0/0
    Root cell box:
    width x height  (   llx,  lly  ), (   urx,  ury  )  area (units^2)
    microns:  895.050 x 832.050  (-9.450, -3.600), ( 885.600,  828.450)  744726.375
    lambda:   2983.50 x 2773.50  (-31.50, -12.00), ( 2952.00,  2761.50)  8274737.00
    internal:   5967 x 5547    (   -63, -24   ), (  5904,  5523 )  33098949

iv. 레이아웃 네트리스트 시뮬레이션

소규모 소자가 포함된 셀(기초 디지털 또는 아날로그 라이브러리)의 경우 전기적 특성을 세밀히 관찰할 목적으로 레이아웃에서 추출한 SPICE 양식의 트랜지스터 네트리스트를 가지고 회로 시뮬레이션 할 수 있다.

"내 칩 MPW" 만 해도 수천개의 트랜지스터를 가진 회로다. 회로 시뮬레이션은 수행 시간을 따져봐도 불가능하다. 이를 극복할 목적으로 다양한 방법론이 제안되었지만 뾰족한 방안은 없다. 회로 시뮬레이션 대신 기능 모델(Bus Functional Model) 수준에서 수행되지만 이 역시 하드웨어와 소프트웨어 융합된 시스템 수준에는 한없이 느리다. 이를 극복할 방법으로 시뮬레이션 가속기, 에뮬레이션 등의 방법이 있으나 비용과 수고에 비하면 큰 효과를 보여주지 못한다. FPGA를 사용한 고속 프로토타이핑(fast proto-typing)이 가장 현실적이다.

중소규모의 디지털 회로에 한하여 스위칭 수준 시뮬레이션을 수행할 수 있다. 레이아웃 에서 추출한 SPICE 네트리스트의 트랜지스터를 스위치로 간주하고 논리 검증을 실시한다. 오픈-소스 스위치 수준 시뮬레이터는 irsim이다.

디자인 킷 튜토리얼에 Magic 의 레이아웃에서 트랜지스터 네트리스트 추출하는 스크립트가 준비되어 있다.

    $ cd ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE
    $ cd irsim
    $ ~/ETR1050_DesignKit/scripts/ext2sim.sh ../chip_top/fir_pe_Core

irsim용 네트리스트 파일은 fir_pe_Core.sim이다. 기초적인 전기특성 파일과 함께 스위치 수준 시뮬레이터를 실행 한다.

    $ irsim ~/ETRI050_DesignKit/digital_ETRI/khu_etri050.prm fir_pe_Core.sim


irsim의 명령줄에서 테스트 명령 스크립트를 읽는다.

    % source fir_pe_Core.tcl

irsim의 사용자 인터페이스는 tcl의 대화형 명령 처리기(interpreter)에 irsim용 명령어를 추가하여 개발되었다. 따라서 tcl의 스크립트 문법체계에 의한 프로시져(함수)를 기술 할 수 있다. 전통적으로 많은 전자 설계 자동화 EDA 도구들의 사용자 인터페이스로 tcl을 채택하고 있으므로 익혀두면 유용하다. 테스트벤치 tcl 스크립트 fir_pe_Core.tcl에 반복적인 테스트 입력을 주고 시뮬레이션을 진행하는 반복적인 명령을 주기 위한 프로시져 sim{} 가 포함되어 있다.

간단한 시험을 위해 아래와 같이 입력을 주어본다.

    % sim 1 1 1
    % sim 1 1 1
    % sim 1 1 1
    % sim 1 1 1

Xin, Cin, Yin 을 모두 1로 주고 3번 반복하면,

    1*1+1 = 2

좀더 복잡한 값을 넣어보자.

    % sim 4 20 100
    % sim 4 20 100
    % sim 4 20 100
    % sim 4 20 100

결과는,

    4*20+100 = 180($00b4)

레이아웃에서 추출한 트랜지스터 회로의 스위칭 모델 시뮬레이션이다.


v. 입출력 패드 부착(IO Pad)

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

"내 칩 MPW" 디자인 킷에 제공된 입출력 패드 셀을 활용 하여 칩을 완성한다. 패키지 칩을 제공 받을 경우 표준칩 배치 레이아웃을 사용하여 최종 GDS 를 생성 한다. 범용 입출력 GPIO 패드들의 목록은 아래와 같다. 전원용 패드 PVDD와 PVSS, 디지털 입력 패드 PIC 그리고 출력용 으로 3종류의 패드 셀이 제공된다.

    Digital Output: POB24/POB8/POB4
    Digital Input: PIC
    VDD: PVDD
    VSS: PVSS


v-1. 최상위 레이아웃 작업 디렉토리, chip_top

검증이 완료된 설계에 입출력 패드를 다는 작업을 실시할 디렉토리를 만들고 이동한다.

    $ cd ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE
    $ mkdir chip_top
    $ cd chip_top

레이아웃 디렉토리에서 Magic 의 자원 설정 파일을 복사한다.

    $ cp ../layout/.magicrc .

자원설정 파일에 패드 라이브러리의 경로 추가,

    addpath ~/ETRI050_DesignKit/pads_ETRI050

LVS와 DRC 검증이 완료된 레이아웃 fir_pe.mag 를 fir_pe_Core.mag 로 복사해온다. 파일 명에 유의한다.

    $ cp ../layout/fir_pe.mag fir_pe_Core.mag

"내 칩 MPW"의 28핀 표준 패드 배치 레이아웃 파일 MPW_PAD_28Pin_IO.mag 을 현재 작업 디렉토리에 fir_pe_Top.mag 로 복사해 온다. 복사해온 파일이 읽기 전용이다. 쓰기 가능하도록 속성 변경해준다.

    $ cp ~/ETRI050_DesignKit/pads_ETRI050/MPW_PAD_28Pin_IO.mag ./fir_pe_Top.mag

    $ chmod +w fir_pe_Top.mag

v-2. 칩 마킹/로고(Chip Marking/Logo)

칩 귀퉁이에 내 칩의 고유 표시를 남기고 싶다면 금속 층으로 MY_LOGO.mag 를 그려두어도 좋다. 또는 디자인 킷에 2비트 흑백 이미지를 .mag 로 변환해주는 파이썬 스크립트가 있다.

아래와 같은 MY_LOGO.bmp 이미지를,

변환하면,

    $ ~/ETRI050_DesignKit/scripts/bmp2mag_m123.py MY_LOGO.bmp

다음과 같은 레이아웃을 얻을 수 있다.

설계 코어에 입출력 패드를 달 준비되었다. 최상위 레이아웃 작업 디렉토리, chip_top에 있어야 할 파일들은 다음과 같다.

    $ ~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/chip_top$ ll

    total 2364
    drwxr-xr-x 2 goodkook goodkook    4096 Aug 25 07:42 ./
    drwxr-xr-x 8 goodkook goodkook    4096 Aug 20 21:13 ../
    -rw-r--r-- 1 goodkook goodkook  663862 Aug 20 21:42 fir_pe_Core.mag
    -rw-r--r-- 1 goodkook goodkook    7129 Aug 25 07:42 fir_pe_Top.mag
    -rw-r--r-- 1 goodkook goodkook     487 Aug 20 21:15 .magicrc
    -rw-r--r-- 1 goodkook goodkook   12062 Aug 20 21:30 MY_LOGO.mag


v-3. 패드 배치 계획(Chip-Top plan)

최상위 칩 fir_pe_Top 에 검증이 완료된 코어 셀 fir_pe_Core을 배치하고 입출력 패드 계획을 세운다.

    $ magic -d XR fir_pe_Top

    % getcell fir_pe_Core
    % getcell MY_LOGO

코어 셀을 확장한 후,

    % view
    % select cell fir_pe_Core_0
    % expand

포트를 위치 확인한다.

    % goto fir_pe_Core_0/clk
    % findbox zoom

Magic의 명령줄은 tcl 문법을 따르기 때문에 대괄호를 직접 쓸 수 없다. 중괄호로 묶는다.

    % goto {fir_pe_Core_0/Xin[0]}

코어의 모든 포트를 찾아 인접한 패드와 배선 계획을 세운다.

범용 코어 fir_pe_Core의 포트와 패드 위치 그리고 사용할 패드 라이브러리를 골라 다음과 같이 입출력 패드 계획을 세웠다. 코어의 포트 이름은 베릴로그 문법에서 유래하여 대괄호가 사용되고 있지만 일부 자동화 도구와 호환성이 없으므로 인스턴스 이름을 붙일 때 밑줄로 변경해 주는 것이 좋다. 이름에 대소문자 구분하지 않는다. 입력 포트의 패드 셀은 PIC를, 출력 포트의 패드 셀은 POB8을 선택 했다. 따라붙은 숫자는 구동력(driving power)을 나타낸다. POB8은 구동력 8mA 다.

    IO-Pad plan: fir_pe_Top
    -----------------------

    Port        PAD#    IO-PAD     Instance
    Name                Cell Name  Name
    -------    ------    --------  --------

    Xout[0]    PAD_0     POB8      XOUT_0
    Xin[1]     PAD_1     PIC       XIN_1
    Xout[1]    PAD_2     POB8      XOUT_1
    Cin[0]     PAD_3     PIC       CIN_0
    Cin[1]     PAD_4     PIC       CIN_1
    Xin[0]     PAD_5     PIC       XIN_0
    Cin[2]     PAD_6     PIC       CIN_2

    Cin[4]     PAD_7     PIC       CIN_4
    Cin[5]     PAD_8     PIC       CIN_5
    Xout[3]    PAD_9     POB8      XOUT_3
    Xout[2]    PAD_10    POB8      XOUT_2
    GND        PAD_11    PVSS      VSS_0
    Cin[3]     PAD_12    PIC       CIN_3
    Xin[3]     PAD_13    PIC       XIN_3

    Xin[2]     PAD_14    PIC       XIN_2
    Yin[0]     PAD_15    PIC       YIN_0
    Yin[1]     PAD_16    PIC       YIN_1
    Yin[2]     PAD_17    PIC       YIN_2
    Yin[3]     PAD_18    PIC       YIN_3
    Yout[1]    PAD_19    POB8      YOUT_1
    Yout[3]    PAD_20    POB8      YOUT_3
    Yout[2]    PAD_21    POB8      YOUT_2

    Yout[0]    PAD_22    POB8      YOUT_0
    clk        PAD_23    PIC       CLK
    Vld        PAD_24    PIC       VLD
    VDD        PAD_25    PVDD      VDD_0
    Rdy        PAD_26    PIC       RDY

코어와 로고가 배치된 최상위 레이아웃 fir_pe_Top 을 저장한 후 Magic 종료,

    % save fir_pe_Top
    % quit

v-4. 패드 배치 및 배선(Edit Chip-Top & Pad routing)

입출력 패드의 배치와 코어 사이의 배선은 수동으로 이뤄진다. 매우 세심한 주의가 요구된다.

패드 배치를 Magic의 레이아웃 그래픽 편집 창에서 입출력 패드를 찾아 변경할 수 있지만 매우 번거롭다. 문서 편집기로 fir_pe_Top.mag 를 열어 위의 계획 편집하는 편이 수월하다.

패드 배선을 위해 최상위 레이아웃을 읽는다.

    $ magic -d XR fir_pe_Top

Magic 에서 외부의 GDS 형식을 들여와 활용 할 수 있다. GDS는 마스크 제작용 레이아웃 형식이다. 레이어 번호, 비아와 컨택 컷 생성 등 Magic 의 편집 체계에 맞지 않으므로 들여오려면 변환 규칙이 필요하다. 이 규칙은 경희대학교 디자인 킷의 Magic 테크파일에 기술되어 있다. 외부 GDS 들여오기 규칙명(tech. name)은 ETRI-G 다. "내 칩 MPW" 디자인 킷에서 제공한 GDS 형식의 GPIO 패드 라이브러리를 Magic 으로 읽어들이는 절차는 다음과 같다.

    cif istyle lambda=0.30(ETRI-G)
    cif ostyle lambda=0.30(ETRI-G)
    gds read ~/ETRI050_DesignKit/pads_ETRI050/ETRI_NSPL_GPIO_231208_Klayout.gds

미리 작성해둔 GPIO GDS 읽기 스크립트는 load_gpio_gds.tcl 다. Magic 명령창에서 스크립트를 수행한다.

    % source ~/ ETRI050_DesignKit/pads_ETRI050/load_gpio_gds.tcl

최상위 레이아웃을 다시 읽으면 코어를 비롯하여 GPIO 패드까지 내부를 볼 수 있다.

    % load fir_pe_Top
    % select top cell
    % expand

패드 계획대로 수정한 최상위 레이아웃 fir_pe_Top 을 읽어 코어와 패드 배선을 수행한다. 패드 배선은 금속 2와 3층을 사용한다. 배선이 매우 길어진다. 배선 굵기는 3~4um 로 하자. 위 그림은 패드 배선까지 마친 최상위 레이아웃이다. 배선까지 마쳤으면 저장 후 종료한다.

vi. 최종 GDS 생성(Final GDS generation)

패드 배선까지 마친 최상위 레이아웃에는 3가지 상이한 조건의 하위 레이아웃을 포함한다.

    1. 코어(Core): DRC와 LVS 검증된 레이아웃이다. 비아와 컨택 컷이 생성되기 전이다.

    2. 입출력 패드(GPIO Pad): 외부에서 GDS로 공급된 라이브러리다. 비아와 컨택 컷이 이미 공정률에 맞춰 생성되었기 때문에 Magic 의 디자인 룰 검사를 수행할 수 없다.

    3. 코어-패드 배선(Core-Pad Routing): 코어와 패드 사이의 배선을 수동으로 실시하였다. DRC 검사가 필요하다.

 최상위 레이아웃에서 위의 3부분을 각각 분리한 후 개별적인 검사와 GDS를 생성다. 파이썬 스크립트 xPad.py 로 패드 부분만 분리한다.

    $ ~/ETRI050_DesignKit/scripts/xPad.py fir_pe

코어와 패드 배선 부분만 분리해 내는 스크립트는 xPin_Route.py다.

    $ ~/ETRI050_DesignKit/scripts/xPin_Route.py fir_pe

분리 작업을 수행한 후 디렉토리 내 파일목록을 확인한다.

~/ETRI050_DesignKit/Tutorials/2-6_Lab4_FIR_PE/chip_top$ ll
total 2408
drwxr-xr-x 2 goodkook goodkook    4096 Aug 25 18:47 ./
drwxr-xr-x 8 goodkook goodkook    4096 Aug 20 21:13 ../
-rw-r--r-- 1 goodkook goodkook  696732 Aug 25 11:38 fir_pe_Core.mag
-rw-r--r-- 1 goodkook goodkook    6602 Aug 25 18:45 fir_pe_Pad.mag
-rw-r--r-- 1 goodkook goodkook    3210 Aug 25 18:47 fir_pe_Pin_Route.mag
-rw-r--r-- 1 goodkook goodkook    9753 Aug 25 15:38 fir_pe_Top.mag
-rw-r--r-- 1 goodkook goodkook     487 Aug 20 21:15 .magicrc
-rw-r--r-- 1 goodkook goodkook   12062 Aug 20 21:30 MY_LOGO.bmp
-rw-r--r-- 1 goodkook goodkook 1622945 Aug 25 07:53 MY_LOGO.bmp.mag
-rw-r--r-- 1 goodkook goodkook   88833 Aug 20 21:35 MY_LOGO.mag

최상위 레이아웃에서 코어의 좌표를 구한다.

    $ magic -d XR fir_pe_Top.mag

    % select fir_pe_Core_0

    % box

GDS 병합에 필요한 코어의 좌측 하단(lower-left) 좌표는 (484.250um, 541.850um) 다. 이어서 코어와 패드 사이의 배선을 열어 DRC를 수행하고 좌표를 구한다.

    $ magic -d XR fir_pe_Pin_Route.mag

    % select top cell
    % drc on
    % drc check
    % drc why
    % box

배선에 DRC 오류는 없다. box 명령으로 fir_pe_Pin_Route 의 좌측하단 좌표가 (441.0um, 441.0um) 를 확인 한다. 다음은 패드 프레임의 좌표 구하기다. 외부에서 GDS로 공급된 라이브러리이므로 DRC 절차는 필요없다.

    $ magic -d XR fir_pe_Pad.mag

    % select top cell
    % box

패드 프레임의 좌측하단 좌표는 (97.5um, 97.5um) 임을 확인 한다.

분리했던 각 부분 레이아웃에 대하여 GDS를 생성하고 병합한 후 최종적으로 평탄화된 GDS를 생성한다. 이 작업은 다소 복잡한데 경희대학교 디자인 킷에 제공하는 스크립트를 사용한다.

    $ ~/ETRI050_DesignKit/scripts/generate_chip.sh
    usage: generate_chip <core name> <pad_x> <pad_y> <route_x> <route_y> <core_x> <core_y>

코어 이름과 앞서 구한 좌표들을 주고 스크립트 실행,

    $ ~/ETRI050_DesignKit/scripts/generate_chip.sh fir_pe 97.5 97.5 441.0 441.0 484.250 541.850

    ........

    fir_pe_Core_F: 410000 rects
    fir_pe_Core_F: 420000 rects
    CIF output style is now "lambda=0.30(ETRI-G)"
    Generating output for cell fir_pe_Top_F

성공적으로 무려 40만개 이상의 사각형 스티치가 포함된 최종 GDS가 생성되었다. GDS 파일 크기는 34Mbyte 에 달한다.

    $ ll *.gds

    -rw-r--r-- 1 goodkook goodkook 34220354 Aug 25 19:32 fir_pe_Top.gds

vii. GDS 복기 (Review GDS)

klayout 으로 생성된 최종 GDS를 복기해본다.

    $ klayout

GDS는 공정 마스크 제작용 파일이다. 레이어들이 숫자로 표시된다. 이름을 표시하려면 File 메뉴에서 레이어 속성을 읽는다.

    File > Load Layer Properties > ~/ETRI050_DesignKit/devel/scripts/ETRI050_CMOS.lyp

수많은 사각형을 육안으로 검사하기는 곤란하지만 들여다 보면 다소나마 안심이 된다. 먼저 겹친 비아가 있는지 확인해 보자. 표시 레이어를 VIA1과 2로 한정했다.

입력 패드에 과전류 제한 고저항 Poly2와 정전기 방지 ESD 레이어가 있다.

그외 각 레이어들을 살펴보며 확인해 보자.