Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

테크놀로지

프로젝트의 테크놀로지(PDK)는 프로젝트 폴더의 tech.json에 들어 있습니다. 레이어와 GDS 번호, 표시 스타일, 간단한 폭 / 간격 룰, 비아, 기생 성분 추출용 전기 계수, DRC 룰 덱을 정의합니다. tech.json이 없는 프로젝트는 내장 generic180 테크놀로지를 사용합니다.

generic180

새 프로젝트와 데모에서 쓰는 일반적인 180 nm급 테크놀로지입니다. 1 dbu = 1 nm, 그리드 10 nm입니다.

레이어GDS레이어GDS
nwell1via18
active2metal29
nplus3via210
pplus4metal311
poly5boundary62
contact6text63
metal17

배선 레이어는 poly와 metal1~metal3입니다. 비아: contact(active에서 metal1), polycon(poly에서 metal1), via1, via2.

tech.json

최상위:

필드의미
name테크놀로지 이름
dbu_per_umµm당 데이터베이스 단위(1000이면 1 dbu = 1 nm)
grid스냅 그리드(dbu)
layers레이어 배열
vias비아 정의 배열
drc_deckDRC 덱 텍스트(선택. 없으면 레이어 룰에서 유도)
caps레이어별 기생 계수(선택)
roles어떤 레이어와 비아가 확산, 폴리, 웰, 임플란트, 콘택인지(선택. 기본값은 generic180 이름)
rulesPCell이 쓰는 소자 룰, dbu 단위(선택)
devicesPDK MOS 소자(선택. 없으면 일반 nmos / pmos)
modelsPDK SPICE 모델 라이브러리(선택. 없으면 내장 level-1 모델)
signoff외부 DRC / LVS 런셋(선택. 검증 참고)
pcell_layers, pin_labels, drc_extra추가 PCell 레이어, 넷 라벨 레이어, 덱 줄. PDK 파일의 [[pcell_layer]], [[pin_label]], drc_extra와 같음(선택)
stream_map가져오기와 내보내기용 GDSII / OASIS 레이어 맵: layer, stream_layer, datatype 행(선택. Stream Layer Map 참고)

레이어:

{
  "name": "metal1", "gds_layer": 7, "gds_datatype": 0,
  "color": [80, 140, 255, 160], "fill": "hatch",
  "min_width": 230, "min_spacing": 230, "routing": true
}
  • fill: solid, hatch, backhatch, cross, dots, outline 중 하나.
  • min_width, min_spacing: dbu 단위. 0이면 검사하지 않습니다. min_area(선택): dbu² 단위. PCell 콘택 판과 라우터 비아 패드가 이 값에 도달하도록 커집니다.
  • routing: 배선 레이어는 넷 라벨을 담고 추출과 라우터에서 사용됩니다.

비아: name, bottom, cut, top(레이어 이름), cut_size, cut_spacing, enc_bottom, enc_top(dbu), resistance(컷당 Ω), em(선택. 컷당 A 단위의 일렉트로마이그레이션 한계, IR 강하와 일렉트로마이그레이션 참고).

기생 계수(caps)는 레이어마다 한 항목입니다: layer, area(aF/µm²), fringe(변 µm당 aF), coupling(aF. 평행한 이웃에 대해 coupling * length / spacing을 더함), resistance(스퀘어당 Ω), em(선택. 배선 폭 µm당 A 단위의 일렉트로마이그레이션 한계).

DRC 룰 덱

덱은 한 줄에 구문 하나씩 쓰는 일반 텍스트입니다. #은 주석을 시작합니다. 길이는 µm, 면적은 µm² 단위입니다. 키워드와 레이어 이름은 대소문자를 구분하지 않습니다. 모든 룰에 선택적으로 NAME: 접두사를 붙일 수 있으며, 없으면 metal1.W나 contact.EN.metal1 같은 이름이 생성됩니다. #@ text 줄은 다음 룰의 설명이 되어, 생성된 설명 대신 위반과 함께 보고됩니다.

룰

구문검사 내용
width LAYER MIN최소 폭
space LAYER MIN한 레이어 도형 사이의 최소 간격
separation A B MINA와 B 사이의 최소 간격(A와 겹치지 않는 B 조각)
enclosure INNER OUTER MINOUTER가 INNER를 MIN만큼 감싸야 함(OUTER와 겹치는 INNER 조각)
extension A B MINA가 B 밖으로 MIN만큼 연장되어야 함(예: active 위 poly 엔드캡)
area LAYER MIN최소 면적
antenna METAL RATIO연결된 게이트 면적 대비 메탈 면적의 최대 비율(poly와 active 레이어 필요)
density LAYER MIN MAX WINDOW [STEP]WINDOW x WINDOW µm 슬라이딩 윈도 안에서 밀도가 MIN~MAX 퍼센트(단위 없는 숫자, 0~100) 사이여야 함(STEP 기본값은 WINDOW/2)
flag LAYERLAYER의 모든 조각이 위반(유도 레이어와 함께 사용)

유도 레이어

NAME = A and B
NAME = A or B
NAME = A not B        # A에서 B를 뺌
NAME = A xor B
NAME = A size DIST    # 키움(DIST가 음수면 줄임)
NAME = A wide MIN     # A에서 폭이 MIN 이상인 부분
NAME = A interact B   # B와 겹치거나 닿는 A 조각
NAME = A inside B     # B 안에 완전히 들어 있는 A 조각
NAME = A outside B    # B와 겹치지 않는 A 조각
NAME = A enclose B    # B 조각 하나를 통째로 포함하는 A 조각
NAME = A touch B      # B와 겹치지 않고 닿기만 하는 A 조각
NAME = A not interact B   # (not inside, not outside, not enclose, not touch도 가능)
NAME = A area MIN MAX # MIN <= 면적 < MAX인 조각(µm². MAX는 inf 가능)
NAME = holes A        # A의 각 조각이 둘러싼 빈 영역
NAME = extents A      # A의 각 조각의 바운딩 박스

조각(piece)은 레이어에서 변으로 연결된 부분입니다. 유도 레이어는 테크놀로지 레이어와 앞서 정의한 유도 레이어를 사용할 수 있고, 어떤 룰에서든 쓸 수 있습니다. flag를 쓰면 어떤 유도 레이어든 검사가 됩니다. 예를 들어 떠 있는 폴리는 다음과 같습니다.

floating = poly not interact active
PO.FLOAT: flag floating

SVRF 덱

SVRF(Calibre 룰 언어)로 작성한 덱은 자동으로 인식되어 위 룰로 변환되므로, 파운드리 스타일 덱을 내장 엔진에서 실행할 수 있습니다. 덱을 쓰는 모든 곳에서 동작합니다: Rule deck 편집기, tech.json이나 PDK 파일의 drc_deck, ics drc --deck rules.svrf, tool = "builtin"인 런셋. 파일에서 읽을 때 INCLUDE는 그 파일 기준 상대 경로로 해석됩니다.

변환되는 것:

  • 주석, #DEFINE / #UNDEFINE / #IFDEF / #IFNDEF / #ELSE / #ENDIF, 숫자 VARIABLE.
  • LAYER MAP g DATATYPE d n과 LAYER name n .... 레이어 번호는 그 GDS layer와 datatype을 가진 테크놀로지 레이어에 매핑됩니다(LAYER MAP이 없으면 모든 datatype).
  • 레이어 연산 AND, OR, NOT, XOR, [NOT] INTERACT / INSIDE / OUTSIDE / ENCLOSE / TOUCH, SIZE a BY d [OVERUNDER | UNDEROVER], HOLES, EXTENTS, COPY, AREA, 괄호.
  • 룰 검사 NAME { @ comment ... }와 INT a < d(width), EXT a < d(space), EXT a b < d(separation), ENC a b < d(enclosure), AREA a < x, DENSITY a < x | > x WINDOW w STEP s, 또는 임의의 레이어 식(식의 모든 도형이 보고됨). @ 주석은 위반의 설명이 됩니다.

사양 및 LVS 구문(LAYOUT, DRC, PRECISION, CONNECT, DEVICE 등)은 건너뜁니다. 측정 방식을 바꾸는 검사 수식어(OPPOSITE, PROJECTING, PARALLEL 등)는 안내 메시지와 함께 무시하고, 출력 형태만 바꾸는 수식어(REGION, SINGULAR, ABUT)는 조용히 무시합니다. 엣지 연산, WITH WIDTH, 두 레이어 INT 같은 나머지는 해당 룰 검사를 제외합니다. 이런 경우는 모두 줄 번호와 함께 나열됩니다: 룰 덱 아래의 SVRF notes, ics drc의 note: 줄, MCP의 deck_notes. 내장 측정은 맨해튼이며 모서리에서는 유클리드 거리를 쓰므로, 사인오프는 같은 덱을 Calibre에서 실행하세요 (검증 참고).

예제

# 폴리와 게이트
width poly 0.18
space poly 0.24
gate = poly and active
GATE.EX: extension poly active 0.22
width gate 0.18

# metal1, 넓은 메탈 옆에서는 더 큰 간격
width metal1 0.23
space metal1 0.23
m1w = metal1 wide 10
M1.WIDE.S: separation m1w metal1 0.6
area metal1 0.2

# 콘택과 비아
enclosure contact active 0.1
enclosure contact metal1 0.06
enclosure via1 metal1 0.06

antenna metal1 400
density metal1 20 80 100

테크놀로지에 drc_deck이 없으면 IC Studio는 레이어의 min_width, min_spacing, min_area, 비아 컷 크기, 간격, 인클로저, active 위 poly 연장, 안테나 룰, PDK의 drc_extra 줄로부터 덱을 유도합니다. Layout 워크스페이스에서 Rule deck을 열면 덱을 보고 편집하고 Save to technology로 저장할 수 있습니다. DRC Rule Designer는 같은 덱을 폼으로 편집합니다. 명령줄에서는 별도 파일을 쓸 수 있습니다: ics drc <project> <cell> --deck rules.drc.

PDK 파일

PDK 파일은 공정 전체를 기술하는 TOML 파일 하나입니다. 룰을 포함한 레이어, 비아, 레이어 역할, MOS 소자, SPICE 모델 라이브러리가 들어갑니다. 저장소에는 pdks/sky130A.toml(SkyWater SKY130)과 pdks/ihp-sg13g2.toml(IHP SG13G2, 1.2 V 및 3.3 V MOS 소자, Metal1~TopMetal2)이 포함되어 있습니다. 둘 다 $PDK_ROOT를 통해 설치된 PDK에서 모델과 사인오프 덱을 읽습니다.

  • GUI: File > Import > PDK…(또는 명령 팔레트의 Load PDK…)
  • CLI: ics load-pdk myproj pdks/sky130A.toml
  • MCP: load_pdk 도구

파일 안의 길이는 µm 단위입니다. 상대 경로는 PDK 파일 기준이고, ${VAR}는 환경 변수로 확장되므로 모델 라이브러리가 설치된 PDK 안을 가리킬 수 있습니다.

[models]
path = "${PDK_ROOT}/sky130A/libs.tech/ngspice/sky130.lib.spice"
corners = ["tt", "ff", "ss", "sf", "fs"]
default = "tt"
length_unit = "um"   # 모델이 W / L을 µm로 받음

주요 섹션:

섹션내용
name, dbu_per_um, grid테크놀로지 이름, 데이터베이스 단위, 스냅 그리드(µm)
lyp, lyt레이어와 색상을 제공하는 KLayout 파일(선택)
[[layer]]name, gds, datatype, width, space, area(µm²), routing, color(#rrggbb), fill. 레이어를 추가하거나 .lyp에서 온 레이어에 룰을 설정
[roles]diffusion(리스트), tap, poly, nwell, nimplant(공정이 n+ 임플란트를 그리지 않으면 비움: n+는 pimplant 밖의 확산), pimplant, diff_contact, poly_contact(비아 이름), label
[rules]gate_contact_space, poly_endcap, implant_enc, nwell_enc, marker_enc(확산 둘레의 소자 마커 레이어), bend_corner(꺾인 게이트의 모서리 스퀘어 중 W에 포함하는 비율, 0~1, 기본값 1. PCell 참고)
[[pin_label]]도전 레이어의 넷 라벨 레이어: layer, label(예: Metal1과 Metal1.text). 라우팅은 이름 붙은 넷의 라벨을 여기에 두고, 추출은 여기의 라벨을 그 레이어 넷의 이름으로 읽음
[[pcell_layer]]PCell이 그리는 추가 레이어: layer, around(poly_contact, diff_contact, gate, diffusion, poly 또는 레이어 이름), enc, 선택적 kinds(nmos, pmos, poly_res, mom_cap, ntap, ptap)
drc_extra레이어 룰에서 유도한 덱 뒤에 덧붙일 덱 줄(최상위 키, 테이블보다 앞에 둠)
[[via]]name, bottom, cut, top, size, space, enc_bottom, enc_top, resistance, 선택적 em(컷당 A)
[[device]]name, type(nmos / pmos), layers, exclude, subckt
[[resistor]]저항: 도전 레이어의 마커로 표시된 본체: name, layer, layers(마커), exclude, sheet(스퀘어당 Ω). poly_res는 poly 레이어 저항의 마커를 그림
[[capacitor]]커패시터: 두 도전 레이어의 마커로 표시된 겹침: name, bottom, top, layers, area(fF/µm²), 선택적 perimeter(fF/µm). mom_cap은 metal1 / metal2 커패시터의 마커를 그림
[models]path, extra(같은 코너로 함께 불러올 모델 파일), corners, default, length_unit(m 또는 um), osdi(ngspice가 먼저 불러오는 컴파일된 Verilog-A 모델, OpenVAF .osdi), lde(모델이 레이아웃 의존 파라미터 nf sa sb sd를 받으면 true. 이 경우 레이아웃 후 덱이 이를 백어노테이션)
drc_deckDRC 덱 파일(선택)
[[signoff]]외부 DRC / LVS 런셋: name, tool(klayout, calibre, netgen, builtin), check(drc, lvs), deck, vars, klayout, skip, ground(검증 참고)
[[cap]]기생 계수. tech.json과 같으며 선택적으로 resistance(스퀘어당 Ω)와 em(폭 µm당 A)

PDK를 쓰면 달라지는 점:

  • 추출은 역할 레이어에서 게이트를 찾고, 각 트랜지스터에 같은 극성의 [[device]] 중 layers가 모두 게이트를 덮고 exclude 레이어는 덮지 않는 첫 번째 소자의 이름을 붙입니다(예: 저 Vt 소자의 lvtn).
  • 넷리스트는 회로도 모델 nmos / pmos를 극성별 첫 번째 소자에 매핑하고, subckt 소자는 X 소자로 쓰며, Simulation 워크스페이스에서 고른 코너로 모델 라이브러리를 .lib로 불러옵니다. PDK 모델에는 ngspice가 필요합니다.
  • LVS는 소자 모델도 비교합니다.
  • PCell, 회로도 기반 레이아웃, 라우팅은 역할 레이어, 비아, 룰을 사용합니다. 프로젝트에 이미 있는 PCell 변형은 다시 생성됩니다.
  • MOS PCell은 PDK의 어떤 [[device]]든 될 수 있으며, 그 경우 해당 마커 layers를 그립니다 (예: 저 Vt 소자 둘레의 lvtn, 확산 너머 marker_enc). 회로도 기반 레이아웃은 회로도 모델로 소자를 고르므로, 회로도의 저 Vt 트랜지스터는 그 소자로 배치되고 추출되고 비교됩니다. [[pcell_layer]]는 SKY130의 폴리 콘택 위 npc 같은 레이어를 추가합니다.
drc_extra = [
  "pcon = licon1 and poly",
  "pcon_npc = npc size -0.1",
  "pcon_bad = pcon not inside pcon_npc",
  "NPC.EN: flag pcon_bad",
]

[[pcell_layer]]
layer = "npc"
around = "poly_contact"
enc = 0.1

짧은 게이트 길이에서도 이웃한 소스 / 드레인 콘택이 첫 번째 메탈의 간격을 유지하도록, 필요하면 콘택과 게이트 사이 간격이 커집니다.

실제 PDK 레이어 세트 가져오기

IC Studio는 KLayout 레이어 속성(.lyp)과, 선택적으로 KLayout 테크놀로지 파일(.lyt)을 읽습니다.

  • GUI: File > Import > KLayout layer properties…
  • CLI: ics import-tech myproj sky130A.lyp --lyt sky130A.lyt

가져오는 것:

  • 구체적인 layer/datatype 소스가 있는 모든 레이어 항목이 레이어가 됩니다. 이름은 항목 이름에서 가져옵니다(공백은 _, 중복은 _2, _3 등).
  • 색상은 채우기 또는 테두리 색에서 가져오고, KLayout 디더 패턴은 가장 가까운 채우기 스타일로 매핑됩니다.
  • poly, li, met1, metal2, m3 같은 이름의 레이어는 배선 레이어로 표시됩니다.
  • .lyt에서: 테크놀로지 이름, 데이터베이스 단위, 기본 그리드.

가져오지 않는 것: 폭 / 간격 룰, 비아, 기생 계수, DRC 덱. 그 테크놀로지로 DRC, 추출, 라우팅을 쓰려면 이것들을 tech.json에 추가하세요(덱은 Rule deck 편집기에서).

기존 레이아웃은 유지됩니다. 도형은 같은 GDS layer / datatype(또는 같은 이름)을 가진 새 레이어로 옮겨지고, 파일에 없지만 사용 중인 레이어는 유지되며, 데이터베이스 단위가 바뀌면 좌표가 다시 스케일됩니다.