カスコード増幅回路の理論 — ミラー効果を断ち切る

増幅回路を設計していて、こんな経験はないでしょうか。シミュレータ上で負荷抵抗を大きくして電圧利得を稼いだら、今度は周波数特性がガタ落ちして、狙っていた帯域がまったく出ない。仕方なく利得を下げると帯域は戻るが、今度は必要なゲインが足りない。利得と帯域を掛け算した値(利得帯域積)が、まるで固定された「予算」のように振る舞い、どちらか一方しか買えない — このジレンマの正体は、たった一つの小さな寄生容量です。トランジスタのゲートとドレインの間に挟まった数フェムトファラッドの $C_{gd}$ が、増幅器の利得によって何十倍にも「水増し」されて入力側に現れる。これがミラー効果です。

カスコード(cascode)増幅回路は、この水増しを構造的に断ち切るための回路技法です。共通ソース段の上に共通ゲート段を「二階建て」に積むだけという、部品数にすればトランジスタ1個の追加にすぎません。しかしこの1個が、入力容量の膨張を止め、出力抵抗を100倍に押し上げ、結果として利得帯域積を数倍に改善します。

カスコードを理解すると、次のような場面で何が起きているかが見通せるようになります。

  • RF低雑音増幅器(LNA): 数GHz帯のLNAはほぼ例外なくカスコード構成です。ミラー容量を抑えて整合を取りやすくし、同時に入出力の逆方向アイソレーション($S_{12}$)を確保して発振を防ぎます
  • CMOSオペアンプの利得段: 単段で60〜80 dBの利得を得るために、テレスコピックカスコードやフォールデッドカスコードが標準的に使われます。ADCのサンプルホールド回路の中身はほぼこれです
  • 電流源・カレントミラー: 出力抵抗を $g_m r_o$ 倍にする「カスコード電流源」は、チャネル長変調による電流誤差を桁で削減します
  • イメージセンサ・フォトダイオード読み出し: 高インピーダンスのセンサノードを低インピーダンスで受けて電流に変換する部分に、カスコードの「遮蔽」作用が効いています

本記事の内容

  • 共通ソース増幅器の小信号等価回路と $C_{gd}$ の役割
  • ミラーの定理の導出と、入力容量 $C_{in} = C_{gs} + (1+g_m R_L)C_{gd}$
  • 支配極と利得帯域積のジレンマ($\text{GBW} \to 1/(2\pi R_s C_{gd})$ という天井)
  • カスコード回路の構成、バイアス、動作点
  • カスコードがミラー倍増を消す理由の定量的導出
  • 中間ノードに生まれる新しい極
  • カスコードの出力抵抗 $R_{out} \approx g_{m2} r_{o1} r_{o2}$ の導出
  • 全体利得 $A_v \approx -g_{m1}(g_{m2}r_{o2}r_{o1} \parallel R_L)$
  • 電圧余裕(ヘッドルーム)の問題とフォールデッドカスコード
  • Python実装: 節点方程式による厳密な周波数応答、ボード線図、$-3$ dB帯域と利得帯域積の比較

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

カスコードとは — 「二階建て」の直感

素の共通ソース増幅器とカスコード増幅器の比較。Cgdが入力と出力をまたいで51倍に水増しされる様子と、共通ゲート段M2が中間ノードXを押さえて水増しを2.98倍に抑える様子

まずこの記事全体の見取り図を掴んでおきましょう。左が素の共通ソース増幅器で、ゲートとドレインをまたぐ $C_{gd}$ の両端には「入力の $+1$ mV」と「出力の $-50$ mV」という大きく開いた電位差がかかります。右のカスコードでは、$M_1$ のドレインが $M_2$ のソースに繋がっており、そこから上を見た抵抗が 990 Ω まで圧縮されるため、同じ $C_{gd}$ の両端の電位差が 1/17 以下に縮みます。結果として実効入力容量は 560 fF から 79.8 fF へ、$-3$ dB帯域は 24.4 MHz から 67.9 MHz へと変わります — 本記事は、この2つの数字がどこから来るのかを最後まで追いかける記事です。

カスコードという名前は、真空管時代の “cascade to cathode“(カソードへの縦続接続)を縮めたものだと言われています。名前の由来が示すとおり、これは2つの増幅段を「横に並べる」のではなく「縦に積む」構成です。

イメージとしては、水道の配管を思い浮かべてください。共通ソース段のトランジスタは「蛇口」です。ゲート電圧をひねると、流れる電流が変わります。ところがこの蛇口は少しばかり素直ではなく、出口側(ドレイン)の圧力が変わると流量も変わってしまう。さらに厄介なことに、出口の圧力変動がハンドル(ゲート)側にも漏れ伝わってきて、ハンドルを回すのに余計な力が要るようになります。

カスコードがやることは、この蛇口の出口にもう1本の管をかぶせて、出口の圧力変動を蛇口本体に伝えないようにすることです。かぶせる管が共通ゲート段のトランジスタで、これは「入口インピーダンスが低く、出口インピーダンスが高い」という性質を持ちます。低い入口インピーダンスが蛇口の出口を「押さえつけて」電圧を動かさないようにし、高い出口インピーダンスが上流の大きな電圧振幅を作り出す。役割分担が明確です。

回路の言葉に翻訳すると、こうなります。

  • 下段(共通ソース、$M_1$): 入力電圧 $v_{in}$ を信号電流 $g_{m1} v_{in}$ に変換する。トランスコンダクタとして働く
  • 上段(共通ゲート、$M_2$): その信号電流をほぼそのまま上に通し、高い出力抵抗を持つノードで電圧に戻す。電流バッファとして働く

つまりカスコードは「電圧 → 電流 → 電圧」の変換を、2つのトランジスタに役割分担させた回路です。重要なのは、下段のドレイン電圧(中間ノード $X$)がほとんど動かないように上段が仕事をしている点です。電圧が動かないノードに寄生容量がぶら下がっていても、そこには電流が流れません。$C = Q/V$ の $V$ が動かなければ $dQ/dt = 0$ だからです。ミラー効果が消える理由は、突き詰めればこの一点に尽きます。

ここまでで「中間ノードの電圧を動かさない」ことが鍵だという直感が得られました。しかし、そもそもなぜ中間ノード(=共通ソース増幅器のドレイン)の電圧が動くと困るのでしょうか。それを定量的に理解するために、まずは素の共通ソース増幅器を小信号等価回路で解剖するところから始めましょう。

共通ソース増幅器の小信号等価回路

直流バイアスと小信号の分離

NMOSトランジスタ $M_1$ のソースを接地し、ドレインを負荷抵抗 $R_D$ を通して電源 $V_{DD}$ につないだ回路が、共通ソース(common source, CS)増幅器です。ゲートに直流バイアス $V_{GS}$ を与えたうえで小さな交流信号 $v_{in}$ を重畳します。

飽和領域のMOSFETのドレイン電流は、チャネル長変調を含めて次のように書けます。

$$ I_D = \frac{1}{2}\mu_n C_{ox}\frac{W}{L}(V_{GS} – V_{th})^2 (1 + \lambda V_{DS}) $$

小信号解析では、この非線形な特性を動作点まわりで一次近似します。ゲート電圧の微小変化 $v_{gs}$ に対するドレイン電流の変化を決めるのが相互コンダクタンス $g_m$ です。

$$ g_m = \left.\frac{\partial I_D}{\partial V_{GS}}\right|_{Q} = \mu_n C_{ox}\frac{W}{L}(V_{GS}-V_{th}) = \frac{2I_D}{V_{ov}} $$

ここで $V_{ov} = V_{GS} – V_{th}$ はオーバードライブ電圧です。同様に、ドレイン電圧の変化に対する電流の変化が出力コンダクタンス $g_{ds} = 1/r_o$ で、

$$ r_o = \left.\left(\frac{\partial I_D}{\partial V_{DS}}\right)^{-1}\right|_{Q} = \frac{1}{\lambda I_D} $$

となります。$g_m$ と $r_o$ の積 $g_m r_o = 2/(\lambda V_{ov})$ は固有利得(intrinsic gain)と呼ばれ、そのトランジスタ1個で理論上得られる電圧利得の上限を表します。プロセスにもよりますが、典型的には20〜200程度です。本記事の数値例では $g_m = 2$ mS、$r_o = 50$ kΩ、すなわち固有利得 $g_m r_o = 100$(40 dB)を使います。

寄生容量の配置

トランジスタには、動作原理に付随して避けられない容量がいくつも存在します。増幅器の周波数特性を議論するうえで重要なのは次の4つです。

  • $C_{gs}$: ゲート-ソース間容量。ゲート酸化膜の容量が主成分で、飽和領域では $C_{gs} \approx \frac{2}{3}W L C_{ox} + C_{ov}$ 程度。4つの中で最大
  • $C_{gd}$: ゲート-ドレイン間容量。飽和領域ではチャネルがドレイン端でピンチオフしているため、酸化膜容量の寄与はほぼ無く、ゲートとドレインの物理的な重なり(オーバーラップ)による寄生容量 $C_{ov} = W \cdot C_{ov}’$ が主成分。$C_{gs}$ より1桁小さいことが多い
  • $C_{db}$: ドレイン-基板間の接合容量。逆バイアスされたpn接合の空乏層容量
  • $C_{sb}$: ソース-基板間の接合容量

ここで注意したいのは、$C_{gd}$ は小さいのに一番厄介だという点です。理由は配置にあります。$C_{gs}$ は入力(ゲート)と接地(ソース)の間、$C_{db}$ は出力(ドレイン)と接地の間にあり、どちらも「入力と接地」「出力と接地」という素直な位置です。ところが $C_{gd}$ だけは入力と出力を直接またいでいる(ブリッジしている)。増幅器の入力と出力は、利得 $A_v$ の分だけ電圧が違い、しかも符号が反転しています。この電位差の大きい2点を橋渡しする容量が、次に見るミラー効果の元凶になります。

節点方程式

共通ソース増幅器の小信号等価回路。信号源抵抗Rs、ゲート節点Gの接地容量Cgs、電流源gm・vg、負荷抵抗RL、出力側のCL+Cdb、そして節点Gと節点Dをまたぐ橋渡し容量Cgdの配置

この等価回路図で注目してほしいのは、素子の「つなぎ方」の違いです。$C_{gs}$ と $C_L + C_{db}$ はどちらも片足が接地に落ちているのに対し、$C_{gd}$ だけが図の上を回り込んで節点 $G$ と節点 $D$ を直接つないでいます。接地容量は自分がぶら下がっている節点の電圧だけを見ますが、橋渡し容量は両端の電圧差を見るので、増幅器の利得がそのまま容量に流れる電流の大きさに効いてくるのです。以下の節点方程式は、この図をそのままキルヒホッフの電流則に翻訳したものです。

小信号等価回路の節点は、ゲート $G$(電圧 $v_g$)とドレイン $D$(電圧 $v_d$)の2つです。信号源 $v_{in}$ は出力抵抗 $R_s$ を通じてゲートを駆動し、ドレインには負荷抵抗 $R_D$、トランジスタ自身の $r_o$、そして外部の負荷容量 $C_L$ がぶら下がっています。$R_D$ と $r_o$ の並列合成を $R_L = R_D \parallel r_o$ と書きます。

節点 $G$ でのキルヒホッフの電流則は、次のようになります。

$$ \frac{v_g – v_{in}}{R_s} + s C_{gs} v_g + s C_{gd}(v_g – v_d) = 0 $$

節点 $D$ では、トランジスタが吸い込む電流 $g_m v_g$、負荷を流れる電流、そして $C_{gd}$ を通ってドレインからゲートへ逆流する電流が釣り合います。

$$ g_m v_g + \frac{v_d}{R_L} + s(C_L + C_{db}) v_d + s C_{gd}(v_d – v_g) = 0 $$

この2式を連立して解けば厳密な伝達関数が得られます。実際、あとのPython実装ではこの連立方程式を数値的に解いて周波数応答を求めます。しかし式のまま解くと分母が $s$ の2次式になり、係数が複雑で見通しが立ちません。そこで、まずは物理的な意味がはっきりする近似 — ミラーの定理 — を使って、何が起きているかを掴みましょう。

ミラー効果の導出

ミラーの定理

ミラーの定理の等価変換。利得Avの増幅器の入出力をまたぐインピーダンスZが、入力側のZ/(1-Av)と出力側のZ/(1-1/Av)という2つの接地インピーダンスに置き換えられる

ミラーの定理がやろうとしているのは、この図の左から右への「回路の描き換え」です。左では $Z$ が入出力をまたいでいて解析しづらいのですが、右のように接地インピーダンス2個に分解できれば、入力側と出力側を独立に扱えて、それぞれの極を単純なRC回路として計算できます。ポイントは分解後の値が非対称であることで、入力側は $1-A_v$ で割られて大幅に小さくなる(=容量なら大幅に大きくなる)のに対し、出力側は $1 – 1/A_v \approx 1$ でほぼ元のままです。

まず直感から入ります。$C_{gd}$ の両端の電圧を考えてみてください。ゲート側が $+1$ mV 動くとき、ドレイン側は利得 $-50$ 倍で $-50$ mV 動きます。つまり容量の両端の電位差は $1 – (-50) = 51$ mV も変化する。ところが信号源から見ると、この容量に流れ込む電流はゲート側の電圧変化 $1$ mV だけで決まってほしい。「$1$ mV 動かしただけなのに $51$ mV 分の電荷が動いた」— 信号源にとっては、容量が51倍に増えたのと区別がつきません。これがミラー効果の正体です。

これを定理の形にまとめます。2つの節点 $1$、$2$ の間にインピーダンス $Z$ が接続されており、節点1から節点2への電圧利得が $A_v = v_2/v_1$ で与えられているとします($A_v$ は $Z$ が無いときの利得と仮定します)。節点1から $Z$ に流れ込む電流は、

$$ i_1 = \frac{v_1 – v_2}{Z} = \frac{v_1 – A_v v_1}{Z} = \frac{v_1 (1 – A_v)}{Z} $$

したがって、節点1から接地を見たときの等価インピーダンス $Z_1 = v_1/i_1$ は次のようになります。

$$ Z_1 = \frac{Z}{1 – A_v} $$

同様に節点2側から見ると、節点2から $Z$ に流れ込む電流は $i_2 = (v_2 – v_1)/Z = v_2(1 – 1/A_v)/Z$ なので、

$$ Z_2 = \frac{Z}{1 – 1/A_v} $$

となります。これがミラーの定理です。「入出力をまたぐインピーダンスは、入力側では $(1-A_v)$ で割った値、出力側では $(1-1/A_v)$ で割った値の、接地された2つのインピーダンスに置き換えられる」と読みます。

容量への適用

$Z = 1/(sC_{gd})$ を代入します。反転増幅器なので $A_v = -|A_v|$ と書くと、入力側の等価インピーダンスは

$$ Z_1 = \frac{1}{sC_{gd}(1 + |A_v|)} $$

これは容量値 $(1+|A_v|)C_{gd}$ の接地容量に他なりません。もともとゲートに繋がっていた $C_{gs}$ と合わせると、信号源から見た入力容量は次のようになります。

$$ \begin{equation} C_{in} = C_{gs} + (1 + |A_v|) C_{gd}, \qquad |A_v| = g_m R_L \end{equation} $$

一方、出力側の等価容量は $(1 + 1/|A_v|)C_{gd} \approx C_{gd}$ で、利得が大きければほぼ $C_{gd}$ そのものです。つまりミラー効果は入力側だけを激しく痛めつける、非対称な現象です。

数値で実感する

数値を入れてみましょう。$g_m = 2$ mS、$r_o = 50$ kΩ、$R_D = 50$ kΩ とすると $R_L = R_D \parallel r_o = 25$ kΩ、利得は $|A_v| = g_m R_L = 2\times10^{-3} \times 25\times10^3 = 50$(34 dB)です。寄生容量を $C_{gs} = 50$ fF、$C_{gd} = 10$ fF とすると、

$$ C_{in} = 50\,\text{fF} + (1 + 50)\times 10\,\text{fF} = 50 + 510 = 560\ \text{fF} $$

たった10 fFの $C_{gd}$ が、510 fF という $C_{gs}$ の10倍もの容量に化けました。入力容量全体で見ると、$C_{gd}$ が無い場合の50 fFに対して11.2倍です。$C_{gd}$ は $C_{gs}$ の5分の1しかないのに、入力容量の91%を占めてしまう。これがミラー効果の破壊力です。

実効入力容量の内訳を比較した積み上げ棒グラフ。理想50fF、共通ソースは50fF+ミラー分510fFで560fF、カスコードは50fF+ミラー分29.8fFで79.8fF

棒グラフにすると内訳の異常さが一目瞭然です。共通ソースの棒は青($C_{gs}$)がほとんど見えないほど赤(ミラー分)に埋め尽くされており、全体の91%が「本来は10 fFしかない容量の水増し分」で占められています。右端のカスコードでは、後のセクションで導く $|A_{v1}| = 1.98$ のおかげでミラー分が 29.8 fF に留まり、棒全体が 79.8 fF まで縮んでいます。ミラー効果を断ち切るとは、この赤い部分を削り落とすことに他なりません。

ミラー近似の妥当性と限界

ここで一つ、正直に断っておくべきことがあります。ミラーの定理を導くとき、私たちは $A_v = v_2/v_1$ を周波数によらない定数として扱いました。しかし実際には、周波数が上がると $C_{gd}$ 自身のせいで利得が落ち、$A_v$ は周波数依存になります。したがってミラー近似は、支配極の近傍まで利得がほぼDC値を保っているという前提のもとでの近似です。

この近似が特に破綻するのが高周波側です。厳密な節点方程式を解くと、$C_{gd}$ は右半平面ゼロ(RHP zero)も生み出します。ゼロの位置は、節点 $D$ の式で $v_d = 0$(出力短絡)としたときに $v_g$ の係数がゼロになる条件から求まります。

$$ g_m – sC_{gd} = 0 \quad \Longrightarrow \quad z = \frac{g_m}{C_{gd}} $$

$s$ の正の実軸上にあるので右半平面ゼロです。物理的には、$C_{gd}$ を通じて入力から出力へ直接漏れるフィードフォワード経路が、トランジスタ本来の反転増幅経路と打ち消し合う周波数を表します。数値を入れると $z/(2\pi) = 2\times10^{-3}/(2\pi \times 10\times10^{-15}) \approx 31.8$ GHz と非常に高く、いま議論している数十MHz〜数GHzの帯域には影響しません。それでもRHPゼロの存在は、位相が余計に遅れる(位相余裕を食う)という形で高速オペアンプの設計では効いてきます。

ここまでで、入力容量が利得に比例して膨らむことがわかりました。では、その膨らんだ容量は増幅器の帯域をどこまで押し下げるのでしょうか。次はこの入力容量が作る極を求めて、利得と帯域が「掛け算で保存される」という重要な性質を導きます。

支配極と利得帯域積のジレンマ

支配極の位置

信号源抵抗 $R_s$ と入力容量 $C_{in}$ は、ゲート節点で1次のローパスフィルタを構成します。その遮断周波数が入力支配極です。

$$ \begin{equation} f_{p,in} = \frac{1}{2\pi R_s C_{in}} = \frac{1}{2\pi R_s \left[C_{gs} + (1+g_m R_L)C_{gd}\right]} \end{equation} $$

一方、出力節点にも極があります。こちらは $R_L$ と、出力側の全容量 $C_{out} = C_L + C_{db} + (1+1/|A_v|)C_{gd} \approx C_L + C_{db} + C_{gd}$ で決まります。

$$ f_{p,out} = \frac{1}{2\pi R_L C_{out}} $$

先ほどの数値を代入しましょう。$R_s = 10$ kΩ、$C_{in} = 560$ fF なので、

$$ f_{p,in} = \frac{1}{2\pi \times 10\times10^3 \times 560\times10^{-15}} \approx 28.4\ \text{MHz} $$

出力側は $C_L = 20$ fF、$C_{db} = 10$ fF、$C_{gd} = 10$ fF で $C_{out} = 40$ fF、$R_L = 25$ kΩ なので、

$$ f_{p,out} = \frac{1}{2\pi \times 25\times10^3 \times 40\times10^{-15}} \approx 159\ \text{MHz} $$

入力極のほうが5.6倍も低い。つまりこの増幅器の帯域は、完全にミラー容量に律速されているのです。後のPython実装で連立方程式を厳密に解くと $-3$ dB帯域は 24.4 MHz となり、ミラー近似の28.4 MHzに近い値になります(厳密解のほうがやや低いのは、出力極や2つの極の相互作用が効くためです)。

開放時定数法という見方

複数の極を持つ回路で、支配極を手早く見積もる実務的な手法に開放時定数法(open-circuit time constant method, OCTC)があります。各容量について「他の容量をすべて開放したときにその容量から見える抵抗」$R_{k}$ を求め、時定数 $\tau_k = R_k C_k$ を足し合わせるのです。

$$ f_{-3\text{dB}} \approx \frac{1}{2\pi \sum_k R_k C_k} $$

共通ソース増幅器に適用すると、$C_{gs}$ からは $R_s$ が見え、$C_{db}$ と $C_L$ からは $R_L$ が見えます。$C_{gd}$ からは、入出力をまたいでいるため $R_s + R_L + g_m R_s R_L$ という「増幅された」抵抗が見えます(この $g_m R_s R_L$ の項こそがミラー効果のOCTC版の顔です)。合計すると、

$$ \sum_k R_k C_k = R_s C_{gs} + (R_s + R_L + g_m R_s R_L)C_{gd} + R_L (C_{db} + C_L) $$

数値を入れると $10\text{k}\times50\text{f} + (10\text{k}+25\text{k}+2\text{m}\times10\text{k}\times25\text{k})\times10\text{f} + 25\text{k}\times30\text{f} = 0.5 + 5.35 + 0.75 = 6.6$ ns となり、$f_{-3\text{dB}} \approx 1/(2\pi \times 6.6\ \text{ns}) \approx 24.1$ MHz。厳密解の24.4 MHzを見事に言い当てています。項ごとの内訳を見ると、$C_{gd}$ の項が全体の81%を占めていることが一目瞭然です。どこを直せばいいかが即座にわかる、これがOCTCの威力です。

開放時定数法による帯域の内訳。RsCgsが0.50ns(8%)、Cgd項が5.35ns(81%)、RL(Cdb+CL)が0.75ns(11%)で合計6.60ns。OCTC概算24.1MHzと厳密解24.4MHzの比較棒グラフ

左の横棒グラフを見ると、3つの時定数のうち $C_{gd}$ に由来する項だけが突出して長く、他の2つを合わせても全体の19%にしかならないことがわかります。この項の中身は $g_m R_s R_L C_{gd}$、つまり「信号源抵抗と負荷抵抗と相互コンダクタンスの積」で、素子値としては最小の $C_{gd}$ が最大の時定数を作っているという逆説的な状況です。右のグラフが示すとおり、この足し算だけで厳密解を1%強の精度で当てられるので、設計中は「どの容量が何nsを食っているか」をOCTCで見ながら回路を直すのが定石になります。

利得帯域積の天井

さて、ここからがカスコードの必要性を決定づける議論です。利得と $-3$ dB帯域の積、すなわち利得帯域積(gain-bandwidth product, GBW)を計算してみます。

$$ \text{GBW} = |A_v| \cdot f_{p,in} = \frac{g_m R_L}{2\pi R_s \left[C_{gs} + (1+g_m R_L)C_{gd}\right]} $$

ここで「利得を上げるために $R_L$ を大きくしていく」という操作を考えます。$g_m R_L \gg 1$ かつ $g_m R_L C_{gd} \gg C_{gs}$ という極限を取ると、分母の括弧内は $g_m R_L C_{gd}$ に支配され、

$$ \begin{equation} \text{GBW} \xrightarrow[g_m R_L \to \infty]{} \frac{g_m R_L}{2\pi R_s \cdot g_m R_L C_{gd}} = \frac{1}{2\pi R_s C_{gd}} \end{equation} $$

$g_m$ も $R_L$ も約分されて消えてしまいました。利得帯域積は、信号源抵抗 $R_s$ とゲート-ドレイン容量 $C_{gd}$ だけで決まる天井を持つのです。トランジスタを大きくして $g_m$ を上げても($C_{gd}$ も比例して増えるので)改善しませんし、負荷抵抗をいくら大きくしても無駄です。数値では $1/(2\pi \times 10\text{k} \times 10\text{f}) \approx 1.59$ GHz。Python実装で $R_D$ を50 kΩから5 MΩまで振って厳密計算すると、GBWは 1.22 → 1.27 GHz とほとんど動かず、この天井の存在が確認できます。

負荷抵抗RDを1kΩから10MΩまで振ったときの直流利得・-3dB帯域・利得帯域積の変化。共通ソースのGBWは1.59GHzの天井に張り付き、カスコードは7.96GHzの天井に漸近する

3枚のグラフを左から追うと、この天井の意味がはっきりします。左のグラフでは、共通ソースの利得が $g_m r_o = 100$ で頭打ちになる($R_D$ を上げても $r_o$ との並列合成で決まってしまう)のに対し、カスコードの利得は $R_D$ に比例して伸び続けます。中央では両者とも帯域が下がっていきますが、右のGBWを見ると、共通ソースは $1/(2\pi R_s C_{gd}) = 1.59$ GHz という点線にぶつかって完全に平らになり、それ以上どうやっても増えません。カスコードのGBWはその 4〜5倍の高さにある別の点線 $g_m/(2\pi C_{out}) = 7.96$ GHz に向かって伸びており、「予算の総額そのものが違う」ことが読み取れます。

この結果は残酷です。素の共通ソース増幅器では、利得と帯域は交換可能な「予算」でしかなく、予算の総額は $C_{gd}$ が決めている。予算そのものを増やすには、$C_{gd}$ に紐づいた $g_m R_s R_L$ という時定数を、回路トポロジーのレベルで断ち切るしかありません。

その断ち切り方こそがカスコードです。次のセクションでは、まずカスコード回路の構造とバイアス条件を整理し、そのあとで「なぜミラー倍増が消えるのか」を式で追いかけます。

カスコード回路の構成と動作点

回路構成

カスコード増幅器は、共通ソース段 $M_1$ のドレインに、共通ゲート段 $M_2$ のソースを直結した構成です。

  • $M_1$: ソース接地、ゲートに入力信号 $v_{in}$、ドレインは中間ノード $X$
  • $M_2$: ソースがノード $X$、ゲートは直流バイアス $V_{b}$(交流的には接地)、ドレインが出力ノード $D$
  • 出力ノード $D$ に負荷(抵抗 $R_D$ または電流源負荷)と $V_{DD}$

$M_2$ のゲートは直流電圧で固定されているので、小信号的には接地されています。これが「共通ゲート」段の名の由来です。

直流的には、$M_1$ と $M_2$ は縦に直列なので同じ電流が流れます。$I_{D1} = I_{D2} = I_D$。したがって $M_1$ と $M_2$ のサイズが同じなら $g_{m1} = g_{m2}$、$r_{o1} = r_{o2}$ となります(本記事の数値例ではこれを仮定し、$g_m = 2$ mS、$r_o = 50$ kΩ とします)。

飽和条件とバイアス設計

カスコードで最初につまずくのが、$M_2$ のゲートバイアス $V_b$ の決め方です。条件は2つあります。

まず $M_1$ を飽和領域に保つには、そのドレイン電圧 $V_X$ が

$$ V_X \geq V_{GS1} – V_{th} = V_{ov1} $$

を満たす必要があります。次に、$M_2$ のソース電圧が $V_X$ なので、$V_X = V_b – V_{GS2}$ の関係があります。よって、

$$ V_b = V_X + V_{GS2} = V_X + V_{th} + V_{ov2} $$

$M_1$ をぎりぎり飽和させるには $V_X = V_{ov1}$ とすればよく、そのとき $V_b = V_{ov1} + V_{th} + V_{ov2}$ です。$V_{th} = 0.5$ V、$V_{ov1} = V_{ov2} = 0.2$ V とすると $V_b = 0.9$ V となります。ただし実際には温度変動やプロセスばらつきを見込んで、$V_X$ に少し余裕(100 mV程度)を持たせるのが定石です。

さらに $M_2$ 自身の飽和条件から、出力電圧の下限が決まります。

$$ V_{out} \geq V_X + V_{ov2} = V_{ov1} + V_{ov2} $$

カスコードのバイアス設計。VDD=1.8V、Vth=0.5V、Vov=0.2Vのとき、M1のVov1で0.2V、M2のVov2で0.4V、ゲートバイアスVbは0.9V、出力が動ける範囲は0.4〜1.6V。単段・カスコード・テレスコピックの出力範囲比較

左の縦積み図は、接地から $V_{DD}$ までの電圧を誰がどれだけ「食う」かを表しています。$M_1$ が下から0.2 V、$M_2$ がさらに0.2 Vを積み上げるので、出力が自由に動けるのは0.4 V以上の領域に限られ、$M_2$ のゲートに与えるべき $V_b$ は $V_X$ に $V_{GS2} = 0.7$ V を足した0.9 Vと決まります。右の棒グラフを見ると、段を縦に積むごとに出力振幅が $V_{ov}$ 1個分(0.2 V)ずつ削られていく様子がわかります。この「1段あたり0.2 V」という代償が、電源電圧の低い最新プロセスでは致命的になる — その話は後のフォールデッドカスコードのセクションで扱います。

$V_{ov} = 0.2$ V なら $V_{out} \geq 0.4$ V。素の共通ソース増幅器なら $V_{out} \geq V_{ov1} = 0.2$ V で済んだところが、倍になりました。カスコードは出力振幅を1つのオーバードライブ電圧分だけ犠牲にする — これがカスコードの代償で、後でフォールデッドカスコードを導入する動機になります。

小信号等価回路の節点

小信号解析の節点は、ゲート $G$、中間ノード $X$、出力 $D$ の3つに増えます。各素子の配置を整理しておきましょう。

  • 節点 $G$: $R_s$ で信号源に接続、$C_{gs1}$ で接地、$C_{gd1}$ で節点 $X$ に接続
  • 節点 $X$: $M_1$ の電流源 $g_{m1}v_g$ と $r_{o1}$ が接地へ、$C_{db1}$・$C_{sb2}$・$C_{gs2}$ が接地へ($M_2$ のゲートは交流接地なので $C_{gs2}$ は接地容量になる点に注意)、$C_{gd1}$ で節点 $G$ へ、$M_2$ のチャネルで節点 $D$ へ
  • 節点 $D$: $R_D$、$C_L$、$C_{db2}$、$C_{gd2}$($M_2$ のゲートが交流接地なのでこれも接地容量)が接地へ

$M_2$ のドレインからソースへ流れる電流は、$v_{gs2} = 0 – v_x = -v_x$ に注意すると、

$$ i_{d2} = g_{m2}v_{gs2} + \frac{v_d – v_x}{r_{o2}} = -g_{m2}v_x + \frac{v_d – v_x}{r_{o2}} $$

ここで重要なのは、$C_{gs2}$ と $C_{gd2}$ がどちらも「接地容量」になっていることです。$M_2$ のゲートが交流接地されているため、$M_2$ には入出力をまたぐ容量が存在しません。つまり $M_2$ にはミラー効果が生じない。共通ゲート段が高周波に強い理由がここにあります。

回路の構造とバイアスが把握できたところで、いよいよ核心 — なぜ $M_1$ のミラー効果が消えるのか — を定量的に導きましょう。

カスコードがミラー効果を断ち切る仕組み

ノード $X$ から上を見たインピーダンス

ミラー倍増の大きさは、$C_{gd1}$ の両端、すなわち節点 $G$ から節点 $X$ への電圧利得で決まります。この利得は $-g_{m1} R_X$ で、$R_X$ は「節点 $X$ から見た全インピーダンス」です。素の共通ソース増幅器では $R_X = R_L = 25$ kΩ でしたが、カスコードでは $M_2$ のソースから上を見ることになります。

共通ゲート段のソースから見たインピーダンスを求めましょう。節点 $X$ にテスト電流 $i_t$ を注入し、$r_{o1}$ と $M_1$ の電流源を一旦外して(それらは別途並列に扱います)、$M_2$ と負荷 $R_L$ だけを見ます。

$M_2$ に流れる電流は $i_t$、出力ノードの電圧は $v_d = -i_t R_L$(電流 $i_t$ が $X$ から $D$ を経て $R_L$ へ抜けるので、向きに注意して $v_d = -i_t R_L$)です。$M_2$ のチャネル電流の式から、

$$ i_t = -g_{m2}v_x + \frac{v_d – v_x}{r_{o2}} $$

ここに $v_d = -i_t R_L$ を代入すると、

$$ i_t = -g_{m2}v_x + \frac{-i_t R_L – v_x}{r_{o2}} $$

両辺に $r_{o2}$ を掛けて整理します。$i_t$ の項を左辺に集めると、

$$ i_t r_{o2} + i_t R_L = -g_{m2}r_{o2}v_x – v_x = -v_x(1 + g_{m2}r_{o2}) $$

したがって、$X$ から上を見たインピーダンス $R_{X,\text{up}} = -v_x/i_t$(符号は電流の向きの定義による)は次のようになります。

$$ \begin{equation} R_{X,\text{up}} = \frac{r_{o2} + R_L}{1 + g_{m2}r_{o2}} \approx \frac{1}{g_{m2}} + \frac{R_L}{g_{m2}r_{o2}} \end{equation} $$

最後の近似では $g_{m2}r_{o2} \gg 1$ を使いました。この式の読み方が大事です。

  • 第1項 $1/g_{m2}$: 共通ゲート段の本来の入力抵抗。$g_{m2} = 2$ mS なら 500 Ω
  • 第2項 $R_L/(g_{m2}r_{o2})$: 負荷抵抗が「$g_{m2}r_{o2}$ 分の1に縮小されて」見えてくる項。$R_L = 50$ kΩ、$g_{m2}r_{o2} = 100$ なら 500 Ω

つまり共通ゲート段は、上にぶら下がった負荷抵抗を固有利得分の1(1/100)に圧縮して下段に見せるのです。50 kΩが500 Ωになる。これがカスコードの魔法の中身です。

負荷抵抗RLに対して節点Xから見た抵抗がどう変わるかの両対数グラフ。共通ソースはRLそのものだがカスコードは(ro2+RL)/(1+gm2ro2)で1/gm2=500Ωが下限。右はミラー倍増率1+|Av1|の比較で51倍対2.98倍

左のグラフでは、共通ソースの「$M_1$ のドレインから見える抵抗」が負荷抵抗にそのまま比例して青い直線を描くのに対し、カスコードの赤い曲線は $1/g_{m2} = 500$ Ω という床に張り付いたまま、$R_L$ が $r_{o2}$(50 kΩ)を超えたあたりからようやくゆっくり立ち上がることがわかります。$R_D = 50$ kΩ の設計点では 50 kΩ が 990 Ω へ、実に50分の1に圧縮されています。右のグラフはその帰結で、$C_{gd1}$ の水増し率が共通ソースの51倍に対しカスコードでは2.98倍に留まります。ただし $R_L$ をさらに大きくしていくとカスコードの曲線も上がってくる点は見逃せず、この「電流源負荷にすると効かなくなるのでは」という疑問には次の小節で答えます。

ミラー倍増率の計算

数値を入れましょう。$r_{o2} = 50$ kΩ、$R_L = R_D = 50$ kΩ、$g_{m2} = 2$ mS なので、

$$ R_{X,\text{up}} = \frac{50\text{k} + 50\text{k}}{1 + 2\text{m}\times 50\text{k}} = \frac{100\text{k}}{101} \approx 990\ \Omega $$

節点 $X$ には $r_{o1} = 50$ kΩ も並列に入りますが、990 Ω に比べれば無視できるほど大きいので、$R_X \approx 990\ \Omega$ です。すると $G$ から $X$ への電圧利得は、

$$ A_{v1} = -g_{m1}R_X = -2\times10^{-3} \times 990 = -1.98 $$

素の共通ソース増幅器では $-50$ だった値が、$-1.98$ になりました。ミラー容量は、

$$ C_{in,\text{casc}} = C_{gs} + (1 + 1.98)C_{gd} = 50 + 29.8 = 79.8\ \text{fF} $$

560 fF が 79.8 fF へ、7.0分の1に激減しました。入力支配極は、

$$ f_{p,in} = \frac{1}{2\pi \times 10\text{k} \times 79.8\text{f}} \approx 199\ \text{MHz} $$

28.4 MHz から 199 MHz へ、7倍の改善です。

「実効利得が約1」の正確な条件

多くの教科書では「カスコードでは下段の電圧利得が約 $-1$ になるのでミラー効果が消える」と説明されます。上の計算では $-1.98$ で、$-1$ よりは2倍大きい。この差はどこから来るのでしょうか。

式 (4) を利得の形に書き直すと見えてきます。

$$ |A_{v1}| = g_{m1}R_X \approx \frac{g_{m1}}{g_{m2}}\left(1 + \frac{R_L}{r_{o2}}\right) $$

$g_{m1} = g_{m2}$ のとき、$|A_{v1}| \approx 1 + R_L/r_{o2}$ です。教科書の「約1」は $R_L \ll r_{o2}$ の場合の話で、今回のように $R_L = r_{o2}$ なら $|A_{v1}| = 2$ になるのは当然です。

そして、ここに重要な落とし穴があります。カスコードを高利得アンプとして使うとき、負荷は抵抗ではなく電流源(理想的には $R_L \to \infty$)にします。すると式 (4) から $R_{X,\text{up}} \to \infty$ となり、ミラー効果が復活してしまうように見えます。実際、$R_D = 5$ MΩ にして計算すると $R_X$ は数十kΩに達し、$|A_{v1}|$ は100近くまで戻ります。

これでカスコードは無意味になるのでしょうか。答えは「ならない」で、理由は周波数にあります。$R_L$ が非常に大きいとき、出力ノードには必ず容量 $C_{out}$ があるので、出力ノードのインピーダンスは $R_L \parallel 1/(sC_{out})$ です。関心のある周波数($-3$ dB帯域付近)では、この並列インピーダンスは容量性リアクタンス $1/(\omega C_{out})$ に支配され、$R_L$ の値によらず小さくなります。式 (4) の $R_L$ を $1/(\omega C_{out})$ で置き換えれば、$R_X$ は再び $1/g_{m2}$ 程度に落ち着く。

言い換えると、高インピーダンス負荷のカスコードでは、支配極は出力ノードに移り、入力ノードのミラー容量は「支配極よりずっと高い周波数」でしか効かないのです。Pythonで $R_D$ を 50 kΩ、500 kΩ、5 MΩ と振って厳密に計算すると、直流利得は 98 → 902 → 5000 と増え、$-3$ dB帯域は 67.9 → 8.2 → 1.5 MHz と下がりますが、GBWは 6.66 → 7.36 → 7.38 GHz とほぼ一定です。しかもこの値は $g_{m1}/(2\pi C_{out}) = 2\text{mS}/(2\pi\times 40\text{fF}) = 7.96$ GHz にほぼ一致します。

これが、共通ソース増幅器の $\text{GBW} \to 1/(2\pi R_s C_{gd}) = 1.59$ GHz という天井と対照的な、カスコードの本質的な優位です。

$$ \text{GBW}_{\text{CS}} \to \frac{1}{2\pi R_s C_{gd}}, \qquad \text{GBW}_{\text{casc}} \to \frac{g_{m1}}{2\pi C_{out}} $$

前者は信号源抵抗と寄生容量という「外的な制約」で決まり、後者はトランジスタの $g_m$ と負荷容量という「本来の限界」で決まります。カスコードは、増幅器を外的制約から解放して本来の限界まで走らせる回路なのです。

ミラー効果が断ち切られる理屈は掴めました。しかし世の中うまい話ばかりではありません。トランジスタが1個増えたということは、節点が1つ増えたということ。次はその新しい節点が持ち込む極を調べます。

中間ノードに生まれる新しい極

極の位置

節点 $X$ には、そこから見えるインピーダンス $R_X$ と、そこにぶら下がる容量 $C_X$ による極があります。容量の内訳は、

$$ C_X = C_{db1} + C_{gd1} + C_{gs2} + C_{sb2} $$

$C_{gd1}$ が入っているのは、ミラーの定理を出力側に適用したとき $(1 + 1/|A_{v1}|)C_{gd1}$ の分が節点 $X$ 側に現れるからです($|A_{v1}| \approx 2$ なので係数は1.5程度ですが、ここでは概算として1倍で数えます)。数値を入れると、

$$ C_X = 10 + 10 + 50 + 10 = 80\ \text{fF} $$

$C_{gs2}$ が支配的です。共通ゲート段のゲート容量が、そのままソース側の負荷になっているわけです。極の周波数は、

$$ f_{p,X} = \frac{1}{2\pi R_X C_X} = \frac{1}{2\pi \times 990 \times 80\times10^{-15}} \approx 2.0\ \text{GHz} $$

入力極(199 MHz)や出力極より1桁高いので、支配的にはなりません。これは偶然ではなく、$R_X$ が $1/g_{m2}$ という構造的に小さい値だからです。$C_X$ の主成分 $C_{gs2}$ と組み合わせると、

$$ f_{p,X} \approx \frac{g_{m2}}{2\pi C_{gs2}} \approx f_T $$

共通ソースとカスコードの極の配置を対数周波数軸上に並べた図。共通ソースは入力極28.4MHzが支配的で厳密帯域24.4MHz。カスコードは出力極80.4MHzが支配的で入力極199MHz、中間ノードXの極2.0GHzは遥か高域

極を周波数軸に並べると、カスコードで何が起きたのかが一目でわかります。上段の共通ソースでは最も低い極が入力極(28.4 MHz)で、これが厳密な $-3$ dB帯域24.4 MHzをほぼ決めています。下段のカスコードでは、その入力極が199 MHzまで7倍も右へ吹き飛び、代わって出力極80.4 MHzが支配的になりました。新しく増えた中間ノード $X$ の極は 2.0 GHz と、支配極より1桁以上高い場所にいるので邪魔をしません。ボトルネックが入力から出力へ移ったというのが、カスコードの周波数特性の本質です。

つまり中間ノードの極は、およそトランジスタの遷移周波数 $f_T$(電流利得が1になる周波数)のオーダーになります。これはそのプロセスで実現できる最高速の周波数なので、$f_T$ より十分低い周波数で使う限り、この極が問題になることはまずありません。よくできた回路です。

ただし例外もある

とはいえ、常に安全というわけではありません。

  • フォールデッドカスコードでは、節点 $X$ に折り返し用の電流源トランジスタもぶら下がるため $C_X$ が2〜3倍に増え、しかも下段と上段でチャネル型が違うため $R_X$ が $1/g_{m2}$ より大きくなりがちです。この極が位相余裕を食う主犯になることがあります
  • 大信号のスルーイング時には、節点 $X$ の電圧が一時的に大きく動き、$M_1$ が線形領域に落ちるなどして回復が遅れます
  • $M_2$ に基板バイアス効果(body effect)がある場合、実効的な相互コンダクタンスは $g_{m2} + g_{mb2}$ になります。$g_{mb} \approx 0.1$〜$0.3\,g_m$ 程度なので、$R_X$ はむしろ小さくなり、この極は高い方に動きます。つまり基板バイアス効果は、この観点ではむしろ味方です

新しい極が実害を出さないことがわかりました。次は、カスコードのもう一つの、そして本来最も有名な効能 — 出力抵抗の劇的な増大 — を導きます。

カスコードの出力抵抗

直感 — 「遮蔽」の効果

出力抵抗が上がる理由も、やはり節点 $X$ の電圧が動かないことに帰着します。

素の共通ソース増幅器では、出力ノードの電圧を $\Delta v$ 動かすと、$r_o$ を通じて $\Delta v / r_o$ の電流が変化します(チャネル長変調)。ところがカスコードでは、出力ノードを $\Delta v$ 動かしても、その変動は $M_2$ によって遮蔽され、節点 $X$ にはごくわずか($\Delta v / (g_{m2}r_{o2})$ 程度)しか伝わりません。$M_1$ から見ればドレイン電圧がほとんど動いていないので、$M_1$ の電流はほとんど変わらない。電圧を動かしても電流が変わらないということは、抵抗が高いということです。

厳密な導出

出力ノードにテスト電圧源 $v_t$ を印加し、流れ込む電流 $i_t$ を求めます。入力は接地($v_g = 0$)です。

$M_1$ は入力が接地されているので、$g_{m1}v_g = 0$ となり、節点 $X$ から接地へは $r_{o1}$ だけが繋がっています。したがって、

$$ v_x = i_t \, r_{o1} $$

(テスト電流 $i_t$ が $M_2$ を通って $X$ に流れ込み、$r_{o1}$ を通って接地へ抜けるため)

次に $M_2$ のチャネル電流の式を書きます。$v_{gs2} = -v_x$(ゲートは交流接地)なので、

$$ i_t = -g_{m2}v_x + \frac{v_t – v_x}{r_{o2}} $$

ここに $v_x = i_t r_{o1}$ を代入します。

$$ i_t = -g_{m2} i_t r_{o1} + \frac{v_t – i_t r_{o1}}{r_{o2}} $$

両辺に $r_{o2}$ を掛けると、

$$ i_t r_{o2} = -g_{m2}r_{o1}r_{o2} i_t + v_t – i_t r_{o1} $$

$i_t$ を含む項をすべて左辺に集めます。

$$ i_t\left(r_{o2} + r_{o1} + g_{m2}r_{o1}r_{o2}\right) = v_t $$

したがって出力抵抗は次のように求まります。

$$ \begin{equation} R_{out} = \frac{v_t}{i_t} = r_{o1} + r_{o2} + g_{m2}r_{o1}r_{o2} \approx g_{m2}r_{o2} \cdot r_{o1} \end{equation} $$

最後の近似では $g_{m2}r_{o2} \gg 1$ を使いました。式の形が美しい。下段の出力抵抗 $r_{o1}$ が、上段の固有利得 $g_{m2}r_{o2}$ 倍に増幅されて出てくるのです。

数値を入れると、

$$ R_{out} = 50\text{k} + 50\text{k} + 2\times10^{-3}\times 50\text{k}\times 50\text{k} = 100\text{k} + 5\text{M} = 5.1\ \text{M}\Omega $$

カスコードの出力抵抗。単段のro1=50kΩに対しカスコードは5.1MΩで101倍。右は電流源として使ったときの出力I-V特性で、Voutが1.4V動いたときの電流誤差が28%対0.3%

左の対数棒グラフは、トランジスタを1個足すだけで出力抵抗が2桁上がることを示しています。増幅率はちょうど $1 + g_{m2}r_{o2} = 101$ 倍で、これは上段の固有利得そのものです。右のグラフはこの効果を電流源として見たもので、出力電圧を0.4 Vから1.8 Vまで振ったとき、単段では電流が28%も増えてしまうのに対し、カスコードでは0.3%しか変わらず、理想電流源の水平線にほとんど重なっています。カレントミラーやバイアス回路にカスコードが必ず使われる理由が、この右のグラフに凝縮されています。

単体の $r_o = 50$ kΩ に対して102倍です。基板バイアス効果を含めるなら $g_{m2} \to g_{m2} + g_{mb2}$ と置き換えるだけで、さらに10〜30%増えます。

別の見方 — 帰還としての解釈

この結果は、帰還増幅回路の枠組みでも理解できます。$M_2$ のソース(節点 $X$)に $r_{o1}$ がぶら下がっている構成は、共通ソース段にソース縮退抵抗(source degeneration)を付けた構成そのものです。ソース縮退抵抗 $R_S$ を持つ段の出力抵抗の一般公式は、

$$ R_{out} = r_o + R_S + g_m r_o R_S = r_o(1 + g_m R_S) + R_S $$

これは直列帰還(電流帰還)による出力抵抗の増大であり、帰還量 $(1 + g_m R_S)$ 倍だけ $r_o$ が持ち上がる、という読み方ができます。$R_S = r_{o1}$ を代入すれば式 (5) と一致します。負帰還が出力抵抗を上げるという一般則の、具体的で強力な実例です。

電圧利得

出力抵抗が求まれば、電圧利得はすぐに書けます。カスコードは「$g_{m1}$ のトランスコンダクタが、$R_{out}$ と外部負荷 $R_L$ の並列合成に電流を流し込む」構成なので、

$$ \begin{equation} A_v = -g_{m1}\left(R_{out} \parallel R_L\right) \approx -g_{m1}\left(g_{m2}r_{o2}r_{o1} \parallel R_L\right) \end{equation} $$

理想電流源負荷($R_L \to \infty$)の極限では、

$$ A_v \to -g_{m1}g_{m2}r_{o1}r_{o2} = -(g_m r_o)^2 \quad (\text{同一デバイスのとき}) $$

固有利得の2乗です。$g_m r_o = 100$ なら $A_v = 10^4$、すなわち80 dB。単段の共通ソースが40 dBだったのに対し、トランジスタ1個追加で40 dB上乗せできる計算になります。実際には理想電流源は作れないので、負荷側もカスコード電流源にして $R_L \approx g_m r_o^2$ とし、並列合成で $A_v \approx -(g_m r_o)^2/2$(74 dB)程度を狙います。

数値例($R_D = 50$ kΩ の抵抗負荷)では、$R_{out} \parallel R_D = 5.1\text{M} \parallel 50\text{k} = 49.5$ kΩ、$A_v = -2\text{mS}\times 49.5\text{k} = -99$ です。素の共通ソース($-50$)のちょうど2倍で、これは $R_D$ が $r_o$ と同じ50 kΩだったために共通ソースでは並列合成で半分に削られていたのが、カスコードでは削られなくなったためです。

副次的な効能

出力抵抗が上がることの効能は、電圧利得だけではありません。

  • 電流源としての精度: カスコード電流源では、出力電圧が変動しても電流がほとんど変わりません。$\Delta I/I = \Delta V/(I R_{out})$ なので、$R_{out}$ が100倍になれば電流誤差は100分の1です
  • 逆方向アイソレーション: 出力から入力への信号の漏れ($C_{gd1}$ 経由)が抑えられるため、RF増幅器では $S_{12}$ が改善し、安定性(Rollettの $K$ 係数)が良くなります。単段共通ソースのRFアンプが発振しやすいのに対し、カスコードLNAが安定なのはこのためです
  • チャネル長変調の緩和: $M_1$ のドレイン電圧がほぼ固定されるので、$M_1$ の動作点が安定します。カレントミラーの整合精度が上がる理由でもあります

利得も帯域も出力抵抗も良くなる、いいことずくめに見えます。しかし冒頭のバイアス設計で触れたとおり、カスコードは電圧の「縦積み」なので、電源電圧が下がると途端に苦しくなります。次はこの問題と、その解決策であるフォールデッドカスコードを見ていきます。

電圧余裕の壁とフォールデッドカスコード

ヘッドルームの計算

微細CMOSプロセスでは、ゲート酸化膜の耐圧の制約から電源電圧 $V_{DD}$ がどんどん下がってきました。180 nm世代で1.8 V、65 nm世代で1.2 V、それ以下では1.0 V前後です。一方で、しきい値電圧 $V_{th}$ はそれほど下がらない(サブスレッショルドリークの制約があるため)。この「電圧の縦積み予算」が、カスコードにとって深刻な制約になります。

典型的なテレスコピックカスコード(差動対+カスコード+カスコード負荷)の縦積みを、$V_{DD} = 1.8$ V、$V_{th} = 0.5$ V、$V_{ov} = 0.2$ V で数えてみましょう。接地側から順に、

  1. テール電流源: $V_{ov} = 0.2$ V
  2. 入力トランジスタ $M_1$: $V_{ov} = 0.2$ V
  3. カスコードトランジスタ $M_2$: $V_{ov} = 0.2$ V
  4. PMOSカスコード負荷: $V_{ov} = 0.2$ V
  5. PMOS電流源負荷: $V_{ov} = 0.2$ V

出力電圧の下限は $V_{out,\min} = V_{ov,\text{tail}} + V_{ov1} + V_{ov2} = 0.6$ V、上限は $V_{out,\max} = V_{DD} – 2V_{ov} = 1.4$ V です。片側出力の振幅は $1.4 – 0.6 = 0.8$ V、すなわち $V_{DD} – 5V_{ov}$。$V_{DD} = 1.0$ V のプロセスなら $1.0 – 1.0 = 0$ V となり、振幅がまったく取れません

入力同相電圧範囲という、もっと深刻な問題

テレスコピックカスコードには、振幅よりさらに厄介な制約があります。入力の同相電圧(コモンモード電圧)範囲がほとんど無いのです。

入力トランジスタ $M_1$ を飽和させるには、そのドレイン電圧 $V_X$ が $V_{in,CM} – V_{th}$ 以上でなければなりません。一方 $V_X$ の下限は $V_{ov,\text{tail}} + V_{ov1} = 0.4$ V です。したがって、

$$ V_{in,CM} \leq V_X + V_{th} = 0.4 + 0.5 = 0.9\ \text{V} $$

ところが同時に、テール電流源を飽和させるには入力トランジスタのソース電圧が $V_{ov,\text{tail}} = 0.2$ V 以上必要で、$V_{in,CM} = V_{S} + V_{GS1} = V_S + V_{th} + V_{ov1}$ なので、

$$ V_{in,CM} \geq 0.2 + 0.5 + 0.2 = 0.9\ \text{V} $$

上限と下限がぴったり0.9 Vで一致してしまいました。入力同相電圧範囲がゼロです。しかも入力の同相電圧が0.9 V、出力の範囲が0.6〜1.4 Vなので、入力と出力を直結する構成(ユニティゲインバッファ)が原理的に作れません。サンプルホールド回路やスイッチトキャパシタ回路では、アンプの入出力を帰還でつなぐのが基本ですから、これは致命的です。

フォールデッドカスコードの発想

この行き詰まりを打開するのがフォールデッドカスコード(folded cascode)です。発想は単純で、「上に積めないなら、信号電流を一度折り返して(fold)から積み直せばよい」というものです。

具体的には、カスコードトランジスタ $M_2$ を、$M_1$ と逆のチャネル型にします。$M_1$ がNMOSなら $M_2$ はPMOS。$M_1$ のドレイン(節点 $X$)には、$V_{DD}$ からPMOS電流源 $M_3$ が電流を供給し、その一部を $M_1$ が吸い込み、残りが $M_2$(PMOS)のソースへ流れ込みます。$M_2$ のドレインは出力ノードで、そこからNMOSカスコード電流源を通じて接地へ落ちます。

信号電流の経路を追うと、$M_1$ で下向きに作られた信号電流が、節点 $X$ で向きを変えて $M_2$ を通り、再び出力ノードへ向かう — この「Uターン」が folded の名の由来です。

フォールデッドカスコードの何が良いのか

第一に、入力同相電圧範囲が広がります。 $M_1$(NMOS)のドレイン $V_X$ は、いまや $V_{DD}$ 側の電流源が支える節点なので、比較的高い電圧に置けます。$M_3$(PMOS電流源)の飽和条件は $V_X \leq V_{DD} – V_{ov3} = 1.6$ V、$M_1$ の飽和条件は $V_X \geq V_{in,CM} – V_{th} $。この2つから、

$$ V_{in,CM} \leq V_X + V_{th} \leq 1.6 + 0.5 = 2.1\ \text{V} > V_{DD} $$

つまり入力同相電圧は $V_{DD}$ まで上げられる。下限はテレスコピックと同じ0.9 Vなので、範囲は 0.9〜1.8 V の0.9 V幅になりました。テレスコピックのゼロ幅とは天と地の差です。入出力を直結してユニティゲインバッファを組むことも問題なくできます。

第二に、出力振幅が広がります。 出力ノードの縦積みは、上側がPMOS電流源+PMOSカスコード($2V_{ov}$)、下側がNMOSカスコード+NMOS電流源($2V_{ov}$)で、

$$ V_{out}: \quad 2V_{ov} \leq V_{out} \leq V_{DD} – 2V_{ov} $$

すなわち振幅は $V_{DD} – 4V_{ov} = 1.8 – 0.8 = 1.0$ V。テレスコピックの0.8 Vより 0.2 V($V_{ov}$ 1個分)広い。テール電流源が出力の縦積みから外れたぶんが効いています。

第三に、入力段と出力段のチャネル型が独立に選べます。 入力にPMOSを使って1/fノイズを減らしつつ、出力段はNMOSカスコードで速度を稼ぐ、といった設計が可能です。

フォールデッドカスコードの代償

もちろん、ただでは手に入りません。

  • 消費電流が増える: 節点 $X$ の電流源 $M_3$ は、$M_1$ の電流と $M_2$ の電流の両方を賄う必要があります。$I_{M3} = I_{M1} + I_{M2}$ なので、同じ $g_{m1}$ を得るのに総電流はおよそ2倍になります
  • 雑音が増える: 折り返し用電流源 $M_3$ とカスコード電流源が、それぞれ雑音電流を出力に注ぎ込みます。入力換算雑音はテレスコピックより悪化します
  • 利得がやや下がる: 節点 $X$ を見た抵抗が $r_{o1} \parallel r_{o3}$ になるため、上向きの出力抵抗が $g_{m2}r_{o2}(r_{o1}\parallel r_{o3})$ となり、テレスコピックの $g_{m2}r_{o2}r_{o1}$ より小さくなります
  • 節点 $X$ の極が下がる: $M_1$、$M_2$、$M_3$ の3つのトランジスタの容量が節点 $X$ に集まるため $C_X$ が増え、非支配極が下がって位相余裕を食います

要するに、フォールデッドカスコードは「電圧余裕と入力レンジを、電流・雑音・利得と引き換えに買う」回路です。低電圧プロセスでは、この取引を受け入れる以外に選択肢がないことが多く、実務では圧倒的に多用されます。

理論的な道具立てが揃いました。ここからはPythonで、これまで導いた式が本当に正しいのかを、近似を使わない厳密な節点解析で確かめていきましょう。

Pythonによる周波数応答の解析

節点方程式を直接解く

ミラー近似は見通しを与えてくれますが、近似です。ここでは近似を一切使わず、小信号等価回路の節点方程式を各周波数で数値的に解いて、厳密な伝達関数を得ます。まずは共通ソース増幅器から。

import numpy as np

# --- デバイス・回路パラメータ(共通) ---
gm1 = gm2 = 2e-3      # 相互コンダクタンス [S]
ro1 = ro2 = 50e3      # 出力抵抗 [Ω](固有利得 gm*ro = 100)
Cgs = 50e-15          # ゲート-ソース容量 [F]
Cgd = 10e-15          # ゲート-ドレイン容量 [F]
Cdb = 10e-15          # ドレイン-基板容量 [F]
Csb = 10e-15          # ソース-基板容量 [F]
CL  = 20e-15          # 外部負荷容量 [F]
Rs  = 10e3            # 信号源抵抗 [Ω]
RD  = 50e3            # 負荷抵抗 [Ω]

def cs_tf(s, Rd=RD):
    """共通ソース増幅器の電圧利得 vout/vin(節点方程式を厳密に解く)"""
    A = np.zeros((2, 2), dtype=complex)   # 未知数 [vg, vd]
    b = np.zeros(2, dtype=complex)
    # 節点G: (vg-vin)/Rs + s*Cgs*vg + s*Cgd*(vg-vd) = 0   (vin=1 とする)
    A[0, 0] = 1/Rs + s*Cgs + s*Cgd
    A[0, 1] = -s*Cgd
    b[0]    = 1/Rs
    # 節点D: gm*vg + vd/Rd + vd/ro1 + s*(CL+Cdb)*vd + s*Cgd*(vd-vg) = 0
    A[1, 0] = gm1 - s*Cgd
    A[1, 1] = 1/Rd + 1/ro1 + s*(CL + Cdb) + s*Cgd
    return np.linalg.solve(A, b)[1]

# 直流利得の確認
print("CS 直流利得 =", abs(cs_tf(1j*2*np.pi*1.0)))
print("手計算 gm*(RD||ro) =", gm1/(1/RD + 1/ro1))

出力は CS 直流利得 = 50.0手計算 gm*(RD||ro) = 50.0 で、両者は完全に一致します。節点方程式の立て方が正しいことが確認できました。念のため補足すると、$1$ Hz を「直流」の代わりに使っているのは、$s = 0$ を厳密に代入しても同じ結果になりますが、実装上 $s$ を複素数で統一しておくためです。

カスコードの節点方程式

続いてカスコードです。未知数が $v_g$、$v_x$、$v_d$ の3つに増えます。$M_2$ のゲートは交流接地なので、$v_{gs2} = -v_x$ である点に注意してください。

def casc_tf(s, Rd=RD):
    """カスコード増幅器の電圧利得 vout/vin(3節点の連立方程式)"""
    A = np.zeros((3, 3), dtype=complex)   # 未知数 [vg, vx, vd]
    b = np.zeros(3, dtype=complex)
    # 節点G: (vg-vin)/Rs + s*Cgs*vg + s*Cgd*(vg-vx) = 0
    A[0, 0] = 1/Rs + s*Cgs + s*Cgd
    A[0, 1] = -s*Cgd
    b[0]    = 1/Rs
    # 節点X: gm1*vg + vx/ro1 + s*(Cdb+Csb+Cgs)*vx + s*Cgd*(vx-vg) - id2 = 0
    #        id2 = -gm2*vx + (vd-vx)/ro2   (M2のドレイン→ソース向き)
    A[1, 0] = gm1 - s*Cgd
    A[1, 1] = 1/ro1 + s*(Cdb + Csb + Cgs) + s*Cgd + gm2 + 1/ro2
    A[1, 2] = -1/ro2
    # 節点D: id2 + vd/Rd + s*(CL+Cgd+Cdb)*vd = 0
    A[2, 1] = -gm2 - 1/ro2
    A[2, 2] = 1/ro2 + 1/Rd + s*(CL + Cgd + Cdb)
    return np.linalg.solve(A, b)[2]

print("カスコード 直流利得 =", abs(casc_tf(1j*2*np.pi*1.0)))
Rout = ro1 + ro2 + gm2*ro1*ro2
print("Rout = %.2f MΩ,  手計算 gm1*(Rout||RD) = %.1f" % (Rout/1e6, gm1/(1/Rout + 1/RD)))

実行すると カスコード 直流利得 = 98.06Rout = 5.10 MΩ, 手計算 gm1*(Rout||RD) = 99.0 となります。式 (5) で導いた $R_{out} = r_{o1}+r_{o2}+g_{m2}r_{o1}r_{o2} = 5.1$ MΩ が節点解析と整合し、利得も手計算の99に対して数値解98.1とよく一致しました。わずかな差は、手計算では無視した $M_2$ 経由の細かい経路によるものです。同じ負荷抵抗50 kΩでも、カスコードのほうが利得が約2倍高い点に注目してください。

ボード線図の比較

次に、両者の周波数応答を重ねてプロットします。あわせて $-3$ dB帯域を二分探索で求めます。

import numpy as np
import matplotlib, matplotlib.pyplot as plt
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

def f3db(tf):
    """-3dB帯域を対数二分探索で求める"""
    dc = abs(tf(1j*2*np.pi*1.0))
    lo, hi = 1e3, 1e13
    for _ in range(200):
        mid = np.sqrt(lo*hi)
        if abs(tf(1j*2*np.pi*mid)) > dc/np.sqrt(2):
            lo = mid
        else:
            hi = mid
    return dc, np.sqrt(lo*hi)

f = np.logspace(4, 11, 800)                 # 10 kHz 〜 100 GHz
s = 1j*2*np.pi*f
H_cs   = np.array([cs_tf(si)   for si in s])
H_casc = np.array([casc_tf(si) for si in s])

dc_cs,   bw_cs   = f3db(cs_tf)
dc_casc, bw_casc = f3db(casc_tf)
print("CS      : Av=%.1f (%.1f dB), f_3dB=%.1f MHz, GBW=%.2f GHz"
      % (dc_cs, 20*np.log10(dc_cs), bw_cs/1e6, dc_cs*bw_cs/1e9))
print("カスコード: Av=%.1f (%.1f dB), f_3dB=%.1f MHz, GBW=%.2f GHz"
      % (dc_casc, 20*np.log10(dc_casc), bw_casc/1e6, dc_casc*bw_casc/1e9))

実行結果は次のようになります。

CS      : Av=50.0 (34.0 dB), f_3dB=24.4 MHz, GBW=1.22 GHz
カスコード: Av=98.1 (39.8 dB), f_3dB=67.9 MHz, GBW=6.66 GHz

利得は約2倍(5.9 dB増)、帯域は2.8倍、そして利得帯域積は5.4倍になりました。ミラー効果を断つことの効果が、単なる帯域改善にとどまらず、利得と帯域の「予算総額」そのものを増やしていることが数値で確認できます。手計算のミラー近似では入力極が28.4 MHz(CS)と199 MHz(カスコード)でしたが、厳密解ではカスコードの帯域は67.9 MHzです。これはカスコードでは入力極ではなく出力極($R_{out}\parallel R_D = 49.5$ kΩ と $C_{out} = 40$ fF で 80.4 MHz)が支配的になったためで、まさに「ボトルネックが入力から出力へ移動した」ことを示しています。

続いてボード線図を描きます。

fig, ax = plt.subplots(2, 1, figsize=(9, 8), sharex=True)

ax[0].semilogx(f, 20*np.log10(np.abs(H_cs)),   lw=2, label="共通ソース(ミラー効果あり)")
ax[0].semilogx(f, 20*np.log10(np.abs(H_casc)), lw=2, label="カスコード")
ax[0].axhline(20*np.log10(dc_cs/np.sqrt(2)),   ls=":", c="C0")
ax[0].axhline(20*np.log10(dc_casc/np.sqrt(2)), ls=":", c="C1")
ax[0].plot([bw_cs, bw_casc], [20*np.log10(dc_cs/np.sqrt(2)),
           20*np.log10(dc_casc/np.sqrt(2))], "kv", ms=9)
ax[0].annotate("帯域 %.0f MHz" % (bw_cs/1e6),   (bw_cs, 20), color="C0")
ax[0].annotate("帯域 %.0f MHz" % (bw_casc/1e6), (bw_casc, 26), color="C1")
ax[0].set_ylabel("電圧利得 [dB]"); ax[0].set_ylim(-40, 50)
ax[0].set_title("共通ソース vs カスコード:周波数応答(同一負荷 $R_D$ = 50 kΩ)")
ax[0].grid(True, which="both", alpha=0.3); ax[0].legend()

ax[1].semilogx(f, np.unwrap(np.angle(-H_cs))*180/np.pi,   lw=2, label="共通ソース")
ax[1].semilogx(f, np.unwrap(np.angle(-H_casc))*180/np.pi, lw=2, label="カスコード")
ax[1].set_xlabel("周波数 [Hz]"); ax[1].set_ylabel("位相 [度](反転分を除く)")
ax[1].grid(True, which="both", alpha=0.3); ax[1].legend()
plt.tight_layout(); plt.show()

共通ソースとカスコードのボード線図。上段の利得はカスコードが39.8dBで折れ点67.9MHz、共通ソースが34.0dBで折れ点24.4MHz。下段の位相はカスコードのほうが高周波まで-90度付近に留まる

このボード線図から3つのことが読み取れます。第一に、低域ではカスコードの利得のほうが約6 dB高い(出力抵抗が高いので同じ $R_D$ でも並列合成で削られない)こと。第二に、共通ソースの折れ点が24 MHz付近であるのに対しカスコードは68 MHz付近にあり、カスコードの曲線が共通ソースの曲線を完全に「覆っている」こと — つまりどの周波数を取ってもカスコードのほうが利得が高い。第三に、位相特性を見ると、共通ソースは早い段階から位相が遅れ始めるのに対し、カスコードは高周波まで $-90°$ 付近にとどまり、GHz帯に入ってから第2・第3の極で急速に回ること。多段構成でこの回路を使うなら、位相余裕の観点でもカスコードが有利です。

同じ利得に揃えた公平な比較

「カスコードは利得も高いのだから帯域が広いのは当然では」という疑問はもっともです。そこで、カスコードの負荷抵抗を下げて直流利得を共通ソースと同じ50に揃え、帯域だけを比較します。

from scipy.optimize import brentq
import numpy as np

# カスコードの直流利得が 50 になる負荷抵抗を探す
Req = brentq(lambda R: abs(casc_tf(1j*2*np.pi*1.0, R)) - dc_cs, 1e3, 60e3)
dc_eq, bw_eq = f3db(lambda s: casc_tf(s, Req))
print("同一利得カスコード: RD=%.2f kΩ, Av=%.1f, f_3dB=%.1f MHz (CS比 %.2f 倍)"
      % (Req/1e3, dc_eq, bw_eq/1e6, bw_eq/bw_cs))

# 負荷抵抗を振ったときの GBW の推移
for R in [50e3, 500e3, 5e6]:
    d1, b1 = f3db(lambda s: cs_tf(s, R))
    d2, b2 = f3db(lambda s: casc_tf(s, R))
    print("RD=%7.0f Ω | CS: Av=%6.1f GBW=%.2f GHz | Casc: Av=%7.1f GBW=%.2f GHz"
          % (R, d1, d1*b1/1e9, d2, d2*b2/1e9))
print("CS の理論天井  1/(2*pi*Rs*Cgd) = %.2f GHz" % (1/(2*np.pi*Rs*Cgd)/1e9))
print("Casc の理論天井 gm/(2*pi*Cout) = %.2f GHz" % (gm1/(2*np.pi*(CL+Cgd+Cdb))/1e9))

出力は次のようになります。

同一利得カスコード: RD=25.37 kΩ, Av=50.0, f_3dB=112.5 MHz (CS比 4.61 倍)
RD=  50000 Ω | CS: Av=  50.0 GBW=1.22 GHz | Casc: Av=   98.1 GBW=6.66 GHz
RD= 500000 Ω | CS: Av=  90.9 GBW=1.27 GHz | Casc: Av=  901.8 GBW=7.36 GHz
RD=5000000 Ω | CS: Av=  99.0 GBW=1.27 GHz | Casc: Av= 5000.0 GBW=7.38 GHz

ここが本記事で最も重要な数値結果です。まず、利得を完全に揃えても、カスコードの帯域は4.6倍です。利得が高いから帯域が広いのではなく、ミラー効果を断ったこと自体が帯域を稼いでいます。次に、負荷抵抗を50 kΩから5 MΩまで100倍に振っても、共通ソースのGBWは 1.22 → 1.27 GHz とほとんど動かず、理論天井 $1/(2\pi R_s C_{gd}) = 1.59$ GHz に張り付いたまま利得だけが 50 → 99 で頭打ちになります。一方カスコードのGBWは 6.66 → 7.38 GHz で、こちらの理論天井 $g_m/(2\pi C_{out}) = 7.96$ GHz に漸近しつつ、利得は 98 → 5000(74 dB)まで伸びます。共通ソースは「利得を買うと帯域を失う」のに対し、カスコードは「利得を買っても帯域予算が減らない」のです。

ミラー容量の可視化

利得を変えたときに入力容量がどう膨らむかを、共通ソースとカスコードで比べてみましょう。式 (1) と式 (4) をそのまま数値化します。

import numpy as np, matplotlib.pyplot as plt

RL_list = np.logspace(3, 6, 60)                        # 負荷抵抗 1 kΩ 〜 1 MΩ
Av_cs   = gm1/(1/RL_list + 1/ro1)                      # CS の直流利得
Cin_cs  = Cgs + (1 + Av_cs)*Cgd                        # ミラー近似
RX      = (ro2 + RL_list)/(1 + gm2*ro2)                # 式(4)
Cin_ca  = Cgs + (1 + gm1*RX)*Cgd

fig, ax = plt.subplots(1, 2, figsize=(12, 4.5))
ax[0].loglog(Av_cs, Cin_cs*1e15, lw=2, label="共通ソース $C_{gs}+(1+|A_v|)C_{gd}$")
ax[0].loglog(Av_cs, Cin_ca*1e15, lw=2, label="カスコード")
ax[0].axhline(Cgs*1e15, ls="--", c="gray", label="$C_{gs}$ のみ(理想)")
ax[0].set_xlabel("直流電圧利得 $|A_v|$"); ax[0].set_ylabel("実効入力容量 [fF]")
ax[0].set_title("ミラー効果による入力容量の膨張"); ax[0].grid(alpha=0.3); ax[0].legend()

ax[1].loglog(Av_cs, 1/(2*np.pi*Rs*Cin_cs)/1e6, lw=2, label="共通ソース")
ax[1].loglog(Av_cs, 1/(2*np.pi*Rs*Cin_ca)/1e6, lw=2, label="カスコード")
ax[1].set_xlabel("直流電圧利得 $|A_v|$"); ax[1].set_ylabel("入力極 $f_{p,in}$ [MHz]")
ax[1].set_title("入力極の利得依存性($R_s$ = 10 kΩ)"); ax[1].grid(alpha=0.3); ax[1].legend()
plt.tight_layout(); plt.show()

直流利得を横軸にとった実効入力容量と入力極の両対数グラフ。共通ソースの入力容量は利得に比例して1pFまで増えるが、カスコードは100fF程度に留まる。入力極も同様にカスコードが高い位置を保つ

左のグラフでは、共通ソースの入力容量が利得にほぼ比例して直線的に増えていく(両対数で傾き1)のに対し、カスコードの曲線はずっと低い位置で緩やかにしか上がらないことがわかります。利得100の点で比べると、共通ソースが約1 pFに達するのに対し、カスコードは100 fF程度です。右のグラフはその帰結で、共通ソースの入力極は利得に反比例して落ちていくのに、カスコードの入力極は高い位置を保ち続けます。「利得を上げると帯域が落ちる」という共通ソースの宿命が、カスコードでは緩和されている様子が視覚的に確認できます。

信号源抵抗への依存性 — カスコードが効かない場合

最後に、カスコードが常に得とは限らないことも確かめておきましょう。ミラー効果の害は $R_s C_{in}$ という積で効くので、$R_s$ が小さければそもそも問題になりません。

import numpy as np

print("  Rs [Ω] |   CS f_3dB   |  Casc f_3dB  |  CS GBW  | Casc GBW")
for R in [1e3, 3e3, 10e3, 30e3, 100e3]:
    Rs = R                                   # グローバル変数を書き換えて再評価
    d1, b1 = f3db(cs_tf)
    d2, b2 = f3db(casc_tf)
    print("%8.0f | %8.1f MHz | %8.1f MHz | %5.2f GHz | %5.2f GHz"
          % (R, b1/1e6, b2/1e6, d1*b1/1e9, d2*b2/1e9))
Rs = 10e3   # 元に戻す

実行結果は次の通りです。

  Rs [Ω] |   CS f_3dB   |  Casc f_3dB  |  CS GBW  | Casc GBW
    1000 |    104.5 MHz |     78.3 MHz |  5.22 GHz |  7.67 GHz
    3000 |     60.8 MHz |     76.7 MHz |  3.04 GHz |  7.52 GHz
   10000 |     24.4 MHz |     67.9 MHz |  1.22 GHz |  6.66 GHz
   30000 |      9.0 MHz |     45.1 MHz |  0.45 GHz |  4.43 GHz
  100000 |      2.8 MHz |     18.5 MHz |  0.14 GHz |  1.81 GHz

信号源抵抗Rsを0.5kΩから200kΩまで振ったときの-3dB帯域と利得帯域積。Rsが2.0kΩより小さいと共通ソースの帯域が上回るが、GBWでは全域でカスコードが優位で100kΩでは13倍の差

グラフにすると、表の数字が示していた「逆転」が起きる境界がはっきりします。左の $-3$ dB帯域では2本の曲線が $R_s \approx 2$ kΩ で交差しており、それより左(低インピーダンス駆動)では共通ソースのほうが広帯域です。カスコードの曲線は $R_s$ が10 kΩ程度までほとんど平らで、これは支配極が出力側にあって $R_s$ に鈍感なためです。一方の共通ソースは $R_s$ に反比例して落ちていくので、右に行くほど差が開きます。右のGBWでは全域でカスコードが上にあり、$R_s = 100$ kΩ では13倍もの開きになります。

$R_s = 1$ kΩ では、なんと共通ソースのほうが $-3$ dB帯域が広い(104.5 MHz 対 78.3 MHz)という逆転が起きています。ミラー容量が問題にならないほど信号源が低インピーダンスなら、カスコードは中間ノードの余分な極を持ち込むだけの「重り」になり得るのです。ただし利得はカスコードのほうが2倍高いので、GBWで比べれば依然としてカスコードの勝ち(7.67 GHz 対 5.22 GHz)です。$R_s$ が大きくなるほど差は開き、$R_s = 100$ kΩ では帯域で6.6倍、GBWで13倍の差になります。カスコードは「信号源インピーダンスが高いほど効く」技法である、という設計指針がここから読み取れます。

フォールデッドカスコードのヘッドルーム比較

最後に、テレスコピックとフォールデッドの電圧余裕を計算して棒グラフで比較します。

import numpy as np, matplotlib.pyplot as plt

VDD, Vth, Vov = 1.8, 0.5, 0.2

# テレスコピックカスコード(差動)
tel_out_lo = 3*Vov                    # Vov_tail + Vov1 + Vov2
tel_out_hi = VDD - 2*Vov              # PMOSカスコード + PMOS電流源
tel_cm_lo  = Vov + Vth + Vov          # テール電流源の飽和条件
tel_cm_hi  = 2*Vov + Vth              # M1 の飽和条件 (Vx_min + Vth)

# フォールデッドカスコード(NMOS入力・PMOS折り返し)
fol_out_lo = 2*Vov                    # NMOSカスコード + NMOS電流源
fol_out_hi = VDD - 2*Vov              # PMOSカスコード + PMOS電流源
fol_cm_lo  = Vov + Vth + Vov
fol_cm_hi  = min(VDD, (VDD - Vov) + Vth)   # Vx <= VDD - Vov3 の制約

print("テレスコピック: 出力振幅 %.2f V, 入力同相範囲 %.2f V (%.2f〜%.2f V)"
      % (tel_out_hi-tel_out_lo, max(0, tel_cm_hi-tel_cm_lo), tel_cm_lo, tel_cm_hi))
print("フォールデッド : 出力振幅 %.2f V, 入力同相範囲 %.2f V (%.2f〜%.2f V)"
      % (fol_out_hi-fol_out_lo, fol_cm_hi-fol_cm_lo, fol_cm_lo, fol_cm_hi))

出力は次の通りです。

テレスコピック: 出力振幅 0.80 V, 入力同相範囲 0.00 V (0.90〜0.90 V)
フォールデッド : 出力振幅 1.00 V, 入力同相範囲 0.90 V (0.90〜1.80 V)

先ほど手計算で示した通り、$V_{DD} = 1.8$ V・$V_{ov} = 0.2$ Vの条件でテレスコピックの入力同相範囲は文字通りゼロになります。実際にはこれは「動作点として一点しか許されない」という意味なので、ばらつきを考えると設計不能です。フォールデッドでは 0.9 V 幅の余裕が生まれ、しかも出力振幅も 0.2 V 広い。この差が、低電圧プロセスでフォールデッドカスコードが標準的に使われる理由です。

import numpy as np, matplotlib.pyplot as plt

vdds = np.linspace(0.8, 2.5, 200)
fig, ax = plt.subplots(figsize=(9, 5))
ax.plot(vdds, vdds - 5*Vov, lw=2, label="テレスコピック 出力振幅 ($V_{DD}-5V_{ov}$)")
ax.plot(vdds, vdds - 4*Vov, lw=2, label="フォールデッド 出力振幅 ($V_{DD}-4V_{ov}$)")
ax.plot(vdds, vdds - 2*Vov, lw=2, ls="--", label="単段共通ソース ($V_{DD}-2V_{ov}$)")
ax.axhline(0, c="k", lw=0.8)
ax.axvline(1.0, c="gray", ls=":"); ax.text(1.02, 1.6, "65 nm 世代\n$V_{DD}$=1.0 V", fontsize=9)
ax.axvline(1.8, c="gray", ls=":"); ax.text(1.82, 1.6, "180 nm 世代\n$V_{DD}$=1.8 V", fontsize=9)
ax.set_xlabel("電源電圧 $V_{DD}$ [V]"); ax.set_ylabel("片側出力振幅 [V]")
ax.set_title("電源電圧と出力振幅($V_{ov}$ = 0.2 V)")
ax.grid(alpha=0.3); ax.legend(); plt.tight_layout(); plt.show()

テレスコピックとフォールデッドカスコードの電圧余裕比較。VDD=1.8Vでテレスコピックは出力振幅0.80Vだが入力同相範囲がゼロ、フォールデッドは出力1.00V・入力同相範囲0.90V。右は電源電圧に対する出力振幅の直線

左の棒グラフで一番目を引くのは、テレスコピックの入力同相範囲が棒ですらなく「×」印になっていることです。上限と下限がぴったり0.9 Vで一致し、幅がゼロ — つまり動作点が一点しか許されず、ばらつきを考えれば設計不能です。フォールデッドではここに0.90 Vの幅が生まれ、出力振幅も0.2 V広がります。右のグラフでは、テレスコピックの出力振幅が $V_{DD} = 1.0$ V でゼロを切って赤い領域に沈むのに対し、フォールデッドは0.2 V、単段共通ソースなら0.6 Vが残ることが読み取れます。

このグラフから、電源電圧が下がるにつれて縦積みの代償が急速に重くなる様子がわかります。$V_{DD} = 1.0$ V ではテレスコピックの出力振幅はゼロ、フォールデッドでも0.2 Vしか残りません。単段共通ソースなら0.6 V取れることと比べると、カスコードの高利得は決して安くない買い物です。近年の低電圧設計で、カスコードの代わりに多段構成+周波数補償ゲインブーストが選ばれることがあるのは、この制約が直接の理由です。

設計上の注意点

理論と数値で見てきた内容を、実務的なチェックリストの形にまとめておきます。

カスコードが効く条件 — ミラー効果は $R_s \cdot (1+|A_v|)C_{gd}$ という時定数で効くので、$R_s$ が小さい場合(前段がバッファやソースフォロワの場合)はカスコードの帯域改善効果は小さくなります。Python実装で確認した通り、$R_s = 1$ kΩ では逆転すら起こりました。逆にセンサ直結、高インピーダンス整合、大きなトランジスタを駆動する場合ほど効きます。

$M_2$ のサイズ選択 — $M_2$ は電流バッファなので、$g_{m2}$ を大きくすると $R_X = 1/g_{m2}$ が下がってミラー効果がさらに抑えられます。しかし $M_2$ を大きくすると $C_{gs2}$ が増え、節点 $X$ の容量 $C_X$ が増えます。$f_{p,X} \approx g_{m2}/(2\pi C_{gs2})$ は $W$ に対してほぼ不変なので、極の位置はあまり変わりません。むしろ $M_2$ を $M_1$ と同サイズかやや小さめにして、面積と電流を節約する設計が一般的です。

基板バイアス効果 — $M_2$ のソースは接地されていないため、基板バイアス効果により $V_{th2}$ が上昇し、必要なバイアス電圧 $V_b$ が増えます。ヘッドルームがさらに苦しくなる方向です。トリプルウェルプロセスで $M_2$ のバルクをソースに接続できるなら、この問題は回避できます。一方、小信号的には $g_{m2}+g_{mb2}$ となって出力抵抗もミラー抑制も改善するので、性能面では味方です。

雑音 — カスコードトランジスタ $M_2$ が出力に寄与する雑音は、その電流雑音が $M_1$ の $r_{o1}$ と直列帰還を組む形になるため、大幅に抑圧されます。低周波では $M_1$ が支配的です。ただし高周波では、$C_X$ を通じて $M_2$ の雑音が出力に漏れやすくなり、LNAの雑音指数を悪化させることがあります。RF設計では $M_2$ のサイズと節点 $X$ のインダクティブ・ピーキングで最適化します。

ゲインブースト(レギュレーテッドカスコード) — $M_2$ のゲートを固定電圧にする代わりに、節点 $X$ の電圧を検出して負帰還する補助アンプ(利得 $A$)を入れると、出力抵抗が $A$ 倍さらに増えます。$R_{out} \approx A \cdot g_{m2}r_{o1}r_{o2}$。100 dB超の単段利得が必要な高分解能ADCなどで使われますが、補助アンプの極が主ループの安定性に絡むため設計難度は上がります。

バイポーラでのカスコード — 本記事はMOSFETで説明しましたが、バイポーラトランジスタでも事情はほぼ同じです。$C_{gd}$ の代わりにベース-コレクタ容量 $C_\mu$(ミラー容量そのものの語源)があり、$C_{in} = C_\pi + (1+g_m R_L)C_\mu$ となります。ただしバイポーラでは出力抵抗が $\beta r_o$ で頭打ちになる(ベース電流の効果)ため、$R_{out} \approx \beta r_o$ を超えられないという違いがあります。

まとめ

本記事では、カスコード増幅回路がなぜ高周波に強いのかを、ミラー効果の導出から出発して定量的に解き明かしました。要点を整理します。

  • ミラー効果: 入出力をまたぐ $C_{gd}$ は、入力側では $(1+|A_v|)C_{gd}$ に膨れて見える。$C_{gs}=50$ fF、$C_{gd}=10$ fF、$|A_v|=50$ なら入力容量は560 fFで、その91%が $C_{gd}$ 由来
  • 利得帯域積の天井: 共通ソース増幅器では $\text{GBW} \to 1/(2\pi R_s C_{gd})$ となり、$g_m$ も $R_L$ も約分されて消える。数値例では1.59 GHzが上限で、負荷抵抗を100倍にしてもGBWは1.22→1.27 GHzしか動かない
  • カスコードの原理: 共通ゲート段は上の負荷抵抗を $g_{m2}r_{o2}$ 分の1に圧縮して下段に見せる($R_X \approx 1/g_{m2} + R_L/(g_{m2}r_{o2})$)。下段の実効利得が $|A_{v1}| \approx (g_{m1}/g_{m2})(1+R_L/r_{o2})$ と小さくなり、ミラー倍増が消える
  • 新しい極: 中間ノード $X$ には $f_{p,X} \approx g_{m2}/(2\pi C_{gs2}) \approx f_T$ の極が生まれるが、プロセスの最高速に近いので通常は無害
  • 出力抵抗: $R_{out} = r_{o1}+r_{o2}+g_{m2}r_{o1}r_{o2} \approx g_{m2}r_{o2}\cdot r_{o1}$。数値例で50 kΩ → 5.1 MΩ(102倍)。電圧利得は $A_v = -g_{m1}(R_{out}\parallel R_L)$、理想電流源負荷なら $-(g_m r_o)^2$
  • 数値検証: 同じ負荷でカスコードは利得2倍・帯域2.8倍・GBW 5.4倍。利得を揃えても帯域は4.6倍。カスコードのGBWは $g_{m1}/(2\pi C_{out}) = 7.96$ GHz という「本来の限界」に漸近する
  • 効かない場合: $R_s = 1$ kΩ のような低インピーダンス駆動では、$-3$ dB帯域は共通ソースのほうが広くなることさえある。カスコードは信号源インピーダンスが高いほど効く
  • 代償と対策: 縦積みでオーバードライブ電圧1個分の振幅を失う。$V_{DD}=1.8$ V・$V_{ov}=0.2$ V ではテレスコピックの入力同相範囲がゼロになり、フォールデッドカスコードが必要。フォールデッドは電流2倍・雑音増加・利得低下と引き換えに、入力同相範囲0.9 Vと出力振幅1.0 Vを得る

カスコードは、たった1個のトランジスタで「入力容量」「出力抵抗」「アイソレーション」という3つの指標を同時に改善する、アナログ回路設計で最も費用対効果の高い構造の一つです。オペアンプ、LNA、電流源、ADCのサンプルホールド — 高性能なアナログ回路の中身を覗けば、ほぼ必ずどこかにカスコードが潜んでいます。本記事で導いた $R_X \approx 1/g_{m2}$ と $R_{out} \approx g_m r_o^2$ の2式を手に入れれば、それらの回路図が読めるようになるはずです。

次のステップとして、以下の記事も参考にしてください。