半導体デバイスシミュレーションのコツ(WEB編)


「応用物理」に掲載された記事「半導体デバイスシミュレーションのコツ」のプログラム例のページです

森 伸 也(大阪大学)

はじめに

「応用物理」2017年12月号2018年1月号に掲載された記事「半導体デバイスシミュレーションのコツ」(正誤表)のプログラム例のページです.より多くの方に試してもらえるよう,Fortran 90, C, Ruby, Pythonでプログラムを作成しました(ただし,最初にFortran 90で作成し,それを他の言語に翻訳しましたので,それぞれの言語の良さが発揮されたコードではありません).できるだけ記事に沿った形でプログラムを作成しましたが,不明な点などがありましたらお問い合わせ下さい註1.バグを見つけた場合もお知らせ下さるようお願いします.

あらまし

プログラム例は,図1に示したようなシリコンpnダイオード(右側がn領域,左側がp領域)の順方向特性を計算するプログラムです.p領域側の電極を正とした印加電圧 V を 0 V から順に増加させ,1次元のドリフト拡散法を用いて電流を計算することにより,ダイオードの電流電圧特性を求めます.


図1:pnダイオード

表1:入力パラメータ

L ダイオードの全長.メートル (m) 単位.
N 最大の格子点指数.全格子点数は (N+1) 個,格子点間隔は h = L / N になります.
Nd n領域のドナー密度.毎立方メートル (m-3) 単位.
Na p領域のアクセプタ密度.毎立方メートル (m-3) 単位.
ΔV 印加電圧刻み幅.ボルト (V) 単位.
M 最大印加電圧を決める指数.計算を行う印加電圧 V は 0, ΔV, 2ΔV, ..., M ΔV となります.
ε ポテンシャルの収束条件.ボルト (V) 単位.

プログラムは,標準入力より,表1のパラメータを表1の順に読み込み,標準出力に,電流電圧特性を出力します.あわせて,最後の印加電圧(V = M ΔV )における内部の物理量の x 依存性を,2つのファイル dd_out_m.txtdd_out_a.txt とに書き込みます.ファイル dd_out_m.txt には主格子点における物理量の値が,dd_out_a.txt には副格子点における物理量の値が保存されます.標準出力,dd_out_m.txtdd_out_a.txt の各列の物理量は,表2の通りです(標準出力の電流密度はアノード端における値としています).


表2:出力のフォーマット

標準出力 dd_out_m.txt dd_out_a.txt
1 印加電圧 V (V) 主格子点座標 xi (m) 副格子点座標 xi+1/2 (m)
2 正孔電流密度 Jp (A/m2) ポテンシャル ψi (V) 電 界 Ei+1/2 (V/m)
3 電子電流密度 Jn (A/m2) 正孔密度 pi (m-3) 正孔電流密度 Jp,i+1/2 (A/m2)
4 全電流密度 Jp + Jn (A/m2) 電子密度 ni (m-3) 電子電流密度 Jn,i+1/2 (A/m2)
5 反復計算の回数 空間電荷密度/電気素量 ρi (m-3) 全電流密度 Jp,i+1/2 + Jn,i+1/2 (A/m2)

ソースコード

プログラムおよび入力ファイルの例は,表3のファイル名をクリック註2するとダウンロードできます(説明をクリックするとブラウザ上でファイルの内容を確認できます註3).


表3:プログラムおよび入力ファイルの例(註4

ファイル名 説 明 日 付
dd.f90 Fortran 90 プログラム 2018/4/27
dd.c C プログラム 2018/4/27
dd.rb Ruby 2.x 系 プログラム 2018/4/27
dd.rb Ruby 1.x 系 プログラム 2018/4/27
dd.py Python プログラム 2018/4/27
dd_input.txt 入力ファイル 2017/12/21

動作確認

Fortran 90

GNU Fortran コンパイラの gfortran (version 4.8.4) と,Intel Fortran コンパイラの ifort (version 16.0.1) とで動作確認を行いました.

C

GNU C コンパイラの gcc (version 4.8.4) で動作確認を行いました.

Ruby 2.x

ruby (version 2.4.1) で動作確認を行いました.動作させるためには,numo/narray および numo/linalg が必要です.

Ruby 1.x

ruby (version 1.8.7) で動作確認を行いました.動作させるためには,narray が必要です.

Python

python2 (version 2.7.6) および python3 (version 3.4.3) で動作確認を行いました.動作させるためには,numpy が必要です.


実行結果

前節の通りに実行すると,標準出力の内容が dd_out_iv.txt に保存され,ファイル dd_out_m.txtdd_out_a.txt が作成されます.参考のため,図2から図5に,これら3個のファイルの内容の一部をプロットしました.


図2:電流電圧特性.dd_out_iv.txt の第2列から第4列の値を第1列の値に対してプロットした.


図3V = 0.5 V におけるポテンシャル分布.dd_out_m.txt の第2列の値を第1列の値に対してプロットした.



図4V = 0.5 V における"密度"分布.dd_out_m.txt の第3列から第5列の値を第1列の値に対してプロットした.


図5V = 0.5 V における電界分布.dd_out_a.txt の第2列の値を第1列の値に対してプロットした.


むすび

Fortran 90, C, Ruby, Python以外の,もっと他の言語でも作ってみたかったのですが,叶いませんでした.もし,他の言語で同じ内容のプログラムを作成された方がいましたらお知らせ下さい.


付録

表A:正 誤 表(註5

ページ カラム
基礎編 1077 図2キャプションの最終行 11) 15)
基礎編 1078 上から4行目 文献11 文献15

註)
  1. 時間的な制約等のため,すべてのご質問に対応できるとは限らないことを予めご了承下さい.
  2. Internet Expolrer では,ファイル名の上で右クリックして,「対象をファイルに保存」を用いてダウンロードして下さい(適宜,拡張子を変更して下さい).
  3. Internet Expolrer では,うまくいかない場合もあります.
  4. 本ソフトウェアの使用,またはそれを使用できなかったことにより生ずるいかなる損害について,一切責任を負いません.
  5. 応用物理学会のWEBページ上のPDFファイルは修正済です.

大阪大学 大学院工学研究科 電気電子情報工学専攻 集積量子デバイス領域 森研究室