IHP GDSFactory PDK#
A GDSFactory-based Process Design Kit for the IHP SG13G2 130nm BiCMOS open-source technology. It provides parametric layout cells, design rule constants, simulation models, and example designs for tape-out-ready integrated circuits.
Quick start#
Use Python 3.11, 3.12 or 3.13. We recommend VSCode as an IDE.
uv pip install ihp-gdsfactory --upgrade
Then you need to restart Klayout to make sure the new technology installed appears and start generating IHP-SG13G2 GDSII immediately!
import gdsfactory as gf
from ihp import PDK
from ihp.cells import nmos, rfnmos, npn13G2, rsil, cmim
PDK.activate()
# Create a parametric NMOS transistor
c = nmos(width=1.0, length=0.13, nf=4)
c.write_gds("my_nmos.gds")
c.show() # opens in KLayout
Available devices#
Category |
Device |
|
|
|---|---|---|---|
FET |
nmos |
|
|
pmos |
|
|
|
nmos_hv |
|
|
|
pmos_hv |
|
|
|
RF FET |
rfnmos |
|
|
rfpmos |
|
|
|
rfnmos_hv |
|
|
|
rfpmos_hv |
|
|
|
Bipolar |
npn13G2 |
|
|
npn13G2L |
|
|
|
npn13G2V |
|
|
|
pnpMPA |
|
|
|
Resistor |
rsil (silicided poly) |
|
|
rppd (p-poly) |
|
|
|
rhigh (high-R) |
|
|
|
Capacitor |
cmim (MIM) |
|
|
rfcmim (RF MIM) |
|
|
|
cmom (MOM) |
|
– |
|
Inductor |
inductor2 |
|
|
inductor3 |
|
|
|
Passive |
svaricap (MOS varicap) |
|
|
ESD protection |
|
|
|
ntap1 / ptap1 |
|
|
|
guard_ring |
|
– |
|
sealring |
|
|
|
Diode |
diodevdd 2kV/4kV |
|
– |
diodevss 2kV/4kV |
|
– |
|
schottky_nbl1 |
|
– |
|
Antenna |
dantenna / dpantenna |
|
|
Bondpad |
bondpad |
|
|
cells/ functions are fully parametric pure-Python implementations. cells2/ functions wrap the original IHP PyCell library (requires CNI runtime). Entries marked -- are only available in one implementation.
Project structure#
ihp/
├── cells/ # Pure GDSFactory parametric layout cells
│ ├── fet_transistors.py # NMOS/PMOS (standard & HV)
│ ├── rf_transistors.py # RF-MOSFETs with guard/gate rings
│ ├── bjt_transistors.py # SiGe HBTs (npn13G2, npn13G2L, npn13G2V, pnpMPA)
│ ├── resistors.py # Polysilicon & metal resistors
│ ├── capacitors.py # MIM & MOS capacitors
│ ├── inductors.py # Spiral inductors
│ ├── passives.py # Diodes, varactors, guard rings
│ ├── primitives.py # Schematic-only VLSIR elements (R, L, C, sources)
│ ├── via_stacks.py # Via stack generators
│ └── fixed.py # Pre-built GDS imports (SiGe HBTs, etc.)
├── cells2/ # Legacy PyCell reference implementations (CNI-based)
├── models/ # Compact models & SAX S-parameter models
├── gds/ # Pre-built GDS files for complex cells
├── tech.py # Layer map, design rules, technology parameters
├── layers.yaml # Layer definitions
└── config.py # Paths and PDK configuration
tests/
├── test_cells.py # GDS regression & settings tests for all cells
├── test_xor_transistors.py # Polygon-exact XOR tests (GDSFactory vs PyCell)
└── gds_ref/ # Golden reference GDS files
docs/ # Jupyter Book documentation (Sphinx)
Key architectural concepts:
cells/contains pure GDSFactory implementations — each@gf.cellfunction builds geometry from scratch usingadd_polygonand design rule constants fromtech.py. No external layout tools are needed at runtime.cells2/holds the original IHP PyCell implementations (CNI/OpenAccess-based). These serve as the reference for XOR verification — every polygon incells/is tested to matchcells2/exactly.models/provides SAX-compatible S-parameter models and a VLSIR bridge (to_vlsir.py) for SPICE netlist export.primitives.pyprovides schematic-only elements (ideal R, L, C, voltage/current sources) with VLSIR metadata for circuit simulation — these have no physical GDS geometry.
Installation#
We recommend uv
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Installation for contributors#
git clone https://github.com/gdsfactory/ihp.git
cd ihp
uv venv --python 3.12
uv sync --extra docs --extra dev
python install_tech.py
Running tests#
make test # run full test suite
make test-force # run tests and regenerate reference GDS files
To run specific test subsets:
uv run pytest tests/test_cells.py -v # GDS regression + settings tests
uv run pytest tests/test_xor_transistors.py -v # polygon-exact XOR vs PyCell