Source code for ihp.cells.primitives

"""VLSIR-Compatible Components, Generated with Claude Code"""

import gdsfactory as gf

# Common port layer for schematic-only elements
SCHEM_LAYER = (250, 0)


[docs] @gf.cell def resistor(resistance: float = 1e3, model: str = "rpoly") -> gf.Component: c = gf.Component() c.add_port(name="p", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "resistor" c.info["vlsir"] = { "model": model, "spice_type": "RESISTOR", "spice_lib": None, "port_order": ["p", "n"], "port_map": {}, "params": {"r": resistance}, } return c
[docs] @gf.cell def capacitor(capacitance: float = 1e-12, model: str = "cpoly") -> gf.Component: c = gf.Component() c.add_port(name="p", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "capacitor" c.info["vlsir"] = { "model": model, "spice_type": "CAPACITOR", "spice_lib": None, "port_order": ["p", "n"], "port_map": {}, "params": {"c": capacitance}, } return c
[docs] @gf.cell def inductor(inductance: float = 1e-9, model: str = "lind") -> gf.Component: c = gf.Component() c.add_port(name="p", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "inductor" c.info["vlsir"] = { "model": model, "spice_type": "INDUCTOR", "spice_lib": None, "port_order": ["p", "n"], "port_map": {}, "params": {"l": inductance}, } return c
[docs] @gf.cell def mos( w: float = 1e-6, length: float = 100e-9, nf: int = 1, model: str = "nmos", spice_lib: str | None = None, ) -> gf.Component: c = gf.Component() c.add_port(name="D", center=(0, 1), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="G", center=(-1, 0), width=0.1, orientation=270, layer=SCHEM_LAYER) c.add_port(name="S", center=(0, -1), width=0.1, orientation=0, layer=SCHEM_LAYER) c.add_port(name="B", center=(1, 0), width=0.1, orientation=90, layer=SCHEM_LAYER) c.info["model"] = "mos" c.info["vlsir"] = { "model": model, "spice_type": "MOS", "spice_lib": spice_lib, "port_order": ["D", "G", "S", "B"], "port_map": {}, "params": {"w": w, "l": length, "nf": nf}, } return c
[docs] @gf.cell def diode(model: str = "diol", area: float = 1e-12, pj: float = 1e-6) -> gf.Component: c = gf.Component() c.add_port(name="p", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "diode" c.info["vlsir"] = { "model": model, "spice_type": "DIODE", "spice_lib": None, "port_order": ["p", "n"], "port_map": {}, "params": {"area": area, "pj": pj}, } return c
[docs] @gf.cell def bipolar( model: str = "npn", spice_lib: str | None = None, area: float = 1.0, ) -> gf.Component: c = gf.Component() c.add_port(name="C", center=(0, 1), width=0.1, orientation=90, layer=SCHEM_LAYER) c.add_port(name="B", center=(-1, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="E", center=(0, -1), width=0.1, orientation=270, layer=SCHEM_LAYER) c.add_port( name="S", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER ) # substrate c.info["model"] = "bipolar" c.info["vlsir"] = { "model": model, "spice_type": "BIPOLAR", "spice_lib": spice_lib, "port_order": ["C", "B", "E", "S"], "port_map": {}, "params": {"area": area}, } return c
[docs] @gf.cell def vsource(dc: float = 0.0, ac: float = 0.0) -> gf.Component: """Voltage Source""" c = gf.Component() c.add_port(name="p", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "vsource" c.info["vlsir"] = { "model": "vsource", "spice_type": "VSOURCE", "spice_lib": None, "port_order": ["p", "n"], "port_map": {}, "params": {"dc": dc, "ac": ac}, } return c
[docs] @gf.cell def isource(dc: float = 0.0, ac: float = 0.0) -> gf.Component: """Current Source""" c = gf.Component() c.add_port(name="p", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "isource" c.info["vlsir"] = { "model": "isource", "spice_type": "ISOURCE", "spice_lib": None, "port_order": ["p", "n"], "port_map": {}, "params": {"dc": dc, "ac": ac}, } return c
[docs] @gf.cell def vcvs(gain: float = 1.0) -> gf.Component: """Voltage-controlled voltage source.""" c = gf.Component() c.add_port( name="p_out", center=(0, 1), width=0.1, orientation=90, layer=SCHEM_LAYER ) c.add_port( name="n_out", center=(0, -1), width=0.1, orientation=270, layer=SCHEM_LAYER ) c.add_port( name="p_ctrl", center=(-1, 0), width=0.1, orientation=180, layer=SCHEM_LAYER ) c.add_port( name="n_ctrl", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER ) c.info["model"] = "vcvs" c.info["vlsir"] = { "model": "vcvs", "spice_type": "VCVS", "spice_lib": None, "port_order": ["p_out", "n_out", "p_ctrl", "n_ctrl"], "port_map": {}, "params": {"gain": gain}, } return c
[docs] @gf.cell def vccs(gm: float = 1e-3) -> gf.Component: """Voltage-controlled current source.""" c = gf.Component() c.add_port( name="p_out", center=(0, 1), width=0.1, orientation=90, layer=SCHEM_LAYER ) c.add_port( name="n_out", center=(0, -1), width=0.1, orientation=270, layer=SCHEM_LAYER ) c.add_port( name="p_ctrl", center=(-1, 0), width=0.1, orientation=180, layer=SCHEM_LAYER ) c.add_port( name="n_ctrl", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER ) c.info["model"] = "vccs" c.info["vlsir"] = { "model": "vccs", "spice_type": "VCCS", "spice_lib": None, "port_order": ["p_out", "n_out", "p_ctrl", "n_ctrl"], "port_map": {}, "params": {"gm": gm}, } return c
[docs] @gf.cell def cccs(gain: float = 1.0) -> gf.Component: """Current-controlled current source.""" c = gf.Component() c.add_port( name="p_out", center=(0, 1), width=0.1, orientation=90, layer=SCHEM_LAYER ) c.add_port( name="n_out", center=(0, -1), width=0.1, orientation=270, layer=SCHEM_LAYER ) c.add_port( name="p_ctrl", center=(-1, 0), width=0.1, orientation=180, layer=SCHEM_LAYER ) c.add_port( name="n_ctrl", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER ) c.info["model"] = "cccs" c.info["vlsir"] = { "model": "cccs", "spice_type": "CCCS", "spice_lib": None, "port_order": ["p_out", "n_out", "p_ctrl", "n_ctrl"], "port_map": {}, "params": {"gain": gain}, } return c
[docs] @gf.cell def ccvs(rm: float = 1e3) -> gf.Component: """Current-controlled voltage source.""" c = gf.Component() c.add_port( name="p_out", center=(0, 1), width=0.1, orientation=90, layer=SCHEM_LAYER ) c.add_port( name="n_out", center=(0, -1), width=0.1, orientation=270, layer=SCHEM_LAYER ) c.add_port( name="p_ctrl", center=(-1, 0), width=0.1, orientation=180, layer=SCHEM_LAYER ) c.add_port( name="n_ctrl", center=(1, 0), width=0.1, orientation=0, layer=SCHEM_LAYER ) c.info["model"] = "ccvs" c.info["vlsir"] = { "model": "ccvs", "spice_type": "CCVS", "spice_lib": None, "port_order": ["p_out", "n_out", "p_ctrl", "n_ctrl"], "params": {"rm": rm}, } return c
[docs] @gf.cell def tline(z0: float = 50.0, td: float = 1e-9) -> gf.Component: """Transmission line.""" c = gf.Component() c.add_port(name="p1", center=(0, 0), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="n1", center=(0, -1), width=0.1, orientation=180, layer=SCHEM_LAYER) c.add_port(name="p2", center=(2, 0), width=0.1, orientation=0, layer=SCHEM_LAYER) c.add_port(name="n2", center=(2, -1), width=0.1, orientation=0, layer=SCHEM_LAYER) c.info["model"] = "tline" c.info["vlsir"] = { "model": "tline", "spice_type": "TLINE", "spice_lib": None, "port_order": ["p1", "n1", "p2", "n2"], "params": {"z0": z0, "td": td}, } return c
[docs] @gf.cell def subckt( model: str, ports: list[str], spice_lib: str | None = None, params: dict | None = None, ) -> gf.Component: """Generic subcircuit wrapper.""" c = gf.Component() c.info["model"] = model for i, port_name in enumerate(ports): c.add_port( name=port_name, center=(i, 0), width=0.1, orientation=0 if i % 2 else 180, layer=SCHEM_LAYER, ) c.info["vlsir"] = { "model": model, "spice_type": "SUBCKT", "spice_lib": spice_lib, "port_order": ports, "params": params or {}, } return c