VLSI homework 1, and IoT reading assignment 1 done
This commit is contained in:
BIN
7th-Semester-Fall-2024/VLSI/homework/homework-1/Figure_1.png
Normal file
BIN
7th-Semester-Fall-2024/VLSI/homework/homework-1/Figure_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
@@ -0,0 +1,88 @@
|
||||
# VLSI Homework 1 - Aidan Sharpe
|
||||
|
||||
## Problem 1
|
||||
```python
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
e_0 = 8.85E-14
|
||||
k_ox = 3.9
|
||||
e_ox = e_0 * k_ox
|
||||
|
||||
mu = 350 # 350 cm^2 / (V*s)
|
||||
t_ox = 100E-8 # 100A
|
||||
|
||||
C_ox = e_ox / t_ox
|
||||
W = 1.2
|
||||
L = 0.6
|
||||
|
||||
beta = mu * C_ox * W/L
|
||||
|
||||
V_g_range = np.arange(6)
|
||||
V_t = 0.7
|
||||
V_dd = np.linspace(0, 5, 50)
|
||||
|
||||
def I_ds(V_gs, V_ds, V_t, beta):
|
||||
if V_gs < V_t:
|
||||
return np.zeros_like(V_ds)
|
||||
|
||||
V_dsat = V_gs - V_t
|
||||
|
||||
return np.where(V_ds < V_dsat,
|
||||
beta * (V_gs - V_t - V_ds/2) * V_ds,
|
||||
beta * (V_gs - V_t)**2 / 2)
|
||||
|
||||
for V_s in (0, 2):
|
||||
for V_g in V_g_range:
|
||||
V_gs = V_g - V_s
|
||||
V_ds = V_dd - V_s
|
||||
plt.plot(V_ds,
|
||||
1000*I_ds(V_gs, V_ds, V_t, beta),
|
||||
label="$V_{gs}$ = "+str(V_gs))
|
||||
|
||||
plt.xlabel("$V_{ds}$[V]")
|
||||
plt.ylabel("$I_{ds}$[mA]")
|
||||
plt.legend()
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
## Problem 2
|
||||
Show that a MOSFET with channel length $2L$, when operating in the linear region, has the same current $I_{DS1}$ as two MOSFETs in series each with channel length $L$. Assume the same gate voltage $V_{DD}$ for all MOSFETs in the design and the same supply voltage $V_{DS}$ for both designs.
|
||||
|
||||
### Known
|
||||
The current through a MOSFET in the linear region is:
|
||||
$$I_{DS} = \beta\left(V_{GS} - V_t - \frac{V_{DS}}{2}\right)V_{DS}$$
|
||||
The parameter $\beta$ is defined as:
|
||||
$$\beta = \mu C_\text{ox} \frac{W}{L}$$
|
||||
|
||||
### Defining Variables
|
||||
The factor $\beta_1$ for the singular MOSFET is $\mu C_\text{ox} \frac{W}{2L}$, and the factor $\beta_2$ for each of the MOSFETs in series is $\mu C_\text{ox} \frac{W}{L}$. Therefore, $\beta_2 = 2\beta_1$.
|
||||
|
||||
The current $I_{DS1}$ through the singular MOSFET is:
|
||||
$$I_{DS1} = \beta_1\left(V_{DD} - V_t - \frac{V_{DS}}{2}\right)V_{DS}$$
|
||||
The current $I_{DS2}$ through both MOSFETs in series is both:
|
||||
$$I_{DS2} = \beta_2\left(V_{DD} - V_1 - V_t - \frac{V_{DS} - V_1}{2}\right)(V_{DS} - V_1)$$
|
||||
$$I_{DS2} = \beta_2\left(V_{DD} - V_t - \frac{V_1}{2}\right)V_1$$
|
||||
|
||||
### Expanding $I_{DS2}$
|
||||
The first equation for $I_{DS2}$ can be rewritten as the difference of two terms:
|
||||
$$I_{DS2} = \beta_2\left(V_{DD} - V_t - \frac{V_{DS}}{2} - \frac{V_1}{2}\right)(V_{DS} - V_1)$$
|
||||
$$I_{DS2} = \beta_2\left(V_{DD} - V_t - \frac{V_{DS}}{2} - \frac{V_1}{2}\right)V_{DS} - \beta_2\left( V_{DD} - V_t - \frac{V_{DS}}{2} - \frac{V_1}{2}\right)V_1$$
|
||||
|
||||
The term $-\frac{V_1 V_{DS}}{2}$ can be pulled out of the first term, and its complement can be pulled out of the second term. Therefore, $I_{DS2}$ can be simplified to the difference of two terms each in the form of the current through a MOSFET in the linear region.
|
||||
$$I_{DS2} = \beta_2\left(V_{DD} - V_t - \frac{V_{DS}}{2}\right)V_{DS} - \beta_2\left( V_{DD} - V_t - \frac{V_1}{2}\right)V_1$$
|
||||
|
||||
### Reducing $I_{DS2}$
|
||||
Notice that the second term is the inverse of the second equation for $I_{DS2}$ under "Defining Variables". Setting them equal:
|
||||
$$I_{DS2} = \beta_2\left(V_{DD} - V_t - \frac{V_{DS}}{2}\right)V_{DS} - \beta_2\left( V_{DD} - V_t - \frac{V_1}{2}\right)V_1 = \beta_2\left(V_{DD} - V_t - \frac{V_1}{2}\right)V_1$$
|
||||
|
||||
Therefore:
|
||||
$$\beta_2\left(V_{DD} -V_t - \frac{V_{DS}}{2}\right)V_{DS} = 2\beta_2\left(V_{DD} - V_t - \frac{V_1}{2}\right)V_1$$
|
||||
|
||||
Substituting $\beta_2$ on the left for $2\beta_1$ gives:
|
||||
$$2\beta_1\left(V_{DD} - V_t - \frac{V_{DS}}{2}\right)V_{DS} = 2\beta_2\left(V_{DD} - V_t - \frac{V_1}{2}\right)V_1$$
|
||||
|
||||
Therefore:
|
||||
$$2I_{DS1} = 2I_{DS2}$$
|
||||
$$\boxed{I_{DS1} = I_{DS2}}$$
|
||||
BIN
7th-Semester-Fall-2024/VLSI/homework/homework-1/homework-1.pdf
Normal file
BIN
7th-Semester-Fall-2024/VLSI/homework/homework-1/homework-1.pdf
Normal file
Binary file not shown.
42
7th-Semester-Fall-2024/VLSI/homework/homework-1/problem_1.py
Normal file
42
7th-Semester-Fall-2024/VLSI/homework/homework-1/problem_1.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
e_0 = 8.85E-14
|
||||
k_ox = 3.9
|
||||
e_ox = e_0 * k_ox
|
||||
|
||||
mu = 350 # 350 cm^2 / (V*s)
|
||||
t_ox = 100E-8 # 100A
|
||||
|
||||
C_ox = e_ox / t_ox
|
||||
W = 1.2
|
||||
L = 0.6
|
||||
|
||||
beta = mu * C_ox * W/L
|
||||
|
||||
V_g_range = np.arange(6)
|
||||
V_t = 0.7
|
||||
V_dd = np.linspace(0, 5, 50)
|
||||
|
||||
def I_ds(V_gs, V_ds, V_t, beta):
|
||||
if V_gs < V_t:
|
||||
return np.zeros_like(V_ds)
|
||||
|
||||
V_dsat = V_gs - V_t
|
||||
|
||||
return np.where(V_ds < V_dsat,
|
||||
beta * (V_gs - V_t - V_ds/2) * V_ds,
|
||||
beta * (V_gs - V_t)**2 / 2)
|
||||
|
||||
for V_s in (0, 2):
|
||||
for V_g in V_g_range:
|
||||
V_gs = V_g - V_s
|
||||
V_ds = V_dd - V_s
|
||||
plt.plot(V_ds,
|
||||
1000*I_ds(V_gs, V_ds, V_t, beta),
|
||||
label="$V_{gs}$ = "+str(V_gs))
|
||||
|
||||
plt.xlabel("$V_{ds}$[V]")
|
||||
plt.ylabel("$I_{ds}$[mA]")
|
||||
plt.legend()
|
||||
plt.show()
|
||||
29
7th-Semester-Fall-2024/VLSI/homework/homework-1/problem_2.py
Normal file
29
7th-Semester-Fall-2024/VLSI/homework/homework-1/problem_2.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
e_0 = 8.85E-14
|
||||
k_ox = 3.9
|
||||
e_ox = e_0 * k_ox
|
||||
|
||||
mu = 350 # 350 cm^2 / (V*s)
|
||||
t_ox = 100E-8 # 100A
|
||||
|
||||
C_ox = e_ox / t_ox
|
||||
W = 1.2
|
||||
L = 0.6
|
||||
|
||||
beta = mu * C_ox * W/L
|
||||
|
||||
V_t = 0.7
|
||||
|
||||
def I_ds(V_gs, V_ds, V_t, beta):
|
||||
if V_gs < V_t:
|
||||
return np.zeros_like(V_ds)
|
||||
|
||||
V_dsat = V_gs - V_t
|
||||
|
||||
return np.where(V_ds < V_dsat, beta * (V_gs - V_t - V_ds/2) * V_ds, beta * (V_gs - V_t)**2 / 2)
|
||||
|
||||
V_g = 0.8
|
||||
V_d1 = 1
|
||||
V_s1 =
|
||||
Reference in New Issue
Block a user