TFTiv.py 技術ドキュメント
プログラムの動作
TFTiv.py は、薄膜トランジスタ (TFT: Thin-Film Transistor) の電気特性データから、飽和移動度 (\(\mu_{sat}\)) としきい値電圧 (\(V_{th}\)) を算出・解析するためのPythonスクリプトです。
主な機能:
データ読み込み: CSV形式の入力ファイルから、ゲート-ソース電圧 (\(V_{gs}\))、ドレイン-ソース電圧 (\(V_{ds}\))、ドレイン電流 (\(I_{ds}\)) の特性データを読み込みます。
物理定数・パラメータ設定: 物理定数およびゲート絶縁膜厚、比誘電率、チャネル幅 (\(W\))、チャネル長 (\(L\)) などのデバイスパラメータがコード内に設定されています。
特性グラフ生成:
伝達特性 (\(I_{ds}\) vs \(V_{gs}\)) をプロットします。複数の \(V_{ds}\) 値に対応する曲線を表示し、\(I_{ds}\) は対数スケールで表示されます。
出力特性 (\(I_{ds}\) vs \(V_{ds}\)) をプロットします。複数の \(V_{gs}\) 値に対応する曲線を表示します。
\(\sqrt{I_{ds}}\) vs \(V_{gs}\) 特性をプロットします。これは飽和移動度と閾値電圧を抽出するためのキーとなるグラフです。
飽和移動度・閾値電圧の算出:
指定された \(V_{ds}\) (Vds0) と \(V_{gs}\) 範囲 (xfitmin, xfitmax) における \(\sqrt{I_{ds}}\) vs \(V_{gs}\) データに対し、最小二乗法を用いて線形フィッティングを行います。
フィッティング結果から、飽和領域におけるTFTの特性式に基づき、飽和移動度 (\(\mu_{sat}\)) としきい値電圧 (\(V_{th}\)) を計算し、標準出力に表示します。
解決する課題:
半導体デバイス、特にTFTの性能評価において、実験的に取得した電気特性データから、デバイスの基本的な動作指標である飽和移動度と閾値電圧を正確に抽出し、その特性を視覚的に確認することは非常に重要です。本プログラムは、この抽出と可視化のプロセスを自動化し、デバイス開発や材料研究の効率化に貢献します。
原理
本プログラムは、MOSFET/TFTの飽和領域におけるドレイン電流の理論式に基づき、飽和移動度と閾値電圧を算出します。
TFTの飽和領域におけるドレイン電流 \(I_{ds}\) は、以下の式で表されます。
ここで、
\(I_{ds}\): ドレイン電流
\(\mu_{sat}\): 飽和移動度
\(C_{ox}\): ゲート絶縁膜単位面積あたりの容量
\(W\): チャネル幅
\(L\): チャネル長
\(V_{gs}\): ゲート-ソース電圧
\(V_{th}\): しきい値電圧
この式は、\(\sqrt{I_{ds}}\) について整理すると、以下のようになります。
この式は、\(\sqrt{I_{ds}}\) を縦軸、\(V_{gs}\) を横軸としたときに、傾き \(m = \sqrt{\frac{1}{2} \mu_{sat} C_{ox} \frac{W}{L}}\)、x切片 \(V_{th}\) の直線関係を示すことを意味します。
プログラムでは、以下の手順でこれらのパラメータを算出します。
ゲート絶縁膜容量 \(C_{ox}\) の計算: ゲート絶縁膜の比誘電率 \(\epsilon_r\) (
erg)、真空誘電率 \(\epsilon_0\) (e0)、ゲート絶縁膜厚 \(d_g\) (dg) を用いて、 $\(C_{ox} = \frac{\epsilon_r \epsilon_0}{d_g}\)$ を計算します。\(\sqrt{I_{ds}}\) vs \(V_{gs}\) データの生成: 入力データから、指定された \(V_{ds}\) (
Vds0) における \(I_{ds}\) の平方根を計算し、\(\sqrt{I_{ds}}\) vs \(V_{gs}\) のデータセットを作成します。最小二乗法による線形フィッティング: 指定された \(V_{gs}\) 範囲 (
xfitminからxfitmax) 内の \(\sqrt{I_{ds}}\) vs \(V_{gs}\) データに対して、NumPyのnp.polyfit関数を用いて1次多項式(直線)でフィッティングを行います。 フィッティング結果は \(y = \text{ai}[0]x + \text{ai}[1]\) の形式で得られ、ここで \(\text{ai}[0]\) が傾き (grad)、\(\text{ai}[1]\) がy切片となります。飽和移動度 \(\mu_{sat}\) の算出: 傾き
gradと \(C_{ox}\), \(W\), \(L\) を用いて、\(\mu_{sat}\) は以下の式で計算されます。 $\( \mu_{sat} = \frac{2 L}{W C_{ox}} \left( \frac{d\sqrt{I_{ds}}}{dV_{gs}} \right)^2 = \frac{2 L}{W C_{ox}} \text{grad}^2 \)$ プログラムではmu = grad * grad / (W * Cox / 2.0 / L)と計算されており、これは上記の式と同じです。しきい値電圧 \(V_{th}\) の算出: フィッティング直線のx切片が \(V_{th}\) に相当します。\(y = \text{ai}[0]x + \text{ai}[1]\) で \(y=0\) とすると、 $\(0 = \text{ai}[0]V_{th} + \text{ai}[1]\)\( \)\(V_{th} = -\frac{\text{ai}[1]}{\text{ai}[0]}\)$ と計算されます。
必要な非標準ライブラリとインストール方法
このプログラムを実行するためには、以下のPython非標準ライブラリが必要です。
numpy: 数値計算を効率的に行うためのライブラリです。matplotlib: グラフ描画を行うためのライブラリです。
これらのライブラリは、Pythonのパッケージマネージャである pip を使用してインストールできます。
pip install numpy matplotlib
必要な入力ファイル
プログラムは infile = 'TransferCurve.csv' で指定されるCSVファイルを読み込みます。このファイルはプログラムと同じディレクトリに配置されているか、または適切なパスが設定されている必要があります。
ファイル形式: CSV (Comma Separated Values) 形式
データ構造:
1行目 (ヘッダ行):
最初のセルは \(V_{gs}\) のラベル(例:
Vgs (V))。2番目以降のセルは、各データ列に対応する \(V_{ds}\) の値(例:
1.0,5.0,10.0)です。プログラムは空文字のセルが現れるまで \(V_{ds}\) 値として認識します。
2行目以降 (データ行):
最初のセルは \(V_{gs}\) の値です。
2番目以降のセルは、対応する \(V_{ds}\) と \(V_{gs}\) における \(I_{ds}\) の値です。
TransferCurve.csv の例:
Vgs (V),1.0,5.0,10.0,15.0
0.0,1.23e-12,1.56e-12,1.89e-12,2.12e-12
1.0,5.67e-11,8.91e-11,1.12e-10,1.34e-10
2.0,1.23e-09,1.89e-09,2.56e-09,3.10e-09
3.0,5.43e-08,7.89e-08,1.02e-07,1.25e-07
4.0,1.23e-07,1.87e-07,2.54e-07,3.10e-07
5.0,2.10e-07,3.10e-07,4.20e-07,5.00e-07
6.0,3.20e-07,4.80e-07,6.50e-07,7.80e-07
7.0,4.50e-07,6.80e-07,9.20e-07,1.10e-06
8.0,6.00e-07,9.00e-07,1.22e-06,1.45e-06
9.0,7.60e-07,1.15e-06,1.55e-06,1.85e-06
10.0,9.30e-07,1.40e-06,1.90e-06,2.25e-06
生成される出力ファイル
このプログラムの実行によって、ファイルは生成されません。
計算結果は標準出力(コンソール)に表示され、特性グラフはMatplotlibによってグラフィックウィンドウに表示されます。グラフの画像ファイルを保存するには、表示されたウィンドウの機能を使用するか、プログラムコードに保存処理を追加する必要があります。
コマンドラインでの使用例 (Usage)
TFTiv.py はコマンドライン引数を持ちません。必要な入力ファイル名や物理パラメータは、プログラムのソースコード内に直接記述されています。
基本的な実行コマンドは以下の通りです。
python TFTiv.py
コマンドラインでの具体的な使用例
TFTiv.py プログラムと同じディレクトリに、上述の「必要な入力ファイル」の項で示した形式の TransferCurve.csv ファイルが存在することを前提とします。
実行コマンド:
python TFTiv.py
実行結果の説明:
プログラムが実行されると、まず標準出力にデバイスのパラメータ、読み込んだデータ、および計算された飽和移動度と閾値電圧が表示されます。
標準出力の例:
Cox = 8.85442e-05 [F/m^2]
nVds= 4
nVgs= 11
xlabel : Vgs (V)
ylabels: ['1.0', '5.0', '10.0', '15.0']
Vds: [1.0, 5.0, 10.0, 15.0]
Vds used: 10.0 V (iVds = 2)
Least squares fitting:
Vgs range: 1.9 - 10.0 V
Vgs= [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
Igs^(1/2)= [5.059643440753554e-05, 3.1937439535805545e-04, 5.039841203590059e-04, 6.48074069840786e-04, 8.062257748298553e-04, 9.591663983307527e-04, 0.001104536101718726, 0.0012449900401869382, 0.0013784048792019484]
Vth = 0.5009 V
dIgs^1/2/dVgs = 1.0560e-04 A^(1/2)/V
mu_sat = 0.0007551460395896348 m^2/Vs = 7.551460395896348 cm^2/Vs
plot
Press ENTER to exit>>
同時に、Matplotlibによって以下の3つのグラフが表示されるグラフィックウィンドウが開きます。
伝達特性 (\(I_{ds}\)-\(V_{gs}\)): 左側のグラフ。\(V_{ds}\) ごとの \(I_{ds}\) を \(V_{gs}\) に対してプロット。\(I_{ds}\) は対数スケール。
出力特性 (\(I_{ds}\)-\(V_{ds}\)): 中央のグラフ。\(V_{gs}\) ごとの \(I_{ds}\) を \(V_{ds}\) に対してプロット。
\(\sqrt{I_{ds}}\)-\(V_{gs}\) 特性: 右側のグラフ。特定の \(V_{ds}\) (
Vds0=10.0Vの場合) における \(\sqrt{I_{ds}}\) を \(V_{gs}\) に対してプロットし、最小二乗法によるフィッティング直線も表示。
ユーザーがグラフィックウィンドウを閉じたり、標準出力の Press ENTER to exit>> のプロンプトでEnterキーを押すと、プログラムは終了します。