2024년 1월 16일 화요일

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

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

I. 개요

베릴로그 RTL에서 레이아웃 GDS-II까지 생성하는 전과정을 6502 CPU의 예제를 통해 살펴본다. 대상 반도체 공정은 ETRI 0.5um CMOS 2P3M이다[PDK Download]. 국가 나노인프라 협의체 KION[바로가기]에서는 이 공정을 이용해 연중 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의 생성까지 전과정을 설명한다.

6502 CPU[바로가기]는 오늘날 개인 컴퓨터 시대를 연 역사적인 모스 테크놀로지(MOS Technology Inc.[바로가기])사의 8-비트 마이크로 컨트롤러다[바로가기]. 이 CPU를 사용한 대화형 컴퓨터 시스템 Apple-1은 애호가들에 의해 복제되었고 판매되는 제품도 있다[바로가기][바로가기]. 넥슨 컴퓨터 박물관[바로가기]에 Apple-1의 원형이 전시되어 있으며 실제로 작동 시키는 모습이 공개됐다[바로가기].

예제에 사용된 베릴로그 RTL 소스는 애호가(취미가)에 의해 재현된 것으로 공개되어있다[바로가기]. 칩 레이아웃을 생성하기 전에 베릴로그 RTL을 검증 하기 위해 이 CPU를 사용한 개인 컴퓨터 Apple-1을 SystemC/C++[바로가기]로 시스템 수준에서 모형화 하고 워즈니악[바로가기]의 모니터 롬(Monitor ROM)을 적재하여 구동 시켜본다. 40년전의 CPU와 컴퓨터 시스템 이지만 오늘날 활용 가능한 오픈 소스 도구들을 써서 높은 추상화 수준(시스템 수준)에서 검증해 본다.

베릴로그 RTL의 검증에 SystemC/C++[바로가기]를 사용한 시스템 수준 테스트 벤치를 제작하였다. 오픈-소스 베릴로그 시뮬레이터 Icarus Verilog[바로가기]가 상당한 수준에 이르러 여러 교육용 목적으로 사용되고 있다[바로가기][바로가기]. 시뮬레이션 실행을 빠르게 수행하기 위해 실행형 컴파일러[주1]외에 언어 변환기[주2]가 사용되기도 하는데 오픈 소스 변환기 베릴레이터 VERILATOR[바로가기]가 있다.

주1] 컴퓨팅 언어로 기술된 구문을 컴파일하여 특정 운영체제 상에서 실행할 수 있는 바이너리 실행 파일을 생성한다. 케이던스 Verilog-XL, Icarus Verilog 가 이에 해당한다.

주2] 컴퓨팅 언어로 기술된 구문은 다른 언어로 변환한다. VERILATOR는 베릴로그 언어를 C/C++ 언어의 구문으로 변환 시켜준다. 하드웨어의 병렬성을 모사하기 위해 쓰레딩 라이브러리(POSIX Thread[바로가기] 또는 SystemC[바로가기])를 활용한다.

본 예제에서는 베릴로그 RTL의 검증에 두가지 방법을 사용한다. 첫번째 방법은 언어 변환기다. 베릴레이터로 변환된 SystemC 모델을 시스템 수준 SystemC/C++ 테스트 벤치에 결합하여 베릴로그 RTL을 검증 한다. 두번째 방법은 상이한 시뮬레이터를 유기적으로 묶는 병행 시뮬레이션(Co-Simulation[바로가기][바로가기])이다. 하드웨어 언어는 물론 SystemC/C++ 까지 모두 수용하는 시뮬레이터 QuestaSim을 사용한다. 상용 도구와 비교해 봄으로써 오픈 소스 툴의 기능적 유효함을 알아본다. 오픈 소스 설계 도구를 활용한 6502 CPU의 검증과 레이아웃을 생성하는 흐름은 다음과 같다. 

+---------------------------------------------------+
|Verilog RTL:                                       |
|A Verilog HDL version of the old MOS 6502 CPU[Link]|
+-----+---------------------------------------------+
      |                            +--------------------------------+
      |                            | Apple I Circuit & Wozniac ROM|
      |                            | Apple-1 Operation Manual[Link] |
      |                            +-----------------+--------------+
      |                                              |
      |                            +-----------------V--------------+
      |                            | Executable Spec.SystemC/C++  |
      |                            |   Memory / Keyboard / Display  |
      +--------------------+       +-----------------+--------------+
      |                    |                         |
      |         +----------V-------------------------V-----------+
      |         | Functional Simulation:                         |
     (?)<<<<<<<<<   VERILATOR & QuestaSim: SystemC/C++ Testbench |
      |         +-----------------------------+------------------+
      |                                       |
+-----V-----------------------------------+   |
|Yosys: RTL Synthesis  <---[Std-Cell Liberty] |
|      (FSM Synthesis/Instruction Decoder)|   |
|    -> 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.|
      |               |    VERILATOR & QuestaSim                |
      |               +-------------------------------:---------+
+-----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)가 병행 되고 있는 것을 볼 수 있다.

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

[목차][다음]



댓글 없음:

댓글 쓰기