{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\\title{Diode Connected MOSFET Tobology}\n",
"\\author{Steven K Armour}\n",
"\\maketitle"
]
},
{
"cell_type": "markdown",
"metadata": {
"toc": true
},
"source": [
"
Table of Contents
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Background\n",
"The Diode connected Mosfet is one of the four single Mosfet topologies (the others being CS, CD, CG) where the Mosfets gate is connected to its drain (for both NMOS and PMOS) thereby forcing it to behave much like a Diode till certain compliance voltage is reached. This compliance voltage is similar to the Diodes threshold voltage and where beyond this point the MOSFET will no longer conduct current at meaningful amounts. \n",
"\n",
"The usage of diode-connected MOSFETs is important not only in creating a pseudo Diode to then recreate notable diode topologies such as Half and Full wave rectifiers. But are also used like diodes in waveform shaping and biasing to eliminate resistors where possible at the ASIC level. The two most common first exposure to diode-connected MOSFETs come by way of the Saturated Enhancement loaded inverters in Digital MOSFETs topologies and in biasing and the current reference of current mirrors in Analog Mosfet topologies. \n",
"\n",
"(insert images)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References (Need to Finish)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from sympy import *\n",
"init_printing()\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"from itertools import product as IProd\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"from matplotlib import cm\n",
"from matplotlib.ticker import LinearLocator, FormatStrFormatter\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Importing Jupyter notebook from SympyMOSModels.ipynb\n"
]
}
],
"source": [
"import nbimporter\n",
"nbimporter.options['only_defs'] = False\n",
"from SympyMOSModels import *"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from PySpice.Probe.Plot import plot\n",
"from PySpice.Spice.Library import SpiceLibrary\n",
"from PySpice.Spice.Netlist import Circuit\n",
"from PySpice.Unit import *\n",
"\n",
"libraries_path = 'SpiceLib/'\n",
"spice_library = SpiceLibrary(libraries_path)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Diode Connected NMOS\n",
"(Insert Image)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Square Law Theory "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Diode Connected NMOS is defined as the $V_{GS}=V_{DS}$ made possible by the connection of the gate to the drain. And in this analysis we will assume that the body voltage is not in play."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"VD, VS=symbols('V_D, V_S')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simplified Analysis\n",
"In the simplified analysis, we forgo the channel length modulation effect. And we proceed with the analysis of the NMOS via expanding $V_{DS}=V_D-V_S$ where we affix the $V_D$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the simplified analysis, we forgo the channel length modulation effect. And we proceed with the analysis of the NMOS via expanding $V_{DS}=V_D-V_S$ where we affix the $V_D$."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\begin{cases} 0 & \\text{for}\\: V_{DS} < V_{thn} \\\\\\frac{V_{DS} W k_{n'}}{2 L} \\left(V_{DS} - 2 V_{thn}\\right) & \\text{for}\\: V_{DS} < V_{DS} - V_{thn} \\\\\\frac{W k_{n'}}{2 L} \\left(V_{DS} - V_{thn}\\right)^{2} & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
"⎧ 0 for V_DS < Vₜₕₙ \n",
"⎪ \n",
"⎪V_DS⋅W⋅k_n'⋅(V_DS - 2⋅Vₜₕₙ) \n",
"⎪─────────────────────────── for V_DS < V_DS - Vₜₕₙ\n",
"⎪ 2⋅L \n",
"⎨ \n",
"⎪ 2 \n",
"⎪ W⋅k_n'⋅(V_DS - Vₜₕₙ) \n",
"⎪ ───────────────────── otherwise \n",
"⎪ 2⋅L \n",
"⎩ "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NIdSimpDiodConected=simplify(NMOS.IdSimp(subs={VGS:VDS}))\n",
"NIdSimpDiodConected"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\begin{cases} 0 & \\text{for}\\: V_{thn} > V_{D} - V_{S} \\\\\\frac{W k_{n'}}{2 L} \\left(V_{D} - V_{S}\\right) \\left(V_{D} - V_{S} - 2 V_{thn}\\right) & \\text{for}\\: V_{D} - V_{S} < V_{D} - V_{S} - V_{thn} \\\\\\frac{W k_{n'}}{2 L} \\left(V_{D} - V_{S} - V_{thn}\\right)^{2} & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
"⎧ 0 for Vₜₕₙ > V_D - V_S \n",
"⎪ \n",
"⎪W⋅k_n'⋅(V_D - V_S)⋅(V_D - V_S - 2⋅Vₜₕₙ) \n",
"⎪─────────────────────────────────────── for V_D - V_S < V_D - V_S - Vₜₕₙ\n",
"⎪ 2⋅L \n",
"⎨ \n",
"⎪ 2 \n",
"⎪ W⋅k_n'⋅(V_D - V_S - Vₜₕₙ) \n",
"⎪ ────────────────────────── otherwise \n",
"⎪ 2⋅L \n",
"⎩ "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NIdSimpDiodConected=NIdSimpDiodConected.subs(VDS, VD-VS)\n",
"NIdSimpDiodConected"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following example values for a greater than $1\\mu m$ device are based on example 19.1 load NMOS from chapter 19 of reference DeMassa "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"subsN={W:5e6,L:15e6, nTechConst:20e-6, Vnth:1.1, VnA:1/.02, VD:5}"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(1.199999999999999e-06)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NIdSimpDiodConectedN=lambdify(VS, NIdSimpDiodConected.subs(subsN), dummify=False)\n",
"NIdSimpDiodConectedN(3.3)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"VSN=np.linspace(0, 5)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Vs[V] | \n",
" Id[A] | \n",
" DIdDVs[OhmInv] | \n",
" DDIdDDVs | \n",
" DDDIdDDDVs | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 50.000000 | \n",
" 5.000000e+01 | \n",
" 5.000000e+01 | \n",
" 50.000000 | \n",
" 5.000000e+01 | \n",
"
\n",
" \n",
" mean | \n",
" 2.500000 | \n",
" 1.342977e-05 | \n",
" -1.019380e-05 | \n",
" 0.000005 | \n",
" -4.900000e-07 | \n",
"
\n",
" \n",
" std | \n",
" 1.487488 | \n",
" 1.560910e-05 | \n",
" 8.736476e-06 | \n",
" 0.000003 | \n",
" 5.995389e-06 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 0.000000e+00 | \n",
" -2.565986e-05 | \n",
" 0.000000 | \n",
" -2.410473e-05 | \n",
"
\n",
" \n",
" 25% | \n",
" 1.250000 | \n",
" 8.150771e-08 | \n",
" -1.766667e-05 | \n",
" 0.000004 | \n",
" -4.201283e-19 | \n",
"
\n",
" \n",
" 50% | \n",
" 2.500000 | \n",
" 6.542010e-06 | \n",
" -9.333333e-06 | \n",
" 0.000007 | \n",
" 0.000000e+00 | \n",
"
\n",
" \n",
" 75% | \n",
" 3.750000 | \n",
" 2.341484e-05 | \n",
" -1.000000e-06 | \n",
" 0.000007 | \n",
" 3.320369e-19 | \n",
"
\n",
" \n",
" max | \n",
" 5.000000 | \n",
" 5.070000e-05 | \n",
" 0.000000e+00 | \n",
" 0.000007 | \n",
" 1.633333e-05 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Vs[V] Id[A] DIdDVs[OhmInv] DDIdDDVs DDDIdDDDVs\n",
"count 50.000000 5.000000e+01 5.000000e+01 50.000000 5.000000e+01\n",
"mean 2.500000 1.342977e-05 -1.019380e-05 0.000005 -4.900000e-07\n",
"std 1.487488 1.560910e-05 8.736476e-06 0.000003 5.995389e-06\n",
"min 0.000000 0.000000e+00 -2.565986e-05 0.000000 -2.410473e-05\n",
"25% 1.250000 8.150771e-08 -1.766667e-05 0.000004 -4.201283e-19\n",
"50% 2.500000 6.542010e-06 -9.333333e-06 0.000007 0.000000e+00\n",
"75% 3.750000 2.341484e-05 -1.000000e-06 0.000007 3.320369e-19\n",
"max 5.000000 5.070000e-05 0.000000e+00 0.000007 1.633333e-05"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"VSN=np.linspace(0, 5)\n",
"NIdSimpDiodData=pd.DataFrame()\n",
"NIdSimpDiodData['Vs[V]']=VSN\n",
"NIdSimpDiodData['Id[A]']=NIdSimpDiodConectedN(VSN)\n",
"NIdSimpDiodData['DIdDVs[OhmInv]']=np.gradient(NIdSimpDiodData['Id[A]'], NIdSimpDiodData['Vs[V]'])\n",
"NIdSimpDiodData['DDIdDDVs']=np.gradient(NIdSimpDiodData['DIdDVs[OhmInv]'], NIdSimpDiodData['Vs[V]'])\n",
"NIdSimpDiodData['DDDIdDDDVs']=np.gradient(NIdSimpDiodData['DDIdDDVs'], NIdSimpDiodData['Vs[V]'])\n",
"NIdSimpDiodData.describe()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"NMOS Simp Square Law Complince Voltage =3.878[V]\n"
]
}
],
"source": [
"NVCompSimpLoc=np.where(NIdSimpDiodData['DDDIdDDDVs']==NIdSimpDiodData['DDDIdDDDVs'].min())[0][0]\n",
"NVCompSimp=NIdSimpDiodData['Vs[V]'][NVCompSimpLoc]\n",
"print(f'NMOS Simp Square Law Complince Voltage ={NVCompSimp:.3f}[V]')\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, [axId, axDId, axDDId, axDDDId]=plt.subplots(ncols=1, nrows=4, sharex=True)\n",
"NIdSimpDiodData.plot(ax=axId, x='Vs[V]', y='Id[A]', legend=False)\n",
"axId.axvline(x=NVCompSimp, linestyle='--', color='y', \n",
" label=f'VComp={NVCompSimp:.3f}[V]')\n",
"\n",
"axId.set_ylabel('$I_d[A]$')\n",
"axId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axId.grid()\n",
"\n",
"box = axId.get_position()\n",
"axId.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"axId.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"\n",
"NIdSimpDiodData.plot(ax=axDId, x='Vs[V]', y='DIdDVs[OhmInv]', legend=False)\n",
"axDId.axvline(x=NVCompSimp, linestyle='--', color='y')\n",
"\n",
"axDId.set_ylabel(r'$g_m[\\Omega^{-1}]$')\n",
"axDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDId.grid()\n",
"\n",
"\n",
"NIdSimpDiodData.plot(ax=axDDId, x='Vs[V]', y='DDIdDDVs', legend=False)\n",
"axDDId.axvline(x=NVCompSimp, linestyle='--', color='y')\n",
"\n",
"axDDId.set_ylabel('$\\dfrac{\\partial^2 I_d}{\\partial V_{S}^2}$')\n",
"axDDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDDId.grid()\n",
"\n",
"\n",
"\n",
"\n",
"NIdSimpDiodData.plot(ax=axDDDId, x='Vs[V]', y='DDDIdDDDVs', legend=False)\n",
"axDDDId.axvline(x=NVCompSimp, linestyle='--', color='y')\n",
"\n",
"axDDDId.set_ylabel('$\\dfrac{\\partial^3 I_d}{\\partial V_{S}^3}$')\n",
"axDDDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDDDId.set_xlabel('$V_s[V]$')\n",
"axDDDId.grid()\n",
"\n",
"fig.subplots_adjust(hspace=.5)\n",
"plt.suptitle('NMOS Diode $I_d$ Simplifed ');\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the above graph, the substitutions were made to our simple model and `lambdify` was utilized to create a numerical version of the symbolic model of a greater than $1\\mu m$ Diode connected NMOS device. As well be seen later the transconductance ($g_m$) dictates the behavior of the Diode Connected NMOS. And as the differential voltage $V_{DS}$ becomes less, remember $V_D$ is fixed the conductance of the Diode Connect NMOS drops before shutting off much like that of an ordinary rectifying diode as the voltage differential between its terminals approaches the Diodes threshold voltage. Unlike the Diode, this voltage is typically referred to as the compliance voltage. Where we by examining up to the third derivative of the $I_d$ we respect to the changing $V_s$ we can ascertain the compliance voltage exactly (within the scope of the model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Full Analysis\n",
"In this full analysis, the Channel Length Modulation effect $\\dfrac{V_{DS}}{V_A}$ is not ignored and proceed through the analysis as was done in the Simplified Analysis"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\begin{cases} 0 & \\text{for}\\: V_{DS} < V_{thn} \\\\\\frac{V_{DS} W k_{n'}}{2 L V_{An}} \\left(V_{An} + V_{DS}\\right) \\left(V_{DS} - 2 V_{thn}\\right) & \\text{for}\\: V_{DS} < V_{DS} - V_{thn} \\\\\\frac{W k_{n'} \\left(V_{DS} - V_{thn}\\right)^{2}}{2 L V_{An}} \\left(V_{An} + V_{DS}\\right) & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
"⎧ 0 for V_DS < Vₜₕₙ \n",
"⎪ \n",
"⎪V_DS⋅W⋅k_n'⋅(V_An + V_DS)⋅(V_DS - 2⋅Vₜₕₙ) \n",
"⎪───────────────────────────────────────── for V_DS < V_DS - Vₜₕₙ\n",
"⎪ 2⋅L⋅V_An \n",
"⎨ \n",
"⎪ 2 \n",
"⎪ W⋅k_n'⋅(V_An + V_DS)⋅(V_DS - Vₜₕₙ) \n",
"⎪ ─────────────────────────────────── otherwise \n",
"⎪ 2⋅L⋅V_An \n",
"⎩ "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NIdFullDiodConected=simplify(NMOS.IdFull(subs={VGS:VDS}))\n",
"NIdFullDiodConected"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\begin{cases} 0 & \\text{for}\\: V_{thn} > V_{D} - V_{S} \\\\\\frac{W k_{n'}}{2 L V_{An}} \\left(V_{D} - V_{S}\\right) \\left(V_{An} + V_{D} - V_{S}\\right) \\left(V_{D} - V_{S} - 2 V_{thn}\\right) & \\text{for}\\: V_{D} - V_{S} < V_{D} - V_{S} - V_{thn} \\\\\\frac{W k_{n'}}{2 L V_{An}} \\left(V_{An} + V_{D} - V_{S}\\right) \\left(V_{D} - V_{S} - V_{thn}\\right)^{2} & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
"⎧ 0 for Vₜₕₙ > \n",
"⎪ \n",
"⎪W⋅k_n'⋅(V_D - V_S)⋅(V_An + V_D - V_S)⋅(V_D - V_S - 2⋅Vₜₕₙ) \n",
"⎪────────────────────────────────────────────────────────── for V_D - V_S < V\n",
"⎪ 2⋅L⋅V_An \n",
"⎨ \n",
"⎪ 2 \n",
"⎪ W⋅k_n'⋅(V_An + V_D - V_S)⋅(V_D - V_S - Vₜₕₙ) \n",
"⎪ ───────────────────────────────────────────── otherw\n",
"⎪ 2⋅L⋅V_An \n",
"⎩ \n",
"\n",
"V_D - V_S \n",
" \n",
" \n",
"_D - V_S - Vₜₕₙ\n",
" \n",
" \n",
" \n",
" \n",
"ise \n",
" \n",
" "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NIdFullDiodConected=NIdFullDiodConected.subs(VDS, VD-VS)\n",
"NIdFullDiodConected"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(1.2408000000000009e-06)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NIdFullDiodConectedN=lambdify(VS, NIdFullDiodConected.subs(subsN), dummify=False)\n",
"NIdFullDiodConectedN(3.3)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Vs[V] | \n",
" Id[A] | \n",
" DIdDVs[OhmInv] | \n",
" DDIdDDVs | \n",
" DDDIdDDDVs | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 50.000000 | \n",
" 5.000000e+01 | \n",
" 50.000000 | \n",
" 50.000000 | \n",
" 5.000000e+01 | \n",
"
\n",
" \n",
" mean | \n",
" 2.500000 | \n",
" 1.452101e-05 | \n",
" -0.000011 | \n",
" 0.000006 | \n",
" -6.134400e-07 | \n",
"
\n",
" \n",
" std | \n",
" 1.487488 | \n",
" 1.705876e-05 | \n",
" 0.000010 | \n",
" 0.000003 | \n",
" 6.635026e-06 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 0.000000e+00 | \n",
" -0.000029 | \n",
" 0.000000 | \n",
" -2.486786e-05 | \n",
"
\n",
" \n",
" 25% | \n",
" 1.250000 | \n",
" 8.359108e-08 | \n",
" -0.000019 | \n",
" 0.000005 | \n",
" -4.000000e-07 | \n",
"
\n",
" \n",
" 50% | \n",
" 2.500000 | \n",
" 6.869597e-06 | \n",
" -0.000010 | \n",
" 0.000007 | \n",
" -4.000000e-07 | \n",
"
\n",
" \n",
" 75% | \n",
" 3.750000 | \n",
" 2.517164e-05 | \n",
" -0.000001 | \n",
" 0.000008 | \n",
" -4.000000e-07 | \n",
"
\n",
" \n",
" max | \n",
" 5.000000 | \n",
" 5.577000e-05 | \n",
" 0.000000 | \n",
" 0.000008 | \n",
" 2.031467e-05 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Vs[V] Id[A] DIdDVs[OhmInv] DDIdDDVs DDDIdDDDVs\n",
"count 50.000000 5.000000e+01 50.000000 50.000000 5.000000e+01\n",
"mean 2.500000 1.452101e-05 -0.000011 0.000006 -6.134400e-07\n",
"std 1.487488 1.705876e-05 0.000010 0.000003 6.635026e-06\n",
"min 0.000000 0.000000e+00 -0.000029 0.000000 -2.486786e-05\n",
"25% 1.250000 8.359108e-08 -0.000019 0.000005 -4.000000e-07\n",
"50% 2.500000 6.869597e-06 -0.000010 0.000007 -4.000000e-07\n",
"75% 3.750000 2.517164e-05 -0.000001 0.000008 -4.000000e-07\n",
"max 5.000000 5.577000e-05 0.000000 0.000008 2.031467e-05"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"VSN=np.linspace(0, 5)\n",
"NIdFullDiodData=pd.DataFrame()\n",
"NIdFullDiodData['Vs[V]']=VSN\n",
"NIdFullDiodData['Id[A]']=NIdFullDiodConectedN(VSN)\n",
"NIdFullDiodData['DIdDVs[OhmInv]']=np.gradient(NIdFullDiodData['Id[A]'], NIdFullDiodData['Vs[V]'])\n",
"NIdFullDiodData['DDIdDDVs']=np.gradient(NIdFullDiodData['DIdDVs[OhmInv]'], NIdFullDiodData['Vs[V]'])\n",
"NIdFullDiodData['DDDIdDDDVs']=np.gradient(NIdFullDiodData['DDIdDDVs'], NIdFullDiodData['Vs[V]'])\n",
"NIdFullDiodData.describe()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"NMOS Full Square Law Complince Voltage =3.878[V]\n"
]
}
],
"source": [
"NVCompFullLoc=np.where(NIdFullDiodData['DDDIdDDDVs']==NIdFullDiodData['DDDIdDDDVs'].min())[0][0]\n",
"NVCompFull=NIdFullDiodData['Vs[V]'][NVCompFullLoc]\n",
"print(f'NMOS Full Square Law Complince Voltage ={NVCompFull:.3f}[V]')\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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+064Imfbtm2x11xzTUFNTY3L4/Hwk5/8pOTKK6+sfuihhzJ++9vfDm5rt3Xr1oR333334zlz5jQ+/PDDGb/+9a8HA+Tm5rY+88wzu4YMGeKeNWvWmNLS0pif/exn+44cOeJ6/fXXU1988cVdbcc4ePCga/z48RMOHDiw7sorryx4++230+6///49X/ziFyvb19WZfhNAgHEisq6T7QKkhaoYE16p8THMKcpiTtGxO15XN7Sy8WA1G0tq2HCgmg0l1fxz82HarvhNjXcxfmgq44ekMW5ICuOGpDIqJ9lWcTVdNmHCc+EuwYTA5ZdffuSpp57KCAwgzz//fMY999yzf968eaf94he/2HfVVVdVA7z44osphw4dcoUrgMTHx+u77767JS0tzdvc3CwzZ84c889//rP6/PPPrw9sd+eddw5ZsGBB5R133FG2atWq+Pnz55925ZVXrv/KV75S8ZWvfKUC4MMPP0xYsGDBqDlz5jS2trby3e9+N2/jxo0bhwwZ4v7yl788/N57781pu9z48ccf33nOOec0VFRUOP7rv/5reG1trSMlJcUL8MQTT6RfeOGFVQkJCbps2bJdl112WUFP+tafAsjYLrTx9HkVpt9KSzwxlDS0uNl8qJaPD9Sw6WANHx+s4akP99LY6vtfxekQCjITGTsklXGDUxgzOJWxg1MYNijBrsAxJ4iNzTp5IzPgXXvttZU///nPhzU2NkpCQoJu2bIltrS0NGbTpk3x06ZNq2sLHwDz5s2rBd9IxHXXXZe/bt26RKfTyS9/+ct98+bNq/3v//7vzGXLlg3yer2yZcuWhK997WuHWlpaHE8//XRmbGys97XXXtuWm5vrmTVr1piJEyc2rF69Oqmurs65ZMmSXeedd16nl/aCb52StLQ0L0BLS4u43W4JNtIrItTU1DgBKisrnTk5OSfcpffxxx/P+PznP18B4PV6RVWpra115ObmUlNT4xg1atQJq41nZGR4Z86cWbd06dK0G2+8sRLgueeey/je9753wihMd/WbAKKqewLfi8jVwApVtUubTIcSY11MG5HOtBHHTt94vMruI/VsOVTL5oM1bDpUy7r9Vfxj3cGA/ZyclpPM6NwU32NwCqNzkxmcGm+ncaLYwYOPAjBkyOKw1hFtVq2aNab9Z1lZCyry879T5nbXOtauPf+09ttzc68pHz78liPNzQddGzZcWhS4bfr0D7d09n2DBw/2nH766fXPP/982jXXXFPVdpO5jRs3xk+bNi1oKLjnnntyALZu3frx6tWr4y+++OLTduzYscH/WcLatWs/bmxsdIwZM2biD3/4w5JNmzZ9fMMNN+Q9/PDDmXfeeWcpQENDg2P16tWbX3755eSbbrqpcNu2bRtffPHFlNtuu+2EFfASEhK8q1ev3gzgdruZOHHi+L1798Zdf/31pZ/85Cfr27f/xS9+ceDCCy887ZFHHslpbGx0/OMf/zjhZ+ff/va39BdeeGE7QFxcnP7mN7/ZO23atAkJCQme/Pz85o4WZFu4cGHFU089lXHjjTdW7t69O2b37t1xl1xySYc37euqfhNAgigDHhSRWKAc2Kqq3wlzTWYAcDqEouxkirKTuXjSkKOf1zW72XKohq2H69hyqJZtpbW8taWMZ/2LpwEkx7koyk5iVE4Ko3KSjz7y0hNwOR3h6I4JoUOHHgUsgESDK664ouLpp59Ov+aaa6peeOGFjEceeWT3o48+mtFR+3//+9/JN998cynA1KlTm4YOHdqyfv36eIA5c+bUpqene9PT073Jycmeyy+/vApg0qRJDevWrUtsO8ZVV11VAfCZz3ymrq6uzlFeXu6cN29e7bx58z7urFaXy8XmzZs/Li8vd372s58tWrFiRfzMmTOPG63405/+lLFo0aIjP/7xjw+/8cYbSYsXLy7cunXrRqfTdwr6zTffTEpISPC27dfc3CxLlizJ/uCDDz4eN25c8+LFi0d873vfG/LLX/7yhGXlr7jiiqpvf/vbIyoqKhyPP/54+sUXX1zpcp16fOi3AURVXxORc1X1+yKSAvwi3DWZgS05znXcwmltKupb2HKolu1ldWw/7Ht+d3sZz390LJjEOIX8zCRGZiVRlJPMyKwk35onWUmk22XCxpySzkYsXK4Ub2fb4+KGuE824hHM1VdfXfWDH/wg7913301sampynH322Q0rVqxIXL58eXKw9trJ7SViY2OPbnQ4HMTHx2vba7fbfXRItf3oqojQlRGQNllZWZ6zzz679sUXX0xrH0CefPLJrFdeeWUrwAUXXFDf3NzsOHTokGvYsGFugD//+c8ZCxYsOHqTvffffz8BYMKECc0AixYtqrj77rsHE0RycrKee+65NX/+85/Tn3/++Yxf//rX+zr8j9EN/TaA+KWKyHRgPZAU7mJMZMpIiuXMokzOLMo87vOapla2l9axvbSOnWX17CyrY2d5PW9tKaXVc+wfo7SEGAqykkj0NLHWvY2CrEQKMpPIz0xkUKKFE2P6o7S0NO8ZZ5xR+6Uvfamg7QfzjTfeeOS+++4bvHTp0rSFCxdWAzz33HOpI0aMaD377LPrnnzyyYz58+fXrlu3Lu7gwYOxkydPbvrggw8SO/+mY5566qn0efPm1b766qvJKSkpnszMTM/JRkAOHDjgio2N1aysLE9dXZ0UFxen3nrrrYfatxs6dGjLSy+9lHrLLbcc+eijj+JbWlpkyJAhbgCPx8Pf//739LfeeutooMnPz2/dvn17/IEDB1xDhw51v/LKK6mjR4/u8I7zixYtqrjzzjuH1dXVOYOdAuqJfhNARORBfEFjHbBeVWuA/wd8Bfga8EoYyzNRKDU+5oT5JQBuj5d9lY3sLKtjV3k9u8rr2X2kns37vbz3xtZ2x3CRn5nEiMxE8jMSGZGRSF5GInnpiQwZFE+MndYxJmwWLlxYcf311xc99dRTO8H3m/7f/va37bfcckveHXfckedyuXTcuHGNDz300N7bb7+99Nprr80fPXr0eKfTycMPP7w7ISGhW7cLSU9P90ydOnVs2yTUruyzb9++mMWLFxd6PB5UVS699NKKRYsWVQN885vfHDpz5sz6q6++uvq+++7bd+ONNxY88MADuSLC//7v/+52OHz/vrz88sspgwcPbhk/fnxL23ELCgpab7vttoNnn332GJfLpcOHD2/5y1/+0mFNCxYsqP7yl79csGjRovK2456qfhNAgDXAZGAhMFFEajkWSF5T1afDWZwxbVxOB4VZSRRmHT8oV1xczBlnfYI9RxrYc6SevRUNvtcVDWwsqebVDYeOrvgKvrkqg1PjyctIIC89kWHpCQwdlMDwQQkMS09gSFoCsS4LKMb0leuuu67quuuuWxX42dSpU5veeeedbcHaP//887vbf3bLLbccAY60vS8pKVnf0bYrr7yy8oEHHijpTo2zZ89u3LRpU9ARkvvvv//olSjTp09v+uijjzYHa3fJJZfUXnLJJSdsu/3228tuv/32sq7UERMTQ2Vl5dqu1t0V/SaAqOqSwPciMhxfIJkEfBZYGo66jOmO+BgnYwanMGZwygnb3B4vB6ub2FfZwP6KRvZVNrCvooF9lY0s31ZGaW0zgaeZRSAnJY4haQkMHRTPkLQEhqTFM3SQ73lwWjzZyXE2ObYXTZ78UrhLMCbsBg0a5L7hhhsKf/SjH+2/+uqrqztrO3/+/MJVq1Ylf+ELX+jWImTQjwJIe6q6H9gP2L8IJiK4nA7f6ZeMRCg6cXuz28Oh6iZKKhvZX9XI/spGDlQ1crC6kc0Ha3lzcylNrd7j9nEIZCXHkZsaT25qPIPT4shNiSc7JY6c1DhyUuLJSYkjMzkOp617clJOZ5dP5xvTLR9+2P2JsuHy2muv7ehq22XLlnXpVFIw/TaAGBNt4lxO8jOTyM8MPt9aValqaOVgdRMHqxs5VNPE4eom33NNM/srG1i5p4KqhhPWH8IhkJEUR1ZyLNkpcWQmxZKVHEeW/3WG/5GZFEdGcixJsc6oXA+lpORBAIYN+2qYKzEm8kVkABGRi4DfAk7gEVW9u932OOBxYDq+83NXquruUNdpTHeICOlJsaQnxTJ+aGqH7ZrdHspqmymtbaa0ppmy2iZKa5spr2umrLaF8rpmdpXXU17XfMKISptYl4PMpFgGJcaSnhjDoMSYo6/TE2NJTYghLSGGnUc85ByoIS3R936gB5fS0mcACyAh4PV6veJwOLo1idMMLF6vV4Dg/8gQgQFERJzAA8CF+E7hrBCRZaoaOInnBqBSVUeJyELgHuDK0FdrTO+LczkZnp7I8PSTn06ob3ZzpK6FI/XNVNS3cKS+hYqAR1VDC5UNrWw5VEtVQytVja14vMf/zLhnxTtHXzvEt95KSnwMKfEuUv3PyfEuEmNdJMc5SYpzkRznIinORWKsk8RY33NCrNP3PsZFQqyT+BgH8TFOu1IoMm0oKysbn52dXW0hJDJ5vV4pKytLAzZ01CbiAggwC9iuqjsBRGQpcCkQGEAuBX7kf/0c8DsREe1spRljIlCSPwiMyOza3AevV6ltdlPT2Ep1YyvL319J4ejxVPvf1za5qW3yPzf7Xh+qaaKuzE19s5u6ZneHoy4dcTqEeJcvjMTHOIl1OYh1OnzPAa9jnA5inILL6SDGIcQ4HbicgsshOByCUwSn0//sEBwiiOB7BhwOoYBGEHi/uONT4Dt3trCJLp8ijwjx1R7m9uLx3G73lw4dOvTIoUOHJgKWMCOTF9jgdru/1FGDSAwgw4DAVdr2A7M7aqOqbhGpBjLxLfl+lIjcBNwEkJubS3FxcY8Kqqur6/G+A5X1OTqMiGsk4cgWEoDBAHH+xwn3rRYgBojB41WaPNDkVpo90Oxp9+xWWrzQ4oFWr/qePUqL10uLx4vbq7gVWlugsUmp9UKrB9wKHlU8XvAouL2+914l6CPYbxvfmeW7Dcg9Hwa9mvGYrSfZHmEuK9Re/X97+vTppcD8XjugGZAiMYAEOwHd/t+arrRpuzR4CcCMGTN07ty5PSqouLiYnu47UFmfo8NA7rOqov4g4vW/Xr/ulwBsnndRh/stX76cc845J0RV9g//emf5gP1zNv1XJAaQ/UDguvrDgfYJUW9hAAAgAElEQVS3DW5rs19EXPh+X6ugE6tWrSoXkT2dtenECCDoXQYjmPU5OkRonzv9pzFC+9ypU+lzfm8WYiKHRNq0B3+g2AqcD5QAK4CrVHVjQJuvAZNU9cv+SagLVPWKPqypTFWz++r4/ZH1OTpYn6NDNPbZ9L2IGwHxz+n4OvAqvstw/6iqG0XkLmClqi4D/gA8ISLb8Y18LOzjsqr6+Pj9kfU5Olifo0M09tn0sYgLIACq+hLtVlBV1TsDXjcBl4ewpE6Xso1Q1ufoYH2ODtHYZ9PH7PKn0Fhy8iYRx/ocHazP0SEa+2z6WMTNATHGGGNM/2cjIMYYY4wJOQsgxhhjjAk5CyDGGGOMCTkLIN0gIn8UkVIR6fDmOt08nkdE1vgfy3rjmMYYY8xAYJNQu0FEzgHqgMdVdWIvHK9OVZNPvTJjjDFmYLERkG5Q1eW0W7JdRIpE5BURWSUi74jI2DCVZ4wxxgwYFkBO3RLgZlWdDtwKPNiNfeNFZKWIvC8in+ub8owxxpj+JyJXQg0VEUkG5gDPihy9wW6cf9sC4K4gu5Wo6qf9r0eo6gERGQm8KSLrVXVHX9dtjDHGhJsFkFPjAKpUdUr7Dar6AvBCZzur6gH/804RKQamAhZAjDHGRDw7BXMKVLUG2CUilwOIz+ld2VdE0kWkbbQkCzgL+LjPijXGGGP6EQsg3SAiTwHvAWNEZL+I3ABcDdwgImuBjcClXTzcOGClf7+3gLtV1QKIMcaYqGCX4RpjjDEm5CJyBERELhKRLSKyXUS+E2R7nIg87d/+gYgUhL5KY4wxJnpFXAARESfwAPAZYDywSETGt2t2A1CpqqOA+4B7QlulMcYYE90i8SqYWcB2Vd0JICJL8c3LCJxfcSnwI//r54DfiYhoJ+ejsrKytKCgoEcF1dfXk5SU1KN9Byrrc3SIlj57VfEqoFDfUE9iYuT3OVBTYz0pyT1btHnVqlXlqprdyyWZCBCSACIiGV1o5lXVql74umHAvoD3+4HZHbVRVbeIVAOZQHlHBy0oKGDlypU9Kqi4uJi5c+f2aN+ByvocHQZqn71epayumZKqRg74HyWVjXia3qaqoZWPK6ZQ3+ymvtlDfYub9r+aVIen7LC5amwsP198YY/2FZE9vVyOiRChGgE54H9IJ22cwIhe+K5g39F+ZKMrbRCRm4CbAHJzcykuLu5RQXV1dT3ed6CyPkeH/txnt1c50qgcbvBS2qCUBj43Km7v8e0TXHD7zIdxJUJp9S8ZnirEOyHOFUOCE+JcggNobm4mPj4uLH0Kl6Gxzf32z9kMXKEKIJtUdWpnDURkdS99134gL+D9cHzhJ1ib/SLiAtJod48XAFVdgm+pdWbMmKE9/U1voP6WeCqsz9Eh3H1udnvYV9HIniP17D7ScNzz/spGPN5jv1ckxDjJz0xkUkEiBZlJDM9IZPigBIYOSmDIoHhS42NYvfpeAK6dd1GH3xnuPodDNPbZ9L1QBZAze6lNV6wAThORQqAEWAhc1a7NMuB6fGt6fAF4s7P5H8aY8Glq9bDnSAO7j9QfHzTKGzhQ3Xjc6ZGUeBcFmUlMGpbGvMlDGZGZSH5GIoVZSWSnxBFwywRjTJiFJICoalNvtOnid7lF5OvAq/hO6/xRVTeKyF3ASlVdBvwBeEJEtuMb+VjYG99tjOmZxhYPeyrq2V1ez67ytpGMevYcaeBg9fH/NKQnxlCQlcSswgzyM32jGSMyEynMTGJQYoyFDGMGiJBfBSMid6hqn172qqovAS+1++zOgNdNwOV9WYMx5njBQsaucl/IOFRzfMjISIqlIDORM4syKchMIj/TN4qRn5FEWmJMmHpgjOlNfR5AROSZwLfAFGzdDWMiUlOrh70VDewq9wWN3f6Qsbv8xJCRlRxLfmYSZ43KoiAzkYKsJF/YyEokNT48IWPMmIfD8r3GRKNQjIDUqOqX2t6IyEMh+E5jTB9pcXvZW9HA7vJ63tjVyuuV69ndwZyMtpGMOaMyKcxM6hchozOJiWPCXYIxUSMUAeRn4Lvjq6qWA98PwXcaY06B2+OlpKrx6EjGrvJ6dh3xhY79lQ0EXFxCWsJBCrKSmFmQTkHWcAr9IaMgK4m0hP4XMjpTXv4iAFlZ88JciTGRr88DiKru8r/8IzBfVU+43NUYE3qqyqGaJnaV1bPrSD27ynynTHaW17OvooFWz7GUkRznoiArkdPzBvG5KUN9IxlZSRzYvIZLPnVeGHvRu/bt+zVgAcSYUAjlJFSbmm5MGFTWt7CzvP640Yyd/teNrZ6j7eJcDgoykxidk8Knxg+mMCuRwqxkCrOSyEqODXp1Sc1O+2ttjOmZUAYQW2fDmD7S2OLxnSYpr2dXed3RwLGrvJ6qhtaj7ZwOYYR/XYw5RZkUZCVRmJlEYXYSQ1LjcTgsUBhjQsNGQIwZINrmZewsq/cHjDpfyCir50C7tTIGp8ZTmJXExZOGMNI/J2NkdhJ5GYnEOCPuJtjGmAEolAHkuyH8LmMGJFWlvK7Fd5qkrO7o6ZKdZXXsbTcvIzXexcjsZM4YmUlhlm8UoyAzicKsJJLiIvFG18aYSBKyf6VUdQOAiLhU1d32uYiMUNW9oarDmP6gscXjm/BZ5gsXOwOCRm3T0b8exDodFGQlMionmQvHD2ZkdhIjs3whIyMp+LwM03Pjxj0R7hKMiRohCyAiciNwK5AqIgnAR8D3gAeBaaGqw5hQ8XqVgzVNvoARGDTK6impajyu7ZC0eEZmJ/G5KcMozPKdLinKTmbooAScNi8jZOLj807eyBjTK0ISQETkDmAGcK6qHvJ/9ing98CIUNRgTF+pb3azs6ye9w64+ej1rewsq2NHmW+ORlPrsXu+J8e5GJmdxIyCdK7IyvONZmT7RjMSY+2USX9QWvo0ADk5V4a5EmMiX6j+1fsiMElVj07HV9XXROQCfCMgxvRrXq9yoNo3AXSHf0Sj7TlwiXGHbCMvI5GR/qtMfKdMkinKtruxDgQlJb6Fmi2AGNP3QjkHpDXIZ4dF5H9CVYMxJ1Pf7GZXuS9c7PCfNgk2mtE2AXTOqEyKsn0B48iuTXzhM+cS53KGsQfGGDMwhCqA7BCRz6rqPwI/FJG78C3Nbv9im5BRVQ7XNPtDRh07Sn0hY0dZ3XG3fncIR0czzirKZKQ/aIzMTg66MFdx+RYLH8YY00WhCiBfBZ4XkcXAWiAZuBhYA2wJUQ0myjS7Pew50uAPGMdCxo7SOupbjq0A2jY3Y3ZhBqNykn0jGjnJ5GcmWqAwxpg+EpIAoqp7RGQm8GlgHFADXKOq6/wTVI3pseqGVraX1bKjtP7oqMb2Ut+6GYE3TRs2KIGR2UlcPiOPIv9VJkU5yeTY3AxjjAm5UM4BUeAV/yPw83tCVYMZuNomge4oq2d76bGQsbOsjvK6lqPtYl0ORmYlMX5oKvNPH0qRf0RjZLZdaWJObsKE58JdgjFRI1SX4X6kqp2u9dGVNibytbi97D5Sz45SX8DYfjRoHH/jtEGJMYzKTub8sbm+0yY5vhGN4emJtm6G6bHY2Kxwl2BM1AjVr4TjRGRdJ9sFSAtRLaYfqG1qPWE0Y0dpHXsqGvAEnDcZNiiBopxkZhdm+udnJDEqJ9lWATV94uDBRwEYMmRxWOswJhqEKoCM7UIbz8mbmIFEVTlS3+IbyWj3CFw7I8YpFGQmMWZwCp+dPISi7GRG5dhpExN6hw49ClgAMSYUQjYJNdjnIjIeyAfWq+r+UNRiel/b/Iy2cLGjrI5V2xr51vLXqQy4FXxSrJOinGTmFGVSlOMLGaNykhlhd2g1xpioE+5fL38MPAvcJCL5qnp9mOsxnfB4lb0VDWwvrWNbaS3bD9exzR84GgIua01PjCE7Di6aOIRROcmc5g8aQ9Li7bSJMcYYIPwB5HVVfQZ4pjcOJiL3AvOAFmAH8EVVrQrSbjdQi++0j1tVZ/TG90eKtomg20vr2HbYHzZKfTdSa3EfWw10cGo8o3KSuWJG3nFBIzM5juLiYubOnRTGXhhjjOnPwh1A5ojIRcARYJOq/uYUj/c68F1VdYvIPcB3gY7WGTlPVctP8fsGtKZWDzvL6o8GjLawsfvIsYmgIjA8PYHTclI4Z3T20aBRlJNManxMmHtgjDFmoAp3ANmgqr8SERcw4VQPpqqvBbx9H/jCqR4zEjS2eNhRVsfWw7Vs8weN7aW1xy3U5XQI+ZmJjMpO5jP+Uydtq4ImxNpqoCY6TJ78UrhLMCZqiG99sDB9uUgx8Dzwqqpu7eVjvwg8rapPBtm2C6gEFHhYVZd0cIybgJsAcnNzpy9durRHtdTV1ZGcnNyjfbujya0crPdSUuflQJ36n72UNyptf8pOgcFJwpAkB8OSfY+hyQ5yk4SYXlw/I1R97k+sz9HB+tw955133io7zW2CCXcAyQWmAlOAIlW9sQv7vAEMDrLp+6r6N3+b7wMzgAUapIMiMlRVD4hIDr7TNjer6vLOvnfGjBm6cuXKk/YpGN98iLk92jeY+mY320t9Ixptz9tK69hf2Xi0TazTwUj/mhmjc1M4LSeZ03KTyc9MCskVJ73d54HA+jzwlZQ8CMCwYV/tsE2k9bkrTqXPImIBxAQV0lMwIrINWI/vhnRrgLWqesLy7J1R1QtO8h3XA5cA5wcLH/5jHPA/l4rI/wGzgE4DSDgEBo1tbc+H6yipCggaLgdF2clMG5HOwpl5jMpJYXSu79JWl13aaky3lJb65sN3FkCMMb0j1HNAHgZG4pt0+hngz/7TIf8H/ERVWzvb+WT8E1rvAM5V1YYO2iQBDlWt9b/+FHDXqXzvqWps8bC9tI4th2vZdriWrYdr2dpB0Jien86iWXmc5h/VsKBhjDFmIAp1ALlGVae0vRGR/wW+iO/uuL8Bbj7F4/8OiANe96838b6qfllEhgKPqOrFQC7wf/7tLuAv/lGYPlHT1MreGg/vbCujor6F8roWKuqbOVLXQmltM9tL69hX2UDbWE3bqZNp+b4RjdNybUTDGGNM5Al1AKkWkcmqug5AVdeIyBmq+g0R+ehUD66qozr4/ABwsf/1TuD0U/2urnpmxT5++u8m+PeHRz9zOoSMpFiykuOYNDyNy6YNZ3RuMqflplCQaUHDGGNM5At1APlPfKdd1uCbAzIGaFvZKjbEtYTEJ8fmUFmyk3NnT/OHjlhS42Nw2B1bjTHGRLGQXwUjIk5gATAZ31yQJ4Am4Fuq+tOQFtMNIlIGBL2nTReMAPb2YjkDgfU5Olifo8Op9DlfVbN7sxgTGcJ6GW60EJGyaPsLaH2ODtbn6BCNfTZ9zyYbhMYJ96OJAtbn6GB9jg7R2GfTxyyAhEZ1uAsIA+tzdLA+R4do7LPpYxZAQiPoUu8RzvocHazP0SEa+2z6mM0BMcYYY0zI2QiIMcYYY0LOAogxxhhjQs4CiDHGGGNCzgKIMcYYY0LOAkg3iMgfRaRURDb00vE8IrLG/1jWG8c0xhhjBgK7CqYbROQcoA54XFUn9sLx6lQ1+dQrM8YYYwYWGwHpBlVdDlQEfiYiRSLyioisEpF3RGRsmMozxhhjBgwLIKduCXCzqk4HbgUe7Ma+8SKyUkTeF5HP9U15xhhjTP/jCncBA5mIJANzgGdFpO3jOP+2BcBdQXYrUdVP+1+PUNUDIjISeFNE1qvqjr6u2xhjjAk3CyCnxgFUqeqU9htU9QXghc52VtUD/uedIlIMTAUsgBhjjIl4dgrmFKhqDbBLRC4HEJ/Tu7KviKSLSNtoSRZwFvBxnxVrjDHG9CMWQLpBRJ4C3gPGiMh+EbkBuBq4QUTWAhuBS7t4uHHASv9+bwF3q6oFEGOMMVHBLsM1xhhjTMjZCIgxxhhjQs4moXZRVlaWFhQU9Gjf+vp6kpKSeregfs76HB0irc9ebwMADkdih20irc9dcSp9XrVqVbmqZvdySSYCWADpooKCAlauXNmjfYuLi5k7d26X2ja1erj9uXXsqWggzuUgzuUg1ukgLsb3HOvyP5zO4z472tbV9t553LbAz4++Dziuy9m7g2Hd6XOksD5HB+tz94jInt6txkQKCyD9zD2vbGbZ2gOcNSoTt0epa3bT4vbS4vbS7H9u8bS999Dq6Z05PA7hWHBpF07iAj4/PswcC0OB7+NcDnbvaeXQh3v9x3AG3S8uSJCKdTlwOYSAdVWMCZmKijcAyMi4IMyVGBP5LID0I+9sK+NP/9rN9Wfm8+NLu3arGa9XafEcH06aWz0BIcUbEGA8R98HCzMtxx3DS7Pn+H0bWtxUNfq2tRy37dh+x9m0vkf/HdrCkC+UOIOM7gSM4LQFpuOCTUAgCjJ6FBiy2o8etT+ehaHosmfPTwELIMaEggWQfqKqoYVbn11LUXYS3/nMuC7v53AI8Q4n8THOPqyua9rCUIvHS/Hb7zJ99hnHQk1AyGkOEo5aAsJRYKBqC03Ht/XS1OqlurG13fG9xx2/N4hwNMgEC0OBIaamqonnD64+YfTohNAU4zwhGLUfYYo74fhOYpwWhowxkcMCSD+gqvzgrxs4UtfCH66fSUJs+MNETwSGodQ4YdighLDVoqpBR2mOhZzgwabZH4bajyA1B4wM+bZ5jtu3tslNZb2XipLqoyNQgcfvLbEuB3GBASemo7k+vsAUdI7QceEnePAJPO0W7PixToeFIWPMKbEA0g/8bc0B/r7uILd9egwTh6WFu5yIICL+CbehC3MdTdRTVVo9euw0V7tgFOz0WVvQCTyd1ja6c+IpME/A/t4T5g0Fhqpmt5feWvon1uXAiZfEd14PGlCCnx7rODgFbR/s1FmQOUoWhowZeCyAhFlJVSM//NsGpuen85/njAx3OaYPiAixLiHWFf5ld1QVt1fbje54go7ynBB+gpxK27l7LzmDBx8/kuQ51qahwR1kFKn3w1CMU06cKO0PKeMGp3LlzDym56dbUDGmH7EAEkZer3LrM2vxepX7rpjS65fCGtOeiBDjFGKcDpLiTv14xcWHmTt3Uo/2DQxD7U+PNbUb5TkWYDxBR4+OO7UWsG9jq4eX1h/k2VX7KcpO4sqZeSyYNpys5OCdHzPm4VP5z2GM6QYLIGH0h3d38d7OI/zyssmMyOx44SNjIlFvh6GO1De7+cf6gzy9Yh8/f2kzv3xlCxeMy+XGcwqZnp9xXNvExDF9V4gx5jgWQMJk86Ea7n11C58an8vlM4aHuxxjIlZSnIsrZuRxxYw8tpfW8vSKfbzwUQlvbSnl5W98gpHZyUfblpe/CEBW1rxwlWtM1AjLmL+IeMLxvf1Fs9vDN5euITXBxS8WTLLz0saEyKicFL7/2fG8/I1PEOdy8J0X1uP1HpuIsm/fr9m379dhrNCY6BGuSQdR/RP3vte3sflQLfdcNpnMDs5FG2P6Tk5qPD+4ZDwf7qrgLx/uDXc5xkSlPgsgInK1iIzuYPNJ576LyJBT+O6LRGSLiGwXke8E2b5YRMpEZI3/8aWefld3rdhdwcPLd7BwZh7nj8sN1dcaY9q5fPpwzh6Vxd0vb+ZAVWO4yzEm6vTlCEgZ8KCILBeRF0Tk7vYNRORCEfm9iEzxv78pYPPP/J9dLSL/EpHPduVLRcQJPAB8BhgPLBKR8UGaPq2qU/yPR7rZtx6pa3bz/55Zw/D0BH5wSbCSjDGhIiL8/POT8Hh9CwFqb10TbIzpkj4LIKr6GvCBqp4DXA8kB2n2VeA24BoR+SQwJWBblf/5U8DZwOe7+NWzgO2qulNVW4ClwKU96EKv++nfP2Z/ZSO/uWIKyXE2/9eYcBuRmcitnx7Dm5tLWbb2QLjLMSaq9PVPwVQRmQ6sB5KCbC9T1SrgVv8IyczA2kTkB8BeVVURqe/idw4D9gW83w/MDtLuMhE5B9gKfEtV97Vv4B+RuQkgNzeX4uLiLpZwvLq6Ou575g2WftTMxYUx1O9eR/HuHh1qwKirq+vxf6+Byvo8MBWqMjLNwfefX8MvPvEVUmKl0z5FQp+7Kxr7bPperwQQEXkQX8hYB6xX1Rr/pv8HfAX4GvBqkF3/ISJjVXWzqn5HRG4O2PZtfCMf/+5mrcEmuLYfW30ReEpVm0Xky8BjwCdP2El1CbAEYMaMGRpsme2uWPbaW/x5jZuxg1O474azQro8eLh0tCx5JLM+D1zDx9fy2f9+hzcqRvPbhVM7bRspfe6OaOyz6Xu9dQpmDTAB+DmwS0R2i8iLwI+AUlX9D1Vd2n4nVf0b8JKI/FFE8lT1fwK2tarqW6ra7H//tS7Wsh/IC3g/HDhubFVVj7QdF/g9ML2Lx+42VeWxjc3UNLq5f+GUqAgfxgw0o3NT+Pp5p3Hw0FLeXG2roRoTCr0SQFR1iap+XVXPVdVMfCMXDwE1wMkmj44FVgPLReR+Eck+xXJWAKeJSKGIxAILgWWBDdpdYTMf2HSK39mh5z8qYdVhD9/+1GjGDk7tq68xxpyir8wt4rNFr7F774PUN7vDXY4xEa9PJqGq6n5VfUlV71HVa0/StsU/8jEO3+jFByJyl4ik9PC73cDX8Z3y2QQ8o6ob/cec7292i4hsFJG1wC3A4p58V1eMyU3hnOEuvvQJu9GcMf1ZrMtBYVYSLR4vT76/J9zlGBPxTjmAnORS2i5T1SZV/RUwCWgCPhKRW3t4rJdUdbSqFqnqz/yf3amqy/yvv6uqE1T1dFU9T1U39+R7umLS8DT+Y2IcTkdUr71mzICQEu8iLSGWh5fvpKHFRkGM6Uu9MQLS2aW0XSYiBSJyEfAlYARQi29OiTHGhMzw9AQq6lt44j0bBTGmL/VGAClT1SpVvRXfmh0zT7ZDIBFZJyIVwF/xnQoZBLxJx2uHGGNMn0mOc3HO6GwbBTGmj/XGZbj/aHsR5FLarvg8sFNtGUJjTJhNmPAcAN/IcHLZQ//miff28J/nFoW5KmMi0ymPgPgvpUVE4kTkh8DFIvKsiHxXRE76N1dVdwCxIvJDEXmpO/saY0xvio3NIjY2i+n56UdHQeyKGGP6Rm9eBXMvkA98B9/VLJnAn0Tkmm7s+90e7GuMMb3i4MFHOXjwUQC+cf5pvrkgdkWMMX2iN5diPx24VFWrRGSWqp4lInFAMfBkH+5rjDG94tChRwEYMmTx0VGQJct3cu0Z+STZ/ZuM6VW9PQLSdrxyEfkNvomk3j7e1xhj+sQ3L7BREGP6Sq8FEFX9u6pW+N9eDqzEdxXL5UGaH7coRjf3NcaYkJg2Ip1z/aMgNhfEmN7VVyuhtqjqX1T1N6p6wj2uVbXD7z3ZvsYYE0rfsFEQY/pEnwQQY4yJFIGjIHU2CmJMr7EAYowxfpMnv8TkyS+d8Pm3LhxNZUML1/3hA2pabMkiY3qDBRBjjPFzOhNxOhNP+HxK3iAeunoaHx+s4SfvNbK9tDYM1RkTWSIygIjIRSKyRUS2i8h3gmyPE5Gn/ds/EJGC0FdpjOlvSkoepKTkwaDbLpo4hKU3nUmzR1nw4L/59/byEFdnTGSJuAAiIk7gAeAzwHhgkYiMb9fsBqBSVUcB9wH3hLZKY0x/VFr6DKWlz3S4fUreIH54RgK5qfFc98cPeWblvhBWZ0xkibgAAswCtqvqTlVtAZYCl7ZrcynwmP/1c8D5IiIYY8xJZCc6eP6rczizKJPbn1vHva9upsXtxW5nZUz3ROLSfsOAwF9L9gOzO2qjqm4Rqca3/LuNqRpjTio1PoY/Lp7JnX/bwANv7eCBt3YgArFOB7EuB3EuB3EuJ05HZPxec+FQN3PDXYSJOJEYQIL9jW//q0lX2iAiNwE3AeTm5lJcXNyjgurq6nq870BlfY4OkdfnKoBO+xTY50+lK+lT4jhU78XthVYvuL1Kq9dLq8eL98R/VgakOHVH2J+z6Q8iMYDsB/IC3g8H2i9o1tZmv4i4gDSgol0bVHUJsARgxowZOnfu3B4VVFxcTE/3Haisz9Eh0vq8evUgAKZOndthm/Z9Pq+Pa+oPIu3P2fQPkRhAVgCniUghUAIsBK5q12YZvnvNvAd8AXhTT3ICd9WqVeUi0tOlEEcAe3u470BlfY4OEdrnTk+dRGifO3Uqfc7vzUJM5JBInDglIhcD9wNO4I+q+jMRuQtYqarLRCQeeAKYim/kY6Gq7uzDespUNbuvjt8fWZ+jg/U5OkRjn03fi8QREFT1JeCldp/dGfC6idDe6K4qhN/VX1ifo4P1OTpEY59NH4vEy3D7o+pwFxAG1ufoYH2ODtHYZ9PHLICExpJwFxAG1ufoYH2ODtHYZ9PHInIOiDHGGGP6NxsBMcYYY0zIWQAxxhhjTMhZADHGGGNMyFkA6QYR+aOIlIrIhl46nkdE1vgfy3rjmMYYY8xAYJNQu0FEzgHqgMdVdWIvHK9OVZNPvTJjjDFmYLERkG5Q1eW0u2eMiBSJyCsiskpE3hGRsWEqzxhjjBkwLICcuiXAzao6HbgVeLAb+8aLyEoReV9EPtc35RljjDH9T0QuxR4qIpIMzAGeFTl686o4/7YFwF1BditR1U/7X49Q1QMiMhJ4U0TWq+qOvq7bGGOMCTcLIKfGAVSp6pT2G1T1BeCFznZW1QP+550iUozv5ngWQIwxxkQ8OwVzClS1BtglIpcDiM/pXdlXRNJFpG20JAs4C/i4z4o1xhhj+hELIN0gIk8B7wFjRGS/iNwAXA3cICJrgY3ApV083DhgpX+/t4C7VdUCiDHGmKhgl+EaY4wxJuRsBMQYY4wxIWeTULsoKytLCwoKerRvfX09SUlJvVtQP2d9jg6R1mevtwEAhyOxwzaR1ueuOJU+r1q1qlxVs3u5JBMBLIB0UUFBAStXruz2fh/treSxV1dQNLIQp0NwiOByCA6HkJYQw7zThxDncvZBxeFVXFzM3Llzw11GSFmfo4P1uXtEZE/vVmMihQWQPrZmbxV/29EKO7YG3b5qTyW/WDApxFUZY4KpqHgDgIyMC5ffwxMAAA/+SURBVMJciTGRzwJIH/uPswspbN3NJ845F48qXi+4vV68XniweDsPL9/JGSMzuHTKsHCXakzU27Pnp4AFEGNCwQJICIgILqcj4D+275TLbZ8ew0d7K/nuC+uZMDSNUTl2XzpjjDHRwa6CCSOX08H/LJpGfIyTr/35IxpbPOEuyRhjjAkJCyBhNjgtnvuunMLW0lr+a9mGcJdjjDHGhIQFkH7g3NHZfP28UTyzcj/Pr9of7nKMMcaYPmdzQPqJb14wmhW7K/jBXzcweXgap+WmhLskY6LOmDEP///27j26rrLM4/j3l/TeUDu0UFpaCBjoDXqRwIAFbUGkXJRxBsaqoI6wGIUyuJBBEGdgGBhkQBS5LIXxskbBynARtKjAgoIgFuiFljZF2oAllNKGYtuUXpL2mT/OriuUpDlNss8+Oef3WSsr5/K+ez/vytrnPHn3e8k6BLOy4R6QIlFZIb43YzID+/bi/Lvm8+62lqxDMis7AwaMZsCA0VmHYVYWnIAUkX0H9ePmGZNYvraJbz7wEt6nx6ywGht/RWPjr7IOw6wsOAEpMlNqhvLVEw7l/gVvMOv517MOx6ysvP76t3n99W9nHYZZWUglAZHk+aRdMPP4Go47ZChXPrSEJavWZx2OmZlZt0urB0QpHbcsVFaI7356EnsP6MP5d81nw5bmrEMyMzPrVp1OQCR9TtKh7bzd4eAFScM7e+5yMKSqL7d+djIN72zm0v9b5PEgZmZWUrrSA7IWuF3SU5Lul/StXQtI+rKkOyXNkPRrSV9p9fa1SZnPSXpG0qldiGXX806X9LKk5ZIua+P9vpJ+kbw/V1J1d527O9VW781l08fw2yWr+dEzr2UdjpmZWbfpdAISEY8AcyPiI8AXgLY2MjkeOA+YGRGnARNbvfeX5PfHgWOBT3U2ltYkVQK3AScD44DPSBq3S7FzgHciogb4DnB9d5w7DecedxAnjhvGdQ/XMe/P72QdjllJGzv2p4wd+9OswzArC11diGyQpCOAxcDANt5/OyJC0s4v+K2tzy3pm8DKpMymLsay01HA8oioB5A0CzgdWNqqzOnAVcnje4FbJSmK8D6HJG48cyKn3fJ7Zt49nwdnTmFw/z5Zh9Whlh3BtpYdWYdRUG5zdiToXdn1IW39+o3qhmhymra28FrjJra27KB5+w62teR+mrfvoGVH0X3U7NamTdn/ja30KJ/vXEm3k0syFgGLI2JD8npv4CvAJOCRiJiVvL49IioljQGIiGXJ6x+NiCdb1T0W+ENEbJV0W0Rc0OUGSWcA0yPi3OT52cDfRsTMVmVeSso0JM9XJGUadznWeeR6cBg2bNgRs2bN6lRMTU1NVFV1bafb19Zv55o/bqGlZ31umRXMAXtVULtfJbXDejGiqrPJyOPJ7+PbLZHP9bxs3XZuX7iVDdtK44L9h4OCT4zu3GfYtGnT5kVEbTeHZCUg3x6QhcAEYAZwmKSNvDch+VJblSJimaR6SXOAq3YmH8l7zcATrZ53OflItDUDZ9dPgXzKEBF3AHcA1NbWxtSpUzsV0Jw5c+hs3dbGT1zHc6+u6/JxCqG+vp6DDz446zAKym3OztaWHTyzvJH7X3mH+19ppmbfKk4+bD+mH7Yf44YPQspvYt6CBVcBMHny1e2W2d31HBH84Kl6bnjhZQ4cMoDrThzNwL6V9OlVQZ/KitzvXhVUSuQZUlFYtvCFbvkMM2strwQk+SL+K0kjySUkhwOnArvrGhgD/DPwpKQHgWsjYm3nws1LA9C6H3UksKqdMg2SegEfAIr+m/3I6r05snrvrMPIyxw1MHVqTdZhFJTbnK2LTzyUtzZs4XdLVvObxau57Ynl3PL4cj4xcQTfmzEp7ySkszZsaeaSe17kkaVvcerhw7n+jAlU9S2N7bYa+vSgbMl6jE5dHcmtiwbg4TzKbgNukXQnMBOYK+lnwA0RsbEz5+/A88Ahkg4C3iDXa/PZXco8RG7g7LPAGcDjxTj+w8z2zLBB/fj8MdV8/phq3m7ayh2/r+cHT9ZzVPXfcPYx1amdd+mqDZx/1zwa3tnMv502ji9NqU494THr6Tq8UdrBVNq8RcSWiLiRXK/JFmC+pEs6c6wOztNCLtH5HVAH3BMRSyRdLemTSbEfAkMkLQcuBt43VdfMerYhVX35+kljmDZ6H/5zdh1LV21I5TwPLGjgU7c/w+bm7cw672jOOfYgJx9mechnpNbuptLmTVK1pOnAucABwEbgvzpzrI5ExMMRcWhEfDAirk1e+/eIeCh5vCUizoyImog4aueMGTMrLRUVuVlkg/v3ZubPu3+X6bo3N/C1e15k8gGDmf0vx1HbQ26RmhWDfBKQt5PbE21Npe2QpEWS1gG/BL4IDCY31Ly9tUPMzLrNkKq+fHfGJF5t3MSVDy7Zbdnx4+9l/Ph78zpuRHDt7Dr26teb7591BEOr+nZHuGZlI58xIDcDRMTOParv28NzfAqo9xgLM8vKhz84lJnTarjl8eUce8hQTp+0f5vl+vQZmvcxn3h5DU8vb+TKT4xj8IDiX5vHrNh0mIC0WsOjL3Ap8GFJFwLzyY2vWNFB/RXJ0ueXAscAm/Kta2bWXS464RCeXfE2VzzwEhNHDqZ66PvXTnzzzZ8AMHz4F3d7rObtO7hmdh0HDx3IWUcfmEK0ZqVvT1bruQE4kNyAzQZgCPBjSWftQd3LO1HXzKzLelVWcPNnJlNZIS78+YI2V3BdvfonrF79kw6PdffcldSv3cQ3ThnbLSuwmpWjPblyJgKXRMSLwFERcQlwIpDPAmJdqWtm1i32H9yf/z5jAovfWM/1v13WqWNsag6+89ifmFIzhBPG7tvNEZqVjz3tAdlZvlHSTeQGkuazSUBX6pqZdZuTxu/H5485kB8+/SpPv9LYcYVdPLR8G+s3N3PFKeM83dasC/JOQCLi1xGxc7XQM4EXyM1iObON4u+5KvewrplZqi4/eSwH7zOQf733RdZvbs673quNm3hsZQufrh3FuBGDUozQrPR16uZlRGyLiLsj4qaI2HWZcyKi3eN2VNfMLG39+1TynX+cxJqNW7nywZfyrnfdw3X0roCLP35oitGZlQePnjKzsjRx1GAuPL6GXy5cxexFbwIwYcLDTJjQ9g4Tz654O7fPy8G92XevfoUM1awkOQExs7J1wbQaJo78AFf8cjFrNmyhsnIAlZUD3ldua8t2rpm9lP0H9+ek6t4ZRGpWepyAmFnZ6l1ZwU2fnsSW5u1cet8iGhpu4403bn9PmT+saOTkm3/PklUbuPyUMfSp9MBTs+5QUgmIpBskLUuWf39A0uB2yr0mabGkhZJeKHScZlY8PrhPFZefPJY5L69lyYqfsmbNPQA0Nm3l4l8s5LN3zqV5+w5+/E9HctqEERlHa1Y68lmKvSd5FLg8IlokXU9u4bOvt1N2WkTs+Rw8Mys5Zx99II/VvcWf173LoP69uXvuSr71mzo2N29n5rQaZh5fQ7/elVmHaVZSSqoHJCIeiYid213+ERiZZTxm1jNUVIgbzpiIBIveWM83HljMuBGD+M1Fx3HJSaOdfJilQKW6R5ykXwG/iIiftfHeq8A7QAA/iIg72jnGecB5AMOGDTti1qxZnYqlqamJqqry2vjXbS4PpdbmjdsuYu27wZubvs2HR/Rqc6GxUmtzPrrS5mnTps2LiNpuDslKQI9LQCQ9BuzXxltXRMSDSZkrgFrg79vahVfSiIhYJWlfcrdtLoyIp3Z33tra2njhhc4NF5kzZw5Tp07tVN2eym0uD6XW5gULpgIwefKcdsuUWpvz0ZU2S3ICYm3qcQlIRyR9AfgycEJEvJtH+auApoi4sYNya4E/dzKsA4CVnazbU7nN5cFtLg9dafOBEbFPdwZjpaGkEhBJ04GbgI9GxNp2ygwEKiJiY/L4UeDqiPhtinGtLbcL0G0uD25zeSjHNlv6SmoQKnArsBfwaDLF9vuQu+UiaefyhsOApyW9CDwHzE4z+Uj8JeXjFyO3uTy4zeWhHNtsKSupabgRUdPO66uAU5LH9cDEQsYFrC/w+YqB21we3ObyUI5ttpSVWg9IsWpzlk2Jc5vLg9tcHsqxzZaykhoDYmZmZj2De0DMzMys4JyApEzSdEkvS1ou6bKs40mbpB9JWiPppaxjKRRJoyQ9IalO0hJJF2UdU9ok9ZP0nKQXkzb/R9YxFYKkSkkLJP0661gKwftmWZp8CyZFkiqBPwEnAg3A88BnImJppoGlSNJHgCbgfyPisKzjKQRJw4HhETFf0l7APODvSvzvLGBgRDRJ6g08DVwUEX/MOLRUSbqY3CKHgyLitKzjSZuk14Ba75tlaXAPSLqOApZHRH1EbANmAadnHFOqkhVl12UdRyFFxJsRMT95vBGoA/bPNqp0RU5T8rR38lPS/81IGgmcCvxP1rGYlQInIOnaH3i91fMGSvyLqdxJqgYmA3OzjSR9ye2IhcAa4NGIKPU2fxe4FNiRdSAFFMAjkuYle2OZdRsnIOl6/05WJf5fYjmTVAXcB3w1IjZkHU/aImJ7REwit+v0UZJK9pabpNOANRExL+tYCmxKRHwIOBm4ILnFatYtnICkqwEY1er5SGBVRrFYipJxEPcBd0XE/VnHU0gR8RdgDjA941DSNAX4ZDImYhZwvKT37bRdapJFHImINcAD5G4rm3ULJyDpeh44RNJBkvoAM4CHMo7JulkyIPOHQF1E3JR1PIUgaR9Jg5PH/YGPAcuyjSo9EXF5RIyMiGpy1/HjEXFWxmGlStLAZFD1zj20Pg6Uzew2S58TkBRFRAswE/gduYGJ90TEkmyjSpeknwPPAqMlNUg6J+uYCmAKcDa5/4oXJj+nZB1UyoYDT0haRC7RfjQiymJqahnJYt8sKyOehmtmZmYF5x4QMzMzKzgnIGZmZlZwTkDMzMys4JyAmJmZWcE5ATEzM7OCcwJiZmZmBecExMzMzArOCYhZkZFUI2nxLq/1lfSqpHGtXquWtDnZEK6jeuOTBdK2SRpamJaYmbXPCYhZ8akHRklqfX2eBzwZEUt3Kbsi2RCuo3pLknLei8jMikKvrAMws/eKiB2SVgLVQH2y18rXgKlp1DMzy4J7QMyKUx0wJnl8AfBQRLyWYj0zs4JyD4hZcaojt6HfU+QSiaNTrmdmVlDuATErTjt7Mi4C7oqItySNknSnpBslfSzfegWK18xsj7gHxKw41QGXAR8DPpS8NgbYBnwvIlZKqs6znplZ0XEPiFlxehk4HLgjItYDRMSjwC3ArZL2z7eemVkxcg+IWRGKiK3scn1Kuh6oBFYCa4D3JSFt1TMzK0aKiKxjMLNOkDQK+APwdqu1QNor2x94FtgHODwi1hUgRDOzdjkBMTMzs4LzGBAzMzMrOCcgZmZmVnBOQMzMzKzgnICYmZlZwTkBMTMzs4JzAmJmZmYF5wTEzMzMCs4JiJmZmRXc/wMCSjWMGDCo5gAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, [axId, axDId, axDDId, axDDDId]=plt.subplots(ncols=1, nrows=4, sharex=True)\n",
"NIdFullDiodData.plot(ax=axId, x='Vs[V]', y='Id[A]', legend=False)\n",
"axId.axvline(x=NVCompFull, linestyle='--', color='y', \n",
" label=f'VComp={NVCompFull:.3f}[V]')\n",
"\n",
"axId.set_ylabel('$I_d[A]$')\n",
"axId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axId.grid()\n",
"\n",
"box = axId.get_position()\n",
"axId.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"axId.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"\n",
"NIdFullDiodData.plot(ax=axDId, x='Vs[V]', y='DIdDVs[OhmInv]', legend=False)\n",
"axDId.axvline(x=NVCompFull, linestyle='--', color='y')\n",
"\n",
"axDId.set_ylabel(r'$g_m[\\Omega^{-1}]$')\n",
"axDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDId.grid()\n",
"\n",
"\n",
"NIdFullDiodData.plot(ax=axDDId, x='Vs[V]', y='DDIdDDVs', legend=False)\n",
"axDDId.axvline(x=NVCompFull, linestyle='--', color='y')\n",
"\n",
"axDDId.set_ylabel('$\\dfrac{\\partial^2 I_d}{\\partial V_{S}^2}$')\n",
"axDDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDDId.grid()\n",
"\n",
"\n",
"\n",
"\n",
"NIdFullDiodData.plot(ax=axDDDId, x='Vs[V]', y='DDDIdDDDVs', legend=False)\n",
"axDDDId.axvline(x=NVCompFull, linestyle='--', color='y')\n",
"\n",
"axDDDId.set_ylabel('$\\dfrac{\\partial^3 I_d}{\\partial V_{S}^3}$')\n",
"axDDDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDDDId.set_xlabel('$V_s[V]$')\n",
"axDDDId.grid()\n",
"\n",
"fig.subplots_adjust(hspace=.5)\n",
"plt.suptitle('NMOS Diode $I_d$ Full ');\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Difference Between Simplified and Full analysis\n",
"We can compare not only the $I_d vs. V_S$ graphs for the two analysis but also the difference in the found Compliance Voltage to see if there are any difference in ignoring the Channel Length Modulation effect in a greater then $1\\mu m$ Diode connected NMOS."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABoAAAAOBAMAAADDIxFwAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77urRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQIHWNgEDIxZQABCJ3OIDEBxAPTLAsYmBOAHAjNfYCB/SOQB6H5DzDwfgfyILS8AgPvPyAPQs83YGD9DORB6PkKUB6YRlUJ1M0ONQVIc29gYAHbAKaBtjIlAE2B0u0MUgGM3xgYQDQDg/C7owwMPRAaABkSKGrnHpT1AAAAAElFTkSuQmCC\n",
"text/latex": [
"$$0.0$$"
],
"text/plain": [
"0.0"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NVCompFull-NVCompSimp"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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bkHmcjMbDgwHiI+PJzk5+Xg2m62UlJRTWr8gurSO4+GtjiFv/coDbaMpF+P326n2zXRc8gAH3u7FnOaPkREeFbxAA6QovsfHojaHhvxsc2491PwUERFBz5499/Xs2XNf06ZND3744Yflbrzxxh1ZyriwMO97LSwsjKioKAcQHh5Oenr6X3tfLcsFhrI+9tevX79dd955Z81XX311lf/zLpdxMtltzzlHx44d93755ZerslnlhB0z+TrncjwQbmalnXO7cyuTwzZ3m1kycA6wwO/5N4E3AVq1auU6d+58Ips9SnJyMqeyfkHVsPk++r6cxUd2AAAgAElEQVT6K28sCeeTq9tTKiYSgORkiGjyHiVHD6LTrrHebEhF/ApYRfU9zo3aHBqKWpvnzp0bFRYWRpMmTVIBZs+eHVOtWrXDx1ovJ1OnTi25ZcuW8NjY2Iyvv/669Ntvv706p7KDBw/etWnTpsgLL7xw75o1ayIzn+/YsWPKyJEjy/bq1WvfvHnzojZt2lSsadOmhzKfP//88/f98ccf0cuWLSsO0Llz5/233XZbjQULFkQ1btw4dd++fWGrVq2KbNq0aerJtOG4DhabWayZtTazy8zsGTP7xsw2AMf9C8DMKmQOzDKzGKAboFniT1BifAneGNKSVdv3c/WHM0lNS//fwgbnQdf7YcE47wpYIiIFwN69e8OHDh1aq06dOo0SExOTlixZEvPkk09uPNnttWrVKqV///61Gjdu3Oj888/fld3x3kxlypTJePTRRzdHR0cf1dW98847t6anp1tiYmJS//7967zxxhurY2Ji3O233751//794YmJiUmPPfZYpSZNmuwHqFKlStobb7yxesCAAbUTExOTWrZs2WD+/PknPYL6mD1fM1uNNzhqEV6yXAwMBJo757K9ZmUOKgMfmFk4XtIf65zTEN2T0L5ueZ7q15RbxszlrnHzeK5/8/8t7HgrbFkEPzwMFRtC/XODF6iICHDGGWccmD17dradrenTpy/NvH/gwIG/pm179tlnj0rO/svKly+fNmLEiLW51blhw4b5WZ+rX7/+4T///HMhQPHixd2nn366OmuZuLg4N3HixJVZnwfo1avXvl69ei3OrQ3H63iO+U4E/gG85ZwbC2Bmd5xg4sU5Nw9ocaIBSvYuaFGNjbsP8Z9vl1KldAytM39/mUHvl2HnCvj0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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax=plt.subplots(nrows=1, ncols=1)\n",
"ax.plot(VSN, NIdSimpDiodConectedN(VSN), label='Simp Model')\n",
"ax.plot(VSN, NIdFullDiodConectedN(VSN), label='Full Model')\n",
"ax.set_xlabel('$V_S[V]$'); ax.set_ylabel('$I_d[A]$')\n",
"ax.grid()\n",
"ax.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"\n",
"box = ax.get_position()\n",
"ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"\n",
"fig.subplots_adjust(hspace=.5)\n",
"plt.suptitle('NMOS Diode Id Compersion between Simp and Full');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As is shown the differences between the Simplified and the Full analysis are minute for a diode connected NMOS ( be in mind a large channel NMOS)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Diode Connected as a Topology Slice\n",
"In the following, we will examine the what a Diode Connected Transistor means in terms of the global view of $I_d$. This is maybe not a new viewpoint but a less common than the declaration that a Diode Connected MOSFET is always in the saturated state (This is true-ish up to the compliance voltage). But given the ease of data collection and analyses with `PySpice` and *Python* we can do better in predicting the Diode-Connected MOSFET from the transistors $I_d$ surface that shows the MOSFETS behaver for all combinations of $V_{GS}, V_{DS}$"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"NIdFullN=lambdify((VGS, VDS), NMOS.IdFull(subs=subsN), dummify=False)\n",
"VGSN, VDSN=np.meshgrid(np.linspace(0, 5), np.linspace(0, 5))\n",
"NIdFullNDate=NIdFullN(VGSN, VDSN)\n",
"NIdFullNDateDiag=NIdFullNDate.diagonal()\n",
"VdiagN=VGSN.diagonal()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" fig.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '');\n",
" var titletext = $(\n",
" '');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('');\n",
"\n",
" var fmt_picker = $('');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('');\n",
" var button = $('');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" event.shiftKey = false;\n",
" // Send a \"J\" for go to next cell\n",
" event.which = 74;\n",
" event.keyCode = 74;\n",
" manager.command_mode();\n",
" manager.handle_keydown(event);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib notebook\n",
"%matplotlib notebook\n",
"from mpl_toolkits.mplot3d import axes3d\n",
"\n",
"fig = plt.figure()\n",
"axId = fig.gca(projection='3d')\n",
"axId.set_xlabel('$V_{gs}$'); axId.set_ylabel('$V_{ds}$'); axId.set_zlabel('$I_d[mA]$')\n",
"\n",
"\n",
"surf = axId.plot_surface(VGSN, VDSN, NIdFullNDate*1000, cmap=cm.coolwarm,\n",
" linewidth=0, antialiased=True)\n",
"axId.plot(VdiagN, VdiagN, NIdFullNDateDiag*1000, label='$V_{GS}=V_{DS}$')\n",
"box = ax.get_position()\n",
"axId.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"axId.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"\n",
"plt.suptitle('NMOS $I_d$ Full Surface')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(if the 3D Graph is not showing up try rerunning the cell twice, at the time of this writing the nbmagic `notebook` is still a bit temperamental)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above surface plot of the current for (this cant be stressed enough) large channel Full modeled NMOS shows every combination of $V_{GS}$ and $V_{DS}$ that effects the NMOS's $I_d$. Since we are interested in the Diode-Connected NMOS in this analysis we know that the regions of interest will be where $$V_{GS}=V_{DS}$$.\n",
"Thus we can find this ROI and overlay it on the $I_D$ surface and plot it individually below. The result is identical to what we predicted from modify the governing equations to the Diode-Connected topology. Save for the vertical mirroring that arises from the choice of fixing the $V_D$ and not the $V_S$."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"Xdiag=VDSN.diagonal(); Zdiag=NIdFullNDate.diagonal()\n",
"fig, ax=plt.subplots(ncols=1, nrows=1)\n",
"ax.plot(Xdiag, Zdiag*1000)\n",
"ax.set_xlabel('$V_{DS}[V]$'); ax.set_ylabel('$I_d[mA]$')\n",
"plt.suptitle('NMOS $I_d$ Full Surface Cut along $V_{DS}=V_{GS}$');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SPICE Diode Connected NMOS\n",
"Here we proceed with the same analysis but instead utilizing an older submicron NMOS technology. The technology that was chosen was the readily available Taiwan Semiconductor Manufacturing Company (TSMC) $180nm$ NMOS with a channel width and length set in the next cell. While the $180nm$ is not even close to there current cutting-edge $7nm$ process it does display non-square law effects without getting too much deviation from greater $1\\mu m$ technology where the Square Law holds better. "
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"NMOSR_W=200; NMOSR_L=200 #nm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SPICE analysis of TSMC 180nm Diode Connected NMOS"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"setup the \"NetList\""
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
".title DCBench\n",
".include /home/iridium/Documents/ClonedGitReps/PySpiceExsamples/SpiceLib/TSMC180N.lib\n",
"Vbs base 0 0V\n",
"Vds drain 0 1.8V\n",
"Vsgnd source 0 0V\n",
"M0 drain drain source base TSMC180nmN l=200nm w=200nm\n",
"\n"
]
}
],
"source": [
"TestCirN=Circuit('DCBench')\n",
"Vbs=TestCirN.V('bs', 'base', TestCirN.gnd, 0@u_V)\n",
"#VDD\n",
"Vds=TestCirN.V('ds', 'drain', TestCirN.gnd, 1.8@u_V)\n",
"#Vload\n",
"Vsgnd=TestCirN.V('sgnd', 'source', TestCirN.gnd, 0@u_V)\n",
"\n",
"TestCirN.include(spice_library['TSMC180nmN'])\n",
"M0=TestCirN.MOSFET('0', 'drain', 'drain', 'source', 'base',\n",
" model='TSMC180nmN', \n",
" length=NMOSR_L@u_nm, width=NMOSR_W@u_nm)\n",
"print(TestCirN)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"setup and run the Simulation"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"TempC=27\n",
"TestCirNSim=TestCirN.simulator(temperature=TempC, nominal_temperature=TempC)\n",
"TestCirNSimData=TestCirNSim.dc(Vsgnd=slice(0, 1.8, .01))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Vsgnd[V] 181\n",
"Id[A] 181\n",
"dtype: int64"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NDiodeConctedData=pd.DataFrame()\n",
"NDiodeConctedData['Vsgnd[V]']=pd.Series(TestCirNSimData.sweep)\n",
"NDiodeConctedData['Id[A]']=-TestCirNSimData.Vds\n",
"NDiodeConctedData.count()\n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Vsgnd[V] | \n",
" Id[A] | \n",
" DIdDVs[OhmInv] | \n",
" DDIdDDVs | \n",
" DDDIdDDDVs | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 181.000000 | \n",
" 1.810000e+02 | \n",
" 1.810000e+02 | \n",
" 1.810000e+02 | \n",
" 1.810000e+02 | \n",
"
\n",
" \n",
" mean | \n",
" 0.900000 | \n",
" 3.845577e-05 | \n",
" -8.825913e-05 | \n",
" 1.163705e-04 | \n",
" -1.101192e-04 | \n",
"
\n",
" \n",
" std | \n",
" 0.523943 | \n",
" 4.931266e-05 | \n",
" 8.334699e-05 | \n",
" 1.504332e-04 | \n",
" 1.701090e-03 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 1.809886e-12 | \n",
" -2.096984e-04 | \n",
" -1.387779e-13 | \n",
" -7.176422e-03 | \n",
"
\n",
" \n",
" 25% | \n",
" 0.450000 | \n",
" 3.238798e-11 | \n",
" -1.727597e-04 | \n",
" 3.938239e-08 | \n",
" -1.725217e-07 | \n",
"
\n",
" \n",
" 50% | \n",
" 0.900000 | \n",
" 8.786765e-06 | \n",
" -9.506566e-05 | \n",
" 7.793643e-05 | \n",
" 9.746982e-05 | \n",
"
\n",
" \n",
" 75% | \n",
" 1.350000 | \n",
" 7.199544e-05 | \n",
" -1.099948e-09 | \n",
" 1.514092e-04 | \n",
" 1.931309e-04 | \n",
"
\n",
" \n",
" max | \n",
" 1.800000 | \n",
" 1.587005e-04 | \n",
" 1.110223e-14 | \n",
" 6.400539e-04 | \n",
" 4.088288e-03 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Vsgnd[V] Id[A] DIdDVs[OhmInv] DDIdDDVs DDDIdDDDVs\n",
"count 181.000000 1.810000e+02 1.810000e+02 1.810000e+02 1.810000e+02\n",
"mean 0.900000 3.845577e-05 -8.825913e-05 1.163705e-04 -1.101192e-04\n",
"std 0.523943 4.931266e-05 8.334699e-05 1.504332e-04 1.701090e-03\n",
"min 0.000000 1.809886e-12 -2.096984e-04 -1.387779e-13 -7.176422e-03\n",
"25% 0.450000 3.238798e-11 -1.727597e-04 3.938239e-08 -1.725217e-07\n",
"50% 0.900000 8.786765e-06 -9.506566e-05 7.793643e-05 9.746982e-05\n",
"75% 1.350000 7.199544e-05 -1.099948e-09 1.514092e-04 1.931309e-04\n",
"max 1.800000 1.587005e-04 1.110223e-14 6.400539e-04 4.088288e-03"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NDiodeConctedData['DIdDVs[OhmInv]']=np.gradient(NDiodeConctedData['Id[A]'], NDiodeConctedData['Vsgnd[V]'])\n",
"NDiodeConctedData['DDIdDDVs']=np.gradient(NDiodeConctedData['DIdDVs[OhmInv]'], NDiodeConctedData['Vsgnd[V]'])\n",
"NDiodeConctedData['DDDIdDDDVs']=np.gradient(NDiodeConctedData['DDIdDDVs'], NDiodeConctedData['Vsgnd[V]'])\n",
"NDiodeConctedData.describe()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAOBAMAAAC1GaP7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77urRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA5ElEQVQYGS2OoU7DUBSGv66lQHe3kWEIZjdYJhYGeq9A4AEoyRIchhdoMjGDaHBgVoGZm8HXIHB7AxIcZlkzCgrKfxm/+c/9zj3nP9A+PsGp3X+Bu8MnlVfspTLvkYfUyxnMCTL8WMhkGGt2iDLqOZuFUCvGX0YJpqSV0/gS6sxolmHhUMfS+BGK9OtbvlUw6bGxUukvCT/krz0mdo245sYtuNWO/0GCxXkJNaskJbquZJT8Jq/PCNwRUqiu5d6dWov1DqZcpJzBO4zZP/U+aV56Q7ZH/W4Cu4vnv5yjgzlhVVXJL+1ZOqx/ORJvAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$0.92$$"
],
"text/plain": [
"0.92"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NVCompReal=NDiodeConctedData['Vsgnd[V]'][np.where(NDiodeConctedData['DDDIdDDDVs']==NDiodeConctedData['DDDIdDDDVs'].max())[0]]\n",
"NVCompReal=np.around(float(NVCompReal), 4); NVCompReal"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAPBAMAAAB+RXBeAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77urRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA10lEQVQYGWNgEDIxZYCAICBl/DiAgSGdQWICRKibgUHsAlMCA8sCBuYEsBDfagaGTQzcGxi4DzCwfwQLTclm4P0JYvEfYOD9DhYyyGbgXgBiySsw8P4DMVgmZDPwp9rpMjDMN2Bg/QwSkmPIZpBPYeAqYJivABUyAAl9ZGBaCNfIHgAU4m9gYPkLMp4dZLwwA1CIA+ioLyB3sIAcUXPmzK9zPAtAqoBOBToYDFYzsALNWsDA0M4gFcD4DST2m4HhMINUAdCQd0cZGHqAItb/jzAwKwE5mAAAIo800fvGrh8AAAAASUVORK5CYII=\n",
"text/latex": [
"$$0.46$$"
],
"text/plain": [
"0.46"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NVbiasTarget=NVCompReal/2; NVbiasTarget"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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qHDFihVRrgnK6tWro55++ulDqamp1du2bdsRFRU1sj2vG7pBgqK6p2c3PgvAovMWuTmS0xfgaycl3M6kMSffB6yovIZ9+WXszbMe+/LL2JJVxDtbj5w4/VkEEiOD6N8jhJToYJKjg0iKDiI5KojekUH4+TR9x+fsbKvdEhK8t93U2WfsC2MHNZ43dfDUwvsvuj+/tLrU9r1l3xvQePmcEXMKbh93+7GjpUd9rll5TT/XZV//uOVrjsydO7foiSeeSKisrJTAwECTkZHhl5eX55uSklLjWu748eP2iIiIeoB33nkn9Kmnnor75JNP9n7yySdBd911V1JVVZUtICDgRC/LN998EzB//vw+tbW14nA4WLVq1b7hw4dXNxfHpZde2j83N9e3urratmjRoty77rqroLa2lqioqJHz58/P++STT8L//Oc/H7rsssvKW3o9b775ZsScOXOOAVx++eVlCxYs8Dly5IhPr1696lzLFRYW2p577rkezz333KF58+b1aZj/3HPPxd5///05DZfuT0hIqAN47bXXIqZNm1YYEBBghg4dWt2rV6+azz//PKjhJoQN5s2bVzRixIhe1dXVh/z9/U16erp/UVGRz6WXXtpi3K05axMUEbkC+AtgB5YYY37n5pCUi/9s/w/g3QlKcyKD/RgTHMWYlJPv7F5VW8/+/PLvkpf8MvbllfHlvgKqar+79YVNoGd4oJW0RDUkLsEkRgVSlbMSX7tNExSlWhAfH1+fmppavmrVqvA5c+YUv/zyy1FTpkwpEhGysrL8zznnnCHl5eW2qqoq25dffnlKT0RqamrV119/vcvX15c33ngj9N577+29Zs2afX/9619jFy1alPvTn/60sKqqSurq6pra/AkrVqw4EBcXV19aWmobOXLk4Llz5xZFRETUl5WV2UePHl3xzDPPHAG48cYbE7/66qvQxutfd911xx599NHco0eP+iUnJ59IruLj42szMzN9Gycod955Z8IvfvGLnKCgoJPupXPgwIGAjz/+OPSXv/xlQkBAgHnqqaeyLr744ors7GzfSZMmnegV6dmzZ82hQ4f8oqOjTzp8lJCQUDd48OCK119/PWzmzJkly5Yti7r22msLbbamf0i11VmZoIiIHfg78H2sw0MbReQtY0yX3mdAKVcBvnaG9ApjSK+wk+YbY8gvreZgYQUHj1VwqLCCQ8fKOVhYwYc7cjlW/t2PvvvHFiEIt675mJ7hAcSFB9AzLIDYUH8ig/2ICvKz/jqfhwb4dOgYGKVOR0s9HqH+oY6WlvcM7VnXWo9JU6ZPn174yiuvRM6ZM6d49erVUUuWLMkESExMrG44LPPCCy9E3nTTTcmN781TWFhonzFjRp/MzMwAETG1tbUCMH78+PI//vGPPQ8fPuw3c+bMopZ6TwCeeOKJuPfffz8CIDc312/nzp3+48ePr/D19TVz5849cWfh1sa9GHPqUJbGl0D47LPPgo4cOeI3a9askvT09JMu7FRXV0dJSYl969atuz766KPg2bNn9z106FA61r3tWqy3wfTp0wtXrlwZNXPmzJLXX3896p///Ocpd1xur7MyQQHGAnuNMfsBRGQlcA2gCYryOCJCj7AAeoQFcF6jXhewLjx3qLCCI8VV1OcHU1PvYFyfKI6WVLHjyHE+2pFLdV3TNx+1CQT7+WCnnshv1hLkZyfYz4dAPzuBvnZ87IKv3YaPTfCxCz42G3ab4GsXfOw2GnIbQZATz6FhQpxPxfk9Zz3nu+cuX3biUldL9u+vYSf72tJ0btWd4rxiWDx9YrrXJaZmz55d/OCDDyZ+/vnnQVVVVbaLLrqoIiMj46R7X1x//fXFt99+e0rjde+7776EiRMnln744Yf7MjIy/C699NJBALfcckvhxRdfXP7666+HX3nllQOfffbZzClTppQ2Xh/gjTfeCP3yyy9DN23atDMkJMSMHj16UGVlpQ3A39/f4dr70FoPSq9evWoOHjzoB5QD5OTk+CYnJ9e6lv3ss8+C09LSghMSEobX1dVJYWGhz/jx4weuX79+d8+ePWunT59eBHDZZZeV19XVSX5+vj0hIaEmKyvrRJscPXrULzEx8aTDYA3mzJlT9PDDD/det25dkMPhYNy4cc0O0m2rszVBSQBcM9LDwLjGhURkIbAQIC4ujrVr157WxsrKyk573a7kSXEWF1s/HpqLx5NibUlXxukL+FJFgA2mxBVDnDXfmACq66G0xlBWayitMc7n1rzqekNZlYN6qaK6Fo5XGfLrobre4HBAvXF5OIzLc2f9gOsPuA45LaE1u5sc/+d5ukmclbkHODeue/27CA8Pd5x//vmlCxYsSJk6dWqTd/v98MMPQxMTE0/pBTl+/Li9d+/eNQCLFy8+cYfOHTt2+A0ePLh66NChefv37/ffsmVLYHMJSnFxsT0iIqIuJCTEfPPNNwHbtm1rNgNsrQdlypQpJS+++GLMTTfdVLRmzZqQmJiYusaHd375y1/m//KXv8wHSE9P9//Rj37Ub/369bsBrr766qIPP/ww9PLLLy/79ttvAwBiY2Prp06dWnzzzTen/OpXv8rbt2+fX3Z2tt9FF11UsXPnzlMurR0VFeUYM2ZM2cKFC1OmTZvWZHu2V/f6xLVdUz/RTvledZ7S/DzAmDFjzKRJk05rY2vXruV01+1KnhRnRGYEQLPxeFKsLenqODdvttpt1Kj2bbOz4jTGnEheDN91RbsmNQZDEz3UzVq3bh0TJkzo0Dg7Q3eK09du65bX8Zk5c2bhDTfc0G/FihUnDkc0jEExxuDr62v+7//+72Dj9e67776cBQsW9HnmmWfiL7744hNnAi1fvjzq1Vdfjfbx8TGxsbG1v/3tb480XrfB9OnTS5YsWRI7aNCgIf37968aMWLEaQ8ovf7664vffffdsMTExGENpxmDdehm5MiRgxvOtmnOnXfeWTB9+vSUAQMGDPXz83O88MILBwDGjx9fedVVVxUPGDBgqN1u5+mnnz5ktzd/duHMmTMLb7755r7z5s3rkK5DaerYVXcnIuOBh40xlzunHwAwxjR7Hx8RyQdO+aC2URJw6DTX7UreEid4T6waZ8fzllg1TkuyMSbWdUZaWlpmampqQSduU3Wihh4Y1+uotKThzKTmroOSlpYWk5qamtJ4/tnag7IRGCAifYBsrKvSzmpphcY7WHuISL4xZszprt9VvCVO8J5YNc6O5y2xapyqu/L19TXFxcU+w4YNa7V3Ji0tzX/GjBn9oqOjWz6lqQlnZYJijKkTkVuBNVinGb9ojNneiZssbr2IR/CWOMF7YtU4O563xKpxNs/hcDjEZrOdfV343cCgQYNqcnJytralbGpqanVLPS0Oh0OAJkfxn5UJCoAx5l267uqzJV20nTPlLXGC98SqcXY8b4lV42xeen5+/pDY2NgSTVLOXg6HQ/Lz88OB9KaWn7UJShd7vvUiHsFb4gTviVXj7HjeEqvG2Yy6uroFOTk5S3JycoYBZ3Y1L+XNHEB6XV3dgqYWnpWDZJVSSinl2TRzVUoppZTH0QRFKaWUUh5HExSllFJKeRxNUNpBRF4UkTwRaXLE8WnWGSYi2SLyt46qUymllPJ2mqC0z1Lgig6u81Hg0w6uUymllPJqmqC0gzFmHXDSTZBEpJ+IvC8im0TkMxE5p631ichorFu6fdDBoSqllFJeTROUM/c8cJsxZjRwN/BsW1YSERvwFHBPJ8amlFJKeSW9UNsZEJEQ4ALgVZETd/r0dy6bCjzSxGrZzpsULgLeNcZkuayrlFJKKTRBOVM2oNgYM7LxAmPMamB1C+uOBy4WkUVACOAnImXGmPs7J1SllFLKe+ghnjNgjDkOHBCR6wDEktrGdWcbY5KMMSlYh4aWaXKilFJKWTRBaQcRWQGsBwaJyGERuRmYDdwsImnAduAad8aolFJKdQd6Lx6llFJKeZyztgdFRK4QkQwR2SsiemhFKaWU8iBnZQ+KiNiB3cD3gcPARuB6Y8wOtwamlFJKKeDsPYtnLLDXGLMfQERWYo0daTZBiYmJMSkpKae1sfLycoKDg09r3a7kLXGC98SqcbbMGDAYWvqd1HhRRXk5QU3Fak4t604VFeUEBXn+e9+WOH1swuleDWHTpk0FxpjY01tbnc08JkERkag2FHMYY4o7YHMJQJbL9GFgXEsrpKSk8M0335zWxtauXcukSZNOa92u5ElxfrT/IwAu63tZk8s9KdaWdHWchYVWu0VFNd1uzTndOMuq69iTW0p2cSVHi6s4UlJJUXkNpVV1lFbVcbyqltKqOqrr6qmtN9TVO6h1WH8dZ5BN1Jz+ql2qxN0BtFFrcT4/dzT/MzT+tOoWkYOntaI663lMggIccT5aytPtQFIHbKupbZzydSkiC4GFAHFxcaxdu/a0NlZWVnba63YlT4rz7i13A/D0yKebXO5Jsbak6+O82/m36XZrTlvjzC13sDW/noyierJKHeRWnLzb+NshzE8I9BGCfCHQR4gOEvzsYBPwEcFus2EXO3Yb2AXsNrDx3S/0hp1TXCZcd9jq6moCAvxPmd8w7SnXPayursbf39/dYbSqLXGWHNzB2vxdXRSRUhZPSlB2GmNGtVRARDZ30LYOA4ku072xkqOTGGOex7qUPWPGjDGn+0tYf+23X0RmBECz8XhSrC3p6jg3b7babdSo9m2zpTgPFJSz8utDfLgjl/0FlQD0jgxkVJ9whvYK45yeYSRGBdIzPJCwAB86+8rI+t53LG+JU519PClBGd9BZdpiIzBARPoA2cBMYFYH1a2U13M4DP/dlcey9Zl8tqcAH5twQf8Y5o1P5pJzepAc7fljK5RS3s1jEhRjTFVHlGnjtupE5FZgDdZhoxeNMds7om6lvJkxhrUZ+Tz5/i525ZQSHxbAXd8fyMyxifQIDXB3eEqps4jHJCiuROQ+Y8yTnbkNY8y7wLuduQ2lvElaVjGPv7uTrw8UkhwdxF9mjuQHw3viYz9rL5eklHIjj0hQROQ/rpPASKBTExTl2RZfvdjdIXilQYPa326lVbUs31HNx2u+IDrYn0evGcqM85Lw89HERCnlPh6RoADHjTELGiZE5Dl3BqPcb1DMIHeH4JWCgtrXbu+n5/C/b6WTd7yOGy5I4e7LBxHi7ylfC0qps5mnfBM9DiAiMcaYAuBXbo5HudnbGW8DMHnQZDdH4l0KCqx2i4lpud2OllTy0Jvb+XBHLoN7hvGTIcJNU4Z2RYhKKdUmHpGgGGMOOJ++CEwxxhS6Mx7lfk+tfwrQBKW9srKsdmsuQal3GJavz+QPazKoN4YHrjyHmy7qwxefrevCKJVSqnUekaC48JBLLCnV/ew4cpwHXt9GWlYxEwbG8tg1w0iKDnJ3WEop1SRPS1A86VYaSnULlTX1PP3RbpZ8foDIIF/+MnMkU1J7dfoF1ZRS6kx4WoKi35hKdRCHw/D21iP8/v0MsosrmTEmkQeuOoeIID93h6aUUq3ytATlAXcHoFR3sGH/MZ54dydph0sY0jOMP01PZVzfaHeHpZRSbeZRCYoxJh1ARHyMMXUN80UkyRhzyH2Rqa62/IfL3R2C1zHGUBbwF5Z9lcmHGV/RMzyAp65L5YejErDZtHNSKeVdPCpBEZEfY92ONUxEAoFvgV8CzwLnujM21bUSwxNbL6QAqK6rZ832XJZ8tp+th0voERrML6/qw9zzUwj0s7s7PKWUOi0ek6CIyH3AGGCiMSbHOe9/gBeAJHfGprreK+mvADBj2Aw3R+K5MnJKeWVjFqs3H6a4opbk6CD+NDmTcX2jSOh5mbvDU0qpM+IxCQowHxhujKltmGGM+UBELsPqQVFnkee+sS4mrAnKd4wx7Dh6nPe25fBe+lH25Zfjaxf+Z0g8M8cmcmG/GNLSfkNeDiT0vN7d4Sql1BnxpAQF1+TEZV6uiPzVHfEo5W4FZdV8ue8Yn+3O57M9BeQcr8ImMK5PNDdckMIPhvckOsTf3WEqpVSH86QEZZ+I/MAY8/9cZ4rII1iXvteD6apbM8awL7+MbzKL+OZgEZsOFnGgoByA8EBfLuofw4SBMVw2OE6TEqVUt+dJCcoiYJWI3AikASHAVcAWIMONcSnV4eodhv35ZWw/cpz07BK2HznO9iMlHK+yTl6LDPJldHIk08ckcn7fKEb0jsCuZ+Iopc4iHpOgGGMOish5wOXAYOA4MMcYs9U5gFYpr1RWXcee3FIyckqthORICbuOllJZWw+An4+NwfGh/GBEL0YmhjM6OYp+scF6pVel1FnNYxIUAGOMAd53PlznP+meiJS7vDb9NXeH0G5VtfXszSsjI6eU3Xml7M4pZevBCo69v+ZEmRB/H4b0CmPm2ESG9QpnaEIY/WJD8LXbOiSGoUO9r92UUqopHpOgiMi3xpgWr3XSljKqe4gJinF3CM2qrqtnf345u3NL2ZNbRkZuKXtySzlYWIFx3k3Kz26jb2wwAyJtzB/ej4FxoQyMCyUpKqhTL5rm5+e57aaUUu3hMQkKMFhEtrawXIDwrgpGudfSLUsBuHHkjW7ZvjGG/LJq9ueXOx9l7MsvY39BOVmFFTiciYjdJvSJCWZIrzCuHZVwIhFJiQ7Cx25j7dq1TJo0oMviPnp0KQA9e97YZdtUSqnO4EkJyjltKFPf6VEoj9BVCUpVbT0Hj1Ww35l87MsrY1+BlZCUVp242wL+Pjb6xoYwLCGca1J70T8ulIFxIfSJCcbfx3NOMMvJWQpogqKU8n4ek6AYYw42NV9EhgDJwDZjzOGujUp1B6VVtRw8VsGhwgrn33IOHrOeHy2pPNEbAtAzPIC+scFcOzKBvrHB9IsNoW9sML3CA/V+Nkop1YU8JkFpwW+AV4GFIpJsjLnB3QEpz+JwGArKqjnYkIAcK//ueWEFheU1J5WPDvYjKTqI81IiSYruTT9nItInJphgf2/YJZRSqvvzhm/jD40x/wH+4+5AlHvU1DnIKanicHEF2UWVZBdXsmlnNc/v+Yrs4kqOFldRU+84Ud4m0DM8kOToIC4fGkdSVDAp0UEkRQeRFBVEaICvG1+NUkqptvCGBOUCEbkCOAbsNMb8yd0BqY5T7zDkl1aTc7yKXOfjaEkVe/PKqK5zcP4T/yW3tOrE2TENIvyFPnH1DE8I54ph8SREBJIYFURyVBC9I4Pw8+mY03aVUkq5hzckKOnGmD+KiA8w1N3BqLYxxlBWXUfu8SpySr5LQHJKvktEco5XkV9afdIYEABfu5Ac9ii9ogNJjookISKQhMhA629EID0jAlj/+WdMmnShe16cBxsx4l13h6CUUh3CGxKUq0WkGlhjjEk708pE5A/AZKAG2AfMN8YUn2m9Z4vy6joKyqopKKsmv7TmxPOCsmoKXKbzSqupqDn1pKvwQF/iwwKICw9gUHwocWEBxIUFEB8WQHy49Tw62E8HpJ4muz3I3SEopVSH8IYEZQYwCpgqIv2MMT8+w/o+BB4wxtSJyJPAA8BZeyn9qtp6iipqKCqvZcexesq2HqGwvIaC0mryy05NQBouz95YRJAvMSH+xIT4MSwhnB6hAcSH+5+UgMSFBRDo17ZTcp/d+CwAi85b1GGv9WyQnW21W0KCtptSyrt5XIIiInuAbVg3DNwCpBljTrn8/ekyxnzgMvkV8KOOqNfdjDFU1tZTWF5DcUUtheU1zsSjhqKKWut5RS3FFTUnlTkl4di4GQARiArys5KOUD/OTYp0JiBWEhIT6k+sczo6xK/DLtXe4D/brTHRmqC0T16e1W6aoCilvJ3HJSjAYqAv1qDYK4F/icgB4HXgUWNMbQdu6ybglQ6s74zU1TsoraqjpLKW41W1HK90fV570vzjVc7pylqOO9epqXM0W3dYgA9RwX5EBPkRF2YdXokK8iMy2I/IID8ig3w5uGcHl1wwlshgX6KC/PDp4KRDKaWUaisxjU+PcDMR2WKMGekyPRKYD2QBycaY29pQx0dAfBOLfmWMedNZ5lfAGGCqaaYRRGQhsBAgLi5u9MqVK9v7cqioNezNL6fI4c+RMgd5FQZjwACVdYaKWkNFnVWuqpXr5NoEgnwgyFcI9hGCfCHQRwjyFYJ8hFA/CPEVQvyEEF8h1Pk32Ne6JHtrysrKCAkJafdr7Aw/3/JzAJ4e+XSTyz0p1pZ0fZw/d/5tut2a4y3tCd4Tq8ZpueSSSzYZY8Z02gZUt+WJPSglIjLCGLMVwBizRUTON8bcISLftqUCY8xlLS0XkRuAq4HvNZecOOt5HngeYMyYMWbSpEltfQ0n/PqNdJZvrQBq8PexkRIdjN1uJQtRoT6kBPgSHuhLWKAvYQG+hAX6WNMBznku00F+dkQ6b/Codd+YSZ1Wf3tEZEYANBuPJ8Xakq6Oc/Nmq91GjWrfNr2lPcF7YtU4lToznpig/ATrsM4WrDEog4CGYxd+Z1q585oq9wETjTEVZ1pfa2acl0h0TQ5Tv3cBCZGBberJUEoppc52HneIB0BE7MBUYATWWJTlQBVwpzHmsTOsey/g76wX4CtjzC1tWC8faPJ+QW2QBBw6zXW7krfECd4Tq8bZ8bwlVo3TkmyMie3E+lU35ZEJSncjIvnesIN6S5zgPbFqnB3PW2LVOJU6M3qaRtfwlgvBeUuc4D2xapwdz1ti1TiVOgOaoHSNEncH0EbeEid4T6waZ8fzllg1TqXOgCYoXeN5dwfQRt4SJ3hPrBpnx/OWWDVOpc6AjkFRSimllMfRHhSllFJKeRxNUJRSSinlcTRBUUoppZTH0QRFKaWUUh5HE5R2EJEXRSRPRNI7oK5kEdkkIltEZLuItHo1W6WUUupsoWfxtIOITADKgGXGmGFnWJcfVvtXi0gIkA5cYIw50gGhKqWUUl5Ne1DawRizDih0nSci/UTkfWdvyGcick4b66oxxlQ7J/3R90IppZQ6Qf8pnrnngduMMaOBu4Fn27qiiCSKyFYgC3hSe0+UUkopi4+7A/BmzkMzFwCvikjDbH/nsqnAI02slm2MuRzAGJMFjBCRXsAbIvKaMSa38yNXSimlPJsmKGfGBhQbY0Y2XmCMWQ2sbkslxpgjIrIduBh4rWNDVEoppbyPHuI5A8aY48ABEbkOQCypbVlXRHqLSKDzeSRwIZDRacEqpZRSXkQTlHYQkRXAemCQiBwWkZuB2cDNIpIGbAeuaWN1g4ENzvU+Bf5ojNnWGXErpZRS3kZPM1ZKKaWUx9EeFKWUUkp5HB0k20YxMTEmJSXltNYtLy8nODi4YwPqBJ4UZ0VtBQBBvkFNLvekWFvS1XE6HFa72WxNt1tzvKU9wXti1TgtmzZtKjDGxHbaBlS3pQlKG6WkpPDNN9+c1rpr165l0qRJHRtQJ/CWOMF7YvW0OHNKqli9+TAb9hfia7cxKimCWWOTSNv4pUfF2RJPa9PmaJwWETnYaZWrbk0TFOWRPtr/EQCX9b3MzZF4l8JCq92iok5uN2MMr2zM4rH/t5Oy6joGxoVQ7zB8tDOXl7/MZN4gYZIb4lVKqeZogqI80mPrHgM0QWmvgwetdnNNUIwxPP7/drLk8wOc3zeK300dQUqM1aW//UgJd6zcwlPflDF0eB6XDOrhlriVUqoxHSSrVDdmjOHRd6zk5MYLUvj3gvNPJCcAQ3uF8+bPLiQx1MZt/97MrpzjboxWKaW+owmKUt3YS19k8uIXB5h/YQr/O3kINpucUibY34efj/Yn2N/Oon99S3VdvRsiVUqpk3XLBEVErhCRDBHZKyL3N7H8RhHJF5EtzscCd8SpVGdatzufx/7fDv5nSBy//sEQXO4XdYqoABu//1Eq+/PLefaTfV0YpVJKNa3bJSgiYgf+DlwJDAGuF5EhTRR9xRgz0vlY0qVBKtXJjpZUcsfKzQyMC+XPM0Y22XPS2MSBsVwzshfPrt3L3rzSLohSKaWa1x0HyY4F9hpj9gOIyEqsy8/vcGtUql0WX73Y3SF4pUGDFlNX72DBv7ZQXefg77PPJdi/7bv5r68ewse78vjdexksuWFMJ0aqlFIt63Y9KEACkOUyfdg5r7FpIrJVRF4TkcSuCU211RLbq0kAACAASURBVKCYQQyKGeTuMLxOUNAglqy38XVmIY9dO4x+sSHtWj8mxJ9bJvbjo525bDpY2ElRKqVU67rdvXicdxa+3BizwDk9FxhrjLnNpUw0UGaMqRaRW4DpxphLm6hrIbAQIC4ubvTKlStPK6aysjJCQtr3j8IdPCnOLwu+BOCCmAuaXO5Jsbakq+M8dPxzVu+pIcTvQhYM92/zeq5xVtcZ7llXSXyw8MDYgBbHrriDvvcdq7PjvOSSSzYZY7Q7TrWfMabLH0B9J9Y9HljjMv0A8EAL5e1ASWv1jh492pyuTz755LTX7UqeFOfElyaaiS9NbHa5J8Xakq6MM7ek0ix5Y4R56a1UU15d2651G8e57MsDJvm+d8xnu/M7MMKOoe99x+rsOIFvjBv+z+jD+x/uOsTTmT/JNgIDRKSPiPgBM4G3Ttq4SE+XySnAzk6MR6lOV1fv4LYVm6l3GAb2CCXI78yGl00/L5H4sACe+XhPB0WolFLt02kJiojMFpGBzSxu9bhSoySizYwxdcCtwBqsxOM/xpjtIvKIiExxFrtdRLaLSBpwO3Dj6WxLKU/xpw93s+FAIX1iggn0s59xff4+dm6Z2JevDxTy1f5jHRChUkq1T2f2oOQDz4rIOhFZLSK/a1xARL4vIi+IyEjn9EKXxY87580WkS9E5Adt3bAx5l1jzEBjTD9jzOPOeQ8ZY95yPn/AGDPUGJNqjLnEGLPrTF6oUu703525PLt2H9ePTSImpO3jTlozc2wSsaH+/FV7UZRSbtBpCYox5gNggzFmAnAD0NQorEXAPcAcEbkUGOmyrNj593+Ai4AfdlasSnmrrMIK7vpPGkN7hfG/k5u63M/pC/C185MJffli7zE9o0cp1eU6ewxKmIiMBqqB4CaW5xtjio0xd2MlIue5LPMRkQeBQ8YYA5R3cqzKgyz/4XKW/3C5u8PwaCUVtcxfuhFjDM/OPpcAXzuDBy9n8OCOa7dZ45KIDvbj/7d35/FR1ecexz9PJpNMQiAgYZN9kx0RUFFcwLW1VbRWxarVtl6vS+1i7+1LbzertVe7XWtd0VrsooJWKyq1VTGCggv7voMYFkOABLLO9tw/zgkOYZJMklnD83695pWZc87vnG9+DMmT35zzOw+9vTlu+zTGmFjEpUARkUdF5BYRmSwinSJW3QFMBh7HOSekoddFZDiAqt4J/Dli3Q+A94FfuK/b46RyphF9C/vSt9Cmp2lMXTDELX9bwif7qnjiuon07+rU/z5fX3y++PVbfk42N545iHc37mX5p+XNNzDGmDiJ1wjKcmAU8Etgm4hsF5FXgbuBUlX9pqoeNYmIqr4CzBWRp0Wkr6r+IWJdQFXfUdU69/VtccpqMsCs1bOYtXpWqmOkJX8wzG1/W8rCLft44PKxnDa46+F1paWzKC2Nb79dd1p/Oud7edjORTHGJFFcChRVnaGq31bVs1W1K845I48BB4HmTm4dDiwD5ovIgyLSLR6ZTGZ7bPFjPLb4sVTHSDu1gRC3P7eUt9aVcs+0UXxlfJ8j1u/c+Rg7d8a33wpys7nxjIG8ta6U1Tsr4rpvY4xpTELOQVHVEvdKmgdU9bpmtvW7IycjcKal/9C9JLhjIrIZk6kqagJc//RH/GvNZ/zs4pF8/bQBSTv2108fQCdfNg/Ps3NRjDHJ0eYCpZlLhWOmqrWq+htgDFALLBWR/2prPmPag3W7DzLt4fdY8skBHrxqHN+YPDCpx+/k8/KNyQN5Y80e1uyyURRjTOLFYwSlqUuFYyYiA0TkC8CNQD/gEM45LcYcs0Jh5cn5W7n0kfep9od47qZJXHpStHtfJt43zxhI53wv9//Tpg0yxiRePAqUpi4VbpZ7R+H9wD9wZnTtDMyj8blTjDkmLNxSxqWPvM99c9dx5tAiXv/OmZw84LiU5SnM83L7OUNZsKmMdzfuTVkOY8yxIR6X7r5e/0RV7xSR25vaOIrLgK3uXCfGAPDilS+mOkJKhMJK8YZSnlqwjUVb93F8oY+Hrj6Ji8f2iumuwqNGJbbfrpvUn2cWbueXr6/j9MFd8XpSdTsvY0x71+YCxb1UGBHJBX4InC4iZwFLce6Ds6WZ9ltEJFdEfohzJ+KqWNua9qsovyjVEZKmxh/io+37eXfDXl5ftYvPDtbRq9DHj780gmsn9cfnjf3eOjk5ie23nOwsfvylEdz0lyU8tWAbt0wZnNDjGWOOXfGc/OzXQD5wJ85HNV2BP4nIDFX9a4xt72pF27S2q7yGZaVBpqQ6SIaZuXwmADeMuyGlOeLNHwyzfV8V63YfZN3uQ6wsKWfxJwfwB8PkeLI464Qi7r64D+eN7NGq0Yndu2cC0KvXDfENHuGCUT25YGQPfv/2Rr40phf9uuYn7FjGmGNXPAuUE4FpqlouIqeo6mR3VKUYaK7IaEvbtPbgWxt5YWkdHXpu4T/OHBTTML3JnAKlNhCioiZAeXWA8mq/87wmQEV1gIqaAGs31/HirqXsrqil5EA1pYfqqP8w0+sRhnbvyNcn9eeMoUWcOrBrm+9EvGfPTCCxBQrAz6eN4vzfzeeO2ct5/qZJZNtHPcaYOIv3CEr9T6kyEfkdsB4IJ7htWrtn2mi2lezml3PXE1a4+WwbEk83obByqDbweaFR4zyvqPZT7hYa5e66gzUBymv8h7etCzb+Fs0SyM+GouoKehXmcebQbvTpkseArh0Y0asTg7p1yNhzOHoV5vGLS0fzvVnL+d2bG/nhF4anOpIxpp2JW4Giqq9FvLwC+CrQ033e0BHDCC1sm1F8Xg+3nJiLJ9/H7I8/tQIlQcJh5VBt0CksGjzqC4qD0dZVB6isC9LUKdp5Xg+d870U5jmPgUUdKMzz0jk/5/CyzvleOuflHH5emO+lICeb+fPfZcqUKUnrh2S69KTefLB1H48Wb2FM70K+OKZXqiMZY9qRhNyAT1X9wLNNrG/0z8bm2maiLBEuHNWTn7+6lk/2VR2+sZs5Ul0wRGVtkEO1QarqggTDytxVu48uOqoDbN9Vw29XvXd42cHaQJNFhtcjh4uJwjwv3QpyGdKt4PDrTm7B0bm+wMhziozCPC+52W372KU9u/uSUWwqreS7zy+nMN/L6YOPnZObjTGJZXcITpKpw7rz81fXUrxhL9ef3n4KFFWlNhCm2h+k2h+iyu8UGJW1QQ7WOqMT9a8P1QY4FPm6LnC4IDlUF8Qf8XHJnhxnttJb/7b08LL6IqNTnhcJQt+CHAZ1c0cz3OWRRUhhxKhHntdj5/8kgM/r4Y/XT+TKJxZx4zOLeeSa8Uwd1j3VsYwx7YAVKEkyoKgDA4s68M6GUq4/fUBSjx0OK3XBMHXBELWBMLWBEDWBENX+EDVuUVHtD7J8R4BN87dS5Q9GLA9RXReKWBaixh+kyh+iui5IdSDU5MhFvSxxbjrX0eeloy+bjr5sunf0MajIeV7gy6aTu64gNxtv9hw6+rLp0bHw8IhGZJFRXFzMlCmnJLjnMs/YsXOTfszO+Tn89cZT+ebMj7nxmcX8z0Uj+MbpA8jKsoLQGNN6VqAk0dkndOO5j3ZQGwjh83oIhMLsLq+lNhiiNvB58VAbCFEXdJ8Hw9QFGqwPRm7rFB51gXDU/dQGw0eMTDRr7ToAfN4s8nOyyc/xuA/neef8HPJzPHTI9USsP3K7+gLEeXgpyHXW2whG4nk8qbnkt3tHH7NuOo3vzVrOva+tZd76z7hn2mgGd7PJoI0xrdMuCxT3nj6/BzzAU6p6f4P1ucCfgQnAPuAqVd2e6FxTh3dn5sLtvLpiF18a24vLH1vEut0HY26fJc6Qus/rwZedhc/rIdfrwefNwpftoWuHnMPrcw+vd9b56reL2D4/98jCYsXiDzlv6lnkeT14UvzX76MfPwrArSffmtIcmWbnTqffevdOfr91yM1mxnUTeP7jT/nFa2u54P/m85WTenP96QMY3bsw6XmMMZmt3RUoIuIBHgHOB0qAj0VkjqqujdjsW8ABVR0iItOBB4CrEp1t8uCuTOjfhZ/NWcMbq/ewfs9BfnTRCHp19kUtInIbLMvOkoSOQnziy6IgNz3eErPXzAasQGmp0lKn31JRoACICFef0o/zR/bg4Xmbee6jHbywpIQRvTpx/sgenDrwOMb0KaSTz5uSfMaYzJEev43i6xRgs6puBRCR54FpQGSBMg24233+IvCwiEii7weU7cnika+N58t/WMDb60u5/Zwh/MdZgxJ5SGNSoqggl7svGcX3zzuBl5aVMHfVbv4wbxMPuf/DBhV1YFjPjhzfOY9ehT56FebRKS/7iPOUOuRm4/UI2VlZKR/RM8YkX3ssUHoDn0a8LgFObWwbVQ2KSAXO9PpliQ7Xs9DHU9efzFtrP+O75w5N9OGMSanCfC/fmDyQb0weSHm1n5UlFawsKWdFSQWbSit5d+Neqv2hZvcjAtlZTrGChvDN/zeerCwi57mTiOmVIgca5Yj9RC90jtj+iLatL4xqamrI++idVrdPllhy3nfZaM4c2i1JiYxxtMcCJdpPlIYjI7Fsg4jcBNwE0KNHD4qLi1sVqLKy8qi2E3PhvQW7W7W/RImWM1XKy8sBGs2TTlmbkvycTfdbY5KZc3QWjO4H9APVXKoCcKBOqQ0q1UGlJgg1AaU25MzyG1KcR9j5WusP4slWQuFQ1KmmGxsH1ZZuc/SPhBYJesJke+vatI9kiCXnlrUrCe20+YBMcrXHAqUE6Bvxug+wq5FtSkQkGygE9jfckarOAGYATJw4UVs7I6hzSWzr2iZTOuXsvL0zQKN50ilrU5Kdc9kyp99OOqllx8yU/oTMyWo5jWkbSfBpF0nnFhwbgXOBncDHwNdUdU3ENrcBY1T1Zvck2a+o6pXN7Hcv8EkrY/UDdrSybTJlSk7InKyWM/4yJavldPRXVft8yLRYuytQAETkIuBBnMuMn1bV+0TkHmCxqs4RER/wF+AknJGT6fUn1SYoz95M+A+aKTkhc7JazvjLlKyW05i2aY8f8aCqc4G5DZb9NOJ5Lcm9EWF5Eo/VFpmSEzInq+WMv0zJajmNaYPMvNd75qlIdYAYZUpOyJysljP+MiWr5TSmDaxASY4ZqQ4Qo0zJCZmT1XLGX6ZktZzGtEG7PAfFGGOMMZnNRlCMMcYYk3asQDHGGGNM2rECxRhjjDFpxwqUFhCRp0WkVERWx2Ff40RkkYisEZGVIpLwuykbY4wxmcJOkm0BETkLqAT+rKqj27ivEwBV1U0icjywBBihqjYngTHGmGOejaC0gKrOp8E9e0RksIi8ISJLRGSBiAyPcV8bVXWT+3wXUArYbI7GGGMM7XQm2SSbAdzsjoScCjwKnNOSHYjIKUAOsCUB+YwxxpiMYwVKG4hIAXA68IKI1C/Oddd9BbgnSrOdqnphxD564dwX6HpVjXb3eGOMMeaYYwVK22QB5ao6ruEKVX0JeKmpxiLSCXgd+LGqfpCYiMYYY0zmsXNQ2kBVDwLbROQKAHGcGEtbEckBXsY54faFBMY0xhhjMo4VKC0gIs8Bi4BhIlIiIt8CrgG+JSIrgDXAtBh3dyVwFnCDiCx3H0eNxBhjjDHHIrvM2BhjjDFpx0ZQjDHGGJN27CTZGBUVFemAAQNa1baqqooOHTrEN1ACpFPO6kA1APne/Kjr0ylrU5KdMxx2+i0rK3q/NSZT+hMyJ6vldCxZsqRMVW2OJ9NiVqDEaMCAASxevLhVbYuLi5kyZUp8AyVApuSEzMmarJyqysbPKnlvcxl1wRDH5efwxTG9KMzzxtQ+U/oTMier5XSIyCcJ27lp16xAMWnpra1vAXDeoPNSnCS9qSrvbCjlN//ayNrdBxnZdTkAa/eN477X13HzlMHcOmUwEfP0GGNMRrACxaSlX8z/BWAFSlMOVPm566VVvLFmD/2Oy+feS0dzQvYDZGcJOd2/zR/mbeLX/9rA3kN1/OzikVakGGMyihUoxmSg9zeXccfs5eyv8nPXF4fzzTMG4vVksWyZc977mD6FPHHdBH45dx1PLthGpzwvd5x/QopTG2NM7KxAMSaD1AVD/PbfG5kxfyuDu3Xgj9efzOjehVG3FRH+56IR7Kvy88g7m7lgZI9GtzXGmHRjlxkbkyE2lx7iskcWMmP+Vq6d1I/Xbj+z2YJDRPjZl0dxXIcc/vvFlQRCdrsnY0xmsAIlhUJhJRy2ifJM08Jh5S+LtvOlh95jz8Fanvr6RH5x6RjycjwxtS/M93LvtNGs232Q2Ys/TWxYY4yJE/uIJ4Vu+NNHdOuYy++utBnuG3riy0+kOkJaWL/nID9+eTWLPznAWSd04zdXjKV7R1+j2w8bFr3fLhzVg3F9O/NY8RaunNgXr8f+NjHGpDcrUFKkoibA+5vL6JCTTTAUJtt+YRxhWNGwVEdIqaq6IA+9vYmn3ttGJ182v7p8LF+d0IesrKavxMnPj95vIsLt5wzhW88s5h/LdnLFxL6JiG2MMXFjBUqKfLB1H2GFQ3VBVpRUMKF/l1RHSiuvbngVgIuHXZziJMlVURPg2Q93MGP+Fg5UB7hqYl/u/OJwunTIial9WZnTb0VFR/fbOcO7M6JXJx4r3sLl45svdowxJpWsQEmR9zaV4fNmURcM8/7mMitQGvjtot8Cx0aBEg4rH2/fz8vLdvLK8l3UBEKcfUI3vn/+CYzr27lF+/r0U6ffohUoIsJ/njWI781azvtbyjhzqM0+boxJXwkpUEQkpKqxncGXmON/Afg94AGeUtX7G6zPBf4MTAD2AVep6vZkZnx/cxmnDepKWaWf9zaV8Z1zhybz8CaFAqEw28qq+GjbfhZuKWPRln0cqA6Qn+Phy2N7cf3pAxJ2OfAXRveky6tenv1whxUoxpi0lqgRlJSNHYuIB3gEOB8oAT4WkTmqujZis28BB1R1iIhMBx4ArkpWxp3lNWwtq+KaSf3Ze6iOpxZspaouSIdcG9ACZ/p2AAWCoTAKuItQFFXwh5Qaf+jw6/rtVfXz7ZUm16uzweF1TWdqZj1KIKhUB4JU+0PU+ENU+0N8UBJgbfFm9h6qY3d5LZv3VrK9rIqge/XW8YU+zh3Rg7NO6MZ5I7qTn5PY94DP6+GrE/rwp/e3U3qotskTbo0xJpVa/dNQRK4BPlbVjVFWN3vtrIj0UtXdrT1+E04BNqvqVvc4zwPTgMgCZRpwt/v8ReBhERHV5n4Nxcf7m8sAOGNIEWWVdTz+7haueHwReTmeBr9AnSeRv1AP/7LVz3/h0mB95C9iGm7XcNvD+1Nq6+rIWfh2g/3Upz563077GI9Tv5DoORv2/J6cfQAM+dE/G+/IN9+ItctTa/UGCnKz6d4plyHdCrhgZA+GdC9gfL8u9O+an/Qp6K8+pR9PLtjGC4tLuG3qkKQeOxaqSm0gzKG6AIdqg1TWBqmsC1IXDBEMKSv2BDm4YhehcJhgSAmGnUfIneNFj9hXxPOI/Uc/bv12etSy1tiyzc8G2dL6HSRJLDkvGNWTgUXpf2dm07605c+1vcCjIpIDlAEbVfXOyA1E5Gacj1HeBq4FXlfVx9zV9wHfdAudW4FfqurrbchTrzcQOdlDCXBqY9uoalBEKoCu7vcRmf8m4CaAHj16UFxc3KpAlZWVR7Sdv9GPR2DXusWEFCb18lBRV0mN//OhJ0EOv5D6h0Sud14f9bz+a9aRw1gNt3d2L5/vTyCYG8brDR653RHbH/k8ao4GuSHrqNwQLcuRef9e5lzVdFk/b9Q8fr+f3NycI76Xxr5XiWgcefzGMrVWdhbkeoRcz+df1V/D8V06kJtdv/NK53EQtq+G7W07ZBTlAM2+V4d1yeLPCzYykk8RkaPeo8lwyK98cjDMJwdDlFSG2V+j7K9VDtQpwebmk1u+LCkZ22zD+lQniE0zOav2bGN8DxvhNcnV6necqv5bRM5W1R+JSEfgf6Nsdg7ORycLVPUMEXk8Yl25+/UC4AzgSSAeBUq0XzMN/w6KZRtUdQYwA2DixIna2luSN7yd+b/2r6JL6WdMnToVgPPOadVu4y6dbg//XxUjAOhbGP1y2HTK2pRk56ytda7i8fmavoy4tOBTfvjiSgoHj2N8vy5JyamqLPu0nNdW7KZ4Qylby6oPrzu+0EefLvkM6+ejZ6GP4zrkUJCbTUdfNgW52XTIzcbn9ZCdJSxbuoTTTj2Z7KwsPFlCtkcOP49WbEYWr4cL1aMXucslyrLWfb8L5i/gzLPObF3jJIolZ44ny6ZCMEnX1pK4k4hMAFYB0cb/9qmqisgD7uu6yGOLyI+BHe42VW3MUq8EiPzp3AfY1cg2JSKSDRQC++N0/GaVV/vpku9N1uEyUmOFiWlac4VJvS+O7slP/rGal5fuZHy/xF5BFgyFeWX5Lh5/dwubSivJyc7itEFduerkvozpXcjI4zvROT+2y6gByjZlMaR7xwQmjo/cbEn4OUXxkCk5zbEnpneliDyKU4SsBFap6kF31R3ALcBtwL+iNP29iAxX1Vfd1y9FrPsBzsjJwpZkicHHwFARGQjsBKYDX2uwzRzgemAR8FVgXrLOPwEorw7Q2QqUJs1aPQuAq0Yn7dzldqG01Om37t2b7reOPi8XjurJqyt38ZMvj0xYng+37uN/Xl7Flr1VjOjViQcuH8NFY3rR0Wfvf2NM02ItCpYDY3F+2Y8WkUMcWbB8M1ojVV0vIltFpBi4W1XfjVgXAN6JeH1b676Fo44ZFJFv4xRMHuBpVV0jIvcAi1V1DvBH4C8ishln5GR6PI4dqwPVfvoel5/MQ2acxxY7pypZgdIyO3c6/dZcgQJw2fjezFmxi3c2lJIb5xzBUJgH3ljPkwu20adLHo9fO4ELR/VI+gnBxpjMFVOB4p6LcZiI9MEpWMYAXwKeb6L5cOA/gXdF5BXgPlXd27q4sVHVucDcBst+GvG8FrgikRmaUl4dYExv+wvSpNaZQ4ooKsjlpaUlXB3HT9QqagLc/JclLNq6j+sm9eeui4bbRwjGmBZr1VlPqlqiqnNV9QFVva6Zbf2q+gdgBM65Hx+KyD3uibXHpPIaf8xTlxuTKNmeLKaNO55560up9MfnE87yaj/XPPUBiz/Zz2+vOJF7Lx1txYkxplWaLVBE5GYReVJEpovIayJyS2sOpKq1qvobnFGXWmCpiPxXa/aVSUoOVLN+f+jw69pAiNpA2M5BMWnhspN6EwgpH+0JtnlfVXVBrv3jh2z8rJIZ103k8gl94pDQGHOsimUE5RycuUC+rapfBk5szYFEZIA7Bf2NQD/gEPDL1uwrkzy1YBsPLqk9PDnUgWo/AJ3zbATFpN6o4zsxrEdHFu5qW4ESCivfeW4Za3cd5PFrxzN1ePc4JTTGHKtiGXtt6lLhZonISpxLfXcA64F1wDyc6eg3tGRfmah/13xqQ7C/yk/XglzKqwMAdplxM1688sVUR8hIo0a1rN9EhK+M783//nM9m0sPtfry3V+9sZ6315dy76WjOWd4j1btwxhjIsUygvJ7gIhLhf/ewmNcBnRV1XGqOl1Vf66qs1V1lar6W7ivjNPPvVpnx35nUqrDIygtmPfhWFSUX0RRflGqY2ScnJwicnJa1m+XT+iDR+DZDz9tfuMo3tlQyhPzt3LNqf24blL/Vu3DGGMaarZAUdX14NwBWER+AtwlIi+IyF0iMjiG9luAHBH5iYjMbUnb9qBhgVI/gmLnoDRt5vKZzFw+M9UxMs7u3TPZvXtmi9oUFeQyoYeHvy8toTYQar5BhM8O1vKD2SsY3rNjQudTMcYce1pyFc+vgf7AnThX43QF/iQi17ag7V2taJvR6uc72bHvyAKli42gNMkKlNbZs2cme/bMbHG7KX29VNQEmLsq9vt3hsLK92ctp8Yf4uGvnYTP62nxcY0xpjEtuf7vRGCaqpaLyCmqOllEcoFi4K8JbBszETkOmAUMwLkP25WqeiDKdiGciebAmWr/knhlaMjn9dA5V6J8xGMjKCZ9DD8ui4FFHZi5cDuXndQ7pgnVHn93Cwu37ONXl4/NiKnnjTGZpaUjKPXbl4nI73Cmi2/uvqNtbdsSdwJvq+pQnDso39nIdjXuOTHjElmc1OueLxEf8fjxebPsr02TVrJE+M+zBrGypILiDc3Po7h4+35+9+ZGLjnxeK6YaJcTG2PiL+YCRVVfU9X6G+pdASwGCog+I+sRf361sG1bTAOecZ8/A1wa5/23Sre8rCPOQbGPd0w6unxCH/p0yePBtzYeviw+mvJqP999fjm9O+dx32Wjbfp6Y0xCSBLvkZdwIlKuqp0jXh9Q1aNu1SoiQZz7CwWB+1X1H43s7yacOWDo0aPHhOefb2pG/8a9sLaSuTuEJ87P57EVdZTVKPdOzmvVvhKpsrKSgoKCVMcA4HvLvwfAg+MejLo+nbI2Jfk5v+d+jd5vjanP+W5JgD+t9nPbuFxO7nn0J8ChsPL7pXWs2Rfix5N8DCxM/kig/dvHV6JzTp06dYmqTkzYAUy7lXFzUIvIW0DPKKt+1ILd9FPVXSIyCJgnIqvcq42O4N6DaAbAxIkTdcqUKa2JzMJdb6E76hg89mQ8G1fSpyCLKVMmtWpfiVRcXExrv8d4WzjZucl1vjf6TRXTKWtTkp0zFHL6zeNp2c0o63NODoX58OH3+euGGq6+8BT6dPl8P6rKj/6xmpVlO7jvstFcc2pqLim2f/v4ypSc5tjTqnvxpJKqnqeqo6M8XgE+E5FeAO7X0kb2scv9uhXnRN2TEpm5W54zBL5jXzUHqv106WAnyDYn35vfaHFiGufx5Le4OInk9WTx6DXjCYWV2/62lD0VtYAzjf0PXljBsx/u4OazB6esODHGHDsybgSlGXNwTr693/36SsMNRKQLUK2qdSJSBEwGfpXIUN3znTpwx/5qKmoCFNo098169ONHAbj15FtTnCSz7Nzp9Fvv3q3vtwFFHfjtlSdy1fcPFQAACEBJREFU+7PLmPqbYiYO6ML6PYfYV1nHd88dynfPHRqvuMYY06iMG0Fpxv3A+SKyCTjffY2ITBSRp9xtRgCLRWQF8A7OOShrExmqUw7keT1s3VvpniRrIyjNmb1mNrPXzE51jIxTWjqb0tK299uFo3ry1h1nc/7IHuyv8nPKwON49j8m8f3zTyAry06KNcYkXrsaQVHVfcC5UZYvxrlJIaq6EOeOykkjIkwe0pVnP9pBMKx2FY/JCP265vPQ1Qn99NMYYxrV3kZQ0tYDl4+le0cfAIU2gmKMMcY0yQqUJOlakMuMr09gaPcCRh9fmOo4xhhjTFprVx/xpLtRxxfy5h1npzqGMcYYk/ba1URtiSQie4FPWtm8H7AjjnESJVNyQuZktZzxlylZLaejv6p2S+D+TTtlBUoSiMjeTPgPmik5IXOyWs74y5SsltOYtrFzUJKjPNUBYpQpOSFzslrO+MuUrJbTmDawAiU5KlIdIEaZkhMyJ6vljL9MyWo5jWkDK1CSY0aqA8QoU3JC5mS1nPGXKVktpzFtYOegGGOMMSbt2AiKMcYYY9KOFShtJCJfEJENIrJZRO6Msj5XRGa56z8UkQER6+5yl28QkQtTnPMOEVkrIitF5G0R6R+xLiQiy93HnBTnvEFE9kbkuTFi3fUissl9XJ/InDFm/b+InBtFpDxiXVL6VESeFpFSEVndyHoRkYfc72GliIyPWJe0/owh5zVuvpUislBEToxYt11EVrl9uTiROWPMOkVEKiL+fX8asa7J90ySc/53RMbV7nvyOHddUvvUmKhU1R6tfAAeYAswCMgBVgAjG2xzK/C4+3w6MMt9PtLdPhcY6O7Hk8KcU4F89/kt9Tnd15Vp1J83AA9HaXscsNX92sV93iWVWRtsfzvwdAr69CxgPLC6kfUXAf8EBJgEfJii/mwu5+n1xwe+WJ/Tfb0dKEpGf8aYdQrwWlvfM4nO2WDbi4F5qepTe9gj2sNGUNrmFGCzqm5VVT/wPDCtwTbTgGfc5y8C54qIuMufV9U6Vd0GbHb3l5KcqvqOqla7Lz8A+iQoS1Ni6c/GXAi8qar7VfUA8CbwhQTlhJZnvRp4LoF5olLV+cD+JjaZBvxZHR8AnUWkF0nuz+ZyqupCNwek7v1Zn6W5Pm1MW97fLdbCnCl5fxrTFCtQ2qY38GnE6xJ3WdRtVDWIc0lf1xjbJjNnpG/h/FVdzycii0XkAxG5NBEBXbHmvNwd6n9RRPq2sG28xHw89+OygcC8iMXJ6tPmNPZ9JLs/W6Lh+1OBf4vIEhG5KUWZGjpNRFaIyD9FZJS7LC37VETycYrPv0csTsc+NccYuxdP20iUZQ0vi2psm1jaxkvMxxKRa4GJQORNg/qp6i4RGQTME5FVqrolRTlfBZ5T1ToRuRlndOqcGNvGU0uONx14UVVDEcuS1afNSYf3Z8xEZCpOgXJGxOLJbl92B94UkfXu6EGqLMWZ3r1SRC4C/gEMJU37FOfjnfdVNXK0Jd361ByDbASlbUqAvhGv+wC7GttGRLKBQpxh11jaJjMnInIe8CPgElWtq1+uqrvcr1uBYuCkVOVU1X0R2Z4EJsTaNs5acrzpNBg+T2KfNqex7yPZ/dksERkLPAVMU9V99csj+rIUeJnEfVQaE1U9qKqV7vO5gFdEikjDPnU19f5Miz41xyYrUNrmY2CoiAwUkRyc/+gNr8iYA9RfAfFVnBPR1F0+XZyrfAbi/IX1UapyishJwBM4xUlpxPIuIpLrPi8CJgNrU5izV8TLS4B17vN/ARe4ebsAF7jLEiWWf3tEZBjOSaaLIpYls0+bMwf4uns1zySgQlV3k/z+bJKI9ANeAq5T1Y0RyzuISMf65zg5o161kiwi0tM9zwwROQXn5+w+YnzPJJOIFOKMlr4SsSzt+tQcm+wjnjZQ1aCIfBvnB7cH5yqNNSJyD7BYVecAfwT+IiKbcUZOprtt14jIbJxfTEHgtgYfASQ756+BAuAF92frDlW9BBgBPCEiYZwftPerakJ+mcaY8zsicglOn+3HuaoHVd0vIvfi/BIAuKfBkHUqsoJz8uHzblFaL2l9KiLP4VxVUiQiJcDPAK/7PTwOzMW5kmczUA18w12X1P6MIedPcc7detR9fwZVdSLQA3jZXZYNPKuqbyQqZ4xZvwrcIiJBoAaY7v77R33PpDAnwGXAv1W1KqJp0vvUmGhsJlljjDHGpB37iMcYY4wxaccKFGOMMcakHStQjDHGGJN2rEAxxhhjTNqxAsUYY4wxaccKFGOMMcakHStQjDHGGJN2rEAxJs2IyBARWdVgWa6IbBORkRHLBohIjYgsj6HdKBFZLiJ+d/ZaY4xJa1agGJN+tgJ9RSTy/+dNwLtRZpzdoqrjYmi3xt0uHe79YowxzbKp7o1JM6oaFpEdwABgq4jkAT/AmbY87u2MMSYd2QiKMelpHTDcfX4bMEdVtyewnTHGpBUbQTEmPa0DhonIfJxCY1KC2xljTFqxERRj0lP9SMh3gb+p6mci0ldEnhSR34jIebG2S1JeY4yJKxtBMSY9rQPuBM4DxrvLhgN+4CFV3SEiA2JsZ4wxGcdGUIxJTxuAMcAMVa0AUNU3gT8AD4tI71jbGWNMJrIRFGPSkKrW0eD/p4g8AHiAHUApcFSREq2dMcZkIlHVVGcwxrSCiPQFFgL7IuZCaWzbPGAR0A0Yo6r7kxDRGGNazQoUY4wxxqQdOwfFGGOMMWnHChRjjDHGpB0rUIwxxhiTdqxAMcYYY0zasQLFGGOMMWnHChRjjDHGpB0rUIwxxhiTdqxAMcYYY0za+X+ptvhcEvCtkwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"fig, [axId, axDId, axDDId, axDDDId]=plt.subplots(ncols=1, nrows=4, sharex=True)\n",
"NDiodeConctedData.plot(ax=axId, x='Vsgnd[V]', y='Id[A]', legend=False)\n",
"axId.axvline(x=NVCompReal, linestyle='--', color='y', \n",
" label=f'VComp={NVCompReal:.3f}[V]')\n",
"axId.axvline(x=NVbiasTarget, linestyle='--', color='g',\n",
" label=f'VBiasTar={NVbiasTarget:.3f}[V]')\n",
"\n",
"axId.set_ylabel('$I_d[A]$')\n",
"axId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axId.grid()\n",
"\n",
"box = axId.get_position()\n",
"axId.set_position([box.x0, box.y0, box.width * 0.8, box.height])\n",
"axId.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
"\n",
"###############\n",
"\n",
"NDiodeConctedData.plot(ax=axDId, x='Vsgnd[V]', y='DIdDVs[OhmInv]', legend=False)\n",
"axDId.axvline(x=NVCompReal, linestyle='--', color='y')\n",
"axDId.axvline(x=NVbiasTarget, linestyle='--', color='g')\n",
"\n",
"axDId.set_ylabel(r'$g_m[\\Omega^{-1}]$')\n",
"axDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDId.grid()\n",
"\n",
"#######################################\n",
"NDiodeConctedData.plot(ax=axDDId, x='Vsgnd[V]', y='DDIdDDVs', legend=False)\n",
"axDDId.axvline(x=NVCompReal, linestyle='--', color='y')\n",
"axDDId.axvline(x=NVbiasTarget, linestyle='--', color='g')\n",
"\n",
"\n",
"axDDId.set_ylabel('$\\dfrac{\\partial^2 I_d}{\\partial V_{S}^2}$')\n",
"axDDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDDId.grid()\n",
"\n",
"\n",
"#############################################\n",
"\n",
"NDiodeConctedData.plot(ax=axDDDId, x='Vsgnd[V]', y='DDDIdDDDVs', legend=False)\n",
"axDDDId.axvline(x=NVCompReal, linestyle='--', color='y')\n",
"axDDDId.axvline(x=NVbiasTarget, linestyle='--', color='g')\n",
"\n",
"\n",
"axDDDId.set_ylabel('$\\dfrac{\\partial^3 I_d}{\\partial V_{S}^3}$')\n",
"axDDDId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"axDDDId.set_xlabel('$V_s[V]$')\n",
"axDDDId.grid()\n",
"\n",
"fig.subplots_adjust(hspace=.5)\n",
"plt.suptitle(f'TSMC180nm NMOS $I_d$ Diode Connnected W={NMOSR_W}[nm], L={NMOSR_L}[nm]');\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(Finish later)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SPICE Confirmation of Topology Interpretation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Test Circuit for extracting NMOS characteristics curves "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
".title DCBench\n",
".include /home/iridium/Documents/ClonedGitReps/PySpiceExsamples/SpiceLib/TSMC180N.lib\n",
"Vgs gate 0 1.8V\n",
"Vbs base 0 0V\n",
"Vds drain 0 1.8V\n",
"M0 drain gate 0 base TSMC180nmN l=200nm w=200nm\n",
"\n"
]
}
],
"source": [
"TestCir=Circuit('DCBench')\n",
"Vgs=TestCir.V('gs', 'gate', TestCir.gnd, 1.8@u_V)\n",
"Vbs=TestCir.V('bs', 'base', TestCir.gnd, 0@u_V)\n",
"Vds=TestCir.V('ds', 'drain', TestCir.gnd, 1.8@u_V)\n",
"\n",
"TestCir.include(spice_library['TSMC180nmN'])\n",
"\n",
"M0=TestCir.MOSFET('0', 'drain', 'gate', TestCir.gnd, 'base',\n",
" model='TSMC180nmN', length=200@u_nm, width=200@u_nm)\n",
"print(TestCir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create simulation object"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"TempC=27\n",
"TestCirSim=TestCir.simulator(temperature=TempC, nominal_temperature=TempC)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(50, 50, 2500)"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x=np.linspace(0, 1.8)\n",
"y=np.linspace(0, 1.8)\n",
"X, Y=np.meshgrid(x, y)\n",
"len(x),len(y), np.prod([*X.shape])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"perform a DC operating point analyses at every combination of $V_{GS}$ and $V_{DS}$ specified and bind the results to a 2D array for use in plotting a 3D surface of $I_D$"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"Z=np.zeros(X.shape)\n",
"M0.length=200@u_nm\n",
"for i in IProd(x, y):\n",
" Vgs.dc_value=i[0]@u_V; Vds.dc_value=i[1]@u_V\n",
" TestCirSimData=TestCirSim.operating_point() \n",
"\n",
" \n",
" Z[np.where(x==i[0])[0], np.where(y==i[1])[0]]=np.array(-TestCirSimData.Vds)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"DIdDVgs, DIdDVds=np.gradient(Z, x, y)\n",
"Av0=DIdDVgs/DIdDVds\n",
"DIdDVgsDiag=DIdDVgs.diagonal()\n",
"DIdDVdsDiag=DIdDVds.diagonal()\n",
"Av0Diag=Av0.diagonal()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"Xdiag=X.diagonal(); ZDiag=1000*Z.diagonal()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" fig.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '');\n",
" var titletext = $(\n",
" '');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('');\n",
"\n",
" var fmt_picker = $('');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('');\n",
" var button = $('');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" event.shiftKey = false;\n",
" // Send a \"J\" for go to next cell\n",
" event.which = 74;\n",
" event.keyCode = 74;\n",
" manager.command_mode();\n",
" manager.handle_keydown(event);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib notebook\n",
"%matplotlib notebook\n",
"from mpl_toolkits.mplot3d import axes3d\n",
"\n",
"fig = plt.figure()\n",
"###############\n",
"axId = fig.add_subplot(3, 1, 1, projection='3d')\n",
"axId.set_xlabel('$V_{gs}[V]$'); ax.set_ylabel('$V_{ds}[V]$'); \n",
"axId.set_zlabel('$I_d[mA]$')\n",
"\n",
"\n",
"axId.plot_surface(X, Y, Z*1000, cmap=cm.coolwarm,\n",
" linewidth=0, antialiased=True)\n",
"axId.ticklabel_format(axis='z', style='sci', scilimits=(-1,1))\n",
"\n",
"axId.plot(Xdiag, Xdiag, ZDiag, label='Diode Line')\n",
"axId.legend()\n",
"\n",
"##################\n",
"\n",
"axDIdDVgs = fig.add_subplot(3, 2, 3, projection='3d')\n",
"\n",
"axDIdDVgs.set_xlabel('$V_{gs}[V]$'); axDIdDVgs.set_ylabel('$V_{ds}[V]$'); \n",
"axDIdDVgs.set_zlabel('$\\dfrac{\\partial I_d}{\\partial V_{gs}}$')\n",
"\n",
"\n",
"axDIdDVgs.plot_surface(X, Y, DIdDVgs, cmap=cm.coolwarm,\n",
" linewidth=0, antialiased=True)\n",
"axDIdDVgs.ticklabel_format(axis='z', style='sci', scilimits=(-1,1))\n",
"\n",
"axDIdDVgs.plot(Xdiag, Xdiag, DIdDVgsDiag)\n",
"\n",
"##############################\n",
"\n",
"axDIdDVds = fig.add_subplot(3, 2, 4, projection='3d')\n",
"axDIdDVds.set_xlabel('$V_{gs}[V]$'); axDIdDVds.set_ylabel('$V_{ds}[V]$'); \n",
"axDIdDVds.set_zlabel('$\\dfrac{\\partial I_d}{\\partial V_{ds}}$')\n",
"\n",
"\n",
"axDIdDVds.plot_surface(X, Y, DIdDVds, cmap=cm.coolwarm,\n",
" linewidth=0, antialiased=True)\n",
"axDIdDVds.plot(Xdiag, Xdiag, DIdDVdsDiag)\n",
"axDIdDVds.ticklabel_format(axis='z', style='sci', scilimits=(-1,1))\n",
"\n",
"############################\n",
"\n",
"axAv0 = fig.add_subplot(3, 2, 5, projection='3d')\n",
"axAv0.set_xlabel('$V_{gs}[V]$'); axAv0.set_ylabel('$V_{ds}[V]$'); \n",
"axAv0.set_zlabel('$A_{V0}$')\n",
"\n",
"\n",
"axAv0.plot_surface(X, Y, Av0, cmap=cm.coolwarm,\n",
" linewidth=0, antialiased=True)\n",
"axAv0.plot(Xdiag, Xdiag, Av0Diag)\n",
"axAv0.ticklabel_format(axis='z', style='sci', scilimits=(-1,1))\n",
"\n",
"\n",
"plt.suptitle(f'TSMC180nm NMOS $I_d$ Surface W={NMOSR_W}[nm], L={NMOSR_L}[nm]')\n",
"fig.subplots_adjust(hspace=.5, wspace=0.5);\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(Need to Get a hold of the subplot numbering arghh)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"fig, [axId, axDIdDVgs, axDIdDVds, axAv0]=plt.subplots(nrows=4, ncols=1, sharex=True)\n",
"\n",
"axId.plot(Xdiag, ZDiag)\n",
"axId.set_ylabel('$I_d[mA]$')\n",
"axId.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"\n",
"\n",
"#########################\n",
"\n",
"axDIdDVgs.plot(Xdiag, DIdDVgsDiag)\n",
"axDIdDVgs.set_ylabel('$\\dfrac{\\partial I_d}{\\partial V_{gs}}$')\n",
"axDIdDVgs.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"\n",
"\n",
"\n",
"########################\n",
"\n",
"axDIdDVds.plot(Xdiag, DIdDVdsDiag)\n",
"axDIdDVds.set_ylabel('$\\dfrac{\\partial I_d}{\\partial V_{ds}}$')\n",
"axDIdDVds.ticklabel_format(axis='y', style='sci', scilimits=(-1,1))\n",
"\n",
"\n",
"#######################\n",
"\n",
"axAv0.plot(Xdiag, Av0Diag)\n",
"axAv0.set_ylabel('$A_{V0}$')\n",
"axAv0.set_xlabel('$V_{ds}[V]$')\n",
"\n",
"fig.subplots_adjust(hspace=.5)\n",
"plt.suptitle(f'TSMC180nm NMOS $I_d$ Diode Connnected Counters W={NMOSR_W}[nm], L={NMOSR_L}[nm]');\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the above graph there is a $A_{vo}$ where\n",
"$$A_{vo}=g_m r_{DS}=\\dfrac{\\partial I_d}{\\partial V_{gs}}/\\dfrac{\\partial I_d}{\\partial V_{ds}}$$\n",
"this is not a true intrensit gain. It is however a meassure of the influsince between $\\dfrac{\\partial I_d}{\\partial V_{gs}}$ and $\\dfrac{\\partial I_d}{\\partial V_{ds}}$ that shows that the transcondutance domonated the output resistince for a Diode connected NMOS "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Testing the frequency dependence of the Bias point"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
".title DCBench\n",
".include /home/iridium/Documents/ClonedGitReps/PySpiceExsamples/SpiceLib/TSMC180N.lib\n",
"Vbs base 0 0V\n",
"Vds drain 0 1.8V\n",
"Vsgnd source 0 DC 0.46V AC SIN(0V 0.1V 1kHz 0s 0Hz)\n",
"M0 drain drain source base TSMC180nmN l=200nm w=200nm\n",
"\n"
]
}
],
"source": [
"TestCirSinN=Circuit('DCBench')\n",
"Vbs=TestCirSinN.V('bs', 'base', TestCirSinN.gnd, 0@u_V)\n",
"#VDD\n",
"Vds=TestCirSinN.V('ds', 'drain', TestCirSinN.gnd, 1.8@u_V)\n",
"#Vload\n",
"Vsgnd=TestCirSinN.SinusoidalVoltageSource('sgnd', 'source', TestCirSinN.gnd, \n",
" dc_offset=NVbiasTarget@u_V, \n",
" amplitude=.1@u_V, frequency=1@u_kHz)\n",
"\n",
"TestCirSinN.include(spice_library['TSMC180nmN'])\n",
"M0=TestCirSinN.MOSFET('0', 'drain', 'drain', 'source', 'base',\n",
" model='TSMC180nmN', length=200@u_nm, width=200@u_nm)\n",
"print(TestCirSinN)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"TempC=27\n",
"TestCirSinNSim=TestCirSinN.simulator(temperature=TempC, nominal_temperature=TempC)\n",
"TestCirSinNData=TestCirSinNSim.ac(start_frequency=1@u_Hz, stop_frequency=100@u_MHz, number_of_points=100, variation='dec')"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"from PySpice.Plot.BodeDiagram import bode_diagram"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Id_Freq=pd.Series(-TestCirSinNData.Vds)\n",
"figure = plt.figure(1, (20, 10))\n",
"axes = (plt.subplot(211), plt.subplot(212))\n",
"bode_diagram(axes=axes,\n",
" frequency=TestCirSinNData.frequency,\n",
" gain=20*np.log10(np.absolute(Id_Freq)),\n",
" phase=np.angle(Id_Freq, deg=True),\n",
" marker='.',\n",
" linestyle='-',\n",
" )\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Diode Connected PMOS"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Square Law Theory"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simplifed"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\begin{cases} 0 & \\text{for}\\: V_{SD} < \\left|{V_{thp}}\\right| \\\\\\frac{V_{SD} W k_{p'}}{2 L} \\left(V_{SD} - 2 \\left|{V_{thp}}\\right|\\right) & \\text{for}\\: V_{SD} < V_{SD} - \\left|{V_{thp}}\\right| \\\\\\frac{W k_{p'}}{2 L} \\left(V_{SD} - \\left|{V_{thp}}\\right|\\right)^{2} & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
"⎧ 0 for V_SD < │Vₜₕₚ│ \n",
"⎪ \n",
"⎪V_SD⋅W⋅k_p'⋅(V_SD - 2⋅│Vₜₕₚ│) \n",
"⎪───────────────────────────── for V_SD < V_SD - │Vₜₕₚ│\n",
"⎪ 2⋅L \n",
"⎨ \n",
"⎪ 2 \n",
"⎪ W⋅k_p'⋅(V_SD - │Vₜₕₚ│) \n",
"⎪ ─────────────────────── otherwise \n",
"⎪ 2⋅L \n",
"⎩ "
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"PIdSimpDiodConected=simplify(PMOS.IdSimp(subs={VSG:VSD}))\n",
"PIdSimpDiodConected"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\begin{cases} 0 & \\text{for}\\: \\left|{V_{thp}}\\right| > - V_{D} + V_{S} \\\\\\frac{W k_{p'}}{2 L} \\left(- V_{D} + V_{S}\\right) \\left(- V_{D} + V_{S} - 2 \\left|{V_{thp}}\\right|\\right) & \\text{for}\\: - V_{D} + V_{S} < - V_{D} + V_{S} - \\left|{V_{thp}}\\right| \\\\\\frac{W k_{p'}}{2 L} \\left(- V_{D} + V_{S} - \\left|{V_{thp}}\\right|\\right)^{2} & \\text{otherwise} \\end{cases}$$"
],
"text/plain": [
"⎧ 0 for │Vₜₕₚ│ > -V_D + V_S \n",
"⎪ \n",
"⎪W⋅k_p'⋅(-V_D + V_S)⋅(-V_D + V_S - 2⋅│Vₜₕₚ│) \n",
"⎪─────────────────────────────────────────── for -V_D + V_S < -V_D + V_S - │V\n",
"⎪ 2⋅L \n",
"⎨ \n",
"⎪ 2 \n",
"⎪ W⋅k_p'⋅(-V_D + V_S - │Vₜₕₚ│) \n",
"⎪ ───────────────────────────── otherwise \n",
"⎪ 2⋅L \n",
"⎩ \n",
"\n",
" \n",
" \n",
" \n",
"ₜₕₚ│\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" "
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"PIdSimpDiodConected=PIdSimpDiodConected.subs(VSD, VS-VD)\n",
"PIdSimpDiodConected"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"subsP={W:8e6,L:2e6, nTechConst:2e-6, Vnth:1.1, VnA:1/.02, VD:5}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# I will finish this later"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"author": "Diode Connected MOSFET Tobology",
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": true,
"toc_position": {
"height": "calc(100% - 180px)",
"left": "10px",
"top": "150px",
"width": "190px"
},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}