2024년 7월 17일 수요일

" VLSI 레이아웃 설계 기초" [4] Netgen, 추출한 회로 비교(LVS)

"VLSI 레이아웃 설계 기초"
[4] Netgen, 추출한 회로 비교(LVS)

[알림] 아래 내용중 질문, 지적, 보강 등 어떤 사항도 환영 합니다.

"VLSI 레이아웃 설계 기초"는 "내 칩(My Chip) MPW 서비스": 오픈-소스 도구 활용 반도체 설계 특별과정 중 첫번째 강좌다. 오픈 소스 도구의 기초적인 사용법과 레이아웃 설계와 검증을 정성적으로 다룬다(Quantative approach to VLSI layout design using Open-Source EDA tools).

강의 내용은 아래와 같다.

[1] 리눅스 및 VLSI 레이아웃 도구 설치 [링크]
[2] XSchem, CMOS 인버터 회로도 작성과 시뮬레이션 [링크]
[3] Magic, CMOS 인버터 레이아웃 작성과 회로추출 [링크]
[4] Netgen, 추출한 회로 비교(LVS) [링크]
[5] XSchem 실습: 인버터 회로도 (Schematic Design) [링크]
[6] Magic 실습: 인버터 레이아웃 (Layout Design) [링크]
[7] Netgen 실습: 네트리스트 비교 및 회로 시뮬레이션 [링크]
[8] Std-Cell 제작 실습: DFF-SR [링크]

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

목차

I. 학습 개요
II. 추상화 수준과 설계 생산성
III. 회로도와 레이아웃의 네트리스트 비교(검증)
IV. Netgen, 오픈-소스 LVS 도구
V. 결론

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

I. 학습 개요

회로도는 인간이 읽고 쓰기 수월하도록 전자회로 요소들을 직관성이 좋은 심볼들로 표현하고 상호 연결한 도면이다. 반도체로 제작하려면 레이아웃 도면이 필요하다. 회로도에서 레이아웃을 완벽하게 그려주는 자동화 도구는 없다. 인간이 개입되면서 오류가 끼어들 여지가 매우 크다. 이런 위험을 방지하려고 다양한 방법들이 동원된다. 그중 회로도(Schematics)에서 추출한 네트리스트와 레이아웃(Layout)에서 추출한 네트리스트를 비교하는 LVS(Layout-versus-Schematic)는 반도체 설계 과정에서 필수 확인절차다.

Netgen 은 LVS를 수행 하는 오픈-소스 도구다[1]. 앞서 학습한 XSchem의 회로도나 Magic의 레이아웃은 저마다 고유의 파일 형식을 가지고 있다. LVS를 위해 공통의 SPICE 네트리스트를 생성할 수 있다. 추상화 수준이 다른 두 도구에서 추출되는 네트리스트의 내용이 달라질 수 있다는 점에 유의하면서 회로도와 레이아웃의 네트리스트 비교 도구 netgen의 사용법을 알아본다.

II. 추상화 수준과 설계 생산성

회로도는 인간이 보기에 읽고 쓰기 수월하다. 이에 비하여 레이아웃에서 회로를 파악하기 위해서  좀더 많은 추리를 필요로한다.

회로도는 회로 요소들을 직관적인 상징(심볼)으로 표현하고 구체적 특성 인자들을 변경하기 수월하며 그 사이의 배선이 자유로운 반면 레이아웃은 제한된 평면 위에서 일일이 부품을 그려주어야 한다.

회로도는 인간에게 가깝고 레이아웃은 제조 공장에 가깝다. 회로도는 레이아웃보다 추상성이 높다. 레이아웃은 회로도보다 구체적으로 실물에 가깝다.

회로도로부터 제조용 도면을 생산하려면 레이아웃 그리기의 과정을 거쳐야 한다. 처음부터 레이아웃을 그리지 않고 번거롭게 회로도 작성에서 시작하는 이유를 찾아보자.

가장 큰 이유는 생산성이다. 설계는 고도의 추상적인 지적 활동으로 이를 구체화 하려면 회로 그리기와 검증에 이은 수정의 무한 반복이다.

레이아웃에서 설계를 한다면 처음 도면 그리기도 수월치 않을 뿐더러 시뮬레이션 후 수정은 더많은 시간을 소요한다. 게다가 설계자의 피로도 상승으로 인한 오류의 가능성이 높아지고 수정 회피의 유혹에 빠지기 쉽다. 이에 비하여 회로도로 설계를 한다면 그나마 매우 수월하다. 부품을 배치하고 배선해야할 평면의 제약이 거의 없다. 충분히 검증한 회로도를 바탕으로 레이아웃을 단번에 그린다면 그 생산성은 이루 말할 수 없이 높아질 것은 자명하다.

회로도와 레이아웃의 회로 표현 방식은 다르다. 따라서 표현 방식이 다른 두 회로가 기능적으로 일치하는지 확인하는 절차가 필요하다. 다행히 회로도와 레이아웃 모두 네트리스트를 추출하는 기능을 가지고 있다. SPICE 라는 네트리스트는 시뮬레이션 용도 뿐만 아니라 두 회로를 비교하는 용도로도 쓰인다.

III. 회로도와 레이아웃의 네트리스트 비교(검증)

검증은 추상화의 수준이 달라지면 반드시 거쳐야 하는 절차로서 두 설계물의 기능이 일치하는지 확인한다. 회로도의 네트리스트에는 배선으로 인하여 발생하는 물리적 인자들이 없는 반면 실물에 가까운 레이아웃은 사정이 다르다. 부품의 배선으로 인한 저항(resistivity)과 인덕턴스(inductance), 배선 사이에서 기인하는 기생 커페시턴스(parasite capacitance)가 끼어든다.

추상화 수준이 서로 다른 두 설계물을 검증할 내용은 상위 수준에서 묘사된 회로가 하위 수준에 동일하게 반영되었는지 확인한다. 일치의 여부는 회로의 연결도와 사용된 부품의 특성(트랜지스터 채널의 길이와 폭)을 포함한다. 배선으로 인한 기생 성분은 레이아웃을 완성 한 후에 비로서 알려지는 것으로 회로도에 표현 하는 설계요소(design parameter)가 되지 못한다.

회로도와 레이아웃은 모두 반도체 제조공장에서 제공한 PDK의 반도체 물질의 물리적 특성을 공유하지만 트랜지스터를 형성하는 채널의 길이와 폭은 설계요소(design parameter)다. 회로도에서 트랜지스터 채널의 폭과 길이는 임의 숫자로 지정할 수 있으나 레이아웃은 그리기 규칙을 따라야 한다.

NSPL의 레이아웃의 그리기 규칙에 따르면 트랜지스터 채널의 최소 길이는 0.5um, 폭은 1.6um 다[2]. 회로도를 작성할 때 이 규칙을 감안해야 한다. 레이아웃에서 그리기 규칙의 위반(DRC violation)을 즉시 알려 주지만 한단계 높은 추상화 수준의 회로도에서는 자유롭다. 지난번 학습에서 이를 무시하고 채널 길이를 0.18um 로 잡은 트랜지스터의 시뮬레이션에서 예상밖의 파형이 나왔었다. 설령 회로도의 시뮬레이션에서 원하는 파형이 나왔다 하더라도 제조 불가능하면 소용없는 일이다.

서로다른 추상화 수준의 설계물 표현법 사이에 일치를 보장하기 위한 절차가 LVS다. Layout-versus-Schematic의 약자다. LVS는 상위 수준의 회로도에서 기술된 내용이 레이아웃에 반영되었는지 확인하는 것이지 실물 회로의 동작을 보장하지 않는다. 배선으로 인한 지연 같은 물리적 특성은 LVS 후에 레이아웃으로부터 회로를 추출하여 시뮬레이션을 실시해야 하지만 물리 시뮬레이션은 워낙 긴 시간을 든다.

소자의 갯수가 적고 입력에 따른 출력의 변화 모습(shape)을 따지는 아날로그 회로에서는 기생 RLC를 포함한 회로 시뮬레이션을 실시한다. 디지털 회로는 0과 1로 상태가 변하는 시간 간격에 관심을 두고 시뮬레이션 대신 배선 지연을 분석(analysis)한다. 소자의 지연과 배선의 길이를 따져 총 지연을 산출한다. 이런 방식을 정적 시간 분석 STA(Static Timing Analysis)라고 한다. 회로의 규모(트랜지스터의 갯수)가 방대해지면 시뮬레이션에 엄청난 시간이 소요된다.

IV. Netgen, 오픈-소스 LVS 도구

Netgen은 SPICE 네트리스트를 비교해주는 오픈소스 도구다. 회로도에서 추출한 네트리스트와 레이아웃에서 추출한 네트리스트를 비교하여 등가성을 확인해준다. Netgen을 사용하여 두 네트리스트를 비교해보자. 먼저 XSchem에서 추출한 네트리스트는 아래와 같다. 인버터 회로에 사용된 두 트랜지스터를 제외한 시뮬레이션 명령들은 주석처리 했다.

    ** sch_path: /home/goodkook/ETRI050_DesignKit/Tutorials/1-1_Inverter_XSchem/inverter1.sch
    **.subckt inverter1
    M1 out in GND GND nfet w=5u l=0.18u m=1
    M2 out in VDD VDD pfet w=5u l=0.18u m=1
    *vdd VDD GND 5
    *vin Vin GND 0
    **** begin user architecture code

    *.include ~/ETRI050_DesignKit/tech/05cmos_model_240201.lib
    *.dc vin 0 5.0 0.01
    *.save all

    ***** end user architecture code
    ***.ends
    *.GLOBAL VDD
    *.GLOBAL GND
    *.end

Magic에서 추출한 네트리스트는 아래와 같다. 기생 커페시턴스 부분은 주석처리 되었다.

    * NGSPICE file created from inverter.ext - technology: scmos

    .option scale=0.15u

    *.subckt inverter in out vdd gnd

    M1000 out in vdd vdd pfet w=12 l=4
    +  ad=0.192n pd=56u as=0.18n ps=54u
    M1001 out in gnd gnd nfet w=12 l=4
    +  ad=0.168n pd=52u as=0.168n ps=52u

    *C0 out gnd 3.0088f
    *C1 in gnd 2.36385f
    *C2 vdd gnd 5.93253f

    *.ends

두 네트리스트의 비교를 위해 Netgen을 실행한다.

    $ netgen -batch lvs ../1-2_Inverter_Magic/inverter.spice \
            ../1-1_Inverter_XSchem/simulation/inverter1.spice  \
            ./etri050_setup.tcl comp.out

LVS의 결과,

    Subcircuit summary:

    Circuit 1: ../1-2_Inverter_Magic/inverter. |Circuit 2: ../1-1_Inverter_XSchem/simulati 

    -------------------------------------------|---------------------
    pfet (1)                                   |pfet (1)
    nfet (1)                                   |nfet (1)

    Number of devices: 2                       |Number of devices: 2
    Number of nets: 4                          |Number of nets: 4

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

    Netlists match uniquely with property errors.

    nfet:1001 vs. nfet:1:
     L circuit1: 4   circuit2: 1.8e-07   (delta=200%, cutoff=1%)
     W circuit1: 12   circuit2: 5e-06   (delta=200%, cutoff=1%)

    pfet:1000 vs. pfet:2:
     L circuit1: 4   circuit2: 1.8e-07   (delta=200%, cutoff=1%)
     W circuit1: 12   circuit2: 5e-06   (delta=200%, cutoff=1%)

    Cells have no pins;  pin matching not needed.

    Device classes ../1-2_Inverter_Magic/inverter.spice and ../1-1_Inverter_XSchem/simulation/inverter1.spice are equivalent.

    Final result: Circuits match uniquely.

    Property errors were found.

    The following cells had property errors:
     ../1-2_Inverter_Magic/inverter.spice

회로는 일치하지만 두 트랜지스터의 속성(property)이 다르다는 보고다. 회로도를 작성할 때 트랜지스터의 채널 길이와 폭이 레이아웃 그리기 규칙을 위배하고 있으므로 이를 수정해 주어야 한다.

단 두개의 트랜지스터가 사용된 회로에서도 불일치의 가능성이 있다. 인간의 수고가 끼어들 여지가 많기 때문이다. 설계 구모가 커지고 레이아웃 평면도가 기발한 아날로그 회로의 경우 자동화된 확인 절차는 매우 중요하다. 가끔 두 화면을 심각하게 바라보는 장면을 본다. 뭔가 중요한 일을 하는 양 하지만 연출된 장면이라고 확신한다.


V. 결론

설계와 검증은 사양을 만족하기까지 무한 반복이다. 생산성을 위해 상위 추상화 수준에서 이뤄진 설계는 제조를 위해 하위 수준으로 전환 된다. 이 과정에서 표현된 회로의 등가성이 보장되어야 한다. 각 수준에서 회로 시뮬레이션의 수행이 가장 확실한 방법이지만 회로 규모의 증가에 따른 시간적 부담이 너무 크다.

[그림출처] https://pulsic.com/continuous-integration-for-analog-ic/

두 회로의 등가성을 확인 하는 방법으로 네트리스트 비교가 널리 사용된다. 시뮬레이션에 앞서 적어도 회로 구성이 일치해야 한다.

설계과정에서 추상화 수준의 전환에 따른 상이한 도구들이 동원된다. 저마다 고유의 파일 형식을 사용하며 검증을 위해 공용 형식으로 변환이 이뤄진다. 추상화 수준이 상이한 만큼 생산된 네트리스트에 검증의 요소가 아닌 부분이 포함되는 경우가 있다. 그때마다 손수 편집을 한다면 매우 위험하다. 설계 자동화는 인간이 실수가 끼어들 여지를 최대한 줄이기 위한 방안이다. 설계 자동화 도구는 용도에 맞는 네트리스트를 생성하는 장치를 갖추고 있다. 오픈-소스 도구 XSchem와 Magic 도 예외는 아니다. 다음편에서는 XSchem와 Magic의 계층적 회로 작성 기법과 용도별 네트리스트 생성에 대하여 알아본다.

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

[참조]

[1] Netgen version 1.5 netlist comparison (LVS) and format manipulation, http://opencircuitdesign.com/netgen/
[2] NSPL 0.5um Si-CMOS 2P3M Design Rule


댓글 없음:

댓글 쓰기