# Define the required constants and input parameters
import numpy as np
# Given constants and parameters
mu_n = 100e-4 # Electron mobility (cm^2/Vs) (Example value)
C_ox = 1e-8 # Oxide capacitance per unit area (F/cm^2) (Example value)
W = 10e-6 # Width of the MOSFET (m)
L = 2e-6 # Length of the MOSFET (m)
V_TN = 0.7 # Threshold voltage (V) (Example value)
V_A = 50 # Early voltage (V) (Example value)
R = 1e3 # Load resistance (Ohms) (Example value)
V_DD = 5 # Supply voltage (V) (Example value)
# Input the value of V_in (Input voltage)
V_in = 1.5 # Input voltage (V) (Example value)
# Calculate the drain current (I_DS)
I_DS = (mu_n * C_ox / 2) * (W / L) * (V_in - V_TN)**2 * (1 + V_DD / V_A)
# Calculate the output voltage (V_out)
V_out = V_DD - R * I_DS
# Print the results
print(f"Drain Current (I_DS): {I_DS:.4e} A")
print(f"Output Voltage (V_out): {V_out:.2f} V")
# Define the required constants and parameters
import numpy as np
# Given constants and parameters
mu_n = 100e-4 # Electron mobility (cm^2/Vs) (Example value)
C_ox = 1e-8 # Oxide capacitance per unit area (F/cm^2) (Example value)
W = 10e-6 # Width of the MOSFET (m)
L = 2e-6 # Length of the MOSFET (m)
R = 1e3 # Load resistance (Ohms) (Example value)
V_A = 50 # Early voltage (V) (Example value)
I_DS = 1e-3 # Drain current (A) (Example value)
V_out = 2.5 # Output voltage (V) (Example value)
# Calculate the voltage gain A_v
numerator = R * np.sqrt(2 * mu_n * C_ox * (W / L) * I_DS * (1 + V_out / V_A))
denominator = 1 + (R * I_DS) / V_A
A_v = -numerator / denominator
# Print the result
print(f"Voltage Gain (A_v): {A_v:.2f}")
# Define the required constants and parameters
import numpy as np
# Given constants and parameters (from the image)
mu_Cox = 224.1e-6 # Mobility * Oxide capacitance (A/V^2)
W_L_ratio = 10 # Width/Length ratio
V_eff = 0.2 # Effective voltage (V)
V_TN = 0.394 # Threshold voltage (V)
V_A = 29.3 # Early voltage (V)
V_GS = 0.9 # Gate-source voltage (V)
V_DS = 0.9 # Drain-source voltage (V)
RL_measured = 18.6e3 # Measured load resistance (Ohms)
# Calculate transconductance (g_m)
g_m = mu_Cox * W_L_ratio * (V_GS - V_TN)
# Calculate drain current (I_DS)
I_DS = (mu_Cox / 2) * W_L_ratio * (V_GS - V_TN)**2 * (1 + V_DS / V_A)
# Calculate drain conductance (g_d)
g_d = (mu_Cox / 2) * W_L_ratio * (V_GS - V_TN)**2 / V_A
# Calculate drain resistance (r_d)
r_d = V_A / I_DS
# Calculate load resistance (R_L)
R_L = 0.9 / g_m
# Print the results
print(f"Transconductance (g_m): {g_m:.4e} S")
print(f"Drain Current (I_DS): {I_DS:.4e} A")
print(f"Drain Conductance (g_d): {g_d:.4e} S")
print(f"Drain Resistance (r_d): {r_d:.2f} Ohms")
print(f"Calculated Load Resistance (R_L): {R_L:.2f} Ohms")
print(f"Measured Load Resistance (R_L_measured): {RL_measured:.2f} Ohms")
# 変数の定義
gm1 = 94.25e-6 # 単位:A/V
gm6 = 942.5e-6 # 単位:A/V
gds2 = 1/20 # 単位:S
gds4 = 1/20 # 単位:S
gds6 = 1/30 # 単位:S
gds7 = 1/30 # 単位:S
I5 = 25e-6 # 単位:A
I6 = 242e-6 # 単位:A
# ゲインの計算
numerator = 2 * gm1 * gm6
denominator = (gds2 + gds4) * I5 * (gds6 + gds7) * I6
Av = numerator / denominator
# ゲインをdBで表す
Av_dB = 20 * (Av)
# 結果の表示
print(f"ゲイン Av: {Av:.2f}")
print(f"ゲイン (dB): {Av_dB:.2f} dB")
# 変数定義(仮の値を使用)
gm1 = 94.25e-6 # A/V
gm6 = 942.5e-6 # A/V
gds2 = 1/20 # S
gds4 = 1/20 # S
gds6 = 1/30 # S
gds7 = 1/30 # S
I5 = 25e-6 # A
I6 = 242e-6 # A
V_A2 = 20 # V
V_A4 = 20 # V
V_A6 = 30 # V
V_A7 = 30 # V
Cc = 2e-12 # F
CL = 4e-12 # F
VDD = 5 # V
VT1 = 0.7 # V
VT3 = 0.7 # V
Vt5 = 0.7 # V
B5 = 0.5
# ゲイン Av1 の計算
Av1 = (-2 * gm1 / (1/V_A2 + 1/V_A4)) * I5
print(f"Av1: {Av1:.2e} (単位なし)")
# ゲイン Av2 の計算
Av2 = (-gm6 / (1/V_A6 + 1/V_A7)) * I6
print(f"Av2: {Av2:.2e} (単位なし)")
# Positive CMR の計算
Vin_max = VDD - Vt5 / B5 - abs(VT3) + VT1
print(f"Positive CMR Vin(max): {Vin_max:.2f} V")
# Negative CMR の計算
Vin_min = VGS = Vt5 / B5 + abs(VT1) + VDD # 仮定としてVGS = VDDとする
print(f"Negative CMR Vin(min): {Vin_min:.2f} V")
# スルーレート (SR) の計算
SR = I5 / Cc
print(f"スルーレート SR: {SR:.2e} V/s")
# ゲイン帯域幅 (GB) の計算
GB = gm1 / Cc
print(f"ゲイン帯域幅 GB: {GB:.2e} Hz")
# 極 (p1, p2) の計算
p1 = -gds2 / Cc
p2 = gm6 / CL
print(f"極 p1: {p1:.2e} Hz")
print(f"極 p2: {p2:.2e} Hz")
# RHP zero の計算
z1 = gm6 / Cc
print(f"RHP zero z1: {z1:.2e} Hz")
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 変数の定義(仮の値を使用)
gm1 = 1e-3 # トランスコンダクタンス (A/V)
gm2 = 1e-3 # トランスコンダクタンス (A/V)
R1 = 10e3 # 抵抗値 (Ω)
R2 = 10e3 # 抵抗値 (Ω)
Cc = 2e-12 # キャパシタンス (F)
C1 = 1e-12 # キャパシタンス (F)
C2 = 3e-12 # キャパシタンス (F)
# 周波数応答の極とゼロ点の計算
p1 = gm2 / (R1 * R2 * Cc) # 極 p1 の計算
p2 = -gm2 / (C1 * C2 + C2 * Cc + Cc * C1) # 極 p2 の計算
z1 = gm2 / Cc # ゼロ点 z1 の計算
# 伝達関数の分子と分母の係数を設定
numerator = [1, z1] # 分子:ゼロ点 z1
denominator = [1, p1 + p2, p1 * p2] # 分母:2つの極 p1 と p2
# 伝達関数の作成
system = signal.TransferFunction(numerator, denominator)
# 周波数応答の計算
w, mag, phase = signal.bode(system)
# ボード線図のプロット
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 6))
# ゲイン(Magnitude)のプロット
ax1.semilogx(w, mag) # 周波数を対数軸にプロット
ax1.set_title('Bode Plot of the Amplifier')
ax1.set_ylabel('Magnitude (dB)')
ax1.grid(which='both', linestyle='--', linewidth=0.5)
# 位相(Phase)のプロット
ax2.semilogx(w, phase) # 周波数を対数軸にプロット
ax2.set_xlabel('Frequency (rad/s)')
ax2.set_ylabel('Phase (degrees)')
ax2.grid(which='both', linestyle='--', linewidth=0.5)
# グラフを表示
plt.tight_layout()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
# パラメータ設定
mu_p = 150e-3 # キャリア移動度 (m^2/Vs)
C_ox = 2.5e-3 # 酸化膜容量密度 (F/m^2)
W_L = 10 # トランジスタの幅/長さ比
I_TAIL = 20e-6 # 差動アンプの共通電流 (20 μA)
V_T = 26e-3 # 熱電圧 (26 mV)
n = 1.5 # サブスレッショルドスロープ係数
# 入力電圧範囲の設定 (差動入力電圧)
V_ID = np.linspace(-200e-3, 200e-3, 500)
# 強反転領域における出力電流 I_O の計算
I_O_strong = (mu_p * C_ox * W_L / 2) * (4 * I_TAIL / (mu_p * C_ox * W_L) - V_ID**2)
# 強反転領域における gm の計算
g_m_strong = (mu_p * C_ox * W_L / 2) * (4 * I_TAIL / (mu_p * C_ox * W_L) - 2 * V_ID)
# 弱反転領域における出力電流 I_O の計算
I_O_weak = I_TAIL / (1 + np.exp(-V_ID / (n * V_T))) - I_TAIL / (1 + np.exp(V_ID / (n * V_T)))
# 弱反転領域における gm の計算
g_m_weak = (I_TAIL / (n * V_T)) * (np.exp(-V_ID / (n * V_T)) + np.exp(V_ID / (n * V_T))) / \
(1 + np.exp(-V_ID / (n * V_T)))**2
# プロット設定
fig, ax1 = plt.subplots(figsize=(10, 6))
# I_O のプロット
ax1.plot(V_ID * 1e3, I_O_strong * 1e6, label='Strong Inversion (I_O)', color='b')
ax1.plot(V_ID * 1e3, I_O_weak * 1e6, label='Weak Inversion (I_O)', color='b', linestyle='--')
ax1.set_xlabel('Differential Input Voltage V_ID (mV)')
ax1.set_ylabel('Output Current I_O (μA)')
ax1.tick_params(axis='y')
ax1.legend(loc='upper left')
ax1.grid(True)
# gm のプロット
ax2 = ax1.twinx()
ax2.plot(V_ID * 1e3, g_m_strong * 1e6, label='Strong Inversion (g_m)', color='r')
ax2.plot(V_ID * 1e3, g_m_weak * 1e6, label='Weak Inversion (g_m)', color='r', linestyle='--')
ax2.set_ylabel('Transconductance g_m (μS)')
ax2.tick_params(axis='y')
ax2.legend(loc='upper right')
plt.title('CMOS Differential Amplifier Characteristics: I_O and g_m')
plt.show()