IHP-AnalogAcademy/modules/module_0_foundations/scripting/.ipynb_checkpoints/gmid_commonsource-checkpoin...

280 lines
178 KiB
Plaintext
Raw Normal View History

2024-10-29 10:55:48 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "45bd015b-1a62-4b46-baa9-9261eb24546a",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"from pygmid import Lookup as lk\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from time import time\n",
"import matplotlib as mpl\n",
"path = '/home/pedersen/misc/gmid/configs_lv'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "1eae8452-b1d5-4611-bb86-4f2f222b2929",
"metadata": {},
"outputs": [],
"source": [
"pmos_lv = lk(os.path.join(path, '130p1vrvt.pkl'))\n",
"nmos_lv = lk(os.path.join(path, '130n1vrvt.pkl'))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "cdfafca1-e7c0-4491-8a38-5785f38c8d60",
"metadata": {},
"outputs": [],
"source": [
"# setup mpl\n",
"mpl.rcParams['axes.spines.right'] = False\n",
"mpl.rcParams['axes.spines.top'] = False\n",
"mpl.rcParams.update({\"axes.grid\" : True})"
]
},
{
"cell_type": "markdown",
"id": "1cd1cfe6-8260-4b9f-8166-f953758c0563",
"metadata": {},
"source": [
"# Settings design parameters designing for weak inversion (i.e high effeciency)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "7dd17dfa-abd2-4c76-9fd4-1f7824fdaa58",
"metadata": {},
"outputs": [],
"source": [
"# Specifications --------\n",
"Avo = 5 # DC gain\n",
"freq_pole = 1e6 #first pole\n",
"Cl = 1e-12 # load capacitance\n",
"Vdd = 1.2 # supply\n",
"# -----------------------\n",
"Ro = 1/(2*np.pi*freq_pole*Cl) \n",
"gm = Avo/Ro\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "eb2f00b0-b3a7-4b15-9a04-d858f6a2b97b",
"metadata": {},
"outputs": [],
"source": [
"gmid = 10 #moderate inversion\n",
"i_tail = gm/gmid"
]
},
{
"cell_type": "markdown",
"id": "c5edba7b-f8ec-4405-a7b3-908489a7c47f",
"metadata": {},
"source": [
"# Choosing the channel length by quick overview"
]
},
{
"cell_type": "markdown",
"id": "5a570be2-c30c-456e-ad10-f18870d1d27e",
"metadata": {},
"source": [
"Here the focus is on getting a high intrinsic gain"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "7fd6ceee-3d40-460f-82d6-6d672d0d337d",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAHKCAYAAAAQDgHKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3RUxdvA8e/dkt2UTe+9ECChSkCaCEpHEQVRAQVEVBQFRCxgeVFUFFERUfipIKAiKggWeguIAtJr6GmEhBTS27b7/rGwuKSQQEJCnM85e46ZmXvv3EliHqZKsizLCIIgCIIgNACKuq6AIAiCIAhCTRGBjSAIgiAIDYYIbARBEARBaDBEYCMIgiAIQoMhAhtBEARBEBoMEdgIgiAIgtBgiMBGEARBEIQGQwQ2giAIgiA0GCKwEQRBEAShwRCBjSAIgiAIDYYIbARBEARBaDBEYCMI18lkMuHt7c0nn3xS11Vp0K5u59WrVyNJEosXL66xZxQUFPDkk08SEBCASqUiPDy8xu79b6NGjUKtVqPX6yss069fPxwcHEhKSqqVOtSEgoICJkyYgL+/P1qtltatW7N06dJq3WP79u3069cPNzc37O3tiYyMZNq0aQA88MAD2Nvbk5OTU+H1w4YNQ61Wc+HChRt5FaEBEoGNIFynbdu2kZGRwcCBA+u6Kg3a1e28b98+AGJiYmrsGRMnTmT58uV89NFH/Pnnn/zxxx81du9/a9myJUajkRMnTpSbv27dOtasWcOrr75KcHBwrdShJgwcOJBFixbxf//3f6xZs4Z27doxZMgQlixZUqXrlyxZQteuXXFxcWHx4sWsXr2aV155hctnMj/xxBOUlJRUeL/c3FxWrFjBvffei4+PT429l9BAyIIgXJdnn31Wbtu2bV1Xo8G7up0feOAB2cHBQTYajTVy/9LSUtnJyUl+6aWXauR+sizLJSUl5aZv2rRJBuQlS5aUyTMYDHJ0dLQcGhoqFxcX11hdatqqVavKfYeePXvK/v7+1/y+nDt3TnZ0dJSfeeaZCssYjUbZ399fjomJKTd/7ty5MiD//vvv1X8BocETPTZCgybLMnPmzCE6OhqtVkvz5s1ZvXo1Q4cOpVmzZjd03xUrVjBo0KCb8rxrWblyJZIksWnTpjJ5c+fORZIkDh06BEBGRgZPPfUUQUFBaDQavLy86Ny5Mxs3bryuZ9fmO5fXznv37qVVq1YolcobujfA448/jkajoaCggA8//BBJkujQoYM1/8cff+SOO+7A2dkZHx8fhgwZQkpKis09evXqRZcuXVi1ahUdO3bE3t6esWPHlvu8li1bAnDkyJEyefPmzePYsWN89NFHaLXaG3632rJixQqcnJwYPHiwTfrjjz/O+fPn2bVrV6XXf/311xQWFvLKK69UWEapVDJixAj27t3L4cOHy+R/8803+Pn50bdv3+t7CaFhq9OwShBq2dNPPy2r1Wr5lVdekdetWyd//vnnspeXlxwQECCPGDHiuu+7fft2GZBPnjx5U553LQaDQfb29paHDRtWJu/222+X27RpY/26d+/espeXl/zll1/KsbGx8sqVK+U333xTXrp06XU9uzbf+ep2zszMlAH5ueeeu6H7XhYXFydPnjxZBuTffvtN3rFjh/VZzz33nGxnZye/+uqr8qZNm+QlS5bI4eHhcnR0tE2Piqenp+zv7y83btxYXrBggbxlyxb5wIEDFT7T19dXvu+++2zSLl68KHt4eMjdu3evkfeqiNlslg0GQ5U+FenQoYPcrl27MulHjhyRAfl///tfpXW4++67ZXd3d3nt2rVyq1atZKVSKXt5eclPP/20nJubay136tQpWZIkecKECTbXHz16VAbkV199tZpvL/xXiMBGaLB+/vlnGZAXLVpkkz516lQZkD/77LPrvveECRPkFi1aXNfz4uPjZUB2dHSUnZyc5IiICPmZZ56R09LSbK773//+Jzdv3lzW6XSyl5eXPGDAgErrNHHiRNne3l7Oycmxph07dqzMuzo5OZX5Y3G9arONZblsO69fv14G5G+++caaVtX2rMjzzz8vu7m52aQtWLBABuQVK1bYpF8ehlm1apUsy7KckJAgA3KjRo3kvLy8Kj2vV69eckREhE3auHHjZJVKJR85csQmvaZ/VrZs2SIDVfrEx8eXe4/IyEi5d+/eZdLPnz8vA/J7771X6fs3adJE1mq1sk6nk9977z15y5Yt8owZM2R7e3u5c+fOstlstpbt2rWr7OnpKev1emvaiy++WO4/KgThMhHYCA1W69at5c6dO5dJX7JkiQzIO3fuvO57BwcHy1OnTr2u561cuVKOioqy5iclJcnDhg2TGzdubJ2b8dlnn8mtW7eWjx07JsuyLKekpNj8MS9Pef9ifumll2SNRiNnZWVZ0+6++27Z1dVVnjZtmrxjxw6bPxrVVZttLMtl23n69OkyIB88eNCaVpX2rEynTp3kHj162KQ1btxY7tq1a5myJ0+elAF57ty5sizL8vLly2VAXrZsWZXf6cUXX5QVCoVcWFgoy7IsHz9+XFar1fL48ePLlK3pn5W8vDx59+7dVfqUlpaWe4/IyEi5T58+ZdIvBzbTp0+v9P0jIyPLLTdr1iwZkDds2GBNW7x4sU37GgwG2cfHR+7SpUulzxD+20RgIzRIqampMiDPmjWrTN4HH3wgq1Qq63DCrFmz5AcffFAeMmSIrNPp5Ntvv11OTU21/ku+WbNmckJCgvX6Xbt2yYB8+PDh63reW2+9JT/88MM2ZUpKSmSdTif/8ccfsizLckxMjPzVV19V+73btWsnd+jQQZZlywRMPz8/+aGHHrIpk5GRIY8fP14OCQmRAdnJyUl+7LHH5NTU1Go9qzrvLMs1086DBw+WtVqtzVBJVdqzIkajUXZwcJBfeeUVa1piYqIMyB9//HGZ8hs3brSZtPraa6/JGo1GLioqqvQ5/7Zo0SIZkHfv3i3Lsiz369dP9vLykrOzs8uUremflfowFNWhQwcZkPft22eTfuLECRmQP/jgA2taUVGR7OLiIt9zzz2yLMvyr7/+KgPywoULq/S+wn+TmDwsNEjnzp0DwM/Pr0ze+vXradGihXWC5qFDh/jnn3948cUXSU9Px2Aw0L17d+677z7S09MJCwtj4cKF1uuXL19O48aNad68+XU97+DBg9ZJpJdpNBpCQ0OtE1O1Wi3z5s1j5cqVFBQUVPm9H3/8cXbu3ElcXBxr164lNTWVxx9/3KaMp6cns2bNIiEhgcTERKZPn84vv/zCyJEjq/wcqN47Q8208759+2jVqhUqlcqaVpX2rEhcXBxFRUU2S8fT09MrfK+1a9ei1Wrp0qULYJnI3LJlS+zt7St9zr/9ewLxunXrWL16Ne+99x6urq5lytb0z8rWrVtRq9VV+iQkJJR7jxYtWhAXF4fRaLRJvzzJ99/fr8re/2rypaXeCsWVP0v29vYMGTLE+rO8YMECdDpdmYnLgvBvIrARGiRvb28Ajh07ZpO+Zs0aNm3aRNu2ba1phw4d4q233iImJgatVktERASDBw+mR48eqFQqmjZtislkspZfvnx5mdVQ1XnewYMHadWqVZk65+bm4unpCcD333/PbbfdxtNPP42XlxejR4+mtLT0mu89ZMgQtFotCxcuZOHChQQEBNCrV68KywcHB/Pcc8/Rs2dP6/4wVVWdd4Ybb+fc3FzOnj1LmzZtbO5blfasyJ49ewDbPXFCQ0MByuw1c+LECebMmcOTTz6Ji4sLYAm0rn7Pa4mKikKlUnHgwAEmTpxITEwMo0aNKrdsTf+sxMTEsHv37ip9/P39y73HAw88QEFBAcuXL7dJX7RoEf7+/rRv377S97/8PV2zZo1N+urVqwFsVqWBZU8bk8nEhx9+yOrVq3nkkUdwcHCo9BnCf1xddxkJQm0wm83y7bffLut0OnnOnDnyli1b5Hfeecc6/HK5695kMskODg42wzDR0dHyjh07rF/fc8898vfffy/Lsizv379fBuQ9e/Zc1/Py8/NlSZLkpKQkm+uTkpJkhUJRZjjIbDbLGzdulB0cHMp
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"chosen_vds = 1.2/2 # i Choose half vdd to bias the output propally and get maximum output swing\n",
"\n",
"# Now we plot the intrinsic gain to see if it's possible for our NMOS\n",
"gm_ids = np.arange(3, 15+0.1, 0.1)\n",
"Ls = [1.0,2.0,3.0,4.0,5.0,6.0, 7.0,8.0,9.0 ,10.0]\n",
"\n",
"# Include the VDS parameter in the look_up function\n",
"gm_gds = nmos_lv.look_up('GM_GDS', GM_ID=gm_ids, L=Ls, VDS=chosen_vds, VSB = 0)\n",
"\n",
"plt.figure()\n",
"plt.plot(gm_ids, gm_gds.T)\n",
"plt.ylabel(r\"$g_m/g_{DS}$\")\n",
"plt.xlabel(r\"$g_m/I_D$\")\n",
"plt.title(r'$g_m/g_{DS}$ vs. $g_m/I_D$ $for$ $V_{DS}=$' + str(chosen_vds) + 'V')\n",
"plt.legend(np.around(Ls, decimals=2))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "a81b5888-69d5-47e5-a7c7-6da12f2eb21c",
"metadata": {},
"source": [
"# Selecting a specific L and gmid"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "e76d6456-7d35-4d99-852c-a6cf0b3da14a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"chosen_vds = 1.2 / 2\n",
"selected_L = 7.9 # fix my length\n",
"gm_ids = np.arange(8, 11 + 0.1, 0.1)\n",
"gm_gds = nmos_lv.look_up('GM_GDS', GM_ID=gm_ids, L=selected_L, VDS=chosen_vds, VSB=0)\n",
"\n",
"plt.figure()\n",
"plt.plot(gm_ids, gm_gds.T)\n",
"plt.ylabel(r\"$g_m/g_{DS}$\")\n",
"plt.xlabel(r\"$g_m/I_D$\")\n",
"plt.title(r'$g_m/g_{DS}$ vs. $g_m/I_D$ for $V_{DS}=$' + str(chosen_vds) + 'V')\n",
"plt.legend([f'L = {selected_L}']) # Set legend with selected_L\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4246eb19-8a56-486d-86b1-ef46f96516a3",
"metadata": {},
"outputs": [],
"source": [
"# We select the length of 7.19 to get gmro of approximatly 10\n",
"gmro = nmos_lv.look_up('GM_GDS', GM_ID=10, L=selected_L, VDS=chosen_vds, VSB = 0)\n",
"\n",
"#now the intrinsic impedance is given as\n",
"ro = gmro/gm\n",
"\n",
"# and from here we can decide the load resistance\n",
"R_L = 1/((1/Ro)-(1/ro))\n"
]
},
{
"cell_type": "markdown",
"id": "d87e56bc-ee5f-4108-8a87-2532493f557e",
"metadata": {},
"source": [
"# Finding MOS dimensions from gmid and channel length"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "f7ac9758-9c93-4fcd-928f-26debb417025",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAHKCAYAAAAgghDrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABfZklEQVR4nO3deVxU5f4H8M+ZhRlm2EFAEBAURXDft9yXtNLyZoulouWtq5VLi3rb9P5SM3OpTLuWS7dyyXIrszL3HQRxF1RABEVA2ddh5vz+QCaRbViGM8Dn/XrNS+fMM2e+55lh+HDO85wjiKIogoiIiMiCyaQugIiIiKgyDCxERERk8RhYiIiIyOIxsBAREZHFY2AhIiIii8fAQkRERBaPgYWIiIgsHgMLERERWTwGFiIiIrJ4DCxERERk8RhYiIiIyOIxsBBV4LfffoMgCPjf//5X5efq9Xq4urpi+fLl+O677yAIAo4fP16ijcFggL+/f5mP6fV6+Pj4oE+fPjXahvrowb4DavY+lGXLli0ICgqCtbU1BEFAREREray3PLt27YIgCNi4caNZX+dBwcHBEASh3NvJkycrXUdISAiGDx8OW1tb2NjYYODAgTh27FgdVE9UGgMLUQXCw8MBAF26dKnycw8fPozk5GSMGTMGDg4OAID09PQSbXbt2oVr166V+dhPP/2EuLg4vPnmm9WovH57sO+Amr0PD0tOTsb48ePRokUL/P777zhx4gRatWpV4/VWpLj+Tp06mfV1HvT+++/jxIkTpW4uLi7w9PREt27dKnx+aGgo+vXrh9zcXHz33Xf47rvvkJeXh8GDB+PEiRN1tBVEf1NIXQCRJQsPD4dGo0FAQECVn/vTTz+ha9eu8PHxQVxcHIDSoWTp0qUYMGAADh06VOqx5cuXo0WLFnjyySerXX999WDfATV7Hx4WFRUFnU6HF198Ef3796/x+gAgJycHGo2m3MfDw8Oh1WrRunXrWnk9U7Ro0QItWrQosezQoUNISUnBe++9B7lcXuHz33//fTg4OOD33383btuQIUPg5+eHt956i3taqM5xDwtRBcLCwtChQ4dKv9wfJooitm/fjn/84x8AYNzDkpGRYWwTEhKCo0eP4p133oFWqy0RWI4fP45Tp05h5syZkMnK/jHdsWMHBEHAvn37Sj22evVqCIKAc+fOASjaq/DPf/4TXl5eUKlUaNKkCfr06YO//vqrStv14PatXLkSgYGBUKvVaNu2LX777TeMGzcOQUFB1Vrng+t+sO+A6r8PDwsODkbfvn0BAM8++ywEQcCAAQOMjx89ehSDBw+Gra0tNBoNevfujd27d5dYx7x58yAIAsLDw/H000/D0dGxVDB4WHh4ODp06FDue1lX1q5dC0EQMHny5ErbHjt2DAMGDCgRxGxtbdGvXz8cP34ct2/fNmepRKVwDwtROe7evYu4uDiMGjWqys8t/kJ/OLA8GEqWLl2Ktm3bYsSIEbC3ty/x2LJly+Dk5ITg4OByX+Pxxx+Hq6sr1q9fj8GDB5d4bMOGDejcuTPat28PABg/fjzCw8OxYMECtGrVCmlpaQgPD8fdu3ervG0A8K9//Qvr1q3DrFmzMGjQIFy7dg3BwcGwsrLCkCFDqrXOYg/3XU3eh4e9//776N69O6ZNm4aFCxdi4MCBsLOzA1C092Ho0KFo37491q5dC5VKhVWrVuGJJ57Apk2b8Oyzz5ZY15gxY/Dcc8/h1VdfRXZ2drmvmZycjISEBDz11FMm1ymKIvR6vUltFQrTvsbT09Px008/YfDgwfD19a20fUFBAVQqVanlxcvOnz+Ppk2bmvTaRLVCJKIy/fnnnyIAcf369aIoimJMTIwIQNRqtaKNjY3YokUL8V//+peYmJhY6rkzZswQ27VrZ7yfkZEhAhDfe+89URRFMTY2VpTL5cZ1t2nTRvz3v/9tfB25XG68X5FZs2aJ1tbWYlpamnHZpUuXRADiF198YVxmY2Mjzpgxo8p9UJatW7eKAMRvv/22xPJ58+aVet3qeLjvHn4fRLFq78XDDhw4IAIQt27dWmJ5z549RVdXVzEzM9O4rLCwUGzbtq3YrFkz0WAwiKIoih9++KEIQPzggw9M2p49e/aIAMS1a9ea1P7BGk25xcTEmLTO1atXiwDETZs2mdS+Y8eOYqtWrUS9Xm9cptPpRD8/PxGAuHHjRpO3h6g2NLhDQocPH8YTTzwBDw8PCIKAHTt2mP01ExIS8OKLL8LZ2RkajQYdO3ZEWFiY2V+XzKv4PezcuTMA4OzZs2jTpg2ysrKQmZmJAwcOICMjA/369UN+fn6J527btq3EIQ1bW1soFArjXpQVK1bAzc0N48aNAwDY2dkZH/vss88gl8vx+uuvV1rj5MmTkZubiy1bthiXrV+/HiqVyrhuAOjevTs2bNiAjz76CCdPnoROp6tOlwAAFixYgD59+mDChAkllhcPXK1sMGdlHu67h98HoGrvhSmys7Nx6tQpPP3007CxsTEul8vlGD9+POLj4xEZGVniOQ/WWJHiAbcP1l+ZLl26IDQ01KSbh4eHSetcu3YtnJ2dTd7T8/rrryMqKgqvvfYaEhIScPPmTbz66qu4ceMGAEh+eIsanwb3icvOzkaHDh2wcuXKOnm91NRU9OnTB0qlEnv27MGlS5ewdOlS4yEAqr/Cw8OhVqsRGBgIoOiXZPEhFgDw8vLC2rVrcfv27RJjQUJCQhAXF1fqF5qdnR0yMjKQnp6OtWvX4o033oCVlRUAGA8JZWRkYO3atXjhhRfg7u5eaY1BQUHo1q0b1q9fD6BoOvD333+P0aNHw8nJydhuy5YtmDhxIr755hv06tULTk5OmDBhAhITE6vUJ4mJiYiIiMDYsWNLPXbz5k0oFAp06NDBuOyzzz7D2LFjMW7cONjZ2aFHjx5ITEzEG2+8AScnJ7Rt29b4C7C8vnv4fQBMfy9MlZqaClEUyzzEURwIHj58ZurhkPDwcKhUqiqN7bGxsUHHjh1NuhV/hipy7tw5nD59Gi+++GKZh3nKMnnyZHz88cf47rvv0KxZM3h7e+PSpUt46623AACenp4mbw9RbWhwgWXEiBH46KOPjNMhH1ZQUIB33nkHnp6e0Gq16NGjBw4ePFjt11u8eDG8vLywfv16dO/eHc2bN8fgwYMrHYRHlq94oGTxGIGHf0kCRcfzmzdvjoSEBOOyn3/+Ga1atULbtm1LtHVwcEB6ejq+/vpriKKIV155xfhY8R6Wr7/+GpmZmZg1a5bJdU6aNAknT57E5cuX8fvvv+P27duYNGlSiTYuLi5YsWIFYmNjcePGDSxatAjbtm2rcIxMWeLj4wGU/cv6zz//RLt27aBWq43Lzp07h5CQELz55ptISkqCTqfD4MGDMWrUKCQlJcHX1xcbNmwwti+r7x5+HwDT3wtTOTo6QiaTlTmQ9NatWwCK+vBBgiCYtO7w8HC0bdsWSqXS5HoOHToEpVJp0i02NrbS9a1duxYA8PLLL5tcAwDMnj0bKSkpOH/+PGJjY3H8+HGkpqZCq9XWyhRzoqpodINuJ02ahNjYWGzevBkeHh7Yvn07Hn30UZw/fx7+/v5VXt+uXbswfPhwjB07FocOHYKnpyemTp2KKVOmmKF6qivp6emIjo7GsGHDjMvOnj1b5uyK9PT0Er/Mfv75ZzzzzDOl2jk4OODu3bv4/PPPMWXKlBJ74ezt7XHlyhV88cUXePTRR0uFnYo8//zzmDVrFjZs2IDo6Gh4enqWqPth3t7eeO2117Bv374qT011dXUFAFy6dKnE8j179mDfvn2lPvfnzp3D/Pnzjb/cWrRogaCgIOPA3ICAgBKDSx/uu7LeB8D098JUxX+8bNu2DZ9++imsra0BFJ3Y7/vvv0ezZs2qda6WtLQ0xMTEVHkgcvEhIVNUdkgoPz8f33//Pbp3716lz1UxlUplfF5cXBy2bNmCKVOmGPuIqM5IPYjGnACI27dvN96/du2aKAiCmJCQUKLd4MGDxblz51brNVQqlahSqcS5c+eK4eHh4ldffSWq1epSAxKpftm/f78IQPzmm29EURT
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"selected_gm_id = gmid\n",
"id_w_value = nmos_lv.look_up('ID_W', GM_ID=selected_gm_id, L=selected_L, VDS=chosen_vds)\n",
"plt.figure()\n",
"gm_ids = np.arange(3, 15+0.1, 0.1)\n",
"id_w = nmos_lv.look_up('ID_W', GM_ID=gm_ids, L=selected_L, VDS=chosen_vds)\n",
"plt.plot(gm_ids, id_w, label=f'L = {selected_L}')\n",
"\n",
"plt.axhline(y=id_w_value, color='green', linestyle='--', label=f\"$I_D/W={id_w_value:.2e}$\")\n",
"plt.plot(selected_gm_id, id_w_value, 'ro') \n",
"plt.text(selected_gm_id + 0.2, id_w_value, f\"$I_D/W={id_w_value:.2e}$\", color='green')\n",
"plt.ylabel(r\"$I_D/W$\")\n",
"plt.xlabel(r\"$g_m/I_D$\")\n",
"plt.title(rf'$I_D/W$ vs. $g_m/I_D$ for $L = {selected_L}$')\n",
"plt.legend([f'L = {selected_L}']) \n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "274ce41c-eb65-47e9-bb2c-d362a97030b8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the width is given as Id/(Id/W): 4.43934µm\n",
"the length is given as: 7.9µm\n",
"the tail current is given as: 3.1416µA\n",
"the load impedance is given as: 309848.81871487683 Ohms\n"
]
}
],
"source": [
"width = i_tail/id_w_value\n",
"width = str(round(width, 5))\n",
"print('the width is given as Id/(Id/W): ' + str(width) + 'µm')\n",
"print('the length is given as: ' + str(selected_L) + 'µm')\n",
"print('the tail current is given as: ' + str(round((i_tail*1e6),4)) + 'µA')\n",
"print('the load impedance is given as: ' + str(R_L) + ' Ohms')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}