2025년 6월 17일 화요일

ETRI 0.5um CMOS Std-Cell DK: 오픈-소스 반도체 설계 도구 설치

 ETRI 0.5um CMOS Std-Cell DK: 오픈-소스 반도체 설계 도구 설치

목차

I. 개요

II. 윈도우즈 PC에 리눅스 설치

III. 사전 설치 패키지

IV. 반도체 설계 도구 설치

    1. 합성기(Synthesizer)

        합성기 Yosys의 설치

    2. 배치와 배선(Place & Route)

        배치도구 GrayWolf의 설치

        배선도구 QRouter의 설치

    3. 레이아웃과 회로 비교(Layout vs. Schematic)

        LVS 도구 netGen 의 설치

    4. 디자인 룰 체크 (Design Rule Check)

    5. GDS 생성

        DRC 및 GDS 생성 도구 Magic의 설치

    6. 통합 관리도구(Design Flow)

        통합 관리도구 QFlow 설치

    7. SystemC, 시스템 모델링 C++ 크래스 라이브러리

        SystemC 2.3.3 설치

    8. 베릴로그에서 SystemC/C++로 변환

        Verilator 설치

    9. HDL 시뮬레이터

        Icarus Verilog 설치

        QuestaSim 설치

    10. 회로 시뮬레이터(SPICE)

        ngSpice 설치

    11. 회로 입력기

        XSchem 설치

        XSchem-GAW 설치

    12. 레이아웃 보기

        KLayout 설치


V. 공정 설계자료(PDK)

    2024년 1차 내 칩 제작 서비스 PDK

    ETRI 0.5um CMOS Std-Cell Design-Kit


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

1. 개요

“내 칩 제작 서비스(이하 ‘내 칩 MPW’)”의 ETRI 0.5um CMOS 공정용 표준-셀 기반 디자인 킷(이하 ‘디자인 킷’)을 개발 하였다. 이 디자인 킷은 오픈-소스 EDA 도구들을 사용하여 SystemC/C++ 에 의한 알고리즘의 기술, 레이아웃 및 RTL 설계, 회로 및 베릴로그 HDL 시뮬레이션, RTL 합성과 표준 셀 자동 배치배선 그리고 칩 테스트까지 전 과정을 수행 할 수 있는 체계를 갖췄다.  본 문서는 내 칩 MPW를 통해 칩 제작을 의뢰하기 위한 레이아웃 GDS 생성에 필요한 설계 도구들의 설치 방법을 설명한다. 사용된 도구들은 모두 오픈-소스로써 무료다.

오픈-소스 도구들은 소스로 배포되는 경우가 많으므로 사용자가 직접 빌드 및 설치 해야 한다. 물론 사용으로 인해 발생할 오류도 사용자 몫이다. 따라서 사용자는 끝없는 교차 검증에 익숙해 져야 한다. 교차 검증하는 습관은 상용 도구 사용자도 예외는 아니다. 설계 도구들을 운용할 운영체제 역시 오픈-소스 리눅스다. 각 도구들 마다 요구하는 패키지들은 사용 중인 운영체제의 여건에 따라 다르다. 오픈-소스 설계도구들을 설치하기 전에 APT(Advanced Package Tool)를 통해 필요 패키지들을 미리 설치한다. 이런 번거로움은 일관된 관리 주체가 없다는 오픈-소스의 단점이지만 모두에게 열려 있다는 장점에 비하면 아무것도 아니다. 

2. 윈도우즈 PC에 리눅스 설치

리눅스가 설치된 독립된 컴퓨터에 리눅스를 설치할 수도 있지만 윈도우즈 10/11의 가상 머신에 리눅스를 설치하면 윈도우즈 소프트웨어를 활용 하면서 파일 교환, 복사와 붙여넣기, 드래그와 드롭 등 장점이 많다. 윈도우즈 PC에서 가상 머신 리눅스를 설치하는 방법은 아래 문서를 참조한다.

    응용노트, “표준 셀 디자인 킷의 설계 환경, 가상 머신 리눅스 설치”

3. 디자인 킷 입수

‘디자인 킷’은 깃-허브 저장소에서 공개되어있다. 리눅스를 부팅 한 후 데스크 탑 바탕화면에서 마우스 오른쪽 버튼을 눌러 플로팅 메뉴가 나타나면 ‘Open in Terminal’을 선택하여 터미널을 연다.

터미널에서 아래 명령 입력

    $ pwd

‘$’는 리눅스 본-쉘의 명령 입력을 대기하는 프롬프트다. 명령 pwd 는 현재 위치한 디렉토리의 경로명을 보여준다. 현재 디렉토리의 위치는 사용자의 홈 디렉토리 아래의 Desktop 임을 보여준다. ‘~’는 사용자의 홈 디렉토리를 나타내는 기호다.

아래 명령으로 깃-허브 저장소에서 디자인 킷을 내려 받을 수 있다.

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

내려받을 자료의 양은 약 1G 바이트 가량이다. 연결된 인터넷의 속도에 따라 달렸지만 자료를 내려받고 파일을 푸는데 약 10분 가량 소요될 것이다. 인터넷 브라우저의 검색창에 아래의 주소를 입력하면 깃-허브 저장소의 디자인 킷을 살펴 볼 수 있다.

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

디자인 킷 내려받기가 정상적으로 완료 되었다면 데스크 탑의 오른쪽 하단에 폴더가 보인다. pwd 명령으로 내려받은 디자인 킷의 디렉토리를 확인 하자.

이어 사용자 홈 디렉토리로 이동한다. 명령 cd는 디렉토리 이동이다. 인수를 주지 않을 경우 사용자의 홈 디렉토리로 이동 한다.

내려받은 디자인 킷의 디렉토리를 홈 디렉토리에 'ETRI050_DesignKit' 이름으로 심볼링크를 건다.

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

명령 ln은 파일(또는 디렉토리)을 다른 이름으로 연결 한다. 이 명령에 -s 를 붙이면 윈도우즈의 ‘바로가기’와 같다. 파일 리스트 명령 ll으로 앞서 내려받은 디자인 킷의 디렉토리를 사용자 홈 디렉토리의 ETRI050_DesignKit 라는 이름으로 연결 되었음을 알 수 있다. 파일 목록 보기 명령 ll 은 ls -la 의 별칭(alias) 이다. 만일 붉은 색으로 표시 된다면 연결이 틀렸다는 뜻이므로 연결 명을 제거하고 다시 연결 해주자. 파일(디렉토리)의 제거 명령은 rm 이다.

팁: 디렉토리 목록 보기/마우스 버튼 활용


    $ cd ~/ETRI050_DesignKit/Tools

    $ chmod +x *.sh

디자인 킷에는 설계에 필요한 각종 오픈-소스 도구들의 빌드와 설치에 필요한 쉘 스크립는 물론 다양한 예제들을 포함한다.

4. 사전 설치 패키지

오픈-소스 도구들은 개발자의 취향에 따라 사용되는 개발 패키지(라이브러리)들이 제각각이다. 모두 찾아서 설치해 주어야 한다. 아래 apt 명령으로 반도체 설계용 오픈-소스 도구들을 위한 패키지를 일괄 설치한다.


    $ sudo apt install -y \

                build-essential cmake gperf gdb unzip meson \

                xterm libx11-dev libmotif-dev \

                xfonts-base xfonts-100dpi xfonts-75dpi \

                xfonts-cyrillic xfonts-scalable \

                libxaw7-dev x11-xserver-utils \

                clang bison flex gawk git libgit2-dev \

                libreadline-dev tcl-dev tk-dev libffi-dev \

                graphviz xdot pkg-config \

                python3 python3.9-tk \

                libgsl-dev zlib1g-dev libxt-dev \

                m4 tcsh csh libcairo2-dev libeigen3-dev \

                mesa-common-dev libglu1-mesa-dev libncurses-dev \

                libboost-all-dev libboost-dev libboost-system-dev \

                libboost-python-dev libboost-filesystem-dev \

                qtbase5-dev qtdeclarative5-dev \

                swig libtool libjpeg-dev \

                perl perl-doc libgtk-3-dev gettext help2man \

                desktop-file-utils libbz2-dev libjudy-dev


    $ sudo apt --fix-broken install


GNU C/C++ 컴파일러를 비롯하여 bison, flex 등 언어 개발 도구, make, configure 등 개발에 유용한 유틸리티와 디버깅 도구들이 설치된다. 그밖에 X11, gtk 그래픽 패키지, tcl/tk, python, perl 스크립트 엔진들이다.

팁: 일괄 설치 스크립트 실행

    $ ./prerequisities.sh

IV. 반도체 설계 도구 설치

디자인 킷의 예제에서 사용할 오픈-소스 반도체 설계 도구들의 목록과 해당 도구의 배포 사이트는 아래와 같다.

    1. QFlow[링크]: 반도체 설계 툴 플로우 통합

    2. Yosys[링크]: RTL 베릴로그 합성기

    3. GrayWolf[링크]: 표준 셀 자동 배치 도구

    4. QRouter[링크]: 표준 셀 자동 배선 도구

    5. Magic[링크]: VLSI 레이아웃 그리기 및 파일 변환

    6. irsim[링크]: 스위치 수준 시뮬레이터

    7. Netgen[링크]: LVS 검증도구

    8. XSchem[링크]: 회로 입력 도구

    9. ngSpice[링크]: SPICE 회로 시뮬레이터

    10. gtkwave[링크]: 디지털 회로 파형 VCD 보기

    11. KLayout[링크]: VLSI 레이아웃 툴

    12. Verilator[링크]: 베릴로그 HDL에서 SystemC/C++로 언어 변환

    13. SystemC[링크]: 시스템 모델링 C++ 크래스 라이브러리

    14. iVerilog[링크]: 베릴로그 시뮬레이터

    15. QuestaSim[링크]: HDL 시뮬레이터(상용)

16. XSchem[링크]: 전자회로 압력기


팁: 일괄 설치 스크립트


1. 합성기(Synthesizer)

RTL의 HDL을 분석(parsing)하여 동작을 게이트와 플립플롭의 연결도(netlist)로 변환해 준다. 이때 사용 가능한 게이트와 플립-플롭은 반도체 공장에서 준비한 표준 셀(Standard Cell)을 토대로 디지털 회로를 구성한다.

합성기 Yosys의 설치

    $ git clone https://github.com/YosysHQ/yosys.git

    $ cd yosys

    $ git pull    # Make sure git repository is up-to-date


    $ make config-clang

    $ make

    $ make test


    $ sudo make install


2. 배치와 배선(Place & Route)

실리콘 기판 위에 게이트들을 펼쳐놓고 합성기에서 얻은 연결도 대로 배선을 수행한다. 인쇄회로 기판과 같다. 다만 부품 숫자가 감당 할 수 없다. 자동으로 수행한다. 본 디자인 킷의 공정은 3개의 금속층을 쓸 수 있다.

배치도구 GrayWolf의 설치

    $ git clone https://github.com/rubund/graywolf.git

    $ cd graywolf

    $ git pull   # Make sure git repository is up-to-date


    $ mkdir build

    $ cd build

    $ cmake -DCMAKE_C_COMPILER=/usr/bin/clang \

              -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ..

    $ make

    $ make test


    $ sudo make install


배선도구 QRouter의 설치


    $ git clone https://github.com/RTimothyEdwards/qrouter.git

    $ cd qrouter

    $ git pull    # Make sure git repository is up-to-date


    $ ./configure

    $ make


    $ sudo make install


3. 레이아웃과 회로 비교(Layout vs. Schematic)


배치배선된 도면 레이아웃이 합성하여 얻은 연결도와 일치하는지 비교한다. 배치와 배선은 자동 소프트웨어가 해준다. 경우에 따라 사람이 고칠 수도 있다. 소프트웨어의 버그, 인간이 저지를 오류가 끼어들 수 있다. 배선이 끝나면 빠진 부분이 없는지 연결도(netlist)와 비교해 봐야 한다.


LVS 도구 netgen 의 설치,


    $ tar xvf netgen-1.5.255.tar.gz *

    $ cd netgen-1.5.255


    $ ./configure

    $ make

    $ sudo make install


* netgen의 최신 github 버전이 Spice 네트리스트 읽기에 오류가 있다. [1.5.255 버젼 다운로드 링크]


4. 디자인 룰 체크 (Design Rule Check)


배치 배선이 끝나면 표준 셀 라이브러리를 모두 합쳐서 완성된 도면을 생성 한다. 이 도면이 반도체 공장의 규정(design rule), 예를 들어 선폭, 이격 거리 같은 기하학적인 문제가 없는지 검사한다.


디자인 룰 검사는 레이아웃 편집기 Magic 을 쓴다.


5. GDS 생성


반도체 공장에 제출할 최종 도면을 생성한다.


DRC 및 GDS 생성 도구 Magic의 설치,


    $ git clone https://github.com/RTimothyEdwards/magic.git

    $ cd magic

    $ git pull  # Make sure git repository is up-to-date


    $ ./configure

    $ make

    $ sudo make install


    $ export MAGIC_TECH=/usr/local/lib/magic/sys/


6. 통합 관리도구(Design Flow)


RTL의 HDL로부터 GDS 레이아웃에 이르는 과정은 연속적인 추상화 수준을 낮추는 과정이다. 각 단계에서 저마다 사용되는 도구들이 다르다. 입출력 파일의 양식 또한 매우 상이하다. 이 도구들이 요구하는 입출력 파일을 변환 하고 간격을 맞춰주는 역활은 한다. 도구 운용에 필요한 스크립트를 생성하고 옵션을 설정해준다.


통합 관리도구 QFlow 설치,


    $ git clone https://github.com/RTimothyEdwards/qflow.git

    $ cd qflow

    $ git pull  # Make sure git repository is up-to-date


    * github를 통해 받는 소스는 ETRI 0.5um 공정 포함되어 있지 않다.


    $ ./configure

    $ make

    $ sudo make install


7. SystemC


시스템 모델링과 시뮬레이션을 위한 C++ 크래스 라이브러리다. 시스템 수준 테스트 벤치 작성에 매우 유용하다. HDL과 병행 시뮬레이션(Co-Simulation)의 훌륭한 도구다. RTL 설계는 HDL로 테스트 모델은 SystemC/C++로 한다. C++이므로 컴퓨터로 할 수 있는 모든것이 가능하다.


systemc-2.3.3[내려받기],


빌드,


    $ tar xvf systemc-2.3.3.tar.gz

    $ cd systemc-2.3.3

    $ autoreconf -i

    $ autoupdate


    $ mkdir objdir

    $ cd objdir


    $ export CXX=g++

    $ ../configure --prefix=/usr/local/systemc-2.3.3

    $ make


    $ sudo make install


설정해야할 시스템 변수,


    $ export SYSTEMC_HOME=/usr/local/systemc-2.3.3

    $ export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include

    $ export SYSTEMC_LIB=$SYSTEMC_HOME/lib-linux64


SystemC 3.0 Beta (2024, Jan.)


    $ git clone https://github.com/accellera-official/systemc.git

    $ cd systemc

    $ git pull  # Make sure git repository is up-to-date


    $ autoreconf -i

    $ autoupdate


    $ mkdir objdir

    $ cd objdir


    $ export CXX=clang++

    $ ../configure --prefix=/usr/local/systemc-3.0.0 \

                    'CXXFLAGS=-std=c++17'


    $ make


    $ sudo make install


설정해야할 시스템 변수,

    $ export SYSTEMC_HOME=/usr/local/systemc-3.0.0

    $ export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include

    $ export SYSTEMC_LIB=$SYSTEMC_HOME/lib-linux64

    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SYSTEMC_LIBDIR



* SystemC 환경 변수가 자주 사용되므로 'sc_env' 파일로 작성해 두고 필요시 source 명령으로 일괄 설정한다.


    # Filename: sc_env

    export SYSTEMC_HOME=/usr/local/systemc-3.0.0

    export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include

    export SYSTEMC_LIB=$SYSTEMC_HOME/lib-linux64

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SYSTEMC_LIBDIR

    export CXXFLAGS=-std=c++17



8. 언어 변환기


 RTL 베릴로그 HDL을 SystemC/C++로 변환하는 도구다. 빠른 시뮬레이션을 수행 할 수 있다. 게이트 모델은 변환시 제약이 있다.


    $ git clone https://github.com/verilator/verilator

    $ unset VERILATOR_ROOT

    $ cd verilator

    $ git pull    # Make sure git repository is up-to-date



빌드 하기전에 SystemC 환경 변수를 설정해 주어야 한다.


    $ source sc_env


    $ autoconf    # Create ./configure script

    $ ./configure 'CXXFLAGS=-std=c++17'

    $ make -j `nproc`

    $ sudo make install


9. 베릴로그 HDL 시뮬레이터


ICARUS Verilog (오픈-소스 베릴로그 시뮬레이터),


    $ git clone https://github.com/steveicarus/iverilog.git

    $ cd iverilog

    $ git pull         # Make sure git repository is up-to-date


    $ sh autoconf.sh

    $ ./configure

    $ make


    $ sudo make install


QuestaSim (상용 HDL 시뮬레이터),


상용 HDL 시뮬레이터이지만 FPGA 스타터 버젼을 무료로 쓸 수 있다. 상용판에 비해 기능상 제약은 전혀없다. 단지 시뮬레이션 속도가 절반이라고 한다[바로가기]. 무료 라이센스는 Intel Self-Sevice Licensing Center[link]를 통해 실시간으로 발급 받을 수 있다.


10. 회로 시뮬레이터(SPICE)


트랜지스터와 R(저항), C(컨덴서) 수준 전자회로 시뮬레이터다. 표준 셀 제작시 사용한다. 시뮬레이션이 정밀 한 만큼 매우 느리다. 작은 설계라도 트랜지스터 갯수가 수천개를 넘기는 RTL 합성 기반 설계환경에서는 사용 불가다.  


ngSpice 설치,


github 는 버젼 업데이트를 안하고 있다. 소스포지에서 다운 받는다[바로가기].


    $ tar xvf ngspice-42.tar.gz

    $ cd ngspice-42


    $ ./autogen.sh

    $ mkdir debug

    $ cd debug

    $ ../configure --with-x --with-readline=yes

    $ make


    $ sudo make install


11. 회로 입력기(Schematic Circuit Entry)


문자 편집기를 이용해 네트리스트를 작성하는 대신 직관적으로 회로를 그려줄 수 있다. SPICE는 물론 HDL 네트리스트를 출력해 준다. 여러 오픈 소스 도구중 XSchem 이 있다. ngSpice와 잘 어울린다.


XSchem 설치,


    $ git clone https://github.com/StefanSchippers/xschem.git

    $ cd xschem

    $ git pull


    $ ./configure

    $ make


    $ sudo make install


XSchem-GAW (gtk Analow Waveform Viewer)


    $git clone https://github.com/StefanSchippers/xschem-gaw.git

    $ cd xschem-gaw

    $ git pull


    $ aclocal

    $ autoconf

    $ autoheader

    $ automake --add-missing


    $ ./configure

    $ make


    $ sudo make install


GETTEXT 버젼이 맞지 않아 오류가 나는 경우, 


1. xschem/xschem-gaw/po/Makefile.in.in 에서 아래 변수 설정 변경:


    GETTEXT_MACRO_VERSION = 0.20


2. xschem/xschem-gaw/configure 에서 아래와 같이 설정 변경:


    GETTEXT_MACRO_VERSION=0.20


위의 두 파일 변경 후 빌드 스크립트 실행


12. 레이아웃 보기 및 편집기


반도체 공정용 도면, 레이아웃의 양식은 다양하다. 전통적으로 CIF와 GDS 양식이 사용되었으나 보안에 취약하여 설계 도구 회사들은 저마다 양식을 써왔다. 최근 혼란을 피하기 위해 oa(open-access[link], 상용 EDA 연합체에서 제정[Sillicon Integration Initiative, Si2])와 oas(OASIS[link], 오픈-소스)가 제안되고 사용중이다. 레이아웃은 기본적으로 적층 평면 도면으로 소자들 사이의 배선을 사각형으로 표현한다. 엄청난 량의 사각형 정보를 담게된다. 실예로 예제의 Z80 마이크로 프로세서의 레이아웃에 사각형은 4.12M 가까이된다(패드 제외). 레이아웃의 검토를 위해 보기만 해도 정교한 소프트웨어가 필요하다. KLayout 은 굉장히 빠른 레이아웃 보그 소프트웨어다. 운영체제별 바이너리로 배포되고 있다.


    https://www.klayout.de/


자유 실리콘 컨퍼런스에 참여하고 있다.


    https://wiki.f-si.org/index.php/FSiC2024


KLayout 설치,


KLayout 웹페이지에서 최신 배포 패키지를 내려받은 후 설치한다. 데비안 패키지 .deb의 설치 명령은 dpkg 다.


    $ sudo dpkg -i klayout_0.28.15-1_amd64.deb


필요 패키지 미설치 오류가 나는 경우 이를 해결해준다.


    $ sudo apt-get install -f


V. 공정 자료(PDK)


반도체 설계의 후반부 과정은 공장과 매우 근접되어있다. 공장에서 제공할 수 있는 기본 부품(게이트와 플립 플롭 들)과 공정상 물리적, 기하학적 특성이 제공 되어야 한다. 공장에서 제공하는 이런 류의 각종 자료들을 공정 설계자료 PDK (Process Design Kit)라고 한다.


2024년 1차 내 칩 제작 서비스 PDK


    http://mpw.kion.or.kr > 공지사항


ETRI 0.5um CMOS Std-Cell Design-Kit [바로가기]


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


[참고]


1. 반도체 설계 오픈 소스 도구 QFlow 및 관련 도구 설치

    https://fun-teaching-goodkook.blogspot.com/2023/08/qflow.html


2. ETRI 0.5u CMOS 공정용 표준 셀 기반 디지털 반도체 설계 디자인-킷 v.1a (2023-12-13)

    https://fun-teaching-goodkook.blogspot.com/2024/01/etri-05um-cmos-std-cell-dk.html


3. 설치 문의:

    goodkook(at) gmail.com


4. 내려받기:

    ETRI050_DesignKit v.1b [Download]

    Tools v.1b [Download]


2025년 6월 14일 토요일

"내 칩 제작 서비스" 표준 셀 디자인 킷의 운용 환경, 가상 머신 리눅스 설치

"내 칩 제작 서비스" 표준 셀 디자인 킷의 운용 환경,
가상 머신 리눅스 설치

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

목차:

1. 개요
    1-1. WSL 과 가상 머신(VM)
    1-2. 가상 머신 실행에 대한 우려
    1-3. 윈도우즈 WSL 지원 기능 끄기

2. VMware 가상 머신
    2-1. VMware 의 설치
    2-2. VMware에서 우분투 리눅스 설치
    2-3. VMware 가상 머신 설정 변경
    2-4. VMware의 게스트 우분투 다듬기
    2-5. VMware 게스트 우분투에서 공유 폴더 마운트

3. VirtualBox 가상 머신
    3-1. VirtualBox 의 설치
    3-2. VirtualBox에서 우분투 리눅스 설치
    3-3. VirtualBox 가상 머신 설정 변경
    3-4. VirtualBox의 게스트 우분투 다듬기
    3-5. VirtualBox 게스트 우분투에서 공유 폴더 마운트

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

1. 개요

1-1. WSL 과 가상 머신(VM)

앞서 오픈-소스 반도체 설계 도구의 운용 환경으로 사용하던 WSL에 우분투 리눅스를 사용 했었다. 윈도우즈 운영체제에서 쉽게 파일 탐색이 가능 하다는 편리한 점이 있지만 리눅스 시스템 콜이 완벽하지 않고 무엇 보다도 각종 툴들의 설치에 애를 먹는 경우가 있었다. 이에 가상 머신(VM, Virtual Machine) 위에 리눅스를 설치하는 방식으로 변경하기로 한다.

    [참고] WSL 과 VM 뭐가 더 좋을까?, https://balang.tistory.com/32

윈도우즈 상에서 사용할 수 있는 가상 머신(VM, Virtual Machine)은 오라클 VertualBox와 브로드컴 VMware 가 있다. 각각 장단점이 있겠으나 두 VM 모두 오픈-소스 툴 들을 설치하고 "내 칩 제작 서비스" 표준 셀 디자인 킷 운용하는데 문제 없다.

    [참고] Oracle VirtualBox, https://www.virtualbox.org/
    [참고] Broadcom VMware, https://www.vmware.com/

1-2. 가상 머신에 대한 우려

VM이 윈도우즈 운영체제에 얹혀 있어서 실행 하는데 상당한 부담이 있을 것이라는 우려를 가질 수 있다. 하지만 따져보면 지금의 윈도우즈 조차 전통적인 x86의 CPU 구조를 가상으로 돌리고 있다는 것(Windows-on-Windows)을 감안 하면 실행 성능 저하는 그리 염려할 바는 아니다. 이미 PC용 최신 CPU는 기본적으로 하드웨어 가상화 기술(Virtualization Technology)을 장착하고 있다. 이는 가상화를 소프트웨어로 에뮬레이션 하기 보다 아예 하드웨어를 장착하고 있어 호스트와 게스트로 구분되는 머신의 성능 차이는 없다는 것이다. 다만 운영체제 마다 파일 시스템이 다르고 게스트 머신에서 호스트 측의 주변장치들에 접근 하려면 가상 입출력 장치를 거쳐야 하는 단점이 있다.

VM을 사용 할 경우 파일 시스템이 호환되지 않아서 가상 디스크 파일을 통해 접근해야 하고 그래픽 장치 같은 고성능 하드웨어를 직접 제어하지 못해 제 성능을 내지 못한다. 다행히 VM 마다 호스트의 파일 시스템을 장착(mount) 할 수 있는 방법이 마련되어 있고 호스트(윈도우즈)와 게스트(VM의 리눅스) 사이에 복사와 붙여넣기(Copy & Paste) 또한 가능한 툴들이 준비되어 있다. 가상화 리눅스는 전자 설계 도구를 운용하는 목적이라서 고성능 3D 그래픽 따위는 필요 없다. 그외 고속을 필요치 않는 USB 통신 포트, 예를 들어 시리얼 포트, JTAG 등을 무난히 작동 시킬 수 있다. 따라서 VM에 설치된 리눅스에서 아듀이노와 FPGA 장치들을 무난하게(더 쉽게!) 다룰 수 있다.

1-3. 윈도우즈 WSL 지원 기능 끄기

VirtualBox와 WMware는 가상 머신을 작동 시키는데 필요한 기능들을 자체적으로 갖추고 있다. 따라서 VM을 쓰기로 했으므로 윈도우즈에서 WSL을 지원하는 기능들을 모두 끈다. 꺼야할 기능은 다음과 같다.

    Hyper-V
    Virtual Machine Platform
    Windows Hypervisor Platform
    Windows Subsystem for Linux 

윈도우즈의 설정(Settings)에서 "Windows Feature on or off"를 열어 위의 기능들이 켜있을 경우 끄도록 한다.

켜져있는 기능을 끌 경우 윈도우즈를 재시작 할 수도 있다.

2. VMware 가상머신

두가지 대표적인 VM 중 브로드컴의 VMware 상에서 우분투 리눅스를 설치하는 방법을 설명한다. VM의 기본적인 개념을 이해하면 VirtualBox를 사용할 경우에도 크게 다르지 않으므로 쉽게 적용 할 수 있을 것이다.

2-1. VMware 의 설치

VMware는 무료로 전환되었지만 설치 소프트웨어를 받으려면 브로드컴에서 계정을 얻어야 한다. 브로드컴 홈 페이지에 접속한 후 우측 상단의 "Support Portal"을 누른 후 드롭-다운 메뉴에서 "Register" 버튼을 누른다. 

https://www.broadcom.com/

전자 우편(e-mail)을 입력한 후 확인 절차를 거쳐 계정 생성이 되면 VMware 홈 페이지를 통해 VMware 를 내려 받을 수 있다.

https://www.vmware.com/

"Broadcom Support"를 선택하여 로그인 한다. 이어 열린 계정 화면에서 "Software" -> "VMware Cloud Foundation" -> "My Downloads" 를 따라간다.

무료 소프트웨어 내려받기로 이동,

굉장히 많은 제품들이 보이는데,

아래로 내려보면 "VWware Workstation Pro"가 보인다.

윈도우즈가 호스트 머신 이므로, "VMware Workstation Pro 17.0 for Windows"에서 가장 최신 버젼을 골라 설치 프로그램을 내려 받는다.

윈도우즈에서 프로그램 설치는 표준화 되어 있다. 내려 받은 설치프로그램을 실행하여 VMware를 설치한다. 설치하는 중에 옵션은 "기본" 과 "추천"이 하는대로 따르도록 한다.

2-2. VMware에서 우분투 리눅스 설치

아래의 우분투 리눅스 데스크탑 배포 사이트에 들어가면 약 6기가 바이트에 이르는 iso 이미지를 내려받을 수 있다.

https://ubuntu.com/download/desktop

VMware 를 실행하여 "Create a New Virtual Machine" 선택한다. 말그대로 새로 가상 머신을 만들기로 한다.

"가상 머신 마법사(Virtual Machine Wizard)"가 나타나 설치를 도와 줄텐데 마법사를 믿고 "기본(추천)"으로 간다.

새로 생성하게될 가상 게스트 머신에 우분투 리눅스를 설치하기로 한다. 앞서 내려받은 우분투 설치 iso 이미지 파일을 넣어준다.

이후 설치는 모두 기본 절차를 따른다. 가상 머신이 부팅 하면서 iso 이미지를 읽어 우분투가 설치되는 모습을 보게 될텐데 이 역시 "Next" 또는 "Skip"하여 모두 기본으로 한다. 다만 중간에 사용자 이름과 비번을 물어올 때 적절히 입력하자. 모두 설치 하는데 약 20분 쯤 소요될 것이다. 만일 설치가 마음에 들지 않으면 얼마든지 재설치하거나 변경 할 수 있다. 컴퓨터와 운영체제를 유지보수하면서 컴퓨터 활용 공부가 될 것이다.

2-3. 가상머신 설정 변경

우분투 리눅스 설치를 마친 후 VMware의 실행 조건을 살펴보기로 한다.

메모리는 기본으로 4G 바이트로 잡혀 있을 것이다. 이정도 용량으로도 우분투는 잘 돌아간다. 추후 규모가 큰 응용프로그램을 돌릴 경우를 대비하여 호스트와 절반씩 나눠 쓰도록 설정해 보는 것도 좋다.

가상 머신이 사용할 프로세서의 갯수를 설정할 수 있다. 게스트 머신에 가용한 프로세서를 모두 동원한다고 해도 호스트가 멈추는 것은 아니므로 시험삼아 옵션을 변경해 보고 호스트 머신 윈도우즈의 "Task Manager"를 통해 CPU 사용량을 살펴보는 것도 흥미로울 것이다.

요즘 나오는 CPU들은 모두 하드웨어 가상화 기술이 적용 되어 있다. "Task Manager"에 "가상화(Virtualization)"가 켜있더라도 정작 VMware에서는 사용하지 못 할 수도 있다. 하드웨어 가상화 엔진을 사용하려면 BIOS 설정에서 이 기능을 켜 주어야 한다는데 Virtualize Intel VT-x 또는 AMD-V 가상화 엔진의 활성화에 관한 수많은 질문들이 있는 것을 보면 제대로 잘 되지 않는 모양이다. 만일 가상화 엔진이 적용되지 않는다고 미련을 갖지 않아도 좋다. 이것 없이도 가상 머신은 잘 돌아가고 반도체 설계에 컴퓨터 성늘이 아쉬울 일은 없다.

VMware의 가상 머신 기본 설치 시 가상 하드디스크의 용량은 20G 바이트 였을 것이다. 이정도 용량이면 리눅스와 웬만한 서버를 설치하는데 중분하다. 하지만 반도체 설계 도구들과 아듀이노, FPGA 용 도구들 설치하기에는 부족하다. 용량을 200G 바이트로 늘려 놓는 편이 좋다.

가상 머신 설정 창에서 설치할 때 할당해 놓은 가상 디스크 용량을 변경할 수 있지만 이를 게스트 운영체제에서 적용하려면 그 절차가 다소 복잡하다. 만일 용량이 작게 할당 되었다면 가상 머신 재설치 하길 권한다.

게임이나 고도의 그래픽 작업을 하려는 것이 아니라면 3D 가속을 끄도록 한다. 문자 기반의 명령 처리나, 평면도 그리기가 대부분인 반도체 설계에서 3D 가속은 의미없다. 오히려 성능을 저하 시킬 수 있다. 다음은 호스트 머신의 저장장소를 게스트 머신과 공유하기 위한 설정이다.

위의 경우는 호스트 머신에서 E:\ 를 E_DRIVE 라는 이름으로 공유시킨 예다. 분리되어 있는 호스트와 게스트 머신의 운영체제 사이에 클립보드 공유가 가능하다. 아래 설정으로 드래그-드롭, 복사-붙이기가 가능하다.


2-4. VMware의 게스트 우분투 다듬기

VMware의 가상 머신에 우분투 리눅스의 설치를 마쳤다. 아래의 명령으로 우분투를 최신 상태로 업데이트 한다.

    $ sudo apt update

'$' 는 우분투 리눅스의 명령줄 프롬프트다. 어플리케이션을 운영체제의 일부로 설치해야 하므로 관리자 권한을 주기 위해 'sudo' 가 사용되었다. 'apt'(Application Packaging Tool)는 우분투의 공식 어플리케이션을 내려받아 설치하는 명령이다. 해당 어플리케에션은 물론 이에 필요한 연관 라이브러리들을 묶어 배포 사이트에서 내려받고 설치한다. apt의 보조 명령 'update'는 운영체제의 최신 상태로 갱신할 목록이 있는지 검사한다. 이어 'upgrade'를 주어 최신 상태로 갱신을 수행한다.

    $ sudo apt upgrade

다음은 깃-허브 공유 저장소에서 오픈-소스를 내려받기 위한 툴을 설치한다.

    $ sudo apt install git

'install' 은 뒤에 이어진 패키지를 설치 하라는 apt의 보조 명령으로 git 을 설치한다.  

우분투 리눅스는 범용 운용체제로 VMware를 위한 특별한 조치를 가지고 있지 않다. 호스트 머신과 VMware 게스트 리눅스 머신 사이에 파일을 공유하고 클립 보드를 공유가 가능 하게 해주는 툴 open-vm-tools과 open-vm-tools-desktop 을 설치한다.

    $ sudo apt install open-vm-tools open-vm-tools-desktop

기초적인 다듬기가 완료되었다. 리눅스를 재부팅 하면 새로운 기능들을 사용할 수 있다.

2-5. VMware 게스트 우분투에서 공유폴더 마운트

앞서 가상 머신과 공유할 호스트 폴더가 지정 되었다면 아래와 같이 확인 할 수 있다.

    $ vmware-hgfsclient
    E_DRIVE

공유 폴더의 설정 이름이 E_DRIVE 였다는 점을 기억하자. 아래 명령으로 공유된 폴더를 리눅스의 폴더에 마운트 할 수 있다.

    $ sudo vmhgfs-fuse .host:/E_DRIVE /mnt/hgfs/ -o allow_other -o uid=1000

호스트 머신에서 'E_DRIVE'라는 이름으로 공유된 폴더를 리눅스의 /mnt/hgfs에 연결(mount) 한다.

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

3. VirtualBox 가상 머신

3-1. VirtualBox 설치

아래 링크에서 오라클 가상 머신 VirtualBox 설치 파일을 내려 받아 설치한다.

https://www.virtualbox.org/wiki/Downloads

윈도우즈에서 리눅스를 게스트로 운영할 것이므로 "Windows hosts"를 내려 받아 설치한다. 내려받은 설치 프로그램을 실행하는 과정에서 선택 사항은 모두 기본으로 충분하다. 윈도우즈 호스트의 경우 확장 팩을 추가로 설치한다.

3-2. VirtualBox에 우분투 리눅스 설치

우분투 리눅스를 설치하려면 설치 디스크가 필요하다. 아래 링크에서 우분투 설치용 iso 이미지를 내려 받아 둔다.

    https://ubuntu.com/download/desktop

VirtualBox 를 실행하여 새로 가상 머신을 만든다. 메뉴의 Machine에서 New 를 선택 하거나 윈도우의 "New" 버튼을 누르면 가상 머신 만들기가 시작된다.

가상 머신의 이름(Name)은 적당히 적어 준다. "ISO Image"란에 먼저 받아둔 우분투 설치 iso 이미지 파일을 지정해 주면 게스트로 설치할 운영체제의 종류(Type)와 하위종류(Subtype) 등이 알아서 잡힌다.

"Unattained Install" 은 가상 머신이 만들어진 후 "ISO Image"에 지정한 운영체제 설치 이미지 를 읽어 운영체제 설치를 진행하게 되는데 이때 첫 사용자의 계정명(Username)과 비밀 번호(Password)를 입력해 준다. 우분투 리눅스의 설치 과정에서 사용자 계정 생성 과정을 생략할 수 있다.

Hardware는 가상머신이 사용할 CPU의 갯수와 메모리 용량을 지정한다. 호스트 머신이 가지고 있는 자원에 따라 사용 가능한 자원 량이 달라진다. 녹색 바의 최대치까지 올려 놓도록 하자.

리눅스 운영체제는 사용자의 용도에 따라 그 무게가 달라진다. 단일 사용자가 문자 기반의 명령 줄 사용자 인터페이스(CLI, Command-Line Interface)를 사용하는 응용인 경우 그리 큰 메모리 용량을 요구하지 않는다. 대부분 랩-탑 PC에서 4G 바이트만 할당 해도 원할하게 돌아간다.

가상 머신이 사용할 하드 디스크의 용량을 설정한다. 기본적으로 25G 바이트로 놓고 있는데 반도체 설계 소프트 웨어의 용량이 매우 크므로 200G 바이트 이상으로 설정하길 권한다. 향후 아듀이노 IDE, 알테라와 자일링스 FPGA 도구들을 설치하게 될텐데 이들 도구들을 모두 설치하면 약 100G 바이트 가량 하드 디스크 공간을 차지한다.

가상 머신을 구성하는 기본 설정을 마치면 "Finish" 버튼을 누른다. 가상 머신 만들기와 우분투 리눅스 설치가 자동으로 진행된다. 설치도중 옵션 선택은 "Next" 또는 "Skip"으로 넘어 가도록 한다. 가상머신과 우분투 리눅스의 설치가 완료되면 VirtualBox 윈도우즈 확장팩을 설치한다. 확장 팩 설치는 따로 절차 없이 앞서 내려 받아 둔 파일을 실행하면 된다. 확장 팩을 설치하면 호스트와 게스트 머신 사이에 클립 보드 공유를 통해 "복사와 붙여넣기", "드래그 앤드 드롭"이 가능하다.

3-3. VirtualBox 가상 머신 설정 변경

가상 머신에 우분투 리눅스가 게스트로 설치 되었다. 가상 머신의 몇가지 세부 설정을 살펴보기로 한다. 설치한 가상 머신의 "설정(Settings)"을 눌러 시스템(System) 항목을 보자.

일반 항목(General)의 "고급(Advanced)"에서 "공유 클립 보드" 와 "드래그 앤드 드롭"을 양방향(Bidirectional)으로 설정한다.

마더보드(Motherboard)의 부팅 장치에서 "플로피"와 "오티컬" 디스크는 뺀다. 아울러 가상 머신에서 사용할 기본 메모리 용량을 설정한다. 기본으로 4G 바이트 정도의 용량으로도 우분투는 잘 돌아간다. 추후 규모가 큰 응용프로그램을 돌릴 경우를 대비하여 호스트와 절반씩 나눠 쓰도록 설정해 보는 것도 좋다.

기본 메모리 용량은 언재든 재설정 할 수 있지만 메모리 용량이 변경되면 게스트 운용체제의 스왑(swap) 디스크를 재설정 하느라 리눅스의 부팅이 느려질 수 있다. 스왑 디스크 재설정은 메모리 용량 변경 후 최초 부팅 시에만 영향을 받는다.

디스플레이(Display) 설정, 큰 화면을 대비하여 비디오 메모리는 32~64M 바이트로 늘려 놓는다. 게스트에서 멀티 모니터를 할 것이 아니므로 모니터 갯수는 1개, 그래픽 컨트롤러는 VBoxVGA와 VMSVGA 중 고를 수 있다. VBoxVGA 를 선택하면 게스트에서 데스크 탑 해상도를 동적으로 변경 할 수 있지만 간혹 잘 작동하지 않을 때(검은 화면에서 멈춤)도 있다. 기본 설정은 VMSVGA 다.

저장장소(Storage) 설정이다. IDE와 SATA, 두종류의 컨트롤러가 있다. IDE에 플로피나 옵티컨 드라이브의 미디엄이 있다면 제거한다. SATA에는 우부투가 설치된 가상 디스크 미디엄이 부착 되어 있다.

호스트 머신의 공유 폴더를 지정하면 게스트에서 마운트할 수 있다.

3-4. VirtualBox의 게스트 우분투 다듬기

VirtualBox 가상 머신에 우분투 리눅스의 설치를 마쳤다. 아래의 명령으로 우분투를 최신 상태로 업데이트 한다.

    $ sudo apt update

'$' 는 우분투 리눅스의 명령줄 프롬프트다. 어플리케이션을 운영체제의 일부로 설치해야 하므로 관리자 권한을 주기 위해 'sudo' 가 사용되었다. 'apt'(Application Packaging Tool)는 우분투의 공식 어플리케이션을 내려받아 설치하는 명령이다. 해당 어플리케에션은 물론 이에 필요한 연관 라이브러리들을 묶어 배포 사이트에서 내려받고 설치한다. apt의 보조 명령 'update'는 운영체제의 최신 상태로 갱신할 목록이 있는지 검사한다. 이어 'upgrade'를 주어 최신 상태로 갱신을 수행한다.

    $ sudo apt upgrade

다음은 깃-허브 공유 저장소에서 오픈-소스를 내려받기 위한 툴을 설치한다.

    $ sudo apt install git

'install' 은 뒤에 이어진 패키지를 설치 하라는 apt의 보조 명령으로 git 을 설치한다.  

우분투 리눅스는 범용 운영체제로 가상 머신에 대한 특별한 조치를 가지고 있지 않다. VirtualBox 가상 머신 설정에서 클립 보드 공유를 활성화 시켜도 게스트에서 바로 동작하지 않는다. 게스트로 설치한 리눅스 운영체제에 이를 지원하는 툴을 설치해야 한다. VirtualBox 의 확장 팩을 설치 했다면 이에 필요한 파일들을 묶은 iso 디스크 이미지 파일이 제공된다. 이를 설치하기 위해 VirtualBox 설정에서 광학 드라이브를 추가하고,

이어 미디엄으로 VBoxGuestAdditions.iso 를 지정한다.

게스트 운영체제를 부팅 시킨 후 VirtualBox의 메뉴 "Devices" > "Insert Guest Additions CD image" 를 선택 하면,

좌측 태스크 바에 CD 디스크 아이콘이 생기고 이를 열어 "Run software" 를 실행 시킨다.

3-5. VirtualBox 게스트 우분투에서 공유 폴더 마운트

클립 보드 공유를 통한 '복사와 붙여넣기'외에 호스트와 게스트 머신 사이에 파일을 주고 받는 방법으로 호스트 머신의 폴더를 게스트 파일 시스템의 한 디렉토리에 연결 할 수 있다. 호스트에서 공유할 폴더를 지정하고 게스트에서 참조할 이름을 붙여 놓는다. 아래 예는 호스트의 C:\ 를 C_DRIVE 라는 이름으로 공유 하도록 설정 하였다.

게스트 리눅스에서 공유된 폴더를 연결할 지점으로 폴더를 생성 해두고,

    $ mkdir ~/C_DISK

호스트의 공유명 "C_DRIVE"를 을 이 지점에 연결한다.

    % sudo mount -t vboxsf C_DRIVE ~/C_DISK

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

윈도우즈를 호스트로 하는 가상 머신에 게스트 운영체제 리눅스를 설치하는 방법을 설명 했다. "내 칩"을 제작하기 위해 오픈-소스 반도체 설계도구를 운용 하는데 두가지 가상 머신 중 어느 것이든 상관 없다. VMware 가 성능 면에서 우수 하다고 하지만 반도체 설계를 목적으로 사용하면서 체감할 정도는 아니다. VirtualBox 가 USB 장치(아듀이노, FPGA JTAG 등) 사용 면에서 더 안정성이 있었다. 굳이 고르라면 VirtualBox 다.

다음에는 "내 칩 제작 서비스" 표준 셀 디자인 킷을 깃-허브에서 클로닝으로 내려받은 후 오픈-소스 설계도구들을 설치해 보기로 한다.





2025년 6월 1일 일요일

마이크로프로세서 설계의 역사를 개척한 32비트 "벨맥-32"

마이크로프로세서 설계의 역사를 개척한 32비트 "벨맥-32"

2025년 5월 22일자 IEEESpectrum 온-라인 기사로 마이크로 프로세서 "벨맥-32"의 설계자들의 이야기가 실렸다.

32 Bits That Changed Microprocessor Design Bell Labs’ Bellmac-32 paved the way for today’s smartphone chips

마이크로프로세서 설계를 바꾼 32비트 Bell Labs의 Bellmac-32는 오늘날의 스마트폰 칩의 길을 열었습니다.

https://spectrum.ieee.org/bellmac-32-ieee-milestone

요약하면,

- 80년대 초에 NMOS 또는 PMOS 만으로 구성된 회로의 반도체 제조에 CMOS는 혁신적인 시도였다.  CMOS는 매우 위험한(!) 시도였다고 한다. Apple-I/II에 사용된 CPU 6502 는 NMOS 공정으로 만든 칩이다.

- 최초 "벨맥-32"은 3.5um CMOS 공정이었다. 목표 동작 속도는 4Mhz 였으나 실제 동작은 2Mhz에 그쳤다. 반도체 제조시설(오늘날의 "클린 룸" 이라고 하기도 민망하지만)을 설계자들이 직접 청소까지 했다고 한다. 1980년대의 최신 16-비트 IBM-PC의 CPU 8088의 동작 속도는 4.77Mhz 였다.


펜으로 6502 CPU의 레이아웃을 그리고 있다(1979)[출처]

- 레이아웃은 플로터로 출력한 도면을 바닥에 펼쳐놓고 색연필로 따라가며 오류를 찾았다고 한다. 현대적인 레이아웃 툴, 시뮬레이터는 없었다.



무려 15만개의 트랜지스터가 그려진 벨맥-32의 레이아웃을 바닥에 펼쳐놓고 색연필로 디버깅. 도면의 크기가 가로세로 6x6메터(20x20 피트)에 달했다고 한다. 적어도 플로터는 있었다고 한다[출처].

- 이들이 만든 32비트 마이크로 프로세서는 C 언어로 프로그램을 짤 수 있도록 감안 하였고(C 언어 특유의 함수 호출 방식, 포인터와 인수 호출과 지역변수에 스택 활용 등) 유닉스와 유사한 운영체제를 돌릴 수 있었다.

- 이 혁신적인 설계에 참여한 한국인 강성모가 있었다. 그는 한국에 돌아와 KAIST 총장을 역임 했다.

이 기사를 읽고 문득 이런 의문이 들었다,

- 우리에게도 이렇게 선구자들이 있었는데 그 "설계의 전통"을 볼 수 없는 것은 내가 찾지 못하는 것일까?

- 설립 80주년이 눈앞인 둔 한국전자공학회, 반도체 강국을 대표하는 이 학술 단체의 홈페이지에 이런 기사가 실리는 모습을 생전에 볼날이 있을까?

- 0.5um CMOS 공정으로 무료로 칩을 만들어 주는 서비스가 진행 중이다. 오픈-소스 반도체 설계 소프트웨어와 그를 활용한 디자인 킷도 구비되었다. 너도나도 달려 들어야 하는 것 아닐까?

오라! "내 칩 제작 서비스" 로....
http://mpw.kion.or.kr/


2025년 5월 1일 목요일

"내 칩(My Chip) 설계 교실" 설치 제안

"내 칩(My Chip) 설계 교실" 설치 제안

본 제안은 오픈-소스 반도체 설계 자동화 도구를 활용하여 "내 칩을 내 책상 위에서(My-Chip on My-Desk)" 설계하고 검증하며 테스트까지 수행할 수 있는 역량을 갖추기 위한 교육안이다.

[주] 이 제안은 어떠한 기관에 국한되지 않고 누구에게나 열려 있습니다. 학습에 필요한 자료는 깃 허브 저장소[링크]에 공개되어 있으니 널리 활용되길 바랍니다. 이 제안을 수용할 의사가 있는 기관 또는 개인 중 도움이 필요할 경우 연락 주십시요. 질문 뿐만 아니라 조언, 오류 신고 등 언재나 환영 합니다.


동기

오픈-소스 컴퓨팅 도구들이 충분히 성숙되어 상용 툴을 대체하기에 이르자 프로그래밍 언어와 소프트웨어 개발은 전공자들의 전유물이 아니게 되었다. 오히려 비전공자들의 아이디어 구현이 빛을 내고 있기도하다. 반도체 설계도 예외가 아니다. 오픈-소스 반도체 설계 도구들도 발전을 거듭하여 시스템 수준 알고리즘에서 합성과 자동 배치배선 그리고 최종 레이아웃 생성까지 수행할 수 있는 체계를 갖췄다. 이에 비전공자들도 자신의 고유 칩을 만들수 있는 환경이 충분히 성숙되었다.

    참고: [OpenROAD Project] /
             [Toward an Open-Source Digital Flow: First Learnings from the OpenROAD Project]

FPGA 들이 저렴한 가격으로 널리 보급되어 반도체 설계 "덕후(enthusiast)", 또는 "메이커(Maker)"들이 등장하고 이제는 "반도체 설계"가 취미의 영역에 진입했다고 할 정도다. 예전에 유로였던 FPGA 개발 도구들도 무료로 사용 할 수 있도록 개방되는 추세다. FPGA 벤더에서 배포하는 개발도구 패키지 내에 오픈-소스 도구가 상당부분 차지하고 있음은 물론이다. 이에 덧붙여 국내에는 무료 MPW 사업 "내 칩 제작 서비스"가 수행되고 있고, 해외에서는 "닥치고 ASIC(Keep Calm & make ASIC)"이라는 기치아래 저렴하게 내 칩을 제작해주는 "Tiny Tapeout"서비스가 실시되고 있다. 이럼에도 국내 고등교육기관의 반도체 설계 교육 과정은 이러한 오픈-소스 개발 환경을 충분히 활용하지 못한다.

오픈-소스와 상용 도구의 개방(또는 저가공급)정책으로 반도체 설계 교육의 큰 장애가 되어왔던 고가의 설계 소프트웨어(EDA Tool) 라이센스 문제는 상당히 해소 되었다고 할 수 있다. 또다른 애로점으로 ASIC의 공정 기간을 들고 있다. 설계 데이터(레이아웃 DB)를 칩 제조 공장에 제출하고 실제 칩이 나오기까지 공정 기간이 4~6개월 가량 소요된다. 공정기간이 긴 탓에 교육과정을 꾸리는데 어려움이 있다고 한다. 이에 덧붙여 생활속에서 느끼는 발전된 반도체 기술과 교실에서 배우는 내용 사이의 엄청난 추상성 격차는 쉽게 극복하기 어렵다. 이런 상황에서 학부 학생들에게 교과서에 등장하는 각종 최신 공학적 방법론을 실습없이 이해하라는 것은 부당하다. 이러한 애로점(교육자재의 부족, 긴 공정기간, 학과목 간의 연계 부족)을 해소하고 반도체 설계 역량을 강화하기 위한 방안으로 "내 칩 설계 교실" 개설을 아래와 같이 제안한다.

내 칩 설계 교실

회로(아날로그 및 디지털)설계와 소프트웨어 프로그래밍(C++, Python) 및 하드웨어 기술(Verilog, VHDL)용 컴퓨팅 언어는 현재 대학의 교육과정에 모두 포함되어있다. 이들 과목이 칩 설계에 통합되지 못하여 마치 반도체 설계와는 무관한 듯이 여겨지는 실정이다. 이를 극복하기 위하여 "내 칩 설계 교실"을 운영하고자 한다. 이 "교실"에서는 약 6개월에 걸쳐 칩 설계를 Top-Down 방식으로 수행한다.


"내 칩 반도체 설계교실"의 설계 방법론(오른쪽 그림)과 VLSI 시스템 설계의 교과서에 등장하는 Y- 차트(왼쪽 그림)의 비교. 시스템 수준(System Level), 레지스터 트랜스퍼 수준(RTL, Register Transfer Level), 회로 및 레이아웃 수준(Circuit & Layout) 그리고 칩 테스트(Chip Test)까지 반도체 설계 전 과정을 실습을 통해 학습힌다.


학습 전략:

- "내 칩 MPW" 응모(접수) 2회: 학습 초기에 1차, 학습 후 2차

- 제시된 예제로 반도체 설계 방법론을 익히기
        - 칩이 제작되어 나오기까지 수개월이 걸려 학습 공백을 피하기 위해,
        - 오픈-소스 반도체 설계 도구를 익히면서 "내 칩 MPW"에 응모(1차 접수)
        - 학습자 스스로 설계를 준비하기 어렵다면 준비된 예제를 사용
        - 동일한 예제라도 설계 도구에 주어지는 옵션에 따라 상이한 레이아웃이 생성되므로,
        - 예제 따라하기를 통해 반도체 설계 플로우와 설계 자동화 도구의 사용법 학습

- 칩이 제작되어 나올때까지 반도체 설계 전 과정 학습
        - C/C++, Python 및 베릴로그 언어로 알고리즘 기술 및 합성과 시뮬레이션 기법을 학습
        - SystemC/C++ 와 베릴로그 Co-Simulation 테스트 벤치 작성 기법 학습
        - FPGA+Arduino 활용 Co-Emulation 검증 기법 학습
        - 칩이 제작되어 출고되는 즉시 테스트를 실시할 수 있도록 준비

- HLS(High-Level Synthesis) 고급 설계 기법 학습
        - C++로 기술된 알고리즘을 RTL로 합성
        - Co-Simulation 테스트 벤치
        - FPGA 구현 후 Co-Emulation (테스트벤치 재활용)
        - ETRI050 노드로 GDS 생성

학습 목표:

    "내 칩 설계교실" 학습을 마친 후,

        - 반도체 산업 생태계에서 설계와 검증의 의미를 이해한다.
        - 반도체 설계 과정을 이해한다.
        - VLSI System Y-Diagram을 설명할 수 있다(Gajski-Kuhn chart).
        - "추상화 수준"의 의미를 이해한다.
           (System Level vs. Register Transfer Level vs. Circuit-Level)
        - "내 칩"을 설계하여 MPW에 응모(접수)한다(2차).
        - 상용 반도체 설계 도구 교육(IDEC 등) 수강시 이해도를 높인다.

학습 일정:

    단계1: 오픈-소스 도구 사용 반도체 설계 과정의 이해
        - 반도체 설계가 이뤄지는 과정(Design Flow) 이해
        - 오픈-소스 반도체 설계 도구 사용법 익히기
        - 예제를 활용하여 GDS 생성 후 "내 칩 제작 서비스" 접수 (1차)

    단계2: 반도체 설계용 컴퓨팅/개발환경 이해
        - 리눅스 운영체제와 Command-Line Interface 익히기
        - Tcl 스크립트 작성법
        - Makefile 작성법
        - C++, Python 심화 학습

    단계3: 베릴로그 언어 알고리즘 기술 및 검증
        - 베릴로그 언어 이해 및 심화학습
          * 오픈-소스 베릴로그 시뮬레이터: iVerilog, Verilator(베릴로그 SystemC/C++변환기)
        - C++ 언어와 SystemC 테스트 벤치 작성법
        - 이종 시스템 설계 언어를 혼용한 Co-Simulation 방법(Verilog VPI+SystemC/C++)
        - FPGA+아듀이노+라즈베리 파이 활용 이종 모델 사이의 Co-Emulation
           (테스트벤치/소프트웨어+FPGA 연동/하드웨어)

    단계4: 베릴로그 합성기와 자동 배치배선
        - 오픈-소스 합성기(Yosys)의 이해 및 로그 해석
        - 합성 후 네트리스트의 이해 및 시뮬레이션
        - 자동 배치배선 도구(GrayWolf & QRouter)의 옵션 이해
        - 외부공급 셀(GPIO & PCell) 들여오기
        - 레이아웃 GDS 검토(Magic & Klayout)

    단계5: 표준 셀 레이아웃
        - 회로도 작성(XSchem)
        - 오픈-소스 도구로 레이아웃 그리기(Magic 툴 사용법)
          * Magic은 레이아웃에서 회로 네트리스트(트랜지스터 및 RC 성분)추출 가능
        - 표준 셀 레이아웃 및 회로 시뮬레이션(ngSPICE)
        - 표준 셀의 설계 자동화 도구 연계(Liberty, LEF 형식 이해) 방법
          * 오픈-소스 베릴로그 합성기(Yosys), 자동 배치(GrayWolf) 배선기(QRouter)

    단계6: 사인-오프의 이해
       - LVS:Layout-Versus-Schematic 검사
       - DRC:Design Rule Check 검사
       - Stacked Via 검사
       - "내 칩 서비스" 파운드리와 DRC 교차 검사(Caliber 툴 로그 해석)

    단계7: 칩 테스트
        - 테스트벤치 재사용 기법
        - SystemC/베릴로그 테스트 벤치와 FPGA 연동 인터페이스
        - 아듀이노 DUE 펌웨어 작성: 테스트 벡터 생성, 출력 획득 및 시현
           * Arduino DUE FreeRTOS 활용(필요시)
        - 디버깅용 측정장치 자작: 로직 아날라이져, 오실로 스코프

    단계8: 고수준 합성(High-Level Synthesis)
        - C/C++ 언어로 기술된 고 추상화 수준 알고리즘(설계)의 RTL 합성과 FPGA 검증
        - FPGA 하드웨어용 병렬 프로그래밍을 위한 C++ 코드 최적화
        - 고위합성(HLS)으로 얻은 RTL의 분석 및 최적화
        - ETRI050 노드 적용 레이아웃 생성

    단계9: "내 칩" 제작 응모 (2차)
        - "내 칩 제작 서비스"의 MPW 표준 칩 요건에 맞추기

    학습평가:

        - 학습 단계별 실습 보고서
        - "내 칩" MPW 제작 응모(1, 2차)및 테스트 결과 보고서

교육에 활용될 예제의 구성

교육에 사용될 각 예제는 아래와 같은 구성을 갖춘다.

1. 추상화 수준별 모델링 기법에 따라 알고리즘이 기술될 것
    - Un-Timed C-Model
    - Timed SystemC Model
    - Verilog RTL Model

2. 각 모델의 테스트 벤치가 작성되어 있을 것
    - C++/SystemC/Verilog 혼합 테스트 벤치 작성

3. RTL 모델이 기능검증될 것
    - C++로 기술된 알고리즘에서 RTL로 수동 변환
    - SystemC 테스트 벤치에 FPGA 에뮬레이션

4. FPGA 에뮬레이션을 수행할 것
    - 칩 테스트 준비

5. ETRI050 테크-노드에 맞춰 레이아웃 생성 될 것
    - 합성 스크립트
    - 자동 배치배선 스크립트
    - LVS 와 DRC, 적층 비아검사 스크립트
    - 공정 제출용 Chip-Top GDS 생성
    - 공정 DRC 검토 후 확인 받을 것(옵션)
    - 합성 후 네트 시뮬레이션이 수행되어야 함
    - 타이밍 시뮬레이션 수행(옵션)

6. C++ 모델 합성(옵션)
    - Vitis-HLS 도구 사용 C++를 RTL 로 합성
    - HLS로 합성된 RTL을 여러 FPGA에 구현(Xilinx/Altera/Gowin)
    - HLS로 합성된 RTL을 ETRI050 디자인 킷으로 합성 및 자동 배치배선
    - ETRI050으로 합성된 네트리스트와 SystemC 테스트벤치 Co-Simulation

7. 모든 과정(추상화 수준)을 수행하고 재현 가능한 스크립트가 준비될 것
    - Makefile

예제의 예

학습을 위해 준비될 예제는 아래와 같다.
    - FIR8 : 8-Tap FIR Filter
    - ALU8: 8-비트 범용 ALU
    - Pong-Game: 간단한 탁구 비디오 게임기
    - CPU6502: 8 비트 마이크로 프로세서
    - (흥미있는 예제 계속 추가/수료생 설계물 포함)


탁구 비디오 게임 예제의 Co-Simulation 및 Co-Emulation
https://youtu.be/3liwrc6pmU4?si=pRq8rO8HAETE5ZWz


CPU6502 예제의 Co-Simulation 및 Co-Emulation을 통해 Apple BASIC 작동
https://youtu.be/41fe34rDZ78?si=BQYJDhebucVlX97y


"내 칩 MPW" 서비스를 통해 제작된 칩의 테스트. 자작한 측정 장치를 사용함

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

FPGA 에뮬레이션 키트(교보재)

현재 각 대학에서 상용 레이아웃 툴을 교육용으로 라이센스 하고 있는데 5카피에 연간 1천만원 가량 이라고 한다. 상용 툴은 설치후 활용하려면 관리비가 드는데 이를 포함한 가격인지 알수 없다. 상용 레이아웃 툴을 도입한다 해도 교육과 관리(PDK 지원 등)가 없으면 칩 제작에는 무용지물이다. 위의 비용으로 온-사이트 교육을 지원 받기는 어려울 것이다. 교육 목적의 레이아웃 툴을 IDEC을 통해 공급 받는데 수량이 모자라 따로 학교마다 구입한다는데 사업비를 허비한다는 생각을 지울 수가 없다. 상용 툴이 취업을 대비하여 회사에서 사용하니 어쩔 수 없다는 말들을 하지만 대학내에 상용툴을 회사에서 요구하는 만큼 활용하고 교육할 수 있는 환경이 되어 있는지도 의문이다. 본 "교실"의 과정을 마치고 IDEC 에서 실시하는 각종 상용 도구의 무료교육에 참여하면 성과를 얻을 것이다.

상용 설계 도구의 라이센스 비용으로 학생들에게 교보재로 FPGA와 아듀이노 보드를 포함한 에뮬레이션 검증 키트를 제공하여 맘껏 쓰게 하는 편이 좋을 것이다. 에뮬레이션 키트는 이미 방안을 마련하여 놓았다.

학습자에게 1인당 1세트로 제공된 FPGA 에뮬레이션 키트는 실습비나 소모재 비용으로 충당하여 소실과 고장을 두려워 하지 않고 맘껏 활용 될 수 있도록 한다.


다양한 조합의 FPGA와 마이크로 컨트롤러 보드 활용 반도체 설계 검증 에뮬레이터 키트를 개발했다. FPGA와 MCU 보드는 기성품을 사용하고 통합(응용) 보드는  누구나 쉽게 조립(땜질) 할 수 있도록 2.54mm 피치 헤더핀을 사용하여 PCB 제작하였다.

        - FPGA: Gowin GW-25K/Xilinx Artix7/Altera Cyclone
        - MCU: Arduino DUE/ESP32/Raspberry Pi PICO

가장 저렴한 구성은 다음과 같다.

        - Altera Cyclone EP4CE6C8(144-Pin TQFP) 모듈과 통합보드
         
          Cyclone IV EP4CE6 는 로직 엘리먼트 6천개, 내장 메모리 270키로 비트로 용량이 다소 작다.

          - JTAG 케이블
        
            FPGA 다운로더. Xilinx 케이블 이지만 호환성이 뛰어나 범용 JTAG 케이블로 사용할 수 있다.
            Digilent HS2로 작동, Xilinx 및 Altera FPGA 다운로더로 사용

        - Arduino DUE 모듈과 어댑터 보드
           
          ARM-M3 코어, 512K바이트 롬, 96K 바이트 램 내장
          디지털 IO 54개(PWM 가능 12개), 아날로그 IO(ADC 6채널, DAC 2채널)

        - 자작 오실로스코프/로직 아날라이져 Scoppy PI Pico와 입출력 보드

           
             Scoppy는 안드로이드 앱이다. 휴대전화를 오실로스코프/로직아날라이져의 표시장치로 활용

        - MyChip Tester

           
               "내 칩 제작 서비스"의 표준 패키지 28-핀 SOP 칩 테스트용 소켓과 프로브 용 클립

       
           전압 레벨 쉬프터로 5V로 작동하는 MyChip을 3.3V FPGA/MCU에 연결 (6개 필요)

FPGA와 MCU 모듈 등 기성부품들의 통합 보드들은 중국의 샘플 업체를 통해 PCB 제작하였다. 3종의 보드 각 5매 샘플 제작에 UPS 배송료 포함 3.5만원 이다. 잡자재(핀 헤더, 전원 케이블 등)을 포함하면 재료비는 약 15만원/세트 가량 들 것으로 예상한다. 회로도와 PCB 자료 그리고 모델링 인터페이스 소프트웨어/아듀이노 펌웨어와 베릴로그 RTL, C++ HLS 예제들은 모두 깃-허브에 공개되어있다.

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

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

자료공개 원칙

디자인 킷과 예제(문서를 포함하여)는 깃-허브 저장소에 모두 공개함을 원칙으로 한다. 위 교실에 참여한 학습자의 작품은 완성도를 갖춰 크리에이티브 커먼즈/저작자표시-비영리-변경가능(Creative Commons/BY-NC)에 준하여 공개하는데 동의할 것.


https://creativecommons.org/licenses/by-nc/2.0/kr/