Here are the components available in the PDK
Cells#
CuPillarPad#
- ihp.cells.CuPillarPad()[source]#
Returns CuPillarPad fixed cell.
import ihp c = ihp.cells.CuPillarPad() c.plot()
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.CuPillarPad().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
L2_IND_LVS#
- ihp.cells.L2_IND_LVS()[source]#
Returns L2_IND_LVS fixed cell.
import ihp c = ihp.cells.L2_IND_LVS() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.L2_IND_LVS().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
M1_GatPoly_CDNS_675179387644#
- ihp.cells.M1_GatPoly_CDNS_675179387644()[source]#
Returns M1_GatPoly_CDNS_675179387644 fixed cell.
import ihp c = ihp.cells.M1_GatPoly_CDNS_675179387644() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.M1_GatPoly_CDNS_675179387644().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
M2_M1_CDNS_675179387643#
- ihp.cells.M2_M1_CDNS_675179387643()[source]#
Returns M2_M1_CDNS_675179387643 fixed cell.
import ihp c = ihp.cells.M2_M1_CDNS_675179387643() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.M2_M1_CDNS_675179387643().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
M3_M2_CDNS_675179387642#
- ihp.cells.M3_M2_CDNS_675179387642()[source]#
Returns M3_M2_CDNS_675179387642 fixed cell.
import ihp c = ihp.cells.M3_M2_CDNS_675179387642() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.M3_M2_CDNS_675179387642().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
M4_M3_CDNS_675179387641#
- ihp.cells.M4_M3_CDNS_675179387641()[source]#
Returns M4_M3_CDNS_675179387641 fixed cell.
import ihp c = ihp.cells.M4_M3_CDNS_675179387641() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.M4_M3_CDNS_675179387641().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
M5_M4_CDNS_675179387640#
- ihp.cells.M5_M4_CDNS_675179387640()[source]#
Returns M5_M4_CDNS_675179387640 fixed cell.
import ihp c = ihp.cells.M5_M4_CDNS_675179387640() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.M5_M4_CDNS_675179387640().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
NoFillerStack#
- ihp.cells.NoFillerStack()[source]#
Returns NoFillerStack fixed cell.
import ihp c = ihp.cells.NoFillerStack() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.NoFillerStack().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
SVaricap#
- ihp.cells.SVaricap()[source]#
Returns SVaricap fixed cell.
import ihp c = ihp.cells.SVaricap() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.SVaricap().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
TM1_M5_CDNS_675179387645#
- ihp.cells.TM1_M5_CDNS_675179387645()[source]#
Returns TM1_M5_CDNS_675179387645 fixed cell.
import ihp c = ihp.cells.TM1_M5_CDNS_675179387645() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.TM1_M5_CDNS_675179387645().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
TM2_TM1_CDNS_675179387646#
- ihp.cells.TM2_TM1_CDNS_675179387646()[source]#
Returns TM2_TM1_CDNS_675179387646 fixed cell.
import ihp c = ihp.cells.TM2_TM1_CDNS_675179387646() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.TM2_TM1_CDNS_675179387646().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
TSV#
- ihp.cells.TSV()[source]#
Returns TSV fixed cell.
import ihp c = ihp.cells.TSV() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.TSV().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
ViaStack#
- ihp.cells.ViaStack()[source]#
Returns ViaStack fixed cell.
import ihp c = ihp.cells.ViaStack() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.ViaStack().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
add_pads_top#
- ihp.cells.add_pads_top(component='straight', port_names=None, component_name=None, cross_section='metal_routing', pad_port_name='e1', pad='CuPillarPad', bend='wire_corner', straight_separation=15.0, pad_pitch=100.0, taper=None, port_type='electrical', allow_width_mismatch=True, fanout_length=80, route_width=0, **kwargs)[source]#
Returns new component with ports connected top pads.
- Parameters:
component (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component]) – component spec to connect to.
port_names (Sequence[str] | None) – list of port names to connect to pads.
component_name (str | None) – optional for the label.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – cross_section function.
pad_port_name (str) – pad port name.
pad (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component]) – pad function.
bend (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component]) – bend function.
straight_separation (float) – from edge to edge.
pad_pitch (float) – spacing between pads.
taper (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component] | None) – taper function.
port_type (str) – port type.
allow_width_mismatch (bool) – if True, allows width mismatch.
fanout_length (float | None) – length of the fanout.
route_width (float | list[float] | None) – width of the route.
kwargs – additional arguments.
- Return type:
Component
import gdsfactory as gf c = gf.c.nxn( xsize=600, ysize=200, north=2, south=3, wg_width=10, layer="M3", port_type="electrical", ) cc = gf.routing.add_pads_top(component=c, port_names=("e1", "e4"), fanout_length=50) cc.plot()
from ihp import PDK, cells
PDK.activate()
c = cells.add_pads_top(component='straight', cross_section='metal_routing', pad_port_name='e1', pad='CuPillarPad', bend='wire_corner', straight_separation=15.0, pad_pitch=100.0, port_type='electrical', allow_width_mismatch=True, fanout_length=80, route_width=0).copy()
c.draw_ports()
c.plot()
bend_euler#
- ihp.cells.bend_euler(radius=None, angle=90, p=0.5, width=None, cross_section='strip', allow_min_radius_violation=False)[source]#
Regular degree euler bend.
- Parameters:
radius (float | None) – in um. Defaults to cross_section_radius.
angle (float) – total angle of the curve.
p (float) – Proportion of the curve that is an Euler curve.
width (float | None) – width to use. Defaults to cross_section.width.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string, CrossSectionFactory dict).
allow_min_radius_violation (bool) – if True allows radius to be smaller than cross_section radius.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.bend_euler(angle=90, p=0.5, cross_section='strip', allow_min_radius_violation=False).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
bend_metal#
- ihp.cells.bend_metal(radius=None, angle=90, width=None, cross_section='metal_routing')[source]#
Regular degree euler bend.
- Parameters:
radius (float | None)
angle (float)
width (float | None)
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.bend_metal(angle=90, cross_section='metal_routing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
bend_s#
- ihp.cells.bend_s(size=(11, 1.8), cross_section='strip', width=None, allow_min_radius_violation=False)[source]#
Return S bend with bezier curve.
stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length
- Parameters:
size (tuple[float, float]) – in x and y direction.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
allow_min_radius_violation (bool) – allows min radius violations.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.bend_s(size=(11, 1.8), cross_section='strip', allow_min_radius_violation=False).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
bend_s_metal#
- ihp.cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', width=None, allow_min_radius_violation=True)[source]#
Return S bend with bezier curve.
stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length
- Parameters:
size (tuple[float, float]) – in x and y direction.
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
allow_min_radius_violation (bool) – allows min radius violations.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.bend_s_metal(size=(11, 1.8), cross_section='metal_routing', allow_min_radius_violation=True).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
bondpad#
- ihp.cells.bondpad()[source]#
Returns bondpad fixed cell.
import ihp c = ihp.cells.bondpad() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.bondpad().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
bondpad_array#
- ihp.cells.bondpad_array(n_pads=4, pad_pitch=100.0, pad_diameter=80.0, shape='octagon', layer_top_metal='TopMetal2drawing', layer_passiv='Passivpillar', layer_dfpad='dfpaddrawing', bbox_offsets=(-2.1, 0))[source]#
Create an array of bondpads.
- Parameters:
n_pads (int) – Number of bondpads.
pad_pitch (float) – Pitch between bondpad centers in micrometers.
pad_diameter (float) – Diameter of each bondpad in micrometers.
shape (Literal['octagon', 'square', 'circle']) – Shape of the bondpads.
layer_top_metal (tuple[int, int] | str | int | LayerEnum) – Top metal layer for the bondpad.
layer_passiv (tuple[int, int] | str | int | LayerEnum) – Passivation layer.
layer_dfpad (tuple[int, int] | str | int | LayerEnum) – Deep fill pad layer.
bbox_offsets (tuple[float, ...] | None) – Offsets for each additional layer.
- Returns:
Component with bondpad array.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.bondpad_array(n_pads=4, pad_pitch=100.0, pad_diameter=80.0, shape='octagon', layer_top_metal='TopMetal2drawing', layer_passiv='Passivpillar', layer_dfpad='dfpaddrawing', bbox_offsets=(-2.1, 0)).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
chipText#
- ihp.cells.chipText()[source]#
Returns chipText fixed cell.
import ihp c = ihp.cells.chipText() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.chipText().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
cmim#
- ihp.cells.cmim()[source]#
Returns cmim fixed cell.
import ihp c = ihp.cells.cmim() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.cmim().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
colors_and_stipples#
- ihp.cells.colors_and_stipples()[source]#
Returns colors_and_stipples fixed cell.
import ihp c = ihp.cells.colors_and_stipples() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.colors_and_stipples().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
dantenna#
- ihp.cells.dantenna()[source]#
Returns dantenna fixed cell.
import ihp c = ihp.cells.dantenna() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.dantenna().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
diffstbprobe#
- ihp.cells.diffstbprobe()[source]#
Returns diffstbprobe fixed cell.
import ihp c = ihp.cells.diffstbprobe() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.diffstbprobe().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
diodevdd_2kv#
- ihp.cells.diodevdd_2kv()[source]#
Returns diodevdd_2kv fixed cell.
import ihp c = ihp.cells.diodevdd_2kv() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.diodevdd_2kv().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
diodevdd_4kv#
- ihp.cells.diodevdd_4kv()[source]#
Returns diodevdd_4kv fixed cell.
import ihp c = ihp.cells.diodevdd_4kv() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.diodevdd_4kv().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
diodevss_2kv#
- ihp.cells.diodevss_2kv()[source]#
Returns diodevss_2kv fixed cell.
import ihp c = ihp.cells.diodevss_2kv() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.diodevss_2kv().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
diodevss_4kv#
- ihp.cells.diodevss_4kv()[source]#
Returns diodevss_4kv fixed cell.
import ihp c = ihp.cells.diodevss_4kv() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.diodevss_4kv().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
dpantenna#
- ihp.cells.dpantenna()[source]#
Returns dpantenna fixed cell.
import ihp c = ihp.cells.dpantenna() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.dpantenna().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
dummy1#
- ihp.cells.dummy1()[source]#
Returns dummy1 fixed cell.
import ihp c = ihp.cells.dummy1() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.dummy1().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
esd_nmos#
- ihp.cells.esd_nmos(width=50.0, length=0.5, nf=10, model='esd_nmos', layer_pwell='PWelldrawing', layer_activ='Activdrawing', layer_gatpoly='GatPolydrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_esd='Recogesd')[source]#
Create an ESD protection NMOS device.
- Parameters:
width (float) – Total width of the ESD device in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers.
model (str) – Device model name.
layer_pwell (tuple[int, int] | str | int | LayerEnum) – P-well layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_nsd (tuple[int, int] | str | int | LayerEnum) – N+ source/drain doping layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_metal2 (tuple[int, int] | str | int | LayerEnum) – Metal2 layer.
layer_esd (tuple[int, int] | str | int | LayerEnum) – ESD marker layer.
- Returns:
Component with ESD NMOS layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.esd_nmos(width=50.0, length=0.5, nf=10, model='esd_nmos', layer_pwell='PWelldrawing', layer_activ='Activdrawing', layer_gatpoly='GatPolydrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_esd='Recogesd').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
import_gds#
- ihp.cells.import_gds(gdspath, cellname=None, *, post_process=(functools.partial(<function add_ports_from_markers_center>, inside=True, pin_layer=(8, 2), port_layer=(8, 0)), functools.partial(<function add_ports_from_markers_center>, inside=True, pin_layer=(10, 2), port_layer=(10, 0))), rename_duplicated_cells=False)#
Reads a GDS file and returns a Component.
- Parameters:
gdspath (str | Path) – path to GDS file.
cellname (str | None) – name of the cell to return. Defaults to top cell.
post_process (PostProcesses | None) – function to run after reading the GDS file.
rename_duplicated_cells (bool) – if True, rename duplicated cells.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.import_gds(post_process=(functools.partial(<function add_ports_from_markers_center at 0x7f8eb7d91260>, inside=True, pin_layer=(8, 2), port_layer=(8, 0)), functools.partial(<function add_ports_from_markers_center at 0x7f8eb7d91260>, inside=True, pin_layer=(10, 2), port_layer=(10, 0))), rename_duplicated_cells=False).copy()
c.draw_ports()
c.plot()
inductor2#
- ihp.cells.inductor2(width=2.0, space=2.1, diameter=25.35, resistance=0.5777, inductance=3.3303e-11, turns=1, layer_metal='TopMetal2drawing', layer_inductor='INDdrawing', layer_metal_pin='TopMetal2pin', layers_no_fill=('Activnofill', 'GatPolynofill', 'Metal1nofill', 'Metal2nofill', 'Metal3nofill', 'Metal4nofill', 'Metal5nofill', 'TopMetal1nofill', 'TopMetal2nofill', 'PWellblock'))[source]#
Create a 2-turn inductor.
- Parameters:
width (float) – Width of the inductor trace in micrometers.
space (float) – Space between turns in micrometers.
diameter (float) – Inner diameter in micrometers.
resistance (float) – Resistance in ohms.
inductance (float) – Inductance in henries.
turns (int) – Number of turns (default 1 for inductor2).
block_qrc – Block QRC layer.
layer_metal (tuple[int, int] | str | int | LayerEnum)
layer_inductor (tuple[int, int] | str | int | LayerEnum)
layer_metal_pin (tuple[int, int] | str | int | LayerEnum)
layers_no_fill (Sequence[tuple[int, int] | str | int | LayerEnum])
- Returns:
Component with inductor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.inductor2(width=2.0, space=2.1, diameter=25.35, resistance=0.5777, inductance=3.3303e-11, turns=1, layer_metal='TopMetal2drawing', layer_inductor='INDdrawing', layer_metal_pin='TopMetal2pin', layers_no_fill=('Activnofill', 'GatPolynofill', 'Metal1nofill', 'Metal2nofill', 'Metal3nofill', 'Metal4nofill', 'Metal5nofill', 'TopMetal1nofill', 'TopMetal2nofill', 'PWellblock')).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
inductor3#
- ihp.cells.inductor3(width=2.0, space=2.1, diameter=24.68, resistance=1.386, inductance=2.215e-10, turns=2, layer_metal='TopMetal2drawing', layer_inductor='INDdrawing', layer_metal_pin='TopMetal2pin', layers_no_fill=('Activnofill', 'GatPolynofill', 'Metal1nofill', 'Metal2nofill', 'Metal3nofill', 'Metal4nofill', 'Metal5nofill', 'TopMetal1nofill', 'TopMetal2nofill', 'PWellblock'))[source]#
Create a 3-turn inductor.
- Parameters:
width (float) – Width of the inductor trace in micrometers.
space (float) – Space between turns in micrometers.
diameter (float) – Inner diameter in micrometers.
resistance (float) – Resistance in ohms.
inductance (float) – Inductance in henries.
turns (int) – Number of turns (default 2 for inductor3).
layer_metal (tuple[int, int] | str | int | LayerEnum) – Metal layer for the inductor trace.
layer_inductor (tuple[int, int] | str | int | LayerEnum) – IND layer for inductor marking.
layer_metal_pin (tuple[int, int] | str | int | LayerEnum) – Metal pin layer.
layers_no_fill (Sequence[tuple[int, int] | str | int | LayerEnum]) – Tuple of no-fill layers to add.
- Returns:
Component with inductor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.inductor3(width=2.0, space=2.1, diameter=24.68, resistance=1.386, inductance=2.215e-10, turns=2, layer_metal='TopMetal2drawing', layer_inductor='INDdrawing', layer_metal_pin='TopMetal2pin', layers_no_fill=('Activnofill', 'GatPolynofill', 'Metal1nofill', 'Metal2nofill', 'Metal3nofill', 'Metal4nofill', 'Metal5nofill', 'TopMetal1nofill', 'TopMetal2nofill', 'PWellblock')).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
iprobe#
- ihp.cells.iprobe()[source]#
Returns iprobe fixed cell.
import ihp c = ihp.cells.iprobe() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.iprobe().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
isolbox#
- ihp.cells.isolbox()[source]#
Returns isolbox fixed cell.
import ihp c = ihp.cells.isolbox() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.isolbox().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
lvsres#
- ihp.cells.lvsres()[source]#
Returns lvsres fixed cell.
import ihp c = ihp.cells.lvsres() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.lvsres().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
nmos#
- ihp.cells.nmos(width=1.0, length=0.13, nf=1, m=1, model='sg13_lv_nmos', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create an NMOS transistor.
- Parameters:
width (float) – Total width of the transistor in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers.
m (int) – Multiplier (number of parallel devices).
model (str) – Device model name.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_nsd (tuple[int, int] | str | int | LayerEnum) – N+ source/drain implant layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with NMOS transistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.nmos(width=1.0, length=0.13, nf=1, m=1, model='sg13_lv_nmos', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
nmosHV#
- ihp.cells.nmosHV()[source]#
Returns nmosHV fixed cell.
import ihp c = ihp.cells.nmosHV() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.nmosHV().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
nmos_hv#
- ihp.cells.nmos_hv(width=1.0, length=0.45, nf=1, m=1, model='sg13_hv_nmos', layer_thickgateox='ThickGateOxdrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create a high-voltage NMOS transistor.
- Parameters:
width (float) – Total width of the transistor in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers.
m (int) – Multiplier (number of parallel devices).
model (str) – Device model name.
layer_thickgateox (tuple[int, int] | str | int | LayerEnum) – Thick gate oxide layer.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_nsd (tuple[int, int] | str | int | LayerEnum) – N+ source/drain implant layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with HV NMOS transistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.nmos_hv(width=1.0, length=0.45, nf=1, m=1, model='sg13_hv_nmos', layer_thickgateox='ThickGateOxdrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
nmoscl_2#
- ihp.cells.nmoscl_2()[source]#
Returns nmoscl_2 fixed cell.
import ihp c = ihp.cells.nmoscl_2() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.nmoscl_2().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
nmoscl_4#
- ihp.cells.nmoscl_4()[source]#
Returns nmoscl_4 fixed cell.
import ihp c = ihp.cells.nmoscl_4() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.nmoscl_4().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
npn13G2#
- ihp.cells.npn13G2()[source]#
Returns npn13G2 fixed cell.
import ihp c = ihp.cells.npn13G2() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.npn13G2().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
npn13G2L#
- ihp.cells.npn13G2L()[source]#
Returns npn13G2L fixed cell.
import ihp c = ihp.cells.npn13G2L() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.npn13G2L().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
npn13G2V#
- ihp.cells.npn13G2V()[source]#
Returns npn13G2V fixed cell.
import ihp c = ihp.cells.npn13G2V() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.npn13G2V().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
npn13G2_base_CDNS_675179387640#
- ihp.cells.npn13G2_base_CDNS_675179387640()[source]#
Returns npn13G2_base_CDNS_675179387640 fixed cell.
import ihp c = ihp.cells.npn13G2_base_CDNS_675179387640() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.npn13G2_base_CDNS_675179387640().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
ntap#
- ihp.cells.ntap()[source]#
Returns ntap fixed cell.
import ihp c = ihp.cells.ntap() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.ntap().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
ntap1#
- ihp.cells.ntap1(width=1.0, length=1.0, rows=1, cols=1, layer_nwell='NWelldrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create an N+ substrate tap.
- Parameters:
width (float) – Width of the tap in micrometers.
length (float) – Length of the tap in micrometers.
rows (int) – Number of contact rows.
cols (int) – Number of contact columns.
layer_nwell (tuple[int, int] | str | int | LayerEnum) – N-well layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_nsd (tuple[int, int] | str | int | LayerEnum) – N+ source/drain doping layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with N+ tap layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.ntap1(width=1.0, length=1.0, rows=1, cols=1, layer_nwell='NWelldrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
pack_doe#
- ihp.cells.pack_doe(doe, settings, do_permutations=False, function=None, **kwargs)[source]#
Packs a component DOE (Design of Experiment) using pack.
- Parameters:
doe (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component]) – function to return Components.
settings (dict[str, tuple[Any, ...]]) – component settings.
do_permutations (bool) – for each setting.
function (str | Callable[[...], Component] | dict[str, Any] | None) – to apply (add padding, grating couplers).
kwargs – for pack.
- Keyword Arguments:
spacing – Minimum distance between adjacent shapes.
aspect_ratio – (width, height) ratio of the rectangular bin.
max_size – Limits the size into which the shapes will be packed.
sort_by_area – Pre-sorts the shapes by area.
density – Values closer to 1 pack tighter but require more computation.
precision – Desired precision for rounding vertex coordinates.
text – Optional function to add text labels.
text_prefix – for labels. For example. ‘A’ for ‘A1’, ‘A2’…
text_offsets – relative to component size info anchor. Defaults to center.
text_anchors – relative to component (ce cw nc ne nw sc se sw center cc).
name_prefix – for each packed component (avoids the Unnamed cells warning). Note that the suffix contains a uuid so the name will not be deterministic.
rotation – for each component in degrees.
h_mirror – horizontal mirror in y axis (x, 1) (1, 0). This is the most common.
v_mirror – vertical mirror using x axis (1, y) (0, y).
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.pack_doe(do_permutations=False).copy()
c.draw_ports()
c.plot()
pack_doe_grid#
- ihp.cells.pack_doe_grid(doe, settings, do_permutations=False, function=None, with_text=False, **kwargs)[source]#
Packs a component DOE (Design of Experiment) using grid.
- Parameters:
doe (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component]) – function to return Components.
settings (dict[str, tuple[Any, ...]]) – component settings.
do_permutations (bool) – for each setting.
function (str | Callable[[...], Component] | dict[str, Any] | None) – to apply to component (add padding, grating couplers).
with_text (bool) – includes text label.
kwargs – for grid.
- Keyword Arguments:
spacing – between adjacent elements on the grid, can be a tuple for different distances in height and width.
separation – If True, guarantees elements are separated with fixed spacing if False, elements are spaced evenly along a grid.
shape – x, y shape of the grid (see np.reshape). If no shape and the list is 1D, if np.reshape were run with (1, -1).
align_x – {‘x’, ‘xmin’, ‘xmax’} for x (column) alignment along.
align_y – {‘y’, ‘ymin’, ‘ymax’} for y (row) alignment along.
edge_x – {‘x’, ‘xmin’, ‘xmax’} for x (column) (ignored if separation = True).
edge_y – {‘y’, ‘ymin’, ‘ymax’} for y (row) (ignored if separation = True).
rotation – for each component in degrees.
h_mirror – horizontal mirror y axis (x, 1) (1, 0). most common mirror.
v_mirror – vertical mirror using x axis (1, y) (0, y).
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.pack_doe_grid(do_permutations=False, with_text=False).copy()
c.draw_ports()
c.plot()
pmos#
- ihp.cells.pmos(width=1.0, length=0.13, nf=1, m=1, model='sg13_lv_pmos', layer_nwell='NWelldrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create a PMOS transistor.
- Parameters:
width (float) – Total width of the transistor in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers.
m (int) – Multiplier (number of parallel devices).
model (str) – Device model name.
layer_nwell (tuple[int, int] | str | int | LayerEnum) – N-well layer.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_psd (tuple[int, int] | str | int | LayerEnum) – P+ source/drain implant layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with PMOS transistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.pmos(width=1.0, length=0.13, nf=1, m=1, model='sg13_lv_pmos', layer_nwell='NWelldrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
pmosHV#
- ihp.cells.pmosHV()[source]#
Returns pmosHV fixed cell.
import ihp c = ihp.cells.pmosHV() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.pmosHV().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
pmos_hv#
- ihp.cells.pmos_hv(width=1.0, length=0.45, nf=1, m=1, model='sg13_hv_pmos', layer_thickgateox='ThickGateOxdrawing', layer_nwell='NWelldrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create a high-voltage PMOS transistor.
- Parameters:
width (float) – Total width of the transistor in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers.
m (int) – Multiplier (number of parallel devices).
model (str) – Device model name.
layer_thickgateox (tuple[int, int] | str | int | LayerEnum) – Thick gate oxide layer.
layer_nwell (tuple[int, int] | str | int | LayerEnum) – N-well layer.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_psd (tuple[int, int] | str | int | LayerEnum) – P+ source/drain implant layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with HV PMOS transistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.pmos_hv(width=1.0, length=0.45, nf=1, m=1, model='sg13_hv_pmos', layer_thickgateox='ThickGateOxdrawing', layer_nwell='NWelldrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
pnpMPA#
- ihp.cells.pnpMPA()[source]#
Returns pnpMPA fixed cell.
import ihp c = ihp.cells.pnpMPA() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.pnpMPA().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
ptap#
- ihp.cells.ptap()[source]#
Returns ptap fixed cell.
import ihp c = ihp.cells.ptap() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.ptap().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
ptap1#
- ihp.cells.ptap1(width=1.0, length=1.0, rows=1, cols=1, layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create a P+ substrate tap.
- Parameters:
width (float) – Width of the tap in micrometers.
length (float) – Length of the tap in micrometers.
rows (int) – Number of contact rows.
cols (int) – Number of contact columns.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_psd (tuple[int, int] | str | int | LayerEnum) – P+ source/drain doping layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with P+ tap layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.ptap1(width=1.0, length=1.0, rows=1, cols=1, layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rfcmim#
- ihp.cells.rfcmim()[source]#
Returns rfcmim fixed cell.
import ihp c = ihp.cells.rfcmim() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rfcmim().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rfnmos#
- ihp.cells.rfnmos(width=2.0, length=0.13, nf=2, m=1, model='sg13_lv_rfnmos', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create an RF NMOS transistor with optimized layout.
- Parameters:
width (float) – Total width of the transistor in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers (should be even for RF).
m (int) – Multiplier (number of parallel devices).
model (str) – Device model name.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_nsd (tuple[int, int] | str | int | LayerEnum) – N+ source/drain implant layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with RF NMOS transistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rfnmos(width=2.0, length=0.13, nf=2, m=1, model='sg13_lv_rfnmos', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rfnmosHV#
- ihp.cells.rfnmosHV()[source]#
Returns rfnmosHV fixed cell.
import ihp c = ihp.cells.rfnmosHV() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rfnmosHV().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rfpmos#
- ihp.cells.rfpmos(width=2.0, length=0.13, nf=2, m=1, model='sg13_lv_rfpmos', layer_nwell='NWelldrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing')[source]#
Create an RF PMOS transistor with optimized layout.
- Parameters:
width (float) – Total width of the transistor in micrometers.
length (float) – Gate length in micrometers.
nf (int) – Number of fingers (should be even for RF).
m (int) – Multiplier (number of parallel devices).
model (str) – Device model name.
layer_nwell (tuple[int, int] | str | int | LayerEnum) – N-well layer.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_psd (tuple[int, int] | str | int | LayerEnum) – P+ source/drain implant layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
- Returns:
Component with RF PMOS transistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rfpmos(width=2.0, length=0.13, nf=2, m=1, model='sg13_lv_rfpmos', layer_nwell='NWelldrawing', layer_gatpoly='GatPolydrawing', layer_activ='Activdrawing', layer_psd='pSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rfpmosHV#
- ihp.cells.rfpmosHV()[source]#
Returns rfpmosHV fixed cell.
import ihp c = ihp.cells.rfpmosHV() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rfpmosHV().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rhigh#
- ihp.cells.rhigh(width=1.4, length=20.0, resistance=None, model='rhigh', layer_nwell='NWelldrawing', layer_poly='GatPolydrawing', layer_polyres='PolyResdrawing', layer_contact='Contdrawing', layer_metal1='Metal1drawing', layer_res_mark='RESdrawing')[source]#
Create a high-resistance polysilicon resistor.
- Parameters:
width (float) – Width of the resistor in micrometers.
length (float) – Length of the resistor in micrometers.
resistance (float | None) – Target resistance in ohms (optional).
model (str) – Device model name.
layer_nwell (tuple[int, int] | str | int | LayerEnum) – N-well isolation layer.
layer_poly (tuple[int, int] | str | int | LayerEnum) – Polysilicon layer.
layer_polyres (tuple[int, int] | str | int | LayerEnum) – Poly resistor marker layer.
layer_contact (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_res_mark (tuple[int, int] | str | int | LayerEnum) – Resistor marker layer.
- Returns:
Component with high-resistance poly resistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rhigh(width=1.4, length=20.0, model='rhigh', layer_nwell='NWelldrawing', layer_poly='GatPolydrawing', layer_polyres='PolyResdrawing', layer_contact='Contdrawing', layer_metal1='Metal1drawing', layer_res_mark='RESdrawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rppd#
- ihp.cells.rppd(width=0.8, length=10.0, resistance=None, model='rppd', layer_poly='GatPolydrawing', layer_psd='pSDdrawing', layer_polyres='PolyResdrawing', layer_contact='Contdrawing', layer_metal1='Metal1drawing', layer_res_mark='RESdrawing')[source]#
Create a P+ polysilicon resistor.
- Parameters:
width (float) – Width of the resistor in micrometers.
length (float) – Length of the resistor in micrometers.
resistance (float | None) – Target resistance in ohms (optional).
model (str) – Device model name.
layer_poly (tuple[int, int] | str | int | LayerEnum) – Polysilicon layer.
layer_psd (tuple[int, int] | str | int | LayerEnum) – P+ source/drain doping layer.
layer_polyres (tuple[int, int] | str | int | LayerEnum) – Poly resistor marker layer.
layer_contact (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_res_mark (tuple[int, int] | str | int | LayerEnum) – Resistor marker layer.
- Returns:
Component with P+ poly resistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rppd(width=0.8, length=10.0, model='rppd', layer_poly='GatPolydrawing', layer_psd='pSDdrawing', layer_polyres='PolyResdrawing', layer_contact='Contdrawing', layer_metal1='Metal1drawing', layer_res_mark='RESdrawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
rsil#
- ihp.cells.rsil(width=0.8, length=0.5, resistance=None, model='rsil', layer_poly='GatPolydrawing', layer_salblock='SalBlockdrawing', layer_contact='Contdrawing', layer_metal1='Metal1drawing', layer_res_mark='RESdrawing')[source]#
Create a silicided polysilicon resistor.
- Parameters:
width (float) – Width of the resistor in micrometers.
length (float) – Length of the resistor in micrometers.
resistance (float | None) – Target resistance in ohms (optional).
model (str) – Device model name.
layer_poly (tuple[int, int] | str | int | LayerEnum) – Polysilicon layer.
layer_salblock (tuple[int, int] | str | int | LayerEnum) – Salicide block layer.
layer_contact (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_res_mark (tuple[int, int] | str | int | LayerEnum) – Resistor marker layer.
- Returns:
Component with silicided poly resistor layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.rsil(width=0.8, length=0.5, model='rsil', layer_poly='GatPolydrawing', layer_salblock='SalBlockdrawing', layer_contact='Contdrawing', layer_metal1='Metal1drawing', layer_res_mark='RESdrawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
schottky_nbl1#
- ihp.cells.schottky_nbl1()[source]#
Returns schottky_nbl1 fixed cell.
import ihp c = ihp.cells.schottky_nbl1() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.schottky_nbl1().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
scr1#
- ihp.cells.scr1()[source]#
Returns scr1 fixed cell.
import ihp c = ihp.cells.scr1() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.scr1().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
sealring#
- ihp.cells.sealring(width=200.0, height=200.0, ring_width=5.0, layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_metal3='Metal3drawing', layer_metal4='Metal4drawing', layer_metal5='Metal5drawing', layer_topmetal1='TopMetal1drawing', layer_topmetal2='TopMetal2drawing', layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing', layer_sealring='EdgeSealdrawing')[source]#
Create a seal ring for die protection.
- Parameters:
width (float) – Inner width of the seal ring in micrometers.
height (float) – Inner height of the seal ring in micrometers.
ring_width (float) – Width of the seal ring metal in micrometers.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_metal2 (tuple[int, int] | str | int | LayerEnum) – Metal2 layer.
layer_metal3 (tuple[int, int] | str | int | LayerEnum) – Metal3 layer.
layer_metal4 (tuple[int, int] | str | int | LayerEnum) – Metal4 layer.
layer_metal5 (tuple[int, int] | str | int | LayerEnum) – Metal5 layer.
layer_topmetal1 (tuple[int, int] | str | int | LayerEnum) – TopMetal1 layer.
layer_topmetal2 (tuple[int, int] | str | int | LayerEnum) – TopMetal2 layer.
layer_via1 (tuple[int, int] | str | int | LayerEnum) – Via1 layer.
layer_via2 (tuple[int, int] | str | int | LayerEnum) – Via2 layer.
layer_via3 (tuple[int, int] | str | int | LayerEnum) – Via3 layer.
layer_via4 (tuple[int, int] | str | int | LayerEnum) – Via4 layer.
layer_topvia1 (tuple[int, int] | str | int | LayerEnum) – TopVia1 layer.
layer_topvia2 (tuple[int, int] | str | int | LayerEnum) – TopVia2 layer.
layer_sealring (tuple[int, int] | str | int | LayerEnum) – Seal ring marker layer.
- Returns:
Component with seal ring layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.sealring(width=200.0, height=200.0, ring_width=5.0, layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_metal3='Metal3drawing', layer_metal4='Metal4drawing', layer_metal5='Metal5drawing', layer_topmetal1='TopMetal1drawing', layer_topmetal2='TopMetal2drawing', layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing', layer_sealring='EdgeSealdrawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
sealring_CDNS_675179387642#
- ihp.cells.sealring_CDNS_675179387642()[source]#
Returns sealring_CDNS_675179387642 fixed cell.
import ihp c = ihp.cells.sealring_CDNS_675179387642() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.sealring_CDNS_675179387642().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
sealring_complete#
- ihp.cells.sealring_complete()[source]#
Returns sealring_complete fixed cell.
import ihp c = ihp.cells.sealring_complete() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.sealring_complete().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
sealring_corner_CDNS_675179387641#
- ihp.cells.sealring_corner_CDNS_675179387641()[source]#
Returns sealring_corner_CDNS_675179387641 fixed cell.
import ihp c = ihp.cells.sealring_corner_CDNS_675179387641() c.plot()
(
Source code,png,hires.png,pdf)
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.sealring_corner_CDNS_675179387641().copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
straight#
- ihp.cells.straight(length=10, cross_section='strip', width=None, npoints=2)[source]#
Returns a Straight waveguide.
- Parameters:
length (float) – straight length (um).
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
npoints (int) – number of points.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.straight(length=10, cross_section='strip', npoints=2).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
straight_metal#
- ihp.cells.straight_metal(length=10, cross_section='metal_routing', width=None)[source]#
Returns a Straight waveguide.
- Parameters:
length (float) – straight length (um).
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).
width (float | None) – width of the waveguide. If None, it will use the width of the cross_section.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.straight_metal(length=10, cross_section='metal_routing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
svaricap#
- ihp.cells.svaricap(width=1.0, length=1.0, nf=1, model='svaricap', layer_nwell='NWelldrawing', layer_activ='Activdrawing', layer_gatpoly='GatPolydrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing', layer_varicap='Varicapdrawing')[source]#
Create a MOS varicap (variable capacitor).
- Parameters:
width (float) – Width of the varicap in micrometers.
length (float) – Length of the varicap in micrometers.
nf (int) – Number of fingers.
model (str) – Device model name.
layer_nwell (tuple[int, int] | str | int | LayerEnum) – N-well layer.
layer_activ (tuple[int, int] | str | int | LayerEnum) – Active region layer.
layer_gatpoly (tuple[int, int] | str | int | LayerEnum) – Gate polysilicon layer.
layer_nsd (tuple[int, int] | str | int | LayerEnum) – N+ source/drain doping layer.
layer_cont (tuple[int, int] | str | int | LayerEnum) – Contact layer.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_varicap (tuple[int, int] | str | int | LayerEnum) – Varicap marker layer.
- Returns:
Component with varicap layout.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.svaricap(width=1.0, length=1.0, nf=1, model='svaricap', layer_nwell='NWelldrawing', layer_activ='Activdrawing', layer_gatpoly='GatPolydrawing', layer_nsd='nSDdrawing', layer_cont='Contdrawing', layer_metal1='Metal1drawing', layer_varicap='Varicapdrawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
text_rectangular#
- ihp.cells.text_rectangular(text='abc', size=3, justify='left', layer='TopMetal2drawing')[source]#
Pixel based font, guaranteed to be manhattan, without acute angles.
- Parameters:
text (str) – string.
size (float) – pixel size.
justify (str) – left, right or center.
layer (tuple[int, int] | str | int | LayerEnum) – for text.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.text_rectangular(text='abc', size=3, justify='left', layer='TopMetal2drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
text_rectangular_multi_layer#
- ihp.cells.text_rectangular_multi_layer(text='abc', layers=('TopMetal2drawing',), text_factory='text_rectangular', **kwargs)[source]#
Returns rectangular text in different layers.
- Parameters:
text (str) – string of text.
layers (Sequence[tuple[int, int] | str | int | LayerEnum]) – list of layers to replicate the text.
text_factory (str | Callable[[...], Component] | dict[str, Any] | DKCell | partial[Component]) – function to create the text Components.
kwargs (Any) – keyword arguments for text_factory.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.text_rectangular_multi_layer(text='abc', layers=('TopMetal2drawing',), text_factory='text_rectangular').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
via_array#
- ihp.cells.via_array(via_type='Via1', columns=2, rows=2, via_size=None, via_spacing=None, via_enclosure=None, layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing')[source]#
Create an array of vias.
- Parameters:
via_type (str) – Type of via (Via1, Via2, Via3, Via4, TopVia1, TopVia2).
columns (int) – Number of via columns.
rows (int) – Number of via rows.
via_size (float | None) – Via size in micrometers (uses default if None).
via_spacing (float | None) – Via spacing in micrometers (uses default if None).
via_enclosure (float | None) – Metal enclosure in micrometers (uses default if None).
layer_via1 (tuple[int, int] | str | int | LayerEnum) – Via1 layer.
layer_via2 (tuple[int, int] | str | int | LayerEnum) – Via2 layer.
layer_via3 (tuple[int, int] | str | int | LayerEnum) – Via3 layer.
layer_via4 (tuple[int, int] | str | int | LayerEnum) – Via4 layer.
layer_topvia1 (tuple[int, int] | str | int | LayerEnum) – TopVia1 layer.
layer_topvia2 (tuple[int, int] | str | int | LayerEnum) – TopVia2 layer.
- Returns:
Component with via array.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.via_array(via_type='Via1', columns=2, rows=2, layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
via_stack#
- ihp.cells.via_stack(bottom_layer='Metal1', top_layer='Metal2', size=(10.0, 10.0), vn_columns=2, vn_rows=2, vt1_columns=1, vt1_rows=1, vt2_columns=1, vt2_rows=1, layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_metal3='Metal3drawing', layer_metal4='Metal4drawing', layer_metal5='Metal5drawing', layer_topmetal1='TopMetal1drawing', layer_topmetal2='TopMetal2drawing', layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing')[source]#
Create a via stack connecting multiple metal layers.
- Parameters:
bottom_layer (str) – Bottom metal layer name.
top_layer (str) – Top metal layer name.
size (tuple[float, float]) – Size of the metal stack (width, height) in micrometers.
vn_columns (int) – Number of columns for normal vias (Via1-Via4).
vn_rows (int) – Number of rows for normal vias.
vt1_columns (int) – Number of columns for TopVia1.
vt1_rows (int) – Number of rows for TopVia1.
vt2_columns (int) – Number of columns for TopVia2.
vt2_rows (int) – Number of rows for TopVia2.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_metal2 (tuple[int, int] | str | int | LayerEnum) – Metal2 layer.
layer_metal3 (tuple[int, int] | str | int | LayerEnum) – Metal3 layer.
layer_metal4 (tuple[int, int] | str | int | LayerEnum) – Metal4 layer.
layer_metal5 (tuple[int, int] | str | int | LayerEnum) – Metal5 layer.
layer_topmetal1 (tuple[int, int] | str | int | LayerEnum) – TopMetal1 layer.
layer_topmetal2 (tuple[int, int] | str | int | LayerEnum) – TopMetal2 layer.
layer_via1 (tuple[int, int] | str | int | LayerEnum) – Via1 layer.
layer_via2 (tuple[int, int] | str | int | LayerEnum) – Via2 layer.
layer_via3 (tuple[int, int] | str | int | LayerEnum) – Via3 layer.
layer_via4 (tuple[int, int] | str | int | LayerEnum) – Via4 layer.
layer_topvia1 (tuple[int, int] | str | int | LayerEnum) – TopVia1 layer.
layer_topvia2 (tuple[int, int] | str | int | LayerEnum) – TopVia2 layer.
- Returns:
Component with via stack.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.via_stack(bottom_layer='Metal1', top_layer='Metal2', size=(10.0, 10.0), vn_columns=2, vn_rows=2, vt1_columns=1, vt1_rows=1, vt2_columns=1, vt2_rows=1, layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_metal3='Metal3drawing', layer_metal4='Metal4drawing', layer_metal5='Metal5drawing', layer_topmetal1='TopMetal1drawing', layer_topmetal2='TopMetal2drawing', layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
via_stack_with_pads#
- ihp.cells.via_stack_with_pads(bottom_layer='Metal1', top_layer='TopMetal2', size=(10.0, 10.0), pad_size=(20.0, 20.0), pad_spacing=50.0, layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_metal3='Metal3drawing', layer_metal4='Metal4drawing', layer_metal5='Metal5drawing', layer_topmetal1='TopMetal1drawing', layer_topmetal2='TopMetal2drawing', layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing')[source]#
Create a via stack with test pads.
- Parameters:
bottom_layer (str) – Bottom metal layer name.
top_layer (str) – Top metal layer name.
size (tuple[float, float]) – Size of the via stack (width, height) in micrometers.
pad_size (tuple[float, float]) – Size of the test pads (width, height) in micrometers.
pad_spacing (float) – Spacing between pads in micrometers.
layer_metal1 (tuple[int, int] | str | int | LayerEnum) – Metal1 layer.
layer_metal2 (tuple[int, int] | str | int | LayerEnum) – Metal2 layer.
layer_metal3 (tuple[int, int] | str | int | LayerEnum) – Metal3 layer.
layer_metal4 (tuple[int, int] | str | int | LayerEnum) – Metal4 layer.
layer_metal5 (tuple[int, int] | str | int | LayerEnum) – Metal5 layer.
layer_topmetal1 (tuple[int, int] | str | int | LayerEnum) – TopMetal1 layer.
layer_topmetal2 (tuple[int, int] | str | int | LayerEnum) – TopMetal2 layer.
layer_via1 (tuple[int, int] | str | int | LayerEnum) – Via1 layer.
layer_via2 (tuple[int, int] | str | int | LayerEnum) – Via2 layer.
layer_via3 (tuple[int, int] | str | int | LayerEnum) – Via3 layer.
layer_via4 (tuple[int, int] | str | int | LayerEnum) – Via4 layer.
layer_topvia1 (tuple[int, int] | str | int | LayerEnum) – TopVia1 layer.
layer_topvia2 (tuple[int, int] | str | int | LayerEnum) – TopVia2 layer.
- Returns:
Component with via stack and test pads.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.via_stack_with_pads(bottom_layer='Metal1', top_layer='TopMetal2', size=(10.0, 10.0), pad_size=(20.0, 20.0), pad_spacing=50.0, layer_metal1='Metal1drawing', layer_metal2='Metal2drawing', layer_metal3='Metal3drawing', layer_metal4='Metal4drawing', layer_metal5='Metal5drawing', layer_topmetal1='TopMetal1drawing', layer_topmetal2='TopMetal2drawing', layer_via1='Via1drawing', layer_via2='Via2drawing', layer_via3='Via3drawing', layer_via4='Via4drawing', layer_topvia1='TopVia1drawing', layer_topvia2='TopVia2drawing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
wire_corner#
- ihp.cells.wire_corner(cross_section='metal_routing', width=None)[source]#
Returns 45 degrees electrical corner wire.
- Parameters:
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
width (float | None) – optional width. Defaults to cross_section width.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.wire_corner(cross_section='metal_routing').copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)
wire_corner45#
- ihp.cells.wire_corner45(cross_section='metal_routing', radius=10, width=None, layer=None, with_corner90_ports=True)[source]#
Returns 90 degrees electrical corner wire.
- Parameters:
cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – spec.
radius (float) – ignored.
width (float | None) – optional width. Defaults to cross_section width.
layer (tuple[int, int] | str | int | LayerEnum | None) – ignored.
with_corner90_ports (bool) – if True, adds ports at 90 degrees.
- Return type:
Component
from ihp import PDK, cells
PDK.activate()
c = cells.wire_corner45(cross_section='metal_routing', radius=10, with_corner90_ports=True).copy()
c.draw_ports()
c.plot()
(Source code, png, hires.png, pdf)