Cells

Contents

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()

(Source code)

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)

_images/cells-2.png

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)

_images/cells-3.png
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)

_images/cells-4.png

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)

_images/cells-5.png
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)

_images/cells-6.png

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)

_images/cells-7.png
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)

_images/cells-8.png

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)

_images/cells-9.png
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)

_images/cells-10.png

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)

_images/cells-11.png
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)

_images/cells-12.png

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)

_images/cells-13.png
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)

_images/cells-14.png

NoFillerStack#

ihp.cells.NoFillerStack()[source]#

Returns NoFillerStack fixed cell.

import ihp

c = ihp.cells.NoFillerStack()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-15.png
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)

_images/cells-16.png

SVaricap#

ihp.cells.SVaricap()[source]#

Returns SVaricap fixed cell.

import ihp

c = ihp.cells.SVaricap()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-17.png
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)

_images/cells-18.png

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)

_images/cells-19.png
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)

_images/cells-20.png

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)

_images/cells-21.png
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)

_images/cells-22.png

TSV#

ihp.cells.TSV()[source]#

Returns TSV fixed cell.

import ihp

c = ihp.cells.TSV()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-23.png
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)

_images/cells-24.png

ViaStack#

ihp.cells.ViaStack()[source]#

Returns ViaStack fixed cell.

import ihp

c = ihp.cells.ViaStack()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-25.png
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)

_images/cells-26.png

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()

(Source code)

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()

(Source code)

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)

_images/cells-29.png

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)

_images/cells-30.png

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)

_images/cells-31.png

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)

_images/cells-32.png

bondpad#

ihp.cells.bondpad()[source]#

Returns bondpad fixed cell.

import ihp

c = ihp.cells.bondpad()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-33.png
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)

_images/cells-34.png

bondpad_array#

ihp.cells.bondpad_array(n_pads=4, pad_pitch=100.0, pad_diameter=68.0, shape='octagon', stack_metals=True)[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.

  • stack_metals (bool) – Stack all metal layers.

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=68.0, shape='octagon', stack_metals=True).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-35.png

chipText#

ihp.cells.chipText()[source]#

Returns chipText fixed cell.

import ihp

c = ihp.cells.chipText()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-36.png
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)

_images/cells-37.png

cmim#

ihp.cells.cmim()[source]#

Returns cmim fixed cell.

import ihp

c = ihp.cells.cmim()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-38.png
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)

_images/cells-39.png

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)

_images/cells-40.png
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)

_images/cells-41.png

dantenna#

ihp.cells.dantenna()[source]#

Returns dantenna fixed cell.

import ihp

c = ihp.cells.dantenna()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-42.png
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)

_images/cells-43.png

diffstbprobe#

ihp.cells.diffstbprobe()[source]#

Returns diffstbprobe fixed cell.

import ihp

c = ihp.cells.diffstbprobe()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-44.png
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)

_images/cells-45.png

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)

_images/cells-46.png
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)

_images/cells-47.png

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)

_images/cells-48.png
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)

_images/cells-49.png

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)

_images/cells-50.png
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)

_images/cells-51.png

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)

_images/cells-52.png
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)

_images/cells-53.png

dpantenna#

ihp.cells.dpantenna()[source]#

Returns dpantenna fixed cell.

import ihp

c = ihp.cells.dpantenna()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-54.png
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)

_images/cells-55.png

dummy1#

ihp.cells.dummy1()[source]#

Returns dummy1 fixed cell.

import ihp

c = ihp.cells.dummy1()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-56.png
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)

_images/cells-57.png

esd_nmos#

ihp.cells.esd_nmos(width=50.0, length=0.5, nf=10, model='esd_nmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-58.png

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 0x7f0e0c1d11c0>, inside=True, pin_layer=(8, 2), port_layer=(8, 0)), functools.partial(<function add_ports_from_markers_center at 0x7f0e0c1d11c0>, inside=True, pin_layer=(10, 2), port_layer=(10, 0))), rename_duplicated_cells=False).copy()
c.draw_ports()
c.plot()

(Source code)

inductor2#

ihp.cells.inductor2(width=2.0, space=2.1, diameter=15.48, resistance=0.5777, inductance=3.3303e-11, turns=1, block_qrc=True, substrate_etch=False)[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 (bool) – Block QRC layer.

  • substrate_etch (bool) – Enable substrate etching.

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=15.48, resistance=0.5777, inductance=3.3303e-11, turns=1, block_qrc=True, substrate_etch=False).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-60.png

inductor3#

ihp.cells.inductor3(width=2.0, space=2.1, diameter=24.68, resistance=1.386, inductance=2.215e-10, turns=2, block_qrc=True, substrate_etch=False)[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).

  • block_qrc (bool) – Block QRC layer.

  • substrate_etch (bool) – Enable substrate etching.

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, block_qrc=True, substrate_etch=False).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-61.png

iprobe#

ihp.cells.iprobe()[source]#

Returns iprobe fixed cell.

import ihp

c = ihp.cells.iprobe()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-62.png
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)

_images/cells-63.png

isolbox#

ihp.cells.isolbox()[source]#

Returns isolbox fixed cell.

import ihp

c = ihp.cells.isolbox()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-64.png
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)

_images/cells-65.png

lvsres#

ihp.cells.lvsres()[source]#

Returns lvsres fixed cell.

import ihp

c = ihp.cells.lvsres()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-66.png
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)

_images/cells-67.png

nmos#

ihp.cells.nmos(width=1.0, length=0.13, nf=1, m=1, model='sg13_lv_nmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-68.png

nmosHV#

ihp.cells.nmosHV()[source]#

Returns nmosHV fixed cell.

import ihp

c = ihp.cells.nmosHV()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-69.png
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)

_images/cells-70.png

nmos_hv#

ihp.cells.nmos_hv(width=1.0, length=0.45, nf=1, m=1, model='sg13_hv_nmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code)

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)

_images/cells-72.png
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)

_images/cells-73.png

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)

_images/cells-74.png
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)

_images/cells-75.png

npn13G2#

ihp.cells.npn13G2()[source]#

Returns npn13G2 fixed cell.

import ihp

c = ihp.cells.npn13G2()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-76.png
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)

_images/cells-77.png

npn13G2L#

ihp.cells.npn13G2L()[source]#

Returns npn13G2L fixed cell.

import ihp

c = ihp.cells.npn13G2L()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-78.png
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)

_images/cells-79.png

npn13G2V#

ihp.cells.npn13G2V()[source]#

Returns npn13G2V fixed cell.

import ihp

c = ihp.cells.npn13G2V()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-80.png
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)

_images/cells-81.png

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)

_images/cells-82.png
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)

_images/cells-83.png

ntap#

ihp.cells.ntap()[source]#

Returns ntap fixed cell.

import ihp

c = ihp.cells.ntap()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-84.png
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)

_images/cells-85.png

ntap1#

ihp.cells.ntap1(width=1.0, length=1.0, rows=1, cols=1)[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.

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).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-86.png

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()

(Source code)

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()

(Source code)

pmos#

ihp.cells.pmos(width=1.0, length=0.13, nf=1, m=1, model='sg13_lv_pmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-89.png

pmosHV#

ihp.cells.pmosHV()[source]#

Returns pmosHV fixed cell.

import ihp

c = ihp.cells.pmosHV()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-90.png
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)

_images/cells-91.png

pmos_hv#

ihp.cells.pmos_hv(width=1.0, length=0.45, nf=1, m=1, model='sg13_hv_pmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code)

pnpMPA#

ihp.cells.pnpMPA()[source]#

Returns pnpMPA fixed cell.

import ihp

c = ihp.cells.pnpMPA()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-93.png
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)

_images/cells-94.png

ptap#

ihp.cells.ptap()[source]#

Returns ptap fixed cell.

import ihp

c = ihp.cells.ptap()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-95.png
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)

_images/cells-96.png

ptap1#

ihp.cells.ptap1(width=1.0, length=1.0, rows=1, cols=1)[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.

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).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-97.png

rfcmim#

ihp.cells.rfcmim()[source]#

Returns rfcmim fixed cell.

import ihp

c = ihp.cells.rfcmim()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-98.png
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)

_images/cells-99.png

rfnmos#

ihp.cells.rfnmos(width=2.0, length=0.13, nf=2, m=1, model='sg13_lv_rfnmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code)

rfnmosHV#

ihp.cells.rfnmosHV()[source]#

Returns rfnmosHV fixed cell.

import ihp

c = ihp.cells.rfnmosHV()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-101.png
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)

_images/cells-102.png

rfpmos#

ihp.cells.rfpmos(width=2.0, length=0.13, nf=2, m=1, model='sg13_lv_rfpmos')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code)

rfpmosHV#

ihp.cells.rfpmosHV()[source]#

Returns rfpmosHV fixed cell.

import ihp

c = ihp.cells.rfpmosHV()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-104.png
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)

_images/cells-105.png

rhigh#

ihp.cells.rhigh(width=1.4, length=20.0, resistance=None, model='rhigh')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-106.png

rppd#

ihp.cells.rppd(width=0.8, length=10.0, resistance=None, model='rppd')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-107.png

rsil#

ihp.cells.rsil(width=0.8, length=10.0, resistance=None, model='rsil')[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.

Returns:

Component with silicided poly resistor layout.

Return type:

Component

from ihp import PDK, cells

PDK.activate()

c = cells.rsil(width=0.8, length=10.0, model='rsil').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-108.png

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)

_images/cells-109.png
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)

_images/cells-110.png

scr1#

ihp.cells.scr1()[source]#

Returns scr1 fixed cell.

import ihp

c = ihp.cells.scr1()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-111.png
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)

_images/cells-112.png

sealring#

ihp.cells.sealring(width=200.0, height=200.0, ring_width=5.0)[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.

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).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-113.png

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)

_images/cells-114.png
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)

_images/cells-115.png

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)

_images/cells-116.png
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)

_images/cells-117.png

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)

_images/cells-118.png
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)

_images/cells-119.png

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)

_images/cells-120.png

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)

_images/cells-121.png

svaricap#

ihp.cells.svaricap(width=1.0, length=1.0, nf=1, model='svaricap')[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.

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').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-122.png

text_rectangular#

ihp.cells.text_rectangular(text='abc', size=3, justify='left', layer='TOPMETAL2')[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='TOPMETAL2').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-123.png

text_rectangular_multi_layer#

ihp.cells.text_rectangular_multi_layer(text='abc', layers=('TOPMETAL2',), 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=('TOPMETAL2',), text_factory='text_rectangular').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-124.png

via_array#

ihp.cells.via_array(via_type='Via1', columns=2, rows=2, via_size=None, via_spacing=None, via_enclosure=None)[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).

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).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-125.png

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)[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.

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).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-126.png

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)[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.

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).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-127.png

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)

_images/cells-128.png

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)

_images/cells-129.png