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


2024년 7월 10일 수요일

"내 칩(My Chip) MPW 서비스": 오픈-소스 도구 활용 반도체 설계 특별과정

"내 칩(My Chip) MPW 서비스":
오픈-소스 도구 활용 반도체 설계 특별과정

[주1] 본 과정은 "내 칩 MPW 서비스"에 지원하기 위해 '경희대학교 반도체 전공 트랙'에서 실시하는 비학점 과정으로 모두에게 개방되어 있습니다.
[주2] 학습은 주로 온-라인 블로그를 통해 아뤄질 것이며 필요에 따라 강좌를 실시할 것입니다. 이어질 강좌는 블로그를 참조하십시요. 
https://fun-teaching-goodkook.blogspot.com/

목차:

I. 학습 목표(Objectives)
II. 선수지식의 수준(Prerequisite)
    II-1. 베릴로그 초급 (Basics of Verilog HDL)
    II-2. C++ 언어 초급(Basics of C++)
    II-3. 리눅스(Understanding Linux)
III. 학습할 내용
    III-1. 설계 방법론(Design Methodology)
    III-2. 검증 방법론(Verification Methodology)
IV. 학습에 사용될 도구
    IV-1. 오픈소스 소프트웨어 도구(GNU Build Essential)
    IV-2. 오픈-소스 반도체 설계 자동화 도구(Silicon EDA Tools)
    IV-3. 하드웨어 활용(FPGA, Arduino)
V. 반도체 설계 외 학습 효과
VI. 학습 방법

[주] 설계 툴 설치 방법과 실습에 필요한 하드웨어들을 설명할 예정입니다. 설치와 구입은 각 개인이 알아서 하되 질문은 언재든 환영 합니다. 예제 별 학습 과정은 계속 이어집니다.

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

I. 학습 목표:

본 과정의 목적은 하드웨어 디지털 반도체 설계로서 아래와 같은 목적을 갖는다.

- 베릴로그 HDL로 기술한 디지털 회로 합성
- 반도체 제조 가능한 레이아웃 생성
- FPGA 활용 RTL 검증
- NSPL 0.5u CMOS  공정 "내 칩 MPW 서비스"를 통한 칩 제작
- 공정을 마친 칩의 테스트

아울러 반도체 설계 교과서에 등장하는 각종 용어들의 이해를 목표로 삼는다.

II. 선수지식의 수준

본 과정을 수행 함에 있어 필요한 사전지식의 수준은 아래와 같다.

II-1. 베릴로그 초급: 논리회로와 조합회로를 이해 (Understanding digital logic circuits)

    [참고자료]
    1. Verilog HDL Quick Reference Guide, https://sutherland-hdl.com/pdfs/verilog_2001_ref_guide.pdf
    2. Quick Reference for Verilog HDL, https://web.stanford.edu/class/ee183/handouts_win2003/VerilogQuickRef.pdf

II-2. C++ 언어 초급: 구조체와 크래스, 템플릿을 이해 (Understanding C++ Class and Template at basic level)

    [참고자료]
    1. C++ Cheat Sheet, https://hackr.io/blog/cpp-cheat-sheet-pdf,
            https://github.com/mortennobel/cpp-cheatsheet (on-line)
    2. C++ Reference(on-line), https://cplusplus.com/reference
    3. SystemC Quick Reference Card, https://www.eis.cs.tu-bs.de/klingauf/systemc/systemc_quickreference.pdf

II-3. 리눅스(Linux)

a. 명령줄 이해(Command-Line user interface)

    [참고자료]
    1. Programing with GNU software, https://www.lrde.epita.fr/~akim/gnuprog2.pdf

b. 리눅스 명령들(Linux commands)

    [참고서]
    1. Linux in a Nutshell, https://repo.zenk-security.com/Linux%20et%20systemes%20d.exploitations/Linux-in-a-Nutshell-6th-Edition.pdf

c. 리눅스 프로그래밍(Linux programming)

    [참고서]
    1. The Linux Programming Interface, https://github.com/rangaeeeee/books-raspberrypimagazines/blob/master/The%20Linux%20Programming%20Interface-Michael%20Kerrisk.pdf

[주] 위에 나열된 [참고자료]와 [참고서]를 모두 구입하거나 읽어보라는 것이 아니다. 앞으로 공부 해가며 필요할 때마다, 또는 틈날 때마다 들춰보자. 향후 이어질 강좌에서 자주 언급될 것이다.

III. 학습 내용

주요 학습 내용은 디지털 반도체의 설계와 검증이다.

III-1. 설계 방법론(Design Methodology):

- 베릴로그를 사용하여 디지털 회로 기술
    (Describing Digital Circuits using Verilog HDL)
- SystemC(C++)를 사용 하여 테스트 벤치 작성
    (System Level Testbench using SystemC/C++)
- 합성으로 네트리스트 생성, 자동 배치 배선, 레이아웃 생성
    (Automated Layout generation: Synthesis, Place & Route, GDS generation)

III-2. 검증 방법론(Verification Methodology):

- 베릴로그 기능 시뮬레이션 (Functional simulation)
- 네트리스트 시뮬레이션 (Netlist simulation)
- 레이아웃 검증 (Layout verification: DRC-Design Rule Check, LVS-Layout-vs-Sch)
- FPGA 사용 RTL 검증 및 프로토 타이핑

 Y-차트를 설계 방법론으로 보자.

IV. 학습에 사용될 사용 도구:

오픈-소스 소프트웨어, 하드웨어 그리고 반도체 설계 자동화 도구 활용 함으로써 적은 비용으로 학습 및 실습이 가능하다. 실습에 소요될 비용 목표는 $150 이하로 삼는다.

IV-1. 오픈소스 소프트웨어 도구

알고리즘 개발 및 시스템 수준 검증 환경 구축 도구로 SystemC(C++) 및 데이터 가시화 도구(Python, Multi-media library)들 사용

- GNU Build-essential (GCC, Make,...)
- 스크립트(Python, Tcl/Tk, Perl,...)
- 그래픽스(X-Libs)
- 멀티미디어(SDL)

IV-2. 오픈-소스 반도체 설계 자동화 도구

- 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/

IV-3. 하드웨어 활용

- Open-Source: Arduino MEGA (8-bit)/DUE(32-bit)

- NON Open-Source: FPGA(Gowin, Xilinx,...)

V. 반도체 설계 외 학습 효과:

반도체 설계는 전자공학과 컴퓨터 공학의 학부과정에서 배우는 모든 지식이 동원된다. 따라서 본 과정을 수행하며 반도체 설계 외 학습효과를 얻을 수 있다. 반도체 설계 외에도 진출할 분야는 많다.

- 내장형 시스템 프로그래밍(Embedded system ptograming, Arduino)
- C++ 멀티미디어 프로그래밍(C++ programming, SDL-Simple Direct multimedia Layer)
- 스크립트 코딩(Python, Tcl/Tk, Bash-Shell)

VI. 학습 방법:

본 과정은 철저한 예제 중심의 학습이다. 설계 언어의 구문이나 도구의 사용법을 일일이 다루진 않는다. 다양한 예제를 통해 설계 기법과 방법론을 익히게 될 것이다. 깃-허브를 통해 다양한 예제를 제공할 것이므로 학습자는 자신의 흥미와 수준에 따라 예제를 선택한다.

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

1부: "VLSI 레이아웃 설계 기초"

오픈 소스 도구의 기초적인 사용법과 레이아웃 설계와 검증을 정성적으로 다룬다(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 [링크]


2부: "Verilog-Verilator-SystemC 방법론 기초"

베릴로그(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 생성[링크]

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

디자인 킷:

2024-Sep-28: "내 칩 MPW" NSPL 0.5um CMOS 공정용 표준-셀 디자인 킷 버젼-E 공개 [링크]

2024-Oct-04: "내 칩 MPW" NSPL 0.5um CMOS 공정용 표준-셀 디자인 킷 버젼-F 공개 [링크]


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


예제 들:

Design Kit, https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-Std-Cell-DK
Counter8, https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--Counter8
Array Multiplier, https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--array_multiplier
Booth Multiplier, https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--booth_multiplier
Signed Multiplier, https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--signed_multiplier
6502 CPU, https://github.com/GoodKook/ETRI-0.5um-CMOS-MPW-DK-Example--6502-CPU
ALU8, https://fun-teaching-goodkook.blogspot.com/2024/01/etri-05um-cmos-dk-alu811.html
FIR8, https://fun-teaching-goodkook.blogspot.com/2024/03/etri-05um-cmos-dk-fir8.html
Pong-Game, https://fun-teaching-goodkook.blogspot.com/2024/07/etri-05um-cmos-dk-pong.html

...









2024년 7월 9일 화요일

ETRI 0.5um CMOS DK 예제: 비디오 게임기 "Pong"

ETRI 0.5um CMOS DK 예제: 비디오 게임기 "Pong"

"알기만 하는 사람은 좋아하는 사람만 못하고, 좋아하는 사람은 즐기는 사람보다 못하다"

<논어>의 어느 구절을 현대에 맞게 표현 한 글이라고 한다. 베릴로그와 반도체 설계를 교과목으로 배우다 보면 마땅한 예제가 없기도 하고 수많은 문법들을 모두 다뤄야 한다는 압박에 수박 겉핧기 식이 되어 버린다. 그러다 조별 과제가 떨어지면 덩달아 반도체에 정나미도 떨어질까봐 염려된다. 이제 학기도 끝났고 어렴풋이 베릴로그와 반도체 설계의 맛을 봤다면 이제 즐겨볼 차례다. 거의 모든 베릴로그 교과서에 '교통 신호 제어기(Verilog Traffic Light)'나 '자판기(Verilog Vending Machine)' 등이 예제로 등장한다. 이들 예제들은 나름대로 유한 상태 머신(FSM)의 기술방법을 설명하기에 훌륭하긴 하지만 심심하다. 지루한 학기가 끝난 지금 여전히 반도체 설계에 애정이 남아 있길 바란다.

베릴로그로 비디오 게임을 구현해 보자. 아주 예전에 초등학교 문방구 앞에 있었다는 '탁구' 게임이다. 마이크로 컨트롤러(MCU)로 고전 게임들을 재현하는 프로젝트(Arduino Game Console)가 흔한 요즘이다. 이번 예제는 그보다 단순 하니 너무 기대는 말자. 비디오 게임을 아주 단순화 하여 베릴로그 만으로 구현 하였다. 이번 예제의 특징은 베릴로그의 조합회로 기술법이 아주 다양하게 사용되었다는 점이다. 또한 여러 기법 중 모듈 인수화(parameterized module)를 적절히 구사하였다. 아울러 비디오 신호및 디스플레이 컨트롤러를 이해할 수 있을 것이다. 입출력 신호의 갯수가 10여개에 불과 하며 베릴로그를 최적화 하면 "내칩 MPW"에 지월 할 수 있을 것이다. 예제는 아래 링크에서 받을 수 있다.

https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--pong_pt1/

시현 장치에 그림을 표현하려면, 그것도 움직이게 보이도록 하려면 엄청난 신호가 필요하다. 예를 들어 640x480 크기의 VGA 화면에 초당 10프레임을 보여준다고 해보자. 픽셀당 1비트의 흑백 화면이라고 해도 초당 무려 3백만개(640x480x10=3,072,000)의 값이 생산되어야 한다. 이런 신호를 생산하는 하드웨어를 설계한다고 해보자. 하드웨어를 설계 한다면 디지털 파형을 떠올리기 마련이다. 이 파형을 들여다 보며 작동을 파악하기는 불가능 하다. 비디오를 다루는 하드웨어의 설계의 테스트 벤치에는 파형이 만들어내는 모습을 시각적으로 볼 수 있는 방안이 마련되어야 한다.

멀티미디어 정보를 보여주고 들려주는 소프트웨어 도구들이 다양하게 준비되어 있으므로 이를 활용한다. SDL(Simple Directmedia Layer, https://libsdl.org/ )은 게임 소프트웨어의 제작에 사용되는 C++ 라이브러리다. 화면과 음성 그리고 입출력 장치를 쉽게 제어할 수 있다. 응용 프로그램 제작에 필요한 소스는 물론 라이브로리와 헤더가 모두 공개되어 있으므로 하드웨어 설계물의 검증을 위한 테스트 벤치에 어렵지 않게 접목시킬 수 있다.

SystemC 테스트 벤치에 SDL을 연결하여 베릴로그 시뮬레이션하는 모습은 아래와 같다.

이 시뮬레이션을 파형으로 보면 이렇다. 탁구대 크기를 128x64로 줄였음에도 파형을 통해 게임이 진행되는 상황을 살펴보기는 곤란하다.

중간 틈틈이 키보드로 패들을 상하로 조작하는 모습을 볼 수 있다. SDL을 접목 시켜 하드웨어 시뮬레이션에 입출력을 대화형(interactive/real-world stimulus, 실시간 상호작용)으로 구성함으로써 실제와 근접한 검증 환경이 되었다.

베릴로그 RTL의 검증을 위해 에뮬레이션 기법으로 게임기를 FPGA에 구현하였다. 비디오 신호를 다루는 만큼 컴퓨터 화면은 물론 실제 비디오 장치(VGA와 G-LCD)에 연결 하였다. 탁구 게임기 베릴로그는 비디오 신호를 생성 할 뿐 실제 디스플레이 컨트롤러는 포함되어 있지 않다. 비디오 컨트롤러까지 포함하면 "내칩 MPW"에서 허용하는 크기를 훌쩍 넘어서기 때문이다. 별도의 아두이노 보드를 비디오 컨트롤러로 사용한 에뮬레이션 구성은 아래와 같다. 시뮬레이션을 위해 구성한 테스트 벤치가 그대로 재활용 되고 있다는 점에 유의하자. 설계물의 추상화 수준이 베릴로그 RTL에서 FPGA 게이트 회로로 변경 되었다고 검증 환경이 바뀌었다면 온전한 검증이라고 할 수 없다.

아두이노 보드를 가지고 그래픽 LCD 구동, VGA 구동 시키는 공개 라이브러리가 많이 있으므로 이를 활용 하였다. 반도체를 설계하면서 베릴로그를 익히는데 그치지 않고 내장형 시스템 (embedded system) 프로그래밍 까지 두루 섭렵해보자. CPU 라는 반도체에 의미를 부여하는  펌웨어 코딩 또한 반도체 설계의 한 방법론이다.


이 예제를 만드는 도중 '반도체 설계 취미가'의 책상 샷! 아주 저렴하게 반도체 설계 실험실을 꾸몄다. FPGA+Arduino DUE+MEGA+Oscilloscope+MultiTester 합쳐서 50만원도 않됨. 이게다~ 알리 상회 덕분.

반도체 설계와 MPW제작에 심오한 알고리즘의 구현도 좋지만 재미를 빼놓을 수 없다. 좀더 최적화 하고 아이디어를 넣어 재미있는 게임기를 만들어 보기 바란다. "내칩 MPW", 씹고 뜯고 맛보고 즐겨보자.


2024년 7월 2일 화요일

WSL2+우분투 한글화 설정/Verilog Pong

WSL2+우분투 한글화 설정/Verilog Pong

요즘 우분투를 주로 사용하다보니 윈도우즈는 웹 검색과 프린터 기계가 되었다. 반도체 설계용 오픈-소스 툴 들을 주로 사용하다가 점점 사무용 응용 프로그램들까지 옮겨가는 중. WSL2/우분투에 한글 설정 해놓고 LibreOffice 를 써보니 썩~! 괜찮다.

PCB는 KiCad, FPGA는 Xilinx Vivado와 GoWin EDA, C++ 프로그래밍은 MS Code로 편집하고 GCC/Clang/GDB+DDD 를 쓰니 비주얼 스튜디오 켜본게 언재 였던가 싶다. 게임 제작용 멀티미디어 라이브러리 SDL2를 써서 테스트 벤치를 작성하니 반도체 설계의 재미가 더해졌다.

Verilog 만으로 제작해보는 핑퐁 게임:
https://github.com/GoodKook/ETRI-0.5u-CMOS-MPW-DK-Example--pong_pt1.git

SDL(Simple DirectMedia Layer):
https://www.libsdl.org/

WSL2 Ubuntu 한글화 설정:
https://datanavigator.tistory.com/60