ahkab.mosq¶
The Square Law Mos Model¶
This module defines two classes:
mosq_device, the devicemosq_model, the model
Implementation details¶
Assuming \(V_{ds} > 0\) and a transistor type N in the following, we have the following regions implemented:
- No subthreshold conduction.
- \(V_{gs} < V_T\)
- \(I_D = 0\)
- Ohmic region
- \(V_{GS} > V_T\) and \(V_{GD} > V_T\)
- \(I_D = k_n W/L ((V_{GS}-V_{T})V_{DS} - V_{DS}^2/2)\)
- Saturation region
- \(V_{GS} > V_T\) and \(V_{DS} > V_{GS} - V_{T}\)
- \(V_{GS} < V_{T}\)
- \(I_D = 1/2 k_n W/L (V_{GS}-V_T)^2 * [1 + \lambda*(V_{DS}-V_{GS}+V_T)]\)
Module reference¶
-
class
mosq_device(part_id, nd, ng, ns, nb, W, L, model, M=1, N=1)[source]¶ Quadratic Law MOSFET device
Parameters:
- part_id : string
- The part ID of the model. Eg.
'M1'or'Mlow', the first letter should always be'M'. - nd : int
- drain node
- ng : int
- gate node
- ns : int
- source node
- nb : int
- bulk node
- L : float
- element width [m]
- W : float
- element length [m]
- model : mosq_mos_model instance
- the model for the device
- M : int, optional
- shunt multiplier (n. of shunt devices)
- N : int, optional
- series multiplier (n. of series devices)
-
get_drive_ports(op)[source]¶ Get the circuit ports that drive the device.
Returns:
tp : a tuple of tuples of nodes, each node being a drive port of the device.
Eg.
tpmight be defined as:tp = (port0, port1, port2...)
Where each port in the tuple is of the form:
port0 = (nplus, nminus)
In the case of a MOSQ device, the method returns:
((nd, nb), (ng, nb), (ns, nb))
Where:
ndis the internal identifier of the drain node,ngis the internal identifier of the gate node,nsis the internal identifier of the source node.nbis the internal identifier of the bulk node,
-
get_op_info(ports_v)[source]¶ Information regarding the Operating Point (OP)
Parameters:
- ports_v : list of lists
- The voltages applied to all the driving ports, grouped by output port.
i.e.
[<list of voltages for the drive ports of output port 0>, <list of voltages for the drive ports of output port 1>, ..., <list of voltages for the drive ports of output port N>]
Usually, this method returns
op_keysand the correspondingop_info, two lists, one holding the labels, the other the corresponding values.In the case of MOSFETs, the values are way too many to be shown in a linear table. For this reason, we return
Noneasop_keys, and we return forop_infoa list which holds both labels and values in a table-like manner, spanning the vertical and horizontal dimension.For this reason, each MOSFET has to have its OP info printed alone, not grouped as it happens with most other elements.
Returns:
- op_keys :
None - See above for why this value is always
None. - op_info : list of floats
- The OP information ready to be passed to
printing.table()for arranging it in a pretty table to display.
-
get_output_ports()[source]¶ Get the circuit ports where the device injects current.
Returns:
ports : a tuple of tuples of nodes, such as as:
(port0, port1, port2...)
Where each port in the tuple is itself a tuple, made of two nodes, eg.
port0 = (nplus, nminus)
In the case of a MOS device, the method returns:
((nd, ns),)
Where:
ndis the internal identifier of the drain node,nsis the internal identifier of the source node.
-
gstamp(ports_v, time=0, reduced=True)[source]¶ Get the transconductance stamp matrix
Parameters:
- ports_v : sequence
- a sequence of the form:
[voltage_across_port0, voltage_across_port1, ...] - time : float, optional
- the simulation time at which the evaluation is performed. Set it to
Noneduring DC analysis. Defaults to 0. - reduced : bool, optional
- Whether the returned matrix should be in reduced form or not.
Defaults to
True, corresponding to reduced form.
Returns:
- indices : sequence of sequences
- The indices corresponding to the stamp matrix.
- stamp : ndarray
- The stamp matrix.
-
istamp(ports_v, time=0, reduced=True)[source]¶ Get the current stamp matrix
A stamp matrix corresponding to the current flowing in the element with the voltages applied as specified in the
ports_vvector.Parameters:
- ports_v : list
- A list in the form:
[voltage_across_port0, voltage_across_port1, ...] - time: float
- the simulation time at which the evaluation is performed.
It has no effect here. Set it to
Noneduring DC analysis.
-
class
mosq_mos_model(name=None, TYPE=u'n', TNOM=None, COX=None, GAMMA=None, NSUB=None, PHI=None, VTO=None, KP=None, LAMBDA=None, AKP=None, AVT=None, TOX=None, VFB=None, U0=None, TCV=None, BEX=None)[source]¶ -
-
get_gm(*key)[source]¶ Get the gate-source transconductance
Mathematically:
\[g_{ms} = \frac{dI_{DS}}{d(VG-VS)}\]Often this is referred to as just \(g_m\).
Parameters:
- device : object
- The device object holding the device parameters as attributes.
- voltages : tuple
- A tuple containing the voltages applied to the driving ports.
In this case, the tuple is
(vds, vgs, vbs).
Returns:
- gmb : float
- The gate-source transconductace.
-
get_gmb(*key)[source]¶ Get the bulk-source transconductance
Mathematically:
\[g_{mb} = \frac{dI_{DS}}{d(VS-VB)}\]Parameters:
- device : object
- The device object holding the device parameters as attributes.
- voltages : tuple
- A tuple containing the voltages applied to the driving ports.
In this case, the tuple is
(vds, vgs, vbs).
Returns:
- gmb : float
- The source-bulk transconductace.
-
get_gmd(*key)[source]¶ Get the drain-source transconductance
Mathematically:
\[g_{md} = \frac{dI_{DS}}{d(VD-VS)}\]Parameters:
- device : object
- The device object holding the device parameters as attributes.
- voltages : tuple
- A tuple containing the voltages applied to the driving ports.
In this case, the tuple is
(vds, vgs, vbs).
Returns:
- gmb : float
- The drain-source transconductace.
-
get_ids(*key)[source]¶ Get the drain-source current
Parameters:
- device : object
- The device object holding the device parameters as attributes.
- voltages : tuple
- A tuple containing the voltages applied to the driving ports.
In this case, the tuple is
(vds, vgs, vbs).
Returns:
- ids : float
- The drain-source current
-
get_voltages(vds, vgs, vbs)[source]¶ Performs the D <-> S swap if needed.
Returns:
- voltages : tuple
- A tuple containing
(VDS, VGS, VBS)after the swap - CS : int
CSis an integer which equals to: * +1 if no swap was necessary, * -1 if VD and VS have been swapped.
-