0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MOSFET増幅回路利得解析プログラム:ソース接地・カスコード・レギュレーテッド・カスコード・差動対

Last updated at Posted at 2025-10-29

【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]")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?