2023년 12월 30일 토요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [5]/표준 셀 자동배치(Placement)

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [5]

V. 자동 배치(Placement)

    V-1. GrayWolf: 표준 셀 자동 배치 도구

    V-2. 자동 배치 규칙

    V-3. 자동 배치의 출력: 배선 전 DEF와 LVS를 위한 SPICE 네트리스트

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

V. 자동 배치(Placement)

QFlow의 자동 배치를 수행하는 명령은 다음과 같다.

    % qflow place ALU_wrapper

QFlow의 'place' 처리 명령으로 처리될 주요사항은 합성된 베릴로그 네트리스트를 좌표가 기록된 표준셀 DEF(Design Exchange Format[link])로 변환하는 것이다. 파일 형식 변환 뿐만 아니라 표준셀을 평면위에 배치하고 그 위치의 좌표가 기록된다. LEF[link]에 담긴 표준 셀의 물리적 정보(크기, 포트 좌표)를 사용하여 레이아웃으로 들어가는 첫단계다.

[QFlow]Running vlog2Cel to generate input files for graywolf
vlog2Cel  -l <...>/etri050_stdcells.lef -u 100 \
        -o ./ALU8/layout/ALU_wrapper.cel \
           ./ALU8/synthesis/ALU_wrapper.rtlnopwr.v
No ALU_wrapper.cel1 file found for project... partial blockages
No ALU_wrapper.cel2 file found for project... pin placement hints

[QFlow]Running GrayWolf placement
    graywolf ALU_wrapper

[QFlow]Running getfillcell to determine cell to use for fill.
    getfillcell.tcl ALU_wrapper <...>/etri050_stdcells.lef FILL
    Using cell FILL for fill
    =========================
    ./synthesis/ALU_wrapper.rtlnopwr.v
      |
    [vlog2Cel]
      |
    ./layout/ALU_wrapper.cel
      |
+-----V-------------------------+
|GrayWolfPlacement        <------ [Std-Cell LEF/Size]
|                           <------ ./layout/ALU_wrapper.par
|                               |
|    -> Unrouted DEF   -----------> ./layout/ALU_wrapper_unroute.def
+-----------------+-------------+
                  |
                  V
            Auto-Route
    =========================
[QFlow]Running place2def to translate graywolf output to DEF format.
    place2def.tcl ALU_wrapper FILL

QFlow는 자동 배치도구 GrayWolf를 호출하기 전에 네트리스트 베릴로그 ALU_wrapper.rtlnopwr.v를 ALU_wrapper.cel로 변환 한다. GrayWolf 도구가 입력으로 사용하는 CEL 양식은 표준이 아니다. QFlow는 자동화 도구들 마다 사용하는 제각기 다른 양식의 입출력 파일 변환을 위해 유틸리티와 스크립트들을 준비하고 있다. 이런 양식 변환용 유틸리티들은 소프트웨어 실행 효율을 따지지 않는다. 필요할 때 쉽게 대응 할 수 있고 다양한 라이브러리와 API들을 가진 스크립트를 적극적으로 동원한다. 전자설계 자동화 도구들에서는 다수 소프트웨어의 실행절차는 간단한 쉘 스크립트를 쓰지만 커맨드 라인 처리와 파일 입출력 그리고 사용자 인터페이스가 용이한 티클/틱(Tcl/Tk)이 흔히 쓰였다. 최근  파이썬(Python)이 널리 사용되면서 많이 활용되고 있다. 파이썬은 전통적인 프로그래밍 언어인 C/C++ 못지 않은 과학기술 라이브러리는 물론 그래픽 처리등 풍부한 모듈을 사용할 수 있다. 언어 자체뿐만 아니라 다양한 모듈들이 모두 오픈-소스다. 반도체 설계 기술자가 컴퓨팅 언어를 익혀야 하는 이유가 바로 여기에 있다. 반도체 설계가 추상화 수준을 극단적으로 낮춰가는 과정이기에 도구들을 사용하면서 반복적인 명령처리가 매우 잦고 명령마다 옵션 또한 매우 다양하고 많다. 그때마다 명령을 쳐넣는 다면 그 피로도가 쌓이고 오류를 범하기 쉽다. 이를 극복하는 방법은 스크립트를 작성하는 것이다. 반도체 설계자에게 컴퓨팅 언어을 익히도록 요구하는 중요한 이유중 하나다.

V-1. GrayWolf: 표준 셀 자동 배치 도구

QFlow의 자동 배치 도구는 GrayWolf[link]다. 자동 배치도구로 사용하는 GrayWolf는 표준셀 배선 기능도 있으나 제대로 작동하지 않아서 배치용으로 만 쓴다. QFlow는 합성으로 얻은 베릴로그 네트리스트를 자동배치도구의 입력용 CEL 형식 파일로 변환한다. QFlow는 도구들 사이의 입출력 파일 양식을 변환하는 유틸리티와 TCL 스크립트를 제공한다. 자동배치 로그 파일 ./log/place.log 을 통해 사용되는 유틸리티와 입출력 파일을 확인 할 수 있다.

    Running vlog2Cel to generate input files for graywolf
    vlog2Cel  -l  <...>/etri050_stdcells.lef -u 100 \
        -o ./layout/ALU_wrapper.cel \
        ./synthesis/ALU_wrapper.rtlnopwr.v

QFlow는 자동배치 도구용 입력 파일 변환 뿐만 아니라 배치규칙을 생성한다. 배치를 위한 규칙은 표준 셀 배치 밀도(initial density), 배치면적의 가로세로 비율(aspect ratio), 입출력 핀의 방향, 배치된 표준 셀 사이를 채울 필러 셀(filler cell), 전원선 배치 등을 줄 수 있다.

    Running addspacers to generate power stripes and align cell right edge
    addspacers -stripe 8 225 PG -p vdd -g gnd -f FILL -O \
        -l  <...>/tech/etri050/etri050_stdcells.lef \
        -o ALU_wrapper_filled.def ALU_wrapper


V-2. 자동 배치 규칙

자동배치 도구는 표준 셀들 사이의 연결도를 분석하여 배선이 용이하도록 적절히 배치한다. 수많은 셀들을 자동으로 배치하기 전에 조건을 줄 수 있다. 표준 셀의 기하학적 조건들은 디자인 킷의 라이브러리를 따라야 하지만 설계마다 바꿔줄 수 있는 조건도 있다. QFlow는 자동 배치를 실행 하기전에 디자인 킷의 표준 배치 조건 파일에서 자동 배치 규칙과 면적 조건을 기술한 표준 배치 규칙 파일을 복사해 온다. 예제의 자동 배치 설정 파일은 ./layout/ALU_wrapper.par 다. 배치에 영향을 주는 설정만 살펴보면 아래와 같다.

    *rowSep : 0.0   0

표준 셀 배치 시 수직 간격이다. 표준 셀의 높이를 비율로 주거나 10마이크로메터로 줄 수 있다. 0은 셀 배치 상하 간격이 없다는 뜻이다.

    TWMC*chip.aspect.ratio : 0.75

배치 영역의 가로세로 비율이다.

    GENR*flip_alternate_rows : 1

표준 셀 배치시 상하 간격이 없을 경우 홀수 번째 행과 짝수 번째 행의 배치를 뒤집을 수 있어야 한다. 그외 설정 사항은 GrayWolf 메뉴얼을 참조한다[link].

V-3. 자동 배치의 출력: 배선 전 DEF와 LVS를 위한 SPICE 네트리스트

자동 배치도구는 네트리스트를 참조하여 자동 배선을 용이하도록 표준 셀을 배치한다. 표준 셀의 LEF 파일은 배선 규칙(ROUTING RULE)과 함께 표준 셀의 상하좌우 대칭이 허용(SYMMETRY X Y)되어 있다. 배치만 끝난 DEF 파일 ./layout/ALU_wrapper_unrouted.def 은 표준 셀의 위치와 배치시 대칭 정보(N, S, FN, FS)만 기술된다.

COMPONENTS 372 ;
- _385_ DFFSR + PLACED ( 150 150 ) FS ;
- _427_ INVX2 + PLACED ( 7050 150 ) FS ;
- _319_ NAND2X1 + PLACED ( 7650 150 ) FS ;
- _320_ OAI21X1 + PLACED ( 8550 150 ) S ;
    <......>
- FILL55950x23550 FILL + PLACED ( 55950 23550 ) S ;
- FILL56250x23550 FILL + PLACED ( 56250 23550 ) S ;
END COMPONENTS

PINS 23 ;
- gnd + NET gnd
  + LAYER metal1 ( -450 0 ) ( 450 0 )
  + PLACED ( 57195 30 ) N ;
- vdd + NET vdd
  + LAYER metal1 ( -450 0 ) ( 450 0 )
  + PLACED ( -495 30 ) N ;
- clk + NET clk
  + LAYER metal2 ( -52 -52 ) ( 52 52 )
  + PLACED ( 43800 39900 ) N ;
- iAB[7] + NET iAB[7]
  + LAYER metal3 ( -60 -60 ) ( 60 60 )
  + PLACED ( -300 14400 ) N ;
    <......>
- reset + NET reset
  + LAYER metal3 ( -60 -60 ) ( 60 60 )
  + PLACED ( -300 13800 ) N ;
END PINS

NETS 380 ;
- _28_
  ( _309_ Y ) 
  ( BUFX2_insert22 A ) 
  ( BUFX2_insert23 A ) 
  ( BUFX2_insert24 A ) 
  ( BUFX2_insert25 A ) ;
- _28__bF$buf0
  ( _344_ C ) 
  ( _347_ C ) 
  ( _368_ B ) 
  ( _371_ B ) 
  ( BUFX2_insert25 Y ) ;
    <......>
- oACC[6]
  ( PIN oACC[6] ) 
  ( _625_ Y ) ;
- oACC[7]
  ( PIN oACC[7] ) 
  ( _626_ Y ) ;
END NETS

QFlow는 배치를 마친 후 베릴로그 네트리스트에서 SPICE 네트리스트를 생성 하는데 이는 회로 시뮬레이션 용이 아니다. 배선 후 레이아웃 검증 LVS(Layout-Vs.-Schematics)용이다.

    Generating RTL verilog and SPICE netlist file in directory
       <...>/ALU8/synthesis
    Files:
       Verilog: <...>/ALU8/synthesis/ALU_wrapper.rtl.v
       Verilog:<...>/ALU8/synthesis/ALU_wrapper.rtlnopwr.v
       Verilog:<...>/ALU8/synthesis/ALU_wrapper.rtlbb.v
       Spice: <...>/ALU8/synthesis/ALU_wrapper.spc

SPICE는 회로 시뮬레이터로 간단한 형식의 언어로 묘사한 회로도(schematics)를 입력으로 사용한다. 베릴로그 HDL은 다양한 추상화 수준을 수용하지만 SPICE는 오직 회로 구조를 기술하는 네트리스트 일 뿐으로 언어 구성이 매우 단순 명료하다. 합성의 결과로 생성된 SPICE 네트리스트는 회로 시뮬레이션이 아닌 추후 배선을 끝낸 레이아웃을 비교검증(LVS, Layout-vs-Schematic)하기 위해 사용된다.

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

[목차][이전][다음]


댓글 없음:

댓글 쓰기