2023년 8월 6일 일요일

디지털 반도체 설계 용 오픈 소스 도구 QFlow

반도체 설계 오픈 소스 도구 QFlow

디지털 반도체 회로 설계과정 중 후반부(back-end)를 담당하는 도구들 이다. 검증된 RTL의 HDL(Verilog 또는 VHDL)에서 반도체 공장에 제출하는 도면 GDS을 생성하는 과정을 말한다. GDS(Graphic Design System)은 IC의 레이아웃을 문서로 표현한 형식. 반도체 제작을 위해 필요한 사진건판(lithography)을 만들기 위한 도면이다.

후반부에 사용되는 도구들

1. 합성기(Synthesizer)

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

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

기판위에 게이트들을 펼쳐놓고 합성기에서 얻은 연결도 대로 배선을 수행한다. 인쇄회로 기판과 같다. 다만 부품 숫자가 감당 할 수 없다. 자동으로 수행한다. 반도체 공정은 3~5중 금속층 배선이다.

3. 정적 타이밍 분석(Static Timing Analysis)

배선을 마치면 각 표준 셀 마다 가지고 있는 지연과 배선으로 인한 지연을 합쳐 회로의 동작 속도를 계산한다. 회로가 동작하는 중 거쳐갈 게이트와 배선의 길이가 다를 수 있으나 정적 타이밍 계산은 단순히 지연 시간을 더한다.

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

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

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

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

6. GDS 생성

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

7. 공정 설계자료(PDK)

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

후반부 작업을 거쳐 공정이 시작되면 돌이킬 수 없다. 반도체 만드는데 엄청난 비용이 소요된다. 소프트웨어의 신뢰도가 무엇보다도 중요하다. 그래서 후반부 작업을 담당하는 도구의 가격이 매우 비싸다.

여러가지 상이한 기능의 도구들이 공정의 PDK에 연계되어 있다. 상이한 도구들 사이에 자료가 옮겨 가면서 오류가 끼어들 소지가 다분하다. QFlow는 PDK를 토대로 통합된 툴 관리를 해준다. QFlow에 통합된 오픈 소스 도구들은 다음과 같다.

  1. Yosys: Verilog 합성기(synthesis)
  2. GrayWolf: 배치도구(placement)
  3. QRouter: 배선 도구(detail router)
  4. Vesta: 정적 시간 분석 도구(timing analysis)
  5. Magic: 레이아웃 편집, GDS 생성, DRC

QFlow의 자세한 내용은 아래 링크를 참고 하자.

    http://opencircuitdesign.com/qflow/index.html

초기 개발비용(Non-Recurring Engineering cost)이 엄청난데다 한번 진행되면 돌이키기 어려운 만큼 반도체 설계도구의 신뢰성과 생산성은 큰 화두가 되었다. 이에 연구개발이 활발하고 새싹기업이 등장 했다가 거대기업에 통합되는 일이 비일비재 했다. 거액을 받음은 물론이다. 위의 도구들은 그 일부 연구자들이 갈래로 만들어 공개한 것들이다. 신뢰성이 매우 중요한 후반부 작업에 오픈 소스 도구를 사용하는데 있어서 망설임은 당연하다. 오픈 소스 도구들의 신뢰성은 본인들이야 자신은 하지만 책임은 지지 않는다. 사용자 몫이다. 사실 상용 도구라 해서 책임져 줄리는 없다.

오픈 소스 도구들은 컴파일된 실행 파일로 배포되기도 하지만 대개 원시 형식으로 배포된다. 사용자가 직접 컴파일 해서 써야 한다. 컴파일 하는 과정에서 오류의 가능성은 없을까? 컴파일러 가 원 개발자와 같은 버젼이 아닐텐데 괜찮을까? 툴을 만드는 일 자체 부터 사용자의 부담이다.

오픈 소스 반도체 개발 도구인 QFlow의 페이지를 보니 32비트 RISC를 공정에 넣어 제작에 성공 했다고 한다. 그렇다면 우리도 해보자. 국내에 대학과 연구기관에 소규모 반도체 공정이 여럿 있는 것으로 알고 있다. MPW 방식으로 공정을 해준다고 한다.

윈도우즈 PC에 리눅스 설치

오픈 소스들을 컴파일하고 실행 할 환경이 대부분 리눅스다. 윈도우즈 PC에서 리눅스를 설치하는 방법으로 WSL(Windows Subsystem for Linux [link])을 쓰기로 한다.

1. 커맨드 창을 열어 아래와 같이 실행한다.

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

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

오픈 소스 설계도구 빌드

리눅스 터미널을 열어 설계도구들을 컴파일 해보자.

1. 리눅스의 패키지 설치용 명령 들

  • apt-get check <package name>
  • apt-get install <package name>
  • apt-get update
  • apt-get upgrade
  • apt-get autoclean
  • apt-cache pkgnames
git commands:
  • git clone <URL>
  • git pull                 # Make sure git repository is up-to-date
  • git tag                  # See what versions exist
  • git checkout master      # Use development branch (Bug Fix)
  • git checkout stable      # Use most recent stable release
  • git checkout v{version}  # Switch to specified release version
우분투 리눅스 시스템에 패키지(앱)을 설치하려면 관리자(리눅스는 root)권한이 있어야 한다. 관리자 권한으로 실행 시키는 방법은 명령 앞에 sudo 라고 선행시킨다. $ 는 리눅스 프롬프트다. 예를 들어,

    $ sudo apt-get update

2. 오픈 소스 툴들을 컴파일 하는데 필요한 패키지들을 설치

    $ sudo apt install build-essential cmake unzip \
                xterm libx11-dev \
                libxaw7-dev x11-xserver-utils \
                clang bison flex gawk git \
                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 libx11-dev libcairo2-dev \
                mesa-common-dev \
                libglu1-mesa-dev libncurses-dev \
                libboost-all-dev libeigen3-dev \
                qtbase5-dev qtdeclarative5-dev \
                libboost-system-dev \
                libboost-python-dev \
                libboost-filesystem-dev \
                gperf gtkwave
 nautilus

3. Yosys: Verilog synthesizer

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

    Build:

    $ cd yosys
    $ make config-gcc
    $ make

    Update:

    $ cd yosys
    $ make clean
    $ sudo make uninstall
    $ rm -rf abc
    $ git clone https://github.com/YosysHQ/abc
    $ make config-clang
    $ make

    Install:

        $ sudo make install

    Test: '14. iVerilog' must be installed for test procedure

    $ make test

4. yosys.eqy : Equivalance Checker

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

    Build & Install:

    $ cd eqy
    $ make
    $ sudo make install

5. yosys.sby : Formal property checker

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

    Build & Install:

    $ cd sby
    $ sudo make install

6. yosys.mcy : Mutation checker

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

    Build & Install:

    $ cd mcy
    $ make
    $ sudo make install

7. yosys.nextpnr : Placement

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

    Build:

    $ cd nextpnr
    $ cmake . -DARCH=generic
    $ make

    Install:

    $ sudo make install

8. Graywolf: Placement

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

    Build:

    $ cd graywolf
    $ mkdir build
    $ cd build
    $ cmake -DCMAKE_C_COMPILER=/usr/bin/clang \
            -DCMAKE_CXX_COMPILER=/usr/bin/clang++ ..
    $ make

    Install:

    $ sudo make install

    Test:

    $ make test

9. QRouter: Generate metal layer (Auto-Router)

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

    Build:

    $ cd qrouter
    $ ./configure
    $ make

    Install:

    $ sudo make install

10. Magic: VLSI Layout

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

    Build:

    $ cd magic
    $ ./comfigure
    $ make

    Install:

    $ sudo make install

    Tech file:

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

11. IRSIM: Switching Simulator

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

    Build:

    $ cd irsim
    $ ./configure
    $ make

    Install:

    $ sudo make install

12. netgen: Net generate & LVS

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

    Build:

    $ cd netgen
    $ ./configure
    $ make

Install:

    $ sudo make install

13-1. RePlAce: Advancing Solution Quality and Routability Validation in Global Placement

    $ git clone --recursive --branch standalone  \
           https://github.com/The-OpenROAD-Project/RePlAce.git

    Build:

    $ cd RePlAce
    $ sudo apt-get install -y libx11-dev libboost-dev \
                        cmake swig flex libtool \
                        zlib1g-dev tcl-dev libjpeg-dev
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make

    Install:

    $ sudo make install

13-2. OpenSTA: Parallax Static Timing Analyzer

    $ git clone https://github.com/The-OpenROAD-Project/OpenSTA.git

    Build:

    $ cd OpenSTA
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make

    Install:

    $ sudo make install

13-3. OpenTimer: A High-Performance Timing Analysis Tool for VLSI Systems

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

    Build:

    $ cd OpenTimer
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make

    Install:

    $ sudo make install

13. QFlow: Digital Synthesis Flow

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

    Build:

    $ cd qflow
    $ ./configure
    $ make

    Install:

    $ sudo make install

14. iVerilog: Verilog Parser & Simulator

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

    Build:

    $ cd iverilog
    $ sh autoconf.sh
    $ ./configure
    $ make

    update:

    $ cd iverilog
    $ make clean
    $ sudo make uninstall
    $ git pull https://github.com/steveicarus/iverilog
    $ sh autoconf.sh
    $ ./configure
    $ make

    Install:

    $ sudo make install

15. ngspice: Circuit simulator

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

    Build:

    $ cd ngspice
    $ ./autogen.sh
    $ mkdir debug
    $ cd debug
    $ ../configure --with-x --with-readline=yes
    $ make

    Install:

    $ sudo make install

16. SystemC: C++ Library

        https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.3.tar.gz

    Build:

    $ cd systemc-2.3.3
    $ autoreconf -i
    $ autoupdate

    mkdir objdir
    $ cd objdir


    export CXX=g++
    $ ../configure --prefix=/usr/local/systemc-2.3.3
    $ make

    Install:

    $ sudo make install

    Use following env. vars:

    $ export SYSTEMC_HOME=/usr/local/systemc-2.3.3
    $ export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include
    $ export SYSTEMC_LIB=$SYSTEMC_HOME/lib-linux64

17. Verilator: Verilog Simulator

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

    Prep:

    $ sudo apt-get install help2man perl perl-doc python3-pip \
                    zlibc zlib1g ccache libgoogle-perftools-dev \
                    numactl 
gdb lcov \
                    libclang-dev yapf3
    sudo pip3 install clang sphinx \
                    sphinxcontrib-spelling breathe ruff

    Build:

    $ export SYSTEMC_HOME=/usr/local/systemc-2.3.3
    $ export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include
    $ export SYSTEMC_LIB=$SYSTEMC_HOME/lib-linux64
    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SYSTEMC_LIBDIR

    $ cd verilator
    $ autoconf
    $ ./configure
    $ make

    Test:

    $ make test

    Install:

    $ sudo make install


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

* 이 정도 설치하는데 하드 디스크 약 6.5Gbytes 정도 소요된다. (리눅스 포함)
* 예제 (Tutorial) 실행 해보자.
    http://opencircuitdesign.com/qflow/index.html
* 국내 연구용 0.5u/2중 폴리/3중 메탈 파운드리를 사용해 볼 수 있을 것이다.
* 향후 어떨지 몰라도 지금은 패키지 까지 공짜라고 한다. 반도체 설계 homebrew를 기대하면 '오바'인가?

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

Useful sh vars.: cad_env

export SYSTEMC=/usr/local/systemc-2.3.3
export SYSTEMC_HOME=$SYSTEMC
export SYSTEMC_INCLUDE=$SYSTEMC_HOME/include
export SYSTEMC_LIBDIR=$SYSTEMC_HOME/lib-linux64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SYSTEMC_LIBDIR

export QFLOW_TECH_DIR=/usr/local/share/qflow/tech
export MAGIC_TECH_DIR=/usr/local/lib/magic/sys

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

Useful Ubuntu File browser:

    $ sudo apt install nautilus
    $ nautilus -s .

XTerm font 10:

    $ xlsfonts
    $ xterm -fa 'Monospace' -fs 10

or use 'xrdb',

    $ sudo apt install x11-xserver-utils

    Create ~/.Xresources file containing as follows,

    ! File name: .Xresources
    ! Use a truetype font and size.
    xterm*faceName: Monospace
    xterm*faceSize: 10

    and

    $ xrdb -merge ~/.Xresources

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

Change WSL '.vhdx' path change:

1. Install git

    https://git-scm.com/download/win

2. Checl if WSL is running and shutdown,

    PS> wsl -l -v
    PS> wsl --shutdown

3. Create dest. folder

4. Get 'wsl-move'

    PS> git clone https://github.com/pxlrbt/move-wsl.git
    PS> cd move-wsl
    PS> ./move-wsl.ps1

If it wouldn't run,

    PS> Set-ExecutionPolicy Unrestricted

5. Default user,

Create '.wslconfig' at %UserProfile% folder. Contents as follows,

    [user]
    default=<username>

same at /etc/wsl.conf

Let wsl know drfault user name as,

    PS> wsl -u <username>

* Unregister Ubuntu:

    PS> wsl --unregister Ubuntu-22.04


댓글 없음:

댓글 쓰기