0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CMOS回路入門のためのPythonプログラミングドリル

Last updated at Posted at 2025-09-24

はじめに

本ドリルは、アナログCMOS回路設計の基礎である 共通ソース回路・動作領域・小信号解析 を題材にしたプログラミング課題集です。
従来、MOSFETの電流電圧特性や動作領域の理解は紙と鉛筆による数式展開に頼ることが多く、直感的な理解に時間がかかりました。

ここでは Python を用いて式を関数化し、入力電圧や出力電圧の変化を数値的・視覚的に確認できるようにしています。さらに、生成AI(ChatGPTなど) を活用して式の意味やコードの改善点を質問することで、効率的に知識を深められるよう工夫しています。

学習の流れは以下のとおりです。

MOSFET の基本式を理解する

Python で関数を実装する

グラフ描画で動作特性を可視化する

生成AI に質問し、コードや式の解釈を確認する

この方法により、式の暗記にとどまらず、数値計算・視覚化・AIとの対話による理解深化 を通じて、アナログ回路設計に必要な直感を身につけることを目指します。

チャプター1

問題 1: シリコン中の原子数の計算
シリコンの原子密度は N_Si ≈ 5×10^22 [個/cm^3] である。
体積 V [cm^3] に含まれる原子数 N は次式で表される。
N = N_Si * V

(1) Python関数を作成し、体積 V を入力すると N を返す関数を実装せよ。
(2) V = 1 cm^3 と V = 0.1 cm^3 の場合の原子数を求めよ。

問題 2: ドナー濃度によるキャリア密度
n型半導体では、ドナー濃度 Nd が自由電子密度 n に等しいと近似できる。
n ≈ Nd

(1) Python関数を作成し、Nd [cm^-3] を入力するとキャリア密度 n を返す関数を実装せよ。
(2) Nd = 1×10^15, 1×10^16, 1×10^17 [cm^-3] の場合のキャリア密度を求めよ。

問題 3: ボルツマン分布による電子エネルギー分布
電子の存在確率 f(E) は次式で表される。
f(E) = exp( -E / (kT) )

ここで
E [eV] : 電子のエネルギー
k = 8.617×10^-5 [eV/K] : ボルツマン定数
T [K] : 絶対温度

(1) Python関数を作成し、E と T を入力すると f(E) を返す関数を実装せよ。
(2) T = 300 K の場合、E = 0 〜 1 eV の範囲で f(E) を計算し、プロットせよ。

問題 4: pn接合の電流特性
pn接合ダイオードの電流 I は次式で表される。
I(V) = Is * ( exp( qV / (kT) ) - 1 )

ここで
Is = 1×10^-12 [A] : 逆方向飽和電流
q = 1.6×10^-19 [C] : 電子電荷
k = 1.38×10^-23 [J/K] : ボルツマン定数
T = 300 [K]
kT/q ≈ 0.026 [V] : 室温における熱電圧

(1) Python関数を作成し、電圧 V [V] を入力すると I [A] を返す関数を実装せよ。
(2) V = 0 〜 0.8 V の範囲で I を計算し、通常のリニアスケールでプロットせよ

チャプター2

問題 1: MOSFETのドレイン電流(弱反転領域)
式:
ID ≈ B · exp[ γ (VGS − VT) ] · (1 − exp(−eVDS / kT))

ここで B は (W/L)·μnCox に比例するパラメータ。

(1) Python関数を作成し、入力 VGS, VDS, VT, B, γ, T を与えると ID を返す関数を実装せよ。
(2) VGS = 0.2〜0.6 V, VDS = 0.05 V のときの ID を計算し、プロットせよ。

問題 2: MOSFETのドレイン電流(強反転・線形領域)
式:
ID = μnCox (W/L) [ (VGS − VT) VDS − (1/2) VDS² ]

条件: VDS < VGS − VT

(1) Python関数を作成せよ。
(2) VGS = 0.8 V, VT = 0.4 V, μnCox = 50e−6 A/V², W/L = 10 のとき、VDS = 0〜0.3 Vで ID を計算しプロットせよ。

問題 3: MOSFETのドレイン電流(強反転・飽和領域)
式:
ID = (1/2) μnCox (W/L) (VGS − VT)² (1 + λ VDS)

条件: VDS ≥ VGS − VT

(1) Python関数を作成せよ。
(2) VGS = 0.8〜1.2 V, VDS = 1.0 V, VT = 0.4 V, μnCox = 50e−6 A/V², W/L = 10, λ = 0.05 V⁻¹ のとき、ID を計算しプロットせよ。

問題 4: 飽和ドレイン電圧 VDSsat の計算
式:
VDSsat = VGS − VT

(1) Python関数を作成せよ。
(2) VGS = 0.6〜1.2 V のとき、VT = 0.4 V として VDSsat を計算し、VGS に対してプロットせよ。

問題 5: 相互コンダクタンス gm の計算
式:
gm = ∂ID / ∂VGS

(a) 弱反転領域: gm ≈ (ID / (n·VThermal))
(b) 強反転領域: gm ≈ μnCox (W/L) (VGS − VT)

(1) Python関数を作成し、弱反転と強反転で gm を計算せよ。
(2) VGS = 0.2〜1.2 V の範囲で gm を計算し、両領域を比較プロットせよ。

問題 6: 出力コンダクタンス gds と出力抵抗 ro
式:
gds = λ · ID
ro = 1 / gds

(1) Python関数を作成し、ID と λ を入力して gds, ro を返す関数を実装せよ。
(2) ID = 100 μA〜1 mA, λ = 0.05 V⁻¹ のとき ro を計算し、プロットせよ。

問題 7: チャネル長変調効果
近似式: λ ∝ 1 / L

(1) λ = k / L と仮定し、チャネル長 L を入力すると λ を返す関数を作成せよ。
(2) k = 0.01 μm⁻¹, L = 0.1〜1.0 μm のとき λ を計算し、プロットせよ。

問題 8: 短チャネルMOSFETにおける速度飽和
短チャネルでは ID ∝ (VGS − VT)

(1) Python関数を作成し、VGS, VT を入力すると ID を返す関数を実装せよ。
(2) VGS = 0.4〜1.2 V, VT = 0.4 V の場合、ID を計算し、長チャネルモデル(2乗則)と比較してプロットせよ。

問題 9: MOSFETの小信号等価回路パラメータ
小信号モデルでは gm と ro が並列接続された電流源で表される。

(1) gm と ro を入力すると小信号電圧利得 Av = −gm · (ro || RL) を返す関数を実装せよ。
(2) gm = 1 mA/V, ro = 20 kΩ, RL = 10 kΩ の場合の Av を計算せよ。

問題 10: ID-VDS 特性の描画
VGS をパラメータとして、線形領域から飽和領域に至るまでの ID-VDS 特性を描画せよ。

パラメータ: μnCox = 50e−6 A/V², W/L = 10, VT = 0.4 V, VGS = 0.6, 0.8, 1.0 V

問題 11: MOSFETの弱反転領域の電流
式:
ID ≈ β · exp(γ(VGS − VT))

(1) Python関数を作成し、VGS, VT, β, γ を入力すると ID を返す関数を実装せよ。
(2) VGS = 0.2〜0.6 V の範囲で ID を計算し、プロットせよ。

問題 12: MOSFETの飽和領域の電流(チャネル長変調なし)
式:
ID = (β/2)(VGS − VT)²

(1) Python関数を作成し、VGS, VT, β を入力すると ID を返す関数を実装せよ。
(2) VGS = 0.4〜1.2 V の範囲で ID を計算し、プロットせよ。

問題 13: MOSFETの飽和領域の電流(チャネル長変調あり)
式:
ID = (β/2)(VGS − VT)² (1 + λVDS)

(1) Python関数を作成し、VGS, VT, β, VDS, λ を入力すると ID を返す関数を実装せよ。
(2) VGS = 0.8 V, VT = 0.4 V, VDS = 1.0 V, λ = 0.05 V⁻¹, β = 200 μA/V² のとき ID を計算せよ。

問題 14: 飽和ドレイン電圧 VDSsat の計算
式:
VDSsat = VGS − VT = √(2ID/β)

(1) Python関数を作成し、VGS, VT, β を入力すると VDSsat を返す関数を実装せよ。
(2) VGS = 0.6〜1.2 V, VT = 0.4 V, β = 200 μA/V² のとき VDSsat を計算してプロットせよ。

問題 15: 相互コンダクタンス gm の計算
式:
gm = ∂ID / ∂VGS ≈ β(VGS − VT)

(1) Python関数を作成し、VGS, VT, β を入力すると gm を返す関数を実装せよ。
(2) VGS = 0.4〜1.2 V の範囲で gm を計算し、プロットせよ。

問題 16: 出力コンダクタンス gds と出力抵抗 ro の計算
式:
gds = λ·ID
ro = 1/gds

(1) Python関数を作成し、ID, λ を入力すると ro を返す関数を実装せよ。
(2) ID = 0.1〜1 mA, λ = 0.05 V⁻¹ の範囲で ro を計算し、プロットせよ。

問題 17: 短チャネル効果と λ のチャネル長依存性
式:
λ ∝ 1/L

(1) Python関数を作成し、チャネル長 L を入力すると λ を返す関数を実装せよ。
(2) L = 0.1〜1.0 μm の範囲で λ を計算し、プロットせよ。

問題 18: 飽和領域における速度飽和モデル
式(長チャネル): ID ∝ (VGS − VT)²
式(短チャネル): ID ∝ (VGS − VT)

(1) Python関数を作成し、長チャネルモデルと短チャネルモデルの ID を計算せよ。
(2) VGS = 0.4〜1.2 V, VT = 0.4 V の範囲で両モデルを比較プロットせよ。

問題 19: 小信号等価回路の電圧利得
式:
Av = −gm · (ro || RL)

(1) Python関数を作成し、gm, ro, RL を入力すると Av を返す関数を実装せよ。
(2) gm = 1 mA/V, ro = 20 kΩ, RL = 10 kΩ のとき Av を計算せよ。

問題 20: チャネル長変調効果のシミュレーション
式:
ID ≈ (β/2)(VGS − VT)² (1 + λVDS), λ ∝ 1/L

(1) L = 0.1〜1.0 μm の範囲で ID を計算し、チャネル長による I-V 特性の違いをプロットせよ。
(2) VGS = 0.8 V, VT = 0.4 V, VDS = 1.0 V, β = 200 μA/V² の場合を考えよ。

チャプター3

問題1: ソース接地回路の電圧利得
ソース接地増幅回路において、
v_out = - g_m R_load v_in
で表される。
(1) 電圧利得 A_v を式で求めよ。
(2) g_m = 1 mA/V, R_load = 5 kΩ のとき、A_v を数値で計算せよ。

問題2: ドレイン電流の展開
MOSFETのドレイン電流は次式で与えられる。
I_D = (β/2)(V_GS - V_T)^2 + β(V_GS - V_T) v_in
(1) 第1項と第2項の物理的意味を答えよ。
(2) V_GS = 1.0 V, V_T = 0.5 V, β = 100 μA/V^2, v_in = 20 mV の場合、I_D を計算せよ。

問題3: 相互コンダクタンス g_m
相互コンダクタンスは次式で表される。
g_m = √(2 β I_D)
(1) この式が意味する物理量を説明せよ。
(2) β = 150 μA/V^2, I_D = 0.25 mA のとき、g_m を計算せよ。

問題4: 真性利得
MOSFETの真性利得は
A = - g_m r_o
で表される。
(1) この式が意味するところを説明せよ。
(2) g_m = 4 mA/V, r_o = 50 kΩ の場合、A を求めよ。

問題5: カスコード回路
カスコード増幅回路はソース接地回路とゲート接地回路を直列に積んだものである。
(1) カスコード構成により実効出力抵抗 R_out が大きくなる理由を説明せよ。
(2) R_out が 3 倍になったとき、利得 A_v はどのように変化するか。
問題6: 出力抵抗
MOSFETの出力抵抗は次式で表される。
r_o = 1 / (λ I_D)
(1) λ がチャネル長に反比例する理由を説明せよ。
(2) λ = 0.05 V^-1, I_D = 0.2 mA のとき、r_o を数値で計算せよ。

問題7: 電流と利得の関係
ソース接地回路の利得は次式で近似される。
A_v ∝ 1 / √I
(1) 電流 I を小さくすると利得が増大する理由を説明せよ。
(2) I = 0.1 mA のときの利得が 40 倍だった場合、I を 0.4 mA に増加させると利得はいくらになるか。

問題8: レベルシフタ
ドレイン接地回路はレベルシフト回路として用いられる。
(1) 入力電圧 V_in と出力電圧 V_out の関係を説明せよ。
(2) なぜ利得が 1 より小さくなるのかを説明せよ。

問題9: 出力電圧の式
ソース接地増幅回路では
v_out = V_DD - R_load (I_o + i_d)
で表される。
(1) 直流成分と信号成分に分けて説明せよ。
(2) 出力信号電圧成分を v_out = - g_m R_load v_in の形に変形せよ。

問題10: 小信号等価回路
MOSFETの小信号等価回路において、入力は電圧源 v_in、出力は電流源 g_m v_in として表される。
(1) このモデルが意味することを説明せよ。
(2) このモデルを用いることで回路解析が容易になる理由を説明せよ。
問題11: ゲート接地増幅回路
ゲート接地増幅回路では、出力電圧は次式で表される。
v_out = R_out^(eff) (g_m + 1/r_o) v_in
(1) 出力信号が入力信号と同相である理由を説明せよ。
(2) g_m = 4 mA/V, r_o = 20 kΩ, R_out^(eff) = 5 kΩ, v_in = 10 mV のとき、v_out を数値計算せよ。

問題12: ドレイン接地増幅回路
ドレイン接地増幅回路の電圧利得は次式で表される。
A_v = g_m R_out^(eff) / (1 + g_m R_out^(eff))
(1) この式から利得 A_v が 1 未満になる理由を説明せよ。
(2) g_m = 2 mA/V, R_out^(eff) = 1 kΩ のとき、A_v を数値で求めよ。

問題13: 電流と利得の関係
ソース接地回路の利得は次式で近似される。
A_v ∝ 1 / √I
(1) 電流 I が小さいほど利得が増大する理由を説明せよ。
(2) I = 0.25 mA のときの利得が 20 倍だった場合、I = 1 mA のときの利得を求めよ。

問題14: カスコード回路
カスコード回路では実効出力抵抗は次式で近似される。
R_out ≈ r_o g_m Z_S
(1) 出力抵抗が大きくなる仕組みを説明せよ。
(2) r_o = 50 kΩ, g_m = 5 mA/V, Z_S = 2 kΩ のとき、R_out を数値で求めよ。

問題15: 出力抵抗の合成
nチャネルとpチャネルMOSFETの出力抵抗が並列接続された場合、次式で表される。
R_out^(eff) = (r_on r_op) / (r_on + r_op)
(1) この式が並列接続の合成抵抗と同じである理由を説明せよ。
(2) r_on = 20 kΩ, r_op = 30 kΩ のとき、R_out^(eff) を計算せよ。
問題16: 真性利得
MOSFETの真性利得は次式で表される。
A = - g_m r_o
(1) この式が「MOSFETの固有利得」を意味する理由を説明せよ。
(2) g_m = 6 mA/V, r_o = 40 kΩ の場合、A を数値で求めよ。

問題17: 出力抵抗の式
MOSFETの出力抵抗は次式で表される。
r_o = 1 / (λ I_D)
(1) λ がチャネル長に反比例する理由を説明せよ。
(2) λ = 0.01 V⁻¹, I_D = 0.2 mA のとき、r_o を計算せよ。

問題18: 相互コンダクタンス g_m
MOSFETの相互コンダクタンスは次式で表される。
g_m = √(2 β I_D)
(1) この式が意味する物理量を説明せよ。
(2) β = 100 μA/V², I_D = 0.4 mA のとき、g_m を数値で求めよ。

問題19: 飽和ドレイン電圧 V_Dsat
MOSFETの飽和ドレイン電圧は次式で表される。
V_Dsat = √(2 I_D / β)
(1) この式が「ゲート過剰電圧 Δ_ov」に等しい理由を説明せよ。
(2) I_D = 0.5 mA, β = 200 μA/V² のとき、V_Dsat を計算せよ。

問題20: カスコード増幅回路
カスコード増幅回路の出力抵抗は次式で近似される。
R_out ≈ r_o g_m Z_S
(1) この構造がソース接地単体よりも高利得を実現できる理由を説明せよ。
(2) r_o = 100 kΩ, g_m = 4 mA/V, Z_S = 3 kΩ のとき、R_out を数値で求めよ。

【増幅回路に関する主要式】

(G.1) 電圧利得の定義
Av = v_out / v_in = (i_d R_out) / v_in = R_out (i_d / v_in)

(G.4) ソース接地増幅回路の電圧電流変換係数
Gm = (g_m r_o) / (r_o + Zs + Zd + g_m r_o Zs)

(G.5) ゲート接地増幅回路の電圧電流変換係数
i_d / v_in = −(g_m r_o + 1) / (r_o + Zs + Zd + g_m r_o Zs)

(G.9) 実効出力抵抗
R_out_eff = (r_o R_out) / (r_o + R_out) = r_o // R_out

(G.10) ドレイン接地増幅回路の利得
A = (g_m Zs) / (1 + g_m Zs)

【プログラミング課題】

問題21: MOS増幅回路の利得計算 (G.1式)
(1) Python関数 gain(vin, id_val, Rout) を作成せよ。
(2) vin = 0.01 V, id_val = 3e-3 A, Rout = 1e4 Ω のとき Av を計算せよ。
(3) Rout = 1kΩ, 10kΩ, 100kΩ の場合の利得を比較せよ。

問題22: ソース接地増幅回路の電圧電流変換係数 (G.4式)
(1) Python関数 gm_eff(gm, ro, Zs, Zd) を作成し、Gm を返せ。
(2) gm = 2 mA/V, ro = 50 kΩ, Zs = 0, Zd = 10 kΩ のとき Gm を計算せよ。
(3) Zs = 0, 1k, 5k の場合を比較し、ソース抵抗が大きくなるとどうなるか考察せよ。

問題23: ゲート接地増幅回路の電圧電流変換係数 (G.5式)
(1) Python関数 gm_gate(gm, ro, Zs, Zd) を作成せよ。
(2) gm = 3 mA/V, ro = 40 kΩ, Zs = 500 Ω, Zd = 2 kΩ の場合を計算せよ。
(3) Zs を 0 → 500 Ω → 2 kΩ と変化させた場合を比較し、傾向を考察せよ。

問題24: 実効出力抵抗 (G.9式)
(1) Python関数 rout_eff(ro, Rout) を作成せよ。
(2) ro = 50 kΩ, Rout = 10 kΩ の場合を計算せよ。
(3) Rout を 1k, 10k, 100k に変化させ、R_out_eff の変化を確認せよ。

問題25: ドレイン接地増幅回路の利得 (G.10式)
(1) Python関数 gain_drain(gm, Zs) を作成せよ。
(2) gm = 4 mA/V, Zs = 1 kΩ の場合を計算せよ。
(3) Zs を 100 Ω, 1kΩ, 10kΩ に変化させて結果を比較し、利得が 1 未満に制限される理由を考察せよ。

問題 26: ソース接地回路 (Common Source) の電圧利得とインピーダンス
式:
Av = - gm × ( RL // ro )
ここで、( RL // ro ) = ( RL × ro ) / ( RL + ro )

入力抵抗: Rin ≈ ∞
出力抵抗: Rout ≈ ro // RL

課題:
(1) Python関数 cs_gain(gm, RL, ro) を作成し、Av を計算せよ。
(2) gm = 1e-3 [S], RL = 10e3 [Ω], ro = 20e3 [Ω] のときの Av を求めよ。
(3) RL = 5kΩ, 10kΩ, 20kΩ と変化させたときの Av を比較せよ。
(4) Rin, Rout を数値評価せよ。

問題 27: ゲート接地回路 (Common Gate) の電圧利得とインピーダンス
式:
Av = gm × ( RL // ro )
ここで、( RL // ro ) = ( RL × ro ) / ( RL + ro )

入力抵抗: Rin ≈ 1 / gm
出力抵抗: Rout ≈ ro // RL

課題:
(1) Python関数 cg_gain(gm, RL, ro) を作成し、Av を計算せよ。
(2) gm = 2e-3 [S], RL = 15e3 [Ω], ro = 30e3 [Ω] のときの Av を求めよ。
(3) RL = 10kΩ, 15kΩ, 30kΩ と変化させたときの Av を比較せよ。
(4) Rin, Rout を数値評価せよ。

問題 28: ドレイン接地回路 (Source Follower) の電圧利得とインピーダンス
式:
Av = ( gm × RS ) / ( 1 + gm × RS )

入力抵抗: Rin ≈ ∞
出力抵抗: Rout ≈ 1 / gm

課題:
(1) Python関数 cd_gain(gm, RS) を作成し、Av を計算せよ。
(2) gm = 1.5e-3 [S], RS = 1e3 [Ω] のときの Av を求めよ。
(3) RS = 0.5kΩ, 1kΩ, 2kΩ と変化させたときの Av を比較せよ。
(4) Rin, Rout を数値評価せよ。

問題 29: カスコード増幅回路の電圧利得とインピーダンス
式:
Av = - gm1 × ( ro1 × gm2 × ro2 )
ここで、出力抵抗 ro_out ≈ gm2 × ro2 × ro1

入力抵抗: Rin ≈ ∞
出力抵抗: Rout ≈ gm2 × ro2 × ro1

課題:
(1) Python関数 cascode_gain(gm1, ro1, gm2, ro2) を作成し、Av を計算せよ。
(2) gm1 = 1e-3 [S], ro1 = 20e3 [Ω], gm2 = 2e-3 [S], ro2 = 30e3 [Ω] のときの Av を求めよ。
(3) ro1 = 10kΩ, 20kΩ, 50kΩ と変化させたときの Av を比較せよ。
(4) Rin, Rout を数値評価せよ。

問題 30: 各回路の比較
課題:
(1) 問題 26〜29 で求めた Av を比較し、利得の大きさと符号(反転/非反転)の違いをまとめよ。
(2) ソース接地回路とカスコード回路の利得を数値的に比較し、ro の影響を確認せよ。

チャプター4

問題1: RC回路の伝達関数

RCローパス回路の伝達関数は次式で表される。
H(jω) = v_out / v_in = 1 / (1 + jωRC) = 1 / (1 + j(ω/ω_p))
ここで ω_p = 1/RC である。

(1) Python関数 rc_transfer(R, C, omega) を作成し、複素数で H(jω) を返せ。
(2) R = 10 kΩ, C = 10 pF, f = 1 MHz のとき |H(jω)| を計算せよ。
(3) f = 1 kHz, 10 kHz, 100 kHz, 1 MHz の値を比較し、周波数依存性を考察せよ。

問題2: 電圧利得の基本式

増幅回路の利得は Av = - g_m R_out_eff で表される。
ただし R_out_eff = (1/r_on + 1/r_op)^(-1)。

(1) Python関数 gain_basic(gm, ron, rop) を作成せよ。
(2) gm = 2 mA/V, r_on = 50 kΩ, r_op = 100 kΩ の場合、Av を計算せよ。
(3) r_on = 10 kΩ → 100 kΩ に変化させた場合、利得がどう変わるか考察せよ。

問題3: 周波数特性とローパスフィルタ

増幅回路の利得は周波数依存性を持ち、次式で表される。
A(ω) = - g_m R_out_eff / (1 + j(ω/ω_po))

(1) Python関数 gain_freq(gm, Rout_eff, omega, omega_po) を作成せよ。
(2) gm = 3 mA/V, Rout_eff = 20 kΩ, ω_po = 1e6 rad/s のとき、f = 10 kHz, 100 kHz, 1 MHz の |A(ω)| を計算せよ。
(3) ボード線図の傾向を考察せよ。

問題4: 高域遮断周波数と利得の関係

(g_m R_out_eff)^2 ω_po = 一定

(1) Python関数 cutoff_relation(gm, Rout_eff, const_val) を作成し、ω_po を計算せよ。
(2) gm = 2 mA/V, Rout_eff = 20 kΩ, const_val = 1e9 のとき ω_po を求めよ。
(3) gm を大きくすると ω_po がどう変化するかを考察せよ。

問題5: ゲイン帯域幅積 (GBW)

利得が1になる周波数は
ω_u = g_m / C_out

(1) Python関数 unity_gain_freq(gm, C_out) を作成せよ。
(2) gm = 5 mA/V, C_out = 1 pF のとき ω_u を計算し、周波数[Hz]に換算せよ。
(3) C_out を 1 pF, 10 pF, 100 pF と変化させたときの傾向を考察せよ。

問題6: ソース接地増幅回路の周波数特性

A(ω) = (g_m R_out_eff) / ( (1 + j(ω/ω_p1)) (1 + j(ω/ω_p2)) )

(1) Python関数 gain_source(gm, Rout_eff, omega, wp1, wp2) を作成せよ。
(2) gm = 2 mA/V, Rout_eff = 20 kΩ, ω_p1 = 1e6 rad/s, ω_p2 = 1e7 rad/s の場合、f = 10 kHz, 100 kHz, 1 MHz, 10 MHz の |A(ω)| を計算せよ。
(3) 二つの極 (ω_p1, ω_p2) が周波数応答に与える影響を考察せよ。

問題7: カスコード増幅回路のノードXの遮断周波数

ω_px = (g_m2 / (1 + g_m2/g_m1)) * 1 / (C_gd1 + C_D + C_gs2)

(1) Python関数 omega_px(gm1, gm2, Cgd1, CD, Cgs2) を作成せよ。
(2) gm1 = 2 mA/V, gm2 = 4 mA/V, Cgd1 = 1 fF, C_D = 2 fF, Cgs2 = 1 fF の場合、ω_px を計算せよ。
(3) gm2 を大きくすると ω_px がどう変化するか考察せよ。

問題8: カスコード増幅回路の出力遮断周波数

ω_po = 1 / (R_out_eff (C_gd2 + C_out))

(1) Python関数 omega_po(Rout_eff, Cgd2, Cout) を作成せよ。
(2) Rout_eff = 50 kΩ, Cgd2 = 2 fF, Cout = 10 fF の場合、ω_po を求めよ。
(3) Cout を増加させると高域遮断周波数がどう変化するか説明せよ。

問題9: 寄生容量の影響

寄生容量の一例として、ドレイン-基板間容量は次式で与えられる:
C_db = C_do (1 + V_DB/φ_o)^(-m)

(1) Python関数 C_db(Cdo, VDB, phi0, m) を作成せよ。
(2) Cdo = 1 fF, φ_o = 0.7 V, m = 0.5 のとき、V_DB = 0, 0.7, 1.4 V の場合を計算せよ。
(3) V_DB が大きくなると容量が減少する理由を説明せよ。

問題10: ゲート容量と領域依存性

MOSFETのゲート容量は動作領域によって異なり、特に飽和領域では C_gd が小さくなるためミラー効果が小さくなる。

(1) 飽和領域と非飽和領域での C_gd の違いを説明せよ。
(2) Pythonで C_gd の値を定数モデルで仮定し、飽和領域 (0.2 fF)、非飽和領域 (2 fF) とした場合、ミラー容量 C_miller = (1 + A_v) C_gd を Av = 10 の場合で計算せよ。
(3) この結果から、なぜカスコード回路が高周波応答に有利なのかを説明せよ。

チャプター5

問題1: 熱ノイズ電流の計算
MOSFETの熱ノイズは次式で表される:
\overline{I_n^2} = (8/3) k T g_m

(1) Python関数 thermal_noise_current(gm, T) を作成し、単位周波数あたりの \overline{I_n^2} を返すようにせよ。
(2) gm = 2e-3 [A/V], T = 300 [K] のときの値を求めよ。

問題2: 熱ノイズ電圧の計算
飽和領域における等価電圧ノイズは次式で表される:
\overline{V_n^2} = (8/3) k T / g_m

(1) Python関数 thermal_noise_voltage(gm, T) を作成せよ。
(2) gm = 2e-3 [A/V], T = 300 [K] のときの値を求めよ。

問題3: フリッカノイズ (1/f ノイズ)
\overline{V_n^2} = (K / (Cox W L)) * (1/f)

(1) Python関数 flicker_noise(K, Cox, W, L, f) を作成せよ。
(2) K = 1e-24, Cox = 1e-2 [F/m²], W = 10e-6 [m], L = 1e-6 [m], f = 1e3, 1e5, 1e6 Hz のときの値を計算し、周波数依存性を確認せよ。

問題4: 熱ノイズとフリッカノイズの比較プロット
(1) Pythonプログラムを作成し、f = 10 Hz ~ 1 MHz の範囲で両者を計算してログスケールでプロットせよ。
(2) 低周波ではフリッカノイズが支配的であり、高周波では熱ノイズが支配的であることを確認せよ。

問題5: 配線寄生容量によるノイズ結合
ノイズ結合は次式で表される:
ΔV_sig = (Cc / (Cc + Cs)) * ΔV_clk * exp(-t / (Rout (Cc + Cs)))

(1) Python関数 coupled_noise(Cc, Cs, ΔVclk, Rout, t) を作成せよ。
(2) Cc = 0.1e-12 F, Cs = 1e-12 F, ΔVclk = 1.0 V, Rout = 1e3 Ω, t = 0, 1e-9, 1e-8, 1e-7 s の場合の ΔV_sig を計算せよ。

チャプター6

問題1: 差動対のドレイン電流
式:
I_D1 = (β/2)(V_CM + v_in/2 - V_T)^2
I_D2 = (β/2)(V_CM - v_in/2 - V_T)^2
(1) Python関数 diff_pair_currents(beta, Vcm, Vin, Vt) を作成せよ。
(2) β=200 μA/V^2, V_CM=1.2 V, V_T=0.5 V, v_in=0.1 V の場合の I_D1, I_D2 を計算せよ。

問題2: 差動出力電圧
出力差電流:
I_D1 - I_D2 = β (V_CM - V_T) v_in
出力電圧:
v_out = -R_load (I_D1 - I_D2)
(1) Python関数 diff_output(beta, Vcm, Vin, Vt, Rload) を作成せよ。
(2) β=200 μA/V^2, V_CM=1 V, V_T=0.5 V, R_load=10 kΩ, v_in=50 mV の場合の v_out を求めよ。

問題3: 差動利得
A_DM = v_out / v_in = -g_m R_load
(1) Python関数 diff_gain(gm, Rload) を作成せよ。
(2) g_m=2 mA/V, R_load=10 kΩ の場合の A_DM を求めよ。

問題4: 相互コンダクタンスの導出
g_m = sqrt(β I_SS / 2)
(1) Python関数 gm_diff(beta, Iss) を作成せよ。
(2) β=200 μA/V^2, I_SS=200 μA の場合の g_m を求めよ。

問題5: 入力電圧とドレイン電流の関係
式:
v_in = sqrt(2 I_D1 / β) - sqrt(2 I_D2 / β)
(1) この関係をPythonで計算する関数 vin_from_currents(ID1, ID2, beta) を作成せよ。
(2) β=200 μA/V^2, I_D1=120 μA, I_D2=80 μA の場合の v_in を求めよ。

問題6: 飽和ドレイン電圧
V_Dsat = sqrt(2 I_D / β)
(1) Python関数 Vdsat(ID, beta) を作成せよ。
(2) I_D=100 μA, β=200 μA/V^2 の場合の V_Dsat を求めよ。

問題7: CMRR (コモンモード除去比)
CMRR = A_DM / A_CM
(1) Python関数 cmrr(Adm, Acm) を作成せよ。
(2) A_DM=500, A_CM=0.5 の場合の CMRR を求めよ。

問題8: 出力抵抗の実効値
R_out_eff = (ro * Rload) / (ro + Rload)
(1) Python関数 rout_eff(ro, Rload) を作成せよ。
(2) ro=50 kΩ, Rload=10 kΩ の場合の R_out_eff を求めよ。

問題9: コモンモード利得
A_CM = 1 / (2 g_m ro)
(1) Python関数 acm(gm, ro) を作成せよ。
(2) g_m=2 mA/V, ro=40 kΩ の場合の A_CM を求めよ。

問題10: 入力電圧範囲
式:
V_Dsat1 + V_T + V_Dsat5 < V_CM < V_DD - V_Dsat3 - V_T - V_Dsat4
(1) Python関数 vcm_range(Vt, Vdsat1, Vdsat3, Vdsat4, Vdsat5, Vdd) を作成せよ。
(2) V_T=0.5 V, V_Dsat1=0.2 V, V_Dsat3=0.2 V, V_Dsat4=0.2 V, V_Dsat5=0.2 V, V_DD=3 V の場合の V_CM の範囲を求めよ。
問題11: 差動利得の計算
差動利得は次式で表される。
A_DM = - g_m * R_out_eff
(1) g_m [A/V] と R_out_eff [Ω] を入力すると A_DM を計算する Python 関数を作成せよ。
(2) g_m = 2e-3 [A/V], R_out_eff = 40e3 [Ω] の場合の A_DM を出力せよ。

問題12: 同相利得の計算
同相利得は次式で近似される。
A_CM = 1 / (2 * g_m * r_o)
(1) g_m [A/V] と r_o [Ω] を入力すると A_CM を計算する Python 関数を作成せよ。
(2) g_m = 1e-3 [A/V], r_o = 100e3 [Ω] の場合の A_CM を出力せよ。

問題13: CMRRの計算
CMRR は次式で定義される。
CMRR = A_DM / A_CM
dB換算値は 20 log10(CMRR)
(1) A_DM と A_CM を入力すると、CMRR とその dB値を出力する Python 関数を作成せよ。
(2) A_DM = 200, A_CM = 0.2 の場合の CMRR を出力せよ。

問題14: 周波数応答の計算
単極近似の周波数応答は次式で表される。
A(f) = A0 / sqrt(1 + (f/f_p)^2)
(1) A0, f_p, f を入力すると A(f) を返す Python 関数を作成せよ。
(2) A0 = 1000, f_p = 1e4 [Hz], f = [100, 1e3, 1e5] [Hz] の場合の A(f) を出力せよ。
(3) Matplotlib を用いて 10 Hz ~ 1 MHz の範囲でゲイン[dB]をボード線図としてプロットせよ。

問題15: CMRRと周波数特性の計算
差動利得は一定、同相利得が周波数に依存して増加する場合を考える。
(1) A_DM = 1000 (一定), A_CM(f) = 0.1 at 1 kHz, A_CM(f) = 1.0 at 100 kHz とする。
(2) 線形補間を用いて、1 kHz~100 kHz の範囲で A_CM(f) を計算する Python プログラムを作成せよ。
(3) その結果から CMRR[dB] = 20 log10(A_DM/A_CM(f)) を計算し、Matplotlib でプロットせよ。

チャプター7

問題 1: MOSFETの基本式
関数 mosfet_params(beta, lam, I) を作成せよ。
式:
g_m = sqrt(2 β I)
r_o = 1 / (λ I)
テスト例: β = 1e-4 [A/V²], λ = 0.1, I = 50e-6 [A]

問題 2: ダイオード接続MOSFET
関数 diode_vgs(beta, Iref, Vt) を作成せよ。
式:
V_GS1 = V_T + sqrt(2 I_ref / β)
テスト例: β = 1e-4, I_ref = 20e-6 A, Vt = 0.5 V

問題 3: オーバードライブ電圧 Δ_ov
関数 overdrive_voltage(beta, Iref) を作成せよ。
式:
Δ_ov = sqrt(2 I_ref / β)
テスト例: β = 1e-4, I_ref = 20e-6 A

問題 4: カレントミラー回路
関数 current_mirror(Iref, beta1, beta2) を作成せよ。
式:
I_out = (β2 / β1) × I_ref
テスト例: I_ref = 20e-6 A, β1 = 1e-4, β2 = 2e-4

問題 5: カスコード電流源の利点
関数 cascode_dIout(dVout, gm2, ro2, ro3) を作成せよ。
式:
ΔI_out = ΔV_out / (gm2 × ro2 × ro3)
テスト例: ΔV_out = 0.1 V, gm2 = 1e-3 S, ro2 = 1e5 Ω, ro3 = 2e5 Ω

問題 6: カスコード電流源の欠点
関数 vout_min(Vt, Dov) を作成せよ。
式:
V_out(min) = V_T + 2 Δ_ov
テスト例: Vt = 0.5 V, Δ_ov = 0.2 V

問題 7: 遮断周波数 ω_T
関数 cutoff_freq(gm, Cp) を作成せよ。
式:
ω_T = gm / Cp
テスト例: gm = 1e-3 S, Cp = 1e-12 F

問題 8: 温度依存性と ΔV_be
関数 delta_vbe(Vbe, eta, Vt) を作成せよ。
式:
I ∝ exp(V_be / (η V_T))
ΔV_be ≈ 1.25 V (確認値)
テスト例: Vbe = 0.7 V, η = 1, Vt = 0.025 V

問題 9: 電流源の種類
関数 cmos_current_source(type) を作成せよ。
仕様:
"supply" → pチャネルMOSFET
"sink" → nチャネルMOSFET

問題 10: 新材料の利点
関数 new_materials(gm, Cp) を作成せよ。
式:
ω_T = gm / Cp
効果: gm ↑, Cp ↓ → ω_T ↑
テスト例: gm = 1e-3 S, Cp = 1e-12 F → ω_T = 1e9 rad/s

チャプター11

問題1: 基本差動増幅器の電圧利得
差動入力段の電圧利得は次式で表される。
Av = g_m1,2 * (ro2 // ro4)
(1) Python関数 gain_diff(gm, ro2, ro4) を作成し、この利得を返せ。
(2) gm = 2e-3 [A/V], ro2 = 40e3 [Ω], ro4 = 50e3 [Ω] の場合の Av を計算せよ。

問題2: カスコード差動増幅器の電圧利得
カスコード構造にすると電圧利得は次式で表される。
Av = g_m1,2 * (g_m4 * ro4 * ro2 // g_m6 * ro6 * ro8)
(1) Python関数 gain_cascode(gm12, gm4, ro4, ro2, gm6, ro6, ro8) を作成せよ。
(2) gm12 = 2e-3 [A/V], gm4 = 3e-3 [A/V], ro4 = 40e3 [Ω], ro2 = 50e3 [Ω], gm6 = 3e-3 [A/V], ro6 = 40e3 [Ω], ro8 = 60e3 [Ω] の場合の Av を計算せよ。

問題3: 入力電圧範囲の制約条件
カスコード差動増幅器の入力電圧範囲は次式で制限される。
Vin,CM > V_T + V_Dsat1 + V_Dsat2
(1) Python関数 input_range(VT, Vdsat1, Vdsat2) を作成し、Vin,CM の下限を返せ。
(2) VT = 0.6 V, Vdsat1 = 0.2 V, Vdsat2 = 0.2 V の場合を計算せよ。

問題4: 出力電圧範囲の制約
カスコード差動増幅器において、M3, M4, M5 がすべて飽和動作する条件下での出力電圧範囲を考える。
(1) Python関数 output_range(VDD, Vdsat3, VT, Vdsat4, Vdsat5) を作成せよ。
(2) VDD = 5 V, Vdsat3 = 0.2 V, VT = 0.6 V, Vdsat4 = 0.2 V, Vdsat5 = 0.2 V の場合を計算せよ。

問題5: 折り返しカスコード差動増幅回路の利得
折り返しカスコード差動増幅器は広い入力範囲を持ちながら高利得を実現する。基本利得式は次で表される。
Av = - g_m * R_load
(1) Python関数 gain_folded(gm, Rload) を作成せよ。
(2) gm = 4e-3 [A/V], Rload = 50e3 [Ω] の場合の利得を計算せよ。

問題6: カスコード差動増幅器の入力条件
条件式:
VinCM > V_T + V_Dsat1 + V_Dsat2

(1) Python関数を作成せよ。

def check_input_range(VinCM, VT, Vdsat1, Vdsat2):
threshold = VT + Vdsat1 + Vdsat2
return VinCM > threshold, threshold

(2) VinCM = 1.2 V, VT = 0.5 V, Vdsat1 = 0.2 V, Vdsat2 = 0.2 V の場合

計算:
threshold = 0.5 + 0.2 + 0.2 = 0.9 V
VinCM = 1.2 V > 0.9 V → 条件を満たす

出力例:
(True, 0.9)

問題7: 出力電圧範囲の制限

(1) 数式の整理:
M3, M4 が飽和 → Vout > V_T + V_Dsat3
M5 が飽和 → Vout < V_DD − V_Dsat5
よって:
V_T + V_Dsat3 < Vout < V_DD − V_Dsat5

(2) 出力範囲が狭くなる理由:
上側トランジスタ (M3, M4) と下側トランジスタ (M5) の飽和条件を同時に満たす必要があるため、動作可能な Vout の範囲は両者の重なり部分に限定される。このため有効出力スイングは狭い。

問題8: 折り返しカスコード差動増幅器

(1) Python関数を作成せよ。

def gain_folded(gm, Rout):
return gm * Rout

(2) gm = 2.5e-3 [A/V], Rout = 100e3 [Ω]

計算:
Av = 2.5e-3 × 100e3 = 250

答え: 利得 Av = 250

問題9: OPアンプの伝達関数

伝達関数:
Av = (gm12 Ro1 Rout) / (1 + s Ro1 Rout gm6 Cc + s² Ro1 Rout (C1 Cout + C1 Cc + Cout Cc))

(1) 極の整理:
p1 ≈ gm6 / Cout
p2 ≈ gm6 / (C1 + Cout)

(2) Python関数を作成せよ。

def poles(gm6, Rout, Cc, C1, Cout):
p1 = gm6 / Cout
p2 = gm6 / (C1 + Cout)
return p1, p2

例: gm6 = 2e-3 [A/V], Rout = 50e3 [Ω], Cc = 1e-12 F, C1 = 2e-12 F, Cout = 5e-12 F

計算:
p1 = 2e-3 / 5e-12 = 4.0e8 rad/s
p2 = 2e-3 / (2e-12 + 5e-12) = 2.86e8 rad/s

問題10: CMRR (同相除去比)

式:
CMRR = 2 gm34 ro3 gm (ro2 // Rload)

並列抵抗:
ro2 // Rload = (ro2 * Rload) / (ro2 + Rload)

(1) Python関数を作成せよ。

def cmrr(gm34, ro3, gm, ro2, Rload):
parallel = (ro2 * Rload) / (ro2 + Rload)
return 2 * gm34 * ro3 * gm * parallel

(2) gm34 = 2e-3 [A/V], ro3 = 40e3 [Ω], gm = 3e-3 [A/V], ro2 = 50e3 [Ω], Rload = 100e3 [Ω]

計算:
ro2 // Rload = (50e3 × 100e3) / (50e3 + 100e3) = 33.3e3 Ω
CMRR = 2 × 2e-3 × 40e3 × 3e-3 × 33.3e3
= 2 × 0.002 × 40000 × 0.003 × 33300
= 16000

答え: CMRR ≈ 1.6 × 10^4 (約 84 dB)

問題11: 基本差動増幅器の利得
式:
Av = gm12 × (ro2 // ro4)

(1) Python関数 gain_diff(gm12, ro2, ro4) を作成せよ。
(2) gm12 = 1.5e-3 [A/V], ro2 = 60e3 [Ω], ro4 = 80e3 [Ω] の場合の Av を求めよ。
(3) ro2 を 40kΩ, 60kΩ, 100kΩ と変化させた場合の利得変化を比較せよ。

問題12: カスコード差動増幅器の利得
式 (11.3):
Av = gm12 × (gm4 ro4 ro2 // gm6 ro6 ro8)

(1) Python関数 gain_cascode(gm12, gm4, ro4, ro2, gm6, ro6, ro8) を作成せよ。
(2) gm12 = 2e-3, gm4 = 1.5e-3, ro4 = 50e3, ro2 = 40e3, gm6 = 1.5e-3, ro6 = 60e3, ro8 = 70e3 の場合の利得を計算せよ。
(3) 結果を問題11と比較し、カスコード接続の効果を考察せよ。

問題13: 入力条件の判定
式 (11.4):
VinCM > VT + Vdsat1 + Vdsat2

(1) Python関数 check_vin_cm(VinCM, VT, Vdsat1, Vdsat2) を作成せよ。
(2) VinCM = 0.8 V, VT = 0.4 V, Vdsat1 = 0.15 V, Vdsat2 = 0.15 V の場合を判定せよ。
(3) VinCM を 0.6 V, 0.8 V, 1.0 V と変化させ、許容範囲を満たすかどうかを確認せよ。

問題14: 折り返しカスコード増幅器の利得
Av = gm × Rout

(1) Python関数 gain_folded(gm, Rout) を作成せよ。
(2) gm = 2e-3 [A/V], Rout = 200e3 [Ω] の場合の Av を求めよ。
(3) gm を 1e-3, 2e-3, 3e-3 と変化させた場合の利得を比較せよ。

問題15: 2段OPアンプの伝達関数シミュレーション
式:
Av(s) = (gm12 Ro1 Rout) / (1 + s Ro1 Rout gm6 Cc + s² Ro1 Rout (C1 Cout + C1 Cc + Cout Cc))

(1) Python関数 opamp_tf(gm12, Ro1, Rout, gm6, Cc, C1, Cout, s) を作成せよ。
(2) gm12 = 1.5e-3, Ro1 = 50e3, Rout = 40e3, gm6 = 2e-3, Cc = 2e-12, C1 = 1e-12, Cout = 3e-12, s = jω, ω = 1e6 rad/s のときの Av を計算せよ。
(3) ω を 1e5, 1e6, 1e7 に変化させて周波数特性を比較せよ。

問題 16: スルーレートの計算
式:
SR = I5 / Cc

(1) Python関数 slew_rate(I5, Cc) を作成せよ。
(2) I5 = 22.5e-6 [A], Cc = 0.3e-12 [F] の場合の SR を計算せよ。
(3) I5 = 10 μA, 22.5 μA, 50 μA の場合について SR を比較せよ。

問題 17: gm1 の算出
式:
gm1 = Cc × ωc

(1) Python関数 gm1_calc(Cc, wc) を作成せよ。
(2) Cc = 0.3e-12 [F], wc = 2π × 200e6 [rad/s] の場合の gm1 を計算せよ。
(3) ユニティゲイン周波数を 100 MHz, 200 MHz, 400 MHz とした場合の gm1 を比較せよ。

問題 18: 出力電圧範囲の下限
式:
Vout_min = sqrt( 2 I7 / (βp' × (W/L)7) )

(1) Python関数 vout_min(I7, beta_p, WoverL7) を作成せよ。
(2) I7 = 900e-6 [A], βp' = 2e-4 [A/V²], (W/L)7 = 40 の場合の Vout_min を計算せよ。
(3) (W/L)7 = 20, 40, 80 と変化させたときの Vout_min を比較せよ。

問題 19: 出力電圧範囲の上限
式:
Vout_max = VDD − VDS6sat
VDS6sat = sqrt( 2 I6 / (βp' × (W/L)6) )

(1) Python関数 vout_max(VDD, I6, beta_p, WoverL6) を作成せよ。
(2) VDD = 3.0 V, I6 = 900e-6 [A], βp' = 1e-4 [A/V²], (W/L)6 = 80 の場合の Vout_max を計算せよ。
(3) (W/L)6 = 40, 80, 160 と変化させた場合の Vout_max を比較せよ。

問題 20: OPアンプの利得 A0
式:
A0 = ( gm1 / ( (I5/2)(λn + λp) ) ) × ( gm6 / ( I7 (λn + λp) ) )

(1) Python関数 gain_opamp(gm1, I5, lam_n, lam_p, gm6, I7) を作成せよ。

(2) gm1 = 380e-6 [S], I5 = 22.5e-6 [A], λn = 0.1, λp = 0.1, gm6 = 4000e-6 [S], I7 = 900e-6 [A] の場合の A0 を計算せよ。
計算:
A0 = (380e-6 / (22.5e-6/2 × 0.2)) × (4000e-6 / (900e-6 × 0.2))
= (380e-6 / 4.5e-6) × (4000e-6 / 180e-6)
= 84.4 × 22.2
≈ 1875 ≈ 1900

(3) gm6 = 2000 μS, 4000 μS, 8000 μS と変化させたときの A0 を比較せよ。
問題 21: スルーレートと相互コンダクタンス

式:
SR = I5 / Cc
gm1 = Cc × ωc

数値例:
SR = 22.5e-6 / 0.3e-12 = 7.5e7 [V/s] = 75 [MV/s]
gm1 = 0.3e-12 × (2π × 200e6) = 3.77e-4 [S] = 377 μS

問題 22: トランスコンダクタンスと W/L 比

式:
gm1 = √(2 βn' (W/L)1 I5)
gm6 ≈ 10 gm1
Vin(min) = ΔVDS5 + Vtn + ΔVDS1

数値例:
gm1 = √(2 × 1e-4 × 2 × 22.5e-6) ≈ 95 μS
(W/L)6 = 80
Vin(min) = 0.3 + 0.7 + 0.3 = 1.3 V

問題 23: 出力範囲と W/L 比

式:
(W/L)4 = (W/L)6 / (W/L)7
Vout(min) = √( 2 I7 / ( βp' (W/L)7 ) )
Vout(max) = VDD − VDS6sat
VDS6sat = √( 2 I6 / ( βp' (W/L)6 ) )

数値例:
(W/L)4 = 80 / 2 = 40
(W/L)5 = 40
Vout(min) = √(1.8e-3 / 8e-3) = √0.225 ≈ 0.47 V
VDS6sat = √0.225 ≈ 0.47 V
Vout(max) = 3.0 − 0.47 = 2.53 V

問題 24: 電圧利得の計算

式:
A0 = gm1,2 × (ro4 // ro2) × gm6 × (ro6 // ro7)
= ( gm1 / ( (I5/2)(λn+λp) ) ) × ( gm6 / ( I7 (λn+λp) ) )

数値代入:
gm1 = 380e-6 [S], I5 = 22.5e-6 [A], gm6 = 4000e-6 [S], I7 = 900e-6 [A], λn+λp = 0.2

A0 = (380e-6 / (2.25e-6)) × (4000e-6 / (180e-6)) ≈ 1900

問題 25: 設計全体の考察

式:
出力スイング = Vout(max) − Vout(min)
I7 = ((W/L)6 / (W/L)7) × I6

数値例:
Vout(min) ≈ 0.47 V
Vout(max) ≈ 2.53 V
出力スイング ≈ 2.06 V
I7 = (80 / 2) × 22.5e-6 = 900e-6 A

寸法比表:
(W/L)1 = 8, (W/L)2 = 8, (W/L)3 = 8
(W/L)4 = 40, (W/L)5 = 40, (W/L)6 = 80, (W/L)7 = 2

考察: 出力範囲を広げると gm が下がり A0 が低下する。利得を増やすと消費電力が増える。本設計は高速向き。

問題 26: 入力最小電圧の再確認

式:
Vin(min) = ΔVDS5 + Vtn + ΔVDS1

数値例:
Vin(min) = 0.3 + 0.7 + 0.3 = 1.3 V

問題 27: M6 の設計条件

式:
gm6 = 10 gm1
(W/L)6 = gm6 / (βn' Vov)

数値例:
gm1 ≈ 380 μS → gm6 ≈ 3.8 mS
(W/L)6 = 80 を確認

問題 28: 出力抵抗とチャネル長変調

式:
ro ≈ 1 / (λ × ID)

数値例:
λ = 0.1, ID = 22.5 μA → ro ≈ 444 kΩ
ro が小さいと利得低下

問題 29: スルーレートの電流依存性

式:
SR = I5 / Cc

数値例:
I5 = 10 μA → SR = 33 MV/s
I5 = 22.5 μA → SR = 75 MV/s
I5 = 50 μA → SR = 167 MV/s

問題 30: 設計全体のトレードオフ

(1) 依存関係の式整理

スルーレート (SR)
SR = I5 / Cc

トランスコンダクタンス (gm1)
gm1 = sqrt( 2 * βn' * (W/L)1 * I5 )

消費電力 (Pd)
Pd ≈ VDD * Itotal (ここで Itotal ∝ I5)

出力抵抗 (ro)
ro ≈ 1 / ( λ * ID )

電圧利得 (A0)
A0 ∝ gm * ro

(2) I5 増加による数値変化

パラメータ:
Cc = 0.3e-12 [F]
βn' = 1.0e-4 [A/V^2]
(W/L)1 = 8
VDD = 3.0 [V]

SR 計算:
I5 = 10e-6 → SR = 10e-6 / 0.3e-12 = 3.3e7 V/s = 33 MV/s
I5 = 22.5e-6 → SR = 7.5e7 V/s = 75 MV/s
I5 = 50e-6 → SR = 1.67e8 V/s = 167 MV/s

gm1 計算:
gm1 = sqrt( 2 * βn' * (W/L)1 * I5 )

I5 = 10e-6 → gm1 ≈ 127e-6 S = 127 μS
I5 = 22.5e-6 → gm1 ≈ 190e-6 S = 190 μS
I5 = 50e-6 → gm1 ≈ 283e-6 S = 283 μS

消費電力:
Pd = VDD * I5

I5 = 10e-6 → Pd = 30 μW
I5 = 22.5e-6 → Pd = 67.5 μW
I5 = 50e-6 → Pd = 150 μW

(3) (W/L) 増加と gm の関係

gm ∝ sqrt( (W/L) * ID )

(W/L) を増加させると gm が増加する。
理由: チャネル幅が広がり、電子移動度あたりの駆動力が増すため。
ただし (W/L) が大きすぎるとトランジスタ容量が増え、高周波特性が劣化する。

(4) λ を小さくする効果

ro = 1 / ( λ * ID )

λ を小さくすると ro が大きくなる。
A0 ∝ gm * ro → ro が大きくなれば A0 も増加する。

つまりチャネル長を長くして λ を減らすと、高利得設計に有利。

(5) 設計方針の議論

高速設計:
・I5 を大きく → SR ↑, gm ↑, 消費電力 ↑
・用途: 高速 ADC, RF 回路

低消費電力設計:
・I5 を小さく → SR ↓, gm ↓, 出力スイング ↑
・用途: バッテリ駆動アンプ、センサ用回路

・λ 減少(長チャネル化) → ro 増加, A0 増加

結論:
本設計は 高速重視 のトランスコンダクタンス増幅器。
低消費電力設計では電流を抑制し出力スイングを優先。

チャプター12

問題 1: MOSFETの飽和条件

MOSFETが飽和領域で動作するための条件は次式で与えられる。

式:

Vdsat = Vt + sqrt( 2 * I / beta )
条件: Vds > Vdsat

問題 1: トランジスタの基本パラメータ
式:
β = μn Cox (W/L)

課題:
(1) Python関数 beta(muCox, W, L) を作成し、β を計算せよ。
(2) μnCox = 200 μA/V², W = 20 μm, L = 1 μm のときの β を求めよ。

問題 2: オーバードライブ電圧
式:
Vov = √(2I / β)

課題:
(1) Python関数 overdrive(I, beta) を作成し、Vov を計算せよ。
(2) I = 100 μA, β = 2e-4 A/V² のときの Vov を求めよ。

問題 3: 相互コンダクタンス gm
式:
gm = √(2 β I)

課題:
(1) Python関数 gm_calc(beta, I) を作成し、gm を計算せよ。
(2) β = 2e-4 A/V², I = 100 μA のときの gm を求めよ。

問題 4: 出力抵抗 ro
式:
ro = 1 / (λ I)

課題:
(1) Python関数 ro_calc(lam, I) を作成し、ro を計算せよ。
(2) λ = 0.02 V⁻¹, I = 100 μA のときの ro を求めよ。

問題 5: 第1段の電圧利得
式:
Av1 = gm1 × ro1

課題:
(1) Python関数 gain_stage1(gm1, ro1) を作成し、Av1 を計算せよ。
(2) gm1 = 1 mS, ro1 = 100 kΩ のときの Av1 を求めよ。

問題 6: 第2段の電圧利得
式:
Av2 = gm2 × ro2

課題:
(1) Python関数 gain_stage2(gm2, ro2) を作成し、Av2 を計算せよ。
(2) gm2 = 2 mS, ro2 = 200 kΩ のときの Av2 を求めよ。

問題 7: 総合電圧利得
式:
Av_total = Av1 × Av2

課題:
(1) Python関数 gain_total(Av1, Av2) を作成し、Av_total を計算せよ。
(2) Av1 = 200, Av2 = 400 のときの Av_total を求めよ。

問題 8: ミラー補償容量 Cc
式:
fp ≈ gm2 / (2π Cc Av1)

課題:
(1) Python関数 pole_freq(gm2, Cc, Av1) を作成し、fp を計算せよ。
(2) gm2 = 2 mS, Cc = 1 pF, Av1 = 200 のときの fp を求めよ。

問題 9: ユニティゲイン帯域幅 (UGB)
式:
UGB ≈ gm1 / (2π Cc)

課題:
(1) Python関数 unity_gain_bw(gm1, Cc) を作成し、UGB を計算せよ。
(2) gm1 = 1 mS, Cc = 1 pF のときの UGB を求めよ。

問題 10: 位相余裕 PM の近似式
式:
PM ≈ 180° - arctan(UGB / fp)

課題:
(1) Python関数 phase_margin(UGB, fp) を作成し、PM を計算せよ。
(2) UGB = 1e6 Hz, fp = 2e6 Hz のときの PM を求めよ。

問題 11: スルーレート SR
式:
SR = Ibias / Cc

課題:
(1) Python関数 slew_rate(Ibias, Cc) を作成し、SR を計算せよ。
(2) Ibias = 50 μA, Cc = 1 pF のときの SR を求めよ。

問題 12: 出力スイング
式:
Vout(max) = VDD - Vdsat
Vout(min) = VSS + Vdsat

課題:
(1) Python関数 output_swing(VDD, VSS, Vdsat) を作成し、範囲を返せ。
(2) VDD = 3.3 V, VSS = 0 V, Vdsat = 0.2 V のときの出力スイングを求めよ。

問題 13: 入力コモンモード範囲 (ICMR)
式:
Vin(min) = Vss + Vov1 + Vdsat_tail
Vin(max) = VDD - |Vtp| - Vov_load

課題:
(1) Python関数 icmr(VSS, VDD, Vov1, Vdsat_tail, Vtp, Vov_load) を作成し、範囲を返せ。
(2) VSS = 0 V, VDD = 3.3 V, Vov1 = 0.2 V, Vdsat_tail = 0.2 V, Vtp = -0.5 V, Vov_load = 0.2 V のときの ICMR を求めよ。

問題 14: 消費電力
式:
P = VDD × Itotal

課題:
(1) Python関数 power_consumption(VDD, Itotal) を作成し、P を計算せよ。
(2) VDD = 3.3 V, Itotal = 500 μA のときの P を求めよ。

問題 15: Ceff (有効容量)
式:
Ceff = CL + Cc + (CL × Cc) / C

課題:
(1) Python関数 effective_cap(CL, Cc, C) を作成し、Ceff を計算せよ。
(2) CL = 2 pF, Cc = 1 pF, C = 1 nF のときの Ceff を求めよ。

問題 16: 時定数 τ
式:
τ = Ceff / gm

課題:
(1) Python関数 time_constant(Ceff, gm) を作成し、τ を計算せよ。
(2) Ceff = 3 pF, gm = 1 mS のときの τ を求めよ。

問題 17: ステップ応答近似
式:
t_settle ≈ 5 × τ

課題:
(1) Python関数 settling_time(tau) を作成し、t_settle を計算せよ。
(2) τ = 1 μs のときの t_settle を求めよ。

問題 18: ゲイン帯域幅積 (GBW)
式:
GBW = gm / (2π CL)

課題:
(1) Python関数 gain_bandwidth(gm, CL) を作成し、GBW を計算せよ。
(2) gm = 1 mS, CL = 2 pF のときの GBW を求めよ。

問題 19: ノイズ電圧
式:
Vn_rms = √(4 k T γ / (gm))

課題:
(1) Python関数 noise_voltage(k, T, gamma, gm) を作成し、Vn_rms を計算せよ。
(2) k = 1.38e-23, T = 300 K, γ = 2/3, gm = 1 mS のときの Vn_rms を求めよ。

問題 20: ボード線図の描画

式:
H(s) = A0 / ( (1 + s/p1) (1 + s/p2) )

ここで
A0 = DC利得
p1, p2 = 極の周波数 [rad/s]

課題:
(1) Python関数 bode_plot(A0, p1, p2) を作成し、ゲイン(dB)と位相(度)のボード線図を描画せよ。
(2) A0 = 1e5, p1 = 1e3 [rad/s], p2 = 1e6 [rad/s] のとき、ゲイン特性と位相特性を求めてグラフ化せよ。
課題:
(1) 関数 vdsat(Vt, I, beta) を作成せよ。
(2) Vt=0.5 V, I=20e-6 A, β=1e-4 A/V² のときの Vdsat を計算せよ。

問題 2: 相互コンダクタンス gm

MOSFETの相互コンダクタンス gm は次式で表される。

式:

gm = sqrt( 2 * beta * I )

課題:
(1) 関数 gm_value(beta, I) を作成せよ。
(2) β=1e-4 A/V², I=20e-6 A のとき gm を求めよ。

問題 3: W/L 比を含む gm

MOSFETの gm はチャネル寸法 W/L に依存する。

式:

gm = sqrt( 2 * beta_n * (W/L) * I )

課題:
(1) 関数 gm_wl(beta_n, W, L, I) を作成せよ。
(2) βn=1e-4 A/V², W=20 μm, L=2.5 μm, I=20e-6 A のとき gm を求めよ。

問題 4: 入力コモンモード電圧の下限

入力コモンモード電圧の下限は次式で表される。

式:

Vin_min = Vdsat4 + Vt + sqrt( 2 * I / beta )

課題:
(1) 関数 vin_min(Vdsat4, Vt, I, beta) を作成せよ。
(2) Vdsat4=0.2 V, Vt=0.5 V, I=20e-6 A, β=1e-4 A/V² のとき Vin_min を計算せよ。

問題 5: 電源電圧要件

オペアンプが正しく動作するために必要な最小電源電圧は次式で表される。

式:

VDD_min = Vt + 3 * Vdsat

課題:
(1) 関数 vdd_min(Vt, Vdsat) を作成せよ。
(2) Vt=0.5 V, Vdsat=0.2 V のとき VDD_min を計算せよ。

問題 6: nチャネル入力差動対の入力電圧範囲
式:
Vmin = VT + ΔVov1 + ΔVov5
Vmax = VDD - |VTP| - ΔVov3

課題:
(1) Python関数 vin_range_nch(VT, Dov1, Dov5, VDD, VTP, Dov3) を作成し、(Vmin, Vmax) を返せ。
(2) テスト例: VT=0.7 V, Dov1=0.2 V, Dov5=0.1 V, VDD=5.0 V, VTP=-0.7 V, Dov3=0.2 V のときの範囲を求めよ。

問題 7: pチャネル入力差動対の入力電圧範囲
式:
Vmin = Vtn + ΔVov1 + VDSsat5
Vmax = VDD - ΔVov5

課題:
(1) Python関数 vin_range_pch(Vtn, Dov1, VDSsat5, VDD, Dov5) を作成し、(Vmin, Vmax) を返せ。
(2) テスト例: Vtn=0.7 V, Dov1=0.2 V, VDSsat5=0.1 V, VDD=5.0 V, Dov5=0.2 V のときの範囲を求めよ。

問題 8: 入力電圧範囲の比較
課題:
(1) 問題 6, 7 の関数を用いて、nMOS入力とpMOS入力の Vin 許容範囲を比較せよ。
(2) 両者の違いを数値的に確認し、入力電圧範囲の広さにどのような差があるかを考察せよ。

問題 9: 入力コモンモード範囲シミュレーション
課題:
(1) Vin を 0〜VDD の範囲で 0.01 V ステップで走査し、条件を満たす範囲をリストとして抽出する Python プログラムを作成せよ。
(2) nMOS入力差動対とpMOS入力差動対の範囲を重ねて可視化せよ(matplotlib を使用)。

問題 10: 設計パラメータの影響
課題:
(1) ΔVov1, ΔVov3, ΔVov5 をそれぞれ ±0.1 V 変化させ、Vin 許容範囲がどのように変化するかをシミュレーションせよ。
(2) グラフ化し、入力段の設計パラメータが回路性能に与える影響を考察せよ。

チャプター15

問題 1: スイッチトキャパシタのステップ応答
式: ΔQ = Cc × Vin
課題:
(1) Python関数 delta_q_step(Cc, Vin, N) を作成し、N ステップ分の ΔQ を計算せよ。
(2) Cc = 1e-12 [F], Vin = ステップ入力 (0→0.5 V), N = 10 のとき ΔQ[n] を求めよ。

問題 2: 平均電流のステップ応答
式: I = ± Cc × fs × Vin
課題:
(1) Python関数 avg_current_step(Cc, fs, Vin, N) を作成し、N ステップ分の I を計算せよ。
(2) Cc = 1e-12 [F], fs = 1e6 [Hz], Vin = ステップ入力 (0→0.5 V), N = 10 のとき I[n] を求めよ。

問題 3: 極の位置とステップ応答
式: p = (Cc × fs) / C
課題:
(1) Python関数 pole_step(Cc, fs, C, Vin, N) を作成し、ステップ入力に対する極の応答を数値化せよ。
(2) Cc = 1e-12 [F], fs = 1e6 [Hz], C = 1e-9 [F], Vin = 1 のときの時系列応答を求めよ。

問題 4: コンダクタンスのステップ応答
式: G = Cc / T,  G(z) = - (Cc × z^-1) / T
課題:
(1) Python関数 conductance_step(Cc, T, N) を作成し、N ステップの G[n] を計算せよ。
(2) Cc = 1e-12 [F], T = 1e-6 [s], N = 10 のときの G[n] を求めよ。

問題 5: 伝達関数 H(z) のステップ応答 (15.7, 15.8)
式:
H(z) = Cc / (C (1 - z^-1))
H(z) = (Cc × z^-1) / (C (1 - z^-1))
課題:
(1) Python関数 transfer_step(Cc, C, T, N) を作成し、H(z) にステップ入力を与えた応答を求めよ。
(2) Cc = 1e-12 [F], C = 1e-9 [F], T = 1e-6 [s], N = 20 のときの Vout[n] を計算せよ。

問題 6: 二次伝達関数 H(s) の離散化とステップ応答 (15.9)
式: H(s) = 1 / (s² + b s + a)
課題:
(1) 離散化 s = (1 - z^-1)/T を用いて H(z) を求め、ステップ応答を Python で数値計算せよ。
(2) a = 1e6, b = 1e3, T = 1e-6, N = 50 のときの Vout[n] をシミュレーションせよ。

問題 7: 有限ゲイン OPアンプのステップ応答 (15.13, 15.18)
式:
H(z) = (Cc/C) (1 + Vout/A0) / (1 - (1 - Cc/C) z^-1)
課題:
(1) Python関数 opamp_step(Cc, C, A0, T, N) を作成し、ステップ入力応答を数値化せよ。
(2) Cc = 1e-12 [F], C = 1e-9 [F], A0 = 1e4, T = 1e-6, N = 20 のとき Vout[n] を求めよ。

問題 8: 有効容量とステップ応答 (15.20, 15.21)
式: Ceff = CL + Cc + (CL × Cc) / C
t ≈ (5 × Ceff) / gm
課題:
(1) Python関数 cap_step(CL, Cc, C, gm, T, N) を作成し、RC 時定数によるステップ応答をシミュレーションせよ。
(2) CL = 2e-12 [F], Cc = 1e-12 [F], C = 1e-9 [F], gm = 1e-3 [S], T = 1e-6, N = 30 のときの Vout[n] を求めよ。

問題 9: RC積分器のZ変換によるステップ応答 (R.1〜R.4)
式:
Vout(z) = (T/RC) (1/(1 - z^-1)) Vin(z)
課題:
(1) Python関数 rc_step(R, C, T, N) を作成し、単位ステップ入力に対する Vout[n] を計算せよ。
(2) R = 1e3, C = 1e-9, T = 1e-6, N = 50 のときの Vout[n] を出力せよ。

問題 10: s-z変換近似によるステップ応答 (R.6, R.8)
式: s = (1 - z^-1)/T ≈ jω + (ω² T)/2
課題:
(1) Python関数 sz_step(R, C, T, N) を作成し、s-z 近似を用いたステップ応答を計算せよ。
(2) R = 1e3, C = 1e-9, T = 1e-6, N = 50 のときの Vout[n] を求めよ。

チャプター0(創作)

課題1: MOSFETのドレイン電流を計算する関数
MOSFETの飽和領域におけるドレイン電流は以下で表される。
I_DS = (β/2) * (V_GS - V_th)^2
関数 calc_ids(beta, Vgs, Vth) を作成し、β=11mA/V^2, Vgs=0.7V, Vth=0.335V のときの I_DS を求めよ。

課題2: トランスコンダクタンス gm の計算
トランスコンダクタンス gm は次式で表される。
gm = sqrt(2 * β * I_DS)
関数 calc_gm(beta, Ids) を作成し、課題1で求めた I_DS を用いて gm を計算せよ。

課題3: ドレイン抵抗 ro の計算
ドレイン抵抗 ro はチャネル長変調係数 λ を用いて次式で表される。
ro = 1 / (λ * I_DS)
関数 calc_ro(lam, Ids) を作成し、λ = 0.06 [1/V] のときの ro を計算せよ。

課題4: 電圧利得 Av の計算
電圧利得 Av は以下で与えられる。
Av = gm * (RL || ro)
関数 calc_av(gm, RL, ro) を作成し、RL = 5kΩ のときの Av を求めよ。

課題5: 出力インピーダンス Rout の計算
ソース抵抗 Rs を含む場合、出力インピーダンス Rout は次式で表される。
Rout = 1 / (gm + 1/Rs + 1/ro)
関数 calc_rout(gm, Rs, ro) を作成し、Rs = 1kΩ のときの Rout を求めよ。

課題6: gm と I_DS の関係をプロット
gm と I_DS の関係をプロットせよ。
・I_DS を 0~1mA の範囲で変化させる。
・横軸に I_DS [µA]、縦軸に gm [mA/V] をとる。
・タイトル、軸ラベルを英語表記にせよ。
課題7: Bode線図のプロット
MOSFET回路の電圧利得は次式で表される。
Vout/Vin = A0 / (1 + jω/p)

ここで、
・A0 = gm * (RL || ro) (DC利得)
・p = 1 / (C * (RL || ro)) (極周波数)

次の条件で Bode線図(ゲインと位相)をプロットせよ。
・周波数 f を 10^1 Hz ~ 10^7 Hz の範囲で対数スケールで変化させる。
・ゲイン特性(20log10|Vout/Vin|)をdBで表示する。
・位相特性(arg(Vout/Vin))を度[°]で表示する。
・タイトル、軸ラベル、凡例は英語表記にせよ。

課題8: クローズドループの比較
オペアンプのオープンループ利得を次式で表す。
A(jω) = A0 / (1 + jω/p)

帰還をかけたクローズドループ利得は次式で表される。
T(jω) = A(jω) / (1 + A(jω)β)

ここで、
・A0 = 10^5
・p = 10^3 [rad/s]
・β = 0.01

(1) 周波数応答 |T(jω)| を 10^1 ~ 10^7 Hz の範囲でプロットせよ。
(2) ゲインと位相をBode線図として表示せよ。
(3) 帯域幅(-3 dB点)を求めよ。
・タイトル、軸ラベル、凡例は英語表記にせよ。
課題9: 差動増幅回路の特性解析
MOSFET差動増幅回路の差動利得は次式で表される。
Ad = gm (ro || RD)

また、同相信号に対する利得は次式で表される。
Ac = -gm RD × (ro / (ro + RD + 2RS(gm ro - 1)))

ここで、
・gm = 1.6 mA/V
・ro = 143 kΩ
・RD = 5 kΩ
・RS = 1 kΩ

(1) 差動利得 Ad を計算せよ。
(2) 同相利得 Ac を計算せよ。
(3) 共通モード除去比 (CMRR) = 20 log10(Ad / Ac) を求めよ。

課題10: カレントミラー回路の解析
カレントミラー回路において、MOSFETが飽和領域で動作しているとする。ドレイン電流は次式で表される。

IDS = (β/2) (VGS - Vth)^2

また、オーバードライブ電圧 VOD は次で与えられる。
VOD = √(2 IDS / β)

各トランジスタの電圧は以下で表される。
V1 = VOD + Vth
V2 = 2VOD + Vth
VO1 = VOD + Vth
VO2(min) = 2VOD

与えられたパラメータ:
・β = 11 mA/V^2
・Vth = 0.335 V
・IDS = 70 μA

(1) VOD を計算せよ。
(2) V1, V2, VO1, VO2(min) を求めよ。
(3) VO2 の実際の値を次式で計算せよ。
VO2 = VDD - IDS × RD
ここで VDD = 1.2 V, RD = 5 kΩ とする。

課題11: カスコードNMOS回路の出力抵抗
カスコード接続されたNMOS回路の出力抵抗は次式で表される。
Rout = ro + ro + gm ro^2

与えられたパラメータ:
・gm = 4.0 mA/V
・ro = 23 kΩ

(1) Rout を計算せよ。

課題12: ドレイン接地回路の電圧利得
ドレイン接地回路の電圧利得は次式で表される。
Av = gm / (gm + 1/RS + 1/ro)

与えられたパラメータ:
・gm = 3.5 mA/V
・RS = 1 kΩ
・ro = 30 kΩ

(1) Av を計算せよ。

課題13: ゲート接地回路の電圧利得
ゲート接地回路の電圧利得は次式で表される。
Av = (gm + 1/ro)(RL || ro)

与えられたパラメータ:
・gm = 4.0 mA/V
・ro = 23 kΩ
・RL = 1 kΩ

(1) Av を計算せよ。

課題14: ダイオード接続MOSFETの動作点
MOSFETがダイオード接続された場合、必ず飽和領域で動作する。オーバードライブ電圧 VOD は次式で表される。
VOD = √(2 IDS / β)

与えられたパラメータ:
・β = 11 mA/V^2
・IDS = 70 μA
・Vth = 0.335 V

(1) VOD を計算せよ。
(2) VGS を求めよ。
(3) この動作点の特徴を説明せよ。

課題15: 差動増幅回路のCMRR
差動増幅回路における共通モード除去比は次式で表される。
CMRR = 20 log10 (Ad / Ac)

ここで、
・Ad = gm (ro || RD)
・Ac = -gm RD × (ro / (ro + RD + 2RS(gm ro - 1)))

与えられたパラメータ:
・gm = 1.6 mA/V
・ro = 143 kΩ
・RD = 5 kΩ
・RS = 1 kΩ

(1) Ad を計算せよ。
(2) Ac を計算せよ。
(3) CMRR を計算せよ。

課題16: MOSFETのオーバードライブ電圧
MOSFETのオーバードライブ電圧 VOD は次式で表される。
VOD = √(2 IDS / β)

与えられたパラメータ:
・IDS = 100 μA
・β = 10 mA/V^2

(1) VOD を計算せよ。

課題17: カスコード・カレントミラー回路のドレイン電圧
M3 のドレイン電圧は次式で表される。
VD(M3) = 2Vin + Vth - VOD

与えられたパラメータ:
・Vin = 0.7 V
・Vth = 0.3 V
・VOD = 0.2 V

(1) VD(M3) を計算せよ。

課題18: カスコード・カレントミラー回路の最小ドレイン電圧
M3 が飽和領域で動作するための最小ドレイン電圧は次式で表される。
VDS(min) = Vin - Vth - VOD

与えられたパラメータ:
・Vin = 0.7 V
・Vth = 0.3 V
・VOD = 0.2 V

(1) VDS(min) を計算せよ。

課題19: カスコード増幅回路の出力インピーダンス
カスコード増幅回路のドレインから見た出力インピーダンスは次式で表される。
Rout = ro (1 + gm RS)

与えられたパラメータ:
・ro = 20 kΩ
・gm = 5 mA/V
・RS = 1 kΩ

(1) Rout を計算せよ。

課題20: カスコード増幅回路の電圧利得
カスコード増幅回路の電圧利得は次式で表される。
Av = - gm1 RL / (1 + 1/(gm2 ro2) + 1/(gm1 ro1))

与えられたパラメータ:
・gm1 = 5 mA/V
・gm2 = 4 mA/V
・ro1 = 20 kΩ
・ro2 = 25 kΩ
・RL = 10 kΩ

(1) Av を計算せよ。

課題21: トランスコンダクタンスの計算
MOSFET のトランスコンダクタンス gm は次式で表される。
gm = √(2 μn Cox (W/L) ID)

与えられたパラメータ:
・μn Cox (W/L) = 200 μA/V^2
・ID = 100 μA

(1) gm を計算せよ。

課題22: 出力コンダクタンスとチャネル長変調
出力コンダクタンス gds は次式で表される。
gds = λ ID

与えられたパラメータ:
・λ = 0.02 V^-1
・ID = 200 μA

(1) gds を計算せよ。

課題23: 飽和領域におけるドレイン電流
ドレイン電流は次式で与えられる。
ID = (1/2) μn Cox (W/L) (VGS - VTN)^2 (1 + λ VDS)

与えられたパラメータ:
・μn Cox (W/L) = 300 μA/V^2
・VGS = 1.2 V
・VTN = 0.4 V
・λ = 0.02 V^-1
・VDS = 2.0 V

(1) ID を計算せよ。

課題24: カレントミラーの出力電流比
カレントミラーの電流比は次式で表される。
Iout / IREF = (1 + λ (Vout - VREF)) / (1 + λ VREF)

与えられたパラメータ:
・λ = 0.02 V^-1
・Vout = 1.2 V
・VREF = 0.8 V

(1) Iout / IREF を計算せよ。

課題25: 参照電圧の温度依存性
参照電圧の温度変化率は近似的に次式で表される。
ΔVREF / ΔT ≈ (∂VREF/∂μ)(∂μ/∂T) + (∂VREF/∂VT)(∂VT/∂T)

与えられたパラメータ:
・∂VREF/∂μ = 0.5 V
・∂μ/∂T = -0.002 /K
・∂VREF/∂VT = 1.2 V
・∂VT/∂T = -0.001 /K

(1) ΔVREF/ΔT を計算せよ。

課題26: MOSFET 飽和電流の計算
MOSFET の飽和電流は次式で表される。
Iout = (1/2) μn Cox (W/L) (VGS - VTN)^2

与えられたパラメータ:
・μn Cox (W/L) = 250 μA/V^2
・VGS = 1.0 V
・VTN = 0.4 V

(1) Iout を計算せよ。

課題27: GBW (Gain Bandwidth Product) の計算
利得帯域幅積 fGBW は次式で表される。
fGBW = gm / (2π CL)

与えられたパラメータ:
・gm = 2.0 mA/V
・CL = 2.0 pF

(1) fGBW を Hz 単位で計算せよ。

課題28: 出力ポール周波数の計算
出力ポール周波数 fp は次式で表される。
fp = 1 / (2π Rout Cout)

与えられたパラメータ:
・Rout = 50 kΩ
・Cout = 2.0 pF

(1) fp を MHz 単位で計算せよ。

課題29: トランジスタのトランジット周波数 fT
トランジット周波数 fT は次式で表される。
fT = gm / (2π Cgs)

与えられたパラメータ:
・gm = 3.5 mA/V
・Cgs = 1.0 pF

(1) fT を MHz 単位で計算せよ。

課題30: ゼロ点周波数の計算
ゼロ点周波数 fz は次式で表される。
fz = 1 / (2π (gm - 1/Rz) Cz)

与えられたパラメータ:
・gm = 2.0 mA/V
・Rz = 1.0 kΩ
・Cz = 0.5 pF

(1) fz を MHz 単位で計算せよ。

(1)基本回路の役割と動作原理

問題1:カレントミラー
MOSFETのしきい値電圧 Vth=0.7 V, トランジスタ定数 k=200 μA/V² とする。
基準電流 Ibias=100 μA を流すとき、出力トランジスタのドレイン電流を計算する関数 current_mirror(Ibias, k, Vth) をPythonで作成せよ。

問題2:差動対回路
入力差電圧 ΔV=20 mV, バイアス電流 Ibias=200 μA のとき、差動対の各MOSFETに流れる電流を計算する関数 diff_pair(ΔV, Ibias) を作成せよ。

問題3:アクティブロード
差動対の負荷としてアクティブロードを接続した場合の出力抵抗を計算する関数 active_load(ro, gm) を作成せよ。
(ro: 出力抵抗, gm: トランスコンダクタンス)。

問題4:カスコード回路
MOSFETの gm=1 mA/V, ro=50 kΩ とする。
カスコード接続時の出力抵抗 Rout ≈ gm·ro² をPythonで計算せよ。

問題5:ソースフォロワー
入力信号 Vin=1.0 V, Vth=0.7 V のとき、出力電圧 Vout を計算する関数 source_follower(Vin, Vth) を作成せよ。

問題6:差動増幅器(カレントミラー負荷版)
Ibias=200 μA, ΔV=50 mV のとき、出力差電圧 Vout を求める関数 diff_amp_mirror(Ibias, ΔV, gm) を作成せよ。

問題7:ウィルソンカレントミラー
Ibias=100 μA, ro=100 kΩ, gm=1 mA/V のとき、出力抵抗 Rout を求める関数 wilson_mirror(Ibias, gm, ro) を作成せよ。

問題8:電流ステアリング回路
Ibias=200 μA を2つの枝に分配し、入力制御信号によって切り替える回路を模擬する関数 current_steering(Ibias, sel) を作成せよ。

問題9:折り返しカスコード(Folded Cascode)
Ibias=100 μA のとき、ゲイン A ≈ gm·Rout を求める関数 folded_cascode(Ibias, gm, ro) を作成せよ。

問題10:レベルシフタ回路
入力 Vin=1.8 V をシフトさせて Vout=Vin-ΔV とする関数 level_shifter(Vin, ΔV) を作成せよ。

(2)高い利得 A を実現する回路構成

問題11:差動対+アクティブロード
gm=1 mA/V, ro=50 kΩ のとき、利得 A = gm·ro を計算せよ。

問題12:差動対+アクティブロード+カスコード
同じ条件で Rout ≈ gm·ro² を用い、利得を計算せよ。

問題13:2段アンプ
1段目の利得 A1=100, 2段目の利得 A2=50 のとき、総合利得を計算する関数 two_stage_amp(A1, A2) を作成せよ。

問題14:差動対+カレントミラー負荷+カスコード
gm=2 mA/V, ro=100 kΩ のとき、利得を求める関数 mirror_cascode(gm, ro) を作成せよ。

問題15:折り返しカスコード
Ibias=200 μA, gm=1.5 mA/V, ro=80 kΩ のとき、利得を計算する関数 folded_gain(gm, ro) を作成せよ。

問題16:多段増幅器+レベルシフタ
3段増幅器の利得 [50, 80, 100] を与えたとき、総合利得を求める関数 multi_stage_gain(gain_list) を作成せよ。

(3)応用回路と実装例

問題17:オペアンプ入力段(差動+カレントミラー負荷)
ΔV=20 mV, gm=2 mA/V のとき、出力電流差を計算する関数 opamp_input(ΔV, gm) を作成せよ。

問題18:オペアンプ中間段(カスコード)
gm=1.2 mA/V, ro=100 kΩ のとき、利得を計算する関数 opamp_mid(gm, ro) を作成せよ。

問題19:オペアンプ中間段(Folded Cascode)
Ibias=150 μA, gm=1.8 mA/V, ro=120 kΩ のとき、利得を求める関数 opamp_folded(Ibias, gm, ro) を作成せよ。

問題20:オペアンプ出力段(ソースフォロワ+プッシュプル)
入力 Vin=1 V, Vth=0.7 V のとき、出力電圧を計算する関数 opamp_output(Vin, Vth) を作成せよ。

問題21:DAC構成要素(電流ステアリング回路)
NビットDACで、入力コードに応じて電流を分配する関数 dac_current(code, Iunit) を作成せよ。

問題22:基準電流生成(ウィルソンカレントミラー応用)
Ibias=100 μA を基準として複製する関数 ref_current(Ibias, N) を作成せよ。

0
2
0

Register as a new user and use Qiita more conveniently

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?