2024년 1월 30일 화요일

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

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

I. 개요

경희대학교 반도체 전공트랙 사업단에서 ETRI 0.5um CMOS 공정용 표준-셀 기반 디자인 킷을 개발 하였다. 이 디자인 킷을 활용한 디지털 반도체 설계에 필요한 도구들의 설치 방법을 설명한다. 사용된 도구들은 모두 모두 오픈-소스다. RTL 베릴로그 HDL에서 레이아웃 생성까지 오픈-소스 도구들을 사용한 설계 예제들은 아래와 같다.

    1. ALU8: 8-비트 산술논리 연산기 [바로가기]
    2. CPU 6502[link]: 8비트 마이크로 프로세서 [바로가기]
    3. CPU Z80[link]: 8비트 마이크로 프로세서 [바로가기]

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

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

리눅스가 설치된 독립된 컴퓨터에 리눅스를 설치할 수도 있지만 윈도우즈 10/11에 하위 시스템으로 리눅스를 설치하면 파일을 교환이나 소프트웨어의 활용 등 장점이 많다. 윈도우즈 PC에서 리눅스를 설치하는 방법으로 WSL(Windows Subsystem for Linux [link])을 쓰기로 한다.

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

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

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

    PS> wsl --set-default-version 2
    PS> wsl --update

마이크로소프트 스토어에서 Ubuntu 를 검색해 20.04.6 LTS 를 받아서 설치한다. 우분트 리눅스의 기본 기능만 설치하게 된다.

III. 사전 설치 패키지

오픈-소스 도구들은 개발자의 취향에 따라 사용되는 개발용 패키지(라이브러리)들이 제각각이다. 모두 찾아서 설치해 주어야 한다. 아래 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 스크립트 엔진들이다.

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 InitiativeSi2])와 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]

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

오픈 소스 도구들과 디자인 킷 빠른 설치 법:

1. 디자인 킷 내려받기:

    ETRI050_DesignKit v.1b [Download]

    내려받은 압축 파일 풀기:

    $ cd ~
    $ tar xvf ETRI050_DesignKit-v.1b.tar.gz

2. 오픈 소스 도구들 설치 스크립트 압축 파일 내려받기:

    Tools v.1b [Download]

    내려받은 압축 파일 풀기:

    $ cd ~
    $ tar xvf Tools-v.1b.tar.gz

3. 아래와 같은 순서로 설계도구 빌드 및 설치:

    $ cd ~
    $ Tools

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

    $ ./yosys_build.sh

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

    $ ./graywolf_build.sh

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

    $ ./qroute_build.sh

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

    $ ./magic_build.sh

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

    $ ./irsim_build.sh

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

    $ ./netgen-1.5.255_build.sh

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

    $ ./gtkwave_install.sh

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

    $ ./klayout_install.sh

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

    $ ./systemc_build.sh

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

    $ ./verilator_build.sh

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

    $ ./iverilog_build.sh

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

    $ ./xschem_build.sh

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

    $ ./ngspice42_build.sh

    * QuestaSim[링크]: HDL 시뮬레이터(상용)의 무료 라이센스:

    Intel Self-Sevice Licensing Center[link]

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


ETRI 0.5um CMOS Std-Cell DK 예제: Z80

ETRI 0.5um CMOS Std-Cell DK 예제: Z80

목차

I. 개요

II. 시스템 수준 테스트 벤치

    II-1. Z80 컴퓨터 시스템 모델

    II-2. Z80 CPU의 베릴로그 RTL

    II-3. 베릴로그 RTL과 SystemC/C++의 결합

        simulation/sc_CPU_Z80_Top.h

        simulation/obj_dir/Vcpu.h

        simulation/mti_sim/CPU_Z80.h

        simulation/mti_sim/Vcpu.h

        베릴레이터의 언어 변환(Language Translation) 시뮬레이터

        QuestaSim의 동적 링크(Dynamic Linking) 시뮬레이터

    II-4. 동기식 메모리 및 주변장치 모델

        simulation/sc_Memory.h

        simulation/sc_Memory.cpp

        simulation/sc_Peripheral.h

        simulation/sc_Peripheral.cpp

    II-5. Z80 컴퓨터

        simulation/sc_Main.cpp

    II-6. Z80 컴퓨터의 표준 입력 장치

        simulation/z80_stdio.cpp

III. Z80 CPU 기능적 검증

    III-1. 모니터 프로그램

    III-2. Z80 시뮬레이터 빌드

        simulation/Makefile

    III-3. Z80 시뮬레이터 실행

        메모리에 응용 프로그램을 적재하는 방법

        Z80 어셈블러

        좀더 검증, Microsoft BASIC

    III-4. HDL 과 SystemC의 병행 시뮬레이션(Co-Simulation)

        QuestaSim 의 SystemC

        simulation/mti_sim/compile_fun.do

        Verilator vs. QuestaSim HDL simulator

IV. Z80 CPU 베릴로그 합성

    IV-1. Yosys의 Z80 합성

    IV-2. 합성 후 네트 시뮬레이션

V. 자동 배치와 배선

    V-1. 자동 배치

    V-2. 네트리스트 파일 형식

     V-3. 자동 배선

VI. 레이아웃 검증

    VI-1. 배선 후 얻은 DEF

    VI-2. LVS 레이아웃 검증

    VI-3. 겹친 접점(Stacked VIA) 검사

        DEF 에서 Magic 레이아웃 변환

        LVS: 배선 후 레이아웃 네트리스트 vs 합성 후 네트리스트 비교

    VI-4. 디자인 룰 검사

VII. 실습요약

VIII. 맺음말

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

[] z-80 Verilog, https://github.com/Time0o/z80-verilog.git

SDCC(Small-Device C Compiler)

https://sdcc.sourceforge.net/




2024년 1월 26일 금요일

ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502 [목차/맺음말]

ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502

목차

I. 개요

II. 시스템 수준 테스트 벤치

[1부]

    II-1. Apple-1 컴퓨터 시스템 모델
    II-2. 6502 CPU의 베릴로그 RTL

[2부]

    II-3. 베릴로그 RTL과 SystemC/C++의 결합
        simulation/sc_CPU_6502_Top.h
        simulation/obj_dir/Vcpu.h
        simulation/mti_sim/CPU_6502.h
        simulation/mti_sim/Vcpu.h
        베릴레이터의 언어 변환(Language Translation) 시뮬레이터
        QuestaSim의 동적 링크(Dynamic Linking) 시뮬레이터

    II-4. 동기식 메모리 모델
        simulation/sc_mem.h
        simulation/sc_mem.cpp

    II-5. Apple-1 컴퓨터
        simulation/sc_main.cpp

[3부]

    II-6. Apple-1의 표준 입력 장치: 키보드
        simulation/a1_keyboard.cpp
        Apple-1의 입력용 PIA: 메모리 매핑된 키보드 포트

    II-7. Apple-1의 표준 출력장치: 디스플레이
        simulation/a1_display.cpp
        Apple-1의 출력용 PIA: 메모리 매핑된 디스플레이 포트

III. 6502 CPU 기능적 검증

    III-1. 모니터 프로그램
        WozMon

    III-2. Apple-1 시뮬레이터 빌드
        simulation/Makefile

    III-3. Apple-1 시뮬레이터 실행
        Apple-1 메모리에 응용 프로그램을 적재하는 방법
        6502 C 컴파일러
        좀더 검증, Applesoft BASIC

    III-4. HDL 과 SystemC의 병행 시뮬레이션(Co-Simulation)
        QuestaSim 의 SystemC
        simulation/mti_sim/compile_fun.do
        Verilator vs. QuestaSim HDL simulator

IV. 6502 CPU 베릴로그 합성

    IV-1. 유한 상태 기계(FSM)

    IV-2. CPU의 명령 디코더

    IV-3. Yosys의 FSM 합성기

    IV-4. 합성 후 네트 시뮬레이션

V. 자동 배치와 배선

    V-1. 자동 배치

    V-2. 네트리스트 파일 형식

     V-3. 자동 배선

VI. 레이아웃 검증

    VI-1. 배선 후 얻은 DEF

    VI-2. LVS 레이아웃 검증

    VI-3. 겹친 접점(Stacked VIA) 검사
        DEF 에서 Magic 레이아웃 변환
        LVS: 배선 후 레이아웃 네트리스트 vs 합성 후 네트리스트 비교

    VI-4. 디자인 룰 검사

VII. 실습요약

VIII. 맺음말

6502 CPU는 70년대 중반에 생산되기 시작하여 Apple-1 컴퓨터를 비롯하여 다양한 컴퓨터와 게임기에 사용되었다[바로가기]50년전의 CPU를 이제와서 다시 설계하는 이유는 설계기법과 환경의 어떻게 변했는지 살펴보기 위함이다. 사실 반도체를 전자회로로 따진다면 달라진 것은 없다고 해도 과언은 아니다. 다만 칩 당 집적되는 규모의 급격한 증가(회로의 트랜지스터 갯수로 따져 본다면 수천개에서 수억개로 늘었다)에 따른 제조 및 설계 비용이 관건이다. 설계시간과 비용의 압박을 극복하고자 여러 기법이 등장하고 자동화 도구들의 발전해왔다. 그중에서도 하드웨어 기술 전용 언어[바로가기]를 사용한 반도체 설계 기법은 이제 일반화 되었고 소프트웨어 개발용이라고 알려진 일반 컴퓨팅 언어들도 반도체 설계와 검증의 용도로 사용된다[바로가기]. 컴퓨팅 언어보다 높은 추상화 수준의 시스템 모델링 도구들도 사용되고 있다. 화려한 외양을 갖춘 고가의 시스템 검증 도구들은 언듣 보기에 멋져 보일지 모르지만 융통성이 매우 적다. 많은 것을 할 수 있다고 하지만 정작 하려면 할게 없다. 결국 또다른 언어로 귀결될 것이다.

시스템의 일부로 사용될 하드웨어를 설계할 때 짜여진 순서에 의거한 시험은 불완전한 시험이 될 수 있다. 하드웨어 설계가 우선인 여건(개발시간의 압박, 제한된 인력 투입 등)에서 실제 적용될 시스템에서 일어날 돌발 상황을 모두 고려한 시스템 모델을 만들어내기 어렵다. 하드웨어 기술 언어는 고도의 시스템 모델을 구현하기에 적합하지 않다. 이를 극복하기 위해 다양한 시스템 모델링 도구가 상용화 되어 있긴 하지만 하드웨어 기술 언어와 큰 격차를 좁히기 어렵다. 시스템 모델링이라고 표방하는 도구들의 실체를 보더라도 코드 생성기(IP generator)라고 봐야 할 것이다.

소프트웨어 제작 기술이 발전하여 이종 언어간 혼합 실행 기법이 널리 활용되는 지금 굳이 어렵게 하드웨어 언어로 테스트 벤치 작성하는 일은 줄어들고 있다. 하드웨어 언어는 설계에 집중하고 시스템 수준 검증도구로 C/C++를 활용하는 추세다. 하드웨어 언어에 C/C++의 연결이 표준화 되었으나 반도체 설계자들은 오히려 역사 깊은 C/C++ 언어에 대한 이해가 부족한 실정이다. 이는 화려한 외양을 갖춘 시스템 설계 도구들이 등장하는 이유이기도 하다.

6502는 반세기 전의 CPU 이긴 하나 오늘날의 정보산업 사회를 연 시발점이라고 해도 과언이 아니다. C 언어 컴파일러를 비롯하여 수많은 개발도구, 응용 프로그램이 등장 했다. 본 예제는 RTL 베릴로그로 기술된 CPU를 검증 하기위한 테스트 벤치로 SystemC를 이용하여 47년전 발매된 Apple-1 컴퓨터 시뮬레이터를 제작하였다. 하드웨어의 시스템 수준 모델링을 위해 C++ 프로그래밍 언어의 크래스 라이브러리로 개발된 SystemC를 사용하였다. HDL과 SystemC의 병행 시뮬레이션(Co-Simulation)이다. Apple-1 시뮬레이터는 발매당시 탑재되었던 워즈니악의 모니터 프로그램을 수정 없이 실행 될 뿐만 아니라 어셈블러, C 컴파일러에서 생성된 2진 코드를 실행 시킬 수 있다. Applesoft의 BASIC 바이너리도 완벽히 실행된다. 예제의 Apple-1 시뮬레이터는 높은 추상화 수준의 SystemC/C++를 이용하면 시스템 수준 RTL 검증을 효과적(낮은 비용, 짧은 개발 기간)으로 수행 할 수 있음을 보여준다.

시스템 수준 검증이 완료된 6502 CPU의 RTL 베릴로그는 오픈 소스 도구들 만을 사용하여 GDS까지 생성한다. 합성기로서 Yosys, 지동 배치와 배선에 GrayWolf와 QRouter 그리고 레이아웃 편집, 디자인 룰 검사, 그리고 GDS 생성 도구로 Magic이 사용 되었다. 합성전 기능 검증과 합성 후 네트리스트 시뮬레이션을 실시하였다. HDL과 SystemC의 병행 시뮬레이션에 상용 QuestaSim을 사용하고 오픈 소스 언어변환 도구인 베릴레이터(VERILATOR)와 비교하였다. 아울러 합성 네트리스트와 레이아웃 추출 네트리스트의 비교 LVS 도 수행 하였다. 대상 공정은 ETRI 0.5um CMOS 2P3M 이다. 표준 셀 라이브러리는 경희대학교 반도체 전공 트랙에서 개발한 디자인 킷을 활용하였다.

검증의 도구로서 분만 아니라 미래의 반도체 설계 언어로 C/C++가 도입되기 시작 했고 이를 RTL로 합성하는 자동화 도구 HLS (Hihg-Level Synthesis)들이 상용화 되었다. 이제 하드웨어 설계자 들도 RTL의 HDL에서 벗어날 때가 되었다. 오늘날 어셈블리언어로 소프트웨어를 개발하는 사례를 찾아볼 수 없듯이 하드웨어 설계도 곧 그런 시대가 될 것이다.

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

[이전 게시글 참조]

예제 실습: "Verilog RTL에서 GDS 레이아웃 까지"

1. SystemC 및 SDL2 라이브러리 빌드 하는 방법 [링크]

2. Project_6502 예제의 SystemC 테스트 환경 빌드 및 실행하기 [링크]

3. Project_6502 예제의 기능적 Co-Simulation 실시 방법 [링크]

4. Project_6502 예제의 합성 후 Co-Simulation 실시 방법 [링크]

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

참고/웹 링크

[1] ETRI 0.5um STd-Cell Design Kit/KHU, https://fun-teaching-goodkook.blogspot.com/2023/12/etri-05u-cmos-v1a-2023-12-13.html

[2] KION 국가나노 인프라 협의체, https://kion.or.kr/

[3] KION 국가나노 인프라 협의체, 내칩 MPW, https://mpw.kion.or.kr/

[4] MOS Technology, https://en.wikipedia.org/wiki/MOS_Technology

[5] MOS 테크놀로지 6502, https://namu.wiki/w/%EB%AA%A8%EC%8A%A4%20%ED%85%8C%ED%81%AC%EB%86%80%EB%A1%9C%EC%A7%80%206502?from=6502

[6] Retro Computing/Apple-1 Replica, http://retro.hansotten.nl/6502-sbc/apple-1/

[7] Apple-1 Replica,"Insanly Great", https://www.apple-1-replica.com/

[8] [넥슨컴퓨터박물관] 애플I 소장품 실제 구동영상 (Apple1, AppleⅠ), https://www.youtube.com/watch?v=TgKgH5abLfg

[9] Arlet's 6502 Github, "A Verilog HDL version of the old MOS 6502 CPU.", https://github.com/Arlet/verilog-6502

[10] SystemC, https://systemc.org/

[10a] C/UNIX Functions for VHDL Testbenches, http://bear.ces.cwru.edu/VHDL/doc/snug2002_20040606_slides.pdf

[10b] SystemC, Bridge the Gap, https://drive.google.com/file/d/11MSOZ4e592zwhy8jXRqmM6qg1AiMCfcd/view?usp=sharing

[10c] 시스템 수준 언어: SystemC & SystemVerilog, https://drive.google.com/file/d/11fQKIcAC78B5gLcw-FZkJ800B1PV7o3B

[11] Steve Wozniak, https://en.wikipedia.org/wiki/Steve_Wozniak

[12] ICARUS Verilog, https://steveicarus.github.io/iverilog/

[13] Icarus Verilog, Wikipedia, https://en.wikipedia.org/wiki/Icarus_Verilog

[14] iVerilog 동영상, https://www.youtube.com/results?search_query=icarus+verilog+iverilog

[15] VERILATOR, https://www.veripool.org/verilator/

[16] Co-Simulation, https://en.wikipedia.org/wiki/Co-simulation

[17] What is Cosimulation ?, https://opensimulationplatform.com/co-simulation/

[18] QuestaSim Advanced Simulator, https://eda.sw.siemens.com/en-US/ic/questa/simulation/advanced-simulator/

[19] Intel QuestaSim FPGA Edition, https://www.intel.co.kr/content/www/kr/ko/software/programmable/quartus-prime/questa-edition.html

[20] Hardware Description Language, https://en.wikipedia.org/wiki/Hardware_description_language

[21] OpenROAD Project Publications, https://theopenroadproject.org/publications/

[22] The Linux Programming Interface: A Linux and UNIX System Programming Handbook, https://en.wikipedia.org/wiki/The_Linux_Programming_Interface, [e-Book]

[23] High-Level Synthesis, https://en.wikipedia.org/wiki/High-level_synthesis

[24] Integrating SystemC Models with Verilog and SystemVerilog Models Using the SystemVerilog Direct Programming Interface, https://sutherland-hdl.com/papers/2004-SNUG-Europe-paper_SystemVerilog_DPI_with_SystemC.pdf

[25] Towards Automatic High-Level Code Deployment on Reconfigurable Platforms: A Survey of High-Level Synthesis Tools and Toolchains, https://ieeexplore.ieee.org/abstract/document/9195872

[26] HLS Blog, https://hls-goodkook.blogspot.com/2021/08/ug871-xilinx-high-level-synthesis.html

[27] WozMon, http://retro.hansotten.nl/6502-sbc/apple-1/

[28] cc65 C-Compiler for 6502, https://www.cc65.org/

[29] Verilog BASIC, Intel, https://youtu.be/PJGvZSlsLKs?si=-DU-GBL5oDlex0G_

[30] Verilog HDL 입문 8시간 완성, https://youtu.be/HcdlkMI54Vg?si=LMxz8U-LbaNKa3lC

[31] SystemVerilog DPI, https://en.wikipedia.org/wiki/SystemVerilog_DPI

[32] Tutorial On DPI, https://github.com/adki/DPI_Tutorial

[33] Xilinx Synchronous RAM Timing, https://docs.xilinx.com/r/en-US/am007-versal-memory/NO_CHANGE-Mode-DEFAULT

[34] Apple-1 Operation Manual, http://retro.hansotten.nl/uploads/apple1/APPLE%20I_Operation%20Manual.pdf

[35] Inter-Process Communication, https://en.wikipedia.org/wiki/Inter-process_communication

[36] GNU Make 강좌, https://doc.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html#toc1

[37] Intel HEX, https://en.wikipedia.org/wiki/Intel_HEX

[38] 6502 Instructions, https://www.cs.otago.ac.nz/cosc243/pdf/6502Poster.pdf

[39] Synopsys' Open-Source Liberty Format to Incorporate On-Chip Variation Extensions, https://news.synopsys.com/index.php?s=20295&item=123415

[40] Liberty Timing File, https://redirect.cs.umbc.edu/~cpatel2/links/641/slides/lect05_LIB.pdf

[41] Finite State Machine, https://en.wikipedia.org/wiki/Finite-state_machine

[42] High Level Synthesis FSM, https://users.ece.utexas.edu/~gerstl/ee382v-ics_f09/lectures/lecture_9.pdf

[43] Instruction Cycle, https://en.wikipedia.org/wiki/Instruction_cycle

[44] Microprocessor Design, WikiBooks, https://en.wikibooks.org/wiki/Microprocessor_Design

[45] State Machine Coding Styles for Synthesis, http://www.sunburst-design.com/papers/CummingsSNUG1998SJ_FSM.pdf

[46] QFlow 1.4 Reference Manual, http://opencircuitdesign.com/~tim/programs/qflow/reference.html

[47] Fast Prototyping of a Deep Neural Network on an FPGA, IEEE Xplore, https://ieeexplore.ieee.org/document/9333030

[48] FINN: A Framework for Fast, Scalable Binarized Neural Network Inference, https://arxiv.org/abs/1612.07119

[49] Tutorial (ISFPGA'2021): Neural Network Accelerator Co-Design with FINN, https://youtu.be/zw2aG4PhzmA?si=mEvtFU988UW5lZ5

[50] Machine Learning on FPGA, https://www.youtube.com/watch?v=4MBbV2gKE98&list=PLGzeDuLmmxDpEsCAjf_sYrMC6p-Y0Ummk

[오픈 소스 반도체 설계도구]

[1] QFlow, http://opencircuitdesign.com/qflow/index.html

[2] OSS CAD Suite (Yosys/iVerilog & etc.), https://github.com/YosysHQ

[3] GrayWolf: 표준 셀 자동 배치 도구, git://github.com/rubund/graywolf

[4] QRouter: 표준 셀 자동 배선 도구, http://opencircuitdesign.com/qrouter/index.html

[5] Magic: VLSI 레이아웃 그리기 및 파일 변환, http://opencircuitdesign.com/magic/index.html

[6] irsim: 스위치 수준 시뮬레이터, http://opencircuitdesign.com/irsim/index.html

[7] Netgen: LVS 검증도구, http://opencircuitdesign.com/netgen/index.html

[8] XSchem: 회로 입력 도구, https://github.com/StefanSchippers/xschem

[9] ngSpice: SPICE 회로 시뮬레이터, https://ngspice.sourceforge.io/

[10] gtkWave: 디지털 회로 파형 VCD 보기, https://gtkwave.sourceforge.net/

[11] KLayout: VLSI 레이아웃 툴, https://www.klayout.de/

[12] SystemC, https://systemc.org/

[13] ICARUS Verilog, https://steveicarus.github.io/iverilog/

[14] VERILATOR, https://www.veripool.org/verilator/

[15] 반도체 설계 오픈 소스 도구, https://fun-teaching-goodkook.blogspot.com/2024/01/etri-05um-cmos-std-cell-dk.html


ETRI 0.5um CMOS DK 예제: ALU8[11]/실습 요약

ETRI 0.5um CMOS DK 예제: ALU8[11]

실습 요약

* 본문을 읽기전에 따라해보기

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

+----------------+                               +------------------+
|Verilog RTL ----|----------------+           +--| Executable Spec. |
+-----+----------+                |           |  +------------------+
      |              +------------V-----------V--------------+
      |              | Functional Simulation                 |
     (?)<<<<<<<<<<<<<<   VERILATOR: Verilog to C++ Converter |
      |              |              SystemC/C++ Testbench    |
      |              +------------------------+--------------+
+-----V-------------------------+             |
|Yosys: RTL Synthesis  <---[Std-Cell Liberty] |
|    -> SPICE Netlist for LVS --|-------------|-------+
|    -> Verilog Netlist         |             |       |
|         for P&R and Post-Sim -|----+        |       |
+---------------+---------------+    |        |       |
                |                    |        |       |
      +---------+     +--------------V--------V-------:---------+
      |               |Post-Simulation <- SystemC Testbench     |
     (?)<<<<<<<<<<<<<<<  Syn. Netlist/Std-Cell's Functional Lib.|
      |               +-------------------------------:---------+
+-----V-------------------------+                     |
|GrayWolfPlacement  <------[Std-Cell LEF/Size]      |
|    -> Unrouted DEF            |                     |
+-----------------+-------------+                     |
                  |                                   |
      +-----------+                                   |
      |                                               |
+-----V-------------------------+                     |
|QRouterRoute     <-------[Std-Cell LEF/Route Rule] |
|    -> Routed DEF              |                     |
+---------------+---------------+                     |
                |                                     |
      +---------+                                     |
      |                                               |
+-----V-------------------------+                     |
|Magic: Migration  <-------[Std-Cell Layout(Mag/GDS)] |
|    -> SPICE Netlist for LVS --|------+              |
|    -> Merged Layout ----------|------|------+       |
+--------------+----------------+      |      |       |
               |      +----------------V------:-------V-------+
      +--------+      | LVS         (Layout vs. Schematic)    |
     (?)<<<<<<<<<<<<<<<     Netgen: SPICE netlist compare     |
      |               +-----------------------:---------------+
+-----V-------------------------+             |
|MagicDRC / Stacked VIA       |             |
|     -> Fixed Layout ----------|------+      |
+---------------+---------------+      |      |
                |      +---------------V------V---------------+
      +---------+      | LVL      (Layout vs. Layout)         |
     (?)<<<<<<<<<<<<<<<<    Netgen: SPICE netlist compare     |
      |                +--------------------------------------+
+-----V-------------------------+
|Magic: GDS Generation          |
|        with ETRI Tech.Rule    |
+---------------+---------------+
                |
          +-----V------+
          |   GDS-II   |
          +------------+
|<------ Design Flow ------>|<------ Verification Flow ------->|

0. 사전준비

    - ETRI 0.5um Std-Cell Design Kit 설치[바로가기]
    - 오픈 소스 툴 설치

        * QFlow / ETRI050
        * Yosys: 합성기
        * GrayWolf: 표준 셀 자동배치
        * QRouter: 자동 배선
        * NetGen: 레이아웃(네트리스트) 비교/LVS
        * Magic: 레이아웃 편집/변환/디자인 룰 검사/GDS 생성

1. 내려받은 예제 파일 압축 풀기

    - 예제 소스 내려받기 [다운로드]
    - 압축 풀기/폴더 구조에 유의할 것
    - 'source' 폴더에 베릴로그 파일 읽어볼 것: RTL 의 이해
        * ALU_wrapper.v
        * ALU.v

2. 시스템 수준 기능 검증 실시/SystemC-HDL Co-Simulation

    - SystemC: 높은 추상화 수준 테스트 벤치 작성
    - Verilog HDL 감싸개(wrapper)
    - 언어변환기(베릴레이터) 사용 테스트 벤치 빌드

    $ cd simulation

    $ verilator --sc -Wall --top-module ALU_wrapper --exe --build \
        ../source/ALU.v ../source/ALU_wrapper.v sc_main.cpp

    $ obj_dir/VALU_wrapper

3. ETRI 0.5um CMOS 공정으로 합성/네트리스트 시뮬레이션

    $ qflow synthesis -T etri050 ALU_wrapper

    - Yosys 합성기
    - synthesis 폴더에 생성된 네트리스트 파일들의 의미
        * RTL 에서 표준 셀의 네트리스트로 추상화 낮춤 변환

    - Netlist simulation (Zero-Delay Functional)

    $ verilator --sc --top-module ALU_wrapper --exe --build \
            ../../../digital_ETRI/khu_etri05_stdcells_func.v \
             ../synthesis/ALU_wrapper.v sc_main.cpp

4. 자동 배치

    $ qflow place -T etri050 ALU_wrapper

    - 표준 셀 배치
    - 자동배치 옵션
        * 배치밀도(initial_density)
        * 배치 가로세로비(aspect ratio)
        * 핀 위치(CEL2)

5. 자동 배선

    $ qflow route -T etri050 ALU_wrapper

    - 겹친 접점(Stacked Via) 금지

6. 표준 셀 병합(migration)

    $ qflow migrate ALU_wrapper

    - Magic DB 스크립트
    - 배선 후 DEF 에서 레이아웃 파일(ALU_wrapper.mag) 생성

7. 레이아웃 네트리스트와 합성 네트리스트 비교

    $ qflow lvs ALU_wrapper

    - LVS 오류 발생 시 조치
    - Magic 레이아웃 편집기로 배선되지 않은 네트를 찾아 수정

    $ magic -d XR ALU_wrapper.mag

    - 유용한 Magic 명령어:
        - select, expand
        - goto <net name>
        - findbox [zoom]
        - save ALU_wrapper_lvs

    - 수정 후 LVS 재실시: LVS 수정 레이아웃(ALU_wrapper_lvs.mag)

    $ ./run_lvs.sh ALU_wrapper_lvs

        LVS 스크립트: run_lvs.sh

    #!/usr/bin/bash
    # Extract Spice for LVS
    ../../../scripts/extract_spice.sh $1
    # LVS check with Synthesis netlist
    netgen -noc -batch lvs \
        "$1.spice $1" \
        "../synthesis/ALU_wrapper.spc ALU_wrapper" \
        setup.tcl \
        LVS_$1.txt

8. 겹친 접점(Stacked Via) 검사

    $ .../scripts/check_via_stack.py ALU_wrapper_lvs \
            m2contact m3contact 6

    - 겹친 접점 에러 표시된 레이아웃(ALU_wrapper_lvs_Stacked.mag) 편집

    $ magic -d XR ALU_wrapper_lvs_Stacked.mag

    - Magic 레이아웃 편집기로 겹친 접점 수정

    - 유용한 Magic 명령어:

        - select, expand
        - drc find next
        - findbox zoom
        - save ALU_wrapper_lvs_Stacked_Fixed
        - 숫자키 패드(방향키) 사용

    - 수정 후 LVS 재실시: 겹친 접점 수정 레이아웃

    $ ./run_lvs.sh ALU_wrapper_lvs_Stacked_Fixed

9. 디자인 룰 체크(DRC)

    $ magic -d XR cpu_lvs_Stacked_Fixed

    - 유용한 Magic 명령어:

        - select top cell
        - expand
        - drc [on/catchup/check/count]
        - snap off
        - grid on
        - erase [layer]
        - 단축키: ':', 'a', 's', 'S', 'z', 'Z', 'x', 'X', 'p', 'u'
        - 숫자키 패드(방향키) 사용
        - DRC manager 창 열기
        - save ALU_wrapper_drc_Fixed

    - 수정 후 LVS 재실시: DRC 수정 레이아웃

    $ ./run_lvs.sh ALU_wrapper_drc_Fixed

10. 입출력 정리

    - 자동화 도구 경직성
        * 지능적이지 않다.
        * 이해하기 곤란한 배선

    - 수정하려면 끝이 없다. 입출력 패드 달기전에 보이는 것 만이라도...

    - 수정 후 DRC & LVS 재실시: 수정 레이아웃(ALU_wrapper_Core.mag)

    $ ./run_lvs.sh ALU_wrapper_Core

11. 입출력 패드 달기

    - chip_top 작업 폴더

    $ pwd

    $ ls -la

    -rwxr-xr-x 1 goodkook ...... .magicrc
    -rw-r--r-- 1 goodkook ...... MY_LOGO.mag
    lrwxrwxrwx 1 goodkook ...... digital_ETRI -> .../digital_ETRI
    lrwxrwxrwx 1 goodkook ...... pads_ETRI050 -> .../pads_ETRI050

    - DRC 완료된 코어 레이아웃 네임-링크

    $ ln -s ../layout/cpu_Core.mag ALU_wrapper_Core.mag

    - 패드 프레임 복사

        * MPW는 칩의 면적과 입출력 핀 수가 고정되어 있다.

    $ cp pads_ETRI050/PAD_FRAME_1825_28pin.mag ALU_wrapper_Top.mag

    - 입출력 패드 배선

    $ magic -d XR ALU_wrapper_Top

    - 유용한 Magic 명령어:

        - box
        - getcell

    - 프레임 에서 코어를 읽어들인 후 입출력 패드 셀 편집

        * 텍스트 편집기 사용

12. GDS 생성

    - 코어와 입출력 패드 배선 ALU_wrapper_Top 에서 각기 다른 경로로 만들어진 부분 분리

    I. 입출력 패드

        - 디자인 킷 스크립트 xPad.py 사용

        $ ....../scripts/xPad.py ALU_wrapper

        - 외부 도구로 제작되어 GDS로 제공된 라이브러리(검증됨)
        - DRC 하지 말것
        - 컨택의 컷(cut)과 오버행(overhang)이 구분되어 있다.

    II. 코어

        - 합성으로 생성된 레이아웃
        - DRC 완료된 Magic 형식
        - 컨택의 컷과 오버행 분리 않됨

    III. 입출력 패드와 코어 배선

        - 디자인 킷 스크립트 xPin_Route.py 사용

        $ ....../scripts/xPin_Route.py ALU_wrapper

        - 입출력 패드와 코어사이의 수동배선
        - DRC 필요
        - 컨택의 컷과 오버행 분리 않됨

    - 코어와 입출력 패드 수동 배선

    ALU_wrapper_Top
    +--------------------------------------+
    |  ALU_wrapper_Pad (MPW Pad Frame)     |
    |    +-----------------------------+   |
    |    |   ALU_wrapper_Pin_Route     |   |
    |    |      +-------------------+  |   |
    |    |      | ALU_wrapper_Core  |  |   |
    |    |      |                   |  |   |
    |    |      |                   |  |   |
    |    |      |                   |  |   |
    |    |      |                   |  |   |
    |    |      +-------------------+  |   |
    |    +-----------------------------+   |
    +--------------------------------------+

    - 칩-탑 구성 요소 분리 후 GDS 생성 및 병합

+--------------------------------------------+      GDS Merge
|  cpu6502_Pad                               |-+   +----------------+
+--------------------------------------------+ |   |                |
                                               +-->| istyle(ETRI-G) |
+------------------------+      GDS Generate       | label off      |
| cpu6502_Pin_Route (DRC)|--+  +--------------+ +->|                |
+------------------------+  +->| flatten      | |  +----------------+
                               | ostyle(ETRI) +-+
+--------------+            +->| gds write    |
| cpu6502_Core |------------+  +--------------+
+--------------+               * Contact/Via Rule

    - 최종 GDS 생성

    $ ../../../scripts/generate_chip.sh ALU_wrapper <um><um><um><um>


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

[목차][이전]