2024년 7월 13일 토요일

"VLSI 레이아웃 설계 기초" [2] XSchem, CMOS 인버터 회로도 작성과 시뮬레이션

"VLSI 레이아웃 설계 기초"
[2] XSchem, CMOS 인버터 회로도 작성과 시뮬레이션

[알림] 아래 내용중 질문, 지적, 보강 등 어떤 사항도 환영 합니다.

"VLSI 레이아웃 설계 기초"는 "내 칩(My Chip) MPW 서비스": 오픈-소스 도구 활용 반도체 설계 특별과정 중 첫번째 강좌다. 오픈 소스 도구의 기초적인 사용법과 레이아웃 설계와 검증을 정성적으로 다룬다(Quantative approach to VLSI layout design using Open-Source EDA tools).

강의 내용은 아래와 같다.

[1] 리눅스 및 VLSI 레이아웃 도구 설치 [링크]
[2] XSchem, CMOS 인버터 회로도 작성과 시뮬레이션 [링크]
[3] Magic, CMOS 인버터 레이아웃 작성과 회로추출 [링크]
[4] Netgen, 추출한 회로 비교(LVS) [링크]
[5] XSchem 실습: 인버터 회로도 (Schematic Design) [링크]
[6] Magic 실습: 인버터 레이아웃 (Layout Design) [링크]
[7] Netgen 실습: 네트리스트 비교 및 회로 시뮬레이션 [링크]
[8] Std-Cell 제작 실습: DFF-SR [링크]

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

목차:

I. 학습 개요
II. 실습 디렉토리 구조
III. NSPL 0.5um CMOS 공정 모델
IV. XSchem 으로 CMOS 인버터 회로도 작성
    IV-1. XSchem 실행
    IV-2. 회로 개체(nmos, pmos) 불러오기
    IV-3. 배선
V. 시뮬레이션
    V-1. 시뮬레이션 환경(테스트벤치)
    V-2. 시뮬레이션 명령
    V-3. 네트리스트 추출
    V-4. 시뮬레이션 실행
V-5. 결과 파형관찰
VI. 결론

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

I. 학습 개요

레이아웃(Layout)은 트랜지스터 회로를 제작하기 위한 도면이다. 무작정 도면을 그려 제조공장에 제출하기 전에 얻고자 하는 대로 작동할 것이라는 보장이있어야 한다. 도면을 그리기 전에 먼저 회로도를 작성한 후 시뮬레이션을 통해 동작을 검증하기로 한다. 검증된 회로를 바탕으로 제조용 도면을 그릴 수 있는 것은 반도체 설계뿐만 아니라 어떤 영역의 개발에서도 당연한 순서다. 트랜지스터 회로도와 레이아웃은 반도체 설계 방법론의 가장 낮은 추상화 수준에 위치한다.

오픈-소스 회로도 그리기 도구로 XSchem, 회로 시뮬레이터는 ngSpice다. 제조공정은 ETRI 0.5um CMOS다. 오픈-소스 도구의 설치법은 링크를 참조한다[1].

본 교육은 반도체 공정이나 트랜지스터 회로를 섬세히 다루려는 것이 아니다. 반도체 설계 도구의 활용과 설계과정을 익히는 목적이다. 연습할 회로는 CMOS 인버터(inverter)다.

II. 실습 디렉토리 구조

설계 자동화 도구를 사용하는 과정에서 수많은 중간 파일들이 생성된다. 이 파일들은 자동화 도구들이 생성하고 사용하기 때문에 인간이 읽기 매우 곤란하다. 설계가 끝나면 정리가 필요한데 자칫 중요 설계 파일이 삭제되는 낭패를 격지 않으려면 디렉토리를 만들어 두고 적절하게 관리되어야 할 것이다.

앞서 도구 설치 절차를 통해 깃-허브에서 디자인 킷을 내려 받았을 것이다[2]. 앞으로 진행할 예제의 편의를 위해 사용자의 홈 디렉토리에 ETRI050_DesignKit 으로 심볼 링크시켜 놓도록 한다.

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

사용자 홈에서 실습할 디렉토리를 만들자. 이번에 실습할 작업 위치는 1-1_Inverter_XSchem 으로 정했다.

    $ cd
    $ mkdir Tutorials
    $ cd Tutorials; mkdir 1-1_Inverter_XSchem
    $ cd 1-1_Inverter_XSchem

III. NSPL 0.5um CMOS 공정 모델

반도체 소자의 물리적 특성은 제조공장의 공정을 따른다. 제조를 의뢰하려는 반도체 공장으로부터 물성 인자들을 제공받게 되는에 이를 PDK(Process Design Kit)라 한다. 회로 시뮬레이션 도구 SPICE 에서 사용될 mos 트랜지스터 모델도 PDK의 일부다. NSPL 0.5um CMOS 공정의 PDK는 KION 을 통해 입수할 수 있다[3]. SPICE 모델의 버젼은 2024년 2월자 버젼으로 파일명은 05cmos_model_240201.lib 다. 모델 파일은 디자인 킷의 tech 폴더에 저장되었다.


IV. XSchem 으로 CMOS 인버터 회로도 작성

회로도는 작성 도구는 XSchem 이다.

IV-1. XSchem 실행

XSchem으로 아래와 같은 인버터 회로를 작성하자. XSchem을 실행,

    $ xschem

XSchem의 GUI 화면에 보이는 메뉴는 많은 기능 중 극히 일부분이다. 많은 기능들을 단축키로 지정해 놓고 있다. 단축키를 사용하면 회로 그리기의 생산성을 높일 수 있다. 툴 사용법은 그저 생산성 향상의 방안 일 뿐이다. 필요할 때마다 찾아 익히도록 하자. 메뉴의 Help > Keys 를 따라가면 모든 단축키들을 볼 수 있다. 편집 메뉴의 단축키는 아래와 같다.

마우스 버튼의 기본기능은 아래와 같다.

- '왼쪽 버튼'으로 회로 개체 선택한다. '왼쪽버튼 더블클릭'으로 선택한 회로 개체 속성 편집 창을 연다.
- '오른쪽 버튼'은 회로 편집용 팝-업 메뉴를 띄운다.
- '중앙 버튼'을 누른채 마우스를 움직이면 회로도면을 상하좌우로 이동 시킨다.
- '휠'은 도면을 확대 또는 축소한다.

IV-2. 회로 개체(nmos, pmos) 불러오기

도면상에 마우스 오른쪽 버튼을 눌러 팝-업 메뉴를 띄운 후 'Insert Symbol'을 선택한다. 단축키는 'Ins' 다.

XSchem 에서 기본적으로 제공되는 심볼들 중 하나를 고를 수 있다. nmos-sub.sym 과 pmos-sub.sym를 선택 각각 선택하여 배치한다.

범용 mos의 심볼로서 레이아웃으로 그리게 될 트랜지스터의 폭(width)과 길이(length)가 인수화 되어있다. 기본 값은 폭 5um, 길이는 0.18um 다. NSPL 0.5um CMOS 공정의 트랜지스터 디자인 룰(POLY1/3.PL1.W1)에 맞도록 길이를 0.5um 로 변경해야 한다.

IV-3. 배선

결선 도구를 써서 두 mos 트랜지스터로 구성된 인버터 회로를 배선한다. 결선 도구의 단축키는 'w'다.

전원 VDD와 접지 GND 심볼을 붙인다. 결선에 붙일 라벨 객체의 심볼은 lab_wire.sym 이다. 이 역시 인수화 심볼이므로 더블-클릭하여 속성 편집 창을 불러내 적절한 라벨을 붙여준다.

V. 시뮬레이션

인버터 회로 작성이 완료되었다. 다음은 회로 시뮬레이션이다. 시뮬레이션을 통해 동작이 검증되어야 설계라고 할 수 있다.

V-1. 시뮬레이션 환경(테스트벤치)

시뮬레이선을 위한 시험 환경을 구축하자. 전원 공급기와 입력에 넣어줄 신호를 정의한다. 입력 신호는 변화하는 전압으로 표현하게 되므로 개체 심볼은 vsource.sym 를 사용한다. 전원 공급기의 전압원(voltage source) 이름은 vdd, 전압은 5V 고정한다. 입력 신호의 전압은 시험을 위해 변화를 줄 것이다. 일단 전압원의 이름을 vin으로 지정해두고 초기 전압 값은 0으로 놓자.

V-2. 시뮬레이션 명령

회로 시뮬레이션을 수행하기 위한 명령을 작성해 보자. 시뮬레이터는 ngSpice다. 회로 시뮬레이터 SPICE를 기반으로 만들어진 오픈-소스 도구다. 시험 입력을 주는 방법은 관찰하려는 목적에 따라 매우 다양하다. 시간상 신호의 변화를 관찰하거나 주파수 응답특성을 측정 할 수 있다. 회로에서 관찰할 물리량은 기본적으로 전압(V)과 전류(I)이며 그로부터 전력을 살펴볼 수 있다. SPICE 시뮬레이터에 관한 동영상 교재도 매우 다양하게 많다[]. 시뮬레이션 도구 사용법을 다룰 목적이므로 간단하게 입력의 전압 변화에 반응하는 인버터 회로의 출력 전압과 전류변화를 관찰하기로 한다. 시뮬레이션 명령 심볼 simulator_commands_shown.sym 을 회로도에 삽입하고 속성을 아래와 같이 편집 해주자.

심볼 속성 중 value="" 에 SPICE 시뮬레이션 명령을 추가했다. NSPL 0.5um 공정의 mos 트랜지스터 특성 인자들을 불러들이기 위해 .include 명령이 사용되었다. 이어 입력 전압원 vin의 변화를 .dc 로 기술 하였다. 전압원 vin에 대하여 0 볼트에서 5볼트까지 변화 시키는데 증분량은 0.01볼트라는 뜻이다. 단순한 증감 뿐만 아니라 삼각함수를 포함하여 각종 수학식을 동원 할 수 있다. 입력 신호를 주는 방법을 간략하게 요약한 문서 [5]가 유용할 것이다.

V-3. 네트리스트 추출

회로도로부터 네트리스트를 추출해내야 한다. 그림은 인간이 시각적으로 파악하기 좋은 형식일 뿐이다. 컴퓨터 프로그램이 회로를 읽으려면 구문으로 표현되어야 한다. SPICE는 이를 위해 간단하지만 정교한 문법체계를 갖추고 있다. 회로를 구성하는 객체 간의 연결관계를 문법에 따라 구문으로 표현한 것을 네트리스트(netlist)라 한다.

앞서 그려놓은 회로도에서 SPICE 네트리스트를 뽑아낸다. 네트리스트가 저장되는 디렉토리의 위치는 기본적으로 ~/.xschem/simulation 이다. 이를 현재 회로도 저장 위치에서 하위 디렉토리 simulation 으로 바꿔주도록 하자. 메뉴 simulation > Set netlist Dir 을 따라가면 변경 할 수 있다. XSchem의 설정 파일 ~/.xschem/xschemrc 에서 아래 설정변수를 수정해주면 매번 변경하는 수고를 덜 수 있다.

    set local_netlist_dir 1

V-4. 시뮬레이션 실행

회로도에서 추출된 네트리스트를 읽어 SPICE 시뮬레이션을 실행한다.

시뮬레이션 수행하려 했지만 실패했다면 좌절하지 말자. 이유를 찾아 고쳐보자.

시뮬레이션 실행의 실패는 도구가 만들어준 네트리스트에 문법 오류가 원인이므로 회로도를 수정해야한다. 오류의 원인을 찾기에는 XSchem 에서 보여주는 정보가 너무 적다. ngSpice를 명령줄에서 실행시켜서 문제를 찾아보자. 새 터미널을 열어 네트리스트가 있는 폴더로 이동한다.

    $ cd ~/ETRI050_DesignKit/Tutorials/1_Inverter_XSchem/simulation

XSchem이 생성한 네트리스트는 회로도 이름에 .spice 가 붙는다.


    $ ll

    -rw-r--r-- 1 goodkook goodkook   416 Jul 13 21:36 inverter1.spice

ngSpice를 명령줄에서 실행시켜 보자.

    $ ngspice inverter1.spice

    ....

    warning, can't find model 'pmos' from line
        m2 vout vin vdd vcc pmos w=5u l=0.18u m=1
    Circuit: ** sch_path:
       /home/goodkook/etri050_designkit/tutorials/1_inverter_xschem/inverter1.sch

    Error on line 4 or its substitute:
      m2 vout vin vdd vcc pmos w=5u l=0.18u m=1
    could not find a valid modelname
        Simulation interrupted due to error!

    ngspice 87 ->

원인은 쉽게 찾아졌다. mos 트랜지스터의 모델 이름이 일치하지 않았기 때문이다. NSPL의 디자인 킷의 트랜지스터 모델명은 nfet 과 pfet 인데 회로도에는 nmos와 pmos 였다.

모델명을 수정하고 다시 생성한 네트리스트로 문제없이 시뮬레이션을 수행할 수 있을 것이다.

V-5. 결과 파형관찰

시뮬레이션 결과를 파형으로 관찰하자. 시뮬레이션 결과는 .raw 파일에 저장된다. 시뮬레이션 명령이 DC 변화 관찰이었으므로 해당 양식으로 읽는다.

XSchem의 도면위에 파형을 표시할 수 있다. 메뉴 Simulation > Graphs > Add waveform graph 를 선택하자. 이어서 그래프 객체를 더블 클릭하여 그래프 대화창(graph dialog)에서 원하는 신호를 선택한다. 파형보기는 이외에도 다양한 기능을 가지고 있다[8].

그나저나 인버터의 출력 모습이 좀 괴이하다.

VI. 결론

반도체 설계는 제조도면(Layout)을 그리기 전에 회로 설계와 검증이 선행되어야 한다. 회로도 작성과 회로 시뮬레이션 도구의 사용법에 대하여 간략하게 살펴봤다. 계층적 회로 구성도 가능한 XSchem은 상용도구 못지않은 기능을 갖추고 있다. 참고 [9]의 동영상 교재를 통해 더많은 내용을 배울 수 있을 것이다. 다음편은 Magic 도구로 레이아웃 그리기와 LVS 다.

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

[참조]

[1] 리눅스 및 VLSI레이아웃 도구 설치, https://fun-teaching-goodkook.blogspot.com/2024/07/vlsi-magic.html
[2] NSPL 0.5um CMOS 디자인 킷, https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK
[3] 내 칩(My Chip) MPW 제작 서비스, http://mpw.kion.or.kr/info/notice_list.asp
[4] SPICE 교육 동영상으로 Fesz Electronics 채널의 LTSpice tutorial을 추천한다. https://www.youtube.com/watch?v=JRcyHuyb1V0&list=PLT84nve2j1g_wgGcm0Bv3K4RSl2Jdjsey
[5] SPICE 'Quick' Reference Sheet, https://kolegite.com/EE_library/books_and_lectures/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BD%D0%B0%20%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%B0%D0%BD%D0%B5%D1%82%D0%BE%20%D0%B2%20%D0%95%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0%D1%82%D0%B0/spice_ref.pdf
[6] ROHM Simulation-SPICE, https://techweb.rohm.com/product/simulation/7688/
[7] HSPICE Tutorial, http://www.hkn.umn.edu/resources/files/spice/
[8] xschem displaying simulation waveforms without using external tools., https://youtu.be/bP9w3zm1qv4?si=AjpN9Z4OSgCKeaZt
[9] MADVLSI Tutorials, https://www.youtube.com/playlist?list=PLgsDG5BJZpBTEUaxjfvYUiMPpUPU_vQpr


댓글 없음:

댓글 쓰기