(c) 2026 Santiago Hofwimmer BSc
Institute for Integrated Circuits and Quantum Computing, Johannes Kepler University (JKU), Linz, Austria
Link to Youtube Channel (tutorials following soon)
[!WARNING] This repository is a Work in Progress.
[!IMPORTANT] It is recomended to use the IIC-OSIC-TOOLS container. Otherwise, you have to install Ngspice, Xschem and IHP-Open-PDK manually as prerequisites.
[!IMPORTANT] Currently, only the IHP-Open-PDK is fully supported, but more will follow soon

Chipify is a high-performance EDA (Electronic Design Automation) tool for mismatch simulations, parameter sweeping, and yield analysis. It wraps Xschem (schematic capture) and Ngspice (circuit simulation) to automate Monte-Carlo and corner sweeps, run them in parallel, and turn the raw results into plots, yield matrices, and reports.
It ships with both a PySide6 (Qt) desktop GUI and a headless CLI, plus a plugin system for custom plots, reports, and expressions.

range, linspace, and logspace parameter sweeps (safely parsed, no eval).
Chipify is a wrapper around external EDA tools, so these must be installed and
available on your PATH:
PySide6-Essentials
(installed automatically by pip; only QtCore/QtGui/QtWidgets are used, so the
larger PySide6 Addons aren’t needed). Qt still needs a few shared libraries that
pip can’t install:
libegl1 / libgl1 (libEGL.so.1 / libGL.so.1) are dlopened when Qt
is imported — required even for the headless test suite. Without them you get
ImportError: libEGL.so.1: cannot open shared object file.libxcb-cursor0 (Qt ≥ 6.5) is needed by the xcb/XWayland platform for
the on-screen GUI; without it a Wayland session falls back to native Wayland,
where dropdown menus don’t close on selection.install.sh installs all of these automatically on Debian/Ubuntu; elsewhere
install them with your package manager (e.g. apt install libegl1 libgl1
libxcb-cursor0). System libraries can’t be declared in
setup.py/pyproject.toml, so they’re handled by install.sh.
It is highly recommended to install and run Chipify inside the IIC-OSIC-TOOLS docker container. This way, all the required tools plus a bunch of open source PDKs are already installed.
python3 -m pip install chipify
chipify
This opens the desktop application where you can edit datasheets, launch sweeps, and explore results interactively.
See examples/datasheet.yaml for a documented
datasheet template (and examples/README.md for how to run
it). Place your datasheet YAML in the input folder (datasheets/ by default), then:
chipify-cli -c my_design.yaml # run a single datasheet
chipify-cli --batch ./datasheets # run every *.yaml in a directory
chipify-cli -c my_design.yaml --json # also print a JSON summary (handy for CI)
chipify-cli -c my_design.yaml --markdown report.md
Results are written to the output folder (out/ by default), including
simulation_results.csv and any generated reports. Run chipify-cli --help
for the full list of options.
User preferences are stored in settings.json in the directory you launch
Chipify from (CPU cores, simulator engine, theme, live plotting, …). The file
is created/updated by the GUI’s settings dialog. Custom equations live in the
datasheet YAML (equations: / transient_equations:), not in settings.json.
By default Chipify uses this layout under the working directory:
| Folder | settings.json key |
Default |
|---|---|---|
| Input datasheets | in_dir |
datasheets/ |
| Simulation output | out_dir |
out/ |
Model files (*.lib/*.mod/*.inc staged for simulation) |
work_dir |
work/ |
| Testbench files | tb_dir |
tb/ |
To relocate any of them, set the corresponding key in settings.json to an
absolute or relative path, e.g.:
{
"out_dir": "results",
"in_dir": "/data/chipify/datasheets"
}
Any key that is missing or blank falls back to its default. Paths are resolved when Chipify starts, so changes take effect on the next launch.
By default each testbench netlists an Xschem schematic (tb/<name>.sch) for you.
If you don’t use schematic entry, set the optional per-testbench source: netlist
key — Chipify then loads an existing SPICE deck for that testbench directly and
skips Xschem. The deck is located by convention, next to where the schematic
would live: tb/<name>.spice for ngspice, tb/<name>.sim for vacask.
tests:
gain_tb: # loads tb/gain_tb.spice instead of tb/gain_tb.sch
engine: ngspice # selects the simulator (and the .spice/.sim extension)
source: netlist # default is "xschem"
gain:
min: 40
unit: dB
In the desktop GUI this is the per-testbench Source dropdown (xschem /
netlist). The engine: key still chooses the simulator. Downstream everything
is unchanged — parameter sweeps, measurement capture, pass/fail specs, and
reports all work exactly as with a schematic.
Authoring an imported netlist:
V1 vdd 0 ). A value that isn’t a placeholder is the
same for every sweep point.{...} braces (inline expressions like {R*2}) — they raise a template
error. Precompute such values in a .control/.param form that doesn’t use
bare braces.let/meas vectors after the
datasheet measurement keys and add your analysis (tran/dc/ac) in a
.control block. Do not hand-write echo MY_DATA:/wrdata lines —
Chipify injects those from the datasheet, just as it does for Xschem output..sim deck that writes a .raw consistent with the
Spectre path; Chipify extracts scalars/waveforms from the .raw file (and any
measure: expressions) in the datasheet..include/.lib must resolve from the staged
scratch dir — put them in work/ (*.lib/*.mod/*.inc are staged
automatically) and reference them by bare filename.Re-running against pre-generated templates (the --templates-dir flag) still
takes precedence over a per-testbench source: netlist.
The examples for chipify can be found here
chipify/ # engine (no GUI-toolkit deps)
cli.py # CLI entry point + GUI launcher
simulator.py # multiprocessing simulation engine
schema.py # datasheet validation + range DSL
expression.py # sandboxed expression evaluation
settings.py # project folder paths (configurable via settings.json)
app_config.py # persistent preferences + logging
data_loader.py # results loading / pass-fail / history (shared, headless)
uikit/ # toolkit-agnostic GUI-support layer (state, services, plugin facade)
gui_qt/ # PySide6 (Qt) desktop GUI (tabs / controllers / workers / widgets)
tests/ # pytest suite for the core engine + GUI smoke tests
See context.md for the full architecture overview and PLUGINS.md for the plugin API.
pip install -e .
pytest # run the test suite
python -m mypy chipify/settings.py # strict type-checking (see pyproject.toml)
Licensed under the Apache License 2.0.