ETRI 0.5um CMOS DK 예제: ALU8[11]
실습 요약
* 본문을 읽기전에 따라해보기
-------------------------------------------------------------
+----------------+ +------------------+
|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 ------->|
0. 사전준비
- ETRI 0.5um Std-Cell Design Kit 설치[바로가기]
- 오픈 소스 툴 설치
* QFlow / ETRI050
* Yosys: 합성기
* GrayWolf: 표준 셀 자동배치
* QRouter: 자동 배선
* NetGen: 레이아웃(네트리스트) 비교/LVS
* Magic: 레이아웃 편집/변환/디자인 룰 검사/GDS 생성
1. 내려받은 예제 파일 압축 풀기
- 예제 소스 내려받기 [다운로드]
- 압축 풀기/폴더 구조에 유의할 것
- 'source' 폴더에 베릴로그 파일 읽어볼 것: RTL 의 이해
* ALU_wrapper.v
* ALU.v
2. 시스템 수준 기능 검증 실시/SystemC-HDL Co-Simulation
- SystemC: 높은 추상화 수준 테스트 벤치 작성
- Verilog HDL 감싸개(wrapper)
- 언어변환기(베릴레이터) 사용 테스트 벤치 빌드
$ cd simulation
$ verilator --sc -Wall --top-module ALU_wrapper --exe --build \
../source/ALU.v ../source/ALU_wrapper.v sc_main.cpp
$ obj_dir/VALU_wrapper
3. ETRI 0.5um CMOS 공정으로 합성/네트리스트 시뮬레이션
$ qflow synthesis -T etri050 ALU_wrapper
- Yosys 합성기
- synthesis 폴더에 생성된 네트리스트 파일들의 의미
* RTL 에서 표준 셀의 네트리스트로 추상화 낮춤 변환
- Netlist simulation (Zero-Delay Functional)
$ verilator --sc --top-module ALU_wrapper --exe --build \
../../../digital_ETRI/khu_etri05_stdcells_func.v \
../synthesis/ALU_wrapper.v sc_main.cpp
4. 자동 배치
$ qflow place -T etri050 ALU_wrapper
- 표준 셀 배치
- 자동배치 옵션
* 배치밀도(initial_density)
* 배치 가로세로비(aspect ratio)
* 핀 위치(CEL2)
5. 자동 배선
$ qflow route -T etri050 ALU_wrapper
- 겹친 접점(Stacked Via) 금지
6. 표준 셀 병합(migration)
$ qflow migrate ALU_wrapper
- Magic DB 스크립트
- 배선 후 DEF 에서 레이아웃 파일(ALU_wrapper.mag) 생성
7. 레이아웃 네트리스트와 합성 네트리스트 비교
$ qflow lvs ALU_wrapper
- LVS 오류 발생 시 조치
- Magic 레이아웃 편집기로 배선되지 않은 네트를 찾아 수정
$ magic -d XR ALU_wrapper.mag
- 유용한 Magic 명령어:
- select, expand
- goto <net name>
- findbox [zoom]
- save ALU_wrapper_lvs
- 수정 후 LVS 재실시: LVS 수정 레이아웃(ALU_wrapper_lvs.mag)
$ ./run_lvs.sh ALU_wrapper_lvs
LVS 스크립트: run_lvs.sh
#!/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/ALU_wrapper.spc ALU_wrapper" \
setup.tcl \
LVS_$1.txt
8. 겹친 접점(Stacked Via) 검사
$ .../scripts/check_via_stack.py ALU_wrapper_lvs \
m2contact m3contact 6
- 겹친 접점 에러 표시된 레이아웃(ALU_wrapper_lvs_Stacked.mag) 편집
$ magic -d XR ALU_wrapper_lvs_Stacked.mag
- Magic 레이아웃 편집기로 겹친 접점 수정
- 유용한 Magic 명령어:
- select, expand
- drc find next
- findbox zoom
- save ALU_wrapper_lvs_Stacked_Fixed
- 숫자키 패드(방향키) 사용
- 수정 후 LVS 재실시: 겹친 접점 수정 레이아웃
$ ./run_lvs.sh ALU_wrapper_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
- erase [layer]
- 단축키: ':', 'a', 's', 'S', 'z', 'Z', 'x', 'X', 'p', 'u'
- 숫자키 패드(방향키) 사용
- DRC manager 창 열기
- save ALU_wrapper_drc_Fixed
- 수정 후 LVS 재실시: DRC 수정 레이아웃
$ ./run_lvs.sh ALU_wrapper_drc_Fixed
10. 입출력 정리
- 자동화 도구 경직성
* 지능적이지 않다.
* 이해하기 곤란한 배선
- 수정하려면 끝이 없다. 입출력 패드 달기전에 보이는 것 만이라도...
- 수정 후 DRC & LVS 재실시: 수정 레이아웃(ALU_wrapper_Core.mag)
$ ./run_lvs.sh ALU_wrapper_Core
11. 입출력 패드 달기
- chip_top 작업 폴더
$ pwd
$ ls -la
-rwxr-xr-x 1 goodkook ...... .magicrc
-rw-r--r-- 1 goodkook ...... MY_LOGO.mag
lrwxrwxrwx 1 goodkook ...... digital_ETRI -> .../digital_ETRI
lrwxrwxrwx 1 goodkook ...... pads_ETRI050 -> .../pads_ETRI050
- DRC 완료된 코어 레이아웃 네임-링크
$ ln -s ../layout/cpu_Core.mag ALU_wrapper_Core.mag
- 패드 프레임 복사
* MPW는 칩의 면적과 입출력 핀 수가 고정되어 있다.
$ cp pads_ETRI050/PAD_FRAME_1825_28pin.mag ALU_wrapper_Top.mag
- 입출력 패드 배선
$ magic -d XR ALU_wrapper_Top
- 유용한 Magic 명령어:
- box
- getcell
- 프레임 에서 코어를 읽어들인 후 입출력 패드 셀 편집
* 텍스트 편집기 사용
12. GDS 생성
- 코어와 입출력 패드 배선 ALU_wrapper_Top 에서 각기 다른 경로로 만들어진 부분 분리
I. 입출력 패드
- 디자인 킷 스크립트 xPad.py 사용
$ ....../scripts/xPad.py ALU_wrapper
- 외부 도구로 제작되어 GDS로 제공된 라이브러리(검증됨)
- DRC 하지 말것
- 컨택의 컷(cut)과 오버행(overhang)이 구분되어 있다.
II. 코어
- 합성으로 생성된 레이아웃
- DRC 완료된 Magic 형식
- 컨택의 컷과 오버행 분리 않됨
III. 입출력 패드와 코어 배선
- 디자인 킷 스크립트 xPin_Route.py 사용
$ ....../scripts/xPin_Route.py ALU_wrapper
- 입출력 패드와 코어사이의 수동배선
- DRC 필요
- 컨택의 컷과 오버행 분리 않됨
- 코어와 입출력 패드 수동 배선
ALU_wrapper_Top
+--------------------------------------+
| ALU_wrapper_Pad (MPW Pad Frame) |
| +-----------------------------+ |
| | ALU_wrapper_Pin_Route | |
| | +-------------------+ | |
| | | ALU_wrapper_Core | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +-------------------+ | |
| +-----------------------------+ |
+--------------------------------------+
- 칩-탑 구성 요소 분리 후 GDS 생성 및 병합
+--------------------------------------------+ GDS Merge
| cpu6502_Pad |-+ +----------------+
+--------------------------------------------+ | | |
+-->| istyle(ETRI-G) |
+------------------------+ GDS Generate | label off |
| cpu6502_Pin_Route (DRC)|--+ +--------------+ +->| |
+------------------------+ +->| flatten | | +----------------+
| ostyle(ETRI) +-+
+--------------+ +->| gds write |
| cpu6502_Core |------------+ +--------------+
+--------------+ * Contact/Via Rule
- 최종 GDS 생성
$ ../../../scripts/generate_chip.sh ALU_wrapper <um><um><um><um>
--------------------------------------
댓글 없음:
댓글 쓰기