ETRI 0.5um CMOS DK 예제: CPU 6502[9]
실습 요약
* 본문을 읽기전에 따라해보기
-------------------------------------------------------------
+---------------------------------------------------+
|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-------------------------+ |
|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 ------->|
|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.|
| |
| +-------------------------------:---------+
+-----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 ------->|
0. 사전준비
- ETRI 0.5um Std-Cell Design Kit 설치[바로가기]
- 오픈 소스 툴 설치
* QFlow / ETRI050
* Yosys: 합성기
* GrayWolf: 표준 셀 자동배치
* QRouter: 자동 배선
* NetGen: 레이아웃(네트리스트) 비교/LVS
* Magic: 레이아웃 편집/변환/디자인 룰 검사/GDS 생성
1. 내려받은 예제 파일 압축 풀기
- 예제 소스 내려받기 [다운로드]
- 압축 풀기/폴더 구조에 유의할 것
- 'source' 폴더에 베릴로그 파일 읽어볼 것: RTL 의 이해
* cpu.v
* ALU.v
2. 시스템 수준 기능 검증 실시/SystemC-HDL Co-Simulation
- 추상화 수준: SystemC가 테스트 벤치 작성에 효과적인 이유
- Verilog HDL 감싸개(wrapper)
- 동기식 메모리 모델(Synchronous memory SystemC model)
* 메모리 매핑된 입출력 장치(Memory mapped PIA for Keyboard & Display)
- 테스트 벤치 빌드: make 유틸리티 사용법 익히기
$ cd simulation
* 언어변환기(베릴레이터) 사용 6502-시뮬레이터(SystemC Simulation)
$ make
$ make run
* HDL 시뮬레이터(QuestaSim) 사용 6502-시뮬레이터 (SystemC-HDL Co-Simulation)
$ make mti_fun_build
$ make mti_fun_run
- 베릴로그와 C++의 병행 시뮬레이션(Co-Simulation)의 이해
- 언어변환기(Verilator)사용 SystemC 단일 시뮬레이션
vs. HDL-SystemC 병행 시뮬레이션(Co-Simulation)
- 6502 크로스 C-컴파일러 및 어셈블러
3. ETRI 0.5um CMOS 공정으로 합성/네트리스트 시뮬레이션
$ qflow synthesis -T etri050 cpu
- Yosys의 유한 상태 기계(FSM) 합성기
- synthesis 폴더에 생성된 네트리스트 파일들의 의미
* RTL 에서 표준 셀의 네트리스트로 추상화 낮춤 변환
* HDL 시뮬레이터(QuestaSim) 사용 합성 후 시뮬레이션 (SystemC-HDL Co-Simulation)
$ make mti_net_build
$ make mti_net_run
4. 자동 배치
$ qflow place -T etri050 cpu
- 표준셀 배치
- 자동배치 옵션
* 배치밀도(initial_density): 0.3
* 배치 가로세로비(aspect ratio): 1.0
* 핀 위치(CEL2): 사용하지 않음
5. 자동 배선
$ qflow route -T etri050 cpu
- 겹친 접점(Stacked Via) 금지
6. 표준 셀 병합(migration)
$ qflow migrate cpu
- Magic DB 스크립트
- 배선 후 DEF 에서 레이아웃 파일(cpu.mag) 생성
7. 레이아웃 네트리스트와 합성 네트리스트 비교
$ qflow lvs cpu
- LVS 오류 발생 시 조치
LVS Mismatched Net:
-----------------------------------------------------------------
Net: _3230_/CLK |Net: clk_bF$buf6
DFFSR/CLK = 1 | DFFSR/CLK = 9
| DFFPOSX1/CLK = 4
| CLKBUF1/Y = 1
|
Net: _3267_/CLK |(no matching net)
CLKBUF1/Y = 1 |
DFFSR/CLK = 8 |
DFFPOSX1/CLK = 4 |
-----------------------------------------------------------------
Netlists do not match.
- Magic 레이아웃 편집기로 배선되지 않은 네트를 찾아 수정
$ magic -d XR cpu.mag
유용한 Magic 명령어:
- select, expand
- goto _3230_/CLK
- findbox [zoom]
- save cpu_lvs
- 수정 후 LVS 재실시: LVS 수정 레이아웃(cpu_lvs.mag)
#!/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/cpu.spc cpu" \
setup.tcl \
LVS_$1.txt
8. 겹친 접점(Stacked Via) 검사
$ .../scripts/check_via_stack.py cpu_lvs m2contact m3contact 6
$ magic -d XR cpu_lvs_Stacked.mag
- Magic 레이아웃 편집기로 겹친 접점 수정
유용한 Magic 명령어:
- select, expand
- drc find next
- findbox zoom
- save cpu_lvs_Stacked_Fixed
- 숫자키 패드(방향키) 사용
- 수정 후 LVS 재실시: 겹친 접점 수정 레이아웃(cpu_lvs_Stacked_Fixed.mag)
$ ./run_lvs.sh cpu_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
- 단축키: ':', 'a', 's', 'S', 'z', 'Z', 'x', 'X', 'p', 'u'
- erase [layer]
- 숫자키 패드(방향키) 사용
- save cpu_lvs_drc_Fixed
- DRC manager 창 열기
$ ./run_lvs.sh cpu_lvs_drc_Fixed
10. 입출력 정리
- 자동화 도구 경직성
* 지능적이지 않다.
* 이해하기 곤란한 배선
- 수정하려면 끝이 없다. 입출력 패드 달기전에 보이는 것 만이라도...
- 수정 후 DRC & LVS 재실시: 수정 레이아웃(cpu_Core.mag)
$ ./run_lvs.sh cpu_Core
11. 입출력 패드 달기
- chip_top 작업 폴더
$ ls -la
-rwxr-xr-x 1 goodkook ...... .magicrc
-rw-r--r-- 1 goodkook ...... MY_LOGO.mag
lrwxrwxrwx 1 goodkook ...... digital_ETRI -> .../digital_ETRI
-rwxr-xr-x 1 goodkook ...... generate_cpu
lrwxrwxrwx 1 goodkook ...... pads_ETRI050 -> .../pads_ETRI050
- DRC 완료된 코어 레이아웃 네임-링크
$ ln -s ../layout/cpu_Core.mag cpu6502_Core.mag
- 패드 프레임 복사
* MPW는 칩의 면적과 입출력 핀 수가 고정되어 있다.
$ cp pads_ETRI050/PAD_FRAME_3650_68pin.mag cpu6502_Top.mag
- 입출력 패드 배선
$ magic -d XR cpu6502_Top
- 유용한 Magic 명령어:
- box 870um 830um 870um 830um
- getcell cpu6502_Core
- 프레임 에서 코어를 읽어들인 후 입출력 패드 셀 편집
* 텍스트 편집기 사용
12. GDS 생성
- 코어와 입출력 패드 배선 cpu6502_Top 에서 각기 다른 경로로 만들어진 부분 분리
I. 입출력 패드
- 디자인 킷 스크립트 xPad.py 사용
$ ....../scripts/xPad.py cpu6502
- 외부 도구로 제작되어 GDS로 제공된 라이브러리(검증됨)
- DRC 하지 말것
- 컨택의 컷(cut)과 오버행(overhang)이 구분되어 있다.
II. 코어
- 합성으로 생성된 레이아웃
- DRC 완료된 Magic 형식
- 컨택의 컷과 오버행 분리 않됨
III. 입출력 패드와 코어 배선
- 디자인 킷 스크립트 xPin_Route.py 사용
$ ....../scripts/xPin_Route.py cpu6502
- 입출력 패드와 코어사이의 수동배선
- DRC 필요
- 컨택의 컷과 오버행 분리 않됨
- 코어와 입출력 패드 수동 배선
- 칩-탑 구성 요소 분리 후 GDS 생성 및 병합
- 최종 GDS 생성
$ ../../../scripts/generate_chip.sh cpu6502 424 423 866.55 832.4
--------------------------------------
댓글 없음:
댓글 쓰기