【1】抵抗負荷ソース接地増幅回路
A_v = -g_m * (R_D // r_o)
→ 電圧利得はトランスコンダクタンスと負荷抵抗の積。
g_m : トランスコンダクタンス [A/V]
R_D, r_o : 抵抗 [Ω]
A_v : 無次元
出力抵抗
R_out = R_D // r_o [Ω]
【2】電流源負荷(PMOS負荷)
A_v = -g_m * (r_o1 // r_o2)
または
A_v = -g_m * r_o1 / (1 + g_d1 * r_o1)
g_d1 = 1 / r_o1
g_m : [A/V], r_o : [Ω]
A_v : 無次元
出力抵抗
R_out = r_o1 // r_o2 [Ω]
【3】ダイオード接続負荷
A_v = g_m1 / (g_m2 + g_d2 + g_d1)
g_m, g_d : [A/V]
A_v : 無次元
負荷トランジスタのインピーダンスが小さいため利得は数倍程度。
【4】カスコード接続
A_v ≒ -g_m1 * (g_m2 * r_o2 * r_o1)
≒ -0.5 * (g_m * r_o)^2
g_m : [A/V], r_o : [Ω]
A_v : 無次元
出力抵抗
r_out ≒ (g_m2 * r_o2 * r_o1) // (r_o3 // r_o4) [Ω]
【5】レギュレーテッド・カスコード
A_v ≒ (g_m * r_o)^3 / 4
g_m : [A/V], r_o : [Ω]
A_v : 無次元
高利得だがヘッドルーム電圧が増加。
【6】差動増幅回路(Differential Pair)
差動入力電圧
v_id = v_i1 - v_i2 [V]
片側出力利得
A_v(single) = g_m * (r_o2 // r_o4) [無次元]
両端出力利得
A_v(diff) = 2 * g_m * (r_o2 // r_o4) [無次元]
同相入力利得
A_v(cm) ≒ - (g_m * r_o) / (2 * (1 + 2 * g_m * r_ot)) [無次元]
r_ot : テール電流源の出力抵抗 [Ω]
CMRR(同相除去比)
CMRR = |A_v(diff) / A_v(cm)| [無次元]
【7】帯域と極周波数
ω_p ≒ 1 / (R_out * C_L) [rad/s]
C_L : 負荷容量 [F]
GBW ≒ g_m / (2π * C_L) [Hz]
【8】ノイズ式
トランジスタ熱雑音
i_n^2 = 4 * k * T * γ * g_m * Δf [A^2]
抵抗熱雑音
v_n^2 = 4 * k * T * R * Δf [V^2]
入力換算雑音電圧
v_n,in^2 ≒ 4 * k * T * (γ / g_m + R_eq / A_v^2) * Δf [V^2]
【9】入力共通モード範囲
V_ICM(max) ≒ V_DD - V_ovP - V_DSsatP [V]
V_ICM(min) ≒ V_ovN + V_DSsatTail [V]
V_ov : 過剰電圧 [V]
V_DSsat : 飽和電圧 [V]
【10】設計パラメータの目安
g_m / I_D : 10〜25 [V^-1]
V_ov : 0.1〜0.25 [V]
C_L : 数 pF 程度
r_o : 数十 kΩ 〜 数百 kΩ
A_v : 10〜1000 程度(カスコードで数千)
# ===============================================================
# MOSFET Amplifier Gain Calculator
# Common-Source, Cascode, Differential Pair
# ===============================================================
import math
# ==== Parameters ====
g_m = 1e-3 # transconductance [A/V]
r_o1 = 50e3 # output resistance of M1 [Ω]
r_o2 = 80e3 # output resistance of M2 [Ω]
r_o3 = 100e3 # output resistance of M3 [Ω]
R_D = 30e3 # drain resistor [Ω]
C_L = 1e-12 # load capacitance [F]
gamma = 2/3 # thermal noise factor
k = 1.38e-23 # Boltzmann constant [J/K]
T = 300 # temperature [K]
delta_f = 1e6 # noise bandwidth [Hz]
# ==== 1. Resistor-loaded CS ====
A_v_res = -g_m * (R_D * r_o1) / (R_D + r_o1)
R_out_res = (R_D * r_o1) / (R_D + r_o1)
print("Resistor-loaded CS gain =", A_v_res)
print("Output resistance =", R_out_res, "Ω")
# ==== 2. Current-source (PMOS) load ====
A_v_current = -g_m * (r_o1 * r_o2) / (r_o1 + r_o2)
R_out_current = (r_o1 * r_o2) / (r_o1 + r_o2)
print("\nCurrent-source CS gain =", A_v_current)
print("Output resistance =", R_out_current, "Ω")
# ==== 3. Cascode ====
A_v_cascode = -0.5 * (g_m * r_o1)**2
r_out_cascode = (g_m * r_o2 * r_o1 * r_o3) / (r_o2 + r_o3)
print("\nCascode gain ≈", A_v_cascode)
print("Output resistance ≈", r_out_cascode, "Ω")
# ==== 4. Regulated Cascode ====
A_v_reg = (g_m * r_o1)**3 / 4
print("\nRegulated Cascode gain ≈", A_v_reg)
# ==== 5. Differential Pair ====
A_v_diff_single = g_m * (r_o2 * r_o3) / (r_o2 + r_o3)
A_v_diff_full = 2 * A_v_diff_single
print("\nDifferential single-ended gain =", A_v_diff_single)
print("Differential full gain =", A_v_diff_full)
# ==== 6. Bandwidth & GBW ====
omega_p = 1 / (R_out_current * C_L)
GBW = g_m / (2 * math.pi * C_L)
print("\nPole frequency ω_p =", omega_p, "rad/s")
print("GBW =", GBW, "Hz")
# ==== 7. Noise estimation ====
i_n2 = 4 * k * T * gamma * g_m * delta_f
v_n2 = 4 * k * T * R_out_current * delta_f
v_n_in2 = 4 * k * T * (gamma / g_m + R_out_current / (A_v_current**2)) * delta_f
print("\nTransistor thermal noise current =", i_n2, "A^2")
print("Resistor thermal noise voltage =", v_n2, "V^2")
print("Input-referred noise voltage =", v_n_in2, "V^2")
# ==== 8. Summary ====
print("\n--- Summary ---")
print(f"g_m = {g_m} [A/V], r_o = {r_o1} [Ω], C_L = {C_L} [F]")
print(f"A_v(CS)={A_v_res:.2f}, A_v(PMOS)={A_v_current:.2f}, A_v(cascode)={A_v_cascode:.2f}")
# ===============================================================
# Cascode and Regulated Cascode Gain Numerical Example
# ===============================================================
import math
# ---- 基本パラメータ設定 ----
g_m = 1e-3 # トランスコンダクタンス [A/V]
r_o = 50e3 # 出力抵抗 [Ω]
V_DD = 3.3 # 電源電圧 [V]
V_DSsat1 = 0.2 # 飽和電圧 M1 [V]
V_DSsat4 = 0.2 # 飽和電圧 M4 [V]
# ---- (1) カスコード・ソース接地回路 ----
# 利得 A_v ≒ (1/2) * (g_m * r_o)^2
A_v_cascode = 0.5 * (g_m * r_o)**2
R_out_cascode = (g_m * r_o) * r_o # 簡易的近似 [Ω]
print("=== カスコード・ソース接地回路 ===")
print("g_m =", g_m, "[A/V]")
print("r_o =", r_o, "[Ω]")
print("A_v ≒ (1/2)*(g_m*r_o)^2 =", A_v_cascode, "(無次元)")
print("出力抵抗 R_out ≒ g_m*r_o*r_o =", R_out_cascode, "[Ω]")
# 出力利得をdB表示
A_v_cascode_dB = 20 * math.log10(abs(A_v_cascode))
print("電圧利得 =", A_v_cascode_dB, "[dB]")
# ---- (2) レギュレーテッド・カスコード ----
# A ≒ g_m * r_o / 2
A_amp = g_m * r_o / 2
# A_v ≒ (A * (g_m * r_o)^2) / 2 = (g_m * r_o)^3 / 4
A_v_reg = (g_m * r_o)**3 / 4
R_out_reg = (g_m * r_o)**2 * r_o # 出力抵抗オーダー [Ω]
print("\n=== レギュレーテッド・カスコード ===")
print("補助アンプ利得 A =", A_amp)
print("A_v ≒ (g_m*r_o)^3/4 =", A_v_reg, "(無次元)")
print("出力抵抗 R_out ≒ (g_m*r_o)^2 * r_o =", R_out_reg, "[Ω]")
A_v_reg_dB = 20 * math.log10(abs(A_v_reg))
print("電圧利得 =", A_v_reg_dB, "[dB]")
# ---- (3) バイアス条件による出力スイング ----
V_BIAS1 = V_DSsat1
V_BIAS2 = V_DD - V_DSsat4
V_out_max = V_DD - V_DSsat4
V_out_min = V_DSsat1
V_swing = V_out_max - V_out_min
print("\n=== バイアス条件 ===")
print("V_BIAS1 =", V_BIAS1, "[V]")
print("V_BIAS2 =", V_BIAS2, "[V]")
print("最大出力振幅 (スイング) =", V_swing, "[V]")