TFTiv_errorcheck.py 技術ドキュメント
プログラムの動作
TFTiv_errorcheck.py は、薄膜トランジスタ(TFT)の伝達特性(\(I_{ds}\) - \(V_{gs}\))および出力特性(\(I_{ds}\) - \(V_{ds}\))の測定データから、飽和領域における移動度(\(\mu_{sat}\))と閾値電圧(\(V_{th}\))を推定するためのPythonスクリプトです。このプログラムは、線形最小二乗法を用いてフィッティングを行い、推定されたパラメータ(移動度、閾値電圧)の誤差も算出します。
主な機能は以下の通りです。
データ読み込み: CSV形式の入力ファイルから\(V_{gs}\)と\(I_{ds}\)の測定データを読み込みます。
パラメータ設定: 物理定数、デバイスのジオメトリ(ゲート絶縁膜厚 \(d_g\)、誘電率 \(\epsilon_r\)、チャネル幅 \(W\)、チャネル長 \(L\))などを設定します。
コマンドライン引数による設定変更: \(V_{ds}\)(移動度算出に使用するドレイン電圧)、フィッティング範囲の\(V_{gs}\)最小値(
xfitmin)、最大値(xfitmax)をコマンドライン引数で変更できます。飽和領域解析: TFTの飽和領域の基本式に基づき、\(I_{ds}^{1/2}\) と \(V_{gs}\) の関係をプロットし、線形最小二乗法でフィッティングを行います。
パラメータ推定と誤差評価: フィッティング結果から移動度 \(\mu_{sat}\) と閾値電圧 \(V_{th}\) を算出し、それらの誤差も推定します。
フィッティング範囲依存性の評価: フィッティング範囲の最大値(
xfitmax)を変化させた場合の移動度、閾値電圧、相関係数、誤差の変動を解析し、その結果をグラフで表示します。グラフ表示: 伝達特性(\(I_{ds}\) - \(V_{gs}\))、出力特性(\(I_{ds}\) - \(V_{ds}\))、\(I_{ds}^{1/2}\) - \(V_{gs}\) プロット、およびフィッティング範囲依存性のグラフを
matplotlibで表示します。
このプログラムは、TFTの特性評価において、移動度や閾値電圧の推定とその信頼性を評価する際に役立ちます。
原理
本プログラムは、MOSFET(TFTも含む)の飽和領域におけるドレイン電流 \(I_{ds}\) の特性式に基づいています。
飽和領域におけるドレイン電流は次のように表されます。
ここで、\(I_{ds}\) はドレイン電流、\(V_{gs}\) はゲート電圧、\(V_{th}\) は閾値電圧、\(\mu\) は移動度、\(C_{ox}\) はゲート絶縁膜の単位面積あたりの容量、\(W\) はチャネル幅、\(L\) はチャネル長です。
この式を変形し、\(I_{ds}\) の平方根を取ると、以下の線形関係が得られます。
この式は、\(y = b(x - x_0)\) の形式であり、\(y = \sqrt{I_{ds}}\)、\(x = V_{gs}\) と置くと、線形関数 \(y = bx - bx_0\) となります。ここで、\(b\) は直線の傾き、\(-bx_0\) は切片にあたります。
プログラムでは、lsq1 関数を用いて、測定された \(V_{gs}\) と \(\sqrt{I_{ds}}\) のデータに対して1次多項式 \(y = a + bx\) の線形最小二乗フィッティングを行います。フィッティングによって係数 \(a\) と \(b\) が得られます。
得られた係数 \(a\) と \(b\) から、\(V_{th}\) と \(\mu\) は以下のように計算されます。
閾値電圧 (\(V_{th}\)): 線形フィッティングの切片 \(a\) と傾き \(b\) から、\(-bx_0 = a\) なので、\(x_0 = -a/b\) となります。 $\(V_{th} = -\frac{a}{b}\)$
移動度 (\(\mu\)): 傾き \(b\) は \(\sqrt{\frac{1}{2} \mu C_{ox} \frac{W}{L}}\) に等しいので、\(b^2 = \frac{1}{2} \mu C_{ox} \frac{W}{L}\) となります。 これを \(\mu\) について解くと、 $\(\mu = \frac{b^2}{\frac{1}{2} C_{ox} \frac{W}{L}}\)$
ゲート絶縁膜の単位面積あたりの容量 \(C_{ox}\) は、ゲート絶縁膜厚 \(d_g\) と相対誘電率 \(\epsilon_r\)、真空の誘電率 \(\epsilon_0\) から計算されます。
また、lsq1 関数はフィッティング係数 \(a\) と \(b\) の標準誤差 \(S_a\) と \(S_b\) も計算します。これらの誤差を用いて、\(V_{th}\) と \(\mu\) の誤差 \(S_{V_{th}}\) と \(S_{\mu}\) が誤差伝播の法則により計算されます。
\(V_{th}\) の誤差 (\(S_{V_{th}}\)): $\(S_{V_{th}} = \sqrt{\left(\frac{\partial V_{th}}{\partial a}\right)^2 S_a^2 + \left(\frac{\partial V_{th}}{\partial b}\right)^2 S_b^2} = \sqrt{\left(-\frac{1}{b}\right)^2 S_a^2 + \left(\frac{a}{b^2}\right)^2 S_b^2}\)$
\(\mu\) の誤差 (\(S_{\mu}\)): $\(S_{\mu} = \sqrt{\left(\frac{\partial \mu}{\partial b}\right)^2 S_b^2} = \left|\frac{2b}{\frac{1}{2} C_{ox} \frac{W}{L}}\right| S_b = \left|\frac{2\mu}{b}\right| S_b\)$
これらの計算により、TFTの飽和領域における主要な電気的パラメータとその信頼性が評価されます。
必要な非標準ライブラリとインストール方法
本プログラムの実行には、以下の非標準ライブラリが必要です。
numpy: 数値計算、特に配列操作や線形代数計算に用いられます。
matplotlib: グラフ描画に用いられます。
これらのライブラリは、Pythonのパッケージマネージャ pip を使用してインストールできます。コマンドプロンプトやターミナルで以下のコマンドを実行してください。
pip install numpy matplotlib
必要な入力ファイル
プログラムは、TFTの電気特性データが記述されたCSVファイルを必要とします。デフォルトのファイル名は TransferCurve.csv です。
ファイル形式: CSVファイルは以下の構造を持つ必要があります。
1行目(ヘッダー行):
最初の列は
$V_{gs}$のラベル(例: "Vgs")。2列目以降は、各列に対応する
$V_{ds}$の値を表す文字列(例: "Vds=1.0V", "Vds=10.0V")または直接数値(例: "1.0", "10.0")です。プログラムはpfloat関数を使用してこれらの文字列から浮動小数点数を抽出します。もし、途中に空文字列のヘッダー列があった場合、それ以降の列はデータとして読み込まれません。
2行目以降(データ行):
最初の列は
$V_{gs}$の値(単位: V)。2列目以降は、ヘッダー行に対応する各
$V_{ds}$における$I_{ds}$の値(単位: A)。
TransferCurve.csv の例:
Vgs,Vds=1.0V,Vds=5.0V,Vds=10.0V
-10.0,1.000e-12,1.000e-12,1.000e-12
-8.0,1.000e-12,1.000e-12,1.000e-12
-6.0,1.000e-12,1.000e-12,1.000e-12
-4.0,1.000e-11,1.000e-11,1.000e-11
-2.0,1.000e-10,1.000e-10,1.000e-10
0.0,1.000e-09,1.000e-09,1.000e-09
2.0,1.000e-08,5.000e-09,3.000e-09
4.0,5.000e-08,2.000e-08,1.000e-08
6.0,1.000e-07,5.000e-08,3.000e-08
8.0,2.000e-07,1.000e-07,6.000e-08
10.0,3.000e-07,1.500e-07,9.000e-08
生成される出力ファイル
本プログラムは、計算結果をコンソールに出力し、matplotlib を用いてグラフをインタラクティブに表示しますが、ファイルとして結果を保存する機能は、現在のところ実装されていません。 したがって、実行によって直接的に生成される出力ファイルはありません。
グラフはプログラム終了時に表示が閉じられます。グラフ画像を保存したい場合は、表示されたウィンドウから手動で保存するか、プログラムコードに plt.savefig() などの行を追加する必要があります。
コマンドラインでの使用例 (Usage)
基本的な実行コマンドは以下の通りです。引数はオプションであり、省略した場合はプログラム内のデフォルト値が使用されます。
python TFTiv_errorcheck.py (Vds0 xfitmin xfitmax)
引数の説明:
Vds0(float):飽和領域移動度を計算するために使用するドレイン電圧(\(V_{ds}\))の値を指定します。
デフォルト値:
10.0(V)
xfitmin(float):\(\sqrt{I_{ds}}\) 対 \(V_{gs}\) の線形フィッティングを行う範囲の、\(V_{gs}\) の最小値を指定します。
デフォルト値:
1.90(V)
xfitmax(float):\(\sqrt{I_{ds}}\) 対 \(V_{gs}\) の線形フィッティングを行う範囲の、\(V_{gs}\) の最大値を指定します。
デフォルト値:
10.0(V)
注意: 引数は順序が重要です。Vds0、xfitmin、xfitmax の順で指定する必要があります。一部の引数のみを指定する場合、例えばVds0とxfitminのみを指定するには以下のようにします。
python TFTiv_errorcheck.py 5.0 2.0
この場合、xfitmax はデフォルト値のままになります。
コマンドラインでの具体的な使用例
例1: デフォルトのパラメータで実行
python TFTiv_errorcheck.py
実行結果の説明:
プログラムは TransferCurve.csv を読み込み、Vds=10.0V のデータを使用して、\(V_{gs}\) が 1.90V から 10.0V の範囲でフィッティングを行います。
コンソールには、以下の情報が表示されます。
ゲート絶縁膜容量
Coxの値読み込まれたデータの次元 (
nVds,nVgs)使用された
$V_{ds}$の値フィッティング範囲の最大値を変えながら計算した、移動度、閾値電圧、相関係数、誤差の変動。
指定されたフィッティング範囲での線形最小二乗フィッティング結果(係数 \(a, b\)、相関係数 \(r\))
計算された閾値電圧 (\(V_{th}\)) とその誤差 (\(S_{V_{th}}\))
計算された飽和領域移動度 (\(\mu_{sat}\)) とその誤差 (\(S_{\mu}\)) (m\(^2\)/Vs および cm\(^2\)/Vs 単位)
同時に、matplotlib ウィンドウが開かれ、以下の7つのグラフが表示されます。
伝達特性 (\(I_{ds}\) - \(V_{gs}\)) (logスケール)
出力特性 (\(I_{ds}\) - \(V_{ds}\))
\(I_{ds}^{1/2}\) - \(V_{gs}\) プロット(フィッティング直線も表示)
移動度 - フィッティング最大 \(V_{gs}\) (誤差棒付き)
閾値電圧 - フィッティング最大 \(V_{gs}\) (誤差棒付き)
相関係数 - フィッティング最大 \(V_{gs}\)
誤差の分散 - フィッティング最大 \(V_{gs}\)
コンソールには Press ENTER to exit>> と表示され、Enterキーを押すことでプログラムとグラフウィンドウが終了します。
例2: 特定のパラメータを指定して実行
python TFTiv_errorcheck.py 5.0 2.0 8.0
実行結果の説明:
このコマンドは、Vds=5.0V のデータを使用し、\(V_{gs}\) が 2.0V から 8.0V の範囲でフィッティングを実行します。コンソール出力およびグラフ表示は例1と同様ですが、使用されるデータとフィッティング範囲が変更された結果が反映されます。これにより、ユーザーは異なる動作条件や解析範囲でのTFT特性を評価できます。