2024년 7월 12일 금요일

"VLSI 레이아웃 설계 기초" [1] 리눅스 및 VLSI 레이아웃 도구 설치

"VLSI 레이아웃 설계 기초"
[1] 리눅스 및 VLSI 레이아웃 오픈-소스 도구 설치

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

"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 [링크]

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

목차:

1. 개요
2. VLSI 레이아웃 설계도구 MAGIC
3. WSL의 설치
    단계 1: WSL 기능 활성화
    단계 2: WSL 업데이트
    단계 3: 우분투 리눅스 설치
4. 레이아웃 설계 오픈-소스 도구 설치
    단계 1. 리눅스 개발용 기본 도구 설치
    단계 2: 필요한 컴포넌트 설치
    단계 3: Magic 빌드 및 설치
    단계 4: XSchem 빌드 및 설치
    단계 5: ngSPICE 빌드 및 설치
    단계 6: netgen 빌드 및 설치
5. 기타 유용한 도구 설치
    5-1. 파일 브라우저 nemo
    5-2. 비주얼 스투디오 코드(MS VisualStudio Code)
    5-3. 기타 유용한 소프트웨어들
    5-4. KiCAD

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

1. 개요

"반도체 설계"라고 하면 반도체 제작을 위한 -트랜지스터 회로의 평면도면(레이아웃, Layout)를 떠올린다. 레이아웃 그리기가 '반도체 설계'의 대명사 처럼 여겨지지만 실은 반도체 설계 도구의 극히 한 부분에 불과 하다.

레이아웃은 '그림판' 소프트웨어로도 그릴 수 있고 심지어 모눈 종이에 그리기도 한다. 다만 수많은 트랜지스터를 실수 없이 그려야 하고 그려놓은 도면이 제대로 그려졌는지 확인 하려면 전용 소프트웨어의 도움을 받아야 한다. 도면을 그리기만 했다면 '그림판' 이지만 도면에서 트랜지스터 회로를 추출하고 시뮬레이션을 수행하며 공정이 가능하도록 길이와 면적 등 기하학적 도면 규정에 맞게 그려졌는지 확인해 줌으로써 '설계' 도구가 되는 것이다.

2. VLSI 레이아웃 설계도구 MAGIC

VLSI 레이아웃 도구는 값비싼 상용 도구들도 있지만 무료 소프트웨어도 있다. MAGIC 은 1990년대 이래 VLSI의 레이아웃(반도체-트랜지스터 회로의 평면도면) 설계에 사용되고 있는 오픈-소스 소프트웨어다[1]. 이 도구는 디자인 룰(Design Rule)이라고 부르는 그리기 규정을 점검(DRC)해 주는 것은 물론 평면도에서 트랜지스터 회로를 추출하는 기능 뿐만 아니라 시뮬레이션과 자동 배선의 기능도 가지고 있다. 계층적 회로 구성도 가능한 MAGIC의 기초 사용법을 알아보자. 여기에 소개되는 내용은 수많은 기능 중의 일부다. 레이아웃을 그리다가 어떤 기능이 아쉽다면 명령어 목록을 참조하자[2]. 분명 원하는 기능이 있을 것이다. 초보자가 필요한 기능이 30년 넘게 이어온 전문 소프트웨어에 없을 수가 없지 않겠는가!

MAGIC은 윈도우즈 운영체제에서도 가능하지만 리눅스(Linux)에서 실행되도록 하자. 반도체 설계 자동화 도구들이 리눅스에서 실행 되므로 이참에 리눅스 운용체제에 익숙해 져 보는 것도 좋다[3]. WSL(Windows Subsystem for Linux)은 윈도우즈 11에서 리눅스를 가상으로 운영할 수 있게 해준다. 오픈-소스 뿐만 아니라 FPGA 반도체 설계 자동화 도구[4]들 그리고 아두이노 개발도구들이 안정적으로 실행된다. USB 장치를 사용하는 하드웨어도 잘 작동한다[5].

3. WSL의 설치

WSL은 마이크로소프트에서 자신있게 제공하는 윈도우즈의 기능이다. 아래와 같이 따라하면 설치에 문제 없을 것이다. 만일 않된다면 자신의 컴퓨터 활용능력부터 점검해보기 바란다.

주의1] WSL이 윈도우즈 10에서도 잘 된다고 하지만 확실치 않다. 윈도우즈 11을 선택하고 반드시 최신 상태로 업데이트 하도록 한다.

주의2] WSL에 우분투 리눅스와 반도체 설계 관련 도구들을 모두 설치하고 작업까지 하려면 250GByte 이상의 하드디스크 용량이 필요하다. 노트북이나 태블릿 PC에서 반도체 설계를 수행 하려면 하드디스크 공간이 부족 할 수 있다. 용량이 부족하면 외장 하드 디스크를 활용하자. 요즘 SSD 외장 하드 디스크의 읽기/쓰기 성능이 상당하다. CPU는 i5의 1Ghz급, 8GBytes의 서피스 태블릿 PC에서도 참을성 만 가지면 "내 칩 MPW" 규모의 반도체 설계를 할 수 있다.

주의3] 마이크로소프트의 WSL 관련 웹페이지[바로가기]에 WSL --install 이라고 하면 알아서 해준다는 내용이 있는데 적절하지 않다. 업그레이드는 물론 처음 설치의 경우에도 '수동 설치 절차'를 따르는 것이 좋다.

단계1: WSL 기능 활성화

설정(Setting) 창에서 '윈도우즈 기능(Windows Features)'을 열어 '윈도우즈 기능 켜기/끄기(Turn Windows features on or off)'에서 아래 기능을 켜도록 한다. 이 기능을 켜면 시스템을 재부팅 할 수도 있다.

    - Linux용 Windows 하위 시스템(Windows Subsystem for Linux)

단계 2: WSL 업데이트

윈도우즈 파워쉘(Power Shell) 커맨드 창을 "관리자 권한"으로 열어 아래와 같이 실행한다. 반드시 버젼 2를 잊지 않도록 한다.

    PS> wsl --set-default-version 2

    PS> wsl --update

단계 3: 우분투 리눅스 설치

마이크로소프트 스토어에서 Ubuntu 를 검색해 20.04.6 LTS 를 받아서 설치한다.

4. 레이아웃 설계 오픈-소스 도구 설치

오픈-소스 소프트웨어들은 설치 실행 형식으로 배포되지 않는다. 원시 코드들이 그대로 배포되므로 사용자가 알아서 빌드해야 한다. 리눅스의 실행환경은 통일된 관리 체계 없이 사용자가 편의에 따라 기능들을 설치운용하기 때문이다. 대단히 유연하지만 초보 사용자에겐 한없이 불편하다. 이를 감안해 "ETRI 0.5um CMOS DK" 디자인 킷에 필요한 오픈 소스 도구들의 설치 스크립트를 제공 한다.

단계 1. 리눅스 개발용 기본 도구 설치

깃-허브에서 "ETRI 0.5um CMOS DK" 디자인 킷을 내려 받도록 하자. 내려받을 위치는 어느 곳이든 좋다. 아래의 예는 사용자 홈 폴더에 Git_Download 를 만들어 앞으로 깃-허브에서 내려받은 파일들을 한곳에 몰아 두기로 한다.

    ~$ mkdir Git_Download
    ~$ cd Git_Download
    ~/Git_Download$ git clone https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git
    Cloning into 'ETRI-0.5um-CMOS-MPW-Std-Cell-DK'...
    remote: Enumerating objects: 694, done.
    remote: Total 694 (delta 0), reused 0 (delta 0), pack-reused 694
    Receiving objects: 100% (694/694), 230.03 MiB | 18.65 MiB/s, done.
    Resolving deltas: 100% (219/219), done.
    ~/Git_Download$

위에서 굵은 글씨는 사용자가 명령줄(command-line)에 입력해야 하는 내용이다. 저렇게 긴 문장을 오탈자 없이 입력하기 어렵다. 다행히 리눅스의 배쉬쉘(Bash Shell)은 마우스 버튼으로 드래그와 복사 및 붙여넣기를 제공한다. 마우스 왼쪽 버튼을 누르고 드래그 한 후 오른쪽 버튼으로 복사 및 붙여넣기 할 수 있다.

단계 2: 필요한 컴포넌트 설치

디자인 킷을 내려받은 폴더로 이동 한 후 Tools 폴더의 설치 쉘 스크립트를 실행 한다. 먼저 오픈-소스 도구들을 실행 하기 위한 각종 컴포넌트들을 설치한다. GCC를 비롯한 개발 도구들과 X 윈도우즈 및 Gtk 그래픽 툴, 그리고 파이썬(Python3), 펄(Perl), 티클/틱(Tcl/Tk)등이다.

사전 설치 컴포넌트 쉘 스크립트 prerequisites.sh에 실행 가능토록 파일 속성을 변경한 후,

    ~/Git_Download$ cd ETRI-0.5um-CMOS-MPW-Std-Cell-DK.git
    ~/.../Tools$ chmod +x prerequisites.sh
    ~/.../Tools$ ls -l prerequisites.sh

    -rwxr-xr-x 1 goodkook goodkook 1435 Apr  6 20:16 prerequisites.sh

실행 하자.

    ~/.../Tools$ ./prerequisites.sh

상당히 많은 내용들이 설치될 것이므로 시간이 다소 걸린다.

단계 3: Magic 빌드 및 설치

Magic 의 소스를 다운 받아 컴파일 및 설치하는 스크립트는 magic_build.sh 다.

    ~/.../Tools$ chmod +x magic_build.sh
    ~/.../Tools$ ./magic_build.sh

컴파일이 진행되는 동안 여러 경고 메시지가 나오지만 걱정할 것 없다. 빌드가 끝나면 설치하기 위해 관리자 권한의 비밀번호를 물어올 것이다. 리눅스를 설치할 때 지정한 사용자 계정이 관리자 이므로 비밀번호를 넣도록 한다.

    $ magic

두개의 창이 뜨는데 하나는 그림판 창, 다른 하나는 명령 창이다.


단계 4: XSchem 빌드 및 설치

회로도 그리기 소프트웨어 XSchem을 설치한다. 내려받기 및 컴파일과 설치하는 스크립트는 xschem_build.sh 다.

    ~/.../Tools$ chmod +x xschem_build.sh 
    ~/.../Tools$ ./xschem_build.sh 

빌드하는 동안 컴파일 에러가 나는 경우가 발생 할 수도 있다. 리눅스 컴포넌트 중 gettext 의 버젼이 맞지 않아서 나는 경우인데,

    .../Tools/xschem/xschem-gaw/po/Makefile.in.in

에서 버젼을 바꿔주고 설치 스크립트를 다시 실행 하면 해결된다.

    GETTEXT_MACRO_VERSION = 0.20

설치가 끝나면,

    $ xschem


단계 5: ngSPICE 빌드 및 설치

회로 시뮬레이터 ngSPICE 설치. SPICE의 오픈-소스 버젼이다. SPICE 시뮬레이터 엔진은 처음부터 공개되었다. 상용 소프트웨어의 회로 시뮬레이터는 사용자 인터페이스를 포함해 자사의 도구에 끼워 넣었을 뿐이다.

    ~/.../Tools$ chmod +x ngspice42_build.sh
    ~/.../Tools$ ./
ngspice42_build.sh

설치가 끝나면 확인.

    $ ngspice


단계 6: netgen 빌드 및 설치

레이아웃 도구 Magic 에서 추출한 회로와 XSchem 회로도에서 추출한 회로도를 비교(LVS, Layout-vs-Schematic)하는 도구는 netgen 이다.

    ~/.../Tools$ chmod +x netgen_build.sh
    ~/.../Tools$ ./
netgen_build.sh

설치가 끝나면 확인.

    $ netgen


5. 유용한 도구 설치

5-1. 파일 브라우저 'nemo'

명령중에서 디렉토리를 탐색하기란 미로찾기 만큼이나 힘겹다. 윈도우즈의 파일 탐색기(File Explorer)로도 WSL의 폴더에 접근 할 수 있지만 심볼링크를 인식하지 못하고 폴더 내용 갱신을 확인 하려면 매번 F5 를 눌러 줘야 하는 등 호환성 문제가 있다. 리눅스도 GUI로 진화된 만큼 GUI 파일 탐색기로 여러가지 있는데 'nemo'가 좋다. 설치하는 방법은 아래와 같다.

    $ sudo apt install nemo

사용자 인터페이스는 아래와 같은 모습이다.

    $ nemo

[주] 리눅스 명령 'apt'는 우분트 리눅스의 패키지 관리자다(Advanced Package Tool). 우분트 공식 패키지 저장소에서 설치파일을 가져다 설치해준다. 해당 프로그램에서 요구하는 관련 패키지들도 확인하여 가져온다. '윈도우즈 업데이트'의 리눅스 버젼 격이다. 사용법은 https://namu.wiki/w/APT#s-5 또는 https://en.wikipedia.org/wiki/APT_(software) 를 참조한다. 'sudo'는 '관리자 권한으로 실행'을 의미한다.

5-2. VisualStudio Code

리눅스의 전통적인 문자 편집기 vi, vim 등이 있지만 고전적인 텍스트 터미널 시절부터 개발된터라 사용하기 매우 불편하다. vi 사용법 만으로도 책 한권 분량이 나올 정도다. 윈도우즈에 익숙한 사용자라면 마이크로소프트에서 제공하는 비주얼 스투디오 코드(MS VisualStudio Code)를 권한다. 마이크로소프트는 고맙게도 리눅스 버젼도 제공한다. 아래 링크에서 설치 묶음 파일(확장자명 .deb)을 내려 받는다.

    https://code.visualstudio.com/download

2024년 7월 현재 버젼은 code_1.91.1-1720564633_amd64.deb 다.

우분투 터미널에서 apt 도구를 이용하여 설치한다.

    $ sudo apt install code_1.91.1-1720564633_amd64.deb

'코드'는 프로그램 작성 편집기로서 구문 인지 기능을 가지고 있다. C/C++ 와 Verilog 코드를 작성할 경우 구문을 인지하여 키워드를 색깔로 구분하여 보여준다. 라이브러리에서 C/C++와 Verilog 를 각각 검색하여 설치하면 효과적이다. 아래 그림은 설치해두면 유용한 확장 라이브러리들을 보여준다.

5-3. 기타 유용한 소프트웨어들

PDF 뷰어,

    $ sudo apt install okular

이미지 뷰어,

    $ sudo apt install gthumb

그림판,

    $ sudo apt install pinta

기왕 리눅스로 나선김에 오피스 소프트웨어는 리브레오피스,

    $ sudo apt install libreoffice

우분투에서 한글 입력기 사용도 가능하다[7].

5-4. KiCAD

PCB 설계도구,

    $ sudo add-apt-repository ppa:kicad/kicad-8.0-releases
    $ sudo apt update
    $ sudo apt install kicad


VLSI 레이아웃을 그리고 시뮬레이션 하는 도구들의 설치가 완료되면 이제 그릴 차례다.

<계속>
----------------------------------------------------------------------

[1] 유튜브에 MAGIC VLSI를 검색해 보면 수많은 동영상 교재들이 검색된다. 아쉽게도 한글은 찾지 못했다.
[2] Magic Command list, http://opencircuitdesign.com/magic/userguide.html
[3] 윈도우즈가 현대 PC 운영체제의 대명사이고 매우 편리하긴 하다. 하지만 반도체 설계작업이 화면에 버튼을 눌러 문서 작성하기처럼 만만하지 않다. 수많은 명령과 옵션이 동원 되어야 한다.
[4] Xilinx FPGA 도구 Vivado/Vitis-HLS 를 WSL에 설치, https://fun-teaching-goodkook.blogspot.com/2024/05/xilinx-fpga-vivadovitis-hls-wsl.html
[5] 아두이노 보드 에뮬레이션, https://fun-teaching-goodkook.blogspot.com/2024/04/etri-05um-cmos-dk-fir8-2systemc.html
[6] 윈도우즈 하위 시스템 리눅스(WSL) 설치 및 제거, https://fun-teaching-goodkook.blogspot.com/2024/03/wsl.html
[7] WSL 우분투 한글화 설정,  https://datanavigator.tistory.com/60

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

[WSL 우분투 한글화 설정/요약]

1. 한글 폰트 설치

    $ sudo apt-get install fonts-nanum*

2. 로케일 설정

    $ sudo dpkg-reconfigure locales

    ko_KR.UTF-8 UTF-8로 체크

3. 터미널 재시작

4. locale 명령으로 LANG=ko_KR.UTF-8 변경 확인

    $ locale

5. 한글 입력기 설치

    $ sudo apt update
    $ sudo apt-get update
    $ sudo apt install fcitx fcitx-hangul fonts-noto-cjk dbus-x11

6. im-config 명령으로 입력기 설정 실행 후 fcitx로 설정

    $ im-config

7. 편집기로 Kor_env 파일을 만들어 아래의 내용 추가

    #!/bin/bash
    export QT_IM_MODULE=fcitx
    export GTK_IM_MODULE=fcitx
    export XMODIFIERS=@im=fcitx
    export DefaultIMModule=fcitx

    #optional
    fcitx-autostart &>/dev/null

    한글 사용이 필요할 때 사용

8. 언어 선택기 설치

    $ sudo apt install language-selector-gnome

9. 한국어 선택

    $ source Kor_env
    $ sudo gnome-language-selector

10. wsl 셧다운 후 재시작

    PS> wsl --shutdown
    PS> wsl

11. 한글 입력기 설치

    $ fcitx-config-gtk3

    왼쪽 아래 + 버튼을 클릭해서 한국어 추가. 한글-영문 전환 키는 ctrl+Space


댓글 없음:

댓글 쓰기