From schematic to sign-off,
in one native app.
IC Studio puts schematic capture, SPICE simulation, layout, automatic place and route, DRC, LVS and parasitic extraction on one design database. Draw a circuit, generate its layout, verify it and simulate it again with the parasitics, without leaving the window or converting a single file.

One database, the whole loop
Most open-source flows chain separate tools through netlists and GDS files. In IC Studio the schematic, the simulator and the layout share one design database, so every step knows about the others:
- Layouts are generated from schematics and routed automatically.
- Layouts are checked against schematics (LVS) with clickable differences.
- Parasitics extracted from the layout flow straight back into simulation.
What you get
Schematic and simulation
Live connectivity, operating-point annotation, DC / AC / transient analyses on a built-in simulator or ngspice, Bode plots and automatic measurements.
Automatic place and route
Transistors placed as PCells with shared diffusion, common-centroid matching and dummies; a rip-up-and-reroute maze router wires every net DRC-clean.
Hierarchical layout
Instances and arrays, level-of-detail rendering for large designs, Boolean layer operations, vias, PCells, GDSII and OASIS in and out.
Verification
Rule-deck DRC with derived layers, connectivity extraction, LVS with device merging, and sign-off runs through KLayout, Calibre or netgen.
Analysis tools
A waveform calculator, corner, parametric and Monte Carlo sweeps with specs, yield and datasheets, and run-to-run comparison of results.
Layout generators
Guard rings, via arrays, common-centroid matched placement and density fill, plus a visual DRC rule designer and Virtuoso-compatible SKILL.
Real PDKs
Start on the generic 180 nm technology, then switch to SKY130 or IHP SG13G2: layers, device recognition, models and corners from one PDK file.
Scriptable and agent-ready
Every action is a command. The ics CLI runs in CI, and the MCP server
lets an AI agent design in the window you are watching.
Try it in one minute
git clone https://github.com/geniuskey/ic-studio
cd ic-studio
cargo run --release -- --demo --cell full_adder --workspace layout
With a release installed, run
ic-studio --demo --cell full_adder --workspace layout instead. The demo project opens on an automatically placed and routed full adder. The
demo gallery walks through every example and has ready-made scripts for
presenting IC Studio live.
What is in the box
Two programs, installed together:
| Program | Purpose |
|---|---|
ic-studio | The desktop application |
ics | Command-line interface for scripting and CI |
ics mcp | The same ics program run as a Model Context Protocol server for AI agents |
All three front ends use the same core library, so a project edited in the app can be simulated, checked or exported from the command line, or driven by an agent.
Main concepts
- Project: a folder holding
ic-studio.json, the technology (tech.json) and one folder per library. Everything is human-readable JSON that diffs well in git. - Library: a named group of cells (the demo project has
workandpcells). - Cell: a design unit with up to three views: schematic, simulation (the analyses set up for the schematic) and layout.
- Workspace: the app has four workspaces, Home, Schematic, Simulation and Layout. The open cells appear as tabs shared by all workspaces; switching workspace shows the same cell in a different view.
- Technology (PDK): layers, GDS numbers, display styles, design rules and electrical coefficients. New projects start with a generic 180 nm-class technology.
How to read this guide
- New users: Installation, then the Quick tour.
- Showing IC Studio to others: the Demo gallery.
- Designing a circuit: Schematic and Simulation.
- Drawing and checking layout: Layout, Verification and Schematic-driven layout.
- Measurements, corners, Monte Carlo and layout generators: Tools.
- Using a real PDK: Technology.
- Automation: Command line and MCP server.
Keyboard shortcuts are written for Windows and Linux (Ctrl). On macOS use Cmd instead.
Press F1 in the app for the full shortcut list, or see Keyboard shortcuts.
Installation
Install a release build with one command, or build IC Studio from source with the Rust toolchain.
Install a release
Windows (PowerShell):
irm https://github.com/geniuskey/ic-studio/releases/latest/download/install.ps1 | iex
macOS (Apple silicon) and Linux (x86_64):
curl -fsSL https://github.com/geniuskey/ic-studio/releases/latest/download/install.sh | sh
The installer downloads the latest release and installs two programs into one folder:
the desktop app ic-studio and the command line tool ics, which is also the MCP server
for AI agents (ics mcp).
| Windows | macOS / Linux | |
|---|---|---|
| Folder | %LOCALAPPDATA%\Programs\IC Studio | ~/.local/share/ic-studio |
| On the PATH | folder added to the user PATH | links in ~/.local/bin |
| Launcher | Start Menu shortcut IC Studio | ~/.local/share/applications/ic-studio.desktop (Linux) |
The installer also:
- registers the MCP server with Claude Code if
claudeis on thePATH(claude mcp add --scope user ic-studio -- <folder>/ics mcp); otherwise it prints that command and the JSON config for other clients (see MCP server); - on macOS, removes the download quarantine attribute;
- on macOS / Linux, prints the line to add to your shell profile if
~/.local/binis not on thePATH. On Windows, open a new terminal to pick up thePATHchange.
To update, run the installer again; this works while the app or an agent is running
(restart them afterwards). The app’s own updater (Help > Check for Updates…) also
replaces ics together with the app.
Options are environment variables:
| Variable | Effect |
|---|---|
ICS_VERSION | Install this release tag, e.g. v0.2.0 (default: latest) |
ICS_INSTALL_DIR | Install into this folder |
ICS_UNINSTALL=1 | Remove the folder, the PATH entry or links, the launcher and the MCP registration |
$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
Release builds exist for Windows x86_64, Linux x86_64 and macOS on Apple silicon. On an Intel Mac, build from source.
Manual download. Each release has
an archive with both programs, ic-studio-<platform>.zip (Windows) or
ic-studio-<platform>.tar.gz (macOS, Linux), where <platform> is windows-x86_64,
linux-x86_64 or macos-aarch64. Unpack it into a folder of your choice and keep the two
programs together: the updater and Add to Claude Code look for ics next to
ic-studio. Put the folder on the PATH to use ics in a terminal.
Build from source
Requirements
- Rust 1.95 or newer from rustup.rs.
- Windows: the MSVC toolchain (
x86_64-pc-windows-msvc), which needs the Visual Studio Build Tools with the “Desktop development with C++” workload. - Linux: the windowing libraries
libxkbcommon-dev libwayland-dev libx11-dev libxcursor-dev libxrandr-dev libxi-dev. - macOS: the Xcode command line tools.
- A GPU driver supported by
wgpu(DX12 on Windows, Vulkan on Linux, Metal on macOS).
Build and run
git clone https://github.com/geniuskey/ic-studio
cd ic-studio
cargo run --release # the desktop app
cargo run --release -- --demo # with the bundled demo designs
cargo run --release -- path/to/project # open a project folder
To build both programs (ic-studio, ics) into target/release/:
cargo build --release --workspace
Launch options
ic-studio [PROJECT_DIR] [--demo] [--cell NAME] [--workspace home|schematic|simulation|layout] [--run]
| Option | Effect |
|---|---|
PROJECT_DIR | Open this project folder |
--demo | Open the demo project (in memory, not saved until you save it) |
--cell NAME, -c NAME | Open the cell with this name |
--workspace W, -w W | Start in this workspace |
--run | Run the cell’s simulation on startup |
Example: cargo run --release -- --demo --cell inv_tiles --workspace layout.
Without arguments, the app reopens the most recent project if Reopen last project is checked in Settings (the default), otherwise it shows the welcome page.
ngspice (optional)
IC Studio has its own built-in simulator, so ngspice is not required. To use ngspice as a backend, install it:
- Windows: the official build, which installs to
C:\Spice64\bin\ - macOS:
brew install ngspice - Linux:
apt install ngspice(or your distribution’s package)
IC Studio looks for /opt/homebrew/bin/ngspice, /usr/local/bin/ngspice,
/usr/bin/ngspice and C:\Spice64\bin\ngspice.exe, then for ngspice on the PATH.
To use another location, open File > Settings… (Ctrl+,), enter the path in the
ngspice field and press Detect. The status bar and the console show whether
ngspice was found.
On Windows, ngspice.exe is the GUI build; if detection or batch simulation fails, point
the setting at the console binary ngspice_con.exe in the same folder.
Settings
File > Settings… (Ctrl+,, also in the Tools menu, or the gear at the bottom of the
activity bar):
| Setting | Meaning |
|---|---|
| Theme | Dark or Light (also View > Light Theme / Dark Theme) |
| UI scale | 0.75 to 1.75 |
| ngspice | Path to the ngspice executable, with Detect |
| Interaction | Mouse profile: Virtuoso (default) or Conventional (see Keyboard shortcuts) |
| Startup | Reopen last project; Check for updates on startup |
| AI | AI Models…: provider, model and API key of the Design Copilot |
| AI agents (MCP) | Add to Claude Code registers ics mcp with Claude Code; Copy MCP config copies the JSON for other clients (see MCP server) |
Settings and the recent-projects list are stored by the app between sessions.
Example projects with real PDKs
Scripts download open-source designs into examples/ (git-ignored) as ready-to-open
projects:
./scripts/fetch-examples.sh # macOS / Linux (curl, gunzip)
./scripts/fetch-examples.ps1 # Windows PowerShell
# --caravel / -Caravel also the full caravel chip (52 MB download, 278 MB unpacked)
# --force / -Force rebuild the projects from the downloaded files
examples/sky130: SKY130 layer set with the efabless caravel librariescaravel_clocking,housekeepingandchip_io(andcaravel).examples/gf180: GF180MCU layer set with thegf180mcu_fd_sc_mcu7t5v0standard cells and thegf180mcu_fd_ip_sram512 x 8 SRAM macro.
Open them with File > Open Project… or ic-studio examples/sky130.
Quick tour
This tour walks through the demo project: simulation, hierarchical layout, automatic place and route, verification and post-layout simulation. It ends by building a small circuit from scratch.
Open the demo project
cargo run --release -- --demo
Or choose Open demo project on the welcome page (File > New Demo Project). The demo
lives in memory until you save it with Ctrl+S. All cells are in the work library and
use the generic 180 nm technology.
The demo gallery describes every cell, and has scripts for presenting IC Studio to others.
The pcells library holds the PCell variants the layouts use.
1. Schematic and simulation
- In the Explorer, click
cmos_inverter. The schematic opens. - Press
F5. The Simulation workspace opens with the DC sweep and transient results. - Tick or untick signals in Signals to change the plot; read MIN / MAX / FINAL in Measurements.
- Press
Ctrl+2to go back to the schematic: node voltages and drain currents from the operating point are annotated on it.

Try rc_lowpass (AC: the f -3 dB column shows the corner frequency) and ota5t
(AC: open-loop gain and unity-gain frequency).
2. Layout and hierarchy
- Press
Ctrl+4withcmos_inverteropen. This layout was drawn by hand. - Open
inv_tiles(Explorer, orCtrl+Kand typeinv_tiles). Zoom withCtrl+wheel, pan with the wheel or the middle mouse button, and pressFto fit. - Press
1,2and9to change how many hierarchy levels are drawn. - Double-click an instance to open the placed cell.
3. Automatic place and route
- Open
full_adderand pressCtrl+4. This layout was not drawn: it was generated from the schematic and routed automatically. - Press
Ctrl+AandDeleteto clear it. - Choose Verify > Generate Layout from Schematic. The 28 transistors are placed and flylines show the connections to make.
- Choose Verify > Route Flylines. Every net is routed on metal.

4. Verification
- Open
nand2and switch to the Layout workspace. - In the right panel, press Run DRC: no violations.
- Press Run LVS: the layout matches the schematic.
- Open
cmos_inverterand run LVS: it lists the deliberate differences. Click one to zoom to it.

5. Post-layout simulation
- Open
ring_osc5in the Simulation workspace. - Press
F5and note the oscillation period in the transient plot. - Tick Include layout parasitics and press
F5again. The console summarises the extracted capacitance and resistance. Compare the period: the added wire capacitance and resistance slow the oscillator down.
6. Build an inverter from scratch
- Press
Ctrl+N, name the cellmy_inv, keep schematic checked, and press Create. - Press
Pand click to place a PMOS, then pressNand click below it to place an NMOS. PressEsc. - Press
Wand wire the two drains together, then the two gates.Escends a wire. - Press
Sand place a supply symbol on the PMOS source; pressGand place ground on the NMOS source. Wire them. - Press
T, typeinin the Net: field and click on the gate wire; typeoutand click on the drain wire. - Add the sources: press
V, place a source, wire itsppin to the supply net and itsnpin to a ground symbol; set DC value to1.8in the inspector. Place a second source forinwith TransientPULSE(0 1.8 1n 100p 100p 2n 4n). - Press
Ctrl+3, enable Transient (step10p, stop10n) and pressF5. - Choose Verify > Generate Layout from Schematic. The two transistors are placed as PCells with well taps, and flylines show the connections to make.
- Choose Verify > Route Flylines. The router wires the nets on metal.
- Run DRC and LVS from the right panel, then save with
Ctrl+S.
See Schematic-driven layout for what the generator and the router do, and how to match devices.
7. Command line
The same project can be checked from a terminal:
ics new demo --template demo
ics sim demo ota5t
ics drc demo nand2
ics lvs demo nand2
See Command line.
Demo gallery
Every example below ships with IC Studio. Open them all with:
cargo run --release -- --demo
or choose Open demo project on the welcome page. The demo uses the generic 180 nm
technology and lives in memory until you save it with Ctrl+S. To jump straight to a cell,
add --cell <name> --workspace <schematic|simulation|layout>.
The second half of this page has step-by-step demo scripts for showing IC Studio to an audience.
Highlights

full_adder auto P&R
A 28-transistor mirror full adder whose layout was never drawn: devices placed from the schematic with shared diffusion, every net maze-routed on metal1 to metal3. DRC and LVS clean.

ota2s auto P&R analog
A two-stage OTA. The input pair and the current mirror are recognised, split into unit fingers, placed in common-centroid order with dummies, then routed. About 80 dB open-loop gain.

full_adder simulation
The adder’s transient run cycles through all eight input combinations; the sum and carry waveforms are the truth table.

sram_array
An 8 × 8 array of the 6T bit cell sram6t, with word lines, bit lines and supply
straps. The bit cell itself is DRC and LVS clean and simulates a write and hold.
![]()
pixel_array
An 8 × 8 array of 3T image sensor pixels (aps3t: reset, source follower, row select
over an n+ / p-substrate photodiode) with labelled rows and columns.

inv_tiles
8,192 inverters in two levels of arrays, about 250k flattened shapes. Level-of-detail rendering keeps pan and zoom smooth.
All demo cells
| Cell | What it shows |
|---|---|
full_adder | 28T mirror full adder, placed and routed automatically; transient over all input combinations |
ota2s | Two-stage OTA, auto P&R with common-centroid matching; about 80 dB open-loop gain in AC |
cmos_inverter | Inverter with a hand-drawn layout; LVS reports deliberate findings (PMOS W, load cap) |
rc_lowpass | RC low-pass filter (fc about 159 kHz): OP, AC and transient |
diode_clipper | Resistor and shunt diode clipper: transient and DC sweep |
nand2 | 2-input NAND: schematic plus routed PCell layout, DRC and LVS clean |
nor2 | 2-input NOR: schematic plus routed PCell layout, DRC and LVS clean |
ring_osc5 | 5-stage ring oscillator, fully routed; slows down visibly with layout parasitics |
current_mirror | NMOS current mirror with a 20 µA reference: DC sweep of the output |
ota5t | 5-transistor OTA: about 42 dB open-loop gain in AC |
sram6t | 6T SRAM bit cell, DRC and LVS clean: transient write and hold |
sram_array | 8 × 8 array of sram6t |
aps3t | 3T image sensor pixel, DRC and LVS clean: transient reset and integration |
pixel_array | 8 × 8 array of aps3t |
inv_chain | Four placed cmos_inverter instances |
inv_array | 16 × 8 array of inverters |
inv_tiles | 8 × 8 array of inv_array: 8,192 inverters, two levels of hierarchy |
devices | One instance of every PCell |
Every cell with both a schematic and a layout (full_adder, ota2s, nand2, nor2,
ring_osc5, current_mirror, ota5t, sram6t, aps3t) runs the whole flow:
simulate, open the layout, run DRC and LVS, and simulate again with parasitics.
Demo scripts
Each script is a sequence you can run in front of an audience, with the result to expect at every step. The blue boxes suggest what to say.
1. Five-minute tour
The whole loop on one circuit: schematic, simulation, automatic layout, verification and post-layout simulation.
-
Start the app on the adder’s schematic:
cargo run --release -- --demo --cell full_adder --workspace schematic -
Press
F5. The Simulation workspace opens with the transient run:a,bandcistep through all eight combinations, andsandcofollow the truth table. -
Press
Ctrl+4for the layout. Select everything withCtrl+Aand pressDelete. The layout is empty. -
Choose Verify > Generate Layout from Schematic. The 28 transistors appear as PCells in a PMOS row over an NMOS row, with well taps, and dashed flylines show every connection still to make.
-
Choose Verify > Route Flylines. The flylines are replaced by metal1 to metal3 wires and vias; the console reports the nets routed.
-
In the right panel press Run DRC (no violations), then Run LVS (the layout matches the schematic).
-
Press
Ctrl+3, tick Include layout parasitics and pressF5. The console summarises the extracted capacitance and resistance, and the waveforms now include the wiring delay.
Say: “Nothing here was drawn by hand. The layout comes from the schematic, the router makes it DRC clean, LVS proves it is the same circuit, and the parasitics go straight back into the simulation, all on one database.”
2. Auto place and route, step by step
Slower, for an audience that cares about layout. Use the adder or the OTA.
| Step | Do | Expect |
|---|---|---|
| 1 | Open full_adder in the Layout workspace | The finished, routed layout |
| 2 | Ctrl+A, Delete | An empty layout |
| 3 | Verify > Generate Layout from Schematic | Devices placed; source / drain columns shared where nets allow; flylines on |
| 4 | Move a device with the mouse | Its flylines follow it: the link to the schematic is the instance name |
| 5 | Ctrl+Z | The device goes back |
| 6 | Verify > Route Flylines | All nets routed; the console lists nets, connections, vias and rip-ups |
| 7 | Click a device in the layout, then Ctrl+2 | The same device is selected in the schematic (cross-probing) |
| 8 | Run DRC, Run LVS | No violations; layout matches schematic |

Say: “The router is a maze router with rip-up and reroute. Its grid is aligned to the device terminals, so what it draws is DRC clean by construction, and it labels the named nets so LVS can anchor them.”
3. Analog matching
Shows that the generator understands analog structure, not only connectivity.
- Open
ota2sin the Layout workspace,Ctrl+A,Delete. - Verify > Generate Layout from Schematic. The console reports the matched groups,
for example the differential pair and the mirror placed as
ABBAwith dummy fingers at both ends. - Verify > Route Flylines, then Run LVS. LVS merges the unit fingers back into the seven schematic devices and ignores the dummies.
- Press
Ctrl+3andF5. The AC plot shows about 80 dB of open-loop gain.
Say: “Differential pairs and current mirrors are detected from the schematic. They are split into unit fingers and placed in common-centroid order, the way an analog layout engineer would, and LVS still sees seven transistors.”
4. Post-layout effects
- Open
ring_osc5in the Simulation workspace and pressF5. Note the oscillation period. - Tick Include layout parasitics and press
F5again. The period gets longer: the wire capacitance and resistance extracted from the layout slow the ring down.
5. Scale
- Open
inv_tilesin the Layout workspace: 8,192 inverters. - Zoom with
Ctrl+wheel, pan with the wheel or the middle mouse button,Fto fit. - Press
1,2and9to change how many hierarchy levels are drawn, and double-click an instance to descend into it.
6. Command line and CI
The same flow without a window, from a SPICE netlist to a verified GDS. Save this as
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
Then:
ics new demo # project with the demo cells
ics schematic demo my_ota ota.cir # netlist -> schematic and simulation setup
ics route demo my_ota --place # place, route, save
ics drc demo my_ota # 0 violations
ics lvs demo my_ota # layout matches schematic
ics sim demo my_ota --parasitics # post-layout AC
ics gds demo my_ota -o my_ota.gds # stream out
Every command exits non-zero on failure, so the sequence drops into a CI job as is. See Command line.
7. An AI agent designs while you watch
With the MCP server registered in an agent such as Claude Code, start the app
(cargo run --release -- --demo) and ask the agent:
In the open IC Studio project, create a cell
my_otafrom this netlist (pasteota.cir), generate its layout, route it, run DRC and LVS, then simulate AC and tell me the open-loop gain.
The status bar shows MCP live. The schematic appears in the window, then the placed
devices, the routed wires, the DRC and LVS results and the AC plot, each logged in the
console as MCP · <tool> .... Every layout step can be undone with Ctrl+Z.

Say: “The agent uses the same commands as the menus. It is not generating a file for you to import; it is working in your session, and you can take over at any point.”
Projects, libraries and cells
The window

- Menu bar (see Menus below) with a breadcrumb
project > library > cell. A dot after the cell name means unsaved changes. On the right, Search commands… opens the command palette. - Activity bar (far left): the four workspaces Home, Schematic, Simulation and Layout
(
Ctrl+1toCtrl+4), and the Settings gear at the bottom. - Explorer: libraries, cells and their views.
- Cell tabs above the editor.
Ctrl+Wcloses the active tab. - Bottom panel (
Ctrl+J): Console (log), CIW (SKILL prompt), Problems (schematic checker findings) and Netlist (the SPICE netlist of the active cell). - Menus: File, Edit, View, Simulation, Verify, Tools (design copilot, optimizer, calculator, sweeps, results and browsers, generators, DRC rule designer, stream layer map, dummy fill, SKILL; see Tools) and Help (user guide, shortcuts, check for updates). In the Layout workspace the Create and Options menus are added.
- Status bar: workspace, zoom, selection, technology name, ngspice status and, while an agent is connected, “MCP live”.
Creating and opening projects
The welcome page (shown when no project is open) has three cards: Open demo project, New project… and Open project…, plus a list of recent projects.
- File > New Project…: enter a name (letters, digits,
_and-) and a parent folder. The project is created in<folder>/<name>with the generic 180 nm technology. Check the demo option to start from the demo designs instead. - File > New Demo Project: creates the demo project in memory. Use File > Save to choose a folder.
- File > Open Project… (
Ctrl+O): pick the project folder (the one containingic-studio.json). File > Open Recent lists recent projects. - File > Save (
Ctrl+S) and Save As… (Ctrl+Shift+S). When saving to a folder that is neither empty nor an existing project, a subfolder named after the project is created. - File > Close Project. Closing, quitting or opening another project with unsaved changes asks whether to Save, Discard or Cancel.
Cells and views
- New cell (
Ctrl+N, the+in the Explorer header or + New cell on the Home page): choose the library, a cell name, an optional description and which views to create (schematic, layout). - Click a cell in the Explorer to open it. Expand it to see its schematic, simulation and layout views; a missing view is shown dimmed with + create, and clicking it creates an empty view.
- Right-click a cell for Open schematic, Open layout, Rename… and Delete…. Deleting removes the cell’s files from disk when the project is saved.
- The Home workspace shows the project overview: a thumbnail card per cell, plus + New cell, Import GDS / OASIS… and Export library GDS… buttons.
Command palette
Ctrl+K or Ctrl+Shift+P opens the palette. Type words to filter (all words must
match), use the arrow keys and Enter to run a command, Esc to close. It contains every
menu action plus Open <lib>/<cell> · schematic and · layout entries for every
cell, which makes it the fastest way to jump between cells.
On-disk format
A project is a folder of plain JSON files that work well with version control:
myproj/
ic-studio.json project manifest
tech.json technology: layers, rules, DRC deck, coefficients
work/ one folder per library
cmos_inverter/ one folder per cell
cell.json cell metadata (name, description)
schematic.json schematic view (if present)
layout.json layout view (if present)
sim.json simulation setup
Libraries imported from GDS are stored differently (as a GDS file in the library folder
with a library.json), so large imports stay compact.
Import and export
| Action | Menu |
|---|---|
| Import a GDSII or OASIS file as a new library | File > Import > GDSII / OASIS… |
| Import a KLayout layer properties file as the technology | File > Import > KLayout layer properties… |
| Replace the technology with a PDK file | File > Import > PDK… |
| Export the active cell’s SPICE netlist | File > Export > SPICE netlist… |
| Export the active cell and everything it places to GDSII / OASIS | File > Export > Cell GDSII… / Cell OASIS… |
| Export every layout in the project to one GDSII / OASIS file | File > Export > Library GDSII… / Library OASIS… |
GDS / OASIS import keeps the hierarchy. Layers that are not in the technology are added to it
(and reported in the console). After import, the top cell opens in the Layout workspace.
See Technology for .lyp and PDK import.
Schematic editor
Open a cell’s schematic view (or press Ctrl+2 with a cell open) to edit it.

- Left panel: Tools (Select, Wire, Label), the Device Library with one tile per primitive and its shortcut letter, and a short shortcut reminder.
- Toolbar: the current tool, undo / redo, rotate, mirror, duplicate, fit, the Grid
and Annotate OP checkboxes, and Simulate (
F5). - Right panel: the property inspector.
Schematic coordinates are integer grid points. Keys act on the canvas only while the mouse is over it and no text field has focus.
Devices
| Key | Device | Name prefix | Pins | Default parameters |
|---|---|---|---|---|
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 | (net 0) |
S | Supply Net | VDD | net | net=vdd |
Placing a device
- Press the device key (for example
N) or click its tile in the Device Library. - A ghost follows the cursor. Press
Spaceto rotate orXto mirror it before placing. - Click to place. The device snaps to the grid, gets the next free name (
M1,M2, …) and is selected. The tool stays active, so further clicks place more copies. - Press
Escor right-click to return to Select.
Wires
- Press
W(or choose Wire). - Click the start point, usually a pin.
- Click the next point. Each click adds an L-shaped pair of segments, horizontal first;
press
/to bend vertical first. - The wire ends automatically when a click lands on a pin, a wire end or the interior of
another wire. Otherwise keep clicking, and end with double-click, right-click or
Esc.
Connections are live: pins that are not connected are drawn as small squares, and a junction dot appears where three or more connections meet. Hovering or selecting a wire highlights its whole net.
Net labels and net names
- Press
T(or choose Label). A Net: field appears in the left panel (defaultnet1). - Type the name and click on a pin or wire to attach the label. Labels connect only at their exact grid point.
- A trailing number is incremented after each placement (
net1,net2, …), which is handy for buses of labels.
Labels with the same name are the same net, so labels connect parts of a schematic
without wires. Net names are chosen in this order: the Ground symbol (net 0), the
Supply Net symbol’s net parameter (blank means vdd), net labels, then automatic
names (net1, net2, …).
Notes:
- Only the Ground symbol makes net
0. A label calledgndis an ordinary net. - A Supply Net symbol only names a net. Place a voltage source on it to power it.
- Two different names on one net produce the warning “Net names ‘a’ and ‘b’ are shorted together”.
Selecting and editing
| Action | How |
|---|---|
| Select one object | Click it (labels take priority over wires, wires over devices) |
| Add or remove from selection | Shift+click or Ctrl+click |
| Box select | Drag on empty space (selects objects fully inside; Shift adds) |
| Select all | Ctrl+A |
| Move | Drag a selected object; attached wires stretch with moved pins |
| Rotate / mirror | Space / X, or the toolbar buttons |
| Duplicate | Ctrl+D (copies offset by two grid points, renamed) |
| Delete | Del or Backspace |
| Undo / redo | Ctrl+Z / Ctrl+Shift+Z or Ctrl+Y |
| Fit to window | F |
| Cancel | Esc cancels a wire, then returns to Select, then clears the selection |
Property inspector
Select a single device to edit it in the right panel. Values are SPICE strings typed as
they would appear in a netlist, with SPICE scale suffixes: 10k, 2.2p, 180n, 1meg.
- Name: the instance name. It must be unique; it also ties the device to its layout instance.
- Device fields: Resistance, Capacitance, Inductance / L, Model, Width, Multiplier, Net name (supply).
- Sources: DC value, AC magnitude (for AC analysis, e.g.
1) and Transient (e.g.PULSE(0 1 0 1n 1n 5n 10n);SIN(...)andPWL(...)also work). - Orientation and Position, and a Connections list showing the net on each pin.
With nothing selected, the inspector shows statistics (instances, wires, nets), the list of nets with their pin counts, and any Warnings (unconnected pins, duplicate names, shorted net names).
The Problems tab of the bottom panel runs the schematic checker on the active cell as you edit: missing ground, bad or duplicate names, missing or invalid values, shorted devices, voltage-source loops, floating nets, dangling wires and more. Click a finding to select its devices. Tools > Check Schematic runs the check on demand, and File > Check and Save saves only when there are no errors. See Check Schematic for every check.
Netlist
The Netlist tab of the bottom panel shows the SPICE deck of the active cell, updated as you edit. Export it with File > Export > SPICE netlist…. The netlister writes:
R1 p n value,C...,L...V1 p n DC <dc> [AC <ac>] [<tran>], likewise for current sourcesD1 a k dmodM1 d g s b <model> w=... l=... [m=...]; an unconnected bulk pin is tied to the source- default level-1 models
nmos,pmosanddmodwhen they are used. With a PDK model library, MOS models map to the PDK devices (subcircuit devices get anXprefix) and the library is loaded at the chosen corner.
Operating point annotation
After an operating point simulation, Annotate OP (on by default) shows each node
voltage as a tag on the schematic and the current id=... under each transistor and
diode.

Cross-probing
When a cell has both a schematic and a layout, selecting devices in one editor selects the
devices with the same names in the other. Unit fingers of a matched device (M1.1,
M1.2, …) map back to M1.
Simulation
The Simulation workspace (Ctrl+3) sets up and runs analyses of the active cell’s
schematic and shows the results.

Running a simulation
- Open a cell with a schematic and switch to the Simulation workspace.
- In Analyses, tick the analyses to run and fill in their fields.
- Press Run Simulation,
F5orCtrl+Enter(also Simulation > Run or Simulate in the schematic toolbar).
Simulation runs in the background. Starting it from another workspace switches to the Simulation workspace. Errors appear in a red Simulation error box and in the console.
Setup panel
Simulator
| Field | Meaning |
|---|---|
| Backend | Built-in (ics-sim) (default) or ngspice |
| Corner | Model corner of the PDK model library; shown only when the technology’s models have corners (default: the library’s default corner) |
| Temperature | -55 to 200 °C, default 27 (written as .temp) |
| Include layout parasitics | Add parasitics extracted from the cell’s layout (see below); disabled when the cell has no layout |
The line under the backend shows whether ngspice was found, or that PDK models need ngspice when the technology has a model library. Set the ngspice path in Settings (see Installation).
Analyses
| Analysis | Fields (defaults) | Notes |
|---|---|---|
| Operating Point | none (on by default) | Annotates the schematic |
| DC Sweep | Source, Start 0, Stop 1.8, Step 10m | Source is any V or I source in the schematic |
| AC Small-Signal | Start freq 1, Stop freq 10g, Points/dec 20 | Decade sweep; give a source an AC magnitude |
| Transient | Step 10p, Stop time 20n | Give a source a Transient waveform |
Fields with an invalid value turn red; validation messages appear under the card.
Extra SPICE lines
Lines in this collapsible section are appended verbatim to the deck before the analyses,
for example .options reltol=1e-4. Show netlist displays the generated deck next to the
results.
The setup (backend, corner, analyses, temperature, parasitics flag, extra lines and the
sweep setup) is saved per cell in sim.json.
Results
Each analysis has its own tab: Operating Point, DC Sweep, AC, Transient.
The tab bar shows the backend and run time, and CSV exports the current dataset (AC
values as name_re / name_im columns).
Waveforms
- Signals (right): tick signals to plot. Filter narrows the list, all V selects
every node voltage, clear clears the selection. By default
v(out),v(in),v(vout)andv(vin)are shown when present, otherwise the first three voltages. The selection is kept per analysis between runs. Waveforms plotted from the Waveform Calculator appear here as signals named after their expression. - Compare runs (above the signal list): the earlier runs of the cell. Tick one to draw its signals dashed on the same plot and list them in the measurements (see Results Browser).
- Plot: DC and transient results share one plot. AC results are a Bode pair: Magnitude (dB) over Phase (°) on a logarithmic frequency axis, with linked zoom and cursor. Hover a trace to read values. Scroll to zoom, drag to pan, double-click to reset.
- Measurements (bottom), one row per plotted signal:
- DC and transient: MIN, MAX, PEAK-PEAK, FINAL.
- AC: GAIN @ fstart, PEAK, f -3 dB, UNITY GAIN f.

Operating point
The Operating Point tab lists node voltages and branch currents, and per device:
- MOS: region (cutoff, saturation, triode),
id,vgs,vds,vth,gm,gds - diode:
vd,id,gd - resistor:
v,i,p
Device details come from the built-in engine only. The node voltages are also drawn on the schematic (see Schematic).
Example: transient of the RC low-pass
- Run
ic-studio --demo --cell rc_lowpass --workspace simulation. - The cell has Operating Point, AC and Transient set up. Press
F5. - Open the AC tab: the f -3 dB column shows about 159 kHz for
v(out). - Open the Transient tab to see the input pulse and the filtered output.
- To change the input, go to the schematic (
Ctrl+2), select the source, edit Transient, and pressF5again.
Measurements, corners and Monte Carlo
- Tools > Waveform Calculator evaluates expressions on the results, such as
bandwidth(v(out)/v(in)),risetime(v(out))orphasemargin(v(out)), and plots derived waveforms. See Waveform Calculator. - Tools > Corner / Sweep Manager runs the setup over model corners, temperatures and parameter values, and Monte Carlo variations, in parallel; specs with limits are checked on every point, with statistics, yield, overlaid waveforms and an HTML datasheet. See Corner / Sweep Manager.
- Tools > Results Browser keeps earlier runs for comparison, for example the schematic against the post-layout simulation.
Post-layout simulation
When Include layout parasitics is ticked and the cell has a layout, IC Studio extracts the layout, matches its nets to the schematic through LVS and adds to the deck:
- wire capacitance to substrate (
Cpar_*), - lateral and overlap coupling capacitance between nets (
Cc_*), - MOS drain / source junction sizes (
ad as pd ps) from the drawn diffusion, - an RC network of wire, via and gate resistance (
Rpar_*), with each MOS terminal moved to the nearest node of its net.
Coupling to a layout net with no schematic counterpart is lumped to ground. The console
shows a one-line summary. For a useful result, the layout should be LVS clean (see
Verification). From the command line: ics sim <project> <cell> --parasitics.
Backends
Built-in engine
A modified nodal analysis engine written in Rust. It supports:
- elements
R C L V I D M(no subcircuits or behavioural sources), - sources:
DC,AC mag [phase],PULSE(v1 v2 td tr tf pw per),SIN(vo va freq td theta),PWL(t v ...), - directives
.model,.op,.dc,.ac,.tran,.temp,.end; other dot lines such as.options,.paramand.subcktare ignored, and a deck with.includeor.libis rejected (model libraries need ngspice), - diode model (
is,n,cjo) and MOS level 1 (vto,kp,lambda,gamma,phi,tox,cgso,cgdo,cj,cjsw) with instance parametersw l m ad as pd ps.
The generic nmos / pmos models the netlister writes use vto = ±0.45 and
kp = 280u / 70u; a MOS model parameter left out defaults to vto = ±0.7, kp = 2e-5.
ngspice
With the ngspice backend, IC Studio runs ngspice in batch mode and reads its raw output.
ngspice reads the deck itself, so subcircuit devices (X), .include and .lib model
libraries of a PDK work; IC Studio only takes the analyses (.op, .dc, .ac, .tran)
from the deck when the setup lists none.
Layout editor
Open a cell’s layout view (or press Ctrl+4 with a cell open). Layout coordinates are
database units (1 dbu = 1 nm in the generic technology, y pointing up); the inspector shows
µm. Every point snaps to the snap grid (the Snap field in the toolbar, a multiple of the
technology grid). The editor follows Virtuoso conventions: two-click commands with a prompt
in the top-left corner of the canvas, bindkeys (S stretch, M move, C copy, Shift+C chop, O via, T layer tap, u undo,
Z zoom box, W previous view, q properties, F3 command options, F4 partial
select, …; see Keyboard shortcuts), floating option forms, a middle-click
pop-up menu, gravity snapping and design-rule-driven feedback. In the Layout workspace the
menu bar adds Create and Options menus, and Edit, View and Verify gain
the layout commands; every item shows its bindkey, and the command palette lists them as
“Layout