Common Source Example¶

Python Setup¶

In [21]:
from pygmid import Lookup as lk
import numpy as np

nmos = lk('../mat/nfet_01v8_lvt.mat')

Input Parameters¶

In [22]:
# Circuit Parameters
vdd = 1.8
ugf = 50e6
cload = 1e-12

# Device Parameters
## gm/ID
gm_id_M1 = 20

## Length
l_M1 = 0.5

Calculations¶

In [ ]:
# 'Optimize' Loop
cself = 0
for k in range(10):
    # Transconductance (gm [S])
    gm_M1 = 2 * np.pi * (cload + cself) * ugf

    # Current (ID [A])
    id_M1 = gm_M1 / gm_id_M1

    # Drain Capacitance (CDD [F])
    cdd_M1 = gm_M1 / nmos.lookup('GM_CDD', GM_ID=gm_id_M1, VDS=vdd/2, VSB=0, L=l_M1)
    cself = cdd_M1

# Overdrive Voltages (Vdsat [V])
vdsat_M1 = 2 / gm_id_M1

# Gate-Source Voltage (Vgs [V])
vgs_M1 = nmos.lookupVGS(GM_ID=gm_id_M1, VDS=vdd/2, VSB=0, L=l_M1)

# Current Density (JD [µA/m])
jd_M1 = nmos.lookup('id_W', GM_ID=gm_id_M1, VDS=vdd/2, VSB=0, L=l_M1)

# Width (W [µm])
w_M1 = id_M1 / jd_M1

# Intrinsic Gains (gm/gds [V/V])
av_M1 = nmos.lookup('GM_GDS', GM_ID=gm_id_M1, VDS=vdd/2, VSB=0, L=l_M1)

# Output Conductances (gds [S])
gds_M1 = gm_M1 / av_M1

# Threshold Voltages (Vth [V])
vth_M1 = nmos.lookup('VT', VGS=vgs_M1, VDS=vdd/2, VSB=0, L=l_M1)

# Load Resistance
res = vdd/2 / id_M1

# Circuit Gain (A0 [V/V, dB])
a0_Mag = gm_M1 / (gds_M1 + 1 / res)
a0_dB = 20 * np.log10(a0_Mag)

# Circuit Consumption (IDD [A])
idd = id_M1

# Circuit Unity-Gain Frequency (UGF [Hz])
ugf = gm_M1 / (2 * np.pi * (cload + cself))

Output¶

In [24]:
print('M1 PARAMETERS:')
print(f'W      = {w_M1:1.3f} um')
print(f'L      = {l_M1:1.3f} um')
print(f'gm/ID  = {gm_id_M1:1.3f} S/A')
print(f'JD     = {jd_M1/1e-6:1.3f} uA/um')
print(f'gm/gds = {av_M1:1.3f} V/V')
print(f'gm     = {gm_M1/1e-6:1.3f} uS')
print(f'ID     = {id_M1/1e-6:1.3f} uA')
print(f'gds    = {gds_M1/1e-6:1.3f} uS')
print(f'Vdsat  = {vdsat_M1/1e-3:1.3f} mV')
print(f'Vth    = {vth_M1/1e-3:1.3f} mV')
print('\nCIRCUIT PARAMETERS:')
print(f'R      = {res/1e3:1.3f} kΩ')
print(f'Vbias  = {vgs_M1/1e-3:1.3f} mV')
print(f'A0_Mag = {a0_Mag:1.3f} V/V')
print(f'A0_dB  = {a0_dB:1.3f} dB')
print(f'UGF    ~ {ugf/1e6:1.3f} MHz')
print(f'IDD    = {idd/1e-6:1.3f} uA')
M1 PARAMETERS:
W      = 17.533 um
L      = 0.500 um
gm/ID  = 20.000 S/A
JD     = 0.906 uA/um
gm/gds = 89.262 V/V
gm     = 317.657 uS
ID     = 15.883 uA
gds    = 3.559 uS
Vdsat  = 100.000 mV
Vth    = 517.800 mV

CIRCUIT PARAMETERS:
R      = 56.665 kΩ
Vbias  = 530.642 mV
A0_Mag = 14.979 V/V
A0_dB  = 23.510 dB
UGF    ~ 50.000 MHz
IDD    = 15.883 uA