1
1

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-1]

Last updated at Posted at 2025-07-08

「アナログCMOS集積回路の設計」とは?

こちらはアナログ集積回路を学ぶ上での入門書になります。
必要な前提知識は高校物理・高校数学、また大学数学の線形代数・微積分学、電気工学・電子工学・半導体工学などです。

研究室に配属された大学4年生や大学院1年生にオススメの参考書となっていますが、残念ながら現在は絶版しています。今は第二版が販売されているので、いつかやってみようかな。

大学の図書館で借りたので、せっかくなのでやっていこうと思います。

計算環境

使用する言語:Python
使用するライブラリ:Numpy Matplotlib.pyplot
使用するPC:HP 15-fc windows11(クソどうでもいい)

パラメータの定義

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

大問2-1

$ W/L=50/0.5 $のPFETおよびNFETの$ |V_{DD}| $が$ 0 $から$ 3.0 $まで変化したときのドレイン電流$ I_d $の変化を図に示せ。ただし$ |V_{DS}|=3.0 $とする。

解答コード

Q_2-1.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-1のパラメータ
VDD = 3  # VDD[V]
beta_N = UO_N * COX * (W / L)  # beta_N
beta_P = UO_P * COX * (W / L)  # beta_P

#解答
VGS = np.arange(-3, 3, 0.01)
VDS = VDD
# ドレイン電流の式 (飽和領域の近似式)
# VGS が VTH_N より小さい場合は電流が流れないため、0とする
Id_n = np.where(VGS > VTH_N, beta_N * (VGS - VTH_N)**2 * (1 + LAMBDA_N * VDS), 0)
Id_p = np.where(VGS < VTH_P, beta_N*(VGS - VTH_P)**2*(1+LAMBDA_N*VDS),0)
plt.plot(VGS, Id_n)
plt.plot(VGS, Id_p)
plt.title('MOS Drain Current (Id_n) vs. Gate-Source Voltage (VGS)') # グラフタイトルを追加
plt.xlabel('VGS [V]') # x軸ラベルを追加
plt.ylabel('Id [A]') # y軸ラベルを追加
plt.grid(True) # グリッド線を追加
plt.show()

出力結果

Q_2-1.png

今回用いた公式

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

\displaylines{
I_d\approx\frac{1}{2}\mu_n C_{ox} \frac{W}{L}(V_{GS}-V_{TH})^2 (1+\lambda V_{DS})
}

これは飽和領域におけるドレイン電流の公式である。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?