Hi all, newbie here!
I want to simulate a transistor using PySpice.
Can anyone tell me the proper way of including "sky130_fd_pr__nfet_01v8_lvt" in my simple python code here?
I use PySpice 1.5 / ngspice-32.
Including a simple PTM model file and defining a MOSFET just works fine.
circuit.include("./ptm_90nm.model")
circuit.M('1', 'node_drain', 'node_gate', circuit.gnd, circuit.gnd, model='nmos', width=1e-6, length=1e-6)
However, including
sky130_fd_pr__nfet_01v8_lvt.pm3.spice
and defining a subcircuit does not work.
circuit.include("../share/pdk/sky130A/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__nfet_01v8_lvt.pm3.spice")
circuit.X('M1', d='node_drain', g='node_gate', s=circuit.gnd, b=circuit.gnd, model='sky130_fd_pr__nfet_01v8', w=1, l=1, subcircuit_name='nfet')
---
Error: unknown subckt: xm1 nfet b=0 d={node_drain} g={node_gate} l=1 model={sky130_fd_pr__nfet_01v8} s=0 w=1
Simulation interrupted due to error!
Am I missing something?
Please refer to the code below. It's just I-V plotting, but I'm lost. Haha
import matplotlib.pyplot as plt
import numpy as np
import PySpice
from PySpice.Spice.Netlist import Circuit, SubCircuit, SubCircuitFactory
from PySpice.Unit import u_V, u_mA
import sys, os
if sys.platform =="linux" or sys.platform =="linux2":
PySpice.Spice.Simulation.CircuitSimulator.DEFAULT_SIMULATOR = 'ngspice-subprocess'
circuit = Circuit('IVtest')
Vdrain = circuit.V('drain', 'node_drain', circuit.gnd, 1@u_V)
Vgate = circuit.V('gate', 'node_gate', circuit.gnd, 1@u_V)
# circuit.include("./ptm_90nm.model")
# circuit.M('1', 'node_drain', 'node_gate', circuit.gnd, circuit.gnd, model='nmos', width=1e-6, length=1e-6) # this just works fine
# circuit.lib('../share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice', 'tt')
# circuit.include("../share/pdk/sky130A/libs.tech/ngspice/corners/tt.spice")
circuit.include("../share/pdk/sky130A/libs.ref/sky130_fd_pr/spice/sky130_fd_pr__nfet_01v8_lvt.pm3.spice")
circuit.X('M1', d='node_drain', g='node_gate', s=circuit.gnd, b=circuit.gnd, model='sky130_fd_pr__nfet_01v8', w=1, l=1, subcircuit_name='nfet')
print(circuit)
simulator = circuit.simulator(temperature=27)
print(simulator)
analysis = simulator.dc(Vgate=slice(0, 2, 0.1))
figure, ax = plt.subplots(figsize=(6,3))
ax.plot(u_V(analysis.node_gate), u_mA(-analysis.Vdrain))
ax.grid()
ax.set_xlabel('Vgs [V]')
ax.set_ylabel('Id [mA]')
ax.set_yscale('log')
plt.tight_layout()
plt.show()
Including the library resulted in ~2000 lines of parsing error and >20min of running time, so I aborted it.
Thanks in advance