FET・MOSFETの理論 — 電圧制御型トランジスタの動作と特性

あなたのスマートフォンの中には数十億個ものトランジスタが集積されていますが、そのほぼすべてがMOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor) です。バイポーラトランジスタが電流で電流を制御する「電流制御型」であるのに対し、MOSFETは電圧で電流を制御する「電圧制御型」です。入力がほぼ電流を消費しないため、集積回路における消費電力を劇的に低減できます。

FET(電界効果トランジスタ) の基本思想は、半導体チャネルの導電性を外部の電界で制御するというシンプルなものです。1930年にリリエンフェルトが特許を取得し、1960年代にMOSFETとして実用化されたこのデバイスは、現代のデジタル文明の基盤を形作りました。

FET/MOSFETを理解すると、以下のような幅広い領域が見えてきます。

  • デジタルIC設計: CMOS論理回路の動作原理(プロセッサ、メモリ)
  • アナログIC設計: オペアンプの入力段、電流ミラー
  • パワーエレクトロニクス: パワーMOSFETによる高効率スイッチング
  • RF回路: 低雑音増幅器(LNA)での利用

本記事の内容

  • JFET/MOSFETの構造と動作原理
  • エンハンスメント型/デプレッション型の違い
  • ドレイン電流式(二乗則)の導出
  • 小信号パラメータ($g_m$, $r_{ds}$)
  • CMOSの基本原理
  • Pythonによる特性の可視化

前提知識

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

電界効果トランジスタの基本概念

電界効果とは

電界効果トランジスタの動作原理を一言で表すと、「電界でチャネルの幅を変えて電流を制御する」です。

庭のホースを想像してみてください。ホースの中を水(電流)が流れていますが、ホースを手で押さえつける(電界をかける)と通路が狭くなり、水の流れが減ります。強く押せば完全に止まります。FETの動作はこれに非常によく似ています。

ゲート電極に電圧を加えることで半導体チャネル内の電界を制御し、チャネルの実効的な断面積(つまり導電性)を変化させます。ゲートには直流的な電流がほとんど流れないため、制御に必要なエネルギーがきわめて小さいのが大きな利点です。

FETの分類

FETは大きく2つのファミリーに分けられます。

種類 ゲート構造 特徴
JFET(接合型FET) pn接合 構造がシンプル、デプレッション型のみ
MOSFET(MOS型FET) 金属-酸化膜-半導体 集積化に適する、エンハンスメント型/デプレッション型

さらにMOSFETは、チャネルの導電型(nチャネル/pチャネル)と動作モード(エンハンスメント/デプレッション)で4種類に分類されます。

それでは、まずJFETの動作原理から見ていきましょう。

JFETの構造と動作

JFETの構造

nチャネルJFETは、n型半導体のチャネルの両側をp型のゲート領域で挟んだ構造です。チャネルの両端はドレイン(D)ソース(S)、チャネルを制御するのがゲート(G) です。

ゲートとチャネルの間にはpn接合が形成されており、逆方向バイアスを印加すると空乏層が広がってチャネルが狭くなります。

動作原理

$V_{DS} = 0$(ドレイン-ソース間電圧ゼロ)の場合を考えます。

ゲート電圧 $V_{GS} = 0$: 空乏層は熱平衡での幅しかなく、チャネルは最も広い状態です。$V_{DS}$ を印加すれば最大の電流が流れます。

$V_{GS} < 0$(nチャネルの場合): ゲート-チャネルのpn接合の逆バイアスが増加し、空乏層がチャネル内に広がります。チャネルの実効断面積が減少し、電流が減ります。

$V_{GS} = V_P$(ピンチオフ電圧): 空乏層がチャネル全体を覆い、電流がゼロになります。$V_P$ は負の値です(nチャネルJFETの場合)。

つまり、JFETは $V_{GS} = 0$ で最大電流が流れ、負のゲート電圧で電流を絞るデプレッション型デバイスです。「デプレッション(depletion)」とは空乏という意味で、空乏層を広げて電流を減少(deplete)させることに由来します。

$V_{DS}$ の効果とピンチオフ

$V_{DS}$ を徐々に上げると、ドレイン端のチャネル電位が上がり、ゲート-チャネル間の逆バイアスがドレイン側で大きくなります。この結果、空乏層はドレイン側でより広くなり、チャネルが非対称に狭くなります。

$V_{DS} = V_{GS} – V_P$(この値を $V_{DS,\text{sat}}$ と書きます)に達すると、ドレイン端でチャネルがちょうど閉じます(ピンチオフ)。しかし、電流はゼロにはなりません。ピンチオフ点では高電界が存在し、キャリアが高速でこの領域を通過するためです。

$V_{DS} > V_{DS,\text{sat}}$ ではピンチオフ点がドレイン方向にわずかに移動するだけで、チャネルの有効長さはほぼ変わりません。したがって、$I_D$ はほぼ飽和します。

JFETの動作概念はMOSFETにも引き継がれますが、MOSFETにはゲート構造の違いから独自の特徴があります。次にMOSFETの構造と動作を見ていきましょう。

MOSFETの構造と動作

MOS構造

MOSFETの「MOS」は Metal-Oxide-Semiconductor の頭文字であり、ゲート電極(金属またはポリシリコン)、ゲート酸化膜($\text{SiO}_2$)、半導体(Si基板)の3層構造を指します。

nチャネルMOSFET(NMOS)の基本構造を説明します。

  • 基板(ボディ): p型シリコン
  • ソース/ドレイン: 基板に形成されたn$^+$拡散領域
  • ゲート酸化膜: 薄い $\text{SiO}_2$(数nm〜数十nm)
  • ゲート電極: 酸化膜の上のポリシリコン(または金属)

ゲート酸化膜はキャパシタの誘電体として機能し、ゲート電圧を印加するとその電界が酸化膜を通じて半導体表面に到達します。この構造のおかげで、ゲートと半導体の間には直流電流が流れません(ゲートインピーダンスが極めて高い)。

エンハンスメント型NMOSの動作

エンハンスメント型NMOSは、ゲート電圧がゼロのとき電流が流れない(ノーマリーオフ)デバイスです。これは現代のデジタルICで使われるMOSFETの標準的なタイプです。

しきい値電圧以下($V_{GS} < V_{th}$): 遮断領域

ゲート電圧が小さいとき、p型基板の表面にはまだ多数キャリアの正孔が存在し、ソースとドレインの間にn型の伝導チャネルが形成されていません。ソースとドレインは2つの背中合わせのpn接合で分離されており、$V_{DS}$ を印加してもほとんど電流は流れません。

$V_{GS} = V_{th}$: 反転の開始

ゲート電圧を正方向に上げていくと、ゲート酸化膜を通じた電界がp型基板の表面から正孔を追い出し、かわりに少数キャリアの電子を引き寄せます。$V_{GS}$ がある臨界値 $V_{th}$(しきい値電圧、threshold voltage)に達すると、基板表面の電子濃度が正孔濃度を上回り、薄い反転層(inversion layer) が形成されます。

この反転層がソースとドレインを結ぶn型の導電チャネルとなります。「しきい値」という名前は、この反転チャネルが形成される境界を意味しています。

$V_{GS} > V_{th}$: チャネルの形成と電流の流れ

しきい値を超えてゲート電圧を上げるほど、反転層内の電子濃度が増加し、チャネルの導電性が向上します。$V_{DS}$ を印加すると、ソースからドレインに向かって電子がチャネルを流れ、ドレイン電流 $I_D$ が生じます。

動作領域

$V_{GS} > V_{th}$ の条件下で、$V_{DS}$ を増加させたときの動作を見ましょう。

線形領域(トリオード領域): $V_{DS} < V_{GS} - V_{th}$

チャネルが全長にわたって存在し、$I_D$ は $V_{DS}$ にほぼ比例します。MOSFETは「可変抵抗」として振る舞います。

飽和領域: $V_{DS} \geq V_{GS} – V_{th}$

ドレイン端でチャネルがピンチオフし、$I_D$ は $V_{DS}$ にほとんど依存しなくなります。MOSFETは「電流源」として振る舞い、増幅動作に用いられます。

次に、これらの動作領域でのドレイン電流を数式で表現しましょう。

ドレイン電流式の導出(二乗則)

段階的チャネル近似

MOSFETのドレイン電流を解析的に求めるために、段階的チャネル近似(gradual channel approximation) を用います。この近似では、チャネルに沿った電界変化がゲート酸化膜を通じた電界変化よりもはるかにゆるやかであると仮定します。

チャネルに沿った座標を $y$(ソース端が $y = 0$、ドレイン端が $y = L$)とし、位置 $y$ でのチャネル電位を $V(y)$ とします。

位置 $y$ でのゲート-チャネル間の実効電圧は $V_{GS} – V(y)$ であり、これがしきい値を超えている部分でのみ反転層が存在します。単位面積あたりの反転層電荷は次のとおりです。

$$ Q_n(y) = -C_{ox}\left[V_{GS} – V(y) – V_{th}\right] $$

ここで $C_{ox} = \epsilon_{ox}/t_{ox}$ はゲート酸化膜の単位面積あたりの容量です。

電流の計算

ドレイン電流はチャネルの全長にわたって一定(定常状態、電荷の蓄積なし)なので、位置 $y$ での電流密度を使って次のように書けます。

$$ I_D = W \cdot |Q_n(y)| \cdot v(y) $$

ここで $W$ はチャネル幅、$v(y) = \mu_n \mathcal{E}(y) = \mu_n \frac{dV}{dy}$ は電子のドリフト速度です。

代入すると、

$$ I_D = W \mu_n C_{ox}\left[V_{GS} – V(y) – V_{th}\right]\frac{dV}{dy} $$

両辺を $y$ について $0$ から $L$ まで積分します。左辺は $I_D \cdot L$($I_D$ は $y$ に依存しない)、右辺は $V$ について $0$ から $V_{DS}$ まで積分することになります。

$$ I_D \cdot L = W \mu_n C_{ox} \int_0^{V_{DS}} \left[V_{GS} – V – V_{th}\right] dV $$

積分を実行します。

$$ I_D \cdot L = W \mu_n C_{ox} \left[(V_{GS} – V_{th})V_{DS} – \frac{V_{DS}^2}{2}\right] $$

したがって、

$$ I_D = \frac{W \mu_n C_{ox}}{L}\left[(V_{GS} – V_{th})V_{DS} – \frac{V_{DS}^2}{2}\right] $$

ここで $k_n’ = \mu_n C_{ox}$ をプロセス利得係数、$k_n = k_n’ W/L$ をトランジスタ利得係数と呼びます。

線形領域とピンチオフ

上の式は $V_{DS} < V_{GS} - V_{th}$ の線形領域で成り立ちます。$V_{DS} \ll V_{GS} – V_{th}$ の場合は二次項が無視でき、

$$ I_D \approx k_n (V_{GS} – V_{th}) V_{DS} $$

これは $V_{DS}$ に対して線形であり、MOSFETが実効抵抗 $R_{\text{on}} = 1/[k_n(V_{GS} – V_{th})]$ の抵抗として振る舞うことを示しています。

$V_{DS}$ を増加させると、$V_{DS} = V_{GS} – V_{th} \equiv V_{OV}$(オーバードライブ電圧)でドレイン端のチャネルがピンチオフします。この点で $dI_D/dV_{DS} = 0$ となり、$I_D$ は最大値に達します。

$V_{DS} \geq V_{OV}$ の飽和領域では、$V_{DS} = V_{OV}$ を代入して飽和ドレイン電流が得られます。

$$ I_{D,\text{sat}} = \frac{k_n}{2}(V_{GS} – V_{th})^2 $$

これが有名な二乗則(square law) です。ドレイン電流がゲート電圧の超過分 $(V_{GS} – V_{th})$ の2乗に比例するという、MOSFETの最も基本的な特性です。

チャネル長変調(アーリー効果に相当)を考慮すると、飽和領域の電流は次のように修正されます。

$$ I_D = \frac{k_n}{2}(V_{GS} – V_{th})^2 (1 + \lambda V_{DS}) $$

$\lambda$ はチャネル長変調パラメータで、チャネル長が短いほど大きくなります。

デプレッション型とpチャネル

デプレッション型NMOS はしきい値電圧が負($V_{th} < 0$)であり、$V_{GS} = 0$ でもチャネルが存在して電流が流れます。JFETと同様のノーマリーオン動作です。

pチャネルMOSFET(PMOS) は電圧と電流の極性がNMOSと反転します。しきい値電圧は負($V_{th} < 0$)であり、$V_{GS} < V_{th}$ でチャネルが形成されます。電流式は次のとおりです。

$$ I_D = \frac{k_p}{2}(V_{SG} – |V_{th}|)^2 = \frac{k_p}{2}(|V_{GS}| – |V_{th}|)^2 $$

PMOSのキャリアは正孔であるため、$k_p’ = \mu_p C_{ox}$ は $k_n’$ の約1/3〜1/2です。

二乗則の導出ができたところで、次は増幅器設計に必要な小信号パラメータを求めましょう。

小信号パラメータ

相互コンダクタンス $g_m$

MOSFETの増幅能力を特徴づける最も重要なパラメータが相互コンダクタンス $g_m$ です。これはゲート電圧の微小変化に対するドレイン電流の変化率を表します。

$$ g_m = \frac{\partial I_D}{\partial V_{GS}}\bigg|_{V_{DS}=\text{const}} $$

飽和領域の $I_D = \frac{k_n}{2}(V_{GS} – V_{th})^2$ を微分すると、

$$ g_m = k_n (V_{GS} – V_{th}) = k_n V_{OV} $$

$I_D$ を使って書き換えることもできます。$I_D = k_n V_{OV}^2 / 2$ から $V_{OV} = \sqrt{2I_D/k_n}$ なので、

$$ g_m = \sqrt{2 k_n I_D} = \frac{2I_D}{V_{OV}} $$

バイポーラトランジスタの $g_m = I_C/V_T$ と比較すると、MOSFETの $g_m$ は同じ電流でもオーバードライブ電圧 $V_{OV}$(通常 0.1〜0.5 V)が $V_T \approx 26$ mV よりはるかに大きいため、一般に小さくなります。これはMOSFETが集積化に適している代わりに、同じ電流での増幅率がBJTに劣ることを意味します。

出力抵抗 $r_{ds}$

飽和領域では理想的に $I_D$ が $V_{DS}$ に依存しませんが、チャネル長変調により実際にはわずかに増加します。出力抵抗はこの依存性の逆数です。

$$ r_{ds} = \frac{1}{\lambda I_D} $$

$\lambda$ が小さいほど(チャネルが長いほど)出力抵抗は大きく、理想的な電流源に近づきます。

小信号等価回路

MOSFETの低周波小信号等価回路は非常にシンプルです。

  • ゲートとソース間: 開放(ゲート電流ゼロ)
  • ドレインとソース間: 電圧制御電流源 $g_m v_{gs}$ と 出力抵抗 $r_{ds}$ の並列

この等価回路は、ゲートが電流を消費しない(入力インピーダンスが極めて高い)というFETの本質的な特徴を反映しています。バイポーラトランジスタの $r_\pi$(有限の入力インピーダンス)とは対照的です。

小信号パラメータが得られたところで、MOSFETの最も重要な応用であるCMOS論理回路の基本を見ていきましょう。

CMOSの基本

相補型MOS(CMOS)の概念

CMOS(Complementary MOS) は、NMOSとPMOSを相補的に組み合わせた回路技術であり、現代のデジタルICのほぼすべてがこの技術に基づいています。

CMOSの最大の利点は静的消費電力がほぼゼロであることです。なぜそうなるのかを、最も基本的なCMOSインバータ(NOT回路)で説明しましょう。

CMOSインバータ

CMOSインバータは、PMOSを上側($V_{DD}$ 側)、NMOSを下側(GND側)に配置し、2つのゲートを共通入力、2つのドレインを共通出力とした回路です。

入力がLow($V_{in} = 0$)のとき:

  • NMOS: $V_{GS} = 0 < V_{th,n}$ → オフ
  • PMOS: $V_{SG} = V_{DD} > |V_{th,p}|$ → オン
  • 出力は $V_{DD}$(High)にプルアップされる

入力がHigh($V_{in} = V_{DD}$)のとき:

  • NMOS: $V_{GS} = V_{DD} > V_{th,n}$ → オン
  • PMOS: $V_{SG} = 0 < |V_{th,p}|$ → オフ
  • 出力はGND(Low)にプルダウンされる

どちらの状態でも、$V_{DD}$ からGNDへの直接的な電流パスが存在しません(一方が必ずオフ)。したがって、定常状態での消費電力はゲートリーク電流を除けばほぼゼロです。

CMOSの消費電力が生じるのは主にスイッチング時です。入力が遷移する瞬間、NMOSとPMOSが同時にオンになる短い期間に貫通電流(short-circuit current)が流れます。また、出力ノードの容量 $C_L$ を充放電するのに必要なエネルギーが、

$$ P_{\text{dynamic}} = C_L V_{DD}^2 f $$

として消費されます。$f$ はスイッチング周波数です。$V_{DD}$ を下げることで消費電力を劇的に低減できるため、プロセスの微細化とともに電源電圧は世代ごとに低下してきました。

伝達特性

CMOSインバータの入力電圧と出力電圧の関係(電圧伝達特性、VTC)は、NMOSとPMOSの I-V 特性から解析的に求められます。理想的なVTCは急峻な遷移を示し、ゲインが最大となる遷移点(切り替え点)は $V_{DD}/2$ 付近にあります。

この急峻な遷移特性が、デジタル信号のノイズマージンを確保し、信頼性の高い論理動作を可能にしています。

それでは、Pythonを使ってMOSFETの特性とCMOSインバータの動作を可視化してみましょう。

Pythonによる特性の可視化

MOSFET の伝達特性と出力特性

まず、NMOSの伝達特性($I_D$ vs $V_{GS}$)と出力特性($I_D$ vs $V_{DS}$)を描画します。

import numpy as np
import matplotlib.pyplot as plt

# MOSFETパラメータ
kn = 2e-3       # トランジスタ利得係数 [A/V^2]
Vth = 0.7       # しきい値電圧 [V]
lam = 0.02      # チャネル長変調パラメータ [1/V]

def mosfet_id(Vgs, Vds, kn, Vth, lam):
    """MOSFET ドレイン電流(全領域)"""
    Id = np.zeros_like(Vgs * Vds)
    Vov = Vgs - Vth

    # 遮断
    cutoff = Vov <= 0
    Id[cutoff] = 0

    # 線形領域: Vds < Vov
    linear = (Vov > 0) & (Vds < Vov)
    Id[linear] = kn * ((Vov[linear]) * Vds[linear]
                        - 0.5 * Vds[linear]**2) * (1 + lam * Vds[linear])

    # 飽和領域: Vds >= Vov
    saturation = (Vov > 0) & (Vds >= Vov)
    Id[saturation] = 0.5 * kn * Vov[saturation]**2 * (1 + lam * Vds[saturation])

    return Id

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

# (a) 伝達特性: ID vs VGS (VDS = 5V)
ax = axes[0]
Vgs = np.linspace(0, 3.5, 500)
Vds_fixed = 5.0
Id_transfer = mosfet_id(Vgs, np.full_like(Vgs, Vds_fixed), kn, Vth, lam)
ax.plot(Vgs, Id_transfer * 1e3, 'b-', linewidth=2)

# sqrt(ID)のプロット(右軸)
ax2 = ax.twinx()
ax2.plot(Vgs, np.sqrt(Id_transfer) * 1e3, 'r--', linewidth=1.5,
         label='$\\sqrt{I_D}$')
ax2.set_ylabel('$\\sqrt{I_D}$ [$\\sqrt{\\mathrm{mA}}$]', fontsize=12,
               color='red')
ax2.tick_params(axis='y', labelcolor='red')

ax.axvline(Vth, color='gray', linestyle=':', alpha=0.5)
ax.text(Vth + 0.05, 4, f'$V_{{th}}$ = {Vth} V', fontsize=10, color='gray')
ax.set_xlabel('$V_{GS}$ [V]', fontsize=12)
ax.set_ylabel('$I_D$ [mA]', fontsize=12)
ax.set_title('(a) Transfer Characteristic ($V_{DS}$ = 5 V)',
             fontsize=13, fontweight='bold')
ax.grid(True, alpha=0.3)

# (b) 出力特性: ID vs VDS(VGS をパラメータ)
ax = axes[1]
Vds = np.linspace(0, 8, 500)
Vgs_values = [1.0, 1.5, 2.0, 2.5, 3.0]
colors = ['#1a237e', '#1565c0', '#00897b', '#f57c00', '#d32f2f']

for Vgs_val, color in zip(Vgs_values, colors):
    Vgs_arr = np.full_like(Vds, Vgs_val)
    Id = mosfet_id(Vgs_arr, Vds, kn, Vth, lam)
    ax.plot(Vds, Id * 1e3, color=color, linewidth=2,
            label=f'$V_{{GS}}$ = {Vgs_val} V')
    # ピンチオフ点
    Vov = Vgs_val - Vth
    if Vov > 0:
        Id_sat = 0.5 * kn * Vov**2 * (1 + lam * Vov)
        ax.plot(Vov, Id_sat * 1e3, 'o', color=color, markersize=6)

# 線形-飽和境界
Vov_line = np.linspace(0, 3, 100)
Id_boundary = 0.5 * kn * Vov_line**2 * 1e3
ax.plot(Vov_line, Id_boundary, 'k--', alpha=0.3, linewidth=1,
        label='$V_{DS}$ = $V_{OV}$ boundary')

ax.set_xlabel('$V_{DS}$ [V]', fontsize=12)
ax.set_ylabel('$I_D$ [mA]', fontsize=12)
ax.set_title('(b) Output Characteristics',
             fontsize=13, fontweight='bold')
ax.legend(fontsize=9, loc='right')
ax.grid(True, alpha=0.3)
ax.set_xlim(0, 8)

plt.tight_layout()
plt.show()

2つの特性グラフから、MOSFETの動作特性が明確に理解できます。

  1. (a) 伝達特性: $V_{GS} < V_{th} = 0.7$ V では電流がゼロ(遮断)であり、$V_{th}$ を超えると電流が急激に増加しています。赤い破線の $\sqrt{I_D}$ が $V_{GS} > V_{th}$ の領域でほぼ直線になっていることは、二乗則 $I_D \propto (V_{GS} – V_{th})^2$ が成り立っていることの直接的な確認です。この $\sqrt{I_D}$ プロットの $V_{GS}$ 軸切片から $V_{th}$ を読み取ることができ、これはMOSFETの特性評価で広く用いられる手法です。
  2. (b) 出力特性: 各 $V_{GS}$ の曲線において、丸印で示されたピンチオフ点($V_{DS} = V_{OV}$)を境に、線形領域(放物線的増加)から飽和領域(ほぼ一定)へ遷移しています。飽和領域での曲線のわずかな傾きはチャネル長変調($\lambda = 0.02$ V$^{-1}$)によるものです。黒い破線は線形-飽和の境界を示しており、この境界の下が線形領域、上が飽和領域です。

動作領域の可視化

MOSFETの3つの動作領域(遮断・線形・飽和)を$V_{GS}$-$V_{DS}$ 平面上の色分けで視覚的に示します。

import numpy as np
import matplotlib.pyplot as plt

Vth = 0.7
Vgs_range = np.linspace(0, 3.5, 400)
Vds_range = np.linspace(0, 5, 400)
VGS, VDS = np.meshgrid(Vgs_range, Vds_range)

# 動作領域の判定
Vov = VGS - Vth
region = np.zeros_like(VGS)

# 0: 遮断, 1: 線形, 2: 飽和
cutoff = Vov <= 0
linear = (Vov > 0) & (VDS < Vov)
saturation = (Vov > 0) & (VDS >= Vov)

region[cutoff] = 0
region[linear] = 1
region[saturation] = 2

fig, ax = plt.subplots(figsize=(10, 7))

# カラーマップ
from matplotlib.colors import ListedColormap
cmap = ListedColormap(['#e0e0e0', '#81d4fa', '#ef9a9a'])
im = ax.pcolormesh(Vgs_range, Vds_range, region, cmap=cmap, shading='auto')

# 境界線
# Vgs = Vth(遮断/活性の境界)
ax.axvline(Vth, color='black', linewidth=2, linestyle='-')
# Vds = Vgs - Vth(線形/飽和の境界)
Vgs_boundary = np.linspace(Vth, 3.5, 100)
Vds_boundary = Vgs_boundary - Vth
ax.plot(Vgs_boundary, Vds_boundary, 'k-', linewidth=2)

# ラベル
ax.text(0.3, 2.5, 'Cutoff\n($I_D$ = 0)', fontsize=14,
        ha='center', va='center', fontweight='bold', color='#555555')
ax.text(2.2, 0.5, 'Linear\n(Triode)', fontsize=14,
        ha='center', va='center', fontweight='bold', color='#0d47a1')
ax.text(1.2, 3.5, 'Saturation', fontsize=14,
        ha='center', va='center', fontweight='bold', color='#b71c1c')

# 境界のラベル
ax.annotate('$V_{GS} = V_{th}$', xy=(Vth, 4.5),
            xytext=(Vth + 0.3, 4.7), fontsize=11,
            arrowprops=dict(arrowstyle='->', color='black'))
ax.annotate('$V_{DS} = V_{GS} - V_{th}$', xy=(2.5, 1.8),
            xytext=(2.8, 2.5), fontsize=11,
            arrowprops=dict(arrowstyle='->', color='black'))

ax.set_xlabel('$V_{GS}$ [V]', fontsize=13)
ax.set_ylabel('$V_{DS}$ [V]', fontsize=13)
ax.set_title('MOSFET Operating Regions',
             fontsize=14, fontweight='bold')

plt.tight_layout()
plt.show()

この動作領域マップから、MOSFETの動作を直感的に把握できます。

  1. 灰色の領域(遮断) は $V_{GS} < V_{th}$ であり、ゲート電圧がしきい値以下なのでチャネルが形成されず、電流がゼロです。デジタル回路の「オフ」状態に対応します。
  2. 青い領域(線形) は $V_{GS} > V_{th}$ かつ $V_{DS} < V_{GS} - V_{th}$ の領域で、MOSFETが可変抵抗として動作します。アナログスイッチや可変抵抗器として利用されます。
  3. 赤い領域(飽和) は $V_{DS} \geq V_{GS} – V_{th}$ の領域で、電流がほぼ $V_{DS}$ に依存せず電流源として動作します。増幅回路はこの領域で設計されます。
  4. 線形と飽和の境界線 $V_{DS} = V_{GS} – V_{th}$ は原点を通る傾き 1 の直線であり、この直線の左下が線形、右上が飽和領域です。

CMOSインバータの伝達特性

最後に、CMOSインバータの電圧伝達特性(VTC)を計算・描画します。

import numpy as np
import matplotlib.pyplot as plt

# NMOSパラメータ
kn = 2e-3     # [A/V^2]
Vthn = 0.7    # [V]

# PMOSパラメータ
kp = 1e-3     # [A/V^2](正孔の移動度が低いため kn の約半分)
Vthp = -0.7   # [V]

VDD = 3.3     # 電源電圧 [V]

def nmos_id(Vgs, Vds):
    """NMOS ドレイン電流"""
    Vov = Vgs - Vthn
    if Vov <= 0:
        return 0
    elif Vds < Vov:
        return kn * (Vov * Vds - 0.5 * Vds**2)
    else:
        return 0.5 * kn * Vov**2

def pmos_id(Vsg, Vsd):
    """PMOS ドレイン電流(絶対値)"""
    Vov = Vsg - abs(Vthp)
    if Vov <= 0:
        return 0
    elif Vsd < Vov:
        return kp * (Vov * Vsd - 0.5 * Vsd**2)
    else:
        return 0.5 * kp * Vov**2

# VTC の計算: Vin に対して IDn = IDp となる Vout を探す
Vin_range = np.linspace(0, VDD, 500)
Vout_range = np.zeros_like(Vin_range)

for i, Vin in enumerate(Vin_range):
    # Voutを二分探索
    Vout_lo, Vout_hi = 0, VDD
    for _ in range(100):
        Vout = (Vout_lo + Vout_hi) / 2
        # NMOS: Vgs = Vin, Vds = Vout
        Idn = nmos_id(Vin, Vout)
        # PMOS: Vsg = VDD - Vin, Vsd = VDD - Vout
        Idp = pmos_id(VDD - Vin, VDD - Vout)

        if Idn > Idp:
            Vout_hi = Vout
        else:
            Vout_lo = Vout
    Vout_range[i] = Vout

# ゲインの計算
gain = -np.gradient(Vout_range, Vin_range)

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

# (a) 電圧伝達特性
ax = axes[0]
ax.plot(Vin_range, Vout_range, 'b-', linewidth=2.5)
ax.plot([0, VDD], [VDD, 0], 'k--', alpha=0.3, label='$V_{out} = V_{DD} - V_{in}$')

# 理想的な遷移点
Vm_idx = np.argmin(np.abs(Vout_range - Vin_range))
Vm = Vin_range[Vm_idx]
ax.plot(Vm, Vm, 'ro', markersize=8, zorder=5)
ax.annotate(f'$V_M$ = {Vm:.2f} V', xy=(Vm, Vm),
            xytext=(Vm + 0.4, Vm + 0.5), fontsize=11,
            arrowprops=dict(arrowstyle='->', color='red'))

# ノイズマージン
ax.axhline(VDD * 0.7, color='green', linestyle=':', alpha=0.5)
ax.axhline(VDD * 0.3, color='green', linestyle=':', alpha=0.5)
ax.text(0.1, VDD * 0.72, '$V_{OH}$', fontsize=10, color='green')
ax.text(0.1, VDD * 0.32, '$V_{OL}$', fontsize=10, color='green')

ax.set_xlabel('$V_{in}$ [V]', fontsize=12)
ax.set_ylabel('$V_{out}$ [V]', fontsize=12)
ax.set_title('(a) CMOS Inverter VTC',
             fontsize=13, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_xlim(0, VDD)
ax.set_ylim(-0.1, VDD + 0.1)
ax.set_aspect('equal')

# (b) 電圧ゲイン
ax = axes[1]
ax.plot(Vin_range, gain, 'r-', linewidth=2)
ax.axvline(Vm, color='gray', linestyle='--', alpha=0.5)
ax.set_xlabel('$V_{in}$ [V]', fontsize=12)
ax.set_ylabel('Voltage Gain $|dV_{out}/dV_{in}|$', fontsize=12)
ax.set_title('(b) Voltage Gain',
             fontsize=13, fontweight='bold')
ax.grid(True, alpha=0.3)
ax.set_xlim(0, VDD)

plt.tight_layout()
plt.show()

print(f"電源電圧: VDD = {VDD} V")
print(f"切り替え点: VM = {Vm:.2f} V")
print(f"最大ゲイン: {gain.max():.1f}")

CMOSインバータの伝達特性から、デジタル論理回路の動作原理が理解できます。

  1. (a) VTC は、$V_{in} = 0$ で $V_{out} = V_{DD}$、$V_{in} = V_{DD}$ で $V_{out} = 0$ という反転動作を示しています。遷移領域が急峻であるほど、ノイズに対する耐性(ノイズマージン)が大きくなります。赤い丸で示した切り替え点 $V_M$ は $V_{out} = V_{in}$ の交点であり、NMOSとPMOSの電流が等しくなる入力電圧です。$k_n = 2k_p$ の設定では $V_M$ が $V_{DD}/2$ からわずかにずれていますが、$k_n = k_p$(PMOS幅をNMOSの約2倍にする)とすれば $V_M = V_{DD}/2$ に設計できます。
  2. (b) 電圧ゲイン は切り替え点付近で最大値を取り、その値は数十以上に達しています。この高いゲインが、入力のわずかな電圧変化を出力のフルスイング(0 V 〜 $V_{DD}$)に変換する能力を示しています。遷移領域の外側ではゲインが 0 に近づき、出力が $V_{DD}$ または GND に安定して維持されます。これがデジタル回路のノイズ耐性の源です。

まとめ

本記事では、FETとMOSFETの理論を構造から回路応用まで体系的に解説しました。

  • 電界効果の原理: ゲート電圧によりチャネルの導電性を制御する。ゲートに直流電流が流れない(高入力インピーダンス)
  • JFET: pn接合の空乏層でチャネルを制御するデプレッション型デバイス
  • MOSFET: MOS構造による反転層チャネル。エンハンスメント型は $V_{GS} > V_{th}$ でチャネルが形成される(ノーマリーオフ)
  • 二乗則: 飽和領域のドレイン電流 $I_D = \frac{k_n}{2}(V_{GS} – V_{th})^2$ が MOSFET の最も基本的な特性
  • 小信号パラメータ: $g_m = k_n V_{OV}$ で増幅能力を特徴づけ、$r_{ds} = 1/(\lambda I_D)$ で出力抵抗を表す
  • CMOS: NMOSとPMOSの相補的組み合わせにより、静的消費電力がほぼゼロの論理回路を実現

MOSFETは現代の電子工学で最も重要なデバイスであり、プロセッサからメモリ、パワーエレクトロニクスまで、あらゆる分野で使われています。

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