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

오픈 소스 · 풀 커스텀 IC 설계

회로도부터 사인오프까지,
하나의 네이티브 앱에서.

IC Studio는 회로도 입력, SPICE 시뮬레이션, 레이아웃, 자동 배치 배선, DRC, LVS, 기생 성분 추출을 하나의 설계 데이터베이스 위에서 제공합니다. 회로를 그리고, 레이아웃을 생성하고, 검증한 뒤 기생 성분을 포함해 다시 시뮬레이션하기까지 창을 벗어나거나 파일을 하나도 변환할 필요가 없습니다.

자동 배치 배선: 회로도에서 생성한 28 트랜지스터 전가산기, LVS 통과

28T전가산기를 자동으로 배치 배선, DRC와 LVS 통과
8,192개 인버터(약 25만 개 도형)를 끊김 없이 탐색
3가지 프런트엔드, 하나의 코어: 데스크톱 앱, CLI, AI 에이전트용 MCP
3 OSWindows, Linux, macOS 지원, wgpu로 GPU 렌더링

하나의 데이터베이스, 전체 설계 루프

대부분의 오픈 소스 플로는 넷리스트와 GDS 파일로 별개의 도구를 이어 붙입니다. IC Studio에서는 회로도, 시뮬레이터, 레이아웃이 하나의 설계 데이터베이스를 공유하므로 각 단계가 서로의 정보를 알고 있습니다.

회로도→ 시뮬레이션→ 레이아웃 생성→ 배선→ DRC · LVS→ 기생 성분 추출→ 다시 시뮬레이션 ↺

설계 루프: 회로도, 시뮬레이션, 레이아웃 생성, 배선, DRC와 LVS, 기생 성분 추출, 다시 시뮬레이션

  • 레이아웃은 회로도에서 생성되고 자동으로 배선됩니다.
  • 레이아웃은 회로도와 대조 검사(LVS)되며, 차이 항목을 클릭해 바로 찾아갈 수 있습니다.
  • 레이아웃에서 추출한 기생 성분이 곧바로 시뮬레이션에 반영됩니다.

주요 기능

SCH

회로도와 시뮬레이션

실시간 연결성, 동작점 주석 표시, ngspice와 결과를 맞춘 내장 시뮬레이터(필요하면 ngspice를 자동 선택)로 DC / AC / 과도 / 잡음 해석, Bode 플롯과 자동 측정을 제공합니다.

P&R

자동 배치 배선

트랜지스터를 확산 공유, common-centroid 매칭, 더미를 적용한 PCell로 배치하고, rip-up-and-reroute 미로 라우터가 모든 넷을 DRC 위반 없이 배선합니다.

LAY

계층형 레이아웃

인스턴스와 어레이, 대형 설계를 위한 LOD 렌더링, 임의 각도에서도 정확한 레이어 불리언 연산, 비아, PCell, GDSII, OASIS, LEF, DEF 입출력을 지원합니다.

DRC

검증

증분 실시간 검사를 지원하는 룰 덱 기반 DRC, 트랜지스터·저항·커패시터 추출과 LVS, IR 드롭과 일렉트로마이그레이션, KLayout·Calibre·netgen을 통한 사인오프 실행을 제공합니다.

ADE

분석 도구

파형 계산기, 코너 및 파라메트릭 스윕, 공정 편차와 Pelgrom 미스매치를 반영한 몬테카를로, 스펙·수율·데이터시트, 실행 간 결과 비교를 제공합니다.

GEN

레이아웃 생성기

가드 링, 비아 어레이, common-centroid 매칭 배치, 밀도 필, 모델 기반 OPC에 더해 시각적 DRC 룰 디자이너와 Virtuoso 호환 SKILL을 제공합니다.

PDK

실제 PDK

범용 180 nm 테크놀로지로 시작해 SKY130이나 IHP SG13G2로 전환할 수 있습니다. 레이어, 소자 인식, 모델, 코너를 PDK 파일 하나로 설정합니다.

AI

스크립트와 AI 에이전트 지원

모든 동작은 명령입니다. ics CLI는 CI에서 실행되고, MCP 서버를 통해 AI 에이전트가 여러분이 보고 있는 창에서 직접 설계합니다.

1분 만에 실행해 보기

git clone https://github.com/geniuskey/ic-studio
cd ic-studio
cargo run --release -- --demo --cell full_adder --workspace layout

릴리스를 설치했다면 대신 ic-studio --demo --cell full_adder --workspace layout을 실행합니다. 데모 프로젝트가 자동으로 배치 배선된 전가산기를 연 상태로 시작합니다. 데모 갤러리에서 모든 예제를 살펴볼 수 있으며, IC Studio를 실시간으로 시연하기 위한 스크립트도 준비되어 있습니다.

구성

두 프로그램이 함께 설치됩니다.

프로그램용도
ic-studio데스크톱 애플리케이션
ics스크립트와 CI용 명령줄 인터페이스
ics mcp같은 ics 프로그램을 AI 에이전트용 Model Context Protocol 서버로 실행

세 프런트엔드는 모두 같은 코어 라이브러리를 사용합니다. 따라서 앱에서 편집한 프로젝트를 명령줄에서 시뮬레이션·검사·내보내기 하거나 에이전트로 조작할 수 있습니다.

주요 개념

  • 프로젝트: ic-studio.json, 테크놀로지(tech.json), 라이브러리별 폴더를 담은 폴더입니다. 모든 내용이 사람이 읽을 수 있는 JSON이라 git에서 diff가 잘 됩니다.
  • 라이브러리: 이름이 붙은 셀 묶음입니다(데모 프로젝트에는 work와 pcells가 있습니다).
  • 셀: 최대 세 개의 뷰를 갖는 설계 단위입니다. schematic(회로도), simulation(회로도에 설정된 해석), layout(레이아웃) 뷰가 있습니다.
  • 워크스페이스: 앱에는 Home, Schematic, Simulation, Layout의 네 워크스페이스가 있습니다. 열린 셀은 모든 워크스페이스가 공유하는 탭으로 표시되며, 워크스페이스를 전환하면 같은 셀을 다른 뷰로 보여 줍니다.
  • 테크놀로지(PDK): 레이어, GDS 번호, 표시 스타일, 디자인 룰, 전기적 계수입니다. 새 프로젝트는 범용 180 nm급 테크놀로지로 시작합니다.

이 가이드 읽는 법

단축키는 Windows와 Linux 기준(Ctrl)으로 표기합니다. macOS에서는 Cmd를 사용합니다. 앱에서 F1을 누르면 전체 단축키 목록이 표시되며, 단축키 페이지에서도 볼 수 있습니다.

설치

릴리스 빌드를 명령 하나로 설치하거나, Rust 툴체인으로 IC Studio를 소스에서 빌드할 수 있습니다.

릴리스 설치

Windows (PowerShell):

irm https://github.com/geniuskey/ic-studio/releases/latest/download/install.ps1 | iex

macOS (Apple silicon)와 Linux (x86_64):

curl -fsSL https://github.com/geniuskey/ic-studio/releases/latest/download/install.sh | sh

설치 프로그램은 최신 릴리스를 내려받아 두 프로그램을 한 폴더에 설치합니다. 데스크톱 앱 ic-studio와 명령줄 도구 ics이며, ics는 AI 에이전트용 MCP 서버(ics mcp)이기도 합니다.

WindowsmacOS / Linux
폴더%LOCALAPPDATA%\Programs\IC Studio~/.local/share/ic-studio
PATH 등록폴더를 사용자 PATH에 추가~/.local/bin에 링크 생성
실행 아이콘시작 메뉴 바로 가기 IC Studio~/.local/share/applications/ic-studio.desktop (Linux)

설치 프로그램은 다음 작업도 수행합니다.

  • claude가 PATH에 있으면 Claude Code에 MCP 서버를 등록합니다 (claude mcp add --scope user ic-studio -- <folder>/ics mcp). 없으면 이 명령과 다른 클라이언트용 JSON 설정을 출력합니다(MCP 서버 참고).
  • 예제 프로젝트를 주제별 폴더로 Documents\IC Studio\Examples(Windows) 또는 ~/Documents/IC Studio/Examples(macOS / Linux)에 씁니다. 이미 있는 예제는 그대로 두므로 직접 수정한 내용은 업데이트 후에도 유지됩니다.
  • macOS에서는 다운로드 격리(quarantine) 속성을 제거합니다.
  • macOS / Linux에서 ~/.local/bin이 PATH에 없으면 셸 프로필에 추가할 줄을 출력합니다. Windows에서는 새 터미널을 열어야 PATH 변경이 반영됩니다.

업데이트하려면 설치 프로그램을 다시 실행합니다. 앱이나 에이전트가 실행 중이어도 동작합니다(이후 다시 시작하세요). 앱 자체 업데이트 기능(Help > Check for Updates…)도 앱과 함께 ics를 교체하며, 새 버전은 처음 시작할 때 Documents/IC Studio/Examples에 없는 예제 프로젝트를 추가합니다.

Settings에서 Check for updates가 켜져 있으면(기본값) 앱은 시작할 때 새 릴리스를 확인하고 Update now, Release notes, Later 버튼이 있는 Update available 알림을 표시합니다. 업데이트 기능은 이전 버전의 ics mcp 서버가 아직 실행 중이어도 프로그램을 교체할 수 있으며, 설치가 도중에 실패하면 이전 버전을 복원합니다.

옵션은 환경 변수로 지정합니다.

변수효과
ICS_VERSION이 릴리스 태그를 설치, 예: v0.2.0 (기본값: 최신)
ICS_INSTALL_DIR이 폴더에 설치
ICS_EXAMPLES_DIR예제 프로젝트를 이 폴더에 씀
ICS_EXAMPLES=0예제 프로젝트를 쓰지 않음
ICS_UNINSTALL=1폴더, PATH 항목 또는 링크, 실행 아이콘, MCP 등록을 제거 (프로젝트와 예제 프로젝트는 유지)
$env:ICS_VERSION="v0.2.0"; irm https://github.com/geniuskey/ic-studio/releases/latest/download/install.ps1 | iex
curl -fsSL https://github.com/geniuskey/ic-studio/releases/latest/download/install.sh | ICS_UNINSTALL=1 sh

릴리스 빌드는 Windows x86_64, Linux x86_64, Apple silicon macOS용으로 제공됩니다. Intel Mac에서는 소스에서 빌드하세요.

수동 다운로드. 각 릴리스에는 두 프로그램이 들어 있는 압축 파일 ic-studio-<platform>.zip(Windows) 또는 ic-studio-<platform>.tar.gz(macOS, Linux)가 있으며, <platform>은 windows-x86_64, linux-x86_64, macos-aarch64 중 하나입니다. 원하는 폴더에 풀고 두 프로그램을 같은 폴더에 두세요. 업데이트 기능과 Add to Claude Code는 ic-studio 옆에서 ics를 찾습니다. 터미널에서 ics를 쓰려면 그 폴더를 PATH에 추가합니다.

소스에서 빌드

요구 사항

  • rustup.rs의 Rust 1.95 이상.
  • Windows: MSVC 툴체인(x86_64-pc-windows-msvc). “Desktop development with C++” 워크로드가 포함된 Visual Studio Build Tools가 필요합니다.
  • Linux: 윈도 시스템 라이브러리 libxkbcommon-dev libwayland-dev libx11-dev libxcursor-dev libxrandr-dev libxi-dev.
  • macOS: Xcode 명령줄 도구.
  • wgpu가 지원하는 GPU 드라이버(Windows는 DX12, Linux는 Vulkan, macOS는 Metal).

빌드와 실행

git clone https://github.com/geniuskey/ic-studio
cd ic-studio
cargo run --release                     # 데스크톱 앱
cargo run --release -- --demo           # 내장 데모 설계와 함께
cargo run --release -- path/to/project  # 프로젝트 폴더 열기

두 프로그램(ic-studio, ics)을 target/release/에 빌드하려면:

cargo build --release --workspace

실행 옵션

ic-studio [PROJECT_DIR] [--demo] [--cell NAME] [--workspace home|schematic|simulation|layout] [--run]
옵션효과
PROJECT_DIR이 프로젝트 폴더를 엶
--demo데모 프로젝트를 엶 (메모리에만 있으며 저장하기 전까지 디스크에 저장되지 않음)
--cell NAME, -c NAME이 이름의 셀을 엶
--workspace W, -w W이 워크스페이스로 시작
--run시작할 때 셀의 시뮬레이션을 실행

예: cargo run --release -- --demo --cell inv_tiles --workspace layout.

인수 없이 실행하면 Settings에서 Reopen last project가 체크되어 있을 때(기본값) 가장 최근 프로젝트를 다시 열고, 그렇지 않으면 시작 페이지를 표시합니다.

ngspice (선택 사항)

IC Studio에는 자체 내장 시뮬레이터가 있으므로 ngspice가 꼭 필요하지는 않습니다. ngspice를 백엔드로 사용하려면 설치하세요.

  • Windows: 공식 빌드, C:\Spice64\bin\에 설치됨
  • macOS: brew install ngspice
  • Linux: apt install ngspice (또는 배포판의 패키지)

IC Studio는 /opt/homebrew/bin/ngspice, /usr/local/bin/ngspice, /usr/bin/ngspice, C:\Spice64\bin\ngspice.exe를 차례로 찾은 다음 PATH에서 ngspice를 찾습니다. 다른 위치를 쓰려면 File > Settings…(Ctrl+,)를 열고 ngspice 필드에 경로를 입력한 뒤 Detect를 누릅니다. 상태 표시줄과 콘솔에 ngspice를 찾았는지 표시됩니다.

Windows에서 ngspice.exe는 GUI 빌드입니다. 감지나 배치(batch) 시뮬레이션이 실패하면 같은 폴더의 콘솔 바이너리 ngspice_con.exe를 지정하세요.

설정

File > Settings…(Ctrl+,, Tools 메뉴나 액티비티 바 아래쪽의 톱니바퀴로도 열 수 있음):

설정의미
ThemeDark 또는 Light (View > Light Theme / Dark Theme으로도 전환)
UI scale0.75 ~ 1.75
ngspicengspice 실행 파일 경로, Detect 버튼 포함
Interaction마우스 프로필: Virtuoso(기본값) 또는 Conventional (단축키 참고)
StartupReopen last project, 시작 시 Check for updates
AIAI Models…: Design Copilot의 공급자, 모델, API 키
AI agents (MCP)Add to Claude Code는 ics mcp를 Claude Code에 등록하고, Copy MCP config는 다른 클라이언트용 JSON을 복사함 (MCP 서버 참고)

설정과 최근 프로젝트 목록은 앱이 세션 간에 저장합니다.

실제 PDK를 쓰는 예제 프로젝트

스크립트로 오픈 소스 설계를 examples/(git 무시 대상)에 바로 열 수 있는 프로젝트로 내려받습니다.

./scripts/fetch-examples.sh             # macOS / Linux (curl, gunzip)
./scripts/fetch-examples.ps1            # Windows PowerShell
#   --caravel / -Caravel  전체 caravel 칩도 포함 (다운로드 52 MB, 압축 해제 후 278 MB)
#   --force   / -Force    내려받은 파일로 프로젝트를 다시 생성
  • examples/sky130: efabless caravel 라이브러리 caravel_clocking, housekeeping, chip_io (그리고 caravel)를 포함한 SKY130 레이어 세트.
  • examples/gf180: gf180mcu_fd_sc_mcu7t5v0 표준 셀과 gf180mcu_fd_ip_sram 512 x 8 SRAM 매크로를 포함한 GF180MCU 레이어 세트.

File > Open Project… 또는 ic-studio examples/sky130으로 엽니다.

빠른 둘러보기

이 둘러보기에서는 데모 프로젝트로 시뮬레이션, 계층형 레이아웃, 자동 배치 배선, 검증, 포스트 레이아웃 시뮬레이션을 차례로 살펴보고, 마지막으로 작은 회로를 처음부터 만들어 봅니다.

앱 안에서 안내를 받으며 시작하려면 Help > Interactive Tutorial(또는 시작 페이지의 Take the tutorial)을 선택합니다. 가이드 창이 데모의 cmos_inverter로 아홉 단계를 안내합니다. 데모 프로젝트 열기, 회로도 열기, 소자 선택, 시뮬레이션, 파형 측정, 레이아웃 열기, DRC 실행, LVS 실행, 팔레트에서 명령 찾기입니다. 각 단계는 직접 수행하면 저절로 완료되며, Show me는 대신 수행하고, Skip은 다음 단계로 넘어가며, Back은 이전 단계로 돌아갑니다.

데모 프로젝트 열기

cargo run --release -- --demo

또는 시작 페이지에서 Open demo project(File > New Demo Project)를 선택합니다. 데모는 Ctrl+S로 저장하기 전까지 메모리에만 존재합니다. 모든 셀은 work 라이브러리에 있으며 범용 180 nm 테크놀로지를 사용합니다.

데모 갤러리에 모든 셀에 대한 설명과 IC Studio를 다른 사람에게 시연하기 위한 스크립트가 있습니다.

pcells 라이브러리에는 레이아웃이 사용하는 PCell 변형이 들어 있습니다.

1. 회로도와 시뮬레이션

  1. Explorer에서 cmos_inverter를 클릭합니다. 회로도가 열립니다.
  2. F5를 누릅니다. Simulation 워크스페이스가 열리고 DC 스윕과 과도 해석 결과가 표시됩니다.
  3. Signals에서 신호를 체크하거나 해제해 플롯을 바꾸고, Measurements에서 MIN / MAX / FINAL을 확인합니다.
  4. Ctrl+2를 눌러 회로도로 돌아갑니다. 동작점의 노드 전압과 드레인 전류가 회로도에 표시됩니다.

동작점 주석이 표시된 회로도

rc_lowpass(AC: f -3 dB 열에 코너 주파수가 표시됨)와 ota5t(AC: 개루프 이득과 단위 이득 주파수)도 실행해 보세요.

2. 레이아웃과 계층

  1. cmos_inverter를 연 상태에서 Ctrl+4를 누릅니다. 이 레이아웃은 손으로 그린 것입니다.
  2. inv_tiles를 엽니다(Explorer에서, 또는 Ctrl+K를 누르고 inv_tiles 입력). Ctrl+휠로 확대·축소하고, 휠이나 마우스 가운데 버튼으로 이동하며, F를 눌러 화면에 맞춥니다.
  3. 1, 2, 9를 눌러 표시할 계층 깊이를 바꿉니다.
  4. 인스턴스를 더블클릭하면 배치된 셀이 열립니다.

3. 자동 배치 배선

  1. full_adder를 열고 Ctrl+4를 누릅니다. 이 레이아웃은 그린 것이 아니라 회로도에서 생성하고 자동으로 배선한 것입니다.
  2. Ctrl+A와 Delete를 눌러 지웁니다.
  3. Verify > Generate Layout from Schematic을 선택합니다. 28개 트랜지스터가 배치되고 연결해야 할 곳이 플라이라인으로 표시됩니다.
  4. Verify > Route Flylines를 선택합니다. 모든 넷이 메탈로 배선됩니다.

생성 후 배선된 전가산기

4. 검증

  1. nand2를 열고 Layout 워크스페이스로 전환합니다.
  2. 오른쪽 패널에서 Run DRC를 누릅니다. 위반이 없습니다.
  3. Run LVS를 누릅니다. 레이아웃이 회로도와 일치합니다.
  4. cmos_inverter를 열고 LVS를 실행합니다. 의도적으로 넣은 차이가 나열됩니다. 항목을 클릭하면 해당 위치로 확대됩니다.

LVS 결과

5. 포스트 레이아웃 시뮬레이션

  1. Simulation 워크스페이스에서 ring_osc5를 엽니다.
  2. F5를 누르고 과도 해석 플롯에서 발진 주기를 확인합니다.
  3. Include layout parasitics를 체크하고 F5를 다시 누릅니다. 콘솔에 추출된 커패시턴스와 저항이 요약됩니다. 주기를 비교해 보면 추가된 배선 커패시턴스와 저항 때문에 발진기가 느려집니다.

6. 인버터를 처음부터 만들기

  1. Ctrl+N을 누르고 셀 이름을 my_inv로 입력한 뒤 schematic을 체크한 채로 Create를 누릅니다.
  2. P를 누르고 클릭해 PMOS를 배치한 다음, N을 누르고 그 아래를 클릭해 NMOS를 배치합니다. Esc를 누릅니다.
  3. W를 누르고 두 드레인을 연결한 다음 두 게이트를 연결합니다. Esc로 와이어를 끝냅니다.
  4. S를 누르고 PMOS 소스에 전원 심볼을 배치하고, G를 누르고 NMOS 소스에 접지를 배치합니다. 와이어로 연결합니다.
  5. T를 누르고 Net: 필드에 in을 입력한 뒤 게이트 와이어를 클릭하고, out을 입력한 뒤 드레인 와이어를 클릭합니다.
  6. 소스를 추가합니다. V를 누르고 소스를 배치한 뒤 p 핀을 전원 넷에, n 핀을 접지 심볼에 연결하고, 인스펙터에서 DC value를 1.8로 설정합니다. in용 두 번째 소스를 배치하고 Transient를 PULSE(0 1.8 1n 100p 100p 2n 4n)로 설정합니다.
  7. Ctrl+3을 누르고 Transient를 켠 뒤(step 10p, stop 10n) F5를 누릅니다.
  8. Verify > Generate Layout from Schematic을 선택합니다. 두 트랜지스터가 웰 탭과 함께 PCell로 배치되고, 연결해야 할 곳이 플라이라인으로 표시됩니다.
  9. Verify > Route Flylines를 선택합니다. 라우터가 넷을 메탈로 배선합니다.
  10. 오른쪽 패널에서 DRC와 LVS를 실행한 뒤 Ctrl+S로 저장합니다.

생성기와 라우터의 동작, 소자 매칭 방법은 회로도 기반 레이아웃을 참고하세요.

7. 명령줄

같은 프로젝트를 터미널에서 검사할 수 있습니다.

ics new demo --template demo
ics sim demo ota5t
ics drc demo nand2
ics lvs demo nand2

명령줄을 참고하세요.

데모 갤러리

아래의 모든 예제는 IC Studio에 기본으로 포함되어 있습니다. 다음 명령으로 한꺼번에 엽니다.

cargo run --release -- --demo

또는 시작 페이지에서 Open demo project를 선택합니다. 데모는 범용 180 nm 테크놀로지를 사용하며 Ctrl+S로 저장하기 전까지 메모리에만 존재합니다. 특정 셀로 바로 이동하려면 --cell <name> --workspace <schematic|simulation|layout>을 덧붙입니다.

예제 프로젝트

같은 설계가 주제별로 나뉜 작은 프로젝트로도 제공됩니다. 시작 페이지의 Examples 카드나 File > Open Example로 엽니다(데모처럼 메모리에서 열림). 프로젝트 폴더로는 Documents/IC Studio/Examples에 있습니다. 설치 프로그램이 이 폴더에 쓰며, 설치나 업데이트 후 앱을 처음 시작할 때도 앱이 씁니다. 이미 있는 예제는 그대로 두므로 수정한 내용은 업데이트 후에도 유지됩니다. **File > Save Examples to Folder…**로 다른 위치에 쓸 수 있고, 명령줄에서는 ics examples <DIR>로 씁니다(--force가 없으면 기존 예제는 유지). ics examples는 목록을 표시합니다.

주제셀
getting_startedcmos_inverter, rc_lowpass, diode_clipper, devices
analogcurrent_mirror, ota5t, ota2s
digitalnand2, nor2, ring_osc5, full_adder
memory_and_pixelssram6t, sram_array, aps3t, pixel_array
hierarchyinv_chain, inv_array, inv_tiles

각 주제에는 레이아웃이 배치하는 셀도 들어 있습니다. 예를 들어 hierarchy에는 cmos_inverter가, pcells에는 PCell이 있습니다.

이 페이지의 후반부에는 청중 앞에서 IC Studio를 시연하기 위한 단계별 데모 스크립트가 있습니다.

하이라이트

전체 데모 셀

셀보여 주는 내용
full_adder자동 배치 배선된 28T 미러 전가산기, 모든 입력 조합에 대한 과도 해석
ota2scommon-centroid 매칭을 적용해 자동 P&R한 2단 OTA, AC 개루프 이득 약 80 dB
cmos_inverter손으로 그린 레이아웃의 인버터, LVS가 의도적인 차이(PMOS W, 부하 커패시터)를 보고
rc_lowpassRC 저역 통과 필터(fc 약 159 kHz): OP, AC, 과도 해석
diode_clipper저항과 션트 다이오드 클리퍼: 과도 해석과 DC 스윕
nand22입력 NAND: 회로도와 배선된 PCell 레이아웃, DRC와 LVS 통과
nor22입력 NOR: 회로도와 배선된 PCell 레이아웃, DRC와 LVS 통과
ring_osc5완전히 배선된 5단 링 발진기, 레이아웃 기생 성분을 넣으면 눈에 띄게 느려짐
current_mirror20 µA 기준 전류의 NMOS 전류 미러: 출력의 DC 스윕
ota5t5 트랜지스터 OTA: AC 개루프 이득 약 42 dB
sram6tDRC와 LVS를 통과한 6T SRAM 비트 셀: 과도 해석으로 쓰기와 유지
sram_arraysram6t의 8 × 8 어레이
aps3tDRC와 LVS를 통과한 3T 이미지 센서 픽셀: 과도 해석으로 리셋과 적분
pixel_arrayaps3t의 8 × 8 어레이
inv_chain배치된 cmos_inverter 인스턴스 4개
inv_array인버터 16 × 8 어레이
inv_tilesinv_array의 8 × 8 어레이: 인버터 8,192개, 2단계 계층
devices모든 PCell의 인스턴스 각 1개

회로도와 레이아웃이 모두 있는 셀(full_adder, ota2s, nand2, nor2, ring_osc5, current_mirror, ota5t, sram6t, aps3t)은 전체 플로를 실행할 수 있습니다. 시뮬레이션, 레이아웃 열기, DRC와 LVS 실행, 기생 성분을 포함한 재시뮬레이션입니다.

데모 스크립트

각 스크립트는 청중 앞에서 그대로 진행할 수 있는 순서이며, 단계마다 예상되는 결과를 적어 두었습니다. 파란 상자는 말할 내용을 제안합니다.

1. 5분 둘러보기

회로 하나로 전체 루프를 보여 줍니다. 회로도, 시뮬레이션, 자동 레이아웃, 검증, 포스트 레이아웃 시뮬레이션입니다.

  1. 전가산기 회로도로 앱을 시작합니다.

    cargo run --release -- --demo --cell full_adder --workspace schematic
    
  2. F5를 누릅니다. Simulation 워크스페이스가 열리고 과도 해석 결과가 표시됩니다. a, b, ci가 여덟 가지 조합을 모두 거치고, s와 co가 진리표대로 따라갑니다.

  3. Ctrl+4를 눌러 레이아웃을 엽니다. Ctrl+A로 모두 선택하고 Delete를 누릅니다. 레이아웃이 비워집니다.

  4. Verify > Generate Layout from Schematic을 선택합니다. 28개 트랜지스터가 웰 탭과 함께 NMOS 행 위의 PMOS 행에 PCell로 나타나고, 아직 연결해야 할 모든 곳이 점선 플라이라인으로 표시됩니다.

  5. Verify > Route Flylines를 선택합니다. 플라이라인이 metal1~metal3 와이어와 비아로 바뀌고, 콘솔에 배선된 넷이 보고됩니다.

  6. 오른쪽 패널에서 Run DRC(위반 없음), 이어서 Run LVS(레이아웃이 회로도와 일치)를 누릅니다.

  7. Ctrl+3을 누르고 Include layout parasitics를 체크한 뒤 F5를 누릅니다. 콘솔에 추출된 커패시턴스와 저항이 요약되고, 파형에 배선 지연이 반영됩니다.

멘트: “여기 있는 것 중 손으로 그린 것은 하나도 없습니다. 레이아웃은 회로도에서 만들어지고, 라우터가 DRC를 통과하도록 배선하며, LVS가 같은 회로임을 증명하고, 기생 성분은 곧바로 시뮬레이션으로 돌아갑니다. 모두 하나의 데이터베이스 위에서요.”

2. 자동 배치 배선 단계별 시연

레이아웃에 관심이 많은 청중을 위해 천천히 진행합니다. 전가산기나 OTA를 사용합니다.

단계할 일예상 결과
1Layout 워크스페이스에서 full_adder 열기완성되어 배선된 레이아웃
2Ctrl+A, Delete빈 레이아웃
3Verify > Generate Layout from Schematic소자 배치, 넷이 허용하는 곳에서 소스 / 드레인 열 공유, 플라이라인 표시
4마우스로 소자 이동플라이라인이 따라옴: 회로도와의 연결 고리는 인스턴스 이름
5Ctrl+Z소자가 원래 위치로 돌아감
6Verify > Route Flylines모든 넷 배선, 콘솔에 넷, 연결, 비아, rip-up 수 표시
7레이아웃에서 소자 클릭 후 Ctrl+2회로도에서 같은 소자가 선택됨(크로스 프로빙)
8Run DRC, Run LVS위반 없음, 레이아웃이 회로도와 일치

배선 전 플라이라인이 표시된 배치

멘트: “라우터는 rip-up and reroute 방식의 미로 라우터입니다. 그리드가 소자 단자에 정렬되어 있어서 그리는 결과가 구조적으로 DRC를 통과하고, LVS가 기준으로 삼을 수 있도록 이름 있는 넷에 레이블을 붙입니다.”

3. 아날로그 매칭

생성기가 연결성뿐 아니라 아날로그 구조도 이해한다는 것을 보여 줍니다.

  1. Layout 워크스페이스에서 ota2s를 열고 Ctrl+A, Delete.
  2. Verify > Generate Layout from Schematic. 콘솔에 매칭 그룹이 보고됩니다. 예를 들어 차동쌍과 미러가 양 끝에 더미 핑거를 두고 ABBA로 배치됩니다.
  3. Verify > Route Flylines 후 Run LVS. LVS는 단위 핑거를 다시 회로도의 일곱 소자로 병합하고 더미는 무시합니다.
  4. Ctrl+3과 F5를 누릅니다. AC 플롯에 약 80 dB의 개루프 이득이 표시됩니다.

멘트: “차동쌍과 전류 미러는 회로도에서 자동으로 감지됩니다. 아날로그 레이아웃 엔지니어가 하듯이 단위 핑거로 나뉘어 common-centroid 순서로 배치되고, LVS는 여전히 트랜지스터 일곱 개로 인식합니다.”

4. 포스트 레이아웃 효과

  1. Simulation 워크스페이스에서 ring_osc5를 열고 F5를 누릅니다. 발진 주기를 확인합니다.
  2. Include layout parasitics를 체크하고 F5를 다시 누릅니다. 주기가 길어집니다. 레이아웃에서 추출한 배선 커패시턴스와 저항이 링 발진기를 느리게 합니다.

5. 규모

  1. Layout 워크스페이스에서 inv_tiles를 엽니다. 인버터 8,192개입니다.
  2. Ctrl+휠로 확대·축소하고, 휠이나 마우스 가운데 버튼으로 이동하며, F로 화면에 맞춥니다.
  3. 1, 2, 9를 눌러 표시할 계층 깊이를 바꾸고, 인스턴스를 더블클릭해 안으로 들어갑니다.

6. 명령줄과 CI

창 없이 SPICE 넷리스트에서 검증된 GDS까지 같은 플로를 진행합니다. 다음을 ota.cir로 저장합니다.

* two-stage OTA
M1 x inp tail 0 nmos w=4u l=500n
M2 o1 inn tail 0 nmos w=4u l=500n
M3 x x vdd vdd pmos w=8u l=500n
M4 o1 x vdd vdd pmos w=8u l=500n
M5 tail vb 0 0 nmos w=4u l=1u
M6 out o1 vdd vdd pmos w=16u l=500n
M7 out vb 0 0 nmos w=4u l=1u
VDD vdd 0 dc 1.8
VINP inp 0 dc 0.9 ac 1
VINN inn 0 dc 0.9
VB vb 0 dc 0.65
.ac dec 20 1k 10g

그다음:

ics new demo                         # 데모 셀이 들어 있는 프로젝트
ics schematic demo my_ota ota.cir    # 넷리스트 -> 회로도와 시뮬레이션 설정
ics route demo my_ota --place        # 배치, 배선, 저장
ics drc demo my_ota                  # 위반 0개
ics lvs demo my_ota                  # 레이아웃이 회로도와 일치
ics sim demo my_ota --parasitics     # 포스트 레이아웃 AC
ics gds demo my_ota -o my_ota.gds    # 스트림 아웃

모든 명령은 실패하면 0이 아닌 코드로 종료하므로 이 순서를 그대로 CI 작업에 넣을 수 있습니다. 명령줄을 참고하세요.

7. 지켜보는 동안 AI 에이전트가 설계하기

Claude Code 같은 에이전트에 MCP 서버를 등록한 상태에서 앱을 시작하고 (cargo run --release -- --demo) 에이전트에게 다음과 같이 요청합니다.

열려 있는 IC Studio 프로젝트에서 이 넷리스트(ota.cir 붙여넣기)로 셀 my_ota를 만들고, 레이아웃을 생성해 배선한 뒤 DRC와 LVS를 실행하고, AC 시뮬레이션을 해서 개루프 이득을 알려 줘.

상태 표시줄에 MCP live가 표시됩니다. 창에 회로도가 나타나고, 이어서 배치된 소자, 배선된 와이어, DRC와 LVS 결과, AC 플롯이 차례로 나타나며, 각 단계는 콘솔에 MCP · <tool> ...로 기록됩니다. 모든 레이아웃 단계는 Ctrl+Z로 되돌릴 수 있습니다.

라이브 모드에서 회로도를 작성하는 에이전트

멘트: “에이전트는 메뉴와 똑같은 명령을 사용합니다. 가져올 파일을 생성하는 것이 아니라 여러분의 세션 안에서 직접 작업하며, 언제든지 이어받을 수 있습니다.”

프로젝트, 라이브러리, 셀

프로젝트는 라이브러리를, 라이브러리는 셀을 담고, 각 셀에는 회로도, 시뮬레이션, 레이아웃 뷰가 있음

창 구성

프로젝트 홈

  • 메뉴 바(아래 메뉴 항목 참고)에는 project > library > cell 경로 표시가 있습니다. 셀 이름 뒤의 점은 저장하지 않은 변경 사항이 있다는 뜻입니다. 오른쪽의 **Search commands…**는 명령 팔레트를 엽니다.
  • 액티비티 바(맨 왼쪽): Home, Schematic, Simulation, Layout의 네 워크스페이스 (Ctrl+1 ~ Ctrl+4)와 아래쪽의 Settings 톱니바퀴.
  • Explorer: 라이브러리, 셀, 그리고 각 셀의 뷰.
  • 셀 탭: 편집기 위에 표시됩니다. Ctrl+W로 활성 탭을 닫습니다.
  • 하단 패널(Ctrl+J): Console(로그), CIW(SKILL 프롬프트), Problems(회로도 검사기 결과), Netlist(활성 셀의 SPICE 넷리스트).
  • 메뉴: File, Edit, View, Simulation, Verify, Tools(디자인 코파일럿, 최적화기, 계산기, 스윕, 결과와 브라우저, 생성기, DRC 룰 디자이너, 스트림 레이어 맵, 더미 필, SKILL. 도구 참고), Help(인터랙티브 튜토리얼, 사용자 가이드, 단축키, 업데이트 확인). Layout 워크스페이스에서는 Create와 Options 메뉴가 추가됩니다.
  • 도구 창은 메인 창 안에 도킹되어 열립니다. 창의 닫기 버튼 왼쪽에 있는 팝아웃 버튼을 누르면 별도의 OS 창으로 분리되고, Dock을 누르면 다시 돌아옵니다. 선택은 도구별로 기억됩니다.
  • 상태 표시줄: 워크스페이스, 확대 배율, 선택 항목, 테크놀로지 이름, ngspice 상태, 그리고 에이전트가 연결되어 있는 동안 “MCP live”.

프로젝트 만들기와 열기

시작 페이지(열린 프로젝트가 없을 때 표시)에는 네 개의 카드 Take the tutorial (빠른 둘러보기 참고), Open demo project, New project…, **Open project…**가 있고, 그 아래에 예제 프로젝트 주제별 카드와 최근 프로젝트 목록이 있습니다.

  • File > New Project…: 이름(영문자, 숫자, _, -)과 상위 폴더를 입력합니다. 프로젝트는 <folder>/<name>에 범용 180 nm 테크놀로지로 생성됩니다. 데모 옵션을 체크하면 데모 설계로 시작합니다.
  • File > New Demo Project: 데모 프로젝트를 메모리에 만듭니다. File > Save로 폴더를 선택합니다.
  • File > Open Project…(Ctrl+O): 프로젝트 폴더(ic-studio.json이 있는 폴더)를 선택합니다. File > Open Recent에 최근 프로젝트가 나열됩니다.
  • File > Save(Ctrl+S)와 Save As…(Ctrl+Shift+S). 비어 있지도 않고 기존 프로젝트도 아닌 폴더에 저장하면 프로젝트 이름의 하위 폴더가 만들어집니다.
  • File > Close Project. 저장하지 않은 변경 사항이 있는 상태에서 닫거나, 종료하거나, 다른 프로젝트를 열면 Save, Discard, Cancel 중 하나를 묻습니다.

셀과 뷰

  • 새 셀(Ctrl+N, Explorer 헤더의 +, 또는 Home 페이지의 + New cell): 라이브러리, 셀 이름, 선택적 설명, 만들 뷰(schematic, layout)를 지정합니다.
  • Explorer에서 셀을 클릭하면 열립니다. 펼치면 schematic, simulation, layout 뷰가 보입니다. 없는 뷰는 흐리게 + create로 표시되며, 클릭하면 빈 뷰가 생성됩니다.
  • 셀을 오른쪽 클릭하면 Open schematic, Open layout, Rename…, **Delete…**가 있습니다. 삭제한 셀의 파일은 프로젝트를 저장할 때 디스크에서 제거됩니다.
  • Home 워크스페이스는 프로젝트 개요를 보여 줍니다. 셀마다 썸네일 카드가 있고, + New cell, Import GDS / OASIS…, Export library GDS… 버튼이 있습니다.

명령 팔레트

Ctrl+K 또는 Ctrl+Shift+P로 팔레트를 엽니다. 단어를 입력해 필터링하고(모든 단어가 일치해야 함), 화살표 키와 Enter로 명령을 실행하며, Esc로 닫습니다. 모든 메뉴 동작과 함께 셀마다 Open <lib>/<cell> · schematic 및 · layout 항목이 들어 있어 셀 사이를 가장 빠르게 이동하는 방법입니다.

디스크 저장 형식

프로젝트는 버전 관리와 잘 맞는 일반 JSON 파일로 이루어진 폴더입니다.

myproj/
  ic-studio.json          프로젝트 매니페스트
  tech.json               테크놀로지: 레이어, 룰, DRC 덱, 계수
  work/                   라이브러리별 폴더
    cmos_inverter/        셀별 폴더
      cell.json           셀 메타데이터 (이름, 설명)
      schematic.json      회로도 뷰 (있는 경우)
      layout.json         레이아웃 뷰 (있는 경우)
      sim.json            시뮬레이션 설정

GDS에서 가져온 라이브러리는 다르게 저장되어(라이브러리 폴더 안의 GDS 파일과 library.json) 대용량 가져오기도 간결하게 유지됩니다.

가져오기와 내보내기

작업메뉴
GDSII 또는 OASIS 파일을 새 라이브러리로 가져오기File > Import > GDSII / OASIS…
KLayout 레이어 속성 파일을 테크놀로지로 가져오기File > Import > KLayout layer properties…
테크놀로지를 PDK 파일로 교체File > Import > PDK…
활성 셀의 SPICE 넷리스트 내보내기File > Export > SPICE netlist…
활성 셀과 그 셀이 배치하는 모든 것을 GDSII / OASIS로 내보내기File > Export > Cell GDSII… / Cell OASIS…
프로젝트의 모든 레이아웃을 하나의 GDSII / OASIS 파일로 내보내기File > Export > Library GDSII… / Library OASIS…
LEF 매크로 / DEF 배치 가져오기File > Import > LEF abstracts… / DEF placement…
활성 셀의 LEF abstract / DEF 내보내기File > Export > Cell LEF abstract… / Cell DEF…

GDS / OASIS 가져오기는 계층을 유지합니다. 테크놀로지에 없는 레이어는 테크놀로지에 추가되며 콘솔에 보고됩니다. 가져오기가 끝나면 최상위 셀이 Layout 워크스페이스에서 열립니다. .lyp와 PDK 가져오기는 테크놀로지를, abstract와 배치는 LEF와 DEF를 참고하세요.

회로도 편집기

셀의 회로도 뷰를 열거나, 셀이 열린 상태에서 Ctrl+2를 눌러 편집합니다.

회로도 편집기

  • 왼쪽 패널: Tools(Select, Wire, Label), 프리미티브마다 타일과 단축키 문자가 표시되는 Device Library, 그리고 간단한 단축키 안내.
  • 툴바: 현재 도구, 실행 취소 / 다시 실행, 회전, 미러, 복제, 화면 맞춤, Grid 및 Annotate OP 체크박스, Simulate(F5).
  • 오른쪽 패널: 속성 인스펙터.

회로도 좌표는 정수 그리드 점입니다. 키 입력은 마우스가 캔버스 위에 있고 텍스트 필드에 포커스가 없을 때만 캔버스에 적용됩니다.

소자 배치, 와이어 그리기, 넷 하이라이트, 동작점 표시

소자

키소자이름 접두사핀기본 파라미터
R저항 (Resistor)Rp, nr=1k
C커패시터 (Capacitor)Cp, nc=1p
L인덕터 (Inductor)Lp, nl=1n
V전압원 (Voltage Source)Vp, ndc=1
I전류원 (Current Source)Ip, ndc=1m
D다이오드 (Diode)Da, kmodel=dmod
NNMOSMd, g, s, bmodel=nmos w=1u l=180n m=1
PPMOSMd, g, s, bmodel=pmos w=2u l=180n m=1
G접지 (Ground)GNDgnd(넷 0)
S전원 넷 (Supply Net)VDDnetnet=vdd

소자 배치

  1. 소자 키(예: N)를 누르거나 Device Library에서 해당 타일을 클릭합니다.
  2. 커서를 따라 미리보기가 표시됩니다. 배치하기 전에 Space로 회전하거나 X로 미러할 수 있습니다.
  3. 클릭해 배치합니다. 소자는 그리드에 스냅되고, 비어 있는 다음 이름(M1, M2, …)을 받으며 선택된 상태가 됩니다. 도구가 계속 활성화되어 있으므로 클릭할 때마다 복사본이 추가로 배치됩니다.
  4. Esc를 누르거나 오른쪽 클릭하면 Select로 돌아갑니다.

와이어

  1. W를 누릅니다(또는 Wire 선택).
  2. 시작점을 클릭합니다. 보통 핀에서 시작합니다.
  3. 다음 점을 클릭합니다. 클릭할 때마다 수평 먼저인 L자형 세그먼트 한 쌍이 추가됩니다. /를 누르면 수직 먼저로 꺾입니다.
  4. 핀, 와이어 끝점 또는 다른 와이어의 중간을 클릭하면 와이어가 자동으로 끝납니다. 그렇지 않으면 계속 클릭하고, 더블 클릭, 오른쪽 클릭 또는 Esc로 끝냅니다.

연결은 실시간으로 반영됩니다. 연결되지 않은 핀은 작은 사각형으로 표시되고, 세 개 이상의 연결이 만나는 곳에는 접합점(junction dot)이 나타납니다. 와이어에 마우스를 올리거나 선택하면 넷 전체가 하이라이트됩니다.

넷 레이블과 넷 이름

  1. T를 누릅니다(또는 Label 선택). 왼쪽 패널에 Net: 필드가 나타납니다(기본값 net1).
  2. 이름을 입력하고 핀이나 와이어를 클릭해 레이블을 붙입니다. 레이블은 정확히 해당 그리드 점에서만 연결됩니다.
  3. 배치할 때마다 끝의 숫자가 1씩 증가하므로(net1, net2, …) 레이블로 버스를 만들 때 편리합니다.

이름이 같은 레이블은 같은 넷이므로, 와이어 없이 레이블로 회로도의 여러 부분을 연결할 수 있습니다. 넷 이름은 다음 순서로 정해집니다. Ground 심볼(넷 0), Supply Net 심볼의 net 파라미터(비워 두면 vdd), 넷 레이블, 그리고 자동 이름(net1, net2, …).

참고:

  • 넷 0을 만드는 것은 Ground 심볼뿐입니다. gnd라는 레이블은 일반 넷입니다.
  • Supply Net 심볼은 넷에 이름만 붙입니다. 전원을 공급하려면 그 넷에 전압원을 연결하십시오.
  • 한 넷에 서로 다른 두 이름이 붙으면 다음 경고가 표시됩니다. “Net names ‘a’ and ‘b’ are shorted together”.

선택과 편집

동작방법
객체 하나 선택클릭(레이블이 와이어보다, 와이어가 소자보다 우선)
선택에 추가 또는 제거Shift+클릭 또는 Ctrl+클릭
박스 선택빈 공간에서 드래그(완전히 안에 들어간 객체를 선택, Shift는 추가)
모두 선택Ctrl+A
이동선택한 객체를 드래그. 연결된 와이어는 이동한 핀을 따라 늘어남
회전 / 미러Space / X 또는 툴바 버튼
복제Ctrl+D(그리드 두 점만큼 떨어진 위치에 새 이름으로 복사)
삭제Del 또는 Backspace
실행 취소 / 다시 실행Ctrl+Z / Ctrl+Shift+Z 또는 Ctrl+Y
화면에 맞춤F
취소Esc: 그리던 와이어를 취소하고, 다음엔 Select로 돌아가고, 그다음엔 선택을 해제

속성 인스펙터

소자 하나를 선택하면 오른쪽 패널에서 편집할 수 있습니다. 값은 넷리스트에 들어가는 그대로의 SPICE 문자열이며, SPICE 배율 접미사(10k, 2.2p, 180n, 1meg)를 사용합니다.

  • Name: 인스턴스 이름. 고유해야 하며, 소자와 레이아웃 인스턴스를 연결하는 역할도 합니다.
  • 소자 필드: Resistance, Capacitance, Inductance / L, Model, Width, Multiplier, Net name(전원).
  • 소스: DC value, AC magnitude(AC 해석용, 예: 1), Transient (예: PULSE(0 1 0 1n 1n 5n 10n), SIN(...)과 PWL(...)도 사용 가능).
  • Orientation, Position, 그리고 핀별 넷을 보여 주는 Connections 목록.

아무것도 선택하지 않으면 인스펙터에 통계(인스턴스, 와이어, 넷), 넷 목록과 넷별 핀 수, 그리고 Warnings(연결되지 않은 핀, 중복 이름, 단락된 넷 이름)가 표시됩니다.

하단 패널의 Problems 탭은 편집하는 동안 활성 셀에 회로도 검사를 실행합니다. 접지 누락, 잘못되었거나 중복된 이름, 값 누락 또는 잘못된 값, 단락된 소자, 전압원 루프, 플로팅 넷, 끊어진 와이어 등을 찾아냅니다. 항목을 클릭하면 해당 소자가 선택됩니다. Tools > Check Schematic은 필요할 때 검사를 실행하고, File > Check and Save는 오류가 없을 때만 저장합니다. 모든 검사 항목은 Check Schematic을 참고하십시오.

넷리스트

하단 패널의 Netlist 탭은 활성 셀의 SPICE 덱을 보여 주며, 편집하면 바로 갱신됩니다. **File > Export > SPICE netlist…**로 내보낼 수 있습니다. 넷리스터는 다음을 출력합니다.

  • R1 p n value, C..., L...
  • V1 p n DC <dc> [AC <ac>] [<tran>], 전류원도 마찬가지
  • D1 a k dmod
  • M1 d g s b <model> w=... l=... [m=...]. 연결되지 않은 벌크 핀은 소스에 연결됩니다.
  • 사용된 경우 기본 level-1 모델 nmos, pmos, dmod. PDK 모델 라이브러리가 있으면 MOS 모델은 PDK 소자로 매핑되고(서브서킷 소자는 X 접두사), 라이브러리는 선택한 코너로 로드됩니다.

동작점 표시

동작점 시뮬레이션 후 Annotate OP(기본으로 켜짐)를 사용하면 각 노드 전압이 회로도에 태그로 표시되고, 각 트랜지스터와 다이오드 아래에 전류 id=...가 표시됩니다.

동작점 표시

크로스 프로빙

셀에 회로도와 레이아웃이 모두 있으면, 한 편집기에서 소자를 선택할 때 다른 편집기에서 이름이 같은 소자가 함께 선택됩니다. 매칭된 소자의 단위 핑거(M1.1, M1.2, …)는 M1에 대응됩니다.

시뮬레이션

Simulation 워크스페이스(Ctrl+3)에서는 활성 셀의 회로도에 대한 해석을 설정하고 실행하며 결과를 확인합니다.

시뮬레이션

시뮬레이션 실행

  1. 회로도가 있는 셀을 열고 Simulation 워크스페이스로 전환합니다.
  2. Analyses에서 실행할 해석을 체크하고 각 필드를 입력합니다.
  3. Run Simulation, F5 또는 Ctrl+Enter를 누릅니다(Simulation > Run 메뉴나 회로도 툴바의 Simulate도 가능).

시뮬레이션은 백그라운드에서 실행됩니다. 다른 워크스페이스에서 시작하면 Simulation 워크스페이스로 전환됩니다. 오류는 빨간색 Simulation error 상자와 콘솔에 표시됩니다.

설정 패널

시뮬레이터

필드의미
BackendBuilt-in (ics-sim)(기본값), ngspice, Auto (built-in, ngspice when needed)(백엔드 참고)
CornerPDK 모델 라이브러리의 모델 코너. 테크놀로지의 모델에 코너가 있을 때만 표시(기본값: 라이브러리의 기본 코너)
Temperature-55 ~ 200 °C, 기본값 27(.temp로 출력). 내장 엔진은 이 온도에 맞춰 모델을 스케일링
Include layout parasitics셀의 레이아웃에서 추출한 기생 성분을 추가(아래 참고). 셀에 레이아웃이 없으면 비활성화

백엔드 아래 줄에는 ngspice를 찾았는지, 또는 테크놀로지에 모델 라이브러리가 있어 PDK 모델에 ngspice가 필요한지가 표시됩니다. Auto에서는 엔진이 전환할 ngspice가 무엇인지 보여 줍니다. ngspice 경로는 Settings에서 지정합니다(설치 참고).

해석

해석필드(기본값)비고
Operating Point없음(기본으로 켜짐)회로도에 결과 표시
DC SweepSource, Start 0, Stop 1.8, Step 10mSource는 회로도의 임의의 V 또는 I 소스
AC Small-SignalStart freq 1, Stop freq 10g, Points/dec 20디케이드 스윕. 소스에 AC magnitude를 지정
TransientStep 10p, Stop time 20n소스에 Transient 파형을 지정
NoiseOutput node out, Input source, Start freq 1, Stop freq 1g, Points/dec 10.noise v(out) <source> dec ...로 출력. 입력 소스는 회로도의 소스 중에서 선택

값이 잘못된 필드는 빨간색으로 바뀌고, 검증 메시지가 카드 아래에 표시됩니다.

추가 SPICE 라인

이 접이식 섹션에 입력한 라인은 해석 구문 앞에 그대로 덱에 추가됩니다. 예: .options reltol=1e-4. Show netlist를 누르면 생성된 덱이 결과 옆에 표시됩니다.

설정(백엔드, 코너, 해석, 온도, 기생 성분 옵션, 추가 라인, 스윕 설정)은 셀마다 sim.json에 저장됩니다.

결과

해석마다 탭이 따로 있습니다. Operating Point, DC Sweep, AC, Transient, Noise. 탭 바에는 백엔드와 실행 시간이 표시되며, CSV는 현재 데이터셋을 내보냅니다(AC 값은 name_re / name_im 열로 출력).

파형

  • Signals(오른쪽): 플롯할 신호를 체크합니다. Filter로 목록을 좁히고, all V는 모든 노드 전압을 선택하며, clear는 선택을 해제합니다. 기본적으로 v(out), v(in), v(vout), v(vin)이 있으면 표시하고, 없으면 처음 세 개의 전압을 표시합니다. 선택은 해석별로 실행 간에 유지됩니다. Waveform Calculator에서 플롯한 파형은 수식을 이름으로 한 신호로 여기에 나타납니다.
  • Compare runs(신호 목록 위): 셀의 이전 실행 결과입니다. 하나를 체크하면 그 신호가 같은 플롯에 점선으로 그려지고 측정 목록에도 표시됩니다(Results Browser 참고).
  • Plot: DC와 과도 해석 결과는 하나의 플롯을 공유합니다. AC 결과는 보드(Bode) 플롯 한 쌍으로, 로그 주파수 축 위에 **Magnitude (dB)**와 **Phase (°)**가 위아래로 놓이며 줌과 커서가 연동됩니다. 트레이스에 마우스를 올리면 값을 읽을 수 있습니다. 스크롤로 줌, 드래그로 이동, 더블 클릭으로 초기화합니다.
  • Noise: 출력 잡음 밀도 onoise_spectrum과 입력 환산 잡음 밀도 inoise_spectrum (V/√Hz)을 로그 축에 표시합니다. 내장 엔진은 저항과 MOS 채널의 열잡음, 다이오드 산탄 잡음, kf / af 플리커 잡음으로 이를 계산하고, 적분한 출력 잡음(스윕 구간의 V rms)을 로그에 기록합니다.
  • Measurements(아래쪽): 플롯한 신호마다 한 행씩 표시합니다.
    • DC와 과도 해석: MIN, MAX, PEAK-PEAK, FINAL.
    • AC: GAIN @ fstart, PEAK, f -3 dB, UNITY GAIN f.

RC 저역 통과 필터의 AC 해석

동작점

Operating Point 탭에는 노드 전압과 브랜치 전류, 그리고 소자별로 다음 값이 표시됩니다.

  • MOS: 동작 영역(cutoff, saturation, triode), id, vgs, vds, vth, gm, gds
  • 다이오드: vd, id, gd
  • 저항: v, i, p

소자 상세 값은 내장 엔진에서만 제공됩니다. 노드 전압은 회로도에도 표시됩니다 (회로도 참고).

예제: RC 저역 통과 필터의 과도 해석

인버터 과도 해석: 입력 스텝, 출력 에지, 측정된 지연

  1. ic-studio --demo --cell rc_lowpass --workspace simulation을 실행합니다.
  2. 이 셀에는 Operating Point, AC, Transient가 설정되어 있습니다. F5를 누릅니다.
  3. AC 탭을 엽니다. v(out)의 f -3 dB 열에 약 159 kHz가 표시됩니다.
  4. Transient 탭을 열어 입력 펄스와 필터링된 출력을 확인합니다.
  5. 입력을 바꾸려면 회로도(Ctrl+2)로 가서 소스를 선택하고 Transient를 수정한 다음 다시 F5를 누릅니다.

측정, 코너, 몬테카를로

  • Tools > Waveform Calculator는 bandwidth(v(out)/v(in)), risetime(v(out)), phasemargin(v(out)) 같은 수식을 결과에 대해 계산하고 파생 파형을 플롯합니다. Waveform Calculator를 참고하십시오.
  • Tools > Corner / Sweep Manager는 모델 코너, 온도, 파라미터 값, 몬테카를로 변동에 대해 설정을 병렬로 실행합니다. 한계값이 있는 스펙은 모든 점에서 검사되며, 통계, 수율, 겹친 파형, HTML 데이터시트를 제공합니다. Corner / Sweep Manager를 참고하십시오.
  • Tools > Results Browser는 이전 실행 결과를 보관해 비교할 수 있게 합니다. 예를 들어 회로도 시뮬레이션과 포스트 레이아웃 시뮬레이션을 비교할 수 있습니다.

설정 패널 상단의 Sweep…, Monte Carlo…, Optimizer… 버튼은 활성 셀에 대해 이 도구들을 엽니다.

Monte Carlo 창

공칭 파형 주위로 퍼지는 몬테카를로 실행과 함께 쌓여 가는 측정값 히스토그램

Simulation > Monte Carlo…(Tools 메뉴와 명령 팔레트에도 있음)는 내장 엔진에서 소자 변동을 무작위로 주며 셀의 설정을 여러 번 실행하고, 계산기 측정값의 통계를 보여 줍니다. 실행마다 다음을 뽑습니다.

  • 극성이 같은 모든 MOS 소자가 공유하는 공정(process) 변동: 문턱 전압(Vto sigma, V, 기본값 20m)과 상대 트랜스컨덕턴스(kp sigma, 기본값 0.03).
  • 게이트 면적에 따라 스케일되는 소자별 미스매치(Pelgrom): σ(ΔVth) = Avt / √(W L), σ(Δβ/β) = Abeta / √(W L). Avt 기본값은 5n(5 mV·µm), Abeta 기본값은 10n(1 %·µm)입니다.
  1. Runs(기본값 100)와 Seed를 설정합니다(같은 시드에서는 실행 결과가 재현됩니다).
  2. + Measurement로 측정을 추가합니다. 해석(op, dc, ac, tran, noise)과 스칼라 결과를 내는 계산기 수식을 지정합니다. 예: op: v(out), ac: bandwidth(v(out)).
  3. Run을 누릅니다. 진행 막대가 샘플 수를 세며, Stop을 누르면 현재 샘플이 끝난 뒤 멈추고 그때까지의 결과를 유지합니다.
  4. 표에는 측정마다 n, 평균, 시그마, 최솟값, 최댓값, 실패한 실행이 표시됩니다. 하나를 선택하면 히스토그램을 볼 수 있습니다.

설정은 셀과 함께(sim.json) 저장됩니다. Monte Carlo는 내장 엔진의 모델을 변동시키므로 PDK 모델 라이브러리를 로드하는 덱은 거부됩니다. 이 경우 ngspice와 PDK 자체의 통계 코너를 사용하십시오. Corner / Sweep Manager에는 어떤 백엔드에서도 동작하는, 인스턴스 파라미터와 설계 변수에 대한 별도의 몬테카를로가 있습니다. 명령줄에서는 ics mc <project> <cell> --measure op:v(out)을 사용합니다(명령줄 참고).

포스트 레이아웃 시뮬레이션

Include layout parasitics를 체크하고 셀에 레이아웃이 있으면, IC Studio는 레이아웃을 추출하고 LVS로 넷을 회로도와 매칭한 뒤 다음을 덱에 추가합니다.

  • 기판에 대한 배선 커패시턴스(Cpar_*),
  • 넷 사이의 측면 및 오버랩 결합 커패시턴스(Cc_*),
  • 그려진 확산 영역에서 구한 MOS 드레인 / 소스 접합 크기(ad as pd ps),
  • 배선, 비아, 게이트 저항의 RC 네트워크(Rpar_*). 각 MOS 단자는 해당 넷의 가장 가까운 노드로 옮겨집니다.
  • 모델 라이브러리에 lde = true가 설정된 PDK 모델의 레이아웃 의존 효과(LDE) 파라미터 (SKY130이 해당, 테크놀로지 참고): 각 MOS의 핑거 수 nf, 그리고 직사각형 확산 위의 직선 게이트에 대해 BSIM4 스트레스 모델용 게이트-확산 에지 거리 sa / sb와 게이트 간격 sd. lde가 없으면 이 값들은 생략됩니다.

회로도에 대응하는 넷이 없는 레이아웃 넷과의 결합은 접지로 합쳐집니다. 콘솔에는 한 줄 요약이 표시됩니다. 의미 있는 결과를 얻으려면 레이아웃이 LVS 클린이어야 합니다 (검증 참고). 명령줄에서는 ics sim <project> <cell> --parasitics를 사용합니다.

백엔드

내장 엔진

Rust로 작성한 수정 절점 해석(MNA) 엔진입니다. 다음을 지원합니다.

  • 소자 R C L V I D M(서브서킷과 동작 모델(behavioural) 소스는 미지원),
  • 소스: DC, AC mag [phase], PULSE(v1 v2 td tr tf pw per), SIN(vo va freq td theta), PWL(t v ...),
  • 지시어 .model, .op, .dc, .ac, .tran, .noise, .temp, .title, .end. .options, .param, .subckt 같은 다른 점(dot) 라인은 무시되며, .include나 .lib가 있는 덱은 거부됩니다(모델 라이브러리는 ngspice 필요).
  • 다이오드 모델: is n cjo vj m fc tt rs bv ibv kf af eg xti tnom,
  • MOS level 1: vto kp u0 lambda gamma phi tox ld cgso cgdo cgbo cj cjsw mj mjsw pb fc is js rd rs rsh kf af tnom, 인스턴스 파라미터 w l m ad as pd ps nrd nrs.

모델은 SPICE level 1과 SPICE 다이오드를 따릅니다.

  • 커패시턴스는 바이어스에 따라 변합니다. tox가 주어지면 MOS 게이트 커패시턴스는 영역별 (accumulation, depletion, triode, saturation) Meyer 모델을 따르고, 접합 및 다이오드 공핍 커패시턴스는 cj, mj, pb, fc와 측벽 항을 따릅니다. 과도 해석은 전하를 적분하므로 전하가 보존됩니다.
  • 기생 저항: MOS rd / rs(또는 nrd / nrs와 함께 쓰는 rsh)와 다이오드 rs는 내부 노드를 추가합니다. MOS 벌크 접합은 다이오드로 모델링됩니다.
  • 온도: MOS kp, phi, vto와 벌크 접합, 다이오드 is(eg, xti 사용), vj, cjo는 tnom에서 해석 온도로 스케일링됩니다.
  • 과도 해석 스텝 제어: 국소 절단 오차(LTE) 추정으로 스텝 채택 여부와 크기를 정하므로, Step을 크게 잡아도 빠른 에지가 정확히 계산됩니다.

넷리스터가 출력하는 범용 nmos / pmos 모델은 vto = ±0.45, kp = 280u / 70u, tox = 4n을 사용합니다. 생략한 MOS 파라미터는 SPICE 기본값을 따릅니다 (vto = 0, kp = 2e-5, tox가 주어지면 u0 · cox. tox가 없으면 진성 게이트 커패시턴스 없음).

내장 엔진이 근사하는 부분

엔진은 작성된 그대로 계산하지 않는 항목을 보고합니다. 1이 아닌 MOS level(level 1로 계산), 무시하는 모델 및 인스턴스 파라미터, 건너뛴 점(dot) 라인이 이에 해당합니다. 경고는 콘솔 로그, 실행 상태 줄(첫 번째 경고와 나머지 개수), ics sim / ics spice 출력, MCP simulate 결과에 표시됩니다. 외부에서 가져온 덱을 내장 엔진으로 돌린 결과를 신뢰하기 전에 확인하십시오.

Auto

Auto는 내장 엔진이 덱을 작성된 그대로 계산할 수 있으면 내장 엔진을 실행하고, 그렇지 않으면 ngspice로 전환합니다. 덱이 모델 라이브러리(.lib, .include)나 컴파일된 Verilog-A 모델을 로드하거나, 엔진이 덱에 대해 경고를 낼 경우(위 참고)가 해당합니다. 전환 이유는 경고로 보고됩니다. 예: auto: ngspice, because the deck loads external models (...). ngspice가 설치되어 있지 않으면 내장 엔진을 그대로 사용하고 그 사실을 알립니다.

ngspice

ngspice 백엔드에서는 IC Studio가 ngspice를 배치 모드로 실행하고 raw 출력을 읽습니다. ngspice가 덱을 직접 읽으므로 서브서킷 소자(X), PDK의 .include와 .lib 모델 라이브러리가 동작합니다. 설정에 해석이 하나도 없을 때만 IC Studio가 덱에서 해석(.op, .dc, .ac, .tran)을 가져옵니다.

PDK 모델 라이브러리는 컴파일된 Verilog-A 모델을 나열할 수 있으며(PDK 파일 [models]의 osdi = [...]), ngspice는 덱보다 먼저 pre_osdi로 이를 로드합니다. IHP SG13G2 PDK 파일은 PSP 103 모델에 이 방식을 사용합니다.

내장 엔진과 ngspice 비교

내장 엔진과 ngspice로 얻은 같은 인버터 과도 해석을 겹쳐 그린 모습

ics sim과 ics spice에 --compare를 주면 두 엔진으로 덱을 실행하고, 벡터마다 가장 큰 불일치를 출력합니다. 최대 절대 오차(AC는 복소 크기), ngspice 벡터의 최대 크기에 대한 상대 오차, 그리고 그 오차가 스윕 또는 시간 축의 어디에서 발생하는지입니다. 테스트 결과는 ngspice 스케일에 맞게 보간되며, 과도 해석은 양쪽으로 반 스텝까지 읽으므로 한 스텝 일찍 나타난 에지는 모델 오차로 계산되지 않습니다. 최악의 상대 오차가 --tol(기본값 0.05)을 넘으면 명령은 종료 코드 1로 끝납니다.

ics sim demo cmos_inverter --compare --tol 0.02
ics spice deck.cir --compare

저장소의 골든 상관성 테스트(cargo test -p ics-sim --test correlation)는 ngspice가 있을 때 같은 방식으로 여러 덱을 비교합니다. ICS_NGSPICE는 ngspice 실행 파일을 지정합니다(앱과 CLI의 기본 ngspice 경로로도 사용됩니다).

레이아웃 편집기

셀의 레이아웃 뷰를 엽니다(셀이 열려 있으면 Ctrl+4). 레이아웃 좌표는 데이터베이스 단위(dbu)이며, generic 테크놀로지에서 1 dbu = 1 nm이고 y축은 위쪽을 향합니다. 인스펙터에는 µm로 표시됩니다. 모든 점은 스냅 그리드(툴바의 Snap 필드, 테크놀로지 그리드의 배수)에 맞춰집니다. 편집기는 Virtuoso 관례를 따릅니다. 캔버스 왼쪽 위에 프롬프트가 표시되는 두 번 클릭 방식의 명령, 바인드키(S 늘이기, M 이동, C 복사, Shift+C 잘라내기(chop), O 비아, T 레이어 탭, u 실행 취소, Z 확대 박스, W 이전 뷰, q 속성, F3 명령 옵션, F4 부분 선택 등. 단축키 참고), 떠 있는 옵션 폼, 가운데 클릭 팝업 메뉴, 그래비티 스냅, 디자인 룰 기반 피드백을 제공합니다. Layout 워크스페이스에서는 메뉴 바에 Create와 Options 메뉴가 추가되고 Edit, View, Verify 메뉴에 레이아웃 명령이 들어갑니다. 모든 항목에 바인드키가 표시되며, 명령 팔레트에는 “Layout

: ” 형식으로 나열됩니다.

레이아웃 편집기

  • 왼쪽 패널: Hierarchy(표시 레벨과 배치된 셀의 트리), Layers, 현재 도구의 옵션.
  • 툴바: 실행 취소 / 다시 실행, 도구(Select, Stretch, Move, Copy, Rectangle, Polygon, Path, Label, Via, Instance, Chop, Ruler), 맞춤(fit), Zoom box, Prev view, Grid, Snap, Gravity, DRD, Constraints, Magnet, Live DRC, Flylines, 그리고 셀을 내보내는 GDS.
  • 상태 표시줄: 커서의 X / Y, 명령 진행 중에는 기준점으로부터의 dX, dY, Dist, Sel: n(부분 선택이면 Sel(P): n), 현재 도구를 나타내는 Cmd:, 그리고 각 마우스 버튼이 지금 하는 일을 알려 주는 mouse L: … M: … R: … 줄.
  • 오른쪽 패널: 셀 통계 또는 인스펙터, Edit 작업, Layer operations, 검증 섹션 (검증 참고).

레이어

  • 레이어 행을 클릭하면 활성 레이어가 됩니다. 새 도형은 이 레이어에 그려집니다.
  • 눈 아이콘을 클릭하면 레이어를 보이거나 숨깁니다. 눈 왼쪽의 작은 상자를 클릭하면 레이어의 선택 가능 여부를 바꿉니다. 선택할 수 없는(또는 숨긴) 레이어의 도형은 그려지지만 선택되지 않습니다(Virtuoso의 LSW와 같습니다). AV / NV는 모든 레이어를 보이기 / 숨기기, AS / NS는 모든 레이어를 선택 가능 / 불가능하게 합니다.
  • Filter는 이름으로 목록을 좁히고, Instances selectable은 배치된 셀을 선택할 수 있는지 정합니다.
  • 각 행에는 채우기 패턴, 이름, GDS layer/datatype이 표시됩니다. 행 위에 마우스를 올리면 최소 폭과 간격이 보입니다.

그리기

액티브, 폴리, 콘택, 메탈 순으로 레이어별 사각형을 그려 인버터를 완성하는 과정

키는 마우스가 캔버스 위에 있을 때만 캔버스에 적용됩니다.

도구키사용법
SelectEsc클릭, Shift/Ctrl+클릭, 또는 박스 드래그
StretchS도형의 변이나 꼭짓점을 클릭한 뒤 목적지를 클릭(또는 드래그). 또는 변에서 떨어진 곳에서 박스를 드래그하면 안쪽 꼭짓점이 부분 선택이 되고, 이어서 기준점과 목적지를 클릭
RectangleR모서리에서 모서리로 드래그하거나 두 모서리를 클릭. 크기가 표시됨
PolygonShift+P꼭짓점마다 클릭. Enter, 더블 클릭 또는 오른쪽 클릭으로 닫음
PathP점을 클릭. Enter, 더블 클릭 또는 오른쪽 클릭으로 끝냄
LabelL왼쪽 패널에 Text를 입력하고 클릭해 배치
ViaO왼쪽 패널에서 비아를 고르고 클릭하면 컷 하나, 드래그하면 영역을 채움
InstanceI왼쪽 패널에서 셀이나 PCell을 고르고 클릭해 배치
ChopShift+C박스를 드래그하거나 클릭. 선택한 도형(또는 박스에 닿는 모든 선택 가능한 도형)에서 그 영역을 잘라냄
RulerK두 점을 드래그하거나 클릭. 눈금자는 Shift+K까지 남아 있음

폴리곤이나 패스를 그리는 동안 Backspace는 마지막 점을 지우고 Esc는 취소합니다.

  • Gravity(기본으로 켜짐, G로 전환)는 커서를 주변 도형과 인스턴스 박스의 꼭짓점(마름모 표시)과 변(원 표시)에 스냅하여 새 도형이 정확히 맞닿게 합니다.

  • DRD(디자인 룰 기반 편집, 기본으로 켜짐)는 그리는 중인 사각형의 최소 간격 후광을 보여 주고, 같은 레이어 도형과의 간격이 최소 간격보다 좁은 곳과 최소 폭보다 좁은 도형을 빨간색으로 표시합니다. 사각형과 패스를 그릴 때, 이동, 복사, 붙여넣기 중에 동작합니다. 배치된 셀 안의 이웃 도형(깊이와 무관)과 제자리 편집 중인 셀 주변 도형도 포함하며, 이동하거나 붙여넣는 인스턴스는 외곽선을 따라 있는 도형으로 검사합니다.

  • Magnet(기본으로 켜짐)은 그리거나 옮기는 도형이 이웃에 가까워지면 정확히 최소 간격 위치로 끌어당깁니다.

  • Live DRC(기본으로 켜짐)는 편집할 때마다 주변을 룰 덱으로 검사합니다. Live DRC 참고.

  • 레이어 탭: T는 커서 아래 도형의 레이어를 활성 레이어로 만듭니다.

  • 배선 중 메탈 변경: Path 도구에서 +(또는 = / PageUp)를 누르면 커서 위치에서 패스를 끝내고, 위쪽 배선 레이어로 가는 비아를 놓은 뒤 그 레이어에서 이어 그립니다. -(또는 PageDown)는 아래로 내려갑니다.

  • 폴리곤은 기본적으로 맨해튼입니다. 각 점은 이전 점과 수평 또는 수직으로 정렬됩니다. 클릭할 때 Shift(또는 Ctrl)를 누르면 임의 각도가 됩니다. 닫는 변에는 모서리가 하나 추가되어 맨해튼 외곽선이 유지됩니다.

  • 패스는 항상 맨해튼입니다. 왼쪽 패널의 **Width (nm)**가 폭을 정하며, 0이면 레이어의 최소 폭을 씁니다. 패스 끝은 폭의 절반만큼 연장됩니다.

  • 배선 레이어 위의 라벨은 그 아래 넷의 이름이 됩니다(추출과 LVS에서 사용).

  • 비아는 테크놀로지에서 정의됩니다(아래 레이어, 컷, 위 레이어). 영역을 드래그하면 들어갈 수 있는 만큼 컷을 채웁니다.

사각형 그리기 단계별 안내

  1. Layers에서 metal1 행을 클릭합니다.
  2. R을 누르고 캔버스에서 드래그합니다.
  3. Esc를 눌러 Select로 돌아간 뒤 사각형을 클릭하고 인스펙터에 정확한 좌표(x0, y0, x1, y1, 단위 µm)를 입력합니다.

선택과 편집

작업방법
선택클릭. 커서 아래 가장 작은 도형이 선택됨. 같은 위치를 다시 클릭하면 그 아래 항목을 차례로 순환
추가 / 제거Shift+클릭 또는 Ctrl+클릭
박스 선택빈 곳에서 드래그. 왼쪽에서 오른쪽은 완전히 안에 든 항목, 오른쪽에서 왼쪽(점선 박스)은 닿는 모든 항목을 선택. Shift는 추가
모두 선택Ctrl+A
이동선택한 항목을 드래그, 또는 M 후 기준점과 목적지를 클릭, 또는 Shift+방향키로 미세 이동(스냅 10칸). 이동 중 오른쪽 클릭은 90° 회전, Shift+오른쪽 클릭은 좌우 반전
복사C 후 기준점을 클릭하고 목적지를 클릭(클릭할 때마다 복사본 추가, Esc로 종료). 회전 / 반전은 이동과 같음
늘이기S 후 변이나 꼭짓점, 목적지를 클릭. 부분 선택이 있으면 기준점, 목적지 순으로 클릭. 또는 여러 변 위로 박스를 드래그(아래 참고)
Yank / 붙여넣기y 또는 Ctrl+C로 선택 항목을 복사(Ctrl+X는 잘라내기). Shift+Y 또는 Ctrl+V로 커서에 붙이고 클릭해 배치. 클립보드는 셀 사이에서도 동작
병합 / 잘라내기Shift+M / Shift+C
형태 변경도형 하나를 선택한 상태에서 꼭짓점 핸들(사각형)이나 변 핸들(원)을 드래그. 맨해튼 도형은 맨해튼으로 유지
90° 회전 / 반전Shift+O, 또는 Rotate 90°, Flip X, Flip Y
모두 선택 해제Ctrl+D
삭제Del 또는 Backspace
실행 취소 / 다시 실행u / Shift+U, 또는 Ctrl+Z / Ctrl+Shift+Z 또는 Ctrl+Y
하위 진입인스턴스 위에서(또는 하나를 선택한 상태에서) Shift+X는 그 셀을 단독으로 엶. Shift+B로 복귀. Shift+T는 계층 트리 표시
반전Ctrl+J는 선택 항목 또는 이동 / 복사 중인 항목을 좌우 반전
제자리 편집인스턴스 위에서(또는 하나를 선택한 상태에서) x는 그 셀, 또는 커서 아래 배열 요소를 부모 안에서 편집. 주변은 부모의 방향 그대로 흐리게 보이고 DRD도 주변을 대상으로 검사. Shift+B 또는 툴바의 Return으로 복귀
배치된 셀 열기인스턴스를 더블 클릭하거나 인스펙터의 Open
팝업 메뉴가운데 클릭, 또는 대기 중인 명령 점이 없을 때 오른쪽 클릭: Move, Copy, Stretch, Delete, Properties, Rotate 90°, Merge, Yank, Paste, Descend Edit, Return, Fit All, Previous View, Edit In Place. 선택한 것이 없으면 커서 아래 항목을 먼저 선택

부분 선택

F4(또는 Edit > Toggle Partial Select)로 부분 선택을 켜고 끕니다. Select에서 변 근처를 클릭하면 그 변(양 끝 꼭짓점) 또는 꼭짓점이 선택되고, Shift+클릭은 추가 / 제거하며, 드래그 박스는 안쪽 꼭짓점을 선택합니다(완전히 안에 든 항목은 통째로 선택). 선택된 변과 꼭짓점은 강조되고 상태 표시줄에 Sel(P): n이 표시됩니다.

S를 누르고 기준점, 목적지를 차례로 클릭하면 선택된 모든 꼭짓점이 이동하며, 맨해튼 도형은 맨해튼으로 유지됩니다(인접한 변이 따라 미끄러짐). Select에서 부분 선택된 도형을 드래그해도 늘어납니다. Esc는 부분 선택을 지웁니다.

폼

각 키는 떠 있는 폼을 열고, 다시 누르면 닫습니다.

키폼
qEdit Object Properties: 선택 항목의 인스펙터
F3현재 명령의 옵션(패스 폭, 라벨 텍스트, 비아, 인스턴스 배치. 옵션이 없는 명령은 스냅과 그래비티)
eDisplay Options: 그리드, 표시 레벨 From 0 To N, 플라이라인, 눈금자 지우기
Shift+ELayout Editor Options: 스냅 간격, 그래비티, DRD, 인스턴스 선택 가능 여부, 부분 선택, 기본 패스 폭

오른쪽 패널의 Edit 섹션(무언가 선택했을 때 표시)에는 다음 기능도 있습니다.

  • Flatten: 선택한 인스턴스를 그 내용으로 바꿉니다(한 단계).
  • Make cell: 선택 항목을 새 셀로 옮기고 그 셀의 인스턴스를 배치합니다.
  • Merge: 선택한 도형을 레이어별로 합칩니다.
  • Size와 Apply: 선택한 도형을 키우거나(양수 µm) 줄입니다(음수).
  • Align(두 개 이상): 왼쪽, 가운데, 오른쪽 변 또는 아래, 가운데, 위 변을 정렬합니다. Space X / Space Y는 세 개 이상의 항목을 같은 간격으로 벌립니다.

화면 이동

작업방법
확대 / 축소Ctrl+휠 또는 핀치, 커서 위치에서 [ 확대 / ] 축소, Shift+Z 축소(Conventional 프로필: 휠)
확대 박스오른쪽 드래그, 또는 Z(또는 Zoom box) 후 드래그하거나 두 모서리를 클릭
이전 / 다음 뷰W / Shift+W(또는 Prev view)
맞춤F
이동(팬)휠(위 / 아래), Shift+휠(좌우), 가운데 드래그, 또는 방향키
팝업 메뉴가운데 클릭(또는 대기 중인 명령 점이 없을 때 오른쪽 클릭)

위는 기본값인 Virtuoso 상호작용 프로필입니다. Conventional(Settings > Interaction)에서는 휠이 확대 / 축소하고 오른쪽 드래그가 화면을 이동합니다.

바인드키는 마우스가 캔버스 위에 있을 때 캔버스로 전달되며, 캔버스의 폼(q, F3, e, Shift+E)이 위에 열려 있는 동안에도 창의 다른 곳을 클릭할 때까지 유지됩니다. 입력 중인 텍스트 필드나 마우스 아래 폼의 포커스된 컨트롤이 키를 먼저 받습니다.

레이어 연산

선택한 것이 없을 때 Layer operations는 불리언 결과를 계산합니다.

  1. 레이어 A, Operation(AND, OR, NOT, XOR, SIZE), 레이어 B(SIZE는 거리 By, µm)를 고릅니다.
  2. Output 레이어를 고릅니다.
  3. 배치된 셀까지 포함하려면 **Include hierarchy (flattened)**를 체크한 채로 둡니다.
  4. Run을 누릅니다. 결과 도형이 출력 레이어에 추가되고 선택됩니다.

불리언 연산, Merge, Size, Chop은 임의 각도 도형(45° 및 임의의 변, GDS / OASIS 또는 폴리곤 도구에서 온 도형)을 정확히 처리합니다. 그리드 점 사이에 떨어지는 교차점은 가장 가까운 데이터베이스 단위로 스냅됩니다. 크기를 조정할 때 수평, 수직, 45° 변은 주어진 거리만큼 움직이고 90° 이상인 모서리는 뾰족하게 유지됩니다. 구멍이 있는 결과는 구멍 없는 폴리곤으로 나뉩니다.

제약 조건, 컴팩션, 비교

이 명령들은 메뉴나 바인드키가 없습니다. 명령 팔레트에서 “Layout Assist: “으로 실행합니다.

  • Symmetric About Vertical / Horizontal Axis, Keep Left / Bottom Edges Aligned, Keep Centres Aligned Vertically / Horizontally, Fix In Place는 선택한 항목에 제약 조건을 추가합니다. 구성원 하나를 옮기면 제약이 유지되도록 나머지도 따라 움직입니다. Infer Constraints From Schematic은 회로도의 매칭 소자에 대칭 제약을 추가하고, Remove Constraints는 제약을 지웁니다. 툴바의 Constraints 체크박스는 제약을 화면에 그리며, 오른쪽 패널의 Constraints 섹션은 제약을 나열하고 더 이상 만족하지 않는 제약에 Snap을 제공합니다.
  • **Compact (Left, Then Down)**와 Compact Left / Right / Down / Up은 셀의 최상위 항목을 간격 룰이 허용하는 한 한쪽으로 밀어 붙입니다. 연결된 도형과 제약 조건의 구성원은 함께 움직입니다.
  • Compare With Saved와 Compare With Git HEAD는 마지막 저장 또는 마지막 커밋 이후 추가되고 삭제된 도형을 그립니다. Next Difference로 차이를 하나씩 이동합니다.

계층

계층

셀 또는 배열 배치

  1. I를 누릅니다. 왼쪽 패널에 PCell 변형과 Place cell(순환을 만들지 않는 레이아웃을 가진 다른 모든 셀)이 나열됩니다.
  2. 셀을 고르고 Rotation, Mirror about x, Columns, Rows를 설정합니다. 배열 요소는 셀 범위에서 맞닿습니다.
  3. 클릭해 배치합니다.

인스턴스를 선택하면 인스펙터에서 위치, 회전, 미러링을 편집할 수 있습니다. Array를 체크하면 Columns, Rows, Column pitch, Row pitch를 가진 배열(GDS AREF)이 됩니다.

표시 깊이

Hierarchy의 levels 필드(키 0~8, 모든 레벨은 9)는 배치된 셀을 몇 단계까지 내용과 함께 그릴지 정합니다(Shift+F 모든 레벨, Ctrl+F 최상위만). 더 깊은 인스턴스는 이름이 붙은 박스로 그려집니다. 없는 셀은 빨간색으로 그려집니다.

큰 설계도 빠르게 유지됩니다. 화면에서 작은 셀은 박스로, 아주 작은 도형은 점으로 축약됩니다.

인버터 8192개

계층 트리(Edit > Hierarchy Tree, Shift+T)는 현재 셀에 배치된 셀을 개수와 함께 나열하며, 클릭하면 그 셀을 엽니다. Tools > Hierarchy Browser는 프로젝트 전체의 레이아웃 계층과 사용처 목록을 보여 줍니다(도구 참고).

생성기와 필

Tools 메뉴는 활성 레이아웃에 도형을 추가하는 기능도 제공하며, 각각 한 번에 실행 취소할 수 있는 단계로 처리됩니다.

  • Layout Generators > Guard Ring: 영역 또는 선택 항목 둘레에 콘택과 metal1 스트랩을 갖춘 p+ 기판 링 또는 n+ nwell 링;
  • Layout Generators > Via Array: 두 레이어가 겹치는 모든 곳, 또는 지정 영역을 채우는 비아 배열;
  • Layout Generators > Matched Placement: 매칭 트랜지스터를 더미와 함께 common-centroid, interdigitated 또는 2-D common-centroid로 배치;
  • Layout Generators > By Example: 같은 회로를 가진 완성 셀(토폴로지로 매칭)처럼 소자를 배치하고 웰, 임플란트, 탭을 복사하며 선택적으로 배선;
  • Dummy Fill: 밀도 룰을 맞추도록 사각형 필을 채움.

옵션은 도구를 참고하세요.

PCell

파라미터 셀(nmos, pmos, poly_res, mom_cap, 탭 ntap / ptap)은 테크놀로지로부터 생성되어 pcells 라이브러리에 일반 셀로 저장됩니다(예: nmos_w1000_l180_nf2). 배치하려면 I를 누르고 왼쪽 패널에서 PCell을 고른 뒤 파라미터를 설정하고 클릭합니다. 배치된 PCell을 바꾸려면 선택한 뒤 인스펙터의 PCell 섹션에서 파라미터를 편집하고 Apply를 누릅니다.

PCell과 커스텀 소자에서 파라미터, 변형 저장 방식, PDK가 제공해야 하는 것, 추출이 이해하는 소자 형태(L자형, U자형 액티브 포함), SKILL로 직접 소자 생성기를 작성하는 방법을 다룹니다.

SKILL 스크립트

**Tools > Load SKILL (.il)**은 프로젝트에 Cadence SKILL 파일을 실행합니다. ics skill과 MCP 도구 run_skill은 명령줄과 에이전트에서 같은 일을 합니다. 출력은 로그로 가고, 변경된 모든 레이아웃은 실행 취소할 수 있으며, geGetEditCellView()는 편집기에 열린 셀을 반환합니다.

하단 패널의 CIW 탭(Tools > SKILL CIW, 또는 명령 팔레트의 “CIW”)은 Virtuoso의 Command Interpreter Window와 같은 대화형 SKILL 프롬프트입니다. 변수, 프로시저, 열린 셀뷰는 명령 사이에 유지되며 Tools > Load SKILL로 불러온 파일에서 정의한 모든 것을 포함합니다. 다른 프로젝트를 열면 새 세션이 시작됩니다. Enter는 줄을 실행하고, 괄호나 문자열이 닫히지 않은 줄은 다음 줄로 이어지며(프롬프트에 ... 표시), Up / Down으로 이전 명령을 불러옵니다.

cv = dbOpenCellViewByType("work" "pad" "layout" "maskLayout" "w")
for(i 0 3
  dbCreateRect(cv list("metal1" "drawing") list(i*2:0 i*2+1:1)))
dbCreateInstByMasterName(cv "work" "via_cell" "layout" "I0" 0:5 "R90")
printf("%d shapes\n" length(cv~>shapes))

지원 범위:

  • 문법: C 스타일 f(a b)와 Lisp (f a b) 호출, 중위 연산자, x:y 점, obj~>prop, tbl[key], 'quote, ?key 인자, ;와 /* */ 주석, 1.5u 같은 스케일 접미사;
  • 제어: if / then / else, when, unless, cond, case, while, for, foreach (mapcar와 테이블도), let, prog / return, setof, exists, errset, error;
  • @optional, @key, @rest를 쓰는 procedure / defun, lambda, funcall, apply, mapcar, load; 리스트, 문자열, 수학, printf / sprintf 내장 함수, makeTable 테이블, disembodied property list;
  • 레이아웃: dbOpenCellViewByType("r", "w"는 레이아웃을 비움, "a"는 추가. 라이브러리와 셀은 필요할 때 생성), dbCreateRect, dbCreatePolygon, dbCreatePath, dbCreateLabel, dbCreateInst, dbCreateInstByMasterName, dbCreateSimpleMosaic, dbDeleteObject, dbMoveFig, dbCopyFig, dbFindAnyInstByName, dbGetOverlaps, dbTransformPoint / dbTransformBBox; 레이어 불리언 연산 dbLayerAnd, dbLayerOr, dbLayerXor, dbLayerAndNot(cv layer shapes1 shapes2)과 dbLayerSize(cv layer shapes size)는 결과를 layer에 추가하고 새 도형을 반환(임의 각도 도형 포함); dbSave와 dbClose는 아무 일도 하지 않음(프로젝트를 저장하세요). 도형, 인스턴스, 셀뷰의 속성(bBox, points, layerName, xy, orient, shapes, instances 등)은 읽을 수 있고, 기하 속성은 설정할 수도 있음.

좌표 단위는 µm입니다. 레이어는 이름, list(name purpose) 또는 레이어 인덱스로 지정합니다. drawing 이외의 purpose는 먼저 name.purpose 또는 name_purpose라는 이름의 레이어를 찾습니다. 변수는 .il 파일처럼 동적 스코프를 가집니다. 지원하지 않는 것: 회로도 뷰, PCell 정의 (pcDefinePCell. 직접 만드는 소자 생성기 참고), 대화형 hi* / le* 폼, SKILL++(.ils)의 렉시컬 스코프.

GDSII

  • **File > Import > GDSII / OASIS…**는 GDS 또는 OASIS 파일을 전체 계층과 함께 새 라이브러리로 읽습니다.
  • 툴바의 GDS 또는 **File > Export > Cell GDSII…**는 셀과 그 셀이 배치하는 모든 셀을 씁니다. **Export > Library GDSII…**는 프로젝트의 모든 레이아웃을 씁니다. **Cell OASIS…**와 **Library OASIS…**는 OASIS로 씁니다.

레이어는 GDS layer / datatype으로 매핑됩니다. 테크놀로지에 없는 레이어는 가져올 때 테크놀로지에 추가되므로 잃어버리는 것이 없습니다. 스트림 레이어 맵(Tools > Stream Layer Map, 또는 Virtuoso 레이어 맵 파일)은 내보낼 때 레이어 번호를 바꾸고, 가져올 때 다른 번호를 테크놀로지 레이어에 매핑하거나 버립니다.

LEF와 DEF

LEF 추상(abstract)과 DEF 배치로 OpenROAD 같은 배치 배선 도구와 블록을 주고받습니다.

작업메뉴명령줄
활성 셀의 추상 쓰기File > Export > Cell LEF abstract…ics lef export <project> <cells>... [-o FILE] [--obs detailed|block|none] [--class BLOCK]
LEF 매크로를 새 라이브러리의 레이아웃 셀로 읽기File > Import > LEF abstracts…ics lef import <project> <FILE> [--lib NAME]
활성 셀을 DEF로 쓰기File > Export > Cell DEF…ics def export <project> <cell> [-o FILE] [--lef FILE]
DEF를 새 최상위 셀로 읽기File > Import > DEF placement…ics def import <project> <FILE> [--lib NAME]
  • 추상: LEF는 테크놀로지 헤더(단위, 그리드, 배선 및 컷 레이어, 기본 비아)로 시작합니다. 각 매크로에는 CLASS, ORIGIN, SIZE(boundary 레이어의 범위, 없으면 셀 전체 범위), 라벨이 붙은 넷마다 배선 레이어 위 도형을 PORT로 가진 PIN(DIRECTION은 그 핀이 구동하거나 구동받는 소자에서 결정, 전원 이름은 USE POWER / GROUND), 그리고 나머지 메탈과 배선 레이어 사이 컷을 위한 OBS가 들어갑니다. 장애물(obstruction)은 병합된 도형(detailed, 기본값), 핀 주변의 레이어별 블록 하나(block), 또는 없음 중에서 고릅니다. 폴리와 확산은 제외됩니다.
  • LEF 가져오기는 매크로마다 레이아웃 셀 하나를 만듭니다. boundary 레이어의 박스, 핀 이름 라벨이 붙은 핀 포트, 장애물이 들어갑니다. LEF 레이어 이름은 이름 또는 정규화된 형태로 테크놀로지 레이어에 매칭됩니다(M1, met1, metal1은 같은 레이어).
  • DEF 내보내기는 다이 영역, 컴포넌트(배치된 셀. 배열 요소는 name_i_j가 됨), 핀(최상위 라벨), 배치된 셀의 핀 사이 넷을 씁니다. --lef는 배치된 셀의 추상도 함께 씁니다.
  • DEF 가져오기는 컴포넌트의 매크로 이름에 해당하는 프로젝트 셀(--lib의 셀 우선, 기본값 work)을 배치하는 최상위 셀을 만들고, 핀 도형과 라벨, boundary 레이어의 다이 영역을 넣습니다. 셀이 없는 매크로는 보고됩니다.

MCP에서는 export_lef, import_lef, export_def, import_def가 같은 일을 합니다.

PCell과 사용자 정의 소자

PCell

IC Studio에는 여섯 가지 내장 파라미터 셀(PCell)이 있습니다. PCell은 테크놀로지 정보를 바탕으로 코드가 그리므로, 같은 파라미터로 generic180, SKY130 또는 다른 어떤 PDK에서도 올바른 소자를 얻을 수 있습니다. 내장 PCell로 그릴 수 없는 소자(직사각형이 아닌 액티브, 특수한 콘택 배치, 꺾인 게이트나 45° 게이트)는 SKILL로 생성기를 작성하십시오. 사용자 소자 생성기를 참고하십시오.

내장 PCell

종류파라미터기본값단자 레이블그리는 내용
nmosW, L, fingers, deviceW 1 µm, L 0.18 µm, 핑거 1개S, D, G액티브, 폴리 콘택 헤드가 있는 폴리 핑거, 확산 콘택 열, n+ 임플란트, PDK 마커 레이어
pmosW, L, fingers, deviceW 2 µm, L 0.18 µm, 핑거 1개S, D, Gnmos와 같고, p+ 임플란트와 n웰 추가
poly_resW, LW 0.4 µm, L 5 µmA, B양 끝에 폴리 콘택이 있는 폴리 본체, 저항 마커 레이어
mom_capW, H5 µm x 5 µmBOT, TOP각각 탭이 달린 metal1 하부 전극과 metal2 상부 전극, 커패시터 마커 레이어
ntapH1 µmBn웰 안의 n+ 탭(PMOS 벌크), 콘택 한 열 폭
ptapH1 µmBp+ 기판 탭, 콘택 한 열 폭
  • W는 핑거당 폭입니다. W 1 µm, 핑거 2개인 nmos는 1 µm 트랜지스터 두 개가 병렬로 연결된 것입니다(총 폭 2 µm). 핑거는 S / D / S 순으로 번갈아 놓입니다. 추출은 핑거마다 소자 하나를 보고하고, LVS가 병렬 소자를 병합합니다.
  • Device는 테크놀로지가 해당 극성의 MOS 소자를 여러 개 가진 PDK일 때 나타납니다(예: 저Vt, 고Vt 변형). 이때 PCell은 그 소자의 마커 레이어를 그리고, 변형(variant) 이름 끝에 소자 이름이 붙습니다. 기본값은 PDK의 첫 번째 소자입니다.
  • 길이는 테크놀로지 그리드에 스냅됩니다. 원점은 액티브(MOS, 탭), 저항 본체 또는 하부 전극의 왼쪽 아래 모서리입니다.
  • ntap과 ptap은 배치 팔레트에 없습니다. 회로도 기반 레이아웃이 이를 생성하며, MCP 도구 place_pcell에서도 사용할 수 있습니다.

PCell 배치와 변경

핑거 수와 폭이 바뀌면서 다시 그려지는 MOSFET PCell

위치방법
레이아웃 편집기I를 누르고 왼쪽 패널에서 PCell을 고른 뒤 파라미터를 설정하고 클릭해 배치
인스펙터배치된 PCell을 선택하고 PCell 섹션에서 파라미터를 수정한 뒤 Apply
회로도 기반 레이아웃Verify > Generate Layout from Schematic이 모든 MOS를 회로도의 크기대로 PCell로 배치(회로도 기반 레이아웃 참고)
생성기Layout Generators > Matched Placement와 By Example이 PCell 단위 소자를 배치(도구 참고)
MCPplace_pcell(아래 참고)

place_pcell은 크기를 µm 단위로 받습니다.

{
  "cell": "work/amp",
  "kind": "nmos",
  "params": { "w": 2, "l": 0.5, "fingers": 4 },
  "x": 0, "y": 0, "rot": 0,
  "name": "M1"
}

MOS 인스턴스 이름을 회로도 소자 이름(M1)과 같게 지정해야 플라이라인과 LVS가 둘을 짝지을 수 있습니다.

변형(variant) 저장 방식

파라미터 조합마다 한 번만 생성되어 pcells 라이브러리에 일반 셀로 저장되며, 이름은 dbu 단위의 파라미터로 정해집니다.

PCell변형 이름
nmos W 1 µm, L 0.18 µm, 핑거 2개nmos_w1000_l180_nf2
위와 같고 PDK 소자가 sky130_fd_pr__nfet_01v8_lvtnmos_w1000_l180_nf2_sky130_fd_pr__nfet_01v8_lvt
poly_res W 0.4 µm, L 5 µmpoly_res_w400_l5000
mom_cap 5 µm x 5 µmmom_cap_w5000_h5000
ntap H 1 µmntap_w1000

같은 파라미터로 다시 배치하면 기존 변형을 재사용합니다. 인스펙터의 Apply는 인스턴스가 다른 변형을 가리키게 하며, 이전 변형은 pcells에 남습니다(아무 곳에서도 사용하지 않으면 프로젝트 트리에서 삭제하십시오).

변형의 cell.json은 레이아웃과 함께 파라미터("pcell": {"kind": "mos", ...})를 보관하므로, 계층 구조, GDS 내보내기, DRC, 추출에서 일반 셀처럼 다뤄집니다. 테크놀로지를 교체하면 (Tools > Load PDK, ics load-pdk) 데이터베이스 단위가 같은 한 모든 변형이 파라미터로부터 다시 생성됩니다. 변형의 레이아웃을 직접 수정하지 마십시오. 다음 재생성 때 수정 내용이 사라집니다. 먼저 다른 라이브러리로 복사하거나 생성기를 작성하십시오.

테크놀로지가 제공해야 하는 항목

PCell은 테크놀로지 정보만으로 그리므로, 새 PDK에는 다음 항목이 필요합니다 (테크놀로지 참고).

항목용도
roles: diffusion, tap, poly, nwell, nimplant, pimplant각 PCell이 그리는 레이어
roles: diff_contact, poly_contactS / D 열, 탭 콘택, 폴리 헤드에 쓰는 비아
레이어 min_width, min_spacing, min_area최소 W와 L, 콘택 플레이트 크기, 게이트-콘택 거리
rules: gate_contact_space, poly_endcap, implant_enc, nwell_enc, marker_enc소자 내부의 간격과 인클로저
[[device]] layers각 MOS 소자의 마커 레이어
[[resistor]] / [[capacitor]] layerspoly_res(폴리 레이어 위의 저항)와 mom_cap(metal1과 metal2 사이의 커패시터)의 마커 레이어
[[pcell_layer]]poly_contact, diff_contact, gate, diffusion, poly 또는 이름을 지정한 레이어 주위에 그리는 추가 레이어. 선택적으로 일부 kinds에만 적용

테크놀로지로 만들 수 없는 파라미터는 width 150 is below the minimum 220 (active width / one contact)나 gate length 100 is below the poly minimum width 150 같은 메시지와 함께 거부됩니다. PDK 테스트는 SKY130과 IHP SG13G2의 모든 PCell이 DRC 클린인지 확인합니다. 새 PDK도 각 PCell을 배치하고 DRC를 실행해 같은 방식으로 확인하십시오.

추출이 인식하는 소자 형상

소자는 PCell 파라미터가 아니라 형상(geometry)으로 인식됩니다. 따라서 아래 규칙대로 트랜지스터를 그린 레이아웃이라면 PCell, SKILL 스크립트, GDS 가져오기, 수작업 중 어떤 방식으로 만들었든 추출되고 LVS로 비교됩니다.

형상W와 L
직사각형 액티브 위의 직사각형 게이트L은 소스와 드레인 사이 게이트를 가로지르는 길이, W = 면적 / L
직선 게이트가 있는 비직사각형 액티브(L, U, T자형)게이트마다 위와 같음. U자의 두 팔을 모두 가로지르는 폴리 하나는 게이트를 공유하는 트랜지스터 두 개가 됨
꺾인 게이트(채널 위에서 모서리를 도는 폴리, U자형 게이트 포함)L = 면적 / 평균 에지(소스와 드레인 에지 길이의 평균). W = 평균 에지에서 bend_corner로 정한 만큼 모서리 사각형 몫을 뺀 값
링 게이트(enclosed layout transistor)꺾인 게이트와 같음. W는 안쪽과 바깥쪽 둘레의 평균
45° 또는 임의 각도의 액티브나 폴리꺾인 게이트와 같음. 정확한 임의 각도 형상으로 측정
90° 배수로 회전하거나 미러된 인스턴스그려진 그대로

직사각형이 아닌 게이트는 확산 영역을 정확히 두 조각(소스와 드레인)으로 나눠야 합니다. 그렇지 않으면 gate ... does not separate two diffusion pieces 경고와 함께 건너뜁니다. 연결성 판단을 위해 모든 레이어의 임의 각도 형상은 좁은 띠로 된 계단 모양(그리드 한 스텝, 최소 10 dbu)으로 대체되므로, 그 위의 배선과 콘택은 그려진 대로 연결됩니다. 소자 크기는 항상 정확한 형상을 사용합니다.

저항도 같은 규칙을 따릅니다. L자형이나 45° 저항 본체는 정확히 두 단자 조각과 이어져야 하고, 스퀘어 수 L / W는 꺾인 게이트와 같은 방식으로 측정됩니다. 임의 각도 형상 근처의 커패시터 면적과 둘레는 정확하게 계산됩니다.

꺾임 보정. 꺾인 게이트의 모서리 사각형을 모두 한 스퀘어로 세는 것(W = 평균 에지)은 1차 근사입니다. 파운드리 덱은 모서리를 대략 반 스퀘어로 세는 경우가 많으므로, PDK [rules]의 bend_corner를 이에 맞춰 설정하십시오.

[rules]
bend_corner = 0.5   # 1(기본값): W = 평균 에지, 0: W = 더 짧은(안쪽) 에지

0.5로 설정하면 위의 L자형 게이트(에지 2.82 µm와 3.18 µm, L 0.18 µm)는 W = 2.91 µm가 됩니다.

DRC도 임의 각도 형상을 검사합니다. 임의 각도 형상 근처에서 width, space, separation, enclosure, extension은 정확한 폴리곤에서 유클리드 거리로 에지 간을 측정하므로, 최소 폭과 최소 간격으로 그린 45° 배선은 클린입니다. 한계값에서 3/4 dbu 이내의 거리는 통과하며(임의 각도 꼭짓점은 그리드로 반올림됨), 예각 모서리는 보고됩니다. 다른 룰은 계단 모양 형상을 기준으로 검사합니다(검증 참고).

내장 PCell은 항상 직사각형 액티브를 그립니다. L자형이나 U자형 소자에는 생성기를 사용하십시오.

사용자 소자 생성기

사용자 정의 PCell(pcDefinePCell)은 지원하지 않습니다. 파라미터 조합마다 셀을 하나씩 만드는 SKILL 프로시저로 같은 일을 할 수 있습니다. Tools > Load SKILL (.il), ics skill 또는 MCP 도구 run_skill로 실행한 다음, 생성된 셀을 다른 셀처럼 I(Place cell)로 배치합니다.

다음 생성기는 액티브가 L자형이고 소스 콘택이 좁은 세로 팔에 있는 NMOS를 그립니다(generic180 레이어 이름 사용).

; L자형 액티브의 NMOS: 소스 콘택이 세로 팔에 위치합니다.
procedure(nmosL(lib w l)
  let((name cv gx dx top)
    name = sprintf(nil "nmosL_w%d_l%d" round(w*1000) round(l*1000))
    cv = dbOpenCellViewByType(lib name "layout" "maskLayout" "w")
    gx = 1.0                     ; 게이트 왼쪽 에지
    dx = gx + l + 0.3            ; 드레인 콘택 왼쪽 에지
    top = w + 1.2                ; 소스 팔의 위쪽 끝
    dbCreatePolygon(cv "active" list(0:0 dx+0.32:0 dx+0.32:w 0.42:w 0.42:top 0:top))
    dbCreateRect(cv "poly" list(gx:-0.25 gx+l:w+0.4))
    dbCreateRect(cv "nplus" list(-0.2:-0.4 dx+0.52:top+0.2))
    foreach(c list(list(0.1 top-0.32 "S") list(dx w/2-0.11 "D"))
      let((x y)
        x = car(c)  y = cadr(c)
        dbCreateRect(cv "contact" list(x:y x+0.22:y+0.22))
        dbCreateRect(cv "metal1" list(x-0.06:y-0.06 x+0.28:y+0.28))
        dbCreateLabel(cv "metal1" x+0.11:y+0.11 caddr(c) "centerCenter" "R0" "roman" 0.1)))
    dbCreateLabel(cv "poly" gx+l/2:w+0.3 "G" "centerCenter" "R0" "roman" 0.1)
    name))

foreach(p list(list(1.0 0.18) list(2.0 0.5))
  printf("%s\n" nmosL("mylib" car(p) cadr(p))))
ics skill myproj nmos_l.il
ics extract myproj mylib/nmosL_w1000_l180   # M1 D G S sub nmos w=1u l=0.18u
ics drc myproj mylib/nmosL_w1000_l180       # 0 violation(s)

팁:

  • 셀 이름에는 영문자, 숫자, _, -만 쓸 수 있습니다. 크기는 1.0이 아니라 nm 단위(w1000)로 표기하십시오.
  • 모드 "w"는 셀을 비우므로, 스크립트를 다시 실행하면 모든 변형이 다시 생성됩니다.
  • 단자 레이블은 배선 레이어(metal1, poly)에 붙이십시오. 배치된 셀 안의 레이블은 그 셀 내부에서만 유효하지만, 셀 자체의 LVS에서는 셀 내부 넷의 이름이 됩니다.
  • 점 목록에서 다른 점 뒤에 오는 음수 좌표는 괄호로 감싸십시오(1.5:1.5 (-0.3):1.5). 그렇지 않으면 마이너스가 뺄셈으로 해석됩니다.
  • 룰을 하드코딩하지 말고 PDK에서 읽어 오십시오. 각 변형은 ics drc와 ics extract로 확인하십시오.

내장 PCell 종류 추가

새 내장 종류는 crates/ics-core/src/pcell.rs에 Rust 코드로 작성합니다.

  1. enum PCell에 dbu 단위 파라미터를 갖는 변형을 추가합니다.
  2. kind_name, variant_name, summary, generate를 확장하고(테크놀로지의 role, 비아, 룰로 그리는 gen_* 함수 작성), 배치 팔레트에 넣으려면 defaults도 확장합니다.
  3. pcell_params(crates/ics-studio/src/layout_view/edit.rs)에 파라미터 편집기를 추가하고, pcell_from과 place_pcell 스키마(crates/ics-mcp/src/tools.rs)에 종류를 추가합니다.
  4. 추출이 새로운 소자 유형으로 인식해야 한다면 extract.rs와 lvs.rs를 확장합니다.
  5. 테스트를 추가합니다. generic180과 pdk.rs의 PDK 테스트에서 DRC 클린인지, 생성된 레이아웃이 추출되는지 확인합니다.

검증: DRC, 추출, LVS

검증 도구는 Verify 메뉴와 Layout 워크스페이스의 오른쪽 패널에 있습니다. 활성 셀의 평탄화된 레이아웃을 대상으로 백그라운드에서 실행되며, 실행 중에는 패널에 진행 상황과 Cancel 버튼이 표시됩니다. 레이아웃을 편집하면 패널에 결과가 최신이 아니라는 표시가 나타납니다.

디자인 룰 검사(DRC)

간격 위반이 표시되고, 도형을 옮긴 뒤 다시 검사하면 깨끗해지는 과정

DRC

  1. 셀의 레이아웃을 엽니다.
  2. Design Rule Check 섹션에서 Run DRC를 누릅니다(또는 Verify > Run DRC).
  3. 결과는 No violations이거나, 룰별로 묶이고 룰마다 개수가 표시된 목록입니다. 캔버스에 마커가 그려집니다.
  4. 룰을 펼치면 설명과 위반 위치가 보입니다. 위치를 클릭하면 그곳으로 확대됩니다.
  5. Clear는 결과와 마커를 지웁니다.

룰은 테크놀로지의 덱에서 옵니다. Rule deck을 펼치면 덱을 그 자리에서 보고 편집할 수 있습니다. Run DRC는 편집한 텍스트를 바로 사용하고, Save to technology는 프로젝트의 tech.json에 저장하며, Reset은 테크놀로지의 레이어 룰과 비아 룰에서 유도한 덱으로 되돌립니다. 문법 오류는 줄 번호와 함께 나열됩니다. 덱 문법은 테크놀로지를 참고하세요. Rule Designer…(또는 Tools > DRC Rule Designer)는 덱을 폼으로 편집하고 생성된 패턴으로 모든 룰을 자체 테스트합니다. DRC Rule Designer를 참고하세요.

density 룰을 통과하지 못한 레이어는 Tools > Dummy Fill로 채울 수 있습니다 (Dummy Fill 참고).

모서리 사이 거리는 유클리드 거리입니다. 임의 각도(예: 45°) 도형은 width, space, separation, enclosure, extension으로 정확히 검사합니다. 거리는 실제 폴리곤의 변과 변 사이에서 측정하고, 한계값에서 3/4 dbu 이내의 거리는 통과시키며(45° 선을 벗어난 꼭짓점은 그리드에 반올림되므로), 예각 모서리는 표시합니다. 나머지 룰(area, density, antenna와 유도 선택)은 임의 각도 도형을 10 dbu 폭 띠의 계단 모양으로 봅니다.

Live DRC

레이아웃 툴바의 Live DRC 체크박스는 편집할 때마다 주변을 백그라운드에서 덱으로 다시 검사하고, 위반이 생기는 즉시 점선 박스로 그립니다. 마우스를 올리면 해당 룰이 보입니다. 위반에 대한 Quick Fix(Ctrl+.)는 최상위 도형의 편집 후보(형태 변경, 이동, 추가)를 제시하며, 각 후보는 먼저 DRC로 검사되어 clean 또는 새로 생기는 위반 개수가 표시됩니다. Live DRC가 꺼져 있으면 켭니다. Fix All Violations(명령 팔레트)는 더 이상 도움이 되는 수정이 없을 때까지 수정을 적용하며, 한 번에 실행 취소할 수 있는 단계로 처리됩니다. 배치된 셀 안의 도형은 바꾸지 않습니다.

Live DRC는 증분적이고 계층적이어서 큰 레이아웃에서도 빠릅니다.

  • 마지막 검사 결과를 보관하고, 편집 후에는 바뀐 영역에서 덱의 영향 거리 안쪽만 다시 검사합니다.
  • 배치된 셀은 한 번만 검사하고 그 결과를 모든 배치에 재사용합니다. 부모 셀에서는 상호작용 영역, 즉 배치끼리 겹치거나 가까워지는 곳, 또는 부모 자신의 도형과 가까운 곳만 평탄화된 도형으로 다시 검사합니다. 조각 전체에 대한 룰(area, separation, enclosure)은 영역 안의 모든 조각이 온전해질 때까지 영역을 넓히므로, 위반 결과가 평탄 검사와 같습니다.
  • 전역 룰(antenna, density)은 평탄화된 셀 전체를 검사하는 Run DRC에 맡깁니다.

연결성 추출

레이아웃 배선이 기생 RC 네트워크로 바뀌고, 다시 시뮬레이션한 파형은 더 느려지는 과정

  1. Connectivity 섹션에서 Extract를 누릅니다(또는 Verify > Extract Nets).
  2. 요약에 넷 수와 NMOS / PMOS 트랜지스터 수가 표시됩니다.
  3. Nets에서 넷을 클릭하면 강조됩니다. Pick nets를 체크하고 캔버스에서 도형을 클릭하면 그 도형이 속한 넷이 강조됩니다.
  4. Devices는 각 트랜지스터의 W, L, 단자 넷을 나열합니다. 클릭하면 게이트로 확대됩니다.

Tools > Net Browser는 추출된 넷을 레이어, 면적, 트랜지스터 단자, 배선 커패시턴스와 함께 정렬 가능한 표로 보여 줍니다. 넷을 클릭하면 강조하고 확대합니다(Net Browser 참고).

추출기 동작 방식:

  • 도전 레이어는 비아로 연결되는 레이어입니다. 확산은 active에서 poly를 뺀 영역입니다.
  • 트랜지스터는 active 위의 poly입니다. pplus 안에 있으면(임플란트가 없으면 nwell 안에 있으면) PMOS입니다. L은 게이트를 가로질러 측정하고, W는 면적 / L입니다. 꺾인 게이트, 링 게이트, 45° 게이트는 소스와 드레인 변 길이의 평균으로 W를 구하고 PDK의 bend_corner 보정을 적용합니다 (소자 형태 참고).
  • 임의 각도 도형은 연결성 계산에서는 촘촘한 계단 모양으로 근사하고, 게이트 W / L은 정확한 도형으로 구합니다.
  • 저항은 테크놀로지의 [[resistor]] 본체입니다. 마커 레이어 아래에 있는 도전 레이어로, 두 단자 조각 사이에 놓입니다. R = 면저항 × 스퀘어 수(L / W, 꺾인 본체는 꺾인 게이트처럼 측정).
  • 커패시터는 마커 레이어 아래에서 아래 판과 위 판이 겹치는 [[capacitor]] 영역입니다. C = 면적 × 면적 커패시턴스(+ 둘레 × 둘레 커패시턴스). 테크놀로지와 poly_res / mom_cap PCell을 참고하세요.
  • 넷 이름은 최상위 셀의 도전 레이어 위 라벨에서 옵니다. 이름 없는 넷은 netN이 됩니다.
  • 경고는 도전 도형 위에 있지 않은 라벨, 서로 단락된 두 라벨, 연결되지 않은 여러 조각에 붙은 라벨을 보고합니다.

레이아웃 대 회로도 비교(LVS)

레이아웃과 회로도 넷리스트를 나란히 놓고 소자를 하나씩 매칭하는 과정

LVS

  1. 셀에 회로도와 레이아웃이 모두 있어야 합니다. 소자 이름은 일치하지 않아도 되지만, 레이아웃 핀의 라벨(in, out, vdd 등)이 도움이 됩니다. 같은 넷 이름이 비교의 기준점이 됩니다.

  2. Run LVS를 누릅니다(또는 Verify > Run LVS).

  3. 결과는 Layout matches schematic이거나 차이 목록이며, 각 차이에는 태그가 붙습니다.

    • [missing]: 레이아웃에서 찾지 못한 회로도 소자,
    • [extra]: 회로도에 없는 레이아웃 소자,
    • [param]: W나 L, 저항값이나 커패시턴스, 또는 소자 모델이 다름(크기와 값은 1 % 넘게 다를 때),
    • [net]: 연결이 다른 넷.

    위치가 있는 차이를 클릭하면 그곳으로 확대됩니다.

비교 규칙:

  • MOS 트랜지스터, 저항, 커패시터를 비교합니다. 전압원과 전류원은 무시하고, 그 밖의 회로도 소자(다이오드, 인덕터)는 추출되지 않은 것으로 보고합니다.
  • 같은 단자(MOS는 L도 같음)를 가진 병렬 소자는 합칩니다. MOS 폭과 커패시턴스는 더하고, 저항은 컨덕턴스로 합성합니다. 멀티 핑거 레이아웃은 단일 회로도 소자와 매칭되며, 회로도의 m은 W에 곱해집니다.
  • 같은 모델의 저항이 다른 무엇과도 닿지 않는 이름 없는 넷을 통해 직렬로 연결되면 하나로 합쳐지므로, 여러 세그먼트로 그린 저항이 회로도 저항 하나와 매칭됩니다. 그 사이에 라벨이 붙은 넷이 있으면 합치지 않습니다. 합쳐진 소자는 이름을 +로 이어서 보고합니다.
  • 저항이나 커패시터의 모델은 회로도에 모델 이름이 있을 때만 비교합니다.
  • 벌크 단자는 무시합니다.
  • 더미 핑거처럼 항상 꺼져 있는 소자(게이트가 벌크에 묶인 경우)는 제외합니다.
  • 넷 이름은 대소문자를 구분하지 않고 비교하며, 0, gnd, vss는 같은 것으로 취급합니다.

데모 셀 cmos_inverter에는 의도적으로 LVS 지적 사항(PMOS 폭과 부하 커패시터)이 있습니다. nand2, nor2, ring_osc5, current_mirror, ota5t, sram6t, aps3t, full_adder, ota2s는 깨끗합니다.

IR 강하와 일렉트로마이그레이션

전원 그리드의 IR 강하 히트맵: 핀 근처는 파란색, 강하가 가장 큰 곳은 빨간색

오른쪽 패널의 IR Drop / EM 섹션(명령 팔레트의 IR drop / EM analysis도 같음)은 넷 하나를 분석합니다. 보통 vdd나 gnd 같은 전원 넷입니다.

  1. Net 이름을 입력합니다. 넷에는 최상위 셀의 라벨이 있어야 합니다. 라벨이 패드가 되며 패드 전압으로 고정됩니다.
  2. mA / device를 설정합니다. 넷 위의 모든 소자가 끌어가는 전류입니다. 0이면 회로도의 동작점을 시뮬레이션하여 각 MOS가 자신의 드레인 전류를 끌어갑니다.
  3. Run IR / EM을 누릅니다.

면저항이 있는 레이어 위의 넷 배선은 타일로 잘리고, 타일 사이의 저항과 각 비아 컷의 저항으로 연결됩니다. 소스나 드레인이 넷에 연결된 모든 MOS는 게이트에서 가장 가까운 타일에서 전류를 끌어가며, 네트워크를 풀어 패드로부터의 전압 강하를 구합니다. 그라운드 넷으로 되돌아오는 전류는 끌어가는 전류가 만드는 강하만큼 전압 상승을 만듭니다.

  • 요약에는 노드, 저항, 패드, 부하와 총 전류, 그리고 최악의 강하와 그 위치가 표시됩니다. 어느 패드에도 연결되지 않은 타일은 보고됩니다.
  • 캔버스에 강하의 히트맵이 파란색(0 V)부터 빨간색(최악의 강하)까지 표시됩니다.
  • EM은 배선 폭 µm당 전류를 레이어의 한계와, 비아 컷당 전류를 비아의 한계와 비교합니다. 위반은 목록으로 나열되고(클릭하면 확대) 캔버스에 빨간색 윤곽으로 표시됩니다.

한계값은 테크놀로지에서 옵니다. 레이어의 기생 계수(PDK 파일의 [[cap]])에 있는 em(폭 µm당 A)과 resistance(스퀘어당 Ω), 그리고 [[via]]의 em(컷당 A)과 resistance(컷당 Ω)입니다. 한계값이 0이면 검사하지 않습니다. generic 테크놀로지에는 예시 값이 들어 있습니다. 명령줄에서는 ics emir <project> <cell> --net vdd [--currents FILE] [--json](EM 위반 시 종료 코드 1), MCP에서는 emir 도구를 사용합니다.

외부 도구로 사인오프

내장 검사는 빠르고 반복 작업에 적합합니다. 사인오프를 위해 테크놀로지에 파운드리나 PDK 덱을 외부 도구로 실행하는 **런셋(runset)**을 등록할 수 있습니다.

도구검사덱
KLayoutDRC, LVSKLayout .drc / .lvs 스크립트
Siemens CalibreDRC, LVSSVRF 룰 파일
netgenLVSnetgen 설정 파일(IC Studio의 추출 결과를 회로도와 비교)
built-inDRCIC Studio 또는 SVRF 덱 파일, 내장 엔진에서 실행

Layout 워크스페이스에서 테크놀로지에 런셋이 있으면 Sign-off 섹션이 나타납니다. Runset을 고르고 **Run **을 누릅니다(또는 Verify > Run Sign-off Runset). IC Studio는 셀과 그 셀이 배치하는 모든 셀을 새 임시 폴더의 <cell>.gds로 쓰고, LVS용으로 회로도를 .subckt로 함께 쓴 뒤, 그 폴더에서 도구를 실행하고 리포트를 읽습니다.

  • DRC 위반은 내장 DRC처럼 캔버스에 마커로 표시됩니다. 도구가 하위 셀 안에서 보고한 위반은 하위 셀 좌표를 유지하고 셀 이름을 표시합니다.
  • LVS는 레이아웃의 일치 여부와 도구의 메시지를 보여 줍니다.
  • 폴더(결과 아래에 표시)에는 입력, 리포트, 도구 로그가 남습니다.

각 도구를 호출하는 방식:

  • KLayout: klayout -b -r DECK -rd input=CELL.gds -rd topcell=CELL -rd report=FILE, LVS에는 -rd schematic=CELL_sch.cir와 런셋의 vars를 추가합니다. 변수 이름은 klayout = { input = "...", topcell = "...", report = "...", schematic = "..." }로 바꿀 수 있습니다.
  • Calibre: 제어 파일이 LAYOUT PATH, LAYOUT PRIMARY, LAYOUT SYSTEM, ASCII 결과 데이터베이스 (DRC) 또는 SOURCE PATH / LVS REPORT(LVS)를 설정하고, 변수마다 #DEFINE을 추가한 뒤 덱을 INCLUDE합니다. 덱 자체에서는 이 구문들을 설정하면 안 됩니다. 그다음 calibre -drc -hier 또는 calibre -lvs -hier -spice를 실행합니다.
  • netgen: netgen -batch lvs "CELL_lay.cir CELL" "CELL_sch.cir CELL" SETUP REPORT.

회로도 넷리스트는 런셋의 skip에 있는 소자 문자(기본값 V와 I)를 제외하고, 그라운드 넷의 이름을 ground(기본값 gnd)로 지정합니다. 실행 파일은 일반적인 설치 경로와 PATH에서 찾으며, ICS_KLAYOUT, ICS_CALIBRE, ICS_NETGEN을 설정해 바꿀 수 있습니다.

런셋은 PDK 파일([[signoff]]) 또는 tech.json의 signoff 배열에서 옵니다.

"signoff": [
  {"name": "KLayout DRC", "tool": "klayout", "check": "drc", "deck": "/pdk/rules.drc",
   "vars": {"feol": "true"}},
  {"name": "Calibre LVS", "tool": "calibre", "check": "lvs", "deck": "/pdk/calibre.lvs",
   "skip": ["V", "I", "C"]}
]

명령줄에서

ics drc myproj nand2 [--deck rules.drc]   # 위반 시 종료 코드 1
ics extract myproj nand2                  # 추출된 SPICE 넷리스트
ics lvs myproj nand2                      # 차이가 있으면 종료 코드 1
ics emir myproj nand2 --net vdd           # EM 위반 시 종료 코드 1
ics signoff myproj nand2                  # 사인오프 런셋 목록
ics signoff myproj nand2 "KLayout DRC"    # 하나 실행. 위반 / 불일치 시 종료 코드 1

이 종료 코드 덕분에 검사를 CI에서 사용할 수 있습니다. 명령줄을 참고하세요.

회로도 기반 레이아웃

IC Studio는 회로도로부터 레이아웃을 만들 수 있습니다. 트랜지스터를 PCell로 배치하고, 아직 연결되지 않은 부분을 플라이라인으로 표시한 뒤, 이를 배선합니다.

회로도 기반 레이아웃

단계별 진행

회로도 소자가 플라이라인과 함께 레이아웃의 PCell이 되고, 이어서 배선되는 과정

  1. 회로도를 그리고 시뮬레이션합니다. 외부 넷에는 레이블(in, out, …)을 붙이고, 전원 레일에는 Ground와 Supply 심볼을 사용합니다.
  2. 셀이 활성화된 상태에서 Verify > Generate Layout from Schematic을 선택합니다. 셀에 레이아웃 뷰가 없으면 새로 만들어지고, 플라이라인이 켜진 상태로 Layout 워크스페이스가 열립니다.
  3. 배치를 확인합니다. 원하면 소자를 옮겨도 됩니다. 이름이 회로도와의 연결을 유지합니다.
  4. Verify > Route Flylines를 선택해 남은 연결을 배선합니다.
  5. LVS가 외부 넷을 식별할 수 있도록 메탈 위에 핀 레이블을 추가합니다(Label 도구, L).
  6. DRC와 LVS를 실행한 다음(검증 참고), Include layout parasitics를 켜고 시뮬레이션합니다.

각 단계는 Ctrl+Z로 되돌릴 수 있습니다. 콘솔에는 배치, 건너뜀, 매칭, 배선된 항목이 표시됩니다.

데모: 자동 배치 배선

데모 셀 full_adder(트랜지스터 28개)와 ota2s(공통 중심 입력 쌍과 미러를 갖춘 2단 OTA)의 레이아웃은 이 흐름만으로 만들어졌습니다. 레이아웃을 지우고(Ctrl+A, Delete) 위의 두 명령을 실행하면 과정을 직접 볼 수 있습니다. 데모 갤러리에 전체 스크립트가 있습니다.

배치

  • 각 NMOS와 PMOS는 회로도 소자 이름(M1)을 딴 PCell 인스턴스가 됩니다. W와 L은 소자의 w, l 파라미터에서 가져오고, m은 소자 수를 곱합니다. 폭이 5 µm보다 큰 소자는 핑거로 나뉩니다. PDK를 사용하면 회로도의 모델이 PCell의 소자(그리고 저Vt 모델의 lvtn 같은 마커 레이어)를 결정합니다.
  • PMOS 소자는 NMOS 행 위에 행을 이루며, 게이트는 두 행 사이의 채널을 향합니다.
  • 유형과 폭이 같고 소스 / 드레인 넷을 공유하는 이웃 소자는 확산을 공유하며 맞붙여 배치됩니다.
  • 웰과 임플란트는 행마다 합쳐지고, 각 행 끝에는 그 행의 벌크 넷에 연결된 벌크 탭(PMOS 행에는 ntap, NMOS 행에는 ptap)이 놓입니다.
  • 레이아웃에 이미 있는 소자(이름 기준)는 그대로 두므로, 회로도에 소자를 추가한 뒤 다시 생성할 수 있습니다.
  • 레이아웃 생성기가 없는 소자(R, C, L, 다이오드, 소스)는 건너뛰고 콘솔에 나열됩니다.

매칭 소자

차동 쌍과 전류 미러는 자동으로 감지됩니다.

  • 차동 쌍: 유형, W, L, m이 같고, 레일이 아닌 공통 소스 넷을 가지며, 게이트와 드레인이 서로 다른 두 소자.
  • 전류 미러: 유형과 L이 같고 게이트와 소스를 공유하며, 게이트가 한 소자의 드레인에 연결된 소자들.

같은 match 파라미터를 지정해 소자를 명시적으로 묶을 수도 있고, match=none으로 소자를 제외할 수도 있습니다. 인스펙터에는 표준 파라미터만 표시되므로, 셀의 schematic.json에서 소자의 params에 match(와 match_rows)를 추가하십시오.

"params": { "model": "nmos", "w": "4u", "l": "500n", "m": "1", "match": "pair1" }

매칭 그룹은 <device>.<k>(예: M1.1, M1.2)라는 이름의 동일한 단위 핑거로 나뉘어 공통 중심 순서(ABBA)로 배치됩니다. 단위가 8개 이상인 그룹이나 match_rows=2인 그룹은 교차 결합된 두 행(ABBA / BAAB)을 사용하고, match_rows=1은 한 행으로 강제합니다. 각 단위 행의 양 끝에는 게이트가 벌크에 연결된 더미 핑거가 놓입니다. 더미는 항상 꺼져 있으므로 LVS는 이를 무시합니다.

콘솔은 각 그룹의 결과를 보고합니다. 예: A, B: matched as ABBA (A = M1, B = M2). 매칭하지 못했다면 그 이유를 보고합니다.

플라이라인

레이아웃 툴바의 Flylines 체크박스를 켜면, 레이아웃에서 아직 연결되지 않은 회로도 연결마다 넷 이름이 표시된 점선이 그려집니다. 편집할 때마다 갱신되므로 수작업으로 배선하면서 플라이라인이 사라지는 것을 확인할 수 있습니다.

라우터

목표를 향해 퍼져 나가는 메이즈 라우터의 파면, 그리고 막고 있던 넷을 뜯어내고 다시 배선하는 과정

Route Flylines는 폴리 위의 배선 메탈 레이어(generic 테크놀로지에서는 metal1, metal2, metal3)에서 메이즈 라우터(A* 탐색)를 실행합니다.

  • 배선 그리드는 소자 단자에 정렬됩니다. 배선은 비아가 들어가는 단일 폭을 가지며, 트랙 사이에는 DRC 간격이 확보됩니다.
  • 기존 형상은 피해 갑니다. 짧은 넷을 먼저 배선하고, 서로 막는 넷은 뜯어내고(rip-up) 다시 배선합니다.
  • Metal1은 비용이 높고 상위 레이어마다 선호 방향이 있으므로, 긴 배선은 상위 메탈로 올라갑니다.

배선 후 완전히 연결된, 이름이 있는 모든 회로도 넷(레이블과 전원. 접지 심볼은 gnd가 됨)에는 단자 중 하나에 텍스트 레이블이 붙습니다. 단, 최상위 셀에 같은 이름의 레이블이 이미 있으면 붙이지 않습니다. 레이블은 첫 번째 메탈 또는 PDK가 넷 레이블용으로 지정한 레이어 ([[pin_label]], 예: SG13G2의 Metal1.text)에 놓이므로, 외부 LVS 덱이 레이아웃의 포트를 회로도 이름으로 인식할 수 있습니다.

콘솔 요약에는 배선된 넷, 연결, 비아, rip-up 수가 표시됩니다. 배선하지 못한 넷은 이유(단자가 도전성 형상 위에 없음, 또는 도달하지 못한 조각)와 함께 플라이라인으로 남습니다. 수작업으로 마무리한 뒤 다시 배선하십시오.

크로스 프로빙

회로도에서 소자를 선택하고 레이아웃으로 전환하면 이름이 같은 인스턴스(단위 핑거 포함)가 선택됩니다. 반대 방향도 마찬가지입니다.

명령줄 또는 에이전트에서

ics route myproj nand2 --place   # 누락된 소자 배치, 배선, 저장. 넷이 남으면 종료 코드 1

MCP 서버는 generate_layout, flylines, route를 제공합니다(MCP 서버 참고).

테크놀로지

프로젝트의 테크놀로지(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(또는 같은 이름)을 가진 새 레이어로 옮겨지고, 파일에 없지만 사용 중인 레이어는 유지되며, 데이터베이스 단위가 바뀌면 좌표가 다시 스케일됩니다.

도구

Tools 메뉴에는 Cadence Virtuoso의 대응 기능을 본뜬 보조 도구가 모여 있습니다. 각 도구는 메인 창 안에 도킹된 창으로 열리며, 메인 창에 열린 프로젝트를 대상으로, 대개 활성 셀에 대해 동작합니다. 창의 닫기 버튼 왼쪽에 있는 팝아웃 버튼을 누르면 별도의 OS 창으로 분리되고, 그 창의 Dock을 누르면 다시 돌아옵니다. 이 선택은 도구별로 기억됩니다. 모든 도구는 명령 팔레트(Ctrl+K)에도 있습니다.

도구Virtuoso 대응 기능대상
Design Copilot, AI Models-MCP 도구로 열린 프로젝트를 다루는 AI 에이전트. AI Models에서 제공자, 모델, API 키를 설정
OptimizerADE GXL Optimization활성 셀의 회로도와 스펙
Waveform CalculatorViVA Calculator활성 셀의 시뮬레이션 결과
Corner / Sweep ManagerADE Explorer / Assembler활성 셀의 회로도
Results BrowserResults Browser활성 셀의 이전 시뮬레이션 실행
Check SchematicCheck and Save활성 회로도
Hierarchy BrowserDesign Hierarchy프로젝트의 모든 레이아웃
Net BrowserAnnotation / net browser활성 레이아웃의 추출 결과
Layout GeneratorsCreate Guard Ring, Create Via Array, Modgen활성 레이아웃
DRC Rule Designer룰 덱 편집테크놀로지의 DRC 덱
Stream Layer MapXStream layer mapGDSII / OASIS 가져오기와 내보내기
Dummy FillMetal fill활성 레이아웃
OPC광근접 보정(Optical proximity correction)활성 레이아웃
SKILL CIW, Load SKILL (.il)CIW프로젝트(SKILL 스크립트 참고)

Waveform Calculator

Waveform Calculator

Tools > Waveform Calculator(또는 Simulation > Waveform Calculator)는 활성 셀의 시뮬레이션 결과에 대해 수식을 계산합니다.

  1. 셀을 시뮬레이션(F5)한 뒤 계산기를 엽니다.
  2. Dataset(op, dc, ac, tran)을 고릅니다.
  3. 수식을 입력하거나, 왼쪽의 신호나 함수를 클릭해 삽입합니다.
  4. Evaluate(또는 Enter)를 누르면 Results에 결과가 표시됩니다. 측정값은 숫자로, 파형은 포인트 수로 나타납니다. Plot은 수식 이름을 붙인 새 신호로 Simulation 플롯에 파형을 추가합니다.

플롯된 수식은 시뮬레이션을 실행할 때마다 다시 계산되므로 플롯에 계속 남아 있습니다. Results의 수식을 클릭하면 다시 편집할 수 있습니다.

수식에는 + - * / ^, 괄호, SPICE 접미사가 붙은 숫자(1n, 10k, 2meg)를 쓸 수 있습니다. 신호는 v(node), v(a,b)(= v(a) - v(b)), i(source) 또는 데이터셋의 임의의 벡터 이름(time, frequency)입니다. 특수 문자가 들어간 이름은 따옴표로 감쌉니다("v-sweep"). AC 신호는 복소수이므로 v(out)/v(in)이 곧 전달 함수입니다.

분류함수
파형abs mag db db10 phase real imag conj sqrt exp ln log10 sin cos deriv integ xval()
통계min max xmin xmax pp avg rms value(w, x)
타이밍cross(w, level [, n [, edge]]) delay(w1, l1, w2, l2 [, e1 [, e2]]) risetime(w [, lo%, hi%]) falltime(w [, hi%, lo%]) overshoot(w) settling(w [, pct])
주파수bandwidth(w [, db]) ugf(w) phasemargin(w) gainmargin(w)

edge는 rise, fall, either 중 하나이고, n < 0이면 끝에서부터 교차를 셉니다. bandwidth는 첫 포인트보다 db만큼 떨어지는 지점을 찾으며, 기본값은 반전력 지점인 3.0103 dB입니다. 이는 Simulation 측정값의 f -3 dB 열과 같은 지점입니다(단일 극점이면 정확히 극점 주파수). Simulation 플롯에서 AC 데이터셋의 실수 결과(예: db(v(out)))는 다시 dB로 변환하지 않고 그대로 그립니다.

rc_lowpass 데모 예: bandwidth(v(out)/v(in))은 약 159 kHz이고, tran에서 risetime(v(out))은 필터링된 펄스의 10-90 % 상승 시간입니다.

Corner / Sweep Manager

Corner / Sweep Manager

Tools > Corner / Sweep Manager는 활성 셀의 시뮬레이션 설정을 다음 항목의 모든 조합에 대해 실행합니다.

  • Model corners: PDK 모델 라이브러리의 코너(아무것도 선택하지 않으면 설정의 코너);
  • Temperatures: -40 27 125 같은 목록 또는 -40:55:125(start:step:stop) 같은 범위. 비워 두면 설정의 온도;
  • Variables: 각각 값 목록을 가집니다. INST.param은 인스턴스 파라미터(R1.r, M1.w)를 설정하고, 그 밖의 이름은 덱의 {name}을 치환하는 디자인 변수입니다. 예를 들어 소스의 DC 값 {vdd}가 있습니다.

툴바에는 포인트 수(최대 2000)가 표시됩니다. Run Sweep은 설정의 백엔드, 해석, 레이아웃 기생 성분으로 모든 CPU 코어에서 포인트를 병렬 실행합니다.

Specs는 각 포인트를 측정합니다. 이름, 데이터셋, 숫자를 돌려주는 계산기 수식(bandwidth(v(out)), max(v(out))), 그리고 선택적인 Min / Max 한계로 이루어집니다. 결과 표에는 모든 포인트와 스펙 값이 나열되며, 한계를 만족하면 초록색, 아니면 빨간색으로 표시됩니다. 툴바에는 모든 스펙을 만족하는 포인트 수가 표시됩니다.

Overlay는 모든 포인트의 한 신호나 수식을 한 플롯에 그립니다. 표의 행을 선택하면 해당 트레이스가 강조됩니다. 설정은 셀과 함께 저장됩니다(sim.json).

Monte Carlo

몬테카를로

Monte Carlo 섹션은 모든 포인트를 무작위 파라미터 값으로 Runs 횟수만큼 반복합니다(모든 코너와 온도에서 같은 샘플을 쓰며, Seed로 재현 가능). 각 변동 파라미터는 다음을 가집니다.

  • Target: 인스턴스 이름에 * / ? 와일드카드를 쓴 INST.param(M*.w, R?.r), 또는 Nominal 값을 가진 디자인 변수;
  • Sigma: 공칭값의 백분율(5%) 또는 절댓값;
  • Dist: Gauss(sigma는 표준편차) 또는 Uniform(sigma는 반폭);
  • Mismatch: 일치하는 인스턴스마다 독립적으로 추출합니다. 끄면 모든 인스턴스가 실행마다 하나의 추출값을 공유합니다(공정 변동).

몬테카를로 결과가 있으면 Statistics에 각 스펙의 평균, σ, 최솟값, 최댓값, 개수, 수율이 나열되고, 선택한 스펙의 히스토그램에서 한계를 벗어난 구간은 빨간색으로 표시됩니다.

데이터시트

**Export datasheet…**는 마지막 실행 결과를 HTML 페이지로 씁니다. 스펙 요약(한계, 최소 / 평균 / 최대 / σ, 수율)과 모든 포인트의 표가 통과 / 실패 색상과 함께 들어갑니다.

Optimizer

Tools > Optimizer는 Corner / Sweep Manager 설정의 스펙을 만족할 때까지 활성 셀의 소자 파라미터를 사이징합니다(최소 하나의 스펙에 Min 또는 Max 한계가 있어야 합니다).

  • Variables: 각 Target(M1.w 같은 INST.param 또는 디자인 변수)에 Min, Max, 선택적인 Step, 로그 스케일 탐색용 Log를 지정합니다. + Variable로 추가합니다.
  • Evaluations: 시뮬레이션할 후보 수.
  • Goal: Best margin(한계에 대한 최악 마진이 가장 큰 것) 또는 Least area(모든 스펙을 통과한 상태에서 MOS 게이트 면적이 가장 작은 것).
  • Post-layout: 모든 후보를 배치, 배선, 추출한 뒤 기생 성분과 함께 시뮬레이션하므로, 레이아웃 이후에도 스펙이 유지됩니다.

Run optimizer는 매 평가의 목적 함수 값을 플롯합니다. Stop은 실행을 일찍 끝내고, Apply best to schematic은 최적 값을 회로도에 씁니다.

Results Browser

시뮬레이션이 성공할 때마다 이전 결과가 보존됩니다. 현재 실행은 Run N이며, 이전 실행은 최대 12개까지 Tools > Results Browser와 Simulation 워크스페이스 신호 목록 위의 Compare runs에 나열됩니다. 실행 이름을 바꾸거나(예: “pre-layout”), 체크해서 겹쳐 그리거나, Delete로 삭제할 수 있습니다.

체크한 실행은 플롯된 각 신호의 색으로 점선으로 그려지고, <run>: <signal> 라벨이 붙으며, Measurements에 별도의 행이 생깁니다. 대표적인 용도는 회로도와 포스트 레이아웃 시뮬레이션의 비교입니다. 한 번 실행하고, Include layout parasitics를 체크해 다시 실행한 다음, 첫 실행을 체크합니다.

Check Schematic

Tools > Check Schematic은 활성 회로도를 검사합니다. File > Check and Save는 같은 검사를 하고 오류가 없으면 프로젝트를 저장합니다. 발견 항목은 하단 패널의 Problems 탭에 표시되며(편집하는 동안에도 계속 갱신됩니다), 항목을 클릭하면 회로도에서 해당 소자가 선택됩니다.

코드심각도내용
no-groundError소자는 있지만 접지가 없음
duplicate-name, empty-name, bad-nameErrorSPICE에서 쓸 수 없는 인스턴스 이름
missing-param, invalid-valueError필수 값(R, C, L, W, L, model, 소스 값)이 없거나 숫자가 아님({param} 참조는 허용)
parallel-vsource, vsource-loopError병렬 또는 루프를 이루는 전압원
shorted-deviceWarning(소스는 Error)2단자 소자의 두 핀이 같은 넷에 연결됨
unconnected-pinWarning(MOS 벌크는 Info)아무것에도 닿지 않은 핀
floating-netWarning라벨 없이 핀 하나에만 연결된 넷
dangling-wireWarning아무것에도 닿지 않은 와이어 끝
label-conflictWarning한 넷에 서로 다른 라벨 두 개
overlapping-instancesWarning같은 위치에 있는 같은 종류의 소자 두 개
isolated-netInfo접지로 가는 DC 경로가 없음

Hierarchy Browser

Hierarchy Browser

Tools > Hierarchy Browser는 프로젝트의 모든 레이아웃을 최상위 셀(다른 레이아웃이 배치하지 않는 레이아웃)부터 시작하는 트리로 보여 주며, 배치 횟수를 함께 표시합니다(어레이는 모든 요소를 셉니다). Filter로 이름으로 셀을 찾습니다.

선택한 셀에 대해 도형, 인스턴스, 평탄화된 도형, 범위, 뷰, 계층 전체에서 배치하는 셀과 그 총 개수, 그리고 이 셀을 사용하는 셀을 보여 줍니다. Open layout / Open schematic으로 엽니다. 레이아웃 편집기의 Hierarchy Tree 폼(Edit > Hierarchy Tree, Shift+T)은 현재 셀 아래의 셀만 나열합니다.

Net Browser

Net Browser

Tools > Net Browser는 활성 레이아웃 추출 결과의 넷을 나열합니다(아직 추출 결과가 없으면 넷을 추출하며, Extract로 다시 실행합니다).

열의미
NET라벨 이름(굵게), 라벨이 없는 넷은 생성된 이름
LAYERS넷이 사용하는 도전 레이어
AREA도체 면적(µm²)
TERMINALS넷에 연결된 트랜지스터 단자(드레인, 게이트, 소스, 벌크)
WIRE CAP테크놀로지 계수로 구한 기판 대비 커패시턴스

이름, 커패시턴스, 면적, 단자 수로 정렬할 수 있습니다. 넷을 클릭하면 레이아웃에서 강조되고 그 위치로 확대됩니다. 추출 이후 레이아웃이 바뀌면 경고 문구가 표시됩니다.

Layout Generators

Tools > Layout Generators(Guard Ring…, Via Array…, Matched Placement…)는 탭 네 개가 있는 창 하나를 엽니다. 각 생성기는 활성 레이아웃에 한 단계로 추가되며, u / Ctrl+Z로 되돌릴 수 있습니다.

Guard Ring

셀을 둘러싼 가드 링

영역을 확산 링으로 둘러쌉니다. p+ substrate ring(NMOS용) 또는 n+ ring in nwell(PMOS용, 링과 영역을 덮는 nwell 포함) 중 하나입니다. 링에는 임플란트, 각 변을 따라 선택적인 Contacts, 선택적인 Metal1 strap이 들어갑니다. Width와 Gap to area를 0으로 두면 레이어와 콘택 룰의 최솟값을 씁니다. 영역을 µm로 지정하거나, Use selection을 눌러 선택한 도형과 인스턴스의 경계 상자를 사용합니다. 콘택과 스트랩을 넣으면 링 자체로 DRC를 통과합니다.

Via Array

비아를 고른 뒤 다음 중 하나를 선택합니다.

  • Every overlap of the via’s layers: 비아의 하부 레이어와 상부 레이어가 겹치는 모든 곳(계층 전체)에 비아 어레이를 넣습니다. 선택적으로 영역 안으로 제한할 수 있습니다.
  • Fill the area: 들어갈 수 있는 만큼의 컷을 가운데 정렬로 넣고, 양쪽 레이어에 둘러싸는 패드를 만듭니다.

컷 크기, 간격, 인클로저는 비아 정의에서 가져옵니다.

Matched Placement

매칭 배치

레이아웃의 매칭된 MOS 소자(예: 차동 쌍이나 전류 미러)를 단위 소자로 나누어 패턴으로 다시 배치합니다.

패턴예
Common centroidA B B A, 한 행, 거울 대칭
InterdigitatedA B A B
2-D common centroidA B / B A, Rows개 행, 점 대칭

소자를 체크하고 Fingers per unit과 행 양 끝에 dummy devices를 추가할지 정합니다. 소자들은 타입, L, 핑거 폭이 같아야 하고, 각 소자의 핑거 수는 단위의 배수여야 합니다. 각 소자는 전체 W를 유지하며, 단위 소자 이름은 <device>.<k>이므로 플라이라인, 배선, LVS가 여전히 회로도 소자에 대응시킵니다(LVS는 병렬 단위를 병합합니다). 더미는 게이트, 소스, 드레인이 벌크 넷에 묶이고 LVS에서 제외됩니다. 이웃 소자는 공간을 만들기 위해 옆으로 밀려납니다.

배선 전에 실행하십시오. 블록을 가로지르는 와이어는 옮겨지지 않습니다. Common centroid에서는 단위 수가 홀수인 소자를 최대 하나만 허용합니다. 단일 핑거 소자라면 interdigitated를 쓰거나 소자당 핑거 수를 늘립니다.

By Example

같은 회로를 가진 완성된 셀의 배치를 재사용합니다. Reference(회로도와 배치된 레이아웃이 있는 셀)를 고르고 Place like reference를 누르면, 소자가 토폴로지로 매칭되어 대응 소자의 위치에 배치되고 이 셀의 회로도 값으로 사이징됩니다. 웰, 임플란트, 탭은 복사되지만 와이어는 복사되지 않으므로, 다시 배선하려면 Route the flylines afterwards를 체크합니다.

DRC Rule Designer

DRC Rule Designer

Tools > DRC Rule Designer(레이아웃 인스펙터의 Rule deck 섹션에 있는 **Rule Designer…**도 같음)는 테크놀로지의 DRC 덱을 텍스트 대신 폼으로 편집합니다.

프로젝트가 있든 없든 덱 파일도 다룰 수 있습니다. **Open…**은 덱 파일(IC Studio 덱, 또는 변환되는 SVRF 덱. 이후 **Save as…**는 IC Studio 덱으로 씁니다)을 읽고, Save는 초안을 원래 파일에, **Save as…**는 새 파일에 씁니다. 프로젝트가 열려 있지 않으면 툴바의 Technology 메뉴에서 룰을 작성할 대상 테크놀로지를 고릅니다. Generic technology 또는 PDK 파일(Load PDK…)이며, 덱 파일과 다른 초안에는 점이 표시됩니다.

  • Start here: DRC가 처음인 사람을 위한 단계별 안내(덱에서 시작하기, 빠진 룰 채우기, 문제 고치기, 룰 추가하기, 활성 셀에서 덱 시험하기, 적용하기), 용어집, 각 검사 종류의 그림.
  • Rule list(왼쪽): 레이어별로 묶인 룰과 값. + Rule은 각 검사가 답하는 질문과 함께 그림으로 그린 검사 갤러리를 열고, 선택한 레이어에 권장되는 검사를 표시합니다. + Derived layer는 프리셋(트랜지스터 게이트, 액티브 밖의 폴리, 넓은 메탈)이나 사용자 수식을 제공합니다. Filter로 룰을 찾습니다.
  • Design: 선택한 룰의 검사, 레이어, 값, 이름, 설명. 필드 옆에 테크놀로지 값이 표시되고, 다르면 Use 버튼이 나타납니다. 모든 룰은 실제 DRC 엔진으로 생성된 통과 / 실패 패턴에서 자체 테스트되어 나란히 그려지므로, 엔진이 한계값은 받아들이고 그보다 한 그리드 단계 안쪽은 위반으로 잡는지 확인할 수 있습니다.
  • Coverage: 각 레이어가 어떤 검사를 갖추었는지 보여 주는 행렬.
  • Deck text: 생성된 덱.
  • Issues: 린트 결과. 중복된 룰 이름, 절대 걸리지 않는 룰, 제조 그리드에서 벗어난 값, 쓰이지 않는 파생 레이어, 폭이나 간격 룰이 없는 배선 레이어 등입니다. 대부분 원클릭 수정(그리드에 맞추기, 이름 바꾸기, 중복 룰 제거, 빠진 룰 추가)이 제공되며, Fix automatically는 오류와 경고의 수정을 모두 적용하고 빠진 룰을 추가합니다.

툴바에는 Reload(테크놀로지의 덱), Layer defaults(레이어와 비아 룰에서 파생한 덱), Fill gaps(배선 레이어의 빠진 폭 / 간격 룰과 비아 인클로저를 테크놀로지 값으로 추가), Check active cell(초안 덱을 실행해 룰별 위반 수를 셈), Apply to technology, Apply & run DRC가 있습니다.

Stream Layer Map

Stream Layer Map

Tools > Stream Layer Map은 Virtuoso XStream layer map처럼, 각 테크놀로지 레이어를 어떤 GDSII / OASIS 레이어와 데이터타입으로 쓰고 읽을지 설정합니다. 각 행은 스트림 레이어 / 데이터타입을 테크놀로지 레이어에 대응시킵니다.

  • 내보낼 때 레이어는 첫 번째 행의 번호로 쓰입니다(행이 없는 레이어는 자기 번호를 유지하며, Written as에서 결과를 미리 볼 수 있습니다).
  • 가져올 때 행의 번호에 있는 도형은 그 레이어로 들어가므로, 여러 스트림 번호를 한 레이어에 대응시킬 수 있습니다. **(drop on import)**는 해당 도형을 버립니다.

**Load map file…**은 Virtuoso 레이어 맵(줄마다 layerName purpose streamLayer streamDatatype, # 주석)을 읽습니다. drawing이 아닌 purpose는 레이어 이름을 name.purpose, namepurpose 또는 name_purpose로 만듭니다. **Save map file…**은 맵 파일을 쓰고, From technology는 레이어당 한 행으로 시작하며, Clear는 맵을 지웁니다. 문제(알 수 없는 레이어, 두 번 대응된 번호 쌍, 같은 번호로 쓰이는 두 레이어)는 표 위에 나열됩니다. Apply는 맵을 tech.json(stream_map)에 저장합니다.

맵은 File > Import / Export, ics gds, ics import-gds, MCP의 import_gds / export_gds 도구에 적용됩니다. 프로젝트 자체의 라이브러리 파일에는 영향을 주지 않습니다.

Dummy Fill

Dummy Fill

Tools > Dummy Fill은 밀도 룰을 만족하도록 레이어에 그리드 정렬된 필 사각형을 추가합니다.

  1. Fill layer를 고릅니다. 기본값은 그 레이어의 룰에서 정해집니다. 사각형은 최소 폭의 네 배(최소 1 µm), 간격은 최소 간격의 두 배, 킵아웃은 최소 1 µm이며, 덱에 그 레이어의 밀도 룰이 있으면 윈도, 스텝, 그리고 룰 최솟값보다 약간 높은 목표값을 씁니다.
  2. Square size, Spacing, Keepout, Avoid할 레이어를 설정합니다(필은 계층 전체에서 그 레이어 도형으로부터 킵아웃만큼 떨어집니다).
  3. 필요하면 Stop at a target density per window를 체크합니다. 각 윈도는 목표값까지만 채워지며 룰의 최댓값을 넘지 않습니다.
  4. Whole cell(경계 상자) 또는 µm 단위의 Region을 채웁니다.
  5. Preview는 사각형 수, 채우기 전후의 밀도, 모든 윈도가 룰을 통과하는지를 보여 줍니다. Add Fill은 사각형을 추가합니다(되돌리기 가능).

조밀한 셀은 경계 상자 안에 필을 넣을 공간이 없을 수 있습니다. 이때는 셀 주변의 더 큰 영역을 채웁니다.

OPC

그려진 타깃, 모서리가 둥글어지고 끝이 당겨진 인쇄 윤곽, 세리프가 붙은 보정된 마스크

Tools > OPC는 활성 레이아웃의 한 레이어를 광근접 효과에 대해 보정합니다.

리소 모델은 마스크의 가우시안 블러(Blur sigma)와 그 뒤의 레지스트 Threshold로 이루어집니다. 넓은 도형은 그린 크기대로 인쇄되지만, 좁은 선은 가늘어지고 선 끝은 당겨지며 모서리는 둥글어집니다. 레이어의 모든 에지(계층 전체를 평탄화, 맨해튼 도형만)는 최대 Fragment length 길이의 조각으로 나뉘며, 모서리에는 절반 길이의 조각이 놓입니다. 매 반복에서 각 조각 중앙의 에지 배치 오차(EPE: 인쇄된 에지 위치에서 그린 에지 위치를 뺀 값, 바깥쪽이 양수)를 측정하고, 조각을 법선 방향으로 오차의 반대쪽으로 최대 Max outward move / Max inward move만큼 그리드에 맞춰 옮깁니다. 모서리의 두 에지가 모두 바깥(또는 안)으로 움직이면 사각형이 추가(또는 제거)되어 세리프와 마우스 바이트가 만들어집니다.

  1. Correct할 레이어를 고릅니다. 기본값은 최소 폭 w와 간격 s에서 정해집니다. sigma 0.45 w, 조각 2 w, 바깥쪽 최대 s / 3, 안쪽 최대 w / 4입니다.
  2. Preview는 보정 전후의 EPE(rms, 최대, EPE tolerance 안에 드는 조각)와, 그린 도형, 마스크, 보정 전(빨강)과 보정 후(초록)의 인쇄 윤곽을 보여 줍니다. 스크롤로 확대하고 드래그로 이동합니다.
  3. Apply OPC는 마스크를 <layer>_opc 레이어에 씁니다(되돌리기 가능). 이 레이어는 처음 적용할 때 같은 GDS 레이어의 다음 빈 데이터타입으로 테크놀로지에 추가됩니다. 그린 도형은 절대 바뀌지 않으므로 매 실행은 그 도형에서 시작합니다. 다른 설정을 시험하려면 설정을 바꾸고 다시 적용하면 되며, 셀의 이전 마스크는 교체됩니다.

같은 보정을 명령줄(ics opc)과 MCP(opc)에서도 실행할 수 있습니다.

명령줄 (ics)

ics는 데스크톱 앱과 같은 프로젝트 폴더를 다룹니다. 스크립트, 일괄 실행, CI에 사용하며, ics mcp는 AI 에이전트용 MCP 서버도 실행합니다. 릴리스 설치 프로그램이 PATH에 등록해 줍니다. 소스에서는 cargo build --release -p ics-cli로 빌드하거나(바이너리 target/release/ics) cargo run -p ics-cli -- <args>로 실행합니다.

ics 명령을 차례로 실행하고 각 명령이 JSON으로 응답하는 터미널

  • <CELL>은 lib/cell 또는 셀 이름만 씁니다(그 이름의 첫 번째 셀이 사용됩니다).
  • 종료 코드 0은 성공입니다. 오류가 나면 stderr에 error: <message>를 출력하고 1로 종료합니다.
  • ics --help와 ics <command> --help에서 모든 옵션을 설명합니다.

명령

명령용도
ics mcpAI 에이전트용 MCP 서버를 stdio로 실행(MCP 서버 참고)
ics new <DIR> [--template empty|demo]프로젝트 생성(기본 템플릿 demo)
ics examples [DIR] [--force]주제별 예제 프로젝트를 DIR/<topic>에 씀(--force가 없으면 기존 것은 유지). DIR이 없으면 주제 목록 출력
ics info <PROJECT>라이브러리, 셀, 뷰 목록
ics netlist <PROJECT> <CELL>셀의 SPICE 덱 출력
ics schematic <PROJECT> <CELL> <NETLIST> [--overwrite]SPICE 넷리스트 파일로 셀의 회로도를 만들거나 교체하고 저장
ics sim <PROJECT> <CELL> [--backend builtin|ngspice|auto] [--json] [--parasitics] [--compare [--tol T]]셀에 저장된 설정으로 시뮬레이션. --compare는 내장 엔진을 ngspice와 대조
ics spice <FILE> [--backend builtin|ngspice|auto] [--json] [--compare [--tol T]]SPICE 파일을 파일 자체의 해석으로 시뮬레이션
ics mc <PROJECT> <CELL> --measure ANALYSIS:EXPR... [--runs N] [--seed S] [--avt V] [--abeta V] [--vto-sigma V] [--kp-sigma V] [--parasitics] [--json]공정 변동과 Pelgrom 미스매치를 적용한 내장 엔진 몬테카를로
ics gds <PROJECT> <CELL> -o <FILE>셀과 그 셀이 배치하는 모든 셀을 GDSII로 내보냄. FILE이 .oas / .oasis로 끝나면 OASIS
ics gds-info <FILE>GDSII 또는 OASIS 파일의 계층 통계와 소요 시간 출력
ics import-gds <PROJECT> <FILE> [--lib NAME] [--skip-unknown-layers] [--json]GDSII 또는 OASIS 파일을 새 라이브러리로 가져옴
ics lef export <PROJECT> <CELL>... [-o FILE] [--obs detailed|block|none] [--class CLASS]테크놀로지 헤더와 함께 셀의 LEF 추상을 씀(-o가 없으면 stdout)
ics lef import <PROJECT> <FILE> [--lib NAME]LEF 매크로를 새 라이브러리의 레이아웃 셀로 가져오고 저장
ics def export <PROJECT> <CELL> [-o FILE] [--lef FILE]최상위 셀을 DEF로 씀. --lef는 배치된 셀의 추상도 씀
ics def import <PROJECT> <FILE> [--lib NAME]DEF를 프로젝트 셀을 배치하는 새 최상위 셀로 가져오고 저장
ics lib-storage <PROJECT> <LIB> gds|json라이브러리의 디스크 저장 방식 변경
ics import-tech <PROJECT> <LYP> [--lyt FILE]KLayout .lyp로 테크놀로지 레이어 교체
ics load-pdk <PROJECT> <PDK>테크놀로지를 PDK 파일로 교체(테크놀로지 참고)
ics drc <PROJECT> <CELL> [--deck FILE] [--fix]DRC 실행(덱은 SVRF도 가능). 위반이 있으면 1로 종료
ics extract <PROJECT> <CELL>추출된 넷리스트를 SPICE로 출력
ics lvs <PROJECT> <CELL>레이아웃과 회로도 비교. 차이가 있으면 1로 종료
ics emir <PROJECT> <CELL> --net NET [--currents FILE] [--json]라벨이 붙은 핀 기준으로 넷의 IR 드롭과 일렉트로마이그레이션 분석. 전류는 레이아웃 소자별(JSON) 또는 회로도의 동작점에서 가져옴. EM 위반이 있으면 1로 종료
ics opc <PROJECT> <CELL> --layer LAYER [--apply] [--sigma UM] [--threshold T] [--fragment UM] [--max-out UM] [--max-in UM] [--iterations N] [--gain G] [--json]레이어의 광근접 보정. 보정 전후 EPE 출력. --apply는 마스크를 <LAYER>_opc에 쓰고(이전 마스크 교체, 그린 레이어는 바뀌지 않음) 저장
ics signoff <PROJECT> <CELL> [RUNSET]외부 KLayout / Calibre / netgen 런셋 실행(RUNSET이 없으면 목록 출력). 위반이나 불일치가 있으면 1로 종료
ics route <PROJECT> <CELL> [--place]플라이라인을 배선하고 저장. 배선되지 않은 넷이 남으면 1로 종료
ics compact <PROJECT> <CELL> [--dir left,down] [--no-infer]지정한 방향으로 레이아웃을 압축하고 저장
ics diff <PROJECT> <CELL> [--rev REV | --against DIR]레이아웃을 git 리비전(기본 HEAD) 또는 다른 프로젝트와 비교. 다르면 1로 종료
ics optimize <PROJECT> <CELL> [--post-layout] [--apply] [--json]셀의 스펙을 만족하도록 소자 사이징. 모든 스펙을 만족하는 포인트가 없으면 1로 종료
ics place-like <PROJECT> <CELL> --from <CELL> [--route]같은 회로를 가진 완성된 셀처럼 배치하고 저장
ics skill <PROJECT> <FILE.il> [--no-save] [--json]프로젝트에 Cadence SKILL 스크립트를 실행하고 저장. SKILL 오류가 나면 1로 종료

세부 사항

넷리스트로 회로도 만들기

ics schematic은 평탄한 SPICE 넷리스트(R, C, L, V, I, D, M 줄과 PDK MOS 서브서킷용 X 줄)를 읽어 셀의 회로도로 그립니다. 모든 핀에 넷 라벨이 붙고(노드 0 또는 gnd는 접지 심볼), 소자는 행 단위로 배치됩니다(PMOS, NMOS, 수동 소자, 소스). 해석 줄(.op, .dc, .ac dec, .tran)과 .temp는 셀의 시뮬레이션 설정이 되고, 그 밖의 점 명령(.model, .include, .param, .ic, .meas)은 추가 줄(extra lines)이 됩니다. 길이는 SPICE 단위인 미터입니다(w=2u). 단위 없는 w=2는 경고와 함께 µm로 읽습니다. lib/cell을 주지 않으면 셀은 work 라이브러리에 만들어집니다. 생성된 덱을 출력하고 프로젝트를 저장합니다.

ics schematic myproj ota ota.cir && ics route myproj ota --place && ics lvs myproj ota

시뮬레이션

ics sim은 앱에서 셀에 저장한 해석, 온도, 추가 줄, 백엔드를 사용합니다. --backend는 백엔드를 덮어씁니다(auto는 내장 엔진이 덱을 그대로 계산할 수 없을 때만 ngspice를 고릅니다. 백엔드 참고). --parasitics는 레이아웃 기생 성분을 추가합니다(저장된 설정에서 켜져 있어도 적용됩니다). --json이 없으면 각 데이터셋의 제목과 포인트 수, 동작점 값과 소자 영역, 스윕의 벡터 이름을 출력합니다. 백엔드와, 내장 엔진이 근사하는 부분에 대한 경고는 stderr로 나갑니다.

--json을 주면 전체 결과가 stdout으로 나갑니다.

{
  "backend": "built-in",
  "elapsed_ms": 3.1,
  "warnings": [],
  "datasets": [
    { "analysis": "tran", "title": "...", "vectors": { "time": [0, 1e-11], "v(out)": [0, 0.01] } }
  ]
}

AC 벡터는 { "re": [...], "im": [...] } 형태입니다.

ics spice deck.cir은 임의의 SPICE 파일을 파일 안의 해석으로 시뮬레이션합니다(기본 백엔드는 built-in).

--compare는 덱을 ngspice(기준)와 내장 엔진에서 모두 실행하고 각 벡터의 최대 불일치를 출력합니다. 가장 큰 상대 오차가 --tol(기본 0.05)을 넘으면 1로 종료합니다. 내장 엔진과 ngspice 비교를 참고하십시오.

ics mc는 셀의 해석을 --runs번(기본 100, --seed로 재현 가능) 실행합니다. 극성별 전역 문턱 전압 및 트랜스컨덕턴스 변동(--vto-sigma 기본 20m V, --kp-sigma 기본 0.03)과, 소자별 미스매치 σ(ΔVth) = avt / √(W L), σ(Δβ/β) = abeta / √(W L)(--avt 기본 5n = 5 mV·µm, --abeta 기본 10n = 1 %·µm)을 적용합니다. 각 --measure는 해석과 스칼라 결과를 내는 계산기 수식으로 이루어지며, 명령은 각각의 평균, 시그마, 최솟값, 최댓값을 출력합니다. 앱의 Monte Carlo 창에서도 같은 실행을 할 수 있습니다.

ics mc demo ota5t --runs 200 --measure "op:v(out)" --measure "ac:bandwidth(v(out))"

GDS

  • ics import-gds는 --skip-unknown-layers를 주지 않으면 테크놀로지에 없는 레이어를 추가합니다. 라이브러리 이름은 기본적으로 파일 이름입니다. 기본적으로 라이브러리는 프로젝트 안에 GDS 파일 하나로 저장되며, --json을 주면 셀마다 JSON 폴더 하나로 저장합니다(편집 가능, diff에 유리, 크기가 더 큼). ics lib-storage는 기존 라이브러리를 두 방식 사이에서 변환합니다.
  • ics gds와 ics import-gds는 테크놀로지에 스트림 레이어 맵이 있으면 적용합니다.
  • ics gds-info는 아무것도 쓰지 않고 GDS 파일을 읽어, 최상위 셀과 그 크기, 읽기 / 파싱 / 인덱싱 시간을 출력합니다.

검증과 배선

  • ics drc는 각 룰과 위반 수, 그리고 최대 50개의 마커 상자를 µm 단위로 출력합니다. --deck FILE은 테크놀로지 덱 대신 덱 파일을 사용합니다. --fix는 먼저 셀의 최상위 지오메트리에 검증된 빠른 수정을 적용하고 프로젝트를 저장한 뒤, 남은 위반을 보고합니다.
  • ics lvs는 소자와 넷의 대응 쌍, 그리고 차이를 출력합니다.
  • ics route --place는 먼저 레이아웃에 없는 회로도 소자를 배치하고(회로도 기반 레이아웃), 배선한 다음 프로젝트를 저장합니다.

레이아웃 편집

  • ics compact는 셀의 최상위 항목을 각 --dir(left, right, down, up. 기본 left,down) 방향으로 차례로 룰에 막힐 때까지 밀고 저장합니다. 고정된 항목은 그대로 두고, 제약 조건은 유지되며, DRC 위반을 늘리는 이동은 취소됩니다. --no-infer를 주지 않으면 먼저 회로도의 매칭 소자에서 대칭 제약을 추론합니다.
  • ics diff는 셀의 평탄화된 레이아웃을 레이어별로 프로젝트의 git 리비전(--rev, 기본 HEAD) 버전이나 다른 프로젝트 디렉터리의 같은 셀(--against DIR)과 XOR하여 차이를 출력합니다.
  • ics place-like는 셀의 소자를 회로 토폴로지로 완성된 기준 셀(--from)과 매칭하고, 셀 자체의 회로도 값으로 사이징하여 기준 셀처럼 배치합니다. --route를 주면 이어서 배선합니다.

Optimizer

ics optimize는 앱(Tools > Optimizer…)에서 설정한 셀의 스펙(sim.sweep.specs)과 옵티마이저 변수(sim.optimize)를 사용합니다. 각 평가는 stderr에, 최적 값과 스펙 결과는 stdout에 출력합니다 (--json: passed, evaluations, vars, specs를 가진 객체 하나). --post-layout은 모든 후보를 먼저 배치, 배선, 추출합니다. --apply는 최적 값을 회로도에 쓰고 저장합니다.

SKILL 스크립트

ics skill은 Cadence SKILL(.il) 파일을 프로젝트에 대해 실행합니다(dbOpenCellViewByType, dbCreateRect, dbCreateInst 같은 레이아웃 호출, 좌표는 µm). 스크립트가 출력한 내용을 출력하고, 수정된 셀을 stderr에 나열하며, --no-save를 주지 않으면 프로젝트를 저장합니다. --json을 주면 stdout은 객체 하나입니다.

{ "output": "...", "value": "t", "modified": ["work/inv_layout"] }

SKILL 오류가 나면 스크립트 출력을 출력한 뒤 error: <file>:<line>: <message>를 출력하고, 1로 종료하며 저장하지 않습니다.

예제

ics new demo --template demo
ics info demo
ics netlist demo cmos_inverter
ics sim demo rc_lowpass --json > rc.json
ics sim demo nand2 --backend ngspice
ics sim demo cmos_inverter --compare
ics sim demo ring_osc5 --parasitics
ics drc demo nand2 && ics lvs demo nand2
ics extract demo inv_chain
ics gds demo inv_tiles -o tiles.gds
ics def export demo inv_chain -o chain.def --lef chain.lef
ics import-gds demo chip.gds --lib chip
ics import-tech demo sky130A.lyp --lyt sky130A.lyt
ics skill demo make_pads.il --json
ics drc demo cmos_inverter --fix
ics diff demo nand2 --rev HEAD~1

셀의 CI 검사 예:

ics drc myproj work/opamp && ics lvs myproj work/opamp

AI 에이전트용 MCP 서버

ics mcp(ics 명령줄 도구의 mcp 명령)는 Model Context Protocol(stdio)을 통해 IC Studio를 AI 에이전트에 제공합니다. 에이전트는 프로젝트를 만들고 열고, 넷리스트를 읽고, 시뮬레이션하고, 레이아웃을 편집하고, 회로도로부터 레이아웃을 생성하고 배선하며, DRC, 추출, LVS를 실행할 수 있습니다.

AI 에이전트가 ics mcp 도구를 호출해 프로젝트를 편집하고 검사한 뒤 결과를 다시 읽는 흐름

설정

릴리스 설치 프로그램은 claude가 PATH에 있으면 서버를 Claude Code에 등록합니다. 앱의 **File > Settings… > AI agents (MCP)**에는 같은 일을 하는 Add to Claude Code와, 다른 클라이언트용으로 아래 JSON을 복사하는 Copy MCP config가 있습니다.

직접 등록하려면 다음을 실행합니다.

claude mcp add --scope user ic-studio -- /path/to/ics mcp

다른 MCP 클라이언트에서는 명령이 ics 바이너리이고 인자가 mcp인 stdio 서버를 추가합니다.

{ "mcpServers": { "ic-studio": { "command": "/path/to/ics", "args": ["mcp"] } } }

소스에서는 cargo build --release -p ics-cli로 빌드하고 target/release/ics를 사용합니다.

그런 다음 예를 들어 이렇게 요청합니다. “create a demo project in ./demo and run LVS on cmos_inverter”(./demo에 데모 프로젝트를 만들고 cmos_inverter에 LVS를 실행해 줘).

에이전트 스킬

도구는 에이전트에게 무엇을 할 수 있는지 알려 주고, skills/ic-studio에 있는 ic-studio 스킬은 그 도구로 어떻게 설계하는지 알려 줍니다. 회로도 → 시뮬레이션 → 레이아웃 → DRC → LVS → 포스트 레이아웃 흐름, 단위, LVS / DRC 결과 읽는 법, schematic.json 형식, 대안으로서의 ics CLI를 다룹니다. 다음 명령으로 설치합니다.

npx skills add geniuskey/ic-studio

또는 skills/ic-studio를 ~/.claude/skills/에 복사합니다.

규칙

  • 좌표는 µm 단위이고, y는 위쪽이 양수이며, 테크놀로지 그리드에 스냅됩니다.
  • cell 인자는 셀 이름 또는 lib/cell입니다. 레이아웃 편집 도구는 셀(work 라이브러리)과 그 레이아웃 뷰가 없으면 새로 만듭니다.
  • 편집 내용은 save_project를 호출할 때까지 메모리에만 있습니다.

도구

서버에는 40개의 도구가 있습니다.

도구용도
open_project, new_project, save_project, project_info프로젝트 관리. project_info는 테크놀로지 레이어, 비아, 모든 셀을 나열
get_netlist셀의 SPICE 덱
write_schematicSPICE 넷리스트로 셀의 회로도를 만들거나 교체. 해석 줄은 시뮬레이션 설정이 됨
set_simulation셀의 해석(op, dc, ac, tran, noise), 백엔드, 온도, 추가 줄, 기생 성분, 코너 변경
simulate셀에 저장된 해석 실행(선택: backend는 builtin, ngspice, auto; parasitics). 내장 엔진이 근사하는 부분에 대한 경고와 함께 간결한 요약을 반환
run_spice원시 SPICE 덱 시뮬레이션
layout_summary경계 상자, 레이어별 도형, 라벨, 인스턴스
add_rect, add_path, add_label도형 그리기. 배선 레이어의 라벨은 그 아래 넷의 이름이 됨
place_instance, place_pcell셀 또는 PCell 배치(nmos, pmos(선택적으로 PDK device), poly_res, mom_cap, ntap, ptap)
delete_itemsid로 도형 / 인스턴스 삭제
generate_layout매칭을 고려한 회로도 기반 배치(배선 없음)
flylines배선되지 않은 연결 목록
route메탈 레이어에서 플라이라인 배선
run_drc테크놀로지 덱으로 DRC
fix_drc더 고칠 것이 없을 때까지 셀의 최상위 지오메트리에 검증된 빠른 수정 적용
compact최상위 항목을 각 방향으로 룰에 막힐 때까지 밀기. 제약 조건 유지
optimize스펙을 만족하도록 소자 파라미터 사이징(선택적으로 레이아웃 이후). apply는 최적 값을 씀
place_like예제 기반 레이아웃: 같은 회로 토폴로지를 가진 완성된 셀처럼 배치, 선택적으로 배선
diff_layout셀의 레이아웃을 레이어별로 git 리비전(기본 HEAD) 또는 저장된 파일과 XOR
extract추출된 넷과 소자, 그리고 SPICE
run_lvs레이아웃과 회로도 비교
run_signoff테크놀로지의 외부 KLayout / Calibre / netgen 런셋 실행
post_layout_parasitics추출된 기생 성분과 가장 큰 넷 커패시턴스 및 커플링 커패시턴스
emir넷의 IR 드롭과 일렉트로마이그레이션: 최악 드롭과 위치, 부하, 가장 높은 전류 밀도, EM 위반
opc레이어의 광근접 보정: 보정 전후 EPE 통계, 마스크 면적, 최악 조각. apply는 마스크를 <layer>_opc에 쓰고 이전 마스크를 교체(그린 레이어는 바뀌지 않음)
load_pdk테크놀로지를 PDK 파일로 교체
export_gds, import_gdsGDSII / OASIS 내보내기와 가져오기(가져올 때 테크놀로지에 없는 레이어는 건너뜀). 둘 다 테크놀로지의 스트림 레이어 맵을 적용
export_lef, import_lef셀의 LEF 추상 쓰기(obs: detailed, block, none; class), 또는 LEF 매크로를 새 라이브러리의 레이아웃 셀로 가져오기(LEF와 DEF 참고)
export_def, import_def최상위 셀을 DEF로 쓰기(배치된 셀의 추상용 선택 인자 lef_path), 또는 DEF를 새 최상위 셀로 가져오기
run_skillCadence SKILL 코드(code) 또는 .il 파일(file) 실행. output, value, modified 셀을 반환
gui_status데스크톱 앱 연결 여부와 그 프로젝트

run_skill

run_skill은 code(SKILL 소스) 또는 file(.il 경로. 상대 경로 load()의 기준이기도 함) 중 하나를 받아 다음을 반환합니다. 선택 인자 cell은 geGetEditCellView()가 반환할 셀을 지정합니다.

{ "output": "what the script printed", "value": "value of the last form", "modified": ["work/pads"] }

SKILL 오류가 나면 도구는 SKILL error: <file or line>: <message>로 실패하며, 이미 수정된 셀(편집 내용은 유지됨)과 그때까지 출력된 내용이 뒤따릅니다. 라이브 모드에서는 앱이 변경된 모든 레이아웃의 되돌리기 기록을 남기고, 열린 셀이 없으면 첫 번째 셀을 엽니다.

라이브 모드

데스크톱 앱이 실행 중이면 MCP 서버(ics mcp)는 모든 도구 호출을 앱으로 전달하고, 에이전트는 창에 열린 프로젝트를 대상으로 작업합니다.

  • 편집 내용이 즉시 나타나고, 레이아웃 편집은 Ctrl+Z로 되돌릴 수 있습니다.
  • 창은 해당 셀을 맞는 워크스페이스에서 엽니다. simulate는 파형을 보여 주고, DRC / 추출 / LVS 결과는 마커와 함께 레이아웃 패널에 나타납니다.
  • 상태 표시줄에 MCP live가 표시되고, 각 호출은 콘솔에 MCP · <tool> <cell> -> <summary>로 기록됩니다.

앱은 세션별 토큰으로 127.0.0.1에서 수신하며, 검색용 파일 live.json을 %LOCALAPPDATA%\ic-studio (Windows) 또는 $XDG_RUNTIME_DIR/ic-studio에 쓰고, 없으면 ~/.local/state/ic-studio(Linux, macOS)에 씁니다. ics mcp는 호출할 때마다 실행 중인 앱을 확인하므로 언제든 앱을 시작하거나 닫을 수 있습니다.

앱이 실행 중이 아니거나 ICS_MCP_STANDALONE=1이면 서버는 자체 메모리 내 프로젝트로 동작합니다. open_project 또는 new_project로 시작합니다. ICS_LIVE_DIR은 검색용 파일의 폴더를 바꿉니다.

단축키

Windows와 Linux의 Ctrl은 macOS에서 Cmd입니다. 앱은 실행 중인 플랫폼에 맞게 단축키를 표시합니다 (Windows와 Linux에서는 Ctrl+K, macOS에서는 ⌘K). 메뉴, 툴팁, 이 목록 모두 마찬가지입니다. 앱에서 F1을 누르면 이 목록이 표시됩니다. 캔버스 키는 마우스가 캔버스 위에 있고 텍스트 필드에 포커스가 없을 때 동작합니다.

일반

키동작
Ctrl+K, Ctrl+Shift+P명령 팔레트
Ctrl+S, F2 / Ctrl+Shift+S저장 / 다른 이름으로 저장
Ctrl+O프로젝트 열기
Ctrl+N새 셀
Ctrl+W탭 닫기
Ctrl+Z실행 취소
Ctrl+Shift+Z, Ctrl+Y다시 실행
Ctrl+1 … Ctrl+4Home, Schematic, Simulation, Layout 워크스페이스
F5, Ctrl+Enter시뮬레이션 실행
Ctrl+J콘솔 표시 전환 (레이아웃 편집기에서는 Ctrl+J가 좌우 반전)
Ctrl+,설정
F1단축키

캔버스 (회로도와 레이아웃)

키동작
휠위 / 아래로 이동 (Conventional 프로필: 커서 위치에서 확대·축소)
Ctrl+휠, 핀치커서 위치에서 확대·축소
Shift+휠가로로 이동
가운데 버튼 드래그이동
오른쪽 드래그레이아웃: 상자 영역으로 확대 (Conventional 프로필: 이동), 회로도: 이동
F창에 맞추기
Esc현재 작업 취소, 다음엔 Select로 복귀, 그다음 선택 해제
Del, Backspace선택 항목 삭제
Ctrl+A모두 선택
Ctrl+D선택 항목 복제 (레이아웃: 모두 선택 해제)
Shift/Ctrl+클릭선택에 추가 또는 선택에서 제거

마우스 동작은 Settings(Ctrl+,)의 Interaction 프로필을 따릅니다. Virtuoso(기본값)는 Virtuoso 기본 동작과 같아서 휠로 이동하고, Ctrl+휠로 마우스 위치에서 확대·축소하며, 오른쪽 드래그로 상자 영역을 확대합니다. Conventional은 휠로 확대·축소하고 오른쪽 드래그로 이동합니다. 바인드키는 두 프로필에서 같습니다.

회로도

키동작
W와이어
T넷 레이블
R C L저항, 커패시터, 인덕터
V I전압원, 전류원
D다이오드
N PNMOS, PMOS
G S접지, 전원
Space / X회전 / 미러 (배치 중이거나 선택 항목)
/와이어 꺾임 방향 전환

레이아웃

레이아웃 키는 Cadence Virtuoso (IC6) 기본 바인드키를 따릅니다.

키동작
Esc대기 중인 점 취소, 부분 선택 해제, 그다음 Select로 복귀
SStretch: 모서리나 꼭짓점을 클릭한 뒤 목적지 클릭, 또는 모서리 위로 상자를 드래그(또는 부분 선택 사용)한 뒤 기준점과 목적지 클릭
F4부분 선택 전환 (모서리와 꼭짓점 선택)
M / C이동 / 복사: 기준점을 클릭한 뒤 목적지 클릭 (복사는 반복)
오른쪽 클릭 / Shift+오른쪽 클릭이동이나 복사 중: 90° 회전 / 좌우 반전
가운데 클릭, 오른쪽 클릭팝업 메뉴 (오른쪽 클릭은 대기 중인 명령 점이 없을 때만)
오른쪽 드래그상자 영역으로 확대
qEdit Object Properties 폼
F3현재 명령의 Options 폼
e / Shift+EDisplay Options / Layout Editor Options 폼
R사각형 (드래그 또는 두 번 클릭)
Shift+P / P폴리곤 / 패스
L / O / I / K레이블 / 비아 / 인스턴스 / 자
Shift+C / Shift+M잘라내기(chop) / 병합
Shift+O선택 항목(또는 이동 중인 항목)을 90° 회전
패스를 그리는 중 + / -비아를 놓고 위 / 아래 메탈에서 계속
u / Shift+U실행 취소 / 다시 실행 (Ctrl+Z / Ctrl+Y도 동작)
y / Shift+Y복사(yank) / 붙여넣기 (Ctrl+C / Ctrl+X / Ctrl+V도 동작)
T레이어 탭: 커서 아래 레이어를 활성 레이어로 지정
G그래비티 스냅 전환
Ctrl+A / Ctrl+D모두 선택 / 모두 선택 해제
Shift+X / x / Shift+B커서 아래 인스턴스로 들어가기 / 제자리에서 편집 / 돌아오기
Shift+T계층 트리
Ctrl+J좌우 반전 (이동이나 복사 중에도)
Shift+N넷 표시 모드 (Extract 후 도형을 클릭하면 해당 넷 강조)
Ctrl+.빠른 수정: DRC 위반의 수정 후보 (검증 참고)
Enter패스나 폴리곤 완료
Backspace그리는 중 마지막 점 제거
Shift+클릭임의 각도 폴리곤 점
화살표 키이동
Shift+화살표 키선택 항목을 스냅 10단계만큼 미세 이동
Z / Shift+Z상자 확대 / 축소
[ / ]커서 위치에서 확대 / 축소
W / Shift+W이전 / 다음 뷰
F화면에 맞추기
Shift+K모든 자 지우기
Shift+F / Ctrl+F모든 계층 / 최상위만
0 … 8, 9표시할 계층 깊이 (9 = 전체)
같은 지점 다시 클릭겹친 항목을 차례로 선택
오른쪽에서 왼쪽으로 상자상자에 닿는 모든 것 선택 (왼쪽에서 오른쪽: 완전히 포함된 것만)
인스턴스 더블클릭해당 셀 열기

Ctrl+Z는 애플리케이션의 다른 부분과 마찬가지로 실행 취소입니다(Virtuoso에서는 확대에 할당됨).

시뮬레이션 플롯

스크롤로 확대·축소하고, 드래그로 이동하며, 더블클릭으로 보기를 초기화합니다. 트레이스 위에 마우스를 올리면 값을 읽을 수 있습니다.