QFlow Command-Line 실행 실습
RTL 합성에서 레이아웃 생성에 이르는 설계과정을 설명한다.
-----------------------------------------------------------------------------------------
목차
-----------------------------------------------------------------------------------------
1. 준비
1-1. 공정기술 선택(Process Technology)
반도체를 제작할 공정을 선택 한다. QFlow 1.4 를 설치하면 기본으로 제공하는 공정의 목록은 아래의 폴더에 있다. 목록을 보면 여러 공정이 보이는데 'osu050' 이 실습에 활용하려는 0.5u CMOS 공정이다.
$ ls -l
total 20
drwxr-xr-x 2 root root 4096 Aug 11 11:52 gscl45nm
drwxr-xr-x 2 root root 4096 Aug 11 11:52 osu018
drwxr-xr-x 2 root root 4096 Aug 11 11:52 osu035
drwxr-xr-x 2 root root 4096 Aug 11 11:52 osu035_redm4
drwxr-xr-x 2 root root 4096 Aug 11 11:52 osu050
1-2. 공정용 디자인 키트(Design Kit)
합성과 자동 배치배선, 레이아웃 생성 그리고 시뮬레이션을 위해 제공되어야 할 파일들은 아래와 같다.
$ ls -l
total 1512
-rwxr-xr-x 1 root root 768000 Aug 23 18:08 SCN3ME_SUBM.30.tech
-rwxr-xr-x 1 root root 328 Aug 11 11:52 osu050.magicrc
-rwxr-xr-x 1 root root 1663 Aug 11 11:52 osu050.par
-rwxr-xr-x 1 root root 884 Aug 11 11:52 osu050.prm
-rwxr-xr-x 1 root root 3560 Aug 11 11:52 osu050.sh
-rwxr-xr-x 1 root root 183 Aug 11 11:52 osu050_setup.tcl
-rwxr-xr-x 1 root root 82277 Aug 11 11:52 osu050_stdcells.lef
-rwxr-xr-x 1 root root 43713 Aug 11 11:52 osu050_stdcells.sp
-rwxr-xr-x 1 root root 338242 Aug 11 11:52 osu05_stdcells.gds2
-rwxr-xr-x 1 root root 260267 Aug 11 11:52 osu05_stdcells.lib
-rwxr-xr-x 1 root root 23956 Aug 11 11:52 osu05_stdcells.v
이 파일들은 공정에서 제공하는 디자인 키트(Design Kit)로서 각 파일들의 용도는 아래와 같다.
SCN3ME_SUBM.30.tech
레이아웃 툴 Magic 용 테크-파일이다. 해당 공정의 레이아웃 디자인-룰(geometric-rule)을 포함해 DRC, GDS 생성, Spice 네트리스트 추출에 필요한 파라미터들이 기술되어있다.
osu050.magicrc
Magic 용 초기화 파일이다. 공정의 초기 설정을 수행한다.
레이아웃 툴 Magic의 테크-파일이 존재하는 기본 폴더 위치는 아래와 같다.
/usr/local/lib/magic/sys
또는
/usr/local/lib/magic/sys/cuttent
.magicrc 의 내용에서 4번째 줄 path 는 우리가 목표로 하는 공정 'osu050'의 Magic 용 테크 파일이 기본 폴더가 아닌 QFlow 의 테크 폴더에 있으므로 이 위치를 지정하고 있다. 이어서 5번째 줄의 tech 로 테크-파일을 불러온다.
osu050.par
배치(placement)도구 GrayWolf 에서 사용하는 파일이다. 표준 셀의 배치와 자동 배선(route)에서 사용할 배선용 레이어(메탈)을 위한 규칙들을 기술한다.
osu050.prm
레이아웃에서 Spice 용 네트리스트를 추출 할 때 배선의 길이에 따른 해당 공정의 R 과 C 값을 계산하기 위한 파라메터들이다. 개략적인 값이므로 참고만 할 뿐 정확하지 않다.
osu050.sh
QFlow 를 실행할 때 사용될 환경변수를 정의한 쉘 스크립트(shell script)다. 공정에서 제공하는 표준 셀의 LEF 파일명과 GDS 파일명, D-플립-플롭의 이름과 핀의 용도, 기본 드라이버(버퍼)로 사용할 셀의 이름, 필러 셀의 이름 등을 정의하고 있다. 이 변수들은 합성과 P&R 과정에서 사용된다.
osu050_stdcells.lef
합성과 P&R 을 위해 제공된 표준 셀을 특성을 기술한다. LEF 는 Layout Extraction Format/Library Exchange Format 로 표준 셀에 사용된 레이어와 배선에 연결될 이름, 셀의 기하학적 모양과 크기들을 기술한다. 이를 기반으로 합성과 자동 배치배선을 실시할 수 있다. [링크][LEF][LEF/DEF LRM]
osu050_stdcells.sp
표준 셀들의 트랜지스터 네트리스트들이 Spice의 하위 회로로 기술되어있다. Spice 시뮬레이션, LVS 의 용도로 사용된다.
osu05_stdcells.gds2
표준 셀의 레이아웃을 모아 놓은 파일이다.
osu05_stdcells.lib
표준 셀 라이브러리 정보파일이다. Synopsys 에서 제정하여 공개한 Liberty(TM)양식으로 공정에서 제공하는 물리 IP 와 CMOS 표준 셀 라이브러리의 물리적 특성을 기술하는 업계표준 양식이다. [참고: 1. Synopsys' Open-Source Liberty Format to Incorporate On-Chip Variation Extensions, 2. Liberty Format, 3. Liberty Reference Manual ]
osu05_stdcells.v
표준셀의 기능과 시간지연을 기술한 Verilog. HDL 시뮬레이터로 합성후 시뮬레이션(post-simulation)에 사용된다.
1-3. 폴더 구성
레이아웃을 생성하기 까지 다양한 도구들이 실행 된다. 이 과정에서 시뮬레이션을 위한 중간 파일과 참고와 결과분석에 활용될 로그 파일들이 생성된다. 설계 파일과 중간 파일 그리고 로그 파일들이 모두 한개의 폴더에 존재하면 매우 복잡해 질 뿐만 아니라 설계물 전달 과정에서 원치않게 중요 파일이 삭제되는 실수를 범하게 된다. 이를 방지하기 위해 상위 작업 폴더에 하위 폴더를 만들어 놓도록 하자. QFlow에서 활용되는 하위 폴더 구조는 아래와 같다.
2. QFlow의 명령줄 실행
QFlow는 RTL의 합성에서 레이아웃 생성까지 일련의 과정을 통합 관리해 주는 툴이다.
2-1. QFlow 명령줄 옵션
QFlow 를 실행할 때 명령줄 옵션은 아래와 같다. QFlow를 GUI 방식으로 실행 시키면 설계과정을 직관적으로 살펴볼 수 있고 편리하나 각 단계별 옵션을 주거나 처리의 세부과정을 알기 어렵다.
$ qflow
Usage: qflow [processes] [options] <module_name>
place Run initial placement
sta Static timing analysis
route Run placement and route
backanno Post-route timing analysis
migrate Generate database and 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 synthesize to backanno
nochecks Run scripts synthesize to backanno and display
all Run scripts synthesize to gdsii and display
gui Run the qflow interactive GUI
Options: -T, --tech <name> Use technology <name>
-p, --project <name> Project root directory is <name>
-v, --version Print qflow version and revision
2-2. QFlow 프로젝트 스크립트
QFlow 의 합성이 성공적으로 실행되면 아래와 같은 3개의 스크립트를 생성한다. 이 스크립트에는 QFlow 를 수행하면서 동원되는 각종 도구들의 실행순서와 명령줄 옵션들을 지정 할 수 있다.
qflow_vars.sh
QFlow를 진행하기 위한 각종 환경 변수들이 명시되어 있다. 현재 작업중인 폴더 명, 공정기술 명과 해당 파일이 있는 폴더 위치, QFlow 와 관련된 실행 파일의 폴더위치, 소스 파일의 폴더의 위치, 레이아웃을 저장할 폴더의 위치 들이 환경변수로 정의되어 있다.
project_vars.sh
QFlow 를 진행 하면서 동원될 각종 도구들의 세부 옵션들을 정의할 때 사용한다. 예제는 모든 툴에 대하여 기본 옵션으로 동작 시킬 것이므로 변경하지 않을 것이다. 참고로 QFlow의 기본 설정된 도구들은 아래와 같다.
# -------------------------------------------
# set synthesis_tool = yosys
# set placement_tool = graywolf
# set sta_tool = vesta
# set router_tool = qrouter
# set migrate_tool = magic_db
# set lvs_tool = netgen_lvs
# set drc_tool = magic_drc
# set gds_tool = magic_gds
# set display_tool = magic_view
위의 설정에서 툴의 이름은 명령 스크립트(shell command script)다. 따라서 도구를 변경하고자 한다면 환경변수를 수정해 주고 해당 툴을 실행시킬 스크립트를 작성해 주어야한다. QFlow는 도구 실행용 명령 스크립트들은 아래의 폴더에 모아 두었다.
/usr/local/share/qflow/scripts
예를 들어, RTL 합성과정을 수행하면 QFlow는 아래의 스크립트 명령을 실행한다.
/usr/local/share/qflow/scripts/yosys.sh
QFlow의 환경변수 외에 각 과정별 도구들 마다 요구하는 별도의 환경변수들도 설정 할 수 있다. 하지만 QFlow 가 스크립트 명령을 실행 하면서 각 도구에 필요한 설정을 해주므로 환경변수를 변경 할 일은 많지 않다.
qflow_exec.sh
QFlow 가 진행되는 단계마다 실행될 명령줄 스크립트들이 순서대로 나열되어 있다. 스크립트의 첫칸에 코멘트 문자 # 를 지워 해당 과정을 수행 시킬 수 있다.
예를들어 yosys 합성기를 실행하는 명령은 다음과 같다.
/usr/local/share/qflow/scripts/yosys.sh ~/tut_qflow_cmd map9v3 \
~/tut_qflow_cmd/source/map9v3.v
QFlow의 스크립트 모음 폴더에서 합성기를 실행하기 위한 스크립트 yosys.sh 를 호출한다.
[주] 위의 세가지 스크립트는 QFlow 를 한번이라도 성공적으로 실행되면 자동으로 생성된다. 만일 실행에 문제가 생기면 생성된 세 스크립트를 삭제하고 QFlow 를 다시 실행 시키도록 하자.
3. 합성(Synthesize)
QFlow의 명령줄 파라메터로 수행할 과정(processes)과 설계의 이름(module name)이 제공되어야 한다. 옵션 사항(options)으로 공정명을 명시한다. 공정명이 제공되지 않을 경우 기본 공정은 osu035 다. 그리고 모듈명과 설계의 Verilog 파일명이 일치해야 한다.
3-1. RTL 합성 실행
합성을 위한 QFlow의 명령은 다음과 같다.
$ qflow synthesize -T osu050 map9v3
QFlow 중 합성을 수행하기 위해 첫번째 인수로 'synthesize', 공정기술 지정을 위해 두번째 옵션으로 '-T osu050' 을 주었으며, 합성할 설계의 최상위 모듈명은 'map9v3' 다. QFlow는 현재 폴더에서 하위 폴더 source 에서 모듈명과 동일한 map9v3.v 를 찾아 합성을 실시한다. QFlow 는 기본 합성기는 Yosys 다.
3-2. Yosys 합성기 실행 스크립트
Yosys 는 RTL 합성기로 명령줄 도구(command-line)다. 합성 옵션을 주고 QFlow를 실행하면 Yosys 실행용 명령을 스크립트로 생성한 후 합성기를 호출한다.
QFlow의 Yosys 합성기 실행용 명령 스크립트 yosys.sh 를 살펴보면 ~600번 줄까지 yosys 스크립트를 생성하기 위한 과정이며, 이렇게 생성된 스크립트를 주고 yosys 합성기를 호출한다.
# Yosys synthesis (yosys.sh)
#----------------------------------------------------------
echo "Running yosys for verilog parsing and synthesis" \
if ( ${usescript} == 1 ) then
echo "yosys ${yosys_options}" |& tee -a ${synthlog}
eval ${bindir}/yosys ${yosys_options} |& tee -a ${synthlog}
else
echo "yosys ${yosys_options} -s ${modulename}.ys" \
eval ${bindir}/yosys ${yosys_options} -s ${modulename}.ys \
endif
QFlow가 yosys.sh를 통해 생성한 예제의 합성 스크립트는 ./source/map9v3.ys 다. 그 내용을 살펴보면 아래와 같다.
read_liberty -lib -ignore_miss_dir -setattr blackbox \
read_verilog /home/goodkook/tut_qflow_cmd/source/map9v3.v
표준 셀 라이브러리 Liberty(tm) 정보파일과 디자인 Verilog 를 읽어 들인 후 합성한다.
synth -top map9v3
순차 회로를 추출하여 플립-플롭으로 매핑하고 최적화 한다.
opt
이어 조합 회로를 추론하고 논리회로(binary sequential logic circuits) 합성과 최적화를 실시한다. 최적화 도구는 버클리 합성 및 검증 연구소(Berkeley Verification and Synthesis Research Center)의 ABC 다. [참고: "ABC: A System for Sequential Synthesis and Verification"]
이어 하위 모듈이 없도록 표준 셀 만으로 구성된 구조 평활화 하고 최적화 과정에서 배제된 잉여 부분을 제거한다.
clean -purge
입출력 신호에 구동 셀들을 추가하고,
iopadmap -outpad BUFX2 A:Y -bits
표준 셀 만으로 구성된 최적 네트리스트를 Verilog 로 출력한다.
clean
rename -enumerate
write_verilog map9v3_mapped.v
stat
합성기가 RTL 읽어 표준 셀 네트리스트를 생성하는 과정은 합성 로그 파일 ./log/synth.log 를 읽어 보라.
3-3. Yosys 문서
합성은 높은 추상화 수준에서 언어(HDL)로 기술된 행위(behavioral description)를 낮은 수준(RTL)의 디지털 프리미티브(primitives, 각종 게이트와 플립플롭)들의 연결구조(netlist)로 변환하는(lowering abstraction level) 매우 고난도 작업이다. 이 추상화 수준을 낮추는 과정에서 조합회로 및 순차회로로 분할(partition), 행위 추론(inference) 그리고 최적화(optimization) 과정도 이뤄진다.
Yosys 는 매우 정교한 RTL 합성기로 수많은 명령들을 가지고 있는 명령줄 도구다. Yosys의 자세한 내용은 아래 링크를 참조하자.
Yosys Open SYnthesis Suite
https://yosyshq.net/yosys/
1. 최근 문서: https://yosyshq.readthedocs.io/en/latest/
2. Manual [On-Line] [pdf]
3. [Command Reference]
4. [Presentations]
4. 배치와 배선(Place & Route)
4-1. 자동 배치 도구: GrayWolf
QFlow 의 자동 배치도구는 GrayWolf 다. 예일 대학교(Yale University)에서 개발된 팀버울프(TimberWolf)에서 오픈 소스로 갈라져 나온 자동 배치 도구다. 팀버울프는 상업화 되었다. 다소 오래되긴 했지만 메뉴얼[TimberWolf 6.1 Manual PDF]이 있다. 팀버울프를 이렇게 소개하고 있다.
TimberWolf-6.1
Mixed Macro / Standard Cell Floorplanning,
Placement and Routing Package
(Building Block, Gate Array, and Standard Cell Circuits)
GrayWolf는 표준 셀을 배치하고 매크로 단위 배선을 한다. 배치와 배선에 사용할 메탈 레이어와 메탈 간 접점(via, metal contact)들의 배선 규칙(rule)은 공정의 디자인 킷으로 제공된다.
4-2. 자동 배치 실행
QFlow의 자동 배치의 실행은 다음과 같다.
$ qflow place map9v3
QFlow 가 배치과정을 실행 할 때 스크립트 명령을 호출한다.
합성의 결과인 표준 셀 네트리스트를 기반으로 배치가 이뤄진다. 하지만 GrayWolf 의 입력 파일의 양식 .cel 은 Verilog 가 아니므로 QFlow는 이에 맞도록 변환 한 후 자동 배치도구를 호출한다. GrayWolf 는 명령줄 도구가 아니므로 실행용 스크립트를 생성하지 않는다. 그대신 입력용 .cel 파일을 생성하는데 많은 공이 들어간다.
자동 배치의 로그파일, ./log/place.log 을 읽어보자.
vlog2Cel \
-u 100 \
-l /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef \
-o /home/goodkook/tut_qflow_cmd/layout/map9v3.cel \
/home/goodkook/tut_qflow_cmd/synthesis/map9v3.rtlnopwr.v
합성을 통해 성공적으로 생성된 표준 셀 네트리스트 synthesis/map9v3.rtlnopwr.v 를 읽어 모듈의 입출력 신호를 확인 하고 위치를 잡는다. 이때 표준 셀의 물리적 크기와 레이아웃의 좌표는 디자인 킷의 LEF 파일을 참조한다.
-----------------------------------
네트리스트 Verilog에서 .cel 로 변환하는 도구는 vlog2Cel 이다. RTL 에서 GDS를 생성하는 과정마다 동원되는 각 도구의 요구 파일 형식이 다르므로 이를 변환해 주는 도구들을 가지고 있다. 위의 로그에서 보이는 vlog2Cel 도 그중 하나다. 그외 다양한 부속 도구들을 가지고 있다. 이 도구들은 아래의 폴더에 위치 한다.
배치도구 grqywolf, 레이아웃 도구 magic, 배선도구 qrouter, 합성도구 yosys 는 외부 툴이다.
-------------------------------
배치도구 GrayWolf 의 입력으로 사용할 .cel 파일을 생성하기 전에 설계자의 조건을 반영 시킬 수 있다. 특정 매크로 블럭의 위치를 지정할 경우 .cel1에 기술하고 입출력 신호의 배치는 .cel2에 기술한다.
입출력 신호의 배치 방향은 상(Top)/하(Bottom)/좌(Left)/우(Right)로 지정 할 수 있다. 모듈의 입출력 신호 위치를 .cel2에 기술한다. 실습 예제의 입출력 배치 지정 파일은 layout/map9v3.cel2 다.
twpin_clock nonfixed
twpin_start nonfixed
twpin_reset nonfixed
twpin_done nonfixed
twpin_N[0] nonfixed
......
twpin_N[8] nonfixed
restrict side LT
padgroup output permute
twpin_dp[0] nonfixed
twpin_dp[8] nonfixed
restrict side R
padgroup diagnostic permute
twpin_counter[0] nonfixed
twpin_counter[1] nonfixed
twpin_counter[7] nonfixed
twpin_sr[0] nonfixed
twpin_sr[7] nonfixed
restrict side B
모듈의 입출력 신호 그룹(padgroup)을 3개으로 나누고, input 그룹은 왼쪽면과 윗면(LT)에 배치, output 그룹은 오른쪽(R)에 배치, diagnostic 그룹은 아랫면(B)에 배치되도록 제한하고 있다. 그룹 내에서 위치는 임의(permute)로 하였다.
graywolf map9v3
배치용 cel 파일이 준비되면 비로서 배치도구 graywolf 를 실행한다. 배치가 완료된 후 출력되는 파일의 형식은 .def 다. DEF [LEF/DEF LRM]는 Design Exchange Format 으로 물리 EDA 도구(Physical EDA, 레이아웃 생성용 도구)들 사이의 설계물 전송을 위해 Cadence사에서 규정한 형식으 업계 표준으로 사용되고있다[DEF format].
4-3. 자동 배치의 옵션
표준 셀을 실리콘 평면위에 배치하면서 공정의 물리적 정보와 규칙의 중요해 진다. 이때 물리적 정보는 좌표와 폭과 길이 등 평면위에 그려질 기하학적인 모양과 넓이와 이격거리 같은 규칙을 뜻한다. 배치 후 배선에 사용할 메탈 레이어와 메탈 간 접점(via, metal contact)들의 배선 규칙(rule)은 공정의 디자인 킷으로 제공된다.
QFlow의 배치 명령을 수행하면 디자인 킷의 osu050.par 을 ./layout/map9v3.par 로 복사해 놓는다. 설계자는 map9v3.par의 내용을 수정하여 배치의 규칙을 수정할 수 있다. 배선을 위한 물리적 규칙은 아래와 같다.
# NOTE: all distance units are in centimicrons
layer metal1 0.09 0.032 horizontal
layer metal2 0.09 0.016 vertical
layer metal3 0.05 0.010 horizontal
via via23 metal2 metal3
width metal2 90
width metal3 150
width via12 150
width via23 150
spacing metal2 metal2 150
spacing metal3 metal3 150
spacing via12 via23 0
overhang via12 metal1 8
overhang via12 metal2 6
overhang via23 metal2 8
overhang via23 metal3 6
ENDRULES
이어서 표준 셀 배치의 규칙은 아래와 같다.
*vertical_path_weight : 1.0
*padspacing : variable
*rowSep : 0.0 0
*track.pitch : 0.0
*minimum_pad_space : 360
*gridX : 240
*gridY : 300
*gridOffsetX : 0
*gridOffsetY : 0
*graphics.wait : off
*last_chance.wait : off
*random.seed : 12345
TWSC*feedThruWidth : 240 layer 1
TWSC*ignore_feeds : true
TWSC*call_row_evener : true
TWSC*even_rows_maximally : true
# TWSC*no.graphics : on
GENR*row_to_tile_spacing: 1
# GENR*numrows : 6
GENR*flip_alternate_rows : 1
표준 셀 배치시 행의 간격을 두지 않으며, 면적의 가로세로 비율을 0.75로 잡았고, 표준 셀을 배치할 때 이웃 행에 대하여 상하 교대로 배치를 허용하고 있다.
QFlow의 디지털 회로 합성과 배치배선에 대한 좀더 상세한 옵션은 아래 링크를 참조한다.
QFlow 1.4 Digital Synthesis Flow Reference Page [Link]
4-4. 자동배선 도구: Qrouter
Qrouter
http://opencircuitdesign.com/qrouter/index.html
Qrouter Reference
http://opencircuitdesign.com/qrouter/reference.html
Qrouter uses the open standard LEF and DEF formats as file input and output. It takes the cell definitions from a LEF file, and analyzes the geometry for each cell to determine contact points and route obstructions. It then reads the cell placement, pin placement, and netlist from a DEF file, performs the detailed route, and writes an annotated DEF file as output.
4-5. 자동 배선 도구의 실행
QFlow의 자동 배선 실행 명령은 다음과 같다.
$ qflow route map9v3
QFlow 가 배선과정을 실행 할 때 스크립트 명령을 호출한다.
/usr/local/share/qflow/scripts/qrouter.sh ~/tut_qflow_cmd map9v3
자동배선 로그, ./log/route.log:
qrouter -noc -s map9v3.cfg
Qrouter detail maze router version 1.4.86.T
Reading LEF data from file
...............
Qrouter 명령줄 스크립트, qrouter.sh에서 생성된 qrouter의 실행 스크립트 ./layout/map9v3.cfg :
verbose 1
read_lef /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef
catch {layers 3}
via stack all
gnd gnd
obstruction -9.6 -9.0 518.4 1.5 metal1
obstruction -9.6 -9.0 1.2 402.0 metal1
obstruction 512.4 -9.0 518.4 402.0 metal1
obstruction 1.2 394.5 512.4 402.0 metal3
obstruction 1.2 -9.0 512.4 1.5 metal3
obstruction -9.6 1.5 1.2 394.5 metal2
obstruction 512.4 1.5 518.4 394.5 metal2
read_def map9v3.def
qrouter::standard_route map9v3_route.def false
quit
4-6. 자동 배선이 실패 했을 때 조치
합성과 배치가 끝나면 이후 과정은 설계자의 옵션이 끼어들 여지는 거의 없다. 자동 배선을 처리하는 중에 발생하는 실패 오류은 옵션을 수정하여 자동 배치부터 다시 시작해야 한다. 자동 배선에 영향을 미치는 가장 큰 요인은 배치 밀도(density)와 가로세로 비율(aspectratio)이다.
예제에 적용한 공정 osu050 은 2중 폴리/3중 메탈 공정이다. 메탈 1은 표준 셀 내부 배선과 인접 배선에 이용되며 표준 셀과 하드 매크로 사이의 전역배선에 사용할 수 있는 층은 메탈 2와 3 뿐이다. 배치와 배선 정의 파일 ./layout/osu050.par에 메탈2는 수평 배선, 메탈3은 수직배선에 사용하도록 자동 배선 규칙으로 정했었다.
표준 셀 배치가 밀집 되었을 경우 배선이 지나갈 여유공간이 부족하면 자동 배선에 실패한다. 배선의 결과를 보여주는 로그를 ./log/route.log 를 살펴보자. 최종적으로 52개의 네트에 대하여 배선에 실패 했다고 보고됐다.
자동 배선에 실패하는 원인은 크게 3가지로 볼 수 있다.
첫째, 공정의 배선에 사용할 메탈 층의 갯수가 적기 때문이다. 예제에 적용한 공정 osu050 은 2중 폴리/3중 메탈 공정이다. 메탈 1은 표준 셀 내부 배선과 인접 배선에 이용되며 표준 셀과 하드 매크로 사이의 전역배선에 사용할 수 있는 층은 메탈 2와 3 뿐이다. 배치와 배선 정의 파일 ./layout/osu050.par에 메탈2는 수평 배선, 메탈3은 수직배선에 사용하도록 자동 배선 규칙으로 정했었다. 메탈 층의 갯수가 부족한 경우에 대해 설계자가 할 수 있는 조치는 없다.
둘째, 배치 과정에서 입출력 신호의 배치기준이 너무 빡빡한 경우다. 다른 매크로들과 연결의 편이를 위해 입출력 신호의 배치 면을 한쪽으로 몰리게 한다거나 버스 신호의 순서를 가지런하게 두는 경우 배선에 제약이 따른다. 어짜피 자동 배선 도구를 사용할 것이다. 너무 보기 좋게 할 필요는 없다. 배치도구 graywolf 의 설계자 핀배치 파일 .cel2 에서 핀 배치 면을 조정하고 그룹 내에서 순서를 느슨하게 두면 도움이 된다.
셋째, 표준 셀의 배치 밀도가 너무 높은 경우다. QFlow 프로젝트 스크립트 에서 밀도를 줄여서 배치한다. 밀도를 줄이면 평면적이 넓어지므로 최적의 면적을 찾을 때까지 몇번의 조정과 실행이 필요하다.
표준 셀의 높이는 고정되어 있으나 폭은 복잡도에 따라 다르다. 배선 중 표준 셀이 배치된 공간 사이로 수직 배선이 통과하게 되는데 이 폭이 넓을 수록 자동 배선이 수월하다. 가로로 한 행에 표준셀을 배치하는 밀도를 조절하는 옵션은 QFlow 의 프로젝트 스크립트 project_vars.sh에 환경 변수로 정의되어 있다.
# -------------------------------------------
set initial_density = 0.5
# set graywolf_options =
set addspacers_power = "-stripe 8.0 225.0 PG"
배선에 실패하는 경우 배치 밀도를 줄여 효과를 볼 수 있다. 아울러 배치 평면의 가로세로 비를 변경 하는 것으로도 영향을 미친다. 밀도와 함께 여러번의 시도해서 최적의 배치 평면을 구해야 한다. 설계가 커지면 배치와 배선에 시간이 매우 많이 소요된다는 점도 염두에 두자. 배치밀도를 줄여 자동 배선을 실시하면 성공적인 결과를 얻을 수 있다.
No failed routes!
*** Writing DEF file map9v3_route.def
Final: No failed routes!
*** Writing RC file map9v3_route.rc
DEF2Verilog \
Running vlog2Spice.
vlog2Spice -i \
5. 레이아웃 검증: LVS (Layout vs. Schematic)
합성과 배치배선이 성공적으로 종료되면 레이아웃 설계가 완료된 셈이다. 앞서 수행한 합성및 배치배선 도구들도 소프트웨어다. 설계 도구들의 오류가 있을 수 있다. 소프트웨어 도구에 의해 생성된 결과물은 LVS 와 시뮬레이션을 통해 검증 되어야 한다.
5-1. 트랜지스터 수준 네트리스트 준비
LVS는 합성으로 생성된 네트리스트와 지동 배치배선을 마친 후 생성된 네트리스트를 트랜지스터 수준에서 일치여부를 비교한다.
합성 후 트랜지스터 수준 Spice 네트리스트
합성으로 생성된 표준 셀 네트리스트의 양식은 BLIF(Berkley Logic Interchange Format)다. BLIF에서 DEF로 변환 후, 이를 Verilog 네트리스트를 생성 하고 공정의 셀 라이브러리를 적용하여 트랜지스터 수준 Spice 네트리스트를 생성한다. 합성 결과에서 트랜지스터 수준의 Spice 형식 네트리스트를 생성하는 과정은 합성 로그 ./log/synth.log 에서 확인 할 수 있다.
/home/goodkook/tut_qflow_cmd/synthesis
Files:
Verilog: /home/goodkook/tut_qflow_cmd/synthesis/map9v3.rtl.v
Verilog: /home/goodkook/tut_qflow_cmd/synthesis/map9v3.rtlnopwr.v
Verilog: /home/goodkook/tut_qflow_cmd/synthesis/map9v3.rtlbb.v
Spice: /home/goodkook/tut_qflow_cmd/synthesis/map9v3.spc
Running vlog2Verilog.
vlog2Verilog -c -v vdd -g gnd \
-o map9v3.rtl.v \
vlog2Verilog -c -p -v vdd -g gnd \
map9v3.v
Running vlog2Spice.
vlog2Spice -i \
Running spi2xspice.py
spi2xspice.py \
위의 로그에서 봤듯이 RTL 의 합성에서 레이아웃을 생성하기까지 다양한 도구들이 동원된다. 각 도구마다 사용하는 파일의 양식이 상이하다. QFlow는 설계 전반을 관리하면서 각 도구마다 요구하는 상이한 양식의 파일을 변환하기 위한 한다.
자동 배선 후 트랜지스터 수준 Spice 네트리스트 생성
레이아웃 검증용 트랜지스터 수준 네트리스트 생성은 Magic 을 사용한다. 자동배선으로 생성된 파일 형식은 DEF 다. 예제의 경우 ./layout/map9v3.def 다. DEF 에서 레이아웃 툴 magic 으로 변환하는 과정은 아래와 같다.
단계1:
레이아웃 폴더로 이동하여 Magic의 환경 설정 화일 .magicrc 이 존재하는지 확인한다. 이 화일은 합성 과정에서 생성되었다.
$ ls -a .magicrc
.magicrc
QFlow 프로젝트를 시작할때 지정한 공정의 디자인 킷 폴더와 Magic 용 테크-파일을 지정하고 있다. 맨 마지만 줄에 addpath 로 digital 폴더를 추가하고 있다.
단계2:
Magic 을 실행 한 후 공정의 표준 셀 라이브러리 정보 LEF 를 읽어 들인다.
% lef read /usr/local/share/qflow/tech/osu035/osu035_stdcells.lef
이어서 배선결과 DEF 를 읽어 들인다.
% def read map9v3.def
단계3:
DEF 를 Magic 파일로 변환하여 저장한다.
% writeall force map9v3
DEF는 배선에 동원된 금속 층의 배선 정보만을 가지고 있다. 저장된 map9v3.mag 에 하위 셀들의 내부 모습은 보이지 않는다.
단계 4:표준 셀을 구성하는 트랜지스터를 노출 시키기 위하여 표준 셀 묶음 GDS 를 셀 단위 .mag 로 분리 저장
$ mkdir digital
$ cp .magicrc digital
$ cd digital
단계 5:
Magic 에서 공정의 셀 라이브러리 GDS 읽은 후 저장
% writeall force
% quit
단계 6:
Magic 에서 저장한 디자인의 .mag 을 읽어들이면 하위 셀들이 노출되어 나타난다.
$ magic map9v3
단계 7:
트랜지스터 수준 Spice 네트리스트 추출
% ext2spice hierarchy on
% ext2spice scale off
% ext2spice cthresh infinite
% ext2spice rthresh infinite
% ext2spice
이에 더하여 스위치레벨 시뮬레이터 IRSIM 용 네트리스트 추출
% ext2sim
Magic 종료
% quit
5-2. LVS 실행
합성 과정에서 생성한 트랜지스터 수준 Spice 네트리스트와 자동 배선까지 마친 레이아웃에서 추출한 Spice 네트리스트 비교.
"./synthesis/map9v3.spc map9v3"
---------------------------------------------------------------------
[참고]
1] Opencircuit QFlow: Digital Synthesis Flow Tutorial (No GUI)
http://opencircuitdesign.com/qflow/tutorial_nogui.html
2] 반도체 설계 오픈 소스 도구 QFlow 및 관련 도구 설치
https://fun-teaching-goodkook.blogspot.com/2023/08/qflow.html
3] "마이크로프로세서 설계 무작정 따라하기"
http://donny.co.kr/wp/?cat=71
4] OKU Free PDK
https://vlsiarch.ecen.okstate.edu/flows/
5] Standard Cells (Naming)
https://blogtistory.com/14
댓글 없음:
댓글 쓰기