1
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?

フォールデッド・カスコードの設計

Posted at

image.png

1. 回路図と構造

Single Stage Cascode Op Amp

  • 差動入力トランジスタ:M1, M2
  • カスコードトランジスタ(NMOS側):MC1, MC2
  • カスコードトランジスタ(PMOS側):MC3, MC4
  • アクティブ負荷トランジスタ:M3, M4
  • テール電流源:M5

2. 出力抵抗と利得の式

出力抵抗

1段目の出力抵抗は次のように表されます:

$$
R_I \approx (g_{mC2} r_{dsC2} r_{ds2}) \parallel (g_{mC4} r_{dsC4} r_{ds4})
$$

ここで:

  • $g_{mC2}, g_{mC4}$:カスコードトランジスタのトランスコンダクタンス
  • $r_{ds2}, r_{ds4}$:入力ペアM2, M4の出力抵抗
  • $r_{dsC2}, r_{dsC4}$:カスコードの出力抵抗

電圧利得

電圧利得は:

$$
A_v = \frac{v_{o1}}{v_{in}} = g_{m1} R_I
$$

つまり、入力ペアM1のトランスコンダクタンスに、出力抵抗 $R_I$ を掛けたものになります。
カスコードによって、出力抵抗が非常に大きくなるため、利得も大幅に増加します。


3. 性能計算

与えられた条件:

  • $W/L = 10,\mu m / 1,\mu m$
  • $I_{DS1} = I_{DS2} = 50,\mu A$
  • $K'_N = 120 \mu A / V^2$, $K'_P = 25 \mu A / V^2$
  • $V_{TN} = 0.5 V$, $V_{TP} = -0.5 V$
  • $\lambda_N = 0.06 V^{-1}$, $\lambda_P = 0.08 V^{-1}$

トランスコンダクタンス

$$
g_{m1} = g_{m2} = g_{mI} = 346.4,\mu S
$$

$$
g_{mC1} = g_{mC2} = 346.4,\mu S
$$

$$
g_{mC3} = g_{mC4} = 158.1,\mu S
$$


出力抵抗

NMOSとPMOSの出力抵抗は:

$$
r_{oN} = \frac{1}{\lambda_N I_D} = \frac{1}{0.06 \times 50 \mu A} = 0.333,M\Omega
$$

$$
r_{oP} = \frac{1}{\lambda_P I_D} = \frac{1}{0.08 \times 50 \mu A} = 0.25,M\Omega
$$

よって:

$$
R_I = 7.86,M\Omega
$$


電圧利得

$$
A_v(0) = g_{m1} R_I = (346.4 \mu S)(7.86 M\Omega) \approx 2,722, V/V
$$

これは 約 20 * log10(2722) = 68.7 dB に相当。


帯域幅と補償容量

ゲイン帯域積(GB)を10 MHzとする場合:

$$
C_I = \frac{g_{m1}}{2\pi GB} \approx 5.51,pF
$$

もし100 pFの負荷容量を接続すると:

$$
GB = \frac{g_{m1}}{2\pi C} = 0.551, MHz
$$

となり、帯域が大きく低下します。


まとめ

  • カスコード化の効果 → 出力抵抗が大きくなり、利得が大幅に増加(68 dB程度)。
  • 制約 → 負荷容量が大きいとGBが急激に下がるため、補償や設計調整が必要。
  • 単段オペアンプ → 補償容量 $C_c$ は負荷容量そのものとなる。


import numpy as np
import matplotlib.pyplot as plt

# ===============================
# Parameters / パラメータ
# ===============================
gm1 = 346.4e-6     # [S] トランスコンダクタンス
RI  = 7.86e6       # [Ω] 出力抵抗
GB_target = 10e6   # [Hz] 目標GB
C_load1 = 5.51e-12 # [F] 負荷容量 (計算結果)
C_load2 = 100e-12  # [F] 大きい負荷容量の場合

# ===============================
# Gain calculation / 利得計算
# ===============================
Av0 = gm1 * RI  # DC gain [V/V]
Av0_dB = 20 * np.log10(Av0)

print("DC Gain (V/V):", Av0)
print("DC Gain (dB):", Av0_dB)

# ===============================
# Bandwidth calculation / 帯域計算
# ===============================
GB1 = gm1 / (2 * np.pi * C_load1)
GB2 = gm1 / (2 * np.pi * C_load2)

print("Unity GB with C_load1 = 5.51pF:", GB1, "Hz")
print("Unity GB with C_load2 = 100pF:", GB2, "Hz")

# ===============================
# Frequency response / 周波数応答
# ===============================
f = np.logspace(3, 8, 500)  # 1kHz ~ 100MHz
w = 2 * np.pi * f

# Simple single-pole response model
H1 = Av0 / np.sqrt(1 + (f/GB1)**2)
H2 = Av0 / np.sqrt(1 + (f/GB2)**2)

# dB変換
H1_dB = 20 * np.log10(H1)
H2_dB = 20 * np.log10(H2)

# ===============================
# Plot / プロット
# ===============================
plt.figure(figsize=(8,6))
plt.semilogx(f, H1_dB, label="C_load = 5.51 pF")
plt.semilogx(f, H2_dB, label="C_load = 100 pF", linestyle="--")
plt.axhline(y=0, color="k", linestyle=":")
plt.title("Frequency Response of Cascode Op-Amp")
plt.xlabel("Frequency [Hz]")
plt.ylabel("Gain [dB]")
plt.legend()
plt.grid(True, which="both", ls="--")
plt.show()

image.png

電圧利得は次のように書けます:

$$
A_v = \frac{V_{OUT}}{V_{IN}} = g_{m1} R_{out}
$$

ここで出力抵抗 $R_{out}$ は、

$$
R_{out} = \big(A r_{ds6} g_{m6} r_{ds8}\big) \parallel \big(A r_{ds2} g_{m4} r_{ds4}\big)
$$


もし $r_{dsn} \approx r_{dsp}$ (NMOSとPMOSの出力抵抗がほぼ同じ)であれば、

$$
A \approx g_m' r_{ds}' / 2
$$

となり、電圧利得は

$$
A_v \approx 100\text{K} \sim 500\text{K}
$$

の範囲になる。

ただし、この構造では最大信号スイングは最適化されていない


詳細な解説

  1. 基本の利得式
    演算増幅器の小信号利得は「入力トランジスタのトランスコンダクタンス × 出力抵抗」で表されます。

    $$
    A_v = g_{m1} \cdot R_{out}
    $$

  2. カスコードによる出力抵抗増大
    通常のMOSFETの出力抵抗は $r_{ds}$ ですが、カスコード接続すると「電流源に近い振る舞い」となり、

    $$
    R_{out} \approx g_m r_{ds}^2
    $$

    のように桁違いに大きくなります。

  3. 並列合成
    回路の左右対称性から、NMOS側とPMOS側の出力抵抗が並列になります。

    $$
    R_{out} = (A r_{ds6} g_{m6} r_{ds8}) \parallel (A r_{ds2} g_{m4} r_{ds4})
    $$

  4. 対称条件での近似
    $r_{dsn} \approx r_{dsp}$ と仮定すると、式は簡略化され、

    $$
    A_v \approx \frac{1}{2} g_m' r_{ds}'
    $$

  5. 数値オーダー
    典型的なCMOSプロセスでは、

    $$
    g_m' r_{ds}' \sim 200K \text{ から } 1M
    $$

    なので、実際の利得はその半分程度、

    $$
    A_v \approx 100K \sim 500K
    $$

    という大きな利得が得られます。

  6. 制約:信号スイング
    カスコード構造は高利得を実現しますが、ヘッドルーム(電圧余裕)が減るため、最大出力スイングは制限されます。
    → 高利得と引き換えに、大きな出力振幅が得られないのが欠点。

# Program Name: cascode_amp_gain.py
# Creation Date: 20250924
# Overview: Calculate and visualize voltage gain of a cascode CMOS amplifier
# Usage: Run in Python. It computes Av and plots gm*rds dependence.

!pip install numpy matplotlib

import numpy as np
import matplotlib.pyplot as plt

# ==============================
# Parameters / パラメータ
# ==============================

# gm と rds の代表値範囲
gm_values = np.linspace(50e-6, 500e-6, 200)   # Transconductance [S] (50 µS ~ 500 µS)
rds_values = np.linspace(50e3, 500e3, 200)    # Output resistance [Ω] (50 kΩ ~ 500 kΩ)

# 対称条件 (rdsn ≈ rdsp) の場合の近似式
# Av ≈ (1/2) * gm * rds
def calc_gain(gm, rds):
    return 0.5 * gm * rds

# ==============================
# Calculate Gain for a grid
# ==============================
GM, RDS = np.meshgrid(gm_values, rds_values)
Av = calc_gain(GM, RDS)   # Voltage gain (V/V)

# dB換算
Av_dB = 20 * np.log10(Av)

# ==============================
# Visualization / プロット
# ==============================
plt.figure(figsize=(8,6))
cp = plt.contourf(GM*1e6, RDS*1e-3, Av_dB, levels=30, cmap="viridis")
plt.colorbar(cp, label="Voltage Gain [dB]")
plt.xlabel("gm [µS]")      # x軸: gm
plt.ylabel("rds [kΩ]")     # y軸: rds
plt.title("Cascode CMOS Amplifier Gain (Av in dB)")
plt.show()

# ==============================
# Example numeric results / 数値例
# ==============================
gm_example = 200e-6   # 200 µS
rds_example = 500e3   # 500 kΩ
Av_example = calc_gain(gm_example, rds_example)
print("Example case:")
print(f"gm = {gm_example*1e6:.1f} µS, rds = {rds_example/1e3:.1f}")
print(f"Voltage gain Av ≈ {Av_example:.1f} V/V  ({20*np.log10(Av_example):.1f} dB)")

image.png

1. 全体の利得式

オペアンプの全体の電圧利得は:

$$
A_v = g_{mI} g_{mII} R_I R_{II}
$$

  • $g_{mI} = g_{m1} = g_{m2}$:第1段差動ペアのトランスコンダクタンス
  • $g_{mII} = g_{m6}$:第2段トランジスタのトランスコンダクタンス
  • $R_I$:第1段の出力抵抗
  • $R_{II}$:第2段の出力抵抗

2. 第1段の出力抵抗 $R_I$

$$
R_I = \frac{1}{g_{ds2} + g_{ds4}}
= \frac{2}{(\lambda_2 + \lambda_4) I_D5}
$$

  • $g_{ds2}, g_{ds4}$:入力差動ペア M2, M4 のチャネルコンダクタンス
  • $\lambda_2, \lambda_4$:チャネル長変調係数
  • $I_D5$:テール電流源M5の電流

👉 出力抵抗は、チャネル長変調効果によって制限されます。


3. 第2段の出力抵抗 $R_{II}$

$$
R_{II} = (g_{mC6} r_{dsC6} r_{ds6}) \parallel (g_{mC7} r_{dsC7} r_{ds7})
$$

ここで:

  • $g_{mC6}, g_{mC7}$:カスコードトランジスタMC6, MC7のトランスコンダクタンス
  • $r_{ds6}, r_{ds7}$:出力段トランジスタM6, M7の出力抵抗
  • $r_{dsC6}, r_{dsC7}$:カスコードの出力抵抗

👉 カスコード接続により出力抵抗が大きくなり、利得が飛躍的に増加します。


4. コメントの意味

  • Second-stage gain
    第2段の利得が大きくなるため、ミラー補償の効果が改善される。

  • Overall gain
    全体の利得はおおよそ $(g_m r_{ds})^3$ のオーダーになる。
    → 通常の2段構成よりも高利得が期待できる。

  • Output pole $p_2$
    負荷容量と第2段の gm に依存し、$C_c$ が一定ならほぼ変わらない。

  • RHP zero
    ミラー補償によって右半平面ゼロが現れる。これも $C_c$ が一定なら同じ。

  • PSRR (電源除去比)
    ミラー補償を行うとPSRRが悪化する。補償を取り除くと自己補償(op-ampが安定化)する。


5. まとめ

  • 利得は

    $$
    A_v = g_{m1} g_{m6} R_I R_{II}
    $$

    で表され、カスコード化によって $R_{II}$ が大きくなるので非常に高利得が得られる。

  • ミラー補償(Miller compensation)の効果は大きいが、右半平面ゼロやPSRR悪化という副作用がある。


# Program Name: two_stage_cascode_opamp.py
# Creation Date: 20250924
# Overview: Numerical simulation of two-stage cascode op-amp gain using Python and matplotlib
# Usage: Run in Python (NumPy + Matplotlib). It will plot Bode-like gain response.

!pip install numpy matplotlib

import numpy as np
import matplotlib.pyplot as plt

# ========================
# Parameters (仮定値)
# ========================
gm1 = 500e-6    # Transconductance of first stage [S]
gm6 = 1e-3      # Transconductance of second stage [S]
lambda2 = 0.05  # Channel length modulation coeff. of M2 [1/V]
lambda4 = 0.05  # Channel length modulation coeff. of M4 [1/V]
Id5 = 50e-6     # Tail current [A]

# 出力抵抗 R_I
RI = 2 / ((lambda2 + lambda4) * Id5)

# カスコード出力抵抗 R_II (近似)
gmC6 = 500e-6
ro6 = 200e3
roC6 = 300e3
gmC7 = 500e-6
ro7 = 200e3
roC7 = 300e3

RII = (gmC6 * roC6 * ro6) * (gmC7 * roC7 * ro7) / (gmC6 * roC6 * ro6 + gmC7 * roC7 * ro7)

# DC利得
Av0 = gm1 * gm6 * RI * RII
Av0_dB = 20 * np.log10(Av0)

# ゲイン帯域積 (仮定)
GB = 10e6  # 10 MHz

# ========================
# 周波数応答プロット
# ========================
f = np.logspace(1, 8, 500)  # 10 Hz ~ 100 MHz
gain_dB = Av0_dB - 20 * np.log10(1 + f / GB)

plt.figure(figsize=(7,5))
plt.semilogx(f, gain_dB, label="Two-Stage Cascode Op-Amp")
plt.axhline(0, color='gray', linestyle='--')
plt.title("Frequency Response of Two-Stage Cascode Op-Amp")
plt.xlabel("Frequency [Hz]")
plt.ylabel("Gain [dB]")
plt.grid(True, which="both", ls="--")
plt.legend()
plt.show()

# ========================
# 結果出力
# ========================
print(f"DC Gain = {Av0:.2e} V/V ≈ {Av0_dB:.2f} dB")
print(f"Unity Gain Bandwidth = {GB/1e6} MHz")

image.png
図の Balanced, Two-Stage Cascode Output Stage Op Amp の数式を順番に解説します。


1. 出力電圧の式

まず差動入力から:

$$
v_{out} = \left( \frac{gm1 \cdot gm8}{gm3} \cdot \frac{v_{in}}{2} ;+; \frac{gm2 \cdot gm6}{gm4} \cdot \frac{v_{in}}{2} \right) R_{II}
$$

ここで:

  • $gm1, gm2$:入力差動対 (M1, M2) のトランスコンダクタンス
  • $gm3, gm4$:電流ミラー負荷 (M3, M4) のトランスコンダクタンス
  • $gm6, gm8$:カスコード段で電流を出力ノードへ引き上げるトランジスタのトランスコンダクタンス
  • $R_{II}$:出力抵抗

意味:入力電圧 $v_{in}$ が差動入力でそれぞれ M1, M2 に分かれ、電流ミラーを経て増幅され、最終的に出力電圧 $v_{out}$ が得られる。


2. 簡略化と係数 $k$

次に式をまとめると:

$$
v_{out} = \left( \frac{gm1}{2} + \frac{gm2}{2} \right) k , v_{in} , R_{II}
$$

ここで係数 $k$ は、電流ミラーによる増幅比:

$$
k = \frac{gm8}{gm3} = \frac{gm6}{gm4}
$$

👉 負荷トランジスタ M3, M4 とカスコード増幅トランジスタ M8, M6 の 比率 で決まる。


3. 出力抵抗 $R_{II}$

出力段にはカスコードがあるため、出力抵抗は非常に大きくなる:

$$
R_{II} = (gm7 , r_{ds7} , r_{ds6}) \parallel (gm12 , r_{ds12} , r_{ds11})
$$

  • $gm7, gm12$:カスコードトランジスタ
  • $r_{ds6}, r_{ds11}$:出力トランジスタのチャネル抵抗
  • $r_{ds7}, r_{ds12}$:カスコードトランジスタのチャネル抵抗

👉 カスコード構造により、抵抗が $gm \cdot r_{ds}^2$ のオーダーに増大


4. 最終的な利得式

したがって、全体の電圧利得は:

$$
A_v = \frac{1}{2} \left( \frac{gm1 \cdot gm8}{gm3} + \frac{gm2 \cdot gm6}{gm4} \right) R_{II}
$$


5. 設計関係式(Table 1)

  • スルーレート(Slew Rate)

$$
SR = \frac{I_{out}}{C_L}
$$

負荷容量 $C_L$ に対して出力電流が制御する → 高速応答の目安。


  • ゲイン帯域幅(GB, Gain Bandwidth)

$$
GB = \frac{gm1 \cdot gm8}{gm3 \cdot C_L}
$$

入力段のトランスコンダクタンスと電流ミラー比、負荷容量 $C_L$ に依存。


  • 電圧利得(Voltage Gain)

$$
A_v = \frac{1}{2} \left( \frac{gm1 \cdot gm8}{gm3} + \frac{gm2 \cdot gm6}{gm4} \right) R_{II}
$$

大きな $R_{II}$ が利得を引き上げる。


  • 入力電圧範囲(Input Range)

$$
V_{in(max)} = V_{DD} - \sqrt{\frac{I_S}{\beta_3}} - |V_{T03(max)}| + V_{T1(min)}
$$

$$
V_{in(min)} = V_{SS} + V_{DSS} + \sqrt{\frac{I_S}{\beta_1}} + V_{T1(min)}
$$

👉 これにより、差動入力段が飽和せず動作可能な入力電圧範囲が決まる。


まとめ

  • 入力段差動ペアの電流 → 電流ミラーを通じて増幅 → カスコード出力段で高抵抗化。
  • 出力利得は 入力 gm × 電流ミラー比 k × 出力抵抗 RII で決まる。
  • スルーレートと帯域は負荷容量に強く依存。
  • カスコードにより非常に大きな利得が得られるが、ヘッドルームが制約。

image.png

1. 小信号解析 (Small-Signal Analysis)

短絡出力電流を求めて、出力抵抗を掛けるアプローチです。

(1) 出力電流成分

  • M2経路の電流 (右側分岐)
i7 = [ gm2 * (rds2 || rds5) * vin ] / [ 2 * ( RB + (rds2 || rds5) ) ]
   ≈ ( gm2 * vin ) / 2
  • M1経路の電流 (左側分岐)
i9 ≈ -i10 = [ gm1 * (rds1 || rds4) * vin ] / [ 2 * ( RA + (rds1 || rds4) ) ]
    ≈ ( gm1 * vin ) / 2

よって、出力電流は

iout = i7 + i9 ≈ ( gm1/2 + gm2/2 ) * vin

(2) 出力抵抗

フォールデッド・カスコードの出力抵抗は、カスコードの gm·rds^2 効果で非常に大きくなります。

Rout ≈ ( gm9 * rds9 * rds11 ) || ( gm7 * rds7 * (rds2 || rds5) )

もし nMOS と pMOS の rds が同程度なら、近似的に

Rout ≈ ( gm * rds^2 ) / 3

(3) 電圧利得

Av = vout / vin
   = ( (gm1/2 + gm2/2) * vin ) * Rout
   ≈ gm * Rout
   ≈ ( gm^2 * rds^2 ) / 3

→ カスコード効果により、(gm·rds)^2 のオーダーの高利得が得られる。


2. ゲイン帯域幅 (GB)

ゲイン帯域幅積は

GB = Av(0) / |p1|
   = ( gm * Rout ) / ( Rout * CL )
   = gm / CL

👉 利得に依存せず、gm/CL によって決まる点が特徴。


3. 周波数応答

主要な極 (pole) は出力ノードで決まります。

pout = -1 / ( Rout * Cout )

ここで Cout は出力ノードにぶら下がる容量 (CL や寄生容量) です。

その他の内部ノード極は以下:

  1. Node A:
pA ≈ -gm6 / (Cgs + 2Cdb)
  1. Node B:
pB ≈ -gm7 / (Cgs + 2Cdb)
  1. Drain of M6:
p6 ≈ -gm10 / (2Cgs + 2Cdb)
  1. Source of M8:
p8 ≈ -(gm8 * rds8 * gm10) / (Cgs + Cdb)
  1. Source of M9:
p9 ≈ -gm9 / (Cgs + Cdb)

4. 設計例 (Example)

与えられた値:

gmN = gmP = 100 µS
rdsN = 2 MΩ
rdsP = 1 MΩ
CL = 10 pF

(1) 出力抵抗:

Rout = ( gm9 * rds9 * rds11 ) || ( gm7 * rds7 * (rds5 || rds2) )
     = 400 MΩ || (100 * 0.667 MΩ)
     = 57.143 MΩ

(2) 電圧利得:

Av = gmN * Rout = (100 µS)(57.143 MΩ) = 5714 V/V

(3) 出力極周波数:

|pout| = 1 / ( Rout * Cout )
       = 1 / (57.143 MΩ * 10 pF)
       = 1750 rad/s ≈ 278 Hz

(4) GBW:

GB = 1.21 MHz

5. 設計アプローチ (表のまとめ)

  1. Slew Rate
I3 = SR * CL
  1. カスコードバイアス電流
I4 = I5 = 1.2 I3 ~ 1.5 I3
  1. 最大出力電圧
S5 = 2I5 / (Kp' VSD5^2)
S7 = 2I7 / (Kp' VSD7^2)
  1. 最小出力電圧
S11 = 2I11 / (Kn' VDS11^2)
S9  = 2I9  / (Kn' VDS9^2)
  1. GB
gm1 / CL
  1. 入力CM範囲
Vin(min), Vin(max) で決まる
  1. 差動利得
Av = ( (gm1/2 + gm2/2) ) * Rout

1
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
1
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?