2023년 12월 30일 토요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [2]/ALU8 의 RTL

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

II. 예제 ALU8의 베릴로그 RTL

    II-1. 폴더 구조
    II-2. 예제 ALU의 베릴로그 RTL 구성
-------------------------------------------------------------- 

II. 예제 ALU8 의 RTL

II-1. 폴더 구조

8비트 ALU의 예제 파일을 [다운로드 링크]에서 내려받을 수 있다.  배포되는 디지인 킷에도 포함 되어 있다. 예제의 압축을 풀면 여러 하위 폴더를 가진 구조를 취하는데 이 구조를 유지하면 설계 관리에 매우 유리하다.

+---------------------------+
| ~/ETRI050_DesignKit/v.1a/ |
+-------+-------------------+
        |
        +-- Tools : Open-source archives

        |

        +-- digital_ETRI -> digital_ETRI050_m2d (symbolic link)
        |

        +-- pads_ETRI050

        |
        +-- scripts
        |
        +-- tech
        |
        +-- Ref_Design/ALU8 : Project Home
                         |
                         +-- log
                         |
                         +-- source : RTL Verilog
                         |
                         +-- layout : P&R results
                         |
                         +-- simulation : C++ Tectbench
                         |
                         +-- synthesis : Synthesized netlists

높은 추상화 수준의 언어를 다루는 컴파일러(합성기)는 낮은 단계로 전이 시키면서 수많은 임시 파일들을 만들어 낸다. 이들 중간 단계의 파일들은 오류나 오동작 시 디버깅 용도로 적절히 활용될 수 있다. 정상처리된 경우에 불필요 할 수 도 있다. 단계마다 생성되는 중간 단계의 파일들이 한 곳에 저장되면 매우 혼란 스럽다. 불요한 중간 파일들을 정리하면서 정작 중요 파일들을 지우는 실수를 범하지 않도록 주의해야 한다. 이를 방지하기 위해 위와 같은 폴더 구조를 유지하면 파일들의 관리가 용이하다. 모든 관리 도구들이 청소(clean) 메뉴를 가지고 있는 이유다. 위의 폴더 구조에서 최초의 원시 베릴로그 파일들은 source 에, 테스트벤치 C++와 헤더 파일은 simulation에, 그리고 최종적으로 제작도면 GDS 는 layout 폴더에서 있다.

II-2. 예제 ALU의 베릴로그 RTL

예제 ALU8 은 8비트 마이크로 컨트롤러에 활용 가능한 산술논리 연산 유닛(Arithmetic-Logical Unit)이다. 8비트 가감산(ADD, SUB)과 논리연산(AND, OR, XOR, NOT) 기능을 가지며 누산기(Accumulator) 및 플래그(Flag)를 출력한다.

module ALU( clk, reset, op, shr, AI, BI, CI, CO, BCD, OUT, V, Z, N, HC, RDY );
input clk;
input reset;
input shr;
input [3:0] op;    // Operation
input [7:0] AI;
input [7:0] BI;
input CI;
input BCD;    // BCD style carry
output [7:0] OUT;
output CO;
output V;
output Z;
output N;
output HC;
input RDY;

ALU 모듈의 외곽 모습을 보면 클럭과 리셋 입력을 포함해 총 39개의 입출력 핀이 필요하다. KION의 '내칩(My Chip) MPW'에서 제작해 주는 칩의 크기(패드 제외 1,000umx1,000um)와 패키지(28 핀)의 조건에 비해 핀의 갯수가 너무 많다. 입출력 핀의 제한에 걸리므로 적절한 외부 인터페이스 방법을 강구해야 한다. 두 입력 레지스터 AI 및 BI 와 명령 op, 그리고 캐리 CI, BCD, SHR 을 묶어 선택토록 하며 출력 OUT 과 플래그 CO, V, Z, N, HC 를 묶어 선택하는 포장(wrapper)을 씌워 칩 제작 조건을 맞췄다.

module ALU_wrapper(clk, reset, iAB, iSel, oACC, iOutSel);
    input clk;
    input reset;
    input [7:0] iAB;
    input [1:0] iSel;   // Sel A, B & Op
    output [7:0] oACC;
    input iOutSel;

8-비트 ALU와 포장 ALU_wrapper의 구성은 아래와 같다.

+--------------------- iAB[7:0] -----------------------+
| ALU_wrapper.v         |                              |
|                 +-----V-----+                        |
|                /    DeMUX    <--------------------- iSel[1:0]
|               +---+---+---+---+                      |
|       +-----------+   |   +---------+                |
|       |               |             |                |
|  +----V----+     +----V----+   +----V----+           |
|  | rA[7:0] |     | rB[7:0] |   |rCMD[7:0]| [LOAD]    |
|  +----+----+     +----+----+   +----+----+           |
|       |               |             |                |
|   +---V--+         +--V---+         |                |
|    \  A   \       /   B  /          |                |
|     \      +-----+     Op<----------+                |
|      \       ALU.v     /                   [EXECUTE] |
|       \               F>---------+                   |
|        +------+------+           |                   |
|               |                  |                   |
|          +----V----+        +----V----+              |
|          |   rAcc  |        |  rFlag  |    [STORE]   |
|          +----+----+        +----+----+              |
|               +-----+     +------+                   |
|                     |     |                          |
|                 +---V-----V---+                      |
|                  \    MUX    <--------------------- iOutSel
|                   +----+----+                        |
|                        |                             |
|                        V                             |
+--------------------- oACC[7:0] ----------------------+

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

[목차][이전][다음]



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-------------------------+                     |
|GrayWolf: Placement  <------[Std-Cell LEF/Size]      |
|    -> Unrouted DEF            |                     |
+-----------------+-------------+                     |
                  |                                   |
      +-----------+                                   |
      |                                               |
+-----V-------------------------+                     |
|QRouter: Route     <-------[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-------------------------+             |
|Magic: DRC / 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

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

[목차][다음]


2023년 12월 15일 금요일

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

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

목차:

I. 개요
II. 오픈-소스 반도체 설계도구
III. QFlow에 ETRI 0.5u CMOS 공정 이식
IV. 디자인 킷 표준 예제
V. 디자인 킷 다운로드
VI. 디자인 킷 설치
VII. 표준 예제 ALU8 실행
VIII. 결론

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

I. 개요

경희대학교 반도체 전공 트랙 사업단은 교육용 디지털 반도체 설계 교육용으로 일련의 툴 체인과 설계 플로우(Tool-Chain & Flow)을 구축 하였다. 대상 공정기술은 ETRI 0.5um CMOS로 2중 폴리실리콘 3중 메탈 공정이다[링크].

ETRI 0.5um 공정은 반도체 설계 교육의 일환으로 다 프로젝트 웨이퍼 MPW(Multi-Project Wafer)를 공모하면서 풀-커스텀(Full-Custom) 방식의 설계를 수용한다[링크]. 이는 표준 셀(Std-Cell)을 포함한 일련의 디자인 킷을 제공하지 않는다는 의미다. 이에 본 디자인-킷(Design Kit)은 하드웨어 기술 언어 HDL(Hardware Description Language[link])를 사용한 디지털 반도체 회로 설계에 적용하기 위해 표준-셀 라이브러리(Std-Cell Library[link])를 제작 하였다.

본 디자인 킷(이하 DK)은 표준 셀을 비롯하여 합성(Synthesis), 배치배선(Place & Route) 그리고 레이아웃(Layout)생성까지 포함한 일련의 설계과정에서 소요되는 각종 툴(설계 자동화 소프트웨어)을 포함한다. 대상이 된 ETRI 0.5um 공정의 특성(제약 사항 포함)과 오픈-소스 툴과 상이한 부분을 맞추기 위한 일련의 쉘 스크립트(shell script)와 파이썬 스크립트(Python script)를 개발하였다.

  1. VIA1 & 2 Stack 검사
  2. Magic 레이아웃에서 SPICE 네트리스트 추출
  3. LVS 및 LVL 검사
  4. Magic 레이아웃에서 표준-셀 라이브리 목록 LEF 및 GDS-II 추출
  5. ETRI 공정 룰 적용 탑-디자인(코어+패드) 레이아웃 GDS-II 추출

본 DK에서 차용한 도구들은 모두 무료로 사용할 수 있는 오픈-소스(open-source)다[link]. 또한, 배포 파일에는 2종의 8비트 CPU, 6502와 Z80 그리고 32비트 RISC-V를 포함해 10여가지 표준 예제를 포함한다. 예제를 통해 HDL의 합성과 자동 배치와 배선 그리고 최종 레이아웃 생성까지 전과정을 살펴볼 수 있다. 각 단계에서 발생하는 오류 기록 파일를 읽고 분석하여 이에 대처하는 방법을 학습 할 수 있을 것이다. 특히 높은 수준의 HDL에서 낮은 수준의 회로 레이아웃까지 이르는 추상화 단계를 낮추는 과정에서 반드시 수행 해야할 검증, 예를 들어 LVS(Layout-Vs-Schematic), SPICE 회로 시뮬레이션 등의 중요성을 알게 될 것이다. 자동 배선이 완료 되었더라도 LVS 오류가 발생 할 수 있다는 점을 유념해야 한다.

모쪼록 본 DK를 통해 "RTL 에서 레이아웃"까지 이르는 표준 셀 기반 반도체 설계의 전 과정에 대한 이해를 높이는 교육 자료로 쓰이길 희망한다.

II. 오픈-소스 반도체 설계도구

오픈-소스 운동이 활발해 지면서 공개된 소프트웨어(하드웨어도 포함하여)는 집단지성의 힘으로 완성도를 높여왔다. 배포 방식에 있어서 미리 컴파일 된 바이너리도 있지만 소스 코드와 함께 배포되기도 한다. 이 경우 사용자가 직접 컴파일 해야 하는데 종종 컴퓨팅 환경이 맞지 않아 곤란을 겪기도 한다. 이를 해결하기 위해 상당 수준의 프로그래밍 능력을 요한다. 또한 각 소프트웨어는 저마다 개발자가 다르고 다음 단계의 툴과 통합을 상세히 고려하지 않는다. 뿐만 아니라 혹시 존재할지도 모를 소프트웨어의 결함으로 인한 피해 또한 사용자의 몫 임을 명심해야 한다. 더구나 컴파일을 위해 사용자가 수정한 소스 코드의 결함은 두말할 나위도 없다.

또한, 자동화된 도구를 사용하여 추상화 수준을 달리 하면서 회로를 기술하는 방식도 달라진다. 이러한 설계자동화 과정의 난점을 극복하기 위해 일부 업계표준(industry de-facto)의 파일형식이 제안되어 폭넓게 받아들여지고 있는 점은 매우 다행이다. 일예로 LEF(Library Exchage Format)와 DEF(Design Exchange Format)들이 그것이다[link]. 하지만 이들은 언어가 아닌 확장성을 고려한 표현 양식인 탓에 형식규정이 매우 느슨 하다. 이는 툴 마다 기술된 내용을 선택적으로 사용한다는 의미이기도 하다. 일예로 LEF의 VIA 룰은 레이아웃 툴 Magic의 룰에서 무시된다거나 VIA 간격 룰은 자동배선 툴 QRouter에서는 사용되지 않는다.

이러한 툴 간의 부조화를 극복하여 일관성을 세울 방안으로 스크립트 기반의 툴 플로우 도구들이 개발되어 있는데 OpenROAD[link], QFlow[link] 등이 있다. 본 DK는 QFlow를 차용하였다. QFlow를 포함해 이에 사용되는 도구들은 Open circuit Design[link]를 통해 배포되고 있다. 학술용 반도체 제작을 지원하는 MOSIS[link]와 함께 교육 뿐만 아니라 스타트-업의 프로토 타입 칩을 저렵하게 제작해 주는 eFabless[link]의 공식 설계 툴 중 하나로 지정되었다.

본 DK 에서 차용한 반도체 설계 자동화 오픈-소스 도구들의 목록과 배포판은 아래와 같다.

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

오픈 소스 반도체 설계 툴들은 모두 리눅스 운영체제에서 실행된다. 이들 툴의 개발 역시 오픈-소스 운영체제 상에서 컴파일러 GCC, 그리고 티클/틱(Tcl/Tk), 파이썬(Python)을 활용하여 이뤄지고 있다. 툴의 컴파일과 사용을 위해 필요한 패키지들도 상당히 많으므로 해당목록을 참고하여 추가 설치해 주어야 한다. QFlow와 관련 툴의 설치 방법은 아래 링크를 참조한다.

    "반도체 설계 오픈 소스 도구 QFlow" [링크]

QFlow 의 그래픽 사용자 인터페이스(GUI)의 사용법은 매우 직관적이어서 몇가지 제공되는 예제를 수행하면 RTL 합성부터 레이아웃 까지 전과정을 쉽게 수행해 볼 수 있다. "Qflow (GUI) Tutorial" [링크]

각 단계를 거치며 동원되는 각각의 툴의 호출은 파이썬 및 쉘 스크립트를 통해 이뤄 진다. 추상화 변환단계의 과정에서 이뤄지는 파일 형식 변환과 툴 마다 각종 실행 옵션 주기 그리고 설계별 툴 실행용 스크립트 작성은 매우 복잡하다. QFlow는 반도체 설계 플로우의 통합 도구로서 이 절차를 파이썬, 티클/틱 그리고 쉘 스크립트를 활용하여 대신해 준다. 미리 준비된 예제는 큰 어려움 어려움 없이 실시해 볼 수 있다. 하지만 새로운 설계를 적용하며 맞닥뜨릴 각종 오류는 피할 수 없다. 이에 대하여 대처하려면 명령줄 기반의 툴 사용법을 익히고 각 단계에서 도구들이 내놓은 오류 메시지를 읽을 수 있어야 한다. QFlow의 명령줄(command-line) 실행은 다소 수고가 따르지만 매우 유용하다. "Opencircuit QFlow: Digital Synthesis Flow Tutorial (No GUI)" [링크]

QFlow의 명령줄 실행 실습의 예는 아래의 링크를 참조한다. QFlow 실행중 단계별 제반 툴의 역활 및 입출력 파일의 형식 변환용 스크립트, 그리고 로그 파일 읽기를 설명 한다.

    "QFlow Command-Line 실행 실습" [링크]

[참고] OpenROAD: Toward a Self-Driving, Open-Source Digital Layout Implementation Tool Chain [link]

If successful,OpenROAD will help realize the IDEA goal of "democratization of hardware design", by reducing cost, expertise, schedule and risk barriers that confront system designers today.

"오픈 소스 기획이 성공적으로 이뤄진다면 반도체 설계의 민주화(democratization of hardware design) 실현에 일조하는 것이다"

III. QFlow에 ETRI 0.5u CMOS 공정 이식

기존에 구축되어있는 QFlow에 ETRI의 0.5um CMOS 공정을 이식하려면 설계 툴의 수정과 공정 특성에 맞추기 위한 스크립트의 추가 개발이 따른다. 배포된 QFlow의 소스에 필요한 공정관련 파일을 추가하고 재 컴파일 하여 QFlow에 ETRI 0.5um CMOS 공정을 이식 할 수 있다. 경희대학교 반도체 전공 트랙 사업단에서 배포하는 ETRI 0.5u CMOS 공정이 이식된 QFlow 소스 파일을 내려 받을 수 있다[].

이식을 위해 수정한 파일은 다음과 같다.

    1. etri05_stdcells.gds2 / etri05_stdcells.lef

표준 셀 라이브러리를 묶은 GDS-II 파일이다. 오클라호마 대학 VLSI 연구 그룹[링크]을 통해 공개된 AMI 0.6um 공정의 표준셀 OSU050을 참조하여 ETRI 0.5um 공정의 디자인 룰에 맞게 수정했다. 최신 OSU의 SCMOS MOSIS AMI 표준 셀 라이브러리 버젼은 2.7이다[링크][osu_soc_v2.7.tar.gz]

ETRI 0.5um 공정의 디자인 룰의 비아와 컨택의 크기가 가로세로 2um 에 달한다. 또한 VIA의 스택이 절대 금지되어 있으며 배선에 사용할 수 있는 메탈 층의 수도 제한된다. 이런 제한 사항을 감안하여 표준셀은 수직 수평 배선 채널의 간격을 3um로 설정하였고 수평 배선 공간을 12트랙으로 하였다. 비아 스택이 엄격히 금지 되므로 표준셀의 핀(포트)는 메탈2로 할당하여 자동 배선 도구로 하여금 비아 스택을 만들지 못하도록 하였다. 표준-셀의 한 예로 셋과 리셋을 갖는 D-플립플롭(TTL 시리즈 7474와 동일)의 예를 보면 아래와 같다.

  • DFFSR 레이아웃 [link]
  • DFFSR 의 LEF에서 옵스트럭션 [link]
  • 배선이 이뤄 졌을 때 배선에 사용된 메탈 2와 3 [link]
  • 배선 후 옵스트럭션  [link]

핀(포트)를 메탈 1에 할당한 표준 셀 DFFSR의 비아 스택

  • DFFSR 레이아웃 [link]
  • 자동 배선 후 표준셀 핀(포트)에 비아 스택 [link] [link]
[주] 자동 배선도구의 옵션으로 금지하도록 지시하더라도 비아 스택을 완전히 막지는 못한다. 자동 배선을 실패하거나 LVS 에서 오류를 내기도 한다. 이는 배선용 메탈층의 부족도 한 몫 한다.

    2. SCN3ME_SUBM.30.ETRI.tech

MOSIS의 scmos 디자인 룰과 ETRI의 룰은 트랜지스터 룰에 있어서 호환성을 가지고 있으나 비아(via)와 컨택(contact)의 크기가 크게 확장되어 있고 비아와 컨택의 스택(via stack)이 금지 되어있다. 뿐만 아니라 레이어 번호는 완전히 다르다. 따라서 레이아웃 툴 Magic 의 테크 파일을 전면 수정했다.

IV. 디자인 킷 표준 예제

무료 사용인 만큼 오픈-소스 툴의 신뢰성을 담보 받기는 커녕 기술지원을 받기도 어렵다. 따라서 사용시 주의를 요하며 완성도는 사용자의 경험과 판단에 달렸다. 이에 사용자 컴파일 툴의 시험과 디자인 킷의 연습을 위해 표준 테스트 셋을 제공한다. 표준 예제에는 간단한 ALU 를 포함해 8비트 마이크로 프로세서와 32비트 RISC-V 를 포함 하였다. 이들 예제들 역시 오픈-소스로 공개되어 있다.

  • 6502 CPU [링크] / 6502 RTL+SystemC Interactive Co-Simulation [링크] / 튜토리얼 [링크]
  • Z-80 CPU [링크] / Z80 RTL+SystemC Interactive Co-Simulation [링크]
  • PicoRV32 [링크]

V. 디자인 킷 다운로드

본 DK에 사용된 오픈 소스 툴과 해당 버젼의 내려받기 링크는 아래와 같다.

  1. QFlow-1.4 [내려받기]
  2. OSS CAD Suite 20231010 (Yosys/iVerilog & etc.) [내려받기]
  3. GrayWolf-2.1 [내려받기]
  4. QRouter-1.4.86 [내려받기]
  5. Magic-8.3.424 [내려받기]
  6. irsim-9.7.117 [내려받기]
  7. Netgen-1.5.255 [내려받기]
  8. XSchem-3.4.5 [내려받기] Gaw [내려받기]
  9. ngSpice-41 [내려받기]
  10. KLayout [내려받기]
  11. DK Install Script [내려받기]

디자인 킷의 압축 파일을 아래 링크에서 내려받을 수 있다.

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

오픈 소스 툴의 컴파일 및 설치와 사용을 위해 필요한 리눅스 패키지 목록은 다음과 같다.

  1. git / unzip
  2. build-essential / cmake / clang / bison / flex / gawk
  3. xterm / libx11-dev / x11-xserver-utils / libxaw7-dev / libcairo2-dev
  4. libreadline-dev / m4
  5. tcl-dev / tk-dev / tcsh / csh
  6. libffi-dev / graphviz / xdot / pkg-config
  7. python3 / python3.9-tk
  8. libgsl-dev zlib1g-dev libxt-dev
  9. mesa-common-dev / libglu1-mesa-dev libncurses-dev
  10. libboost-all-dev / libboost-dev / libboost-filesystem-dev
  11. libboost-system-dev / libboost-python-dev / libeigen3-dev
  12. qtbase5-dev / qtdeclarative5-dev
  13. swig / libtool / libjpeg-dev / gperf
  14. gtkwave / klayout

필요 패키지 설치와 오픈 소스 툴 컴파일을 실행 할 수 있는 일괄 설치 스크립트를 제공한다.

VI. 디자인 킷 설치

본 디자인 킷은 리눅스 운영체제에서 실행된다. 리눅스 운영체제는 마이크로 소프트 윈도우즈 10 또는 11의 리눅스 하위 시스템 WSL(Windows Sub-system Linux)를 통해 운용될 수 있다. WSL의 설치는 다음과 같다.

윈도우즈 PC에 리눅스 설치

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

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

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

    2. 우분투 리눅스 설치

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

오픈-소스 툴 설치

베릴로그 RTL 합성기를 포함하여 자동 배치 및 배선, 레이아웃 편집및 파일변환 그리고 GDS 생성용 툴의 설치 방법은 아래와 같다.

    1. 리눅스 로그인 후 내려받은 디자인 킷 압축 풀기

    ~$ tar xvf ETRI050_DesignKit_v.1a.tar.gz
    ~$ cd ETRI050_DesignKit

    2. 디자인 킷의 툴 폴더 생성

    ~/ETRI050_DesignKit$ mkdir Tools
   
~/ETRI050_DesignKit$ cd Tools

    3. 내려받은 오픈-소스 툴의 소스 압축 파일 및 설치 스크립트 파일 확인

    ~/ETRI050_DesignKit/Tools$ ls
    total
    -rwxr-xr-x 1 goodkook goodkook      3532 Nov 29 08:08 build_tools.sh
    -rw-r--r-- 1 goodkook goodkook   2962044 Nov 29 00:24 graywolf-2.1.tar.gz
    -rw-r--r-- 1 goodkook goodkook   1444263 Nov 29 00:25 irsim-9.7.117.tar.gz
    -rw-r--r-- 1 goodkook goodkook  60762332 Dec  5 09:58 klayout_0.28.13-1_amd64.deb
    -rw-r--r-- 1 goodkook goodkook  14697029 Nov 29 00:25 magic-8.3.424.tar.gz
    -rw-r--r-- 1 goodkook goodkook   4021236 Nov 29 00:26 netgen-1.5.255.tar.gz
    -rw-r--r-- 1 goodkook goodkook   9987828 Nov 29 08:06 ngspice-41.tar.gz
    -rw-r--r-- 1 goodkook goodkook 532214879 Nov 28 23:01 oss-cad-suite-linux-x64-20231010.tgz
    -rw-r--r-- 1 goodkook goodkook   2463961 Nov 29 00:26 qflow-1.4.100_etri050.tar.gz
    -rw-r--r-- 1 goodkook goodkook   1183562 Nov 29 00:27 qrouter-1.4.86.tar.gz
    -rw-r--r-- 1 goodkook goodkook  62919612 Nov 29 00:27 xschem-3.4.5.tar.gz
    -rw-r--r-- 1 goodkook goodkook   6542554 Nov 29 00:28 xschem-gaw.tar.gz

    4. 오픈 소스 툴 설치 스크립트 실행

    ~/ETRI050_DesignKit/Tools$ ./build_tools.sh

    5. 디자인 킷을 qflow 툴의 테크 폴더로 연결(symbolic link)

    $ cd ~/ETRI050_DesignKit/devel
    $ ln -s digital_ETRI digital_ETRI050_m2d

    $ cd /usr/local/share/qflow/tech
    $ sudo mv etri050 etri050.bak

    $ sudo mkdir etri050
    $ cd etri050

    $ sudo ln -s ~/ETRI050_DesignKit/devel/tech/SCN3ME_SUBM.30.ETRI.tech SCN3ME_SUBM.30.ETRI.tech

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri050.magicrc etri050.magicrc

    $ sudo ln -s ~/ETRI050_DesignKit/devel/tech/etri050.par etri050.par

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri050.prm etri050.prm

    $ sudo ln -s ~/ETRI050_DesignKit/devel/tech/etri050.sh etri050.sh

    $ sudo ln -s ~/ETRI050_DesignKit/devel/tech/etri050_setup.tcl etri050_setup.tcl

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri050_stdcells.lef etri050_stdcells.lef

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri050_stdcells.sp etri050_stdcells.sp

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri05_stdcells.gds2 etri05_stdcells.gds2

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri05_stdcells.lib etri05_stdcells.lib

    $ sudo ln -s ~/ETRI050_DesignKit/devel/digital_ETRI/etri05_stdcells.v etri05_stdcells.v

VII. 표준 예제 ALU8 실행[Link]

디자인 킷에 제공된 예제 ALU8를 통해 오픈-소스 툴이 정상적으로 설치 되었는지 확인 해보자.

    $ cd ~/ETRI050_DesignKit/devel/Ref_Design/ALU8

    1. Yosys: 베릴로그 RTL 합성기

    $ qflow synthesize ALU_wrapper

    2. GrayWolf: 표준 셀 자동배치

    $ qflow place ALU_wrapper

    3. QRouter: 표준 셀 자동 배선

    $ qflow route ALU_wrapper

    4. Magic: 표준 셀 병합

    $ qflow migrate ALU_wrapper

    5. Netgen: LVS 검증

    $ qflow lvs ALU_wrapper

    6. Magic: 레이아웃 DRC

    $ cd layout
    $ ln -s ../../../digital_ETRI digital_ETRI
    $ magic -d XR ALU_wrapper

위의 과정을 모두 수행 되었다면 디자인 킷과 필요한 설계 도구들이 정상적으로 설치된 것이다.

[참고] 6502 CPU 예제 [링크]

VIII. 결론

ETRI 0.5u CMOS 공정용 표준 셀 기반 디지털 반도체 설계 디자인-킷을 개발 하여 이를 공개 한다. 국가 나노인프라 협의체 KION ( https://kion.or.kr/ )은 연중 MPW를 진행하며 ETRI의 공정을 활용하여 학생들이 설계한 칩을 무료로 제작해 주고 있다. 본 디자인 킷으로 우리나라 산업구조의 취약점으로 지적되고 있는 반도체 소부장(소재, 부품, 장비)분야에 역량을 발휘할 고급 반도체 전공 인력 양성에 기여할 수 있길 바란다.

2024년 1차 "내칩" 서비스 공고


2023년 12월 5일 화요일

[주간강좌] MPW 참여 및 심화학습 수행 결과 보고서 [1차평가]

[주간강좌] MPW 참여 및 심화학습 수행 결과 보고서 [1차평가]

오늘(12월 5일) MPW 및 심화학습에 참여하는 3개 학습조의 보고서(에세이)를 받았습니다. 모두 훌륭한 결과를 냈습니다.  제출된 보고서에 대하여 몇가지 조언을 했으니 각 학습조는 이를 감안하여 수정 하시기 바랍니다. 최종본은 출판될 수 있도록 방안을 모색하려고 하니 잘 다듬어서 제출 하십시요. 최종 제출 기한은 12월 17일로 합니다. 그 이전이라도 제출 하여 점검을 받도록 합시다. 각 학습조의 보고서는 공유할 터이므로 참고하고 논의 하시기 바랍니다.

1차로 제출된 보고서는 아래와 같습니다.

김태근 외: https://drive.google.com/file/d/1BKP2waiQkCJEZSpR82pCtxb25f7A1w8x/view?usp=sharing

지하은 외: https://drive.google.com/file/d/1BHRjNtXjnM11ID83hN8BmElZVAUVDg5K/view?usp=sharing

채수용 외: https://drive.google.com/file/d/1B7alzu88QEu2OB34UE7KT9Xmxt8Wm7Ow/view?usp=drive_link

오픈 소스 반도체 설계 도구의 의의를 설명할 때 인용하기 좋은 참고 문헌

https://par.nsf.gov/biblio/10171024-openroad-toward-self-driving-open-source-digital-layout-implementation-tool-chain

요약문에 인상적인 문구, "오픈 소스 기획이 성공적으로 이뤄진다면 반도체 설계의 민주화(democratization of hardware design) 실현에 일조하는 것이다"

If successful,OpenROAD will help realize the IDEA goal of "democratization of hardware design", by reducing cost, expertise, schedule and risk barriers that confront system designers today.