Repository navigation
v2.0.0
cspdk 2.0.0 merges the si220 C-band and O-band PDKs into one, matches si220 to the Cornerstone MPW Run 50 library (designs due 11 November 2026), and repairs the other six flavours against their foundry GDS. Existing designs will need changes: see Breaking changes below.
Breaking changes
si220 is one PDK (#355)
cspdk.si220.cband and cspdk.si220.oband are removed. Use cspdk.si220 and choose the band with the cross-section:
from cspdk.si220 import PDK, cells
PDK.activate()
c = cells.mmi1x2(cross_section="strip_oband") # strip_cband, rib_cband, strip_oband, rib_obandThe old cross-section names strip and rib are gone; use strip_cband, rib_cband, strip_oband or rib_oband.
si220 cells redrawn to the Run 50 library (#377)
Layouts that use these cells with default settings change:
crossing,crossing_rib: centred on the origin (they were offset imported GDS). Placing them by absolute position, not by port, moves them.die(): defaults to the 11470 x 4900 um Run 50 design area (was 16000 x 3000 um).die_with_pads:- 16 gratings per side instead of 14.
- Every optical port is renumbered, and the ports sit at x = +-4923 um.
- Pads are 150 x 200 um, and the pad rows moved.
edge_to_grating_distancenow measures to the far end of the gratings.
- MMIs:
- Rib MMIs end in a 5 um straight, so their ports move 5 um outwards.
- C strip
mmi1x2is 31.8 um long (was 31). - O strip
mmi1x2outputs are at y = +-1.525 um. - C strip
mmi2x2ports are at y = +-1.015 um (was +-1).
mzi_lattice: its outputs move with the MMIs.- Rectangular gratings:
- The fibre port
o2moves. - The C-band rib period is 0.63 um.
- The O band has 80 periods.
- The fibre port
grating_coupler_elliptical: the ridges are 350 nm instead of 315.taper_strip_to_ridge,trans_rib10/20/50: the port width follows the cross-section (0.45 um C, 0.40 um O) instead of a fixed 0.5 um.heater:- It is drawn to match the Run 50 Heater cell, a 248 x 182 um footprint.
- It gains electrical ports
e1ande2.
- Text:
text_rectangulardefaults to the label layer (100/0).text_rectangular_multi_layerdefaults to(WG, SLAB).
Renamed cross-sections in si340, si500, sin200 and sin300 (#376)
The old names were shared between flavours with different geometry. Rename them in code and schematics:
| Flavour | Old | New |
|---|---|---|
| si500 | xs_rc, xs_ro |
xs_rc500, xs_ro500 |
| si340 | xs_sc, xs_so, xs_rc |
xs_sc340, xs_so340, xs_rc340 |
| si500, si340, sin200, sin300 | heater_metal |
heater_metal_si500, _si340, _sin200, _sin300 |
Other flavours match their foundry GDS (#376)
Designs in si340, si500, sin200, sin300, si_sus and ge_on_si will differ from 1.4.5 in an XOR:
- the gratings, MMIs, bends, tapers, heaters and dies are redrawn to the foundry cells;
- the routing radii and separations are set to the foundry rules.
The pull request lists the changes per flavour.
Smaller breaking changes
- doroutes (#347): cspdk no longer depends on doroutes. si220's
route_astarandroute_astar_metalstrategies are only available when doroutes is installed (pip install doroutes). - Material names (#315): layer-stack materials now use
Si,SiO2,SiN,Ge,TiNandAl(weresi,sin,ge,Aluminum). - Schematic symbols (#314): MZIs use the
mzi-1x2/mzi-2x2symbol types instead ofmzi. - Simulation results: several model fixes change the numbers that si220 circuits produce:
New
- si220 Run 50 library (#377):
- New cells:
ysplitterandgrating_coupler_focusing_apodized;- the graphene bolometer, EAM and PTE cells, each with a
_with_gcvariant; photodiodeandphotodiode_integrated;laser_fullandlaser_half, each with_with_gcand_or_gcvariants;die_half,bend_circular,taper_mm2sm,taper_rib_to_stripandmzi_heater_loop.
- Named layers for laser, photodiode and graphene integration.
- Models that use the measured Run 50 losses.
- New cells:
- Models:
- si220 cross-sections: customised cross-sections, such as
strip_oband(width=0.5), keep their band and strip/rib type in cells and models (#371). - Schematics and GDSFactory+:
- Sample projects: a public sample project per flavour (si220 and sin300), in
cspdk--sample-projects/(#368). - Docs:
Bug fixes
- si220 ring, coupler and MZI models (#362).
- si220 O-band models inside circuits (#366).
- Robust si220 models: couplers JIT-compile and differentiate, heater physics, rib defaults, circulax references (#372).
- Concrete model defaults so circulax DC sweeps work (#375).
- si220 model dispatch wrappers bound into the module namespace (#358).
- GDSFactory+ finds the si220 models (#368).
- Package keywords (#359) and PDF tab rendering in the docs (#318).
Packaging, CI and dependencies
- The wheel and sdist no longer contain samples, tests or reference files (#377); the build backend is hatchling (#311).
- gdsfactory ~=9.51.0 (#354), circulax >=0.2.3 (#333), gdsfactoryplus 1.8.20 (#361), zensical, pre-commit, mkdocs-material and GitHub Actions bumps (#324-#330, #337-#341, #360).
- CI: centralised workflow templates and the nyanlib generator (#336, #343, #345, #349); the full test suite runs in CI (#364); all ports are checked for Manhattan orientations (#332).