2024년 1월 20일 토요일

ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502 [7]/자동 배치와 배선

ETRI 0.5um CMOS Std-Cell DK 예제: CPU 6502 [7]

V. 자동 배치와 배선

    V-1. 자동 배치
    V-2. 네트리스트 파일 형식
    V-3. 자동 배선

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

V. 자동 배치와 배선

시스템 수준 기능 검증과 합성 후 네트리스트 시뮬레이션 까지 마친 후과정은 자동화 도구의 몫이다. 셀 마다 연결되는 신호선들을 분석하여 공평하게 펼쳐놓고 배선하기는 인간이 할 짓은 못된다. 간단한 축에 드는 6502 CPU의 경우 합성 결과 보여주는 통계를 보자. 무려 1896개의 논리 셀이 사용되었다.

    13. Printing statistics.
    === 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
      AND2X2                         39
      AOI21X1                       135
      AOI22X1                        63
      BUFX2                          25
      DFFPOSX1                        8
      DFFSR                         135
      INVX1                         280
      MUX2X1                          8
      NAND2X1                       262
      NAND3X1                       127
      NOR2X1                        239
      NOR3X1                         15
      OAI21X1                       477
      OAI22X1                        38
      OR2X2                          23
      XNOR2X1                         5
      XOR2X1                         17

자동 배치와 배선 도구의 소개와 활용은 앞의 예제 "ALU8" 편[바로가기]에서 설명 되었으므로 상세한 설명은 생략한다.

V-1. 자동 배치

자동 배치 도구는 GrayWolf[바로가기다. 자동 배치를 수행하기 전에 핀의 인출 방향을 지정토록 한다. 핀 배치 파일 cpu.cel2 다.

layout/cpu.cel2

6502 CPU는 전원을 제외하고 총 37개의 입출력 핀을 가지고 있다. 데이터 입력 DI[7:0]과 출력 DO[7:0]는 오른쪽, 어드레스 버스 AB[15:0]은 왼쪽 그리고 제어선들은 윗쪽에 배치토록 설정하였다.

    padgroup bus_DI permute
    twpin_DI[0]  nonfixed
    twpin_DI[1]  nonfixed
    twpin_DI[2]  nonfixed
    twpin_DI[3]  nonfixed
    twpin_DI[4]  nonfixed
    twpin_DI[5]  nonfixed
    twpin_DI[6]  nonfixed
    twpin_DI[7]  nonfixed
    restrict side R
    
    padgroup bus_DO permute
    twpin_DO[0]  nonfixed
    twpin_DO[1]  nonfixed
    twpin_DO[2]  nonfixed
    twpin_DO[3]  nonfixed
    twpin_DO[4]  nonfixed
    twpin_DO[5]  nonfixed
    twpin_DO[6]  nonfixed
    twpin_DO[7]  nonfixed
    restrict side R
    
    padgroup bus_AB permute
    twpin_AB[0]  nonfixed
    twpin_AB[1]  nonfixed
    twpin_AB[2]  nonfixed
    twpin_AB[3]  nonfixed
    twpin_AB[4]  nonfixed
    twpin_AB[5]  nonfixed
    twpin_AB[6]  nonfixed
    twpin_AB[7]  nonfixed
    twpin_AB[8]  nonfixed
    twpin_AB[9]  nonfixed
    twpin_AB[10]  nonfixed
    twpin_AB[11]  nonfixed
    twpin_AB[12]  nonfixed
    twpin_AB[13]  nonfixed
    twpin_AB[14]  nonfixed
    twpin_AB[15]  nonfixed
    restrict side L
    
    padgroup control permute
    twpin_clk  nonfixed
    twpin_reset nonfixed
    twpin_WE nonfixed
    twpin_IRQ nonfixed
    twpin_NMI nonfixed
    twpin_RDY nonfixed
    restrict side T

QFlow 로 자동 배치를 실시한다.

    $ qflow placement cpu

배치에 적용한 옵션은 가로세로 비율(aspect ratio)와 배치 밀집도(density)다. 가로세로 비율은 배치도구 graywolf 의 옵션 설정 파일 layout/cpu.par 이다. 가로세로 비율의 기본 값은 0.75 다. 이 값을 1.0으로 바꿔주면 정방형 모양으로 배치 된다.

    # Filename: layout/cpu.par
    # etri050.par --- Parameter file for GrayWolf
    ......
    TWMC*chip.aspect.ratio : 1.0

배치 밀도는 프로젝트 파일의 도구 실행 옵션으로 설정 한다. 기본 값은 1.0 이다. 밀집도가 높으면 자동배치가 어렵다. 여러번 값을 바꿔 최적 값을 찾는다. 6502 CPU를 ETRI 0.5um 공정의 디자인 킷 라이브러리를 적용할 경우 0.32 가 적당 했다.

    #!/bin/tcsh -f
    # Filename: project_vars.sh
    #----------------------------------------------
    # project variables for project
    #        ~/ETRI050_DesignKit/devel/Ref_Design/CPU_6502
    #----------------------------------------------
        ......
    # Flow options
    # -------------------------------------------
    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
    ......
    # Placement command options:
    # -------------------------------------------
    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를 실행하기 전에 아래와 같은 변환을 볼 수 있다.

    vlog2Cel -l etri050_stdcells.lef -u 100 \
             -o ~/CPU_6502/layout/cpu.cel \
                ~/CPU_6502/synthesis/cpu.rtlnopwr.v

[주] 자동화 도구들 사이에 혼란을 피하기 위해 파일 형식 표준이 제안되어 사용중이다. 큰 EDA 업체들과 파운드리의 연합체가 합의한 형식으로 .oa (OpenAccess), 반도체 뿐만 아니라 PCB까지 아우르는 레이아웃 형식으로 .oas (OASIS)가 제정되어 있다. 겉으로는 공개라고 하지만 유료 회원가입 해야 사용할 수 있다.

자동 배치가 끝나면 graywolf 의 출력 형식 .pl1, .pl2 를 DEF 로 변환 한다.

    place2def.tcl cpu FILL

배치된 DEF는 다시 자동 배선용 도구의 입력으로 쓰인다. 배선은 실제 회로를 그려내므로 기능 설계에 언급되지 않은 전원과 내치된 셀 사이를 메꿔줄 필러 셀이 추가된다.

    addspacers -stripe 8 225 PG -stripe 8.0 225.0 PG -p vdd -g gnd \
                -f FILL -O -stripe 8.0 225.0 PG \
                -l etri050_stdcells.lef \
                -o cpu_filled.def cpu

합성후 생성된 네트리스트 베릴로그는 자동배선의 검증으로 LVS 에서 적용하기 위해 SPICE 로 변환한다.

    vlog2Spice -i -l etri050_stdcells.sp -o cpu.spc cpu.rtl.v

V-3. 자동 배선

QFlow 로 자동 배선을 실시한다.

    $ qflow route cpu

자동 배선은 간여할 사항이 거의 없다는 말 그대로 자동이다. 반도체 공정의 제한 사항으로 겹친 비아(stacked via)의 허용 여부를 QFlow 프로젝트에 설정해 줄 수 있다. 자동배선의 명령 옵션에 겹친 비아를 금지 시켜도 모두 해소 되지 않는다는 점을 기억해 두자.

    # Router command options:
    # -------------------------------------------
    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 의 입력으로 쓰인다.

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

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



댓글 없음:

댓글 쓰기