ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502 [7]
V. 자동 배치와 배선
-------------------------------------------------
V. 자동 배치와 배선
시스템 수준 기능 검증과 합성 후 네트리스트 시뮬레이션 까지 마친 후과정은 자동화 도구의 몫이다. 셀 마다 연결되는 신호선들을 분석하여 공평하게 펼쳐놓고 배선하기는 인간이 할 짓은 못된다. 간단한 축에 드는 6502 CPU의 경우 합성 결과 보여주는 통계를 보자. 무려 1896개의 논리 셀이 사용되었다.
=== cpu ===
Number of wires: 1740
Number of wire bits: 1910
Number of public wires: 1740
Number of public wire bits: 1910
Number of cells: 1896
자동 배치와 배선 도구의 소개와 활용은 앞의 예제 "ALU8" 편[바로가기]에서 설명 되었으므로 상세한 설명은 생략한다.
V-1. 자동 배치
자동 배치 도구는 GrayWolf[바로가기] 다. 자동 배치를 수행하기 전에 핀의 인출 방향을 지정토록 한다. 핀 배치 파일 cpu.cel2 다.
layout/cpu.cel2
6502 CPU는 전원을 제외하고 총 37개의 입출력 핀을 가지고 있다. 데이터 입력 DI[7:0]과 출력 DO[7:0]는 오른쪽, 어드레스 버스 AB[15:0]은 왼쪽 그리고 제어선들은 윗쪽에 배치토록 설정하였다.
QFlow 로 자동 배치를 실시한다.
$ qflow placement cpu
배치에 적용한 옵션은 가로세로 비율(aspect ratio)와 배치 밀집도(density)다. 가로세로 비율은 배치도구 graywolf 의 옵션 설정 파일 layout/cpu.par 이다. 가로세로 비율의 기본 값은 0.75 다. 이 값을 1.0으로 바꿔주면 정방형 모양으로 배치 된다.
# etri050.par --- Parameter file for GrayWolf
......
TWMC*chip.aspect.ratio : 1.0
배치 밀도는 프로젝트 파일의 도구 실행 옵션으로 설정 한다. 기본 값은 1.0 이다. 밀집도가 높으면 자동배치가 어렵다. 여러번 값을 바꿔 최적 값을 찾는다. 6502 CPU를 ETRI 0.5um 공정의 디자인 킷 라이브러리를 적용할 경우 0.32 가 적당 했다.
# -------------------------------------------
set initial_density = 0.32
# set graywolf_options =
set addspacers_power = "-stripe 8.0 225.0 PG"
V-2. 네트리스트 파일 형식
다양한 수준의 추상화 단계에서 자동화 도구들이 작동 되면서 그에 적당한 파일 형식이 생겨 났다. 도구들마다 저마다 다른 형식을 취하면서 일으키는 혼란을 피하기 위해 설계 자동화 도구 업계의 합의로 표준 형식이 만들어 졌다[주]. 표준 언어인 Verilog 나 VHDL 같은 HDL 이전에 LISP, EDIF 들이 네트리스트 형식으로 사용 되었고 LEF와 DEF는 이제 업계 표준이다. 심지어 LISP는 프로그래밍 언어다. 오픈 소스 도구들은 저마다 개발자들이 다른 까닭에 입출력 파일의 형식이 다르다. 더구나 상업적인 이유를 갖지 않기에 표준 형식을 따르지 않고 강제력도 없다. 오픈 소스 자동배치도구 graywolf 역시 예외는 아니다. QFlow의 도구는 이를 관리해주는 변환 유틸리티를 가지고 있다. Yosys 합성기의 출력 네트리스트는 베릴로그에서 자동 배치도구 graywolf 의 입력 형식은 CEL로 변환해주는 스크립트는 vlog2Cel 이다. 배치 로그를 읽어보면 graywolf를 실행하기 전에 아래와 같은 변환을 볼 수 있다.
[주] 자동화 도구들 사이에 혼란을 피하기 위해 파일 형식 표준이 제안되어 사용중이다. 큰 EDA 업체들과 파운드리의 연합체가 합의한 형식으로 .oa (OpenAccess), 반도체 뿐만 아니라 PCB까지 아우르는 레이아웃 형식으로 .oas (OASIS)가 제정되어 있다. 겉으로는 공개라고 하지만 유료 회원가입 해야 사용할 수 있다.
자동 배치가 끝나면 graywolf 의 출력 형식 .pl1, .pl2 를 DEF 로 변환 한다.
place2def.tcl cpu FILL
배치된 DEF는 다시 자동 배선용 도구의 입력으로 쓰인다. 배선은 실제 회로를 그려내므로 기능 설계에 언급되지 않은 전원과 내치된 셀 사이를 메꿔줄 필러 셀이 추가된다.
합성후 생성된 네트리스트 베릴로그는 자동배선의 검증으로 LVS 에서 적용하기 위해 SPICE 로 변환한다.
vlog2Spice -i -l etri050_stdcells.sp -o cpu.spc cpu.rtl.v
V-3. 자동 배선
QFlow 로 자동 배선을 실시한다.
$ qflow route cpu
자동 배선은 간여할 사항이 거의 없다는 말 그대로 자동이다. 반도체 공정의 제한 사항으로 겹친 비아(stacked via)의 허용 여부를 QFlow 프로젝트에 설정해 줄 수 있다. 자동배선의 명령 옵션에 겹친 비아를 금지 시켜도 모두 해소 되지 않는다는 점을 기억해 두자.
# -------------------------------------------
set route_show = 1
# set route_layers =
# set via_use =
set via_stacks = none
# set qrouter_options =
# set qrouter_nocleanup =
DEF 파일 형식은 자동 배선 도구의 입력과 출력에 모두 쓰인다. 배선의 전과 후의 내용이 다르다. 배선전 DEF는 layout/cpu_unroute.def, 배선후 DEF는 layout/cpu.def 다. 배선 후 DEF 는 레이아웃 편집 및 GDS 생성 도구 Magic 의 입력으로 쓰인다.
--------------------------------------
댓글 없음:
댓글 쓰기