カレントミラー回路を理解する — 電流をコピーする仕組みと精度

オペアンプのデータシートを開くと、「消費電流 1.2 mA(typ)」のような値が並んでいます。この電流は、チップの中の何十個ものトランジスタに分配されているのですが、では設計者はどうやって「この差動対には 20 µA、この出力段には 200 µA」という配分を実現しているのでしょうか。抵抗で分圧してバイアスを作ればよさそうに思えます。しかし抵抗で作った電流は、電源電圧が 3.3 V から 5 V に変われば約 1.5 倍に増え、チップの温度が 25℃ から 85℃ に上がればさらに変わってしまいます。しかも IC の中に精度の高い抵抗を作るのは、トランジスタを作るよりずっと難しいのです。

この問題を、たった 2 個のトランジスタで、しかも「相対精度」という半導体プロセスが最も得意とする性質だけを使って解決するのがカレントミラー(current mirror) です。名前のとおり、ある基準電流を鏡に映すようにコピーして、必要な場所へ必要な倍率で配る回路です。一度作った基準電流を何本にでも複製でき、倍率はトランジスタの寸法比だけで決まります。

カレントミラーを理解すると、次のような場面での見通しが一気に良くなります。

  • オペアンプ・アナログIC の設計: 差動増幅器の尾電流源、能動負荷(アクティブロード)、出力段のバイアス — 汎用オペアンプの回路図に現れるトランジスタの半分近くはカレントミラーです
  • D/A コンバータ: 電流セグメント型 DAC は、重み付けされたカレントミラーの集合体そのものです。ミラー比の誤差がそのまま DAC の微分非直線性(DNL)になります
  • LED ドライバ・レーザドライバ: LED の輝度を電源電圧や温度によらず一定に保つには定電流駆動が必要で、その心臓部がカレントミラーです
  • バンドギャップリファレンス: 温度に対して平坦な基準電圧を作る回路では、2 つの枝に厳密に等しい(あるいは決まった比の)電流を流すためにカレントミラーが使われます

本記事の内容

  • カレントミラーの直感的な理解 — なぜ抵抗ではなくトランジスタなのか
  • MOSFET 飽和領域の電流式から、ミラー比が $(W/L)$ 比で決まることの導出
  • バイポーラ版の動作原理と、ベース電流による系統誤差 $1/(1+2/\beta)$ の導出
  • チャネル長変調 $(1+\lambda V_{DS})$ が生む出力電圧依存の誤差
  • 出力抵抗 $r_o = 1/(\lambda I_D)$ の導出と、電流源としての品質指標
  • カスコードカレントミラーの小信号解析 — $R_{out} \approx g_m r_o^2$ の導出
  • ワイドスイングカスコードによる最小動作電圧の低減
  • ウィルソンカレントミラーと負帰還によるベース電流誤差の除去
  • しきい値ばらつき $\Delta V_{th}$ と $(W/L)$ 不整合がミラー比精度に与える影響
  • Python による出力特性・方式比較・モンテカルロ解析

前提知識

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

カレントミラーとは — 電流を「コピー」するという発想

カレントミラーの概念図。基準電流をダイオード接続のM1でゲート電圧に変換し、同じゲート電圧をM2に与えて電流を複製する

回路全体の姿を先に見ておきましょう。左の枝では基準電流 $I_{ref}$ がダイオード接続された $M_1$ に流し込まれ、$M_1$ はその電流を流すのに必要なゲート電圧 $V_{GS}$ を自分で決めます(①電流→電圧)。その $V_{GS}$ を配線でそのまま $M_2$ のゲートに配ると、$M_2$ は同じ電圧に対応する電流を流します(②電圧→電流)。この往復の途中で $V_{GS}$ の絶対値は一度も設計者の手に触れず、最終的に残るのは 2 素子の寸法比 $(W/L)_2/(W/L)_1$ だけです。

抵抗で電流を作ることの何が問題なのか

まず、素朴なやり方から出発しましょう。電源 $V_{DD}$ と接地の間に抵抗 $R$ をつなげば、$I = V_{DD}/R$ の電流が流れます。これを回路のどこかに流し込めば「電流源」の代わりになりそうです。ところが、この電流には 3 つの弱点があります。

第一に、電源電圧に比例してしまうことです。$V_{DD}$ が 10% 変動すれば電流も 10% 変動します。電池駆動の機器では電源電圧は満充電から放電終止まで数十パーセント変わりますから、これは致命的です。

第二に、温度で変わることです。IC 上の拡散抵抗やポリシリコン抵抗の温度係数は 1000〜3000 ppm/℃ 程度あり、100℃ の温度変化で 10〜30% も抵抗値が動きます。

第三に、負荷の電圧に依存することです。抵抗の一端の電圧が動けば、両端電圧が変わり、電流も変わります。「どんな電圧でも同じ電流を流す」という理想電流源の性質を、抵抗はまったく持っていません。

抵抗バイアスとカレントミラーの比較。左は電源電圧、右は温度に対する電流の変化

左のグラフでは、抵抗でバイアスした電流(橙)が電源電圧に正比例して 2.0 V で 60 µA、5.5 V で 167 µA と 3 倍近く変わってしまうのに対し、カレントミラー(青)は基準電流をコピーするだけなので水平です。右のグラフも同じ構図で、温度係数 2000 ppm/℃ の抵抗は $-20$℃ から 120℃ の間で $\pm 10\%$ 以上動きます。電流の値そのものを電源や抵抗値に委ねてはいけない、というのがこの 2 枚の要点です。

さらに IC 製造の現実として、抵抗の絶対値の精度は良くて $\pm 20\%$ 程度です。半導体プロセスは絶対値を合わせるのが苦手なのです。しかし逆に、隣り合う同じ形の素子どうしの相対比なら 0.1% 程度に合わせられます。ここが決定的なポイントで、アナログ IC の設計は「絶対値に頼らず、比に頼る」という原則の上に成り立っています。カレントミラーは、まさにこの原則を最も純粋な形で使った回路です。

「型で抜いたクッキー」のアナロジー

カレントミラーの動作は、クッキーの型抜きに例えるとイメージしやすくなります。まず、基準となる電流 $I_{ref}$ を 1 個のトランジスタに流し込みます。すると、そのトランジスタは「この電流を流すには、これだけのゲート電圧が要る」という値を自分で決めます。ここでトランジスタは 電流 → 電圧の変換器 として働いています。いわば、$I_{ref}$ というクッキー生地から「型」を作ったわけです。

次に、まったく同じ形をした別のトランジスタに、この電圧をそのまま与えます。同じ型に同じ生地を押し当てれば、同じ形のクッキーができます。つまり同じゲート電圧を与えられた 2 番目のトランジスタは、1 番目と同じ電流を流そうとします。これが「電流のコピー」です。ここでは 電圧 → 電流の変換 が起きています。

伝達特性上で見た二段階変換。Iref=100μAから決まるVGSを、W/Lの異なる3つのトランジスタに配ると寸法比どおりの電流が出る

この図は、いま説明した「型を作って押し当てる」操作を伝達特性($V_{GS}$ 対 $I_D$)の上で描いたものです。まず赤い矢印が①にあたり、$I_{ref}=100\ \mu$A という高さから青い曲線を逆にたどって $V_{GS}\approx 0.816$ V が決まります。次に灰色の縦線に沿って上を見ると、$(W/L)=20$ の緑、$(W/L)=30$ の橙の曲線がそれぞれ 200 µA、300 µA を指しています。同じ電圧を配るだけで寸法比どおりの電流が取り出せることが、1 枚のグラフで見て取れます。

この 2 段階の変換で本質的なのは、途中に現れるゲート電圧の絶対値がいくらであるかを設計者が知る必要がないという点です。プロセスばらつきで移動度が 20% ずれていようが、しきい値電圧が 50 mV ずれていようが、2 つのトランジスタが同じチップの隣り合った場所にあれば、その「ずれ」は 2 つに共通に効きます。共通に効くものは比を取れば消える — これが、カレントミラーが実用に耐える理由です。

蛇口と分岐管という別の見方

もう一つの見方として、水道の配管を思い浮かべても構いません。1 本の元管から流れてくる水量 $I_{ref}$ を、同じ口径の分岐管に流せば同じ水量が流れます。口径を 2 倍にした分岐管なら 2 倍の水量が流れます。ここでの「口径」に相当するのが MOSFET のアスペクト比 $W/L$、バイポーラならエミッタ面積 $A_E$ です。倍率は口径比だけで決まり、元管の水圧(=プロセスパラメータ)には依存しません。

このアナロジーで、カレントミラーが持つもう一つの重要な性質も見えてきます。理想的な配管なら、出口側の水位が変わっても流量は変わりません。しかし実際のトランジスタでは、出力端子の電圧が上がると電流がわずかに増えてしまいます。この「出口の水位に対する流量の鈍感さ」を定量化したものが出力抵抗 $r_{out}$ であり、カレントミラーの品質を決める最重要指標です。本記事の後半は、ほぼこの出力抵抗をどう大きくするかという話に費やされます。

ここまでで、カレントミラーが「なぜ必要か」と「どういう発想の回路か」が見えました。では、この直感を数式に落とし込んでいきましょう。まずは現代の IC で主流の MOSFET 版から始めます。

MOSカレントミラーの動作原理と導出

飽和領域の電流式を出発点にする

MOSFET が飽和領域(ドレイン電流がドレイン電圧にほとんど依らない領域)で動作しているとき、ドレイン電流 $I_D$ は次の 2 乗則で表されます。

$$ \begin{equation} I_D = \frac{1}{2}\mu_n C_{ox}\frac{W}{L}\left(V_{GS} – V_{th}\right)^2 \end{equation} $$

ここで $\mu_n$ は電子の移動度、$C_{ox}$ は単位面積あたりのゲート酸化膜容量、$W$ はチャネル幅、$L$ はチャネル長、$V_{th}$ はしきい値電圧です。$\mu_n C_{ox}$ はプロセスで決まる定数なので、まとめて $K’ \equiv \mu_n C_{ox}$ と書くことにします。また、$V_{GS}$ がしきい値をどれだけ超えているかを表す量

$$ V_{ov} \equiv V_{GS} – V_{th} $$

オーバードライブ電圧と呼びます。この $V_{ov}$ は以降、精度と動作電圧のトレードオフを支配する主役として何度も登場しますので、記号に慣れておいてください。式 (1) が成り立つ条件、すなわち飽和条件は

$$ V_{DS} \geq V_{GS} – V_{th} = V_{ov} $$

です。

ダイオード接続は必ず飽和領域にいる

カレントミラーの入力側では、トランジスタ $M_1$ のゲートとドレインを短絡します。これをダイオード接続と呼びます。この接続には、見落とされがちですが決定的に便利な性質があります。ゲートとドレインが同電位なので $V_{DS} = V_{GS}$ となり、飽和条件は

$$ V_{GS} \geq V_{GS} – V_{th} \quad \Longleftrightarrow \quad V_{th} \geq 0 $$

に化けます。エンハンスメント型 NMOS なら $V_{th} > 0$ ですから、この条件は電流の大きさによらず常に成立します。つまりダイオード接続した MOSFET は、どんな電流を流し込まれても自動的に飽和領域にとどまります。設計者が動作点を心配しなくてよいので、基準電流を電圧に変換する素子として理想的なのです。

基準電流からゲート電圧を逆に解く

$M_1$ に基準電流 $I_{ref}$ を流し込みます。式 (1) を $V_{GS}$ について解きましょう。まず両辺を整理して 2 乗の項を取り出します。

$$ \left(V_{GS} – V_{th}\right)^2 = \frac{2 I_{ref}}{K’ (W/L)_1} $$

両辺の平方根を取ります。$V_{GS} > V_{th}$(そうでなければ電流が流れない)なので正の根を選んで、

$$ \begin{equation} V_{GS} = V_{th} + \sqrt{\frac{2 I_{ref}}{K’ (W/L)_1}} \end{equation} $$

が得られます。$M_1$ はこのゲート電圧を「自分で決めて」しまうわけです。設計者は $I_{ref}$ と寸法を決めるだけで、$V_{GS}$ の値そのものを気にする必要はありません。

ミラー比が寸法比だけで決まることの導出

いよいよ本題です。出力側のトランジスタ $M_2$ のゲートを $M_1$ のゲートに接続し、ソースも共通(ともに接地)にします。すると $M_2$ のゲート・ソース間電圧は $M_1$ とまったく同じ $V_{GS}$ になります。$M_2$ が飽和領域にいると仮定すれば、その電流は式 (1) から

$$ I_{out} = \frac{1}{2}K’\left(\frac{W}{L}\right)_2 \left(V_{GS} – V_{th}\right)^2 $$

です。ここで $I_{ref}$ の式と辺々の比を取ります。式 (1) を $M_1$ に適用した $I_{ref} = \frac{1}{2}K'(W/L)_1 (V_{GS}-V_{th})^2$ で割ると、共通因子 $\frac{1}{2}K'(V_{GS}-V_{th})^2$ がきれいに約分されます。

$$ \begin{equation} \frac{I_{out}}{I_{ref}} = \frac{\dfrac{1}{2}K'(W/L)_2 (V_{GS}-V_{th})^2}{\dfrac{1}{2}K'(W/L)_1 (V_{GS}-V_{th})^2} = \frac{(W/L)_2}{(W/L)_1} \end{equation} $$

これがカレントミラーの基本式です。注目すべきは、約分によって消えたものです。$K’ = \mu_n C_{ox}$ が消えました。つまり移動度や酸化膜厚がプロセスばらつきで何パーセントずれていても、ミラー比は影響を受けません。$V_{th}$ も消えました。しきい値電圧はロットごとに数十 mV も動く量ですが、2 つのトランジスタで共通ならミラー比には効きません。温度依存性についても、$\mu_n$ と $V_{th}$ はどちらも強い温度依存性を持ちますが、共通なので比には残りません。

残ったのは寸法比 $(W/L)_2 / (W/L)_1$ だけです。フォトリソグラフィで描かれる寸法比は、同一チップ上ならきわめて精度よく合わせられます。「絶対値ではなく比に頼る」という設計原則が、この 1 行の式に凝縮されています。

単位トランジスタで整数比を作る

単位トランジスタを3個並列にして3:1のミラー比を作るレイアウト模式図と、寸法比に比例する出力電流

左の模式図が、これから述べるレイアウトの作法です。出力側を「幅 3 倍の素子 1 個」ではなく「同じ形の単位素子 3 個」で作り、配列の両端にはダミー素子を置きます。右のグラフは、そうして作ったミラー比 $m$ に対して出力電流が 50、100、200、300、400、500 µA と正確に比例することを、簡易モデルで確かめたものです(誤差要因を切り離すため $V_{out}=V_{GS}$ の点で評価しています)。

実際のレイアウトでは、$(W/L)_2 = 3 (W/L)_1$ を作るのに「幅を 3 倍にしたトランジスタ 1 個」を描くことは通常しません。代わりに、$M_1$ とまったく同じ寸法の単位トランジスタを 3 個並列に並べます。理由は、素子の縁で起きる寸法誤差(エッチングの回り込みなど)が、幅を 3 倍にした素子と元の素子とでは比例して効かないからです。同じ形の素子を並べれば、縁の効果も 3 倍になり、比は正確に 3 : 1 に保たれます。

このとき、ミラー比 $m$ に対して

$$ I_{out} = m \, I_{ref}, \qquad m = \frac{\text{出力側の単位トランジスタ数}}{\text{入力側の単位トランジスタ数}} $$

となり、整数比あるいは整数どうしの比(例えば 3/5)を精度よく実現できます。逆に $\pi$ のような無理数比が必要なら、近い有理数で近似するのが定石です。

数値例で感覚をつかむ

具体的な数字を入れてみましょう。$K’ = \mu_n C_{ox} = 200\ \mu\mathrm{A/V^2}$、$V_{th} = 0.5$ V、$(W/L)_1 = (W/L)_2 = 10$、$I_{ref} = 100\ \mu$A とします。式 (2) より

$$ V_{ov} = \sqrt{\frac{2 \times 100\times 10^{-6}}{200\times10^{-6} \times 10}} = \sqrt{0.1} = 0.316\ \mathrm{V} $$

$$ V_{GS} = 0.5 + 0.316 = 0.816\ \mathrm{V} $$

となります。オーバードライブ電圧が 0.316 V ということは、出力側の $M_2$ が飽和領域を保つには $V_{out} \geq 0.316$ V が必要だ、という意味でもあります。この「最小動作電圧」は、後で見るように精度とトレードオフの関係にあります。

ここまでは理想的な 2 乗則の世界の話でした。この理想の中では、ミラー比は完璧に寸法比に一致します。しかし実際の回路では、出力電圧を振ると電流が動いてしまいます。その原因を追う前に、まずバイポーラ版でしか起きない別種の誤差を見ておきましょう。バイポーラ版の誤差は、MOS 版と比較することで「なぜ現代の IC は MOS を好むのか」を鮮明にしてくれます。

バイポーラカレントミラーとベース電流誤差

指数則が生む「面積比」のミラー

バイポーラトランジスタでは、活性領域でのコレクタ電流がベース・エミッタ間電圧の指数関数になります。

$$ \begin{equation} I_C = I_S \exp\!\left(\frac{V_{BE}}{V_T}\right) \end{equation} $$

ここで $V_T = kT/q$ は熱電圧で、室温(300 K)では約 25.9 mV です。$I_S$ は飽和電流と呼ばれる素子固有の定数で、エミッタ面積 $A_E$ に比例します。

MOS 版と同じ構成 — $Q_1$ をダイオード接続(ベースとコレクタを短絡)し、$Q_2$ のベースを共通にする — を考えます。両者の $V_{BE}$ が等しいので、式 (4) の比を取ると指数因子が約分され、

$$ \frac{I_{C2}}{I_{C1}} = \frac{I_{S2}}{I_{S1}} = \frac{A_{E2}}{A_{E1}} $$

となります。MOS の $(W/L)$ 比がエミッタ面積比に置き換わっただけで、構造はまったく同じです。熱電圧 $V_T$ も飽和電流の絶対値も比からは消えるので、やはり「相対比だけで決まる」性質は保たれています。

ベース電流が持ち去る分の導出

しかし、バイポーラには MOS にない厄介な要素があります。ベース電流です。MOSFET のゲートは酸化膜で絶縁されているので直流電流はゼロですが、バイポーラのベースには $I_B = I_C/\beta$ の電流が流れ込みます($\beta$ は電流増幅率、典型的に 50〜200)。

基準側のノード($Q_1$ のコレクタ)でキルヒホッフの電流則を書きましょう。外部から流し込む $I_{ref}$ は、$Q_1$ のコレクタ電流に加えて、$Q_1$ と $Q_2$ の両方のベース電流を賄わなければなりません。

$$ I_{ref} = I_{C1} + I_{B1} + I_{B2} $$

$Q_1$ と $Q_2$ が同一素子($A_{E1}=A_{E2}$)なら $I_{C1} = I_{C2} \equiv I_C$、したがって $I_{B1} = I_{B2} = I_C/\beta$ です。これらを代入すると

$$ I_{ref} = I_C + \frac{I_C}{\beta} + \frac{I_C}{\beta} = I_C\left(1 + \frac{2}{\beta}\right) $$

出力電流は $I_{out} = I_{C2} = I_C$ ですから、両辺を $I_{ref}$ で割って整理すると、ミラー比は

$$ \begin{equation} \frac{I_{out}}{I_{ref}} = \frac{1}{1 + \dfrac{2}{\beta}} = \frac{\beta}{\beta+2} \end{equation} $$

となります。$\beta = 100$ を代入すると $100/102 = 0.9804$、つまり $-1.96\%$ の系統誤差です。ランダムなばらつきではなく、必ず出力が小さくなる方向に偏る誤差である点に注意してください。$\beta = 50$ なら $-3.85\%$、$\beta = 200$ でも $-0.99\%$ 残ります。

出力を $N$ 本に増やした場合も同様に計算できます。ベース電流が $N+1$ 個分必要になるので

$$ \frac{I_{out}}{I_{ref}} = \frac{1}{1 + \dfrac{N+1}{\beta}} $$

となり、出力本数が増えるほど誤差が拡大します。10 本の出力を持つバイアス分配回路なら、$\beta=100$ で $-9.9\%$ にもなり、無視できません。

ベース電流によるミラー比の系統誤差をβに対して対数プロットした図。ベータヘルパーとウィルソンはβの2乗で効き誤差が2桁小さい

この図は、いま導いた $2/\beta$ という誤差と、これから述べる改良版の誤差を $\beta$ の関数として並べたものです。縦軸が対数目盛であることに注意してください。基本ミラー(青)は $\beta=100$ で $-1.96\%$、出力を 5 本に増やすと(赤破線)$-5.66\%$ まで悪化します。一方、次に見るベータヘルパー(橙)とウィルソンミラー(緑)は $\beta^2$ で効くため $-0.020\%$ となり、2 桁ちょうど下の帯に落ちます。$\beta$ が 50 まで下がっても改良版は $0.1\%$ を切ったままです。

ベータヘルパーによる改善

この誤差を減らす古典的な手法がベータヘルパー(emitter follower buffer)です。$Q_1$ と $Q_2$ のベースに、もう 1 個のトランジスタ $Q_3$ のエミッタをつなぎ、$Q_3$ のベースを基準ノードに接続します。こうすると、$Q_1, Q_2$ のベース電流の合計 $2I_C/\beta$ は $Q_3$ のエミッタ電流として供給され、基準ノードから実際に持ち去られるのは $Q_3$ のベース電流だけになります。

$$ I_{B3} = \frac{I_{E3}}{\beta+1} = \frac{2I_C/\beta}{\beta+1} = \frac{2 I_C}{\beta(\beta+1)} $$

したがって基準ノードの電流則は

$$ I_{ref} = I_C + \frac{2I_C}{\beta(\beta+1)} = I_C\left(1 + \frac{2}{\beta^2+\beta}\right) $$

となり、ミラー比の誤差は $\beta=100$ で $2/10100 = 1.98\times10^{-4}$、すなわち $-0.020\%$ まで縮みます。$\beta$ の 1 乗が 2 乗に化けただけで、誤差が 100 分の 1 になったわけです。

指数則ゆえの感度 — MOSとの比較

バイポーラ版にはもう一つ、精度上の特徴があります。式 (4) を $V_{BE}$ で微分すると相互コンダクタンスは $g_m = I_C/V_T$ となり、電流の相対変化は

$$ \frac{\Delta I_C}{I_C} = \frac{\Delta V_{BE}}{V_T} $$

です。$V_T \approx 26$ mV ですから、2 素子間の $V_{BE}$ が 1 mV ずれるだけで電流は約 3.9% ずれます。一方 MOS では、後で導出するように $\Delta I_D/I_D = -2\Delta V_{th}/V_{ov}$ であり、$V_{ov} = 0.3$ V なら $\Delta V_{th} = 1$ mV に対して 0.67% です。電圧ばらつきに対する感度は、MOS の方が $V_{ov}/(2V_T)$ 倍だけ鈍いのです。これは MOS の利点になります。

逆にバイポーラの利点は、指数則のおかげでエミッタ面積比が広い電流範囲にわたって正確に保たれること、そしてアーリー電圧が高く出力抵抗を稼ぎやすいことです。用途によって使い分けられますが、現代のアナログ IC の大半は CMOS プロセスで作られるため、以降は MOS を中心に議論を進めます。

ここまでで、理想 2 乗則のミラー比とバイポーラ特有の系統誤差を押さえました。しかし実は MOS 版にも、これまで無視してきた大きな誤差要因があります。出力電圧を振ったときに電流が動いてしまう現象 — チャネル長変調です。

チャネル長変調 — 出力電圧に依存する誤差

なぜ飽和領域でも電流が増えるのか

式 (1) は「飽和領域では電流が $V_{DS}$ に依存しない」と言っています。しかしこれは近似です。実際には、$V_{DS}$ を上げると電流はゆるやかに増えていきます。理由はチャネルの形にあります。

飽和領域では、ドレイン端でチャネルが消失(ピンチオフ)しています。$V_{DS}$ をさらに上げると、ドレイン側の空乏層が広がり、ピンチオフ点がソース側へじりじりと移動します。その結果、実際に電流を制御している「有効なチャネル」の長さが $L$ から $L_{eff} = L – \Delta L$ に縮みます。電流は $1/L$ に比例しますから、チャネルが縮めば電流は増えるわけです。

$$ I_D \propto \frac{1}{L – \Delta L} = \frac{1}{L}\cdot\frac{1}{1 – \Delta L/L} \approx \frac{1}{L}\left(1 + \frac{\Delta L}{L}\right) $$

最後の変形では $\Delta L \ll L$ として 1 次のテイラー展開 $1/(1-x)\approx 1+x$ を使いました。$\Delta L$ が $V_{DS}$ にほぼ比例して伸びるとみなし、比例定数を $\lambda$ とまとめると、修正された電流式が得られます。

$$ \begin{equation} I_D = \frac{1}{2}K’\frac{W}{L}\left(V_{GS}-V_{th}\right)^2\left(1 + \lambda V_{DS}\right) \end{equation} $$

チャネル長変調の模式図。VDSを上げるとピンチオフ点がソース側へ移動して有効チャネル長が縮み、その結果飽和領域でも電流が右肩上がりになる

左の断面模式図で、$V_{DS}$ を 0.4 V から 3.0 V に上げると、ピンチオフ点(赤い点線)がドレイン端からソース側へ移動し、緑の矢印で示した有効チャネル長 $L_{eff}$ が $\Delta L$ だけ短くなっている様子がわかります。右のグラフはその帰結で、灰色の破線(チャネル長変調を無視した理想)が水平なのに対し、実際の電流(青)は飽和領域に入った後も一定の傾きで増え続けます。この傾きの逆数が、次節で扱う出力抵抗 $r_o$ です。

$\lambda$ はチャネル長変調係数で、単位は $\mathrm{V^{-1}}$ です。上の導出から $\lambda \propto 1/L$ であることがわかります。チャネル長を 2 倍にすれば $\lambda$ は半分になる — これは後で「精度を上げるにはトランジスタを長く作る」という設計指針として効いてきます。典型値は、$L$ が 1 µm 程度なら $\lambda \approx 0.05\text{–}0.1\ \mathrm{V^{-1}}$、短チャネルではもっと大きくなります。

ミラー比の誤差を式にする

修正式 (6) を使って、基本カレントミラーのミラー比を計算し直しましょう。$M_1$ はダイオード接続なので $V_{DS1} = V_{GS}$ です。$M_2$ のドレインは出力ノードなので $V_{DS2} = V_{out}$ です。両者の比を取ります。共通の $\frac{1}{2}K’V_{ov}^2$ が約分され、寸法比とチャネル長変調因子だけが残ります。

$$ \begin{equation} \frac{I_{out}}{I_{ref}} = \frac{(W/L)_2}{(W/L)_1}\cdot\frac{1 + \lambda V_{out}}{1 + \lambda V_{GS}} \end{equation} $$

第 2 因子が誤差の正体です。$V_{out} = V_{GS}$ のときだけ 1 になり、ミラー比は理想値と一致します。それ以外の出力電圧では必ずずれます。

数値を入れてみましょう。$\lambda = 0.1\ \mathrm{V^{-1}}$、$V_{GS} = 0.80$ V、出力を $V_{out} = 1.8$ V で使うとすると

$$ \frac{1 + 0.1\times 1.8}{1 + 0.1\times 0.80} = \frac{1.18}{1.08} = 1.093 $$

つまり $+9.3\%$ も電流が増えてしまいます。$(W/L)$ 比を 0.1% の精度で合わせ込んでも、この 9% の前ではまったく意味がありません。基本カレントミラーの精度を決めているのは、寸法比ではなくチャネル長変調なのです。

誤差を減らす 2 つの方向

式 (7) は、誤差を減らす方向を明確に教えてくれます。

方向 1: $\lambda$ を小さくする。 $\lambda \propto 1/L$ なので、チャネル長 $L$ を長くすればよいのです。同じ $W/L$ を保ったまま $L$ を 4 倍($W$ も 4 倍)にすれば、$\lambda$ は 1/4 になり、上の例の誤差は約 2.3% まで下がります。代償は面積と寄生容量の増加、つまりコストと速度です。アナログ IC でバイアス回路のトランジスタがロジックより明らかに大きく描かれているのは、この理由によります。

方向 2: $V_{DS}$ を揃える。 式 (7) の分子と分母を等しくすればよいので、$M_2$ のドレイン電圧を $M_1$ のそれに一致させれば誤差はゼロになります。しかし出力電圧は負荷が決めるものであり、設計者が固定できません。そこで「出力電圧が動いても $M_2$ の $V_{DS}$ は動かない」ようにする — これがカスコード構成のアイデアです。

バイポーラのアーリー効果

バイポーラにも同じ現象があり、アーリー効果と呼ばれます。ベース・コレクタ接合の空乏層がベース側に食い込み、実効ベース幅が縮むことでコレクタ電流が増えます。式で書くと

$$ I_C = I_S \exp\!\left(\frac{V_{BE}}{V_T}\right)\left(1 + \frac{V_{CE}}{V_A}\right) $$

となり、$V_A$ をアーリー電圧と呼びます。MOS の $\lambda$ との対応は $V_A = 1/\lambda$ です。バイポーラの $V_A$ は縦型 NPN で 50〜150 V 程度あり、MOS で $\lambda = 0.1$($V_A = 10$ V に相当)よりずっと大きい値です。この点でバイポーラは電流源として素性が良いと言えます。

チャネル長変調は「出力電圧を振ると電流が変わる」現象でした。この性質は、回路の言葉では「出力抵抗が有限である」と表現されます。次はこの出力抵抗を定量化し、電流源の品質指標として整理します。

出力抵抗 $r_o$ と小信号等価回路

出力抵抗の定義と導出

理想電流源は、端子電圧をいくら変えても流す電流が変わりません。これは「内部抵抗が無限大」と言い換えられます。実際のトランジスタ電流源では内部抵抗が有限で、その値を出力抵抗 $r_o$ と呼びます。定義は、動作点まわりでの端子電圧変化と電流変化の比です。

$$ r_o \equiv \left(\frac{\partial I_D}{\partial V_{DS}}\right)^{-1} $$

式 (6) を $V_{DS}$ で偏微分しましょう。$V_{GS}$ は固定なので、微分されるのは $(1+\lambda V_{DS})$ の部分だけです。

$$ \frac{\partial I_D}{\partial V_{DS}} = \frac{1}{2}K’\frac{W}{L}V_{ov}^2 \cdot \lambda $$

ここで $\frac{1}{2}K’\frac{W}{L}V_{ov}^2$ は $(1+\lambda V_{DS})$ を掛ける前の電流、つまり $I_D/(1+\lambda V_{DS})$ です。$\lambda V_{DS} \ll 1$ の範囲ではこれを $I_D$ で近似できるので、逆数を取って

$$ \begin{equation} r_o = \frac{1}{\lambda I_D} = \frac{V_A}{I_D} \end{equation} $$

というシンプルな式が得られます。$\lambda = 0.1\ \mathrm{V^{-1}}$、$I_D = 100\ \mu$A なら $r_o = 100\ \mathrm{k\Omega}$ です。

この式は重要な設計指針を含んでいます。出力抵抗は電流に反比例する — 小さい電流を扱う回路ほど、電流源としては相対的に高性能になります。また $\lambda \propto 1/L$ なので $r_o \propto L$ であり、チャネルを長くすれば出力抵抗が伸びます。

電流源としての品質を測る

カレントミラーの出力を、小信号的には「理想電流源 $I_{out}$ と抵抗 $r_o$ の並列」と見ることができます。出力電圧が $\Delta V$ 動いたときの電流変化は $\Delta I = \Delta V / r_o$ ですから、相対誤差は

$$ \frac{\Delta I}{I} = \frac{\Delta V}{r_o I} = \lambda \Delta V $$

となります。この形は式 (7) から得られる結果と一致します。$\lambda = 0.1$、$\Delta V = 1$ V なら 10% — 先ほどの数値例と整合しています。

出力抵抗が電流に反比例することと、固有利得がλとVovだけで決まることを示す2枚のグラフ

左の両対数グラフは $r_o = 1/(\lambda I_D)$ を描いたもので、直線の傾きが $-1$、すなわち電流を 10 分の 1 にすれば出力抵抗が 10 倍になることを示しています。本記事の数値例($\lambda=0.1$、$I_D=100\ \mu$A)は赤い点の 100 kΩ です。右のグラフは次項で導く固有利得 $g_m r_o = 2/(\lambda V_{ov})$ で、$V_{ov}$ を小さくするほど大きくなること、そして $\lambda$ を半分にすれば全体が 2 倍に持ち上がる(=チャネルを長くすると利得が稼げる)ことが読み取れます。

相互コンダクタンス $g_m$ と固有利得

出力抵抗と対をなす量が相互コンダクタンス $g_m$ です。ゲート電圧の変化がどれだけ電流を動かすかを表します。式 (1) を $V_{GS}$ で微分すると

$$ g_m = \frac{\partial I_D}{\partial V_{GS}} = K’\frac{W}{L}\left(V_{GS}-V_{th}\right) = K’\frac{W}{L}V_{ov} $$

これは $I_D = \frac{1}{2}K'(W/L)V_{ov}^2$ を使って、次の 3 通りの等価な表現に書き換えられます。

$$ \begin{equation} g_m = K’\frac{W}{L}V_{ov} = \frac{2I_D}{V_{ov}} = \sqrt{2K’\frac{W}{L}I_D} \end{equation} $$

中央の表現 $g_m = 2I_D/V_{ov}$ は特に使いやすい形です。「同じ電流なら、オーバードライブが小さいほど $g_m$ が大きい」ことを示しています。

$g_m$ と $r_o$ の積は固有利得(intrinsic gain)と呼ばれ、そのトランジスタ 1 個で得られる電圧利得の上限を表します。式 (8) と (9) を掛け合わせると $I_D$ が約分されて、

$$ \begin{equation} g_m r_o = \frac{2I_D}{V_{ov}}\cdot\frac{1}{\lambda I_D} = \frac{2}{\lambda V_{ov}} \end{equation} $$

という美しい結果になります。固有利得は電流に依存せず、$\lambda$ と $V_{ov}$ だけで決まるのです。$\lambda = 0.1$、$V_{ov} = 0.3$ V なら $g_m r_o = 66.7$ 程度。数値例のパラメータ($V_{ov} = 0.304$ V)では $65.7$ になります。

この $g_m r_o$ という数は、次に見るカスコードで「出力抵抗が何倍になるか」を決める倍率としてそのまま現れます。カレントミラーの精度改善の話は、実質的に「$g_m r_o$ を何回掛けられるか」の話なのです。

カスコードカレントミラー — 出力抵抗を $g_m r_o$ 倍にする

遮蔽するという直感

基本ミラーの問題は、出力電圧の変動がそのまま $M_2$ のドレインに加わることでした。ならば、出力ノードと $M_2$ のドレインの間に「壁」を入れて、$M_2$ のドレイン電圧を変動から守ればよいはずです。

その壁になるのが、$M_2$ の上に積んだもう 1 個のトランジスタ $M_3$ です。$M_3$ のゲートには固定電圧 $V_b$ を与えます。ここで $M_3$ はゲート接地増幅器として働きます。ゲート接地段の入力抵抗は $1/g_m$ と低く、逆に言えば「電流を素通しし、電圧変動は通さない」性質を持ちます。

カスコードカレントミラーの回路図と、出力電圧が振れても中間ノード電圧Vxがほとんど動かないことを示すグラフ

左の回路図が、いま説明した「壁」を入れた構成です。$M_3$ のゲートには固定バイアス $V_b$ が与えられ、$M_2$ のドレインは出力ノードではなく中間ノード $V_x$ につながっています。基準側にも同じ 2 段構造($M_1, M_4$)を置いてある点が実装上のポイントです。右のグラフはその効き目を数値で示したもので、基本ミラーでは下段が見る電圧が $V_{out}$ そのもの(青の破線、傾き 1)なのに対し、カスコードでは $V_{out}$ が 2.4 V 振れても $V_x$ は 30 mV しか動きません。約 80 分の 1 に圧縮されており、これがそのまま誤差の圧縮率になります。

もう少し丁寧に言うと、こういう仕組みです。出力電圧 $V_{out}$ が上がると $M_3$ の電流がわずかに増えようとします。しかし $M_3$ のソース(=$M_2$ のドレイン、この節点を $V_x$ と呼びます)が持ち上がると、$M_3$ のゲート・ソース間電圧 $V_b – V_x$ が減り、電流を戻そうとする負帰還が働きます。この帰還により $V_x$ の変動は $1/(g_{m3} r_{o3})$ 程度に圧縮され、$M_2$ から見た出力電圧変動はほとんど消えてしまいます。傘をさせば雨が当たらないのと同じで、$M_2$ は $M_3$ の陰に隠れて安定に電流を流し続けられます。

小信号解析による $R_{out}$ の導出

この直感を数式で確かめましょう。出力ノードに試験電流 $i_x$ を流し込み、生じる電圧 $v_{out}$ を求めて $R_{out} = v_{out}/i_x$ を計算します(テスト電源法)。小信号等価回路では、$M_2$ はゲートが交流的に接地されているので単なる抵抗 $r_{o2}$ になり、$M_3$ は電流源 $g_{m3}v_{gs3}$ と抵抗 $r_{o3}$ の並列で表されます。

第 1 ステップ: $i_x$ はすべて $r_{o2}$ を通って接地に流れます($M_2$ のゲートは交流接地なので他に経路がない)。したがって中間ノードの電圧は

$$ v_x = i_x r_{o2} $$

第 2 ステップ: $M_3$ のゲート・ソース間電圧を求めます。ゲートは固定バイアスなので交流的に接地、ソースは $v_x$ ですから

$$ v_{gs3} = 0 – v_x = -i_x r_{o2} $$

第 3 ステップ: $M_3$ のドレイン・ソース間($r_{o3}$)を流れる電流を求めます。出力から流れ込む $i_x$ のうち、電流源 $g_{m3}v_{gs3}$ が担う分を差し引いた残りが $r_{o3}$ を流れます。

$$ i_{r_{o3}} = i_x – g_{m3}v_{gs3} = i_x + g_{m3}i_x r_{o2} $$

第 4 ステップ: 出力電圧は、中間ノードの電圧に $r_{o3}$ での電圧降下を足したものです。

$$ v_{out} = v_x + i_{r_{o3}} r_{o3} = i_x r_{o2} + \left(i_x + g_{m3}i_x r_{o2}\right)r_{o3} $$

$i_x$ でくくって割ると、出力抵抗が得られます。

$$ \begin{equation} R_{out} = r_{o2} + r_{o3} + g_{m3}r_{o2}r_{o3} \end{equation} $$

第 3 項が支配的なので、$r_{o2}\approx r_{o3} \approx r_o$、$g_{m3}\approx g_m$ とみなせば

$$ R_{out} \approx g_m r_o^2 = (g_m r_o)\cdot r_o $$

出力抵抗が固有利得 $g_m r_o$ 倍に跳ね上がるわけです。先ほどの数値例($g_m = 0.657$ mS、$r_o = 100\ \mathrm{k\Omega}$)では

$$ R_{out} \approx 0.657\times10^{-3} \times (100\times10^3)^2 = 6.6\ \mathrm{M\Omega} $$

基本ミラーの 100 kΩ に対して約 66 倍です。式 (7) の誤差にあてはめれば、$V_{out}$ が 1 V 動いたときの電流変化は 10% から 0.15% に減ります。

なお、$M_3$ のバルク(基板)が接地されソースが $V_x$ に浮いている場合、基板バイアス効果により実効的な相互コンダクタンスは $g_{m3} + g_{mb3}$ になります。$g_{mb}/g_m$ は 0.1〜0.3 程度なので、出力抵抗はさらに 1.1〜1.3 倍だけ有利になります。

カスコードの代償 — 最小動作電圧

いいことずくめに見えますが、代償があります。トランジスタを縦に 2 段積んだので、出力ノードが下げられる電圧の下限が上がるのです。この下限を出力コンプライアンス電圧 $V_{out,\min}$ と呼びます。

条件を丁寧に書き出しましょう。$M_3$ が飽和領域にいる条件は $V_{DS3} \geq V_{GS3} – V_{th}$ です。$V_{DS3} = V_{out} – V_x$、$V_{GS3} = V_b – V_x$ を代入すると

$$ V_{out} – V_x \geq V_b – V_x – V_{th} \quad \Longleftrightarrow \quad V_{out} \geq V_b – V_{th} $$

$V_x$ が両辺から消えるのが気持ちのよいところです。$M_3$ の飽和条件は、中間ノード電圧によらず $V_{out} \geq V_b – V_{th}$ と書けます。

もう一つ、$M_2$ も飽和していなければなりません。その条件は $V_x \geq V_{ov}$ です。$M_2$ と $M_3$ が同じ寸法で同じ電流を流すなら $V_{GS3} = V_{th}+V_{ov}$ なので、$V_x = V_b – V_{GS3} = V_b – V_{th} – V_{ov}$ です。したがって

$$ V_b – V_{th} – V_{ov} \geq V_{ov} \quad \Longleftrightarrow \quad V_b \geq V_{th} + 2V_{ov} $$

この 2 つを合わせると、$V_b$ を最小値 $V_{th}+2V_{ov}$ に選んだときに $V_{out,\min} = V_b – V_{th} = 2V_{ov}$ となり、これが理論限界です。

問題は、素直な回路で $V_b$ を作ると最小値になってくれないことです。最もよく見る構成は、ダイオード接続を 2 段積んで $V_b = 2V_{GS} = 2V_{th} + 2V_{ov}$ を作る方法です。この場合

$$ V_{out,\min} = V_b – V_{th} = V_{th} + 2V_{ov} $$

となり、理論限界より $V_{th}$ だけ余分に電圧を食います。数値例($V_{th}=0.5$ V、$V_{ov}=0.30$ V)では $V_{out,\min} = 1.11$ V です。電源電圧が 1.8 V の回路で 1.11 V を電流源に取られたら、信号が振れる余地は 0.69 V しか残りません。

この「余分な $V_{th}$」をどう削るか。次の節で見るワイドスイングカスコードは、まさにこの一点を解決するための工夫です。

ワイドスイングカスコードカレントミラー

必要なのは適切な $V_b$ を作ることだけ

前節の解析が教えてくれるのは、「精度(出力抵抗)は $V_b$ の値によらず $g_m r_o^2$ で決まるが、最小動作電圧は $V_b$ で決まる」という事実です。だとすれば、$V_b$ を必要最小限の $V_{th}+2V_{ov}$ ちょうどに作れば、精度を一切犠牲にせず最小動作電圧を $2V_{ov}$ まで下げられます。これがワイドスイングカスコード(low-voltage cascode とも呼ばれます)の考え方です。

数値例では $V_{out,\min}$ が 1.11 V から $2\times 0.30 = 0.61$ V へと、ほぼ半分になります。1.8 V 電源での信号振幅の余地は 0.69 V から 1.19 V へ、約 1.7 倍に広がります。低電圧化が進む現代のプロセスでは決定的な差です。

3方式の出力抵抗(対数目盛)と最小動作電圧の比較。カスコード2方式は出力抵抗が同等だがワイドスイングだけ最小電圧が半分

この 2 枚を並べると、ワイドスイング化が何を得て何も失っていないかが一目でわかります。左の出力抵抗(対数目盛)では単純カスコードの 8.06 MΩ とワイドスイングの 8.23 MΩ がほぼ同じ高さで、基本ミラーの 108 kΩ に対して 2 桁近く上にあります。一方、右の最小動作電圧はワイドスイングだけが 0.61 V と半分以下で、1.8 V 電源に対する食い込みが目に見えて小さくなっています。精度の棒はそのままに、電圧の棒だけを削るのがこの方式の狙いです。

$W/(4L)$ が生む「ちょうどよい」バイアス

では $V_{th} + 2V_{ov}$ という電圧をどう作るか。ここに巧妙なトリックがあります。ダイオード接続したトランジスタのゲート電圧は式 (2) より

$$ V_{GS} = V_{th} + \sqrt{\frac{2I}{K'(W/L)}} $$

でした。ここでアスペクト比を 1/4 にした素子に、同じ電流 $I$ を流すとどうなるでしょうか。$(W/L) \to (W/L)/4$ を代入します。

$$ V_{GS}’ = V_{th} + \sqrt{\frac{2I}{K'(W/L)/4}} = V_{th} + \sqrt{4\cdot\frac{2I}{K'(W/L)}} = V_{th} + 2\sqrt{\frac{2I}{K'(W/L)}} $$

最後の変形では $\sqrt{4} = 2$ を平方根の外に出しました。右辺の平方根はまさに $V_{ov}$ ですから、

$$ \begin{equation} V_{GS}’ = V_{th} + 2V_{ov} \end{equation} $$

アスペクト比を 1/4 にするだけで、欲しかったバイアス電圧がぴったり得られるのです。$L$ を 4 倍にするか $W$ を 1/4 にするかは設計判断ですが、いずれにせよ追加素子 1 個で済みます。しかも、この関係は $I$ にも $K’$ にも $V_{th}$ にも依存しない形で成立しているので、プロセスばらつきや温度変化に対して自動的に追従してくれます。電流が変われば $V_{ov}$ が変わり、それに応じて $V_b$ も $V_{th}+2V_{ov}$ を保つのです。

実際の回路では、この 1/4 素子に基準電流のコピーを流してバイアス枝を作ります。なお、そのままだと素子が三極管領域に入ってしまうため、実装ではバイアス枝にも重ね合わせのトランジスタを入れる、あるいは $V_{ov}$ に少しマージンを持たせる(1/4 ではなく 1/3 程度にする)といった調整が加えられます。

基準側もカスコードにする理由

もう一点、精度上で重要な実装ポイントがあります。出力側だけをカスコードにして基準側を単純なダイオード接続のままにすると、下段トランジスタの $V_{DS}$ が基準側と出力側で異なってしまいます。式 (7) が示したとおり、$V_{DS}$ の不一致はそのまま系統誤差になります。

具体的には、基準側の下段 $M_1$ は $V_{DS1}=V_{GS}\approx 0.80$ V で動作するのに対し、出力側の下段 $M_2$ はカスコードのソース電圧 $V_x \approx V_{ov} = 0.31$ V で動作します。この 0.49 V の差が $\lambda = 0.1$ のもとで約 4.5% の系統誤差を生みます。カスコードで出力抵抗を 66 倍にしたのに、固定オフセットが 4.5% 残るのでは片手落ちです。

対策は簡単で、基準側にもまったく同じカスコード構造を置くことです。そうすれば $V_{DS1} = V_{DS2}$ が保たれ、系統誤差は原理的にゼロになります。後の Python 実験では、この「基準側も揃えた」構成でシミュレーションしています。

ここまで見てきた改善はすべて MOS を念頭に置いたものでした。バイポーラ特有のベース電流誤差については、負帰還を使ってさらにエレガントに解決する構成があります。次はそれを見ましょう。

ウィルソンカレントミラー

負帰還でベース電流誤差を打ち消す

ウィルソンカレントミラー(Wilson current mirror)は 3 個のトランジスタで構成されます。$Q_1$ と $Q_2$ が通常のミラー対をなし、出力トランジスタ $Q_3$ のエミッタが $Q_2$ のコレクタに、ベースが $Q_1$ のコレクタ(=基準ノード)に接続されます。

この構成の妙味は、帰還ループが形成されている点にあります。何らかの理由で出力電流 $I_{out} = I_{C3}$ が増えようとすると、$Q_3$ のエミッタ電流が増え、それは $Q_2$ のコレクタ電流の増加を意味します。$Q_2$ の電流が増えると $Q_1$ の電流も同じだけ増えようとし、基準ノードの電圧が下がります。基準ノードは $Q_3$ のベースですから、$Q_3$ のベース電圧が下がって出力電流が押し戻されます。負帰還が働き、出力電流が安定化されるわけです。

ベース電流誤差の導出

$Q_1, Q_2$ が同一素子で、アーリー効果を無視できるとします。両者の $V_{BE}$ が等しいので $I_{C1} = I_{C2} \equiv I_C$、$I_{B1} = I_{B2} = I_C/\beta$ です。

$Q_3$ のエミッタ節点で電流則を書きます。$Q_3$ のエミッタから出る電流は、$Q_2$ のコレクタ電流と、$Q_1, Q_2$ 両方のベース電流を賄います。

$$ I_{E3} = I_{C2} + I_{B1} + I_{B2} = I_C\left(1 + \frac{2}{\beta}\right) $$

出力電流は $Q_3$ のコレクタ電流なので、$\alpha = \beta/(\beta+1)$ を使って

$$ I_{out} = I_{C3} = \alpha I_{E3} = \frac{\beta}{\beta+1}\cdot I_C\left(1+\frac{2}{\beta}\right) = \frac{\beta+2}{\beta+1}I_C $$

ここで $\frac{\beta}{\beta+1}\cdot\frac{\beta+2}{\beta} = \frac{\beta+2}{\beta+1}$ という約分を使いました。

基準ノードで電流則を書きます。流し込む $I_{ref}$ は $Q_1$ のコレクタ電流と $Q_3$ のベース電流に分かれます。

$$ I_{ref} = I_{C1} + I_{B3} = I_C + \frac{I_{E3}}{\beta+1} = I_C + \frac{I_C(1+2/\beta)}{\beta+1} = I_C\left[1 + \frac{\beta+2}{\beta(\beta+1)}\right] $$

角括弧の中を通分します。分母を $\beta(\beta+1)$ に揃えると

$$ 1 + \frac{\beta+2}{\beta(\beta+1)} = \frac{\beta(\beta+1) + \beta + 2}{\beta(\beta+1)} = \frac{\beta^2+2\beta+2}{\beta(\beta+1)} $$

以上を比の形にまとめます。分母分子に現れる $I_C$ が約分され、

$$ \frac{I_{out}}{I_{ref}} = \frac{\dfrac{\beta+2}{\beta+1}}{\dfrac{\beta^2+2\beta+2}{\beta(\beta+1)}} = \frac{\beta+2}{\beta+1}\cdot\frac{\beta(\beta+1)}{\beta^2+2\beta+2} = \frac{\beta^2+2\beta}{\beta^2+2\beta+2} $$

分母分子を $\beta^2+2\beta$ で割ると、見慣れた形になります。

$$ \begin{equation} \frac{I_{out}}{I_{ref}} = \frac{1}{1 + \dfrac{2}{\beta^2+2\beta}} \end{equation} $$

基本ミラーの $1/(1+2/\beta)$ と比べると、分母の $\beta$ が $\beta^2+2\beta$ に置き換わっています。$\beta = 100$ を代入すると $2/10200 = 1.96\times10^{-4}$、つまり誤差は $-0.020\%$ です。基本ミラーの $-1.96\%$ の 100 分の 1 になりました。$\beta = 50$ という低い値でも $-0.077\%$ にとどまります。

出力抵抗と使い分け

ウィルソンミラーは出力抵抗の面でも優れています。バイポーラ版の出力抵抗は帰還の効果により概ね

$$ R_{out} \approx \frac{\beta r_o}{2} $$

となり、基本ミラーの $r_o$ に対して $\beta/2$ 倍です。MOS 版のウィルソンミラーもありますが、MOS ではゲート電流がゼロなのでベース電流誤差の改善という主目的が消え、出力抵抗も $g_m r_o^2$ 程度でカスコードと大差ありません。加えて、MOS 版は帰還ループの安定性に注意が必要になるため、現代の CMOS 設計ではカスコード系が好まれます。

主な方式を整理すると次のようになります。

方式 出力抵抗 $V_{out,\min}$ 主な誤差要因
基本ミラー(MOS) $r_o$ $V_{ov}$ チャネル長変調(大)
基本ミラー(BJT) $r_o = V_A/I_C$ $V_{CE,sat}\approx 0.2$ V ベース電流 $-2/\beta$
ベータヘルパー(BJT) $r_o$ $V_{CE,sat}$ アーリー効果
カスコード(単純バイアス) $g_m r_o^2$ $V_{th}+2V_{ov}$ ミスマッチ
ワイドスイングカスコード $g_m r_o^2$ $2V_{ov}$ ミスマッチ
ウィルソン(BJT) $\beta r_o/2$ $V_{BE}+V_{CE,sat}$ $-2/(\beta^2+2\beta)$

ここまでの誤差はすべて「原理的に予測できる系統誤差」でした。式が書ければ補正もできます。しかし、実際のチップにはもう一種類、式では消せない誤差があります。素子ごとのランダムなばらつき — ミスマッチです。

ミスマッチ — しきい値ばらつきと寸法不整合

系統誤差とランダム誤差

これまで扱ってきたチャネル長変調やベース電流の誤差は、すべて系統誤差です。設計時に計算でき、回路構成の工夫で消せます。一方、同じマスクで描かれ隣り合って配置された 2 個のトランジスタでも、不純物ドーピングの離散性、酸化膜厚の局所変動、リソグラフィの微小な揺らぎなどにより、特性が完全には一致しません。これがランダムミスマッチで、統計的にしか扱えません。

カレントミラーの精度を最終的に決めるのは、系統誤差を除いた後に残るこのランダム成分です。

ミラー比誤差の感度式の導出

対数微分を使うのが見通しがよい方法です。ミラーのトランジスタ 1 個の電流を

$$ I = \frac{1}{2}\beta_T V_{ov}^2, \qquad \beta_T \equiv K’\frac{W}{L} $$

と書きます($\beta_T$ は相互コンダクタンス係数で、バイポーラの電流増幅率 $\beta$ とは別物です)。両辺の自然対数を取ると、積が和になります。

$$ \ln I = \ln\frac{\beta_T}{2} + 2\ln V_{ov} $$

微小変化について微分します。

$$ \frac{dI}{I} = \frac{d\beta_T}{\beta_T} + 2\frac{dV_{ov}}{V_{ov}} $$

ここで重要な点があります。ミラーの 2 素子はゲート電圧 $V_{GS}$ を共有しているので、$V_{ov} = V_{GS} – V_{th}$ の変化は $V_{th}$ のばらつきだけから来ます。つまり $dV_{ov} = -dV_{th}$ です。これを代入すると

$$ \begin{equation} \frac{\Delta I}{I} = \frac{\Delta\beta_T}{\beta_T} – \frac{2\Delta V_{th}}{V_{ov}} \end{equation} $$

という感度式が得られます。2 つの誤差源が独立なら、標準偏差は 2 乗和の平方根で合成されます。

$$ \begin{equation} \sigma\!\left(\frac{\Delta I}{I}\right) = \sqrt{\left(\frac{\sigma_{\beta_T}}{\beta_T}\right)^2 + \left(\frac{2\sigma_{\Delta V_{th}}}{V_{ov}}\right)^2} \end{equation} $$

この式は、カレントミラーの設計における最重要式のひとつです。読み取れることを整理しましょう。

第一に、$V_{th}$ ばらつきの寄与は $V_{ov}$ に反比例します。 $\sigma_{\Delta V_{th}} = 5$ mV のとき、$V_{ov} = 0.1$ V なら $2\times5/100 = 10\%$、$V_{ov}=0.3$ V なら $3.3\%$ です。オーバードライブを大きく取るほど精度が上がります。直感的には、「しきい値の 5 mV という揺らぎが、300 mV のオーバードライブに対してなら小さな割合だが、100 mV に対しては大きな割合になる」ということです。

第二に、$V_{ov}$ を大きくすると最小動作電圧が上がります。 基本ミラーで $V_{out,\min} = V_{ov}$、ワイドスイングカスコードで $2V_{ov}$ でした。精度を取るか電圧余裕を取るかの、逃げ場のないトレードオフがここに現れます。

第三に、$V_{ov}$ を大きくすると $g_m$ が下がります。 $g_m = 2I_D/V_{ov}$ ですから、同じ電流でオーバードライブを 3 倍にすれば $g_m$ は 1/3 になります。増幅段では利得の低下を意味するので、信号経路のトランジスタは小さい $V_{ov}$、バイアス経路のトランジスタは大きい $V_{ov}$、というのが定石になります。

Pelgrom 則 — 面積を買えば精度が買える

では $\sigma_{\Delta V_{th}}$ 自体は何で決まるのでしょうか。実測から、素子面積の平方根に反比例するという法則が知られています。Pelgrom 則です。

$$ \begin{equation} \sigma_{\Delta V_{th}} = \frac{A_{VT}}{\sqrt{WL}}, \qquad \frac{\sigma_{\Delta\beta_T}}{\beta_T} = \frac{A_{\beta}}{\sqrt{WL}} \end{equation} $$

$A_{VT}$ はプロセス固有の定数で、単位は $\mathrm{mV\cdot\mu m}$ です。物理的な根拠は、チャネル下の空乏層に含まれる不純物原子の個数の統計的な揺らぎにあります。面積 $WL$ に比例して原子数 $N$ が増え、相対的な揺らぎは $\sqrt{N}/N = 1/\sqrt{N} \propto 1/\sqrt{WL}$ に従うのです。ポアソン統計そのものです。

Pelgrom則。左はσΔVthが面積の平方根に反比例すること、右は目標精度1%に必要なゲート面積がVovで変わること

左の両対数グラフは $\sigma_{\Delta V_{th}} = A_{VT}/\sqrt{WL}$ を描いたもので、傾き $-1/2$ の直線になります。面積を 100 倍(2 µm² → 200 µm²)にして、ばらつきは 3.54 mV から 0.35 mV へ 10 分の 1 です。右のグラフは、これを式 (15) に入れて得られるミラー比のばらつきで、$1\%$ の目標線を切るのに必要なゲート面積が $V_{ov}=0.10$ V では約 100 µm² も要るのに対し、$V_{ov}=0.30$ V なら約 12 µm² で済むことがわかります。オーバードライブを取れる設計なら、同じ精度を 8 分の 1 の面積で買えるということです。

$A_{VT} = 5\ \mathrm{mV\cdot\mu m}$ という値で計算してみましょう。

  • $W = 2\ \mu$m、$L = 1\ \mu$m(面積 2 µm²)→ $\sigma_{\Delta V_{th}} = 5/\sqrt{2} = 3.5$ mV
  • $W = 10\ \mu$m、$L = 5\ \mu$m(面積 50 µm²)→ $\sigma_{\Delta V_{th}} = 5/\sqrt{50} = 0.71$ mV
  • $W = 20\ \mu$m、$L = 10\ \mu$m(面積 200 µm²)→ $\sigma_{\Delta V_{th}} = 0.35$ mV

面積を 100 倍にすれば精度は 10 倍。精度は面積で買えるが、その価格は平方根で効いてくる、というわけです。12 ビット精度の DAC で電流セルが巨大になるのはこの法則の帰結です。

レイアウトで削れる誤差

Pelgrom 則が扱うのは局所的なランダム誤差ですが、実際のチップにはウェハ面内の勾配(酸化膜厚やドーピング濃度の緩やかな傾き)もあります。これはレイアウトの工夫で大きく減らせます。

  • コモンセントロイド配置: 素子を分割して対称に配置し、2 素子の「重心」を一致させます。1 次の線形勾配が原理的に相殺されます
  • 同一方向・同一形状: すべての素子を同じ向きに描き、同じ寸法の単位トランジスタで構成します。異なる向きの素子は応力の影響が違って現れます
  • ダミー素子: 配列の両端に電気的に無効なダミートランジスタを置きます。端の素子だけがエッチング環境が違って寸法がずれる現象を防ぎます
  • 周囲環境の統一: コンタクト数、金属配線の重なり、ウェル境界からの距離を揃えます

これらは「設計者の腕」が最も出る部分であり、同じ回路図でもレイアウト次第で精度が数倍変わります。

理論の道具は揃いました。ここからは、これまで導いた式が実際にどう振る舞うかを Python で確かめていきましょう。

Pythonでの実装と検証

簡易MOSモデルと動作点の計算

まず、式 (6) に三極管領域を接続した簡易 MOS モデルを定義し、$I_{ref}=100\ \mu$A を流したときのゲート電圧を求めます。方程式 $I_D(V_{GS},V_{GS}) = I_{ref}$ は解析的にも解けますが、後でカスコードの数値解が必要になるので、最初から数値求解器を使う流儀で書いておきます。

import numpy as np
from scipy.optimize import brentq

# プロセス・パラメータ(教科書的な簡易モデル)
KP   = 200e-6   # mu_n * C_ox [A/V^2]
VTH  = 0.5      # しきい値電圧 [V]
LAM  = 0.1      # チャネル長変調係数 [1/V]
WL   = 10.0     # アスペクト比 W/L
IREF = 100e-6   # 基準電流 [A]

def id_mos(vgs, vds, wl=WL):
    """簡易MOSモデル: 三極管領域と飽和領域をつなぎ (1+lambda*Vds) を掛ける"""
    vov = vgs - VTH
    if vov <= 0 or vds <= 0:
        return 0.0
    if vds < vov:                        # 三極管(線形)領域
        i = KP * wl * (vov * vds - 0.5 * vds ** 2)
    else:                                # 飽和領域
        i = 0.5 * KP * wl * vov ** 2
    return i * (1.0 + LAM * vds)

# ダイオード接続(Vds = Vgs)で Iref が流れる Vgs を数値的に求める
VGS = brentq(lambda v: id_mos(v, v) - IREF, VTH + 1e-4, 3.0)
VOV = VGS - VTH
print(f"V_GS = {VGS:.4f} V,   V_ov = {VOV:.4f} V")
print(f"理想式(lambda=0)の V_ov = {np.sqrt(2*IREF/(KP*WL)):.4f} V")
print(f"g_m = {2*IREF/VOV*1e3:.3f} mS,  r_o = {1/(LAM*IREF)/1e3:.1f} kOhm,"
      f"  g_m*r_o = {2/(LAM*VOV):.1f}")

実行すると $V_{GS} = 0.8042$ V、$V_{ov} = 0.3042$ V が得られます。手計算で求めた理想値 $V_{ov}=0.3162$ V よりわずかに小さいのは、ダイオード接続では $V_{DS}=V_{GS}=0.8$ V の分だけチャネル長変調で電流が 8% ほど水増しされており、その分だけ低いオーバードライブで $100\ \mu$A に達するからです。$g_m = 0.657$ mS、$r_o = 100.0\ \mathrm{k\Omega}$、固有利得 $g_m r_o = 65.7$ という値も、式 (10) の $2/(\lambda V_{ov})$ と一致しています。

基本カレントミラーの出力特性

次に、出力電圧 $V_{out}$ を 0 から 3 V まで振ったときの出力電流を計算します。理想的な電流源なら水平な直線になるはずです。

import matplotlib
import 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

vout = np.linspace(0.0, 3.0, 601)
iout = np.array([id_mos(VGS, v) for v in vout])

fig, ax = plt.subplots(figsize=(9, 5))
ax.plot(vout, iout * 1e6, lw=2.2, color="#1f77b4", label="実際の出力電流")
ax.axhline(IREF * 1e6, ls="--", color="gray", lw=1.5, label="理想(基準電流 100 μA)")
ax.axvline(VOV, ls=":", color="crimson", lw=1.8,
           label=f"飽和の境界 $V_{{ov}}$ = {VOV:.2f} V")
ax.axvline(VGS, ls=":", color="green", lw=1.8,
           label=f"誤差ゼロ点 $V_{{out}}=V_{{GS}}$ = {VGS:.2f} V")
ax.fill_between(vout, IREF * 1e6, iout * 1e6, where=(vout > VOV),
                color="#1f77b4", alpha=0.12)
ax.set_xlabel("出力電圧 $V_{out}$ [V]")
ax.set_ylabel("出力電流 $I_{out}$ [μA]")
ax.set_title("基本カレントミラーの出力特性 — チャネル長変調で右肩上がりになる")
ax.set_ylim(0, 130)
ax.grid(alpha=0.3)
ax.legend(loc="lower right")
plt.tight_layout()
plt.show()

for v in [0.5, 1.0, 1.8, 3.0]:
    e = (id_mos(VGS, v) / IREF - 1) * 100
    print(f"Vout = {v:.1f} V : Iout = {id_mos(VGS, v)*1e6:6.2f} uA  誤差 {e:+6.2f} %")

基本カレントミラーの出力特性。Vout<Vovで三極管領域に落ち、飽和領域では右肩上がり、Vout=VGSでのみ誤差ゼロ

このグラフからは 3 つのことが読み取れます。第一に、$V_{out} < V_{ov} = 0.30$ V の領域では出力トランジスタが三極管領域に落ち、電流が急激に減っています。ここがコンプライアンス電圧の下限です。第二に、飽和領域に入った後も特性は水平ではなく右肩上がりの直線で、これがチャネル長変調による誤差です。第三に、$V_{out} = V_{GS} = 0.80$ V のちょうど 1 点でのみ誤差がゼロになります。式 (7) が予言したとおりです。数値では $V_{out}=1.8$ V で $+9.22\%$、$3.0$ V では $+20.3\%$ に達し、$(W/L)$ 比の合わせ込み精度がこの誤差の前では無意味であることがよくわかります。

カスコードとワイドスイングの比較

次に、カスコード段を追加した場合を計算します。カスコード枝では中間ノード電圧 $V_x$ が未知数になるので、「下段の電流 = カスコード段の電流」という条件から $V_x$ を数値的に求めます。基準側にも同じカスコード構造を置いた前提で、出力電圧 1.0 V のときにちょうど $I_{ref}$ が流れるようゲート電圧を較正します。

def branch_i(vg, vb, vtop, wl=WL):
    """カスコード枝の電流: 下段ゲート=vg, カスコードゲート=vb, 出力ノード=vtop"""
    hi = min(vtop, vb - VTH) - 1e-9
    if hi <= 1e-9:
        return 0.0
    g = lambda vx: id_mos(vg, vx, wl) - id_mos(vb - vx, vtop - vx, wl)
    xs = np.linspace(1e-9, hi, 4001)
    vals = np.array([g(x) for x in xs])
    s = np.where(np.sign(vals[:-1]) != np.sign(vals[1:]))[0]
    if len(s) == 0:
        return np.nan
    vx = brentq(g, xs[s[0]], xs[s[0] + 1])
    return id_mos(vg, vx, wl)

VB_S = 2 * VGS            # 単純カスコード: ダイオード2段でバイアス(Vth+2Vov より Vth だけ高い)
VB_W = VTH + 2 * VOV      # ワイドスイング: 必要最小限のバイアス

# 基準側も同じ構造とし、Vout=1.0 V で Iref になるよう下段ゲート電圧を較正
VG_S = brentq(lambda v: branch_i(v, VB_S, 1.0) - IREF, VTH + 1e-4, 2.0)
VG_W = brentq(lambda v: branch_i(v, VB_W, 1.0) - IREF, VTH + 1e-4, 2.0)
print(f"単純カスコード  : V_b = {VB_S:.3f} V,  V_out,min(理論) = {VB_S-VTH:.3f} V")
print(f"ワイドスイング  : V_b = {VB_W:.3f} V,  V_out,min(理論) = {VB_W-VTH:.3f} V")

出力される値は $V_b = 1.608$ V / $1.108$ V、対応する理論上の最小出力電圧は $1.108$ V / $0.608$ V です。ワイドスイング化によって、精度に関わるパラメータを一切変えずに最小動作電圧が約半分になったことが確認できます。$V_{th}+2V_{ov}$ と $2V_{ov}$ の差、すなわち $V_{th}=0.5$ V ぶんがそのまま浮いた計算です。

続いて、3 方式の出力特性を重ねて描きます。

vout2 = np.linspace(0.05, 3.0, 400)
i_basic = np.array([id_mos(VGS, v) for v in vout2])
i_casc  = np.array([branch_i(VG_S, VB_S, v) for v in vout2])
i_wide  = np.array([branch_i(VG_W, VB_W, v) for v in vout2])

fig, axes = plt.subplots(1, 2, figsize=(13, 5))
for i, lab, c in [(i_basic, "基本ミラー", "#1f77b4"),
                  (i_casc,  "カスコード(単純バイアス)", "#ff7f0e"),
                  (i_wide,  "ワイドスイングカスコード", "#2ca02c")]:
    axes[0].plot(vout2, i * 1e6, lw=2.2, color=c, label=lab)
    axes[1].plot(vout2, (i / IREF - 1) * 100, lw=2.2, color=c, label=lab)
axes[0].axhline(IREF * 1e6, ls="--", color="gray", lw=1.2, label="理想 100 μA")
axes[0].set_ylim(0, 130); axes[0].set_ylabel("出力電流 $I_{out}$ [μA]")
axes[0].set_title("3方式の出力特性")
axes[1].axhline(0, ls="--", color="gray", lw=1.2)
axes[1].axhline(1, ls=":", color="k", lw=1.0)
axes[1].axhline(-1, ls=":", color="k", lw=1.0)
axes[1].set_ylim(-15, 15); axes[1].set_ylabel("ミラー比誤差 [%]")
axes[1].set_title("誤差の拡大表示(点線は ±1 % 帯)")
for ax in axes:
    ax.set_xlabel("出力電圧 $V_{out}$ [V]"); ax.grid(alpha=0.3); ax.legend(fontsize=9)
plt.tight_layout()
plt.show()

def rout(f, v=1.8, d=0.01):
    """動作点 v まわりの数値微分から出力抵抗を求める"""
    return 2 * d / (f(v + d) - f(v - d))

gm, ro = 2 * IREF / VOV, 1 / (LAM * IREF)
print(f"出力抵抗 基本ミラー     : {rout(lambda v: id_mos(VGS, v))/1e3:8.1f} kOhm")
print(f"出力抵抗 カスコード     : {rout(lambda v: branch_i(VG_S, VB_S, v))/1e6:8.2f} MOhm")
print(f"出力抵抗 ワイドスイング : {rout(lambda v: branch_i(VG_W, VB_W, v))/1e6:8.2f} MOhm")
print(f"理論値 g_m * r_o^2      : {gm * ro**2 / 1e6:8.2f} MOhm")

基本ミラー・カスコード・ワイドスイングの3方式の出力特性と、ミラー比誤差の拡大表示

左のグラフでは、基本ミラー(青)だけが明確に右肩上がりで、カスコード 2 方式(橙・緑)はほぼ完全に水平です。右の拡大図が本質を示しています。基本ミラーは $\pm 1\%$ 帯をすぐに飛び出し、$V_{out}=1.8$ V で $+9.2\%$、$3.0$ V で $+20.3\%$ に達します。一方カスコードは、それぞれのコンプライアンス電圧より上の領域では $\pm 0.5\%$ 以内に収まります。数値としては $V_{out}=1.8$ V で単純カスコードが $+0.27\%$、ワイドスイングが $+0.18\%$、$3.0$ V まで振っても $+0.41\%$ と $+0.32\%$ にとどまります。

差が出るのは低電圧側です。単純カスコード(橙)は $V_{out}$ が 0.80 V を下回るあたりで $\pm 1\%$ 帯を外れるのに対し、ワイドスイング(緑)は 0.52 V まで $\pm 1\%$ 帯にとどまります。それぞれ理論値 $V_{th}+2V_{ov}=1.11$ V、$2V_{ov}=0.61$ V よりやや低い電圧まで粘っていますが、これは飽和領域から三極管領域への遷移が滑らかであるためで、崩れ始める順序と間隔(約 0.5 V の差)は導出した式の予測どおりです。

出力抵抗の実測値は、基本ミラーが $108\ \mathrm{k\Omega}$、単純カスコードが $8.06\ \mathrm{M\Omega}$、ワイドスイングが $8.23\ \mathrm{M\Omega}$ でした。カスコードは基本ミラーの約 75 倍で、これは固有利得 $g_m r_o = 65.7$ とオーダーが一致します(差は $r_o$ を評価する動作点の取り方による)。式 (11) の $R_{out}\approx g_m r_o^2 = 6.6\ \mathrm{M\Omega}$ という見積もりも、数 MΩ という桁を正しく予測しています。

ミスマッチのモンテカルロ解析

ここまでは系統誤差の話でした。次に、素子ばらつきによるランダム誤差を数値実験で確認します。しきい値電圧差 $\Delta V_{th} \sim \mathcal{N}(0, \sigma_{V_{th}}^2)$ と相互コンダクタンス係数の相対差 $\Delta\beta_T/\beta_T \sim \mathcal{N}(0, \sigma_{\beta}^2)$ を与え、ミラー比のヒストグラムを描きます。

rng = np.random.default_rng(0)
N = 20000
sig_vth, sig_beta = 5e-3, 0.005   # 5 mV, 0.5 %
vov_list = [0.10, 0.15, 0.20, 0.30]

fig, ax = plt.subplots(figsize=(9.5, 5))
for vov in vov_list:
    dvth  = rng.normal(0, sig_vth, N)
    dbeta = rng.normal(0, sig_beta, N)
    # I ∝ beta_T * (Vov - dVth)^2  (ゲート電圧は共有なので Vov のずれは -dVth)
    ratio = (1 + dbeta) * ((vov - dvth) / vov) ** 2
    sd = ratio.std() * 100
    sd_th = 100 * np.sqrt(sig_beta**2 + (2*sig_vth/vov)**2)
    ax.hist((ratio - 1) * 100, bins=120, histtype="step", lw=2, density=True,
            label=f"$V_{{ov}}$={vov:.2f} V : 実測σ={sd:.2f} %(理論 {sd_th:.2f} %)")
ax.set_xlabel("ミラー比の誤差 [%]")
ax.set_ylabel("確率密度")
ax.set_xlim(-25, 25)
ax.set_title("しきい値ばらつき(σ=5 mV)とW/L不整合(0.5 %)によるミラー比のばらつき")
ax.grid(alpha=0.3)
ax.legend(fontsize=9)
plt.tight_layout()
plt.show()

オーバードライブ電圧を変えたときのミラー比誤差のヒストグラム。Vovが大きいほど分布が鋭くなる

4 つのヒストグラムは、オーバードライブ電圧が大きいほど鋭くなります。$V_{ov}=0.10$ V では標準偏差 $9.98\%$、$0.15$ V では $6.67\%$、$0.20$ V では $5.03\%$、$0.30$ V では $3.37\%$ です。式 (15) の理論値 $10.01\%$、$6.69\%$、$5.02\%$、$3.37\%$ とほぼ完全に一致しており、$V_{ov}$ に反比例するという予測が確認できました。

もう一点、分布の平均が 1 からわずかに正へずれていることにも注目してください。これは $(V_{ov}-\Delta V_{th})^2$ という 2 次の非線形性のためで、$\Delta V_{th}$ の 2 乗の期待値が正のバイアスを生みます。$V_{ov}=0.10$ V では平均が $+0.20\%$ ずれます。ばらつきが大きい設計では、平均値そのものも設計値からずれるという注意点です。

精度と最小動作電圧のトレードオフ

最後に、本記事で繰り返し現れたトレードオフを 1 枚の図にまとめます。オーバードライブ電圧を横軸に取り、左軸にミラー比のばらつき、右軸に最小動作電圧をプロットします。

vov_ax = np.linspace(0.05, 0.60, 200)
sigma_i = 100 * np.sqrt(sig_beta**2 + (2*sig_vth/vov_ax)**2)   # 式(15)
gm_ro   = 2 / (LAM * vov_ax)                                   # 式(10)

fig, ax1 = plt.subplots(figsize=(9.5, 5.2))
ax1.plot(vov_ax, sigma_i, lw=2.4, color="#d62728", label="ミラー比のばらつき $σ(ΔI/I)$")
ax1.set_xlabel("オーバードライブ電圧 $V_{ov}$ [V]")
ax1.set_ylabel("ミラー比のばらつき [%]", color="#d62728")
ax1.tick_params(axis="y", labelcolor="#d62728")
ax1.set_ylim(0, 22); ax1.grid(alpha=0.3)

ax2 = ax1.twinx()
ax2.plot(vov_ax, vov_ax, lw=2.2, ls="--", color="#1f77b4", label="基本ミラーの $V_{out,min}=V_{ov}$")
ax2.plot(vov_ax, 2*vov_ax, lw=2.2, ls="-.", color="#2ca02c", label="ワイドスイングの $V_{out,min}=2V_{ov}$")
ax2.plot(vov_ax, VTH + 2*vov_ax, lw=2.2, ls=":", color="#ff7f0e", label="単純カスコードの $V_{out,min}$")
ax2.set_ylabel("最小出力電圧 [V]", color="#1f77b4")
ax2.tick_params(axis="y", labelcolor="#1f77b4")
ax2.set_ylim(0, 2.0)

h1, l1 = ax1.get_legend_handles_labels(); h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2, loc="upper center", fontsize=9)
ax1.set_title("精度と最小動作電圧のトレードオフ(左軸:小さいほど良い/右軸:小さいほど良い)")
plt.tight_layout()
plt.show()

for v in [0.1, 0.2, 0.3, 0.5]:
    s = 100*np.sqrt(sig_beta**2 + (2*sig_vth/v)**2)
    print(f"Vov={v:.2f} V : σ(ΔI/I)={s:5.2f} %,  基本={v:.2f} V, ワイドスイング={2*v:.2f} V,"
          f"  g_m*r_o={2/(LAM*v):5.1f}")

オーバードライブ電圧に対する精度と最小動作電圧のトレードオフ。左軸はばらつき、右軸は最小出力電圧

この図が本記事の設計上の結論を集約しています。赤い曲線(精度)は右へ行くほど改善しますが、$V_{ov}$ が 0.3 V を超えたあたりから改善は緩やかになります。$1/V_{ov}$ で減衰するので、当然といえば当然です。一方、青・緑・橙の直線(最小動作電圧)は右へ行くほど直線的に悪化します。したがって最適点は $V_{ov} = 0.2\text{–}0.3$ V あたりの、赤い曲線の「肘」の付近に存在します。実際、多くの CMOS アナログ設計でバイアス用トランジスタの $V_{ov}$ が 0.15〜0.25 V に設定されるのは、この図の形が理由です。

数値で見ると、$V_{ov}=0.1$ V ではばらつき $10.0\%$ に対しワイドスイングの最小電圧は $0.20$ V、$V_{ov}=0.3$ V ではばらつき $3.4\%$ に対し $0.60$ V です。ばらつきを 3 分の 1 にする代償として電圧余裕を 0.4 V 失う、というのが具体的な交換レートです。さらに固有利得 $g_m r_o$ は $V_{ov}=0.1$ V で 200、$0.3$ V で 66.7、$0.5$ V で 40 と低下していきますから、増幅段では小さい $V_{ov}$ が望ましいという第三の軸も同時に効いてきます。カレントミラーの設計とは、この 3 つの軸の間で妥協点を探す作業にほかなりません。

まとめ

本記事では、カレントミラー回路を原理から精度改善まで通して解説しました。要点を整理します。

  • カレントミラーの本質は「絶対値でなく比に頼る」こと。MOS では飽和領域の 2 乗則から $I_{out}/I_{ref} = (W/L)_2/(W/L)_1$ が導かれ、$\mu_n C_{ox}$ も $V_{th}$ も約分で消えます。バイポーラでは指数則からエミッタ面積比 $A_{E2}/A_{E1}$ が得られ、同じ構造をしています
  • ダイオード接続は常に飽和領域にとどまるので、基準電流を電圧に変換する素子として理想的です
  • バイポーラ特有の系統誤差はベース電流で、$I_{out}/I_{ref} = 1/(1+2/\beta)$ より $\beta=100$ で $-1.96\%$。ベータヘルパーで $-0.020\%$ まで縮みます
  • MOS 特有の主要誤差はチャネル長変調で、$I_{out}/I_{ref}$ に $(1+\lambda V_{out})/(1+\lambda V_{GS})$ という因子が付きます。$\lambda=0.1$、$V_{out}=1.8$ V では $+9.2\%$ にもなり、寸法比の合わせ込み精度を圧倒します
  • 出力抵抗 $r_o = 1/(\lambda I_D) = V_A/I_D$ が電流源の品質指標。相互コンダクタンスとの積である固有利得は $g_m r_o = 2/(\lambda V_{ov})$ で、電流に依存しません
  • カスコードは出力抵抗を $g_m r_o$ 倍にする。小信号解析から $R_{out} = r_{o2}+r_{o3}+g_{m3}r_{o2}r_{o3} \approx g_m r_o^2$ が導かれ、数値例では 108 kΩ が 8 MΩ になりました
  • ワイドスイングカスコードは、精度を犠牲にせず最小動作電圧を $V_{th}+2V_{ov}$ から $2V_{ov}$ へ下げます。$W/(4L)$ のダイオード接続素子が $V_{th}+2V_{ov}$ をちょうど生成するというトリックが鍵です
  • ウィルソンミラーは負帰還でベース電流誤差を $2/(\beta^2+2\beta)$ に圧縮します。バイポーラでは $-0.020\%$ まで改善し、出力抵抗も $\beta r_o/2$ に伸びます
  • ランダム誤差は $\Delta I/I = \Delta\beta_T/\beta_T – 2\Delta V_{th}/V_{ov}$ で決まり、$V_{ov}$ を大きくするほど改善しますが最小動作電圧が上がります。$\sigma_{\Delta V_{th}} = A_{VT}/\sqrt{WL}$(Pelgrom 則)より、精度は素子面積の平方根で買えます

カレントミラーは、アナログ回路設計における「比に頼る」という思想と、「精度・電圧余裕・利得のトレードオフ」という現実の両方が最も鮮明に現れる回路です。ここで身につけた $g_m$、$r_o$、$V_{ov}$、$g_m r_o$ という 4 つの量の関係は、そのままオペアンプの利得設計や基準電圧回路の解析に使えます。差動増幅器の能動負荷としてカレントミラーがどう働くか、あるいはバンドギャップリファレンスでどう使われるかを追ってみると、理解がさらに立体的になるはずです。

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