ordec.lib.ihp130 — IHP SG13G2 technology
This cell library provides part of the IHP Open PDK.
Substrate handling in LVS
All SG13G2 resistors (Rsil, Rppd, Rhigh) have a third pin bn connecting the device’s bulk/substrate node. In LVS netlists, the resistors are emitted as three-terminal SPICE elements, so substrate connectivity is part of the layout vs. schematic comparison.
On the layout side, the SG13G2 LVS deck merges the resistors’ bulk into a single chip-wide substrate (pwell) net. For hierarchical designs, this has the following consequences:
Every cell whose layout contains a resistor (directly or in a subcell) is extracted with an additional, implicit pin for the propagated substrate net — even though the cell’s layout draws no substrate pin shape.
For LVS to pass, the schematic of each such cell needs a matching substrate port (named
subby convention) wired to thebnpins of all resistors and propagated down the hierarchy. Within the hierarchy, KLayout matches the extracted substrate pin against this port topologically; subcell layouts need neither a pin shape nor a label for it.The top cell is the exception: top-level pins are compared by name, so the top layout must materialize the substrate connection explicitly. Place a substrate tap (
Ptap) and attach a labeled Metal1 pin to it (see cellC_Hierintests/lib/lvs_example_hier.ordfor a working example).
Approaches that do not work:
A pin label directly on the substrate region: the deck’s connectivity setup attaches no text/pin layer to the substrate, so such labels are ignored and the top-level substrate pin remains unnamed.
Netlisting
bnas a global net (.global sub!) instead of explicitsubports: the subcells then match, but the top-level pin comparison fails because the layout’s implicit substrate pin has no name to match againstSUB!.
Cells
- class ordec.lib.ihp130.Cmim(*args, **kwargs)
Fixed SG13G2 MIM capacitor.
- escaped_name()
- ngspice_current_pins()
- ngspice_save_params() list[str]
Return device parameter names to save via ngspice.
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- m: int
- symbol
- class ordec.lib.ihp130.Nmos(*args, **kwargs)
- escaped_name()
- ngspice_current_pins()
- ngspice_save_params()
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- m: int
Multiplier, i. e. number of devices with separate Activ areas in parallel)
- model_name = 'sg13_lv_nmos'
- ng: int
Number of gate fingers
- symbol
- class ordec.lib.ihp130.Ntap(*args, **kwargs)
- escaped_name()
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- class ordec.lib.ihp130.Pmos(*args, **kwargs)
- escaped_name()
- ngspice_current_pins()
- ngspice_save_params()
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- m: int
Multiplier, i. e. number of devices with separate Activ areas in parallel)
- model_name = 'sg13_lv_pmos'
- ng: int
Number of gate fingers
- symbol
- class ordec.lib.ihp130.Ptap(*args, **kwargs)
- escaped_name()
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- class ordec.lib.ihp130.Rhigh(*args, **kwargs)
High-resistive polysilicon resistor (high sheet resistance). For the substrate pin
bnand its LVS handling, see Substrate handling in LVS.- escaped_name()
- ngspice_current_pins()
- ngspice_save_params() list[str]
Return device parameter names to save via ngspice.
- b: int
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- m: int
- model_name = 'rhigh'
- symbol
- class ordec.lib.ihp130.Rppd(*args, **kwargs)
Unsalicided p+ polysilicon resistor (medium sheet resistance). For the substrate pin
bnand its LVS handling, see Substrate handling in LVS.- escaped_name()
- ngspice_current_pins()
- ngspice_save_params() list[str]
Return device parameter names to save via ngspice.
- b: int
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- m: int
- model_name = 'rppd'
- symbol
- class ordec.lib.ihp130.Rsil(*args, **kwargs)
Salicided polysilicon resistor (low sheet resistance). For the substrate pin
bnand its LVS handling, see Substrate handling in LVS.- escaped_name()
- ngspice_current_pins()
- ngspice_save_params() list[str]
Return device parameter names to save via ngspice.
- b: int
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layout
- m: int
- model_name = 'rsil'
- symbol
- class ordec.lib.ihp130.SG13G2(*args, **kwargs)
- escaped_name()
- default_routing_spec
- instances_lock = <unlocked _thread.RLock object owner=0 count=0>
- layers
- ordec.lib.ihp130.run_lvs(layout: Layout, symbol: Symbol, use_tempdir: bool = True) LvsReport
Run LVS (Layout vs. Schematic) check.
- Parameters:
layout – The Layout to check.
symbol – The Symbol containing the reference schematic.
use_tempdir – If True, use a temporary directory for intermediate files.