2023년 9월 23일 토요일

[주간강좌] 고위합성(HLS) 도구의 기술 동향

[주간강좌] 고위합성(HLS) 도구의 기술 동향

날자: 2023년 9월 26일
시간: 오후 6시
장소: 226호

내용: 최신 반도체 설계 기법

[1] Towards Automatic High-Level Code Deployment on Reconfigurable Platforms: A Survey of High-Level Synthesis Tools and Toolchains [Link]
높은 추상화 수준의 합성도구의 경향

[2] 시스템수준 언어: SystemC & SystemVerilog [Link]
- 시스템 수준 이란?

[3] SystemC Bridges the Gap [Link]
- 'the Gap'의 의미는?

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

[과제] 오픈 소스 레이아웃 툴 Magic 과 Cadence/Virtuoso 사이의 레이아웃 파일 호환성 실습

1. Magic의 기술 메뉴얼을 참조하여 ETRI의 테크-룰 중 레이어 번호를 Magic의 테크파일, osu050 과 호환되도록 수정할 것

2. Magic에서 생성된 셀 라이브러리를 GDS로 저장 후 Virtuoso 에서 읽을 것

3. ETRI 에서 제공된 IO-PAD 셀 라이브러리의 Virtuoso의 oa를 GDS stream 으로 저장 후 Magic 에서 읽을 것

* Magic 메뉴얼 [Download]

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




[주간강좌] MPW 공식 툴 Cadence/Virtuoso실습 토론

[주간강좌] MPW 공식 툴 Cadence/Virtuoso실습 토론

날자: 9월 22일
장소: 226호
시간: 오후 6시

내용:

- MPW 선정됨에 따라 ETRI의 공정룰 PDK 가 배포 되었음.
- PDK 에 포함된 Cadence/Virtuoso 의 예제에 따라 사용법을 익힐 것
    (Candence 툴 사용 교내 서버 계정을 담당 조교에게 신청하면 생성해 줄 것임)
- 각 학습조는 예제 실습을 수행하고 그 내용을 학습 토론 보고서로 작성, e-mail 제출 할 것
- 토론 주안점:
    1. 테크 룰 이해 및 예제의 DRC 수행
    2. 현재 확보한 오픈 소스 표준 셀 라이브러리를 공식 툴로 포팅
    3. ETRI의 I/O 패드 셀을 Magic 툴로 변환
        (oa, mag 파일변환시 고려할 사항은?)


[주간세미나] ETRI 내칩(My Chip) MPW 선정/PDK 안내

[주간세미나] ETRI 내칩(My Chip) MPW 선정/PDK 안내

날자: 2023년 9월 19일
시간: 오후 6시~
장소: 226호

내용:
- ETRI 내칩(My Chip) MPW 선정과 함께 PDK 가 배포 되었음
- PDK의 설명과 향후 설계 절차에 대한 논의
- 선정된 설계팀은 필히 참석 할 것

ETRI 0.5u CMOS PDK Download


2023년 9월 13일 수요일

[주간세미나] 디지탈 신호처리 알고리즘 DCT 의 VLSI 구현 예

[주간세미나] 디지탈 신호처리 알고리즘 DCT 의 VLSI 구현 예

날자: 2023년 9월 15일(금)
시간: 오후 6시~
장소: 226호
내용:
DCT 알고리즘의 자료 의존성 분석
- 파이프라인 병렬처리 구조
- 9월 9일자 공지 내용: 심화 학습 반 토론 준비할 것
https://fun-teaching-goodkook.blogspot.com/2023/09/parallel-computing-computing-in-memory.html

기타 토의사항: "오늘의 반도체 설계 방법은 20년전과 달라 졌을까?"
    https://goodkook.blogspot.com/2023/09/20.html

아래 두 글을 읽고 토론
1) "마이크로프로세서 설계 무작정 따라하기" (2001년 IDEC 뉴스레터 연재기사)
    http://donny.co.kr/wp/?cat=71

2) QFlow 오픈 소스 반도체 설계 툴 실습
    https://fun-teaching-goodkook.blogspot.com/2023/09/qflow-command-line.html



2023년 9월 10일 일요일

QFlow Command-Line 실행 실습

QFlow Command-Line 실행 실습

RTL 합성에서 레이아웃 생성에 이르는 설계과정을 설명한다.

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

목차

1. 준비
    1-1. 공정기술 선택(Process Technology)
    1-2. 공정용 디자인 키트(Design Kit)
    1-3. 폴더 구성
2. QFlow의 명령줄 실행
    2-1. QFlow 명령줄 옵션
    2-2. QFlow 프로젝트 스크립트
3. 합성(Synthesize)
    3-1. RTL 합성 실행
    3-2. Yosys 합성기 실행 스크립트
    3-3. Yosys 문서
4. 배치와 배선(Place & Route)
    4-1. 자동 배치 도구: GrayWolf
    4-2. 자동 배치 실행
    4-3. 자동 배치의 옵션
    4-4. 자동배선 도구: Qrouter
    4-5. 자동 배선 도구의 실행
    4-6. 자동 배선이 실패 했을 때 조치
5. 레이아웃 검증: LVS (Layout vs. Schematic)
    5-1. 트랜지스터 수준 네트리스트 준비
        합성 후 트랜지스터 수준 Spice 네트리스트
        자동 배선 후 트랜지스터 수준 Spice 네트리스트 생성
    5-2. LVS 실행

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

1. 준비

1-1. 공정기술 선택(Process Technology)

반도체를 제작할 공정을 선택 한다. QFlow 1.4 를 설치하면 기본으로 제공하는 공정의 목록은 아래의 폴더에 있다. 목록을 보면 여러 공정이 보이는데 'osu050' 이 실습에 활용하려는 0.5u CMOS 공정이다.

    $ cd /usr/local/share/qflow/tech/
    $ 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)

합성과 자동 배치배선, 레이아웃 생성 그리고 시뮬레이션을 위해 제공되어야 할 파일들은 아래와 같다.

    $ cd /usr/local/share/qflow/tech/osu050
    $ 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 용 초기화 파일이다. 공정의 초기 설정을 수행한다.
      1: #-----------------------------------------------------
      2: # .magicrc startup file for OSU050 project under qflow
      3: #-----------------------------------------------------
      4: path sys +/usr/local/share/qflow/tech/osu050
      5: tech load SCN3ME_SUBM.30 -noprompt
      6: scalegrid 1 4
      7: set GND gnd
      8: set VDD vdd
      9: drc euclidean on
     10: drc off
     11: addpath digital

레이아웃 툴 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

Qflow version 1.4 revision 100
Usage: qflow [processes] [options] <module_name>

Processes:  synthesize  Synthesize verilog source
            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의 기본 설정된 도구들은 아래와 같다.

    # 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

위의 설정에서 툴의 이름은 명령 스크립트(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 다.

             +------------------+
             |   RTL Verilog    |
             |        .v        |
             +---------+--------+
            .......... | .....................
           :           |    +--------------+  :
           :           |    | Yosys Script |<--- $tech &
           :           +--->|     .ys      |  :    $module_name
           :           |    +-----------+--+  :
           :           |                |     :
           :  +--------+----------+     |     :
           :  |     Yosys         |<----+     :      Std.Cell:
yosys.sh---+  |  read_liberty     <--------------+--- .lib
           :  |  read_verilog     |           :  |
           :  | High-Level synth  |           :  |
           :  |   DFF mapping     <--------------+
           :  | ABC:              |           :  |
           :  |  Combi. mapping   <--------------+
           :  +--------+----------+           :
            .......... | .....................
                 +-----+------------+
                 | Std.Cell Netlist |
                 |      .v          |
                 +------------------+         

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" \
            |& tee -a\ ${synthlog}
    # If provided own script yosys call that,
    # otherwise call yosys with generated script.
    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" \
            |& tee -a ${synthlog}
       eval ${bindir}/yosys ${yosys_options} -s ${modulename}.ys \
            |& tee -a ${synthlog}
    endif

QFlow가 yosys.sh를 통해 생성한 예제의 합성 스크립트는 ./source/map9v3.ys 다. 그 내용을 살펴보면 아래와 같다.

    # Synthesis script for yosys created by qflow
    read_liberty -lib -ignore_miss_dir -setattr blackbox \
                /usr/local/share/qflow/tech/osu050/osu05_stdcells.lib
    read_verilog  /home/goodkook/tut_qflow_cmd/source/map9v3.v

표준 셀 라이브러리 Liberty(tm) 정보파일과 디자인 Verilog 를 읽어 들인 후 합성한다.

    # High-level synthesis
    synth -top map9v3

순차 회로를 추출하여 플립-플롭으로 매핑하고 최적화 한다.

    # Map register flops
    dfflibmap -liberty \
                /usr/local/share/qflow/tech/osu050/osu05_stdcells.lib
    opt

이어 조합 회로를 추론하고 논리회로(binary sequential logic circuits) 합성과 최적화를 실시한다. 최적화 도구는 버클리 합성 및 검증 연구소(Berkeley Verification and Synthesis Research Center)의 ABC 다. [참고: "ABC: A System for Sequential Synthesis and Verification"]

    # Map combinatorial cells, standard script
    abc -exe /usr/local/share/qflow/bin/yosys-abc -liberty \
           /usr/local/share/qflow/tech/osu050/osu05_stdcells.lib \
            -script +strash;scorr;ifraig;retime,{D};\
                strash;dch,-f;map,-M,1,{D}

이어 하위 모듈이 없도록 표준 셀 만으로 구성된 구조 평활화 하고 최적화 과정에서 배제된 잉여 부분을 제거한다.

    flatten
    setundef -zero
    clean -purge

입출력 신호에 구동 셀들을 추가하고,

    # Output buffering
    iopadmap -outpad BUFX2 A:Y -bits

표준 셀 만으로 구성된 최적 네트리스트를 Verilog 로 출력한다.

    # Cleanup
    opt
    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 가 배치과정을 실행 할 때 스크립트 명령을 호출한다.

    /usr/local/share/qflow/scripts/graywolf.sh \
                                -d ~/tut_qflow_cmd map9v3

합성의 결과인 표준 셀 네트리스트를 기반으로 배치가 이뤄진다. 하지만 GrayWolf 의 입력 파일의 양식 .cel 은 Verilog 가 아니므로 QFlow는 이에 맞도록 변환 한 후 자동 배치도구를 호출한다. GrayWolf 는 명령줄 도구가 아니므로 실행용 스크립트를 생성하지 않는다. 그대신 입력용 .cel 파일을 생성하는데 많은 공이 들어간다.

                        Synthesis
                            |
                  +---------+--------+
                  |Structured Verilog|
                  |        .v        |
                  +---------+--------+
              ............. | ...........
             :       +------+-----+      :
             :       |    .cel    <--------- User defs: .cel1, .cel2
             :       +------+-----+      :
             :              |            :
graywolf.sh -+     +--------+--------+   :  
             :     |    Placement    <------ Std.Cell: LEF
             :     |     GrayWolf    <------ Placement param: .par
             :     +--------+--------+   :
              ............. | ...........
                      +-----+-----+
                      |    DEF    |
                      +-----------+

자동 배치의 로그파일, ./log/place.log 을 읽어보자.

    Qflow placement logfile created on Sun Sep 10 08:14:16 KST 2023
    Running vlog2Cel to generate input files for graywolf
    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 도 그중 하나다. 그외 다양한 부속 도구들을 가지고 있다. 이 도구들은 아래의 폴더에 위치 한다.

    $ ls -l /usr/local/share/qflow/bin
    total 3216
    -rwxr-xr-x 1 root 368256 DEF2Verilog
    -rwxr-xr-x 1 root 371688 addspacers
    -rwxr-xr-x 1 root  47488 blif2BSpice
    -rwxr-xr-x 1 root  54952 blif2Verilog
    -rwxr-xr-x 1 root 221624 blifFanout
    lrwxrwxrwx 1 root     23 graywolf -> /usr/local/bin/graywolf
    lrwxrwxrwx 1 root     20 magic -> /usr/local/bin/magic
    lrwxrwxrwx 1 root     21 netgen -> /usr/local/bin/netgen
    lrwxrwxrwx 1 root     22 qrouter -> /usr/local/bin/qrouter
    -rwxr-xr-x 1 root 291280 rc2dly
    -rwxr-xr-x 1 root 158344 spice2delay
    -rwxr-xr-x 1 root 371384 vesta
    -rwxr-xr-x 1 root 293760 vlog2Cel
    -rwxr-xr-x 1 root 298448 vlog2Def
    -rwxr-xr-x 1 root 166976 vlog2Spice
    -rwxr-xr-x 1 root 325912 vlog2Verilog
    -rwxr-xr-x 1 root 300488 vlogFanout
    lrwxrwxrwx 1 root     20 yosys -> /usr/local/bin/yosys
    lrwxrwxrwx 1 root     24 yosys-abc -> /usr/local/bin/yosys-abc

배치도구 grqywolf, 레이아웃 도구 magic, 배선도구 qrouter, 합성도구 yosys 는 외부 툴이다.

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

배치도구 GrayWolf 의 입력으로 사용할 .cel 파일을 생성하기 전에 설계자의 조건을 반영 시킬 수 있다. 특정 매크로 블럭의 위치를 지정할 경우 .cel1에 기술하고 입출력 신호의 배치는 .cel2에 기술한다. 

    No map9v3.cel1 file found for project. . .
                     no partial blockages to apply to layout.
    Preparing pin placement hints from map9v3.cel2

입출력 신호의 배치 방향은 상(Top)/하(Bottom)/좌(Left)/우(Right)로 지정 할 수 있다. 모듈의 입출력 신호 위치를 .cel2에 기술한다. 실습 예제의 입출력 배치 지정 파일은 layout/map9v3.cel2 다.

    padgroup input permute
    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)로 하였다.

    Running GrayWolf placement
    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의 내용을 수정하여 배치의 규칙을 수정할 수 있다. 배선을 위한 물리적 규칙은 아래와 같다.

    # osu050.par --- Parameter file for GrayWolf
    # NOTE:  all distance units are in centimicrons
    RULES
        # Values are resistance in ohms/sq, and capacitance in fF/um^2
        layer metal1 0.09 0.032 horizontal
        layer metal2 0.09 0.016 vertical
        layer metal3 0.05 0.010 horizontal

        via via12 metal1 metal2
        via via23 metal2 metal3

        width metal1 90
        width metal2 90
        width metal3 150
        width via12 150
        width via23 150

        spacing metal1 metal1 210
        spacing metal2 metal2 150
        spacing metal3 metal3 150

        # Stacked vias allowed
        spacing via12 via23 0

        overhang via12 metal1 8
        overhang via12 metal2 6
        overhang via23 metal2 8
        overhang via23 metal3 6
    ENDRULES

이어서 표준 셀 배치의 규칙은 아래와 같다.

    *vertical_wire_weight : 1.0
    *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

    TWMC*chip.aspect.ratio : 0.75
    TWSC*feedThruWidth    : 240 layer 1
    TWSC*do.global.route  : on
    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 is a tool to generate metal layers and vias to physically connect together a netlist in a VLSI fabrication technology. It is a maze router, otherwise known as an "over-the-cell" router or "sea-of-gates" router. That is, unlike a channel router, it begins with a description of placed standard cells, usually packed together at minimum spacing, and places metal routes over the standard cells.

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


                        Placement <-------------------------------+
                            |                                     |
                  +---------+--------+                            |
                  |       .def       |     Std.Cell:              |
                  +---------+--------+        LEF                 |
              ............. | ................ | ...........      |
             :              |     +------------+---------+  :     |
             :    Std.Cell: |     |Qrouter Command-script|  :     |
             :       LEF    +----->        .cfg          |  :     |
             :        |     |     +----------+-----------+  :     |
 qrouter.sh -+     +--+-----+--------+       |     .........      |
             :     |    Auto-Router  <-------+    : +--.sh &.par -+-+
             :     |      Qrouter    |(if failed) : |initial_density|
             :     |                 |------------->|aspect_ratio   |
             :     +--------+--------+            : +---------------+
              ............. | ....................
                      +-----+-----+
                      |    DEF    |
                      +-----------+

자동배선 로그, ./log/route.log:

    Qflow route logfile created on Mon Sep 11 22:00:08 KST 2023
    qrouter -noc  -s map9v3.cfg

    Qrouter detail maze router version 1.4.86.T
    Reading LEF data from file
            /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef.
        ...............
    LEF file:  Defines site IO (ignored)
    LEF file:  Defines site core (ignored)
    LEF read: Processed 3221 lines.
    LEF Read: encountered 0 errors and 8 warnings total.

    Reading DEF data from file map9v3.def.
    Diagnostic: Design name: "map9v3"
      Processed 0 vias total.
      Processed 1613 subcell instances total.
      Processed 40 pins total.
      Processed 224 nets total (0 fixed).
      Processed 2 special nets total (3 fixed).
    DEF read: Processed 2739 lines.
    Output scale = microns / 100, precision 1
    There are 225 nets in this design.
    *** Running stage1 routing with defaults
        ............

    *** Writing DEF file map9v3_route.def
    emit_routes():  DEF file has 224 nets and 3 specialnets.
    but qrouter wants to write 225 nets and specialnets.
    ----------------------------------------------
    Final: No failed routes!
    ----------------------------------------------

    *** Writing RC file map9v3_route.rc
    DEF2Verilog \
        -v ./synthesis/map9v3.rtlnopwr.v \
        -o ./synthesis/map9v3_postroute.v \
        -p vdd -g gnd \
        -l  /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef \
            map9v3_route.def

    Generating RTL verilog and SPICE netlist file in directory
       /home/goodkook/tut_qflow_cmd/synthesis
    Running vlog2Verilog.
    vlog2Verilog -c -v vdd -g gnd \
        -o map9v3.rtl.anno.v map9v3_postroute.v

    Running vlog2Spice.
    vlog2Spice -i \
        -l  /usr/local/share/qflow/tech/osu050/osu050_stdcells.sp \
        -o map9v3.anno.spc map9v3.rtl.anno.v

Qrouter 명령줄 스크립트, qrouter.sh에서 생성된 qrouter의 실행 스크립트 ./layout/map9v3.cfg :

    # qrouter runtime script for project map9v3
    verbose 1
    read_lef  /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef

    catch {layers 3}
    via stack all

    vdd vdd
    gnd gnd

    obstruction -9.6 394.5 518.4 402.0 metal1
    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개의 네트에 대하여 배선에 실패 했다고 보고됐다.

    ----------------------------------------------
    Progress: Stage 2 total routes completed: 6191
    Failed net routes: 52
    ----------------------------------------------
    *** Writing DEF file map9v3_route.def
    emit_routes():  DEF file has 224 nets and 3 specialnets.
    but qrouter wants to write 225 nets and specialnets.
    ----------------------------------------------
    Final: Failed net routes: 52
    List of failed nets follows:
     startbuf[0]
     _139_
     clock_bF$buf4
     _1_
     _118_
     ...   ......
     _102_
     _48_
     _52__bF$buf0

자동 배선에 실패하는 원인은 크게 3가지로 볼 수 있다.

첫째, 공정의 배선에 사용할 메탈 층의 갯수가 적기 때문이다. 예제에 적용한 공정 osu050 은 2중 폴리/3중 메탈 공정이다. 메탈 1은 표준 셀 내부 배선과 인접 배선에 이용되며 표준 셀과 하드 매크로 사이의 전역배선에 사용할 수 있는 층은 메탈 2와 3 뿐이다. 배치와 배선 정의 파일 ./layout/osu050.par에 메탈2는 수평 배선, 메탈3은 수직배선에 사용하도록 자동 배선 규칙으로 정했었다. 메탈 층의 갯수가 부족한 경우에 대해 설계자가 할 수 있는 조치는 없다.

둘째, 배치 과정에서 입출력 신호의 배치기준이 너무 빡빡한 경우다. 다른 매크로들과 연결의 편이를 위해 입출력 신호의 배치 면을 한쪽으로 몰리게 한다거나 버스 신호의 순서를 가지런하게 두는 경우 배선에 제약이 따른다. 어짜피 자동 배선 도구를 사용할 것이다. 너무 보기 좋게 할 필요는 없다. 배치도구 graywolf 의 설계자 핀배치 파일 .cel2 에서 핀 배치 면을 조정하고 그룹 내에서 순서를 느슨하게 두면 도움이 된다.

셋째, 표준 셀의 배치 밀도가 너무 높은 경우다. QFlow 프로젝트 스크립트 에서 밀도를 줄여서 배치한다. 밀도를 줄이면 평면적이 넓어지므로 최적의 면적을 찾을 때까지 몇번의 조정과 실행이 필요하다.

표준 셀의 높이는 고정되어 있으나 폭은 복잡도에 따라 다르다. 배선 중 표준 셀이 배치된 공간 사이로 수직 배선이 통과하게 되는데 이 폭이 넓을 수록 자동 배선이 수월하다. 가로로 한 행에 표준셀을 배치하는 밀도를 조절하는 옵션은 QFlow 의 프로젝트 스크립트 project_vars.sh에 환경 변수로 정의되어 있다.

    # File: project_vars.sh
    # Placement command options:
    # -------------------------------------------
    set initial_density = 0.5
    # set graywolf_options =
    set addspacers_power = "-stripe 8.0 225.0 PG"

배선에 실패하는 경우 배치 밀도를 줄여 효과를 볼 수 있다. 아울러 배치 평면의 가로세로 비를 변경 하는 것으로도 영향을 미친다. 밀도와 함께 여러번의 시도해서 최적의 배치 평면을 구해야 한다. 설계가 커지면 배치와 배선에 시간이 매우 많이 소요된다는 점도 염두에 두자. 배치밀도를 줄여 자동 배선을 실시하면 성공적인 결과를 얻을 수 있다.

    Progress: Stage 3 total routes completed: 1572
    No failed routes!
    *** Writing DEF file map9v3_route.def
    Final: No failed routes!
    *** Writing RC file map9v3_route.rc
    DEF2Verilog \
        -v ./synthesis/map9v3.rtlnopwr.v \
        -o ./synthesis/map9v3_postroute.v \
        -p vdd -g gnd \
        -l /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef \
        map9v3_route.def
    Generating RTL verilog and SPICE netlist file in directory
       /home/goodkook/tut_qflow_cmd/synthesis
    Running vlog2Spice.
    vlog2Spice -i \
        -l  /usr/local/share/qflow/tech/osu050/osu050_stdcells.sp \
        -o map9v3.anno.spc map9v3.rtl.anno.v

5. 레이아웃 검증: LVS (Layout vs. Schematic)

합성과 배치배선이 성공적으로 종료되면 레이아웃 설계가 완료된 셈이다. 앞서 수행한 합성및 배치배선 도구들도 소프트웨어다. 설계 도구들의 오류가 있을 수 있다. 소프트웨어 도구에 의해 생성된 결과물은 LVS 와 시뮬레이션을 통해 검증 되어야 한다.

5-1. 트랜지스터 수준 네트리스트 준비

LVS는 합성으로 생성된 네트리스트와 지동 배치배선을 마친 후 생성된 네트리스트를 트랜지스터 수준에서 일치여부를 비교한다.

합성 후 트랜지스터 수준 Spice 네트리스트

합성으로 생성된 표준 셀 네트리스트의 양식은 BLIF(Berkley Logic Interchange Format)다. BLIF에서 DEF로 변환 후, 이를 Verilog 네트리스트를 생성 하고 공정의 셀 라이브러리를 적용하여 트랜지스터 수준 Spice 네트리스트를 생성한다. 합성 결과에서 트랜지스터 수준의 Spice 형식 네트리스트를 생성하는 과정은 합성 로그 ./log/synth.log 에서 확인 할 수 있다.

Generating RTL verilog and SPICE netlist file in directory
/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  \
        -l /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef \
-o map9v3.rtl.v \
           map9v3.v
vlog2Verilog -c -p -v vdd -g gnd \
        -l /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef \
-o map9v3.rtlnopwr.v \
           map9v3.v
vlog2Verilog -c -p -b -n -v vdd -g gnd \
        -l /usr/local/share/qflow/tech/osu050/osu050_stdcells.lef \
        -o map9v3.rtlbb.v

Running vlog2Spice.
vlog2Spice -i \
        -l /usr/local/share/qflow/tech/osu050/osu050_stdcells.sp \
        -o map9v3.spc map9v3.rtl.v

Running spi2xspice.py
spi2xspice.py \
        "/usr/local/share/qflow/tech/osu050/osu05_stdcells.lib" \
        map9v3.spc map9v3.xspice

위의 로그에서 봤듯이 RTL 의 합성에서 레이아웃을 생성하기까지 다양한 도구들이 동원된다. 각 도구마다 사용하는 파일의 양식이 상이하다. QFlow는 설계 전반을 관리하면서 각 도구마다 요구하는 상이한 양식의 파일을 변환하기 위한 한다.

자동 배선 후 트랜지스터 수준 Spice 네트리스트 생성

레이아웃 검증용 트랜지스터 수준 네트리스트 생성은 Magic 을 사용한다. 자동배선으로 생성된 파일 형식은 DEF 다. 예제의 경우 ./layout/map9v3.def 다. DEF 에서 레이아웃 툴 magic 으로 변환하는 과정은 아래와 같다.

                        Auto-Route
                            |
                      +-----+----+
                      |   .def   |
                      +-----+----+
              ............. | ..........
    Magic    :              |           :
    .Tech ---+     +--------+--------+  :
  (.magicrc) :     |    Layout Tool  <------- Std.Cell: LEF
             :     |      Magic      |  :
             :     +--------+--------+  :
              ............. | ..........
                       +----+--------+
                       |             |
                 +-----+---+   +-----+----+
                 | Design  |   | Std.Cell |
                 |  .mag   |   |   .mag   |
                 +-----+---+   +-----+----+
               ....... | ........... | .....
              :     +--+-------------+---+  :
     Magic    :     |    Extract Circuit |  :
      .Tech --+     |      Transistors   |  :
              :     |      /wo R & C     |  :
              :     +--------------------+  :
               .............................

단계1:

레이아웃 폴더로 이동하여 Magic의 환경 설정 화일 .magicrc 이 존재하는지 확인한다. 이 화일은 합성 과정에서 생성되었다.

    $ cd layout
    $ ls -a .magicrc
    .magicrc
    $ cat .magicrc
    #-----------------------------------------------------
    # .magicrc startup file for OSU050 project under qflow
    #-----------------------------------------------------
    path sys +/usr/local/share/qflow/tech/osu050
    tech load SCN3ME_SUBM.30 -noprompt

    scalegrid 1 4
    set GND gnd
    set VDD vdd

    drc euclidean on
    drc off

    addpath digital

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 로 분리 저장

    $ cd layout
    $ mkdir digital
    $ cp .magicrc digital
    $ cd digital
    $ magic

단계 5:

Magic 에서 공정의 셀 라이브러리 GDS 읽은 후 저장

    % gds read /usr/local/share/qflow/tech/osu050/osu050_stdcells.gds
    % writeall force
    % quit

단계 6:

Magic 에서 저장한 디자인의 .mag 을 읽어들이면 하위 셀들이 노출되어 나타난다.

    $ cd ..
    $ magic map9v3

단계 7:

트랜지스터 수준 Spice 네트리스트 추출

    % extract all
    % ext2spice hierarchy on
    % ext2spice scale off
    % ext2spice cthresh infinite
    % ext2spice rthresh infinite
    % ext2spice

이에 더하여 스위치레벨 시뮬레이터 IRSIM 용 네트리스트 추출

    % ext2sim

Magic 종료

    % quit

5-2. LVS 실행

합성 과정에서 생성한 트랜지스터 수준 Spice 네트리스트와 자동 배선까지 마친 레이아웃에서 추출한 Spice 네트리스트 비교.


                +------------+   +------------+
Std.Cell        | Synthesis  |   |  Magic     |    Std.Cell
Spice Model: ---> vlog2spice |   |  ext2spice <--- GDS
                |   .spc     |   |   .spice   |
                +------+-----+   +-----+------+
                       |               | * R & C Excluded
                    +--+---------------+--+
                    |  Netlist compare    |
                    |  netgen lvs command <--- setup.tcl
                    +---------------------+

    $ cat setup.tcl
    ignore class {-circuit1 FILL}
    permute default
    property default
    property {-circuit1 nfet} remove ad pd as ps
    property {-circuit1 pfet} remove ad pd as ps

    $ netgen -batch lvs \
        "./layout/map9v3.spice map9v3"  \
        "./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