0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「アナログCMOS集積回路の設計」の問題をPythonで解いてみる[2-3]

Last updated at Posted at 2025-07-10

計算環境

使用する言語:Python
使用するライブラリ:Numpy Matplotlib.pyplot
使用するPC:HP 15-fc windows11

パラメータの定義

本書p.44の表2.1にすべてのパラメータが定義されており、それらはあらかじめコードの序盤に定義している。

大問2-3

$ g_mr_o $と$ I_d $および$ W/L $の関係式を導け。$ L $をパラメータとしたときの$ g_mr_o $と$ I_d $の関係を図示せよ。この時、$ \lambda\propto1/L $に留意せよ。

解答コード

Q_2-3.py
import numpy as np
import matplotlib.pyplot as plt

# 定義済みのパラメータ
EPSILON_0 = 8.85 * 10**-12  # 真空の誘電率[F/m]
EPSILON_SIO2 = 3.9  # SI02の比誘電率[F/m]
TOX = 9.0 * 10**-9  # ゲート酸化膜厚[m]
COX = (EPSILON_0 * EPSILON_SIO2) / TOX  # 単位面積あたりのゲート容量[F/m**2]

#表2-1のモデルパラメータ
UO_N = 350 * 10**-4  # 電子の移動度[m^2/Vs]
LAMBDA_N = 0.1  # NMOSのチャネル長変調係数
GAMMA_N = 0.45  # NMOSの基板バイアス定数[V**(1/2)]
PHI_N = 0.9  # 2PHI[V]
VTH_N = 0.7  # NMOSのしきい値電圧[V]
LD_N = 0.08e-6  # ソース/ドレインの側壁拡散長[m]
PB_N = 0.9  # ソース/ドレイン接合のビルトインポテンシャル[V]
MJ_N = 0.45  # CJの解析式の指数[なし]
MJSW_N = 0.2  # CJSWの解析式の指数[なし]
CJ_N = 0.56E-3  # ソース/ドレイン底面の単位面積あたりの接合容量[F/m**2]
CJSW_N = 0.35e-11  # ソース/ドレイン側壁の単位長あたりの接合容量[F/m]
CGDO_N = 0.4E-9  # 単位長あたりのゲート-ドレインのオーバーラップ容量[F/m]
UO_P = 100 * 10**-4  # ホールの移動度[m^2/Vs]
LAMBDA_P = 0.2  # PMOSのチャネル長変調係数
GAMMA_P = 0.4  # PMOSの基板バイアス定数[V**(1/2)]
PHI_P = 0.8  # 2PHI[V]
VTH_P = -0.8  # PMOSのしきい値電圧[V]
LD_P = 0.09e-6  # ソース/ドレインの側壁拡散長[m]
PB_P = 0.9  # ソース/ドレイン接合のビルトインポテンシャル[V]
MJ_P = 0.5  # CJの解析式の指数[なし]
MJSW_P = 0.3  # CJSWの解析式の指数[なし]
CJ_P = 0.94E-3  # ソース/ドレイン底面の単位面積あたりの接合容量[F/m**2]
CJSW_P = 0.32e-11  # ソース/ドレイン側壁の単位長あたりの接合容量[F/m]
CGDO_P = 0.3E-9  # 単位長あたりのゲート-ドレインのオーバーラップ容量[F/m]

#大問2の定義
VDD = 3  # VDD[V]
W = 50 * 10**-6  # ゲート幅W[m]
R1 = 1000  # 抵抗[Ω]
R2 = 2000  # 抵抗[Ω]

#解答2-3
#内部利得の式
def g_mr_o(UM, COX, W, L, I_d, LAMBDA):
    return np.sqrt(2 * UM * COX * W * I_d / L) / (LAMBDA * I_d)

#数値で確認しておく
a = LAMBDA_N * 0.5E-6
VDS = VDD  # 仮の値
I_d = np.arange(0.001, 0.1, 0.001)

plt.figure(figsize=(10, 6)) # グラフサイズを調整

for L in np.arange(0.5E-6, 1.5E-6, 0.5E-6):
    plt.plot(I_d, g_mr_o(UO_N, COX, W, L, I_d, LAMBDA_N), label=f'L = {L*1e6:.1f} um')

plt.title('Id-gm*ro characteristic') # グラフタイトルを修正
plt.xlabel('Drain Current Id [A]') # x軸ラベルを修正
plt.ylabel('Intrinsic Gain gm*ro') # y軸ラベルを修正
plt.legend() # 凡例を表示
plt.grid(True)
plt.show()

出力結果

Q_2-3.png

今回用いた公式

今回用いた公式は以下である。
前回の公式を用いる。

\displaylines{
g_mr_o=\sqrt{\mu_n C_{ox}\frac{W}{L}I_d}(\frac{1}{\lambda I_d})
}

式を整理すると、

\displaylines{
g_mr_o=\frac{\sqrt{2\mu_n C_{ox}\frac{W}{L}}}{\lambda \sqrt{I_d}}
}

この式から、内部利得$ g_mr_o $はドレイン電流$ I_d $の平方根に反比例し、$ W/L $の平方根に比例することがわかる。
また、$ \lambda \propto1/L $より、$ \lambda =a/L $とすると、

\displaylines{
g_mr_o=\frac{1}{a}\sqrt{\frac{2\mu_n C_{ox}WL}{I_d}}
}

上の式から、内部利得は$ \sqrt{L} $に比例することがわかる。
実際、出力されたグラフを見ると、$ L $が大きくなると、$ g_mr_o $は大きくなってますね!


チャネル長変調効果は考慮してないですね。
間違っていたらすみません。

0
0
0

Register as a new user and use Qiita more conveniently

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?