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

하나의 데이터베이스, 전체 설계 루프
대부분의 오픈 소스 플로는 넷리스트와 GDS 파일로 별개의 도구를 이어 붙입니다. IC Studio에서는 회로도, 시뮬레이터, 레이아웃이 하나의 설계 데이터베이스를 공유하므로 각 단계가 서로의 정보를 알고 있습니다.
- 레이아웃은 회로도에서 생성되고 자동으로 배선됩니다.
- 레이아웃은 회로도와 대조 검사(LVS)되며, 차이 항목을 클릭해 바로 찾아갈 수 있습니다.
- 레이아웃에서 추출한 기생 성분이 곧바로 시뮬레이션에 반영됩니다.
주요 기능
회로도와 시뮬레이션
실시간 연결성, 동작점 주석 표시, ngspice와 결과를 맞춘 내장 시뮬레이터(필요하면 ngspice를 자동 선택)로 DC / AC / 과도 / 잡음 해석, Bode 플롯과 자동 측정을 제공합니다.
자동 배치 배선
트랜지스터를 확산 공유, common-centroid 매칭, 더미를 적용한 PCell로 배치하고, rip-up-and-reroute 미로 라우터가 모든 넷을 DRC 위반 없이 배선합니다.
계층형 레이아웃
인스턴스와 어레이, 대형 설계를 위한 LOD 렌더링, 임의 각도에서도 정확한 레이어 불리언 연산, 비아, PCell, GDSII, OASIS, LEF, DEF 입출력을 지원합니다.
검증
증분 실시간 검사를 지원하는 룰 덱 기반 DRC, 트랜지스터·저항·커패시터 추출과 LVS, IR 드롭과 일렉트로마이그레이션, KLayout·Calibre·netgen을 통한 사인오프 실행을 제공합니다.
분석 도구
파형 계산기, 코너 및 파라메트릭 스윕, 공정 편차와 Pelgrom 미스매치를 반영한 몬테카를로, 스펙·수율·데이터시트, 실행 간 결과 비교를 제공합니다.
레이아웃 생성기
가드 링, 비아 어레이, common-centroid 매칭 배치, 밀도 필, 모델 기반 OPC에 더해 시각적 DRC 룰 디자이너와 Virtuoso 호환 SKILL을 제공합니다.
실제 PDK
범용 180 nm 테크놀로지로 시작해 SKY130이나 IHP SG13G2로 전환할 수 있습니다. 레이어, 소자 인식, 모델, 코너를 PDK 파일 하나로 설정합니다.
스크립트와 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급 테크놀로지로 시작합니다.
이 가이드 읽는 법
- 처음 사용하는 경우: 설치 후 빠른 둘러보기, 또는 앱에서 Help > Interactive Tutorial.
- IC Studio를 다른 사람에게 시연하는 경우: 데모 갤러리.
- 회로 설계: 회로도와 시뮬레이션.
- 레이아웃 작성과 검사: 레이아웃, 검증, 회로도 기반 레이아웃.
- 측정, 코너, 몬테카를로, 레이아웃 생성기: 도구.
- 실제 PDK 사용: 테크놀로지.
- 자동화: 명령줄과 MCP 서버.
단축키는 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)이기도 합니다.
| Windows | macOS / 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 메뉴나 액티비티 바 아래쪽의 톱니바퀴로도 열 수 있음):
| 설정 | 의미 |
|---|---|
| Theme | Dark 또는 Light (View > Light Theme / Dark Theme으로도 전환) |
| UI scale | 0.75 ~ 1.75 |
| ngspice | ngspice 실행 파일 경로, Detect 버튼 포함 |
| Interaction | 마우스 프로필: Virtuoso(기본값) 또는 Conventional (단축키 참고) |
| Startup | Reopen last project, 시작 시 Check for updates |
| AI | AI 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_sram512 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. 회로도와 시뮬레이션
- Explorer에서
cmos_inverter를 클릭합니다. 회로도가 열립니다. F5를 누릅니다. Simulation 워크스페이스가 열리고 DC 스윕과 과도 해석 결과가 표시됩니다.- Signals에서 신호를 체크하거나 해제해 플롯을 바꾸고, Measurements에서 MIN / MAX / FINAL을 확인합니다.
Ctrl+2를 눌러 회로도로 돌아갑니다. 동작점의 노드 전압과 드레인 전류가 회로도에 표시됩니다.

rc_lowpass(AC: f -3 dB 열에 코너 주파수가 표시됨)와 ota5t(AC: 개루프 이득과 단위 이득
주파수)도 실행해 보세요.
2. 레이아웃과 계층
cmos_inverter를 연 상태에서Ctrl+4를 누릅니다. 이 레이아웃은 손으로 그린 것입니다.inv_tiles를 엽니다(Explorer에서, 또는Ctrl+K를 누르고inv_tiles입력).Ctrl+휠로 확대·축소하고, 휠이나 마우스 가운데 버튼으로 이동하며,F를 눌러 화면에 맞춥니다.1,2,9를 눌러 표시할 계층 깊이를 바꿉니다.- 인스턴스를 더블클릭하면 배치된 셀이 열립니다.
3. 자동 배치 배선
full_adder를 열고Ctrl+4를 누릅니다. 이 레이아웃은 그린 것이 아니라 회로도에서 생성하고 자동으로 배선한 것입니다.Ctrl+A와Delete를 눌러 지웁니다.- Verify > Generate Layout from Schematic을 선택합니다. 28개 트랜지스터가 배치되고 연결해야 할 곳이 플라이라인으로 표시됩니다.
- Verify > Route Flylines를 선택합니다. 모든 넷이 메탈로 배선됩니다.

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

5. 포스트 레이아웃 시뮬레이션
- Simulation 워크스페이스에서
ring_osc5를 엽니다. F5를 누르고 과도 해석 플롯에서 발진 주기를 확인합니다.- Include layout parasitics를 체크하고
F5를 다시 누릅니다. 콘솔에 추출된 커패시턴스와 저항이 요약됩니다. 주기를 비교해 보면 추가된 배선 커패시턴스와 저항 때문에 발진기가 느려집니다.
6. 인버터를 처음부터 만들기
Ctrl+N을 누르고 셀 이름을my_inv로 입력한 뒤 schematic을 체크한 채로 Create를 누릅니다.P를 누르고 클릭해 PMOS를 배치한 다음,N을 누르고 그 아래를 클릭해 NMOS를 배치합니다.Esc를 누릅니다.W를 누르고 두 드레인을 연결한 다음 두 게이트를 연결합니다.Esc로 와이어를 끝냅니다.S를 누르고 PMOS 소스에 전원 심볼을 배치하고,G를 누르고 NMOS 소스에 접지를 배치합니다. 와이어로 연결합니다.T를 누르고 Net: 필드에in을 입력한 뒤 게이트 와이어를 클릭하고,out을 입력한 뒤 드레인 와이어를 클릭합니다.- 소스를 추가합니다.
V를 누르고 소스를 배치한 뒤p핀을 전원 넷에,n핀을 접지 심볼에 연결하고, 인스펙터에서 DC value를1.8로 설정합니다.in용 두 번째 소스를 배치하고 Transient를PULSE(0 1.8 1n 100p 100p 2n 4n)로 설정합니다. Ctrl+3을 누르고 Transient를 켠 뒤(step10p, stop10n)F5를 누릅니다.- Verify > Generate Layout from Schematic을 선택합니다. 두 트랜지스터가 웰 탭과 함께 PCell로 배치되고, 연결해야 할 곳이 플라이라인으로 표시됩니다.
- Verify > Route Flylines를 선택합니다. 라우터가 넷을 메탈로 배선합니다.
- 오른쪽 패널에서 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_started | cmos_inverter, rc_lowpass, diode_clipper, devices |
analog | current_mirror, ota5t, ota2s |
digital | nand2, nor2, ring_osc5, full_adder |
memory_and_pixels | sram6t, sram_array, aps3t, pixel_array |
hierarchy | inv_chain, inv_array, inv_tiles |
각 주제에는 레이아웃이 배치하는 셀도 들어 있습니다. 예를 들어 hierarchy에는 cmos_inverter가,
pcells에는 PCell이 있습니다.
이 페이지의 후반부에는 청중 앞에서 IC Studio를 시연하기 위한 단계별 데모 스크립트가 있습니다.
하이라이트

full_adder 자동 P&R
레이아웃을 한 번도 그리지 않은 28 트랜지스터 미러 전가산기입니다. 회로도에서 확산을 공유하도록 소자를 배치하고, 모든 넷을 metal1~metal3에 미로 배선했습니다. DRC와 LVS를 통과합니다.

ota2s 자동 P&R 아날로그
2단 OTA입니다. 입력 차동쌍과 전류 미러를 인식해 단위 핑거로 나누고, 더미와 함께 common-centroid 순서로 배치한 뒤 배선합니다. 개루프 이득은 약 80 dB입니다.

sram_array
6T 비트 셀 sram6t의 8 × 8 어레이로, 워드 라인, 비트 라인, 전원 스트랩을 포함합니다. 비트 셀
자체는 DRC와 LVS를 통과하며 쓰기와 유지 동작을 시뮬레이션합니다.
![]()
pixel_array
3T 이미지 센서 픽셀(aps3t: n+ / p-substrate 포토다이오드 위의 리셋, 소스 팔로워, 행 선택)의
8 × 8 어레이로, 행과 열에 레이블이 붙어 있습니다.
전체 데모 셀
| 셀 | 보여 주는 내용 |
|---|---|
full_adder | 자동 배치 배선된 28T 미러 전가산기, 모든 입력 조합에 대한 과도 해석 |
ota2s | common-centroid 매칭을 적용해 자동 P&R한 2단 OTA, AC 개루프 이득 약 80 dB |
cmos_inverter | 손으로 그린 레이아웃의 인버터, LVS가 의도적인 차이(PMOS W, 부하 커패시터)를 보고 |
rc_lowpass | RC 저역 통과 필터(fc 약 159 kHz): OP, AC, 과도 해석 |
diode_clipper | 저항과 션트 다이오드 클리퍼: 과도 해석과 DC 스윕 |
nand2 | 2입력 NAND: 회로도와 배선된 PCell 레이아웃, DRC와 LVS 통과 |
nor2 | 2입력 NOR: 회로도와 배선된 PCell 레이아웃, DRC와 LVS 통과 |
ring_osc5 | 완전히 배선된 5단 링 발진기, 레이아웃 기생 성분을 넣으면 눈에 띄게 느려짐 |
current_mirror | 20 µA 기준 전류의 NMOS 전류 미러: 출력의 DC 스윕 |
ota5t | 5 트랜지스터 OTA: AC 개루프 이득 약 42 dB |
sram6t | DRC와 LVS를 통과한 6T SRAM 비트 셀: 과도 해석으로 쓰기와 유지 |
sram_array | sram6t의 8 × 8 어레이 |
aps3t | DRC와 LVS를 통과한 3T 이미지 센서 픽셀: 과도 해석으로 리셋과 적분 |
pixel_array | aps3t의 8 × 8 어레이 |
inv_chain | 배치된 cmos_inverter 인스턴스 4개 |
inv_array | 인버터 16 × 8 어레이 |
inv_tiles | inv_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분 둘러보기
회로 하나로 전체 루프를 보여 줍니다. 회로도, 시뮬레이션, 자동 레이아웃, 검증, 포스트 레이아웃 시뮬레이션입니다.
-
전가산기 회로도로 앱을 시작합니다.
cargo run --release -- --demo --cell full_adder --workspace schematic -
F5를 누릅니다. Simulation 워크스페이스가 열리고 과도 해석 결과가 표시됩니다.a,b,ci가 여덟 가지 조합을 모두 거치고,s와co가 진리표대로 따라갑니다. -
Ctrl+4를 눌러 레이아웃을 엽니다.Ctrl+A로 모두 선택하고Delete를 누릅니다. 레이아웃이 비워집니다. -
Verify > Generate Layout from Schematic을 선택합니다. 28개 트랜지스터가 웰 탭과 함께 NMOS 행 위의 PMOS 행에 PCell로 나타나고, 아직 연결해야 할 모든 곳이 점선 플라이라인으로 표시됩니다.
-
Verify > Route Flylines를 선택합니다. 플라이라인이 metal1~metal3 와이어와 비아로 바뀌고, 콘솔에 배선된 넷이 보고됩니다.
-
오른쪽 패널에서 Run DRC(위반 없음), 이어서 Run LVS(레이아웃이 회로도와 일치)를 누릅니다.
-
Ctrl+3을 누르고 Include layout parasitics를 체크한 뒤F5를 누릅니다. 콘솔에 추출된 커패시턴스와 저항이 요약되고, 파형에 배선 지연이 반영됩니다.
멘트: “여기 있는 것 중 손으로 그린 것은 하나도 없습니다. 레이아웃은 회로도에서 만들어지고, 라우터가 DRC를 통과하도록 배선하며, LVS가 같은 회로임을 증명하고, 기생 성분은 곧바로 시뮬레이션으로 돌아갑니다. 모두 하나의 데이터베이스 위에서요.”
2. 자동 배치 배선 단계별 시연
레이아웃에 관심이 많은 청중을 위해 천천히 진행합니다. 전가산기나 OTA를 사용합니다.
| 단계 | 할 일 | 예상 결과 |
|---|---|---|
| 1 | Layout 워크스페이스에서 full_adder 열기 | 완성되어 배선된 레이아웃 |
| 2 | Ctrl+A, Delete | 빈 레이아웃 |
| 3 | Verify > Generate Layout from Schematic | 소자 배치, 넷이 허용하는 곳에서 소스 / 드레인 열 공유, 플라이라인 표시 |
| 4 | 마우스로 소자 이동 | 플라이라인이 따라옴: 회로도와의 연결 고리는 인스턴스 이름 |
| 5 | Ctrl+Z | 소자가 원래 위치로 돌아감 |
| 6 | Verify > Route Flylines | 모든 넷 배선, 콘솔에 넷, 연결, 비아, rip-up 수 표시 |
| 7 | 레이아웃에서 소자 클릭 후 Ctrl+2 | 회로도에서 같은 소자가 선택됨(크로스 프로빙) |
| 8 | Run DRC, Run LVS | 위반 없음, 레이아웃이 회로도와 일치 |

멘트: “라우터는 rip-up and reroute 방식의 미로 라우터입니다. 그리드가 소자 단자에 정렬되어 있어서 그리는 결과가 구조적으로 DRC를 통과하고, LVS가 기준으로 삼을 수 있도록 이름 있는 넷에 레이블을 붙입니다.”
3. 아날로그 매칭
생성기가 연결성뿐 아니라 아날로그 구조도 이해한다는 것을 보여 줍니다.
- Layout 워크스페이스에서
ota2s를 열고Ctrl+A,Delete. - Verify > Generate Layout from Schematic. 콘솔에 매칭 그룹이 보고됩니다. 예를 들어 차동쌍과
미러가 양 끝에 더미 핑거를 두고
ABBA로 배치됩니다. - Verify > Route Flylines 후 Run LVS. LVS는 단위 핑거를 다시 회로도의 일곱 소자로 병합하고 더미는 무시합니다.
Ctrl+3과F5를 누릅니다. AC 플롯에 약 80 dB의 개루프 이득이 표시됩니다.
멘트: “차동쌍과 전류 미러는 회로도에서 자동으로 감지됩니다. 아날로그 레이아웃 엔지니어가 하듯이 단위 핑거로 나뉘어 common-centroid 순서로 배치되고, LVS는 여전히 트랜지스터 일곱 개로 인식합니다.”
4. 포스트 레이아웃 효과
- Simulation 워크스페이스에서
ring_osc5를 열고F5를 누릅니다. 발진 주기를 확인합니다. - Include layout parasitics를 체크하고
F5를 다시 누릅니다. 주기가 길어집니다. 레이아웃에서 추출한 배선 커패시턴스와 저항이 링 발진기를 느리게 합니다.
5. 규모
- Layout 워크스페이스에서
inv_tiles를 엽니다. 인버터 8,192개입니다. Ctrl+휠로 확대·축소하고, 휠이나 마우스 가운데 버튼으로 이동하며,F로 화면에 맞춥니다.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) | R | p, n | r=1k |
C | 커패시터 (Capacitor) | C | p, n | c=1p |
L | 인덕터 (Inductor) | L | p, n | l=1n |
V | 전압원 (Voltage Source) | V | p, n | dc=1 |
I | 전류원 (Current Source) | I | p, n | dc=1m |
D | 다이오드 (Diode) | D | a, k | model=dmod |
N | NMOS | M | d, g, s, b | model=nmos w=1u l=180n m=1 |
P | PMOS | M | d, g, s, b | model=pmos w=2u l=180n m=1 |
G | 접지 (Ground) | GND | gnd | (넷 0) |
S | 전원 넷 (Supply Net) | VDD | net | net=vdd |
소자 배치
- 소자 키(예:
N)를 누르거나 Device Library에서 해당 타일을 클릭합니다. - 커서를 따라 미리보기가 표시됩니다. 배치하기 전에
Space로 회전하거나X로 미러할 수 있습니다. - 클릭해 배치합니다. 소자는 그리드에 스냅되고, 비어 있는 다음 이름(
M1,M2, …)을 받으며 선택된 상태가 됩니다. 도구가 계속 활성화되어 있으므로 클릭할 때마다 복사본이 추가로 배치됩니다. Esc를 누르거나 오른쪽 클릭하면 Select로 돌아갑니다.
와이어
W를 누릅니다(또는 Wire 선택).- 시작점을 클릭합니다. 보통 핀에서 시작합니다.
- 다음 점을 클릭합니다. 클릭할 때마다 수평 먼저인 L자형 세그먼트 한 쌍이 추가됩니다.
/를 누르면 수직 먼저로 꺾입니다. - 핀, 와이어 끝점 또는 다른 와이어의 중간을 클릭하면 와이어가 자동으로 끝납니다. 그렇지 않으면
계속 클릭하고, 더블 클릭, 오른쪽 클릭 또는
Esc로 끝냅니다.
연결은 실시간으로 반영됩니다. 연결되지 않은 핀은 작은 사각형으로 표시되고, 세 개 이상의 연결이 만나는 곳에는 접합점(junction dot)이 나타납니다. 와이어에 마우스를 올리거나 선택하면 넷 전체가 하이라이트됩니다.
넷 레이블과 넷 이름
T를 누릅니다(또는 Label 선택). 왼쪽 패널에 Net: 필드가 나타납니다(기본값net1).- 이름을 입력하고 핀이나 와이어를 클릭해 레이블을 붙입니다. 레이블은 정확히 해당 그리드 점에서만 연결됩니다.
- 배치할 때마다 끝의 숫자가 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 dmodM1 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)에서는 활성 셀의 회로도에 대한 해석을 설정하고 실행하며 결과를
확인합니다.

시뮬레이션 실행
- 회로도가 있는 셀을 열고 Simulation 워크스페이스로 전환합니다.
- Analyses에서 실행할 해석을 체크하고 각 필드를 입력합니다.
- Run Simulation,
F5또는Ctrl+Enter를 누릅니다(Simulation > Run 메뉴나 회로도 툴바의 Simulate도 가능).
시뮬레이션은 백그라운드에서 실행됩니다. 다른 워크스페이스에서 시작하면 Simulation 워크스페이스로 전환됩니다. 오류는 빨간색 Simulation error 상자와 콘솔에 표시됩니다.
설정 패널
시뮬레이터
| 필드 | 의미 |
|---|---|
| Backend | Built-in (ics-sim)(기본값), ngspice, Auto (built-in, ngspice when needed)(백엔드 참고) |
| Corner | PDK 모델 라이브러리의 모델 코너. 테크놀로지의 모델에 코너가 있을 때만 표시(기본값: 라이브러리의 기본 코너) |
| Temperature | -55 ~ 200 °C, 기본값 27(.temp로 출력). 내장 엔진은 이 온도에 맞춰 모델을 스케일링 |
| Include layout parasitics | 셀의 레이아웃에서 추출한 기생 성분을 추가(아래 참고). 셀에 레이아웃이 없으면 비활성화 |
백엔드 아래 줄에는 ngspice를 찾았는지, 또는 테크놀로지에 모델 라이브러리가 있어 PDK 모델에 ngspice가 필요한지가 표시됩니다. Auto에서는 엔진이 전환할 ngspice가 무엇인지 보여 줍니다. ngspice 경로는 Settings에서 지정합니다(설치 참고).
해석
| 해석 | 필드(기본값) | 비고 |
|---|---|---|
| Operating Point | 없음(기본으로 켜짐) | 회로도에 결과 표시 |
| DC Sweep | Source, Start 0, Stop 1.8, Step 10m | Source는 회로도의 임의의 V 또는 I 소스 |
| AC Small-Signal | Start freq 1, Stop freq 10g, Points/dec 20 | 디케이드 스윕. 소스에 AC magnitude를 지정 |
| Transient | Step 10p, Stop time 20n | 소스에 Transient 파형을 지정 |
| Noise | Output 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.

동작점
Operating Point 탭에는 노드 전압과 브랜치 전류, 그리고 소자별로 다음 값이 표시됩니다.
- MOS: 동작 영역(cutoff, saturation, triode),
id,vgs,vds,vth,gm,gds - 다이오드:
vd,id,gd - 저항:
v,i,p
소자 상세 값은 내장 엔진에서만 제공됩니다. 노드 전압은 회로도에도 표시됩니다 (회로도 참고).
예제: RC 저역 통과 필터의 과도 해석
ic-studio --demo --cell rc_lowpass --workspace simulation을 실행합니다.- 이 셀에는 Operating Point, AC, Transient가 설정되어 있습니다.
F5를 누릅니다. - AC 탭을 엽니다.
v(out)의 f -3 dB 열에 약 159 kHz가 표시됩니다. - Transient 탭을 열어 입력 펄스와 필터링된 출력을 확인합니다.
- 입력을 바꾸려면 회로도(
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)입니다.
- Runs(기본값 100)와 Seed를 설정합니다(같은 시드에서는 실행 결과가 재현됩니다).
- + Measurement로 측정을 추가합니다. 해석(
op,dc,ac,tran,noise)과 스칼라 결과를 내는 계산기 수식을 지정합니다. 예:op: v(out),ac: bandwidth(v(out)). - Run을 누릅니다. 진행 막대가 샘플 수를 세며, Stop을 누르면 현재 샘플이 끝난 뒤 멈추고 그때까지의 결과를 유지합니다.
- 표에는 측정마다 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 비교
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

