2023년 12월 30일 토요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [1]/개요

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [1]

I. 개요

    I-1. 설계 및 검증 흐름
    I-2. QFlow: 오픈 소스 도구의 통합관리
    I-3. 오픈 소스 도구들의 설치
    I-4. SystemC: C++ 기반의 RTL 시뮬레이션
    I-5. VERILATOR: 베릴로그에서 C++로 변환

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

I. 개요

베릴로그 RTL에서 레이아웃 GDS-II까지 생성하는 전과정을 예제를 통해 살펴본다. 대상 반도체 공정은 ETRI 0.5um CMOS 2P3M(2중 폴리 실리콘, 3중 메탈)이다. 국가 나노인프라 협의체 KION ( https://kion.or.kr/ )에서는 이 공정을 이용해 연중 MPW를 진행하여 학생들이 설계한 칩을 무료로 제작해 주고 있다. 이 MPW는 풀-커스텀(Full-Custom) 아날로그 레이아웃 설계를 받고 있으나 경희대학교 반도체 전공 트랙 사업단에서 개발한 표준-셀 디자인 킷, ETRI 0.5um CMOS Std-Cell DK[링크]을 활용하여 디지털 설계 응모도 가능하다. 이 디자인 킷은 베릴로그 RTL의 합성(synthesis), 배치 및 배선(Auto Placement & Route) 그리고 레이아웃(Layout) 편집까지 전과정에서 무료로 사용할 수 있는 오픈-소스(Open-Source) 반도체 설계 도구들을 채택 하였다. 본 예제는 ETRI 0.5um CMOS Std-Cell DK를 활용하여 MPW에 제출 가능한 GDS-II의 생성까지 전과정을 설명한다.

I-1. 설계 및 검증 흐름

오픈 소스 설계 도구를 활용한 설계체계의 흐름은 다음과 같다.

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

베릴로그 RTL에서 시작하여 반도체 제작용 레이아웃 도면 GDS을 생성하기까지 여러번에 걸쳐 추상화 수준 낮추기(Abstraction Level Lowering)가 발생 한다. 이 때마다 기능과 전기적 특성의 검증이 이뤄져야 한다. 설계 흐름(Design Flow)와 검증 흐름(Verification Flow)가 병행 되고 있는 것을 볼 수 있다.

=======================================================

I-2. QFlow: 오픈 소스 도구의 통합관리

반도체 제조에 필요한 최종 도면을 얻으려면 합성(synthesis) 이후 표준 셀/부품의 배치와 배선(Place & Route) 그리고 레이아웃 도면 생성(layout generation)까지 여러 단계의 '추상화 낮춤'이 따른다. 저마다 개발된 오픈-소스 도구들이 각 설계 단계에서 동원될 때마다 실행을 위한 옵션, 도구별 스크립트 생성, 입출력 파일 형식 변환 및 유효성 검사등을 해줘야 한다. 오픈-소스 설계체계 관리 도구로 QFlow[link], OpenROAD[link]가 있다. 본 예제는 QFlow 를 사용한다. QFlow의 사용법은 매우 직관적이다. 자세한 사항은 "QFlow Command-Line 실행 실습[링크]"편을 참고한다[QFlow 1.4 Reference].

 QFlow는 합성을 포함하여 여러 추상화 낮추기 단계를 수행할 수 있다.

    % qflow

    Qflow version 1.4 revision 100
    Usage: qflow [processes] [options] <module_name>

    Processes:  synthesize          Synthesize verilog source
                place               Run initial placement
                sta                 Static timing analysis
                route               Run placement and route
                backanno            Post-route timing analysis
                migrate             Generate netlists for DRC and LVS
                drc                 Run DRC check
                lvs                 Run LVS comparison
                gdsii               Generate GDSII output
                clean               Remove temporary working files
                display             Display routed result
                build               Run scripts
 to backanno
                nochecks            Run scripts to backanno.....
                all                 Run scripts synthesize to gdsii
                gui                 Run the qflow interactive GUI

    Options:    -T, --tech <name>           Use technology <name>
                -p, --project <name>        Project root directory
                -v, --version               Print qflow version

합성 단계를 수행하면 QFlow 가 이후 과정을 처리할 때 사용할 설정 파일(프로젝트 파일)들이 생성 된다. 자세한 사항은 [링크] 또는 Open Circuit Design[링크]를 참조한다.


[이미지출처] http://opencircuitdesign.com/qflow/reference.html

I-3. 오픈 소스 도구들의 설치

예제에서 사용할 오픈 소스 설계 도구들의 목록은 아래와 같다. 통합관리 도구 QFlow가 처리명령을 수행 할 때 해당 도구들이 호출된다.

  1. QFlow[링크]: 반도체 설계 툴 플로우 통합
  2. OSS CAD Suite (Yosys/iVerilog & etc.)[링크]: 베릴로그 RTL 합성기 및 검증도구 모음
  3. GrayWolf[링크]: 표준 셀 자동 배치 도구
  4. QRouter[링크]: 표준 셀 자동 배선 도구
  5. Magic[링크]: VLSI 레이아웃 그리기 및 파일 변환
  6. irsim[링크]: 스위치 수준 시뮬레이터
  7. Netgen[링크]: LVS 검증도구
  8. ngSpice[링크]: SPICE 회로 시뮬레이터
  9. gtkwave[링크]: 디지털 회로 파형 VCD 보기
  10. KLayout[링크]: VLSI 레이아웃 툴

오픈 소스 툴의 설치와 정보는 디자인 킷의 안내 글을 참조한다[링크]. ETRI 0.5um CMOS 공정 디자인 킷의 압축 파일은 아래 링크에서 내려받을 수 있다.

ETRI 0.5um CMOS Process DK v.1a [내려받기]

디자인 킷을 사용하려면 별도의 설치 절차 없이 사용자의 홈 폴더에서 압축을 풀어주면 된다.

I-4. SystemC: C++ 기반의 RTL 시뮬레이션

하드웨어 기술 언어 HDL 시뮬레이터를 이용하여 설계한 베릴로그 RTL의 기능을 검증 한다. 현재 반도체 설계 자동화 도구의 큰 3사(Big3: Synopsys, Cadence, Mentor Graphics,현 Simens EDA)는 모두 저마다 HDL 시뮬레이터를 발매하고 있다. 그중 업계 표준이라 할 QuestaSim(구 ModelSim)이 인텔의 FPGA 버젼으로 무료 라이센스를 제공 하고 있다[링크]. 이 예제에서는 상용의 도구를 배제한 오픈-소스 설계체제를 따르기로 한다.

베릴로그 (또는 VHDL)과 같은 반도체 하드웨어 설계용 언어 HDL(Hardware Description Language[link])로 높은 추상화 수준의 알고리듬을 기술하기는 어렵다. 이에 설계사양(Design Specification)을 C/C++ 를 이용하여 RTL 검증용 테스트 벤치를 작성하면 매우 효과적이라는 점은 이미 1980년대 HDL이 널리 사용되기 시작하면서 주장되어 오다가 2011년이 되어서야 SystemC가 표준으로 채택되었다[link]. 추상화 수준 뿐만 아니라 문법체계와 실행 방식이 전혀 다른 다른 이종 언어 모델을 한데 어울려 설계물 검증을 위한 시뮬레이션을 실시하려면 특별한 방법론이 필요하다. 베릴로그의 PLI/VPI[link], 시스템베릴로그의 DPI-C[link] 같은 방법이 HDL의 언어의 부속으로 표준화 되어 있긴 하나 인터페이스가 매우 복잡하고 C/C++를 HDL의 부속 루틴으로 수용하기에 진정한 혼합언어 시뮬레이션(Mixed-Language Co-Simulation) 방법이라고 보기 어렵다.

SystemC는 C++ 언어를 기반으로 시그널 채널(signal channel) 같은 하드웨어 객체(hardware description objects)용 라이브러리와 사건 구동(event-driven) 병렬성 시뮬레이션 엔진을 갖춘 시스템 수준 전자설계 도구로 IEEE 표준이 되었다[IEEE1666]. QuestaSim은 기존의 HDL과 SystemC를 동일한 수준의 언어로 취급하는 혼합언어 체계를 갖추고 있으나 여전히 두개의 시뮬레이션 엔진이 가동되고 있어서 매우 느리게 작동한다. QuestaSim은 전신인 ModelSim은 Verilog와 VHDL을 단일 시뮬레이션 엔진으로 실행 시킨 최초의 제품이었다. 이때 광고 문구가 'Language Neutral'이었다[link].

SystemC는 검증용 도구로서 자리잡아 가고 있으며 꾸준히 갱신되고 있다. 이 예제에서 사용할 배포판 버젼은 2.3.3 이다. SystemC.org 에서 압축된 소스 파일을 내려받을 수 있다[다운로드]. 2023년 12월 현재 최신버젼은 2.3.4 이며 3.0.0이 검토(public review)중이다. 설치절차는 아래와 같다. 소스 코드와 함께 배포되는 오픈-소스 도구들의 빌드 및 설치절차는 이와 유사하므로 한번 익혀두면 두고 유용할 것이다.

내려받은 SystemC 베포판의 압축 파일을 푼다.

    % cd ~/ETRI050_DesignKit/v.1a/Tools
    % tar xvf systemc-2.3.3.tar.gz
    % cd systemc-2.3.3

사용자의 리눅스 개발 환경을 검사하고 적절한 메이크 스크립트 Makefile 을 생성해 준다.

    % autoreconf -i
    % autoupdate
    % mkdir objdir
    % cd objdir
    % export CXX=g++
    % export CC=gcc
    % ../configure --prefix=/usr/local/systemc-2.3.3 --enable-debug

configure 실행시 준 --prefix 파라메터는 설치 위치를 지정한 것이다. 이로써 Makefile 이 생성 된다. 메이크 유틸리티(Make utility 강좌[링크])로 SystemC 라이브러리 및 시뮬레이션 엔진의 동적 실행파일(.so, shared object)을 컴파일 빌드한다.

    % make

SystemC 라이브러리 및 시뮬레이션 엔진의 동적 실행파일을 설치할 위치가 시스템 영역으므로 리눅스 관리자 권한을 사용한다.

    % sudo make install

설치가 완료되면 중간 파일들을 지워 준다.

    % make clean

I-5. VERILATOR: 베릴로그에서 C++로 변환

베릴레이터 VERILATOR[link]는 베릴로그 HDL 구문을 C++(또는 SystemC)의 함수로 변환해 주는 오픈-소스 소프트웨어다. 변환된 C++ 는 GNU C/C++는 물론 마이크로소프트의 Visual C/C++로도 컴파일 된다. 생성된 실행파일을 실행 시키는 것으로 하드웨어를 시뮬레이션 한다. VERILATOR는 베릴로그 2005, 시스템베릴로그 2017까지 합성 가능한 대부분 구문형식을 지원한다[Verilator Doc]. 다만 게이트 모델링용 프리미티브(3-State CMOS primitive)와 사용자 정의 테이블(User-Defined Primitive Table)은 지원하지 않는다. 베릴레이터가 변환한 C++는 표준형식(ANSI C/C++) 뿐만 아니라 SystemC의 모듈과 사건 구동 쓰레드 형식을 선택 할 수 있다. RTL 에서 변환된 C++와 테스트 벤치을 모두 단일의 SystemC 엔진에서 실행 시키게 되므로 실행속도가 매우 빠르며 C/C++의 풍부하고 다양한 검증용 모델을 변경 없이 사용 할 수 있다. 그밖에 하드웨어 가속기, 테스트 장비 그리고 FPGA 프로토 타이핑(Proto-Typing)장치와 인터페이스를 통해 확장 가능하다. 최근 알고리즘 개발용으로 최고의 인기를 구가하는 파이썬(Python)도 API를 통해 연결 할 수 있다. 사실 오늘날의 모든 컴퓨팅 시스템이 C++를 통해 개발된 만큼 확장성은 무궁무진 하다.

베릴레이터는 독립된 툴로 깃-허브[link]를 통해 소스를 내려받아 컴파일 후 설치 할 수 있다. 컴파일된 바이너리로 배포되는데 오픈-소스 합성기 Yosys의 패키지 배포판 OSS Cad Suite[링크]에 포함 되어 있으므로 이를 이용해도 좋다. OSS Cad Suite를 사용하려면 환경 변수들을 설정해야 한다. 필요한 환경 변수의 스크립트가 배포판에 준비되어 있으므로 이를 불러 쓰면 편리하다.

    % source /usr/local/oss-cad-suite/environment

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

[목차][다음]


댓글 없음:

댓글 쓰기