TDDB試験データの解析方法

ダウンロード版 (一括でサンプルデータ等を落としたい場合は、こちらからダウンロードして保存してください)

S-PLUSホームページ


目次

  1. はじめに
  2. サンプルデーターのプロット
  3. 単位面積あたりの寿命の検討
  4. ワイブル分布によるフィッティング
  5. パーコレーションモデルの導入
  6. ワイブル分布の適合度
  7. パーコレーションモデルを使った複数のワイブル分布の合成
  8. 2つのワイブル分布による計測データの分離
  9. さいごに

1.はじめに

 電子部品をはじめとする高機能部品には,多種多様な薄膜が用いられています.その薄膜の寿命を推定することは,これらの部品を用いた最終製品自体の寿命を考える上で,重要な観点となります.

 今回半導体チップの信頼性評価項目の中で最も重要な項目の1つである,MOSトランジスターのゲート酸化膜の信頼性評価方法,TDDB(Time Dependent Dielectric Breakdown)テスト結果のデータをサンプルデータとして,S言語を使った解析方法を紹介します.  

 

2.サンプルデーターのプロット

 TDDB評価結果をS-PLUSにインポートし,そのデータを@ cumulative provability plot, Aweibull plot したグラフを描画するとともに,指定された累積故障率(初期値は0.1%)の寿命(X軸値)を求める方法を解説します. 

  まず,サンプルデータ(sample1.csv)のように,1行目にラベル(列の名)があり,区切り記号(delimiter)がカンマ( , )であるCSVファイルを読み込む関数を read.csv() 定義します.この関数は頻繁に発生するデータの取り込みに便利です.

 読み込み対象のデータファイルが置かれるディレクトリは,初期値として c:/temp/ としています.下記をコマンドラインに,コピー&ペーストしてください.

read.csv <- function(filename = "data.csv", homedir = "c:/temp/"){
fname <- paste(homedir, filename, sep="")
read.table(fname, header=T, sep=",")
}

 関数は,1度読み込めばS-PLUS自体に定義され,S-PLUSを終了しても保持されています.2回目以降の解析時に再定義する必要はありません.

  1. サンプルデータ(sample1.csv)を適当なディレクトリ(c:/temp/)に保存します.次に,先ほど定義した関数を使ってデータの中身を確認します.コマンドラインから以下のとおり入力します(図2.1).
     
    read.csv("sample1.csv")

    図2.1 ファイルインポート画面


     サンプルデータの中身が確認できたら、S-PLUS上の変数 sample1 としてインポートします.コマンドラインから以下のとおり入力します(図2.2).

    sample1 <- read.csv("sample1.csv")
    sample1


    図2.2 インポートされたデータセット

  2. 必要な関数を読み込みます.関数(weibull.txt)を読み込みます.読み込み方法は,source()関数を使って読み込む方法もありますが,図2.3のようにCommandsプロンプト画面に直接コピー&ペーストしてもかまいません.

    図2.3 コマンドプロンプトに直接コピー&ペーストした場合

     コマンドプロンプトから,weibull.plot, cumu.plot と入力し,関数が確かに定義されたことを確認します.

  3. データを描画します.コマンドプロンプトから,
    > cumu.plot(sample1, xlab="Stress Time(Hr)", title = "TDDB test sample1")
    と入力すると,下記のような計算結果(累積故障率が0.1%の時の寿命)が表示(図2.4)されるとともに,図2.5に示すグラフウインドウが新たに開きます.

    図中のオレンジ色の直線は近似直線を表し,引数typeを指定することで直線の引き方,および直線から求められる累積故障率(初期値0.1%の値)が求められます.引数 type は省略時はtype=3が指定され,データのlogを取ったものをガウス関数で近似したものがオレンジ色の直線になります.また,type=1, 2はそれぞれ,図内での回帰直線,25%点と75%点を結んだ線になります.

     尚,累積故障率の設定を初期値(0.1%)以外にする場合には,下記のように,引数(pr=0.01)を指定してください.
    > cumu.plot(sample1, xlab="Stress Time(Hr)", title = "TDDB test sample1", pr = 0.01)

    また,Y軸をワイブルプロットしたい場合には,コマンドプロンプトから,
    > weibull.plot(sample1, xlab="Stress Time(Hr)", title = "TDDB test sample1")
    と,入力してください.結果は,図2.6のように表示されます.このときのオレンジ色の直線は,図中の回帰直線になります.

    図2.4計算結果

    図2.5 累積故障率(%)の表示例


    図2.6 ワイブルプロットの表示例

 今回使用したデータ(sample1)は,ワイブル分布に従うことがわかりました.また,この章で読み込んだ関数により,寿命試験のグラフ化が簡単に行え,所望の計算方法で任意の累積故障率での値が求められるようになりました.

3.単位面積あたりの寿命の検討 

 通常のTDDBテストでは面積の異なる複数種類のテストサイトのテスト結果から,単位面積あたりの寿命を推定します.この従来の方法では,複数種類(最低でも3種類)のテストを行う必要があり,それに要する時間やコストは大きなものになります.
 そこで,テストに掛かる手間を削減するために,1種類の面積のチップから計算で仮想面積のチップの寿命を求め,そこから単位面積あたりの寿命を推定する手法を提案します.

 

  1. 具体例を示しながら今回提案する手法について説明します.まず,データサンプリングのための関数(sampling.txt)を読み込みます.読み込み手順は,2.2と同じです.次に,関数が正しく読み込めたか確認します.

  2. 2倍の面積(2S)を考える場合は,sample1のデータセットから,任意の2つのデータをサンプリングし,その値が小さいほうを2Sの面積の寿命とします.n個サンプリングした場合には,n個のデータの中の一番小さな値を,n倍の仮想面積(nS)の寿命とします.これが,今回の提案です.このサンプリングを,必要回数繰り返し,2Sの面積のテストデータセットします.下記の例は,サンプリング回数(nn)が159回,面積(n.s)が2倍の場合を表しています.


    図3.1 サンプリングプログラム(バッチ処理)の例(text)

     上記のプログラムを走らせた結果を図3.2に示します.図3.1の内容(textリンク先を参照)をコピーしS-PLUSのコマンドプロンプトにペーストします.


    図3.2 データサンプリングで,面積を2倍にした場合の累積故障率(%)

  3. 3倍の面積(3S)なども同様に,バッチ処理の際に
    >n.s <- 3
     とすることで,必要な面積のグラフと寿命が求められます.  

  4.  実験データ(1S)と3項で求めた仮想面積(2S, 3S,5S,,,,)の寿命から単位面積あたりのを求める手法について解説します.まずは,第3項の手法で求めた,仮想データ(area.csv)を読み込みます.

    area <- read.csv("area.csv")

     TDDB試験などの寿命分布は,評価サンプルの面積をSとすると  

      式(3.1)

     で表されます.ここで,a, b は定数です.

    式(3.1)に対応する関数(logfit.txt)を読み込みます.前述の関数は,第2番目のカラムを選択した場合です.違うカラムを選ぶ場合は,引数 ycol= を設定してください.

    S-PLUSの基本関数nlminb()を使って式3.1にフィッテングします.コマンドラインから,

    > const <- nlminb(c(1,1), log.fit, data=area)$para
    > const

    と入力します.最初の引数c(1,1)はフィッテングを行う際の初期値です.その結果を図3.3に示します.
    この実行結果,変数a, bは,

    a= -0.001556155
    b= 0.008930686

    を表しています.


    図3.3 基本関数nlminb()を使ったフィッテング

    以上の操作により,ある評価条件における面積と寿命の関係を表す関係式が求まりました.この式から任意の面積の寿命を求めてください.

 

 このように,面積が一種類の評価試料のデータをサンプリングし,仮想面積の寿命から任意の面積(単位面積)の寿命を推定する方法の有効性を示しました.

 使用時の注意点としては,100倍の面積など大きすぎる仮想面積を定義した場合,今回提案する方法が有効に働かない可能性が出てきます.また,任意の面積(単位面積)を外そう線で求めるのではく,内そうで求めらるように評価サンプルの面積を設計することも重要です.

4.ワイブル分布によるフィッティング

 この章では,ストレス条件の違いによる,ワイブル分布の変化(式4.1のβ,ηの変化)を調べます.

 薄膜の寿命(F)などは式4.1のワイブル(weibull)分布に従います.

式(4.1)

ここで,t は寿命,η,βは定数

ηは欠陥の発生確率に依存する値.βはワイブルプロットの近似直線の傾き(分布)に相当する値になります. 

  1. フィッテングに必要な関数群(calbeta.txt)を読み込みます.

  2. サンプル1を使って式4.1を用いたフィッテングを実行します.コマンドプロンプトから,
     >cal.beta1(sample1[,2])
    と入力します.フィッテング結果として,β($beta),η($eta)が表示されます.図4.1参照.この場合は,2列目のデータに対するフィッテング結果になります.以下,3列目,4列目のデータに対してもフィッテングを行います.


    図4.1 式4.1によるフィッテング結果

    同時に,上記の定数を当てはめた,モデル式(実線)と,計測値(オレンジの丸)が表示されます.図4.2参照.


    図4.2 フィッテング結果のグラフ.オレンジの丸は計測値.実線はモデル式(式4.1)

  3. sample1のそれぞれ3つの条件のデータをフィッテングした結果から得た,ηを表4.1に示します.また,β=1.0に固定した場合を表4.2に示します.β,ηを固定する場合には

    > cal.beta1(sample1[,2], beta=1)

    のように引数を追加指定します.
    表4.1 ストレス条件とη
    ストレス条件 η 1/η 比率(1/η) β
    10.5 0.695 1.439 23.25 0.949
    10.0 3.151 0.317 5.13 0.951
    9.5 16.164 0.0618 1.00 1.103

    表4.2 ストレス条件とη  (β=1.0固定の場合)
    ストレス条件 η 1/η 比率(1/η) β
    10.5 0.688 1.454 23.88 1
    10.0 3.110 0.322 5.28 1
    9.5 16.422 0.0609 1.00 1

  4.  ストレス条件が,9.5から10.0に0.5増加すると,ηが約5倍になっていることがわかります.また,10.0から10.5に増加することで,おおよそ5倍に増加している様に思われます.

 今回の実験では,ストレス(印可電圧)と,欠陥の発生頻度(∝1/η)を関係付けることができました.同様に,ストレスと寿命の分布(β)との関係も考察することができます.

 次のステップは,これらのデータを外そうすることで,実際の使用条件(ストレス条件)による膜の寿命を推定することになります.この時,β,あるいは,ηをある値に固定してフィッテングするのか,β,ηともに変数として取り扱うのか吟味する必要があります.膜破壊をユーザーの使用状態に合致するようにモデル化して,そのモデルに合うように定義することが必要です.


 5.パーコレーションモデルの導入 

 TDDBに代表されるような,薄膜の破壊に至るモデルとして,パーコレーションモデル(Percolation model)が提唱1)〜4)されています.パーコレーションモデルとは,土壌に水が浸透していく現象等をモデル化する場合によく用いられるモデルです.コーヒーの"パーコレーター"をイメージしていただくとよくわかると思います.

 

  1. 図5.1に示す様にゲート酸化膜の両面から電圧を印可する場合をモデル化します.


    図5.1 TDDB試験

     今回のパーコレーションモデルでは,図5.2のようにある発生頻度で膜中に欠陥(図中では赤丸)ができます(上段図).これが,次第に増え(中段図),ついに上部電極と下部電極を繋ぐ経路を形成します(下段図).このときを薄膜の寿命とします.


    図5.2 パーコレーションモデル



  2. このモデルを使ってS-PLUS上でシミュレーションを行います.まず,シミュレーションに必要な関数群(new39.txt)を読み込みます.シミュレーションでは,乱数を用い薄膜断面に相当するエリア(図5.2では緑色の長方形)に中心をもつ円(赤丸)を置いていきます.円を置く度にお互いが重なっている円をグループに分けます.そして,上部電極と下部電極(長方形の上辺と下辺)を接続するグループの有無を調べ,該当するグループが存在すれば,そこで試行を中止し,その試行回数(寿命)を返します.もし,該当するグループが存在しなければ,新たに円を置き,試行を続けます.

    コマンドプロンプトから

    > tddb.sim3(nn=100, w=50, l=5, d=0.5, d1=0.5, sw=1)

    と入力すると,シミュレーションが実行され,シミュレーション結果(図5.3)と,寿命に相当する,試行回数(置いた円の個数)が出力されます(図5.4).引数 w,l は長方形のそれぞれ横,縦の長さを,引数 d,d1 は円の半径を設定します.また,この例では,100回シミュレーションを行った場合を示しています.シミュレーション回数を変更する場合は,引数(nn)を変更します.


    図5.3 シミュレーション結果

     図5.3の中で,青い円のグループが上辺と下辺を繋いでいることを表しています.また,オレンジの円は最後に置かれた円を表しています.


    図5.4 寿命に相当する試行回数

  3. 次に円のサイズを変化させたものを,数種類考え,その結果を一気にプロットする手順を説明します.コマンドラインから,図5.5に示すバッチ処理を行います.それぞれの円のサイズに対する寿命(初期値,pr=0.1%)が,cumu.plot()から出力され,その結果グラフが表示されます(図5.6).シミュレーション実行中の様子を逐次表示させると,実行速度がおちますので,引数をsw=0にし,結果だけを表すようにします.


    図5.5バッチ処理(text)


    図5.6 シミュレーション結果

  4.  円の半径を大きくすることで,寿命が短くなり,また,フィッテング直線の傾きが寝てくることがわかりました.

 モデル化の一例として,「TDDBのストレス(電極両端に印可する電圧)は,パーコレーションモデルでの円の半径として考えることがでる.」と言えます.

 このシミュレーションによって得られた分布がワイブル分布として適当か否かの確認は,次章で紹介する方法で確認することができます.

6.ワイブル分布の適合度

 この章では,まず,測定データがワイブル分布として適合しているか検討します.次に,3章で提案した既存データからサンプリングにより面積を拡大して仮想面積の寿命を求める手法で得られたデータが,既存データと同じ分布(ワイブル分布)として扱えるのか検証してみます.

 まずサンプルデータを(sample2.csv)を読み込み,プロットして見ます.その結果を図6.1,図6.2に示します.サンプル1に比べて,グラフ上で分布が折れ曲がっていることが認められます.

 はたしてこのような,この分布に”曲がり”のあるデータは1つのワイブル分布として扱ってよいのか.この点に関して,検証してみることにします.


図6.1 サンプル2の累積故障率(%)のプロット


図6.2 サンプル2のワイブルプロット

  1. ワイブル分布としての適合度合いの検証方法は,第4章でもとめたワイブル分布と,この分布をn分割した区間(F分布で等分)のデータ数を比較することによって適合度合いを吟味します.このnはデータ総数Nから度数分布の階級数を決める目安(平たく言うと,ヒストグラムを描画する際に棒が幾つが適切を決める目安)である,スタージェスの公式(Sturges' rule)5),式6.1を用います.

    n=1+log2(N) ≒ 1+3.32log10(N)   (式6.1)

  2. まず必要な関数群(kai2.txt)を読み込み,正しく関数が定義されたことを確認します.使用方法は,コマンドプロンプトから

    >cal.kai2(data, nclass)

    と入力します.引数nclassは前述した分割数nを指定します.通常は入力は不要で,スタージェスの公式から最適値が採用されます.
  3. サンプルデータを用いて解析した事例を図6.3に示します.ここで,df値は自由度を表し,df=nclass-1となります.

    図6.3 適合度合いの検証結果

  4. sample2の解析結果をみると,全てのストレス条件において,p.value<0.05ですから,有意水準5%で仮説(ワイブル分布である)は棄却されることになります.つまり,sample2はワイブル分布ではないといえます.一方,sample1は,ワイブル分布だといえます.

     
  5. 次に本章後半の課題に入ります.3章で提案した既存データからサンプリングにより面積を拡大して仮想面積の寿命を求める手法で得られたデータが,既存データと同じ分布(ワイブル分布)として扱えるのか検証してみます.サンプル1(sample1)の2列目のデータから所望の面積になるようにサンプリング(図6.3)し,グラフ表示(図6.4)させます.

     コマンドプロンプトより,図6.4に示すバッチジョブ(text64)を走らせます.Sはsample1のデータそのままの面積に対応し,2Sは2個サンプリングして得られた仮想2倍の面積に対するデータです.以下,3S,5S,10S,20S,50S,100Sとサンプリング数を増やし,仮想面積を拡大します.

    図6.4 バッチジョブ(text64)
     


    図6.4 サンプリングしたデータのプロット

  6. cal.kai2()関数を使ってサンプリングしたデータがワイブル分布であるのか検証します.
    コマンドプロンプトより

    > cal.kai2(l4.t)

    と入力しすると,図6.5に示す結果が得られます. また,初期値として求められた,df=8の前後を調べるために,ncalssを変えて検証します.


    図6.5 検証結果

 サンプリングする個数(仮想面積)を大きくすると,p.valueも小さくなりワイブル分布によるフィッテングが困難になることがわかりました.今回のように実測データの個数が150レコード程度の場合,サンプリング数としては,明確な境界は認められないのですが,サンプリング数(面積の拡大)の最大値は5〜10までで使用することが望ましいと考えられます. 

 実測データの個数によりサンプリング可能数の最大値も増減することが予想されますので,実測データの個数とサンプリング可能個数を考慮し,任意の面積(単位面積)を求められるように評価サンプル(TEGチップ)の設計をする必要があります.

 

7.パーコレーションモデルを使った複数のワイブル分布の合成 

 前の章では,同じストレス試験の結果でもワイブル分布に従わないケースがあることがわかりました.そこでこの章では,ワイブル分布に従わない場合に複数のワイブル分布の合成として表すことを試みます.

 図5.1におけるパーコーレーションモデルでは,評価する薄膜内部に発生する欠陥の大きさ(d:半径)を一定として扱いました.しかし,一般的には,おなじストレスを印可しているにもかかわらず,図7.1に示すように薄膜エッジ部分(図中の黄色の領域)は薄膜中央部(図中の緑色の領域)に比べて欠陥の大きさが異なる(大きい)と考えることが妥当です.


図7.1 薄膜エッジ部分の影響を考慮

 欠陥の大きさの異なる領域が混在する試験で,全体の寿命は,それぞれの領域が全体に占める割合で表せると考えられます.つまり,欠陥の大きさを,d1,dとすると,図7.2に示すように,これらの占める割合によって全体の寿命分布(オレンジ色線,水色線)が決まると予想されます.


図7.2 2つの寿命ワイブル分布の合成

 

  1. パーコレーションモデルのシミュレーションを行います.コマンドプロンプトから

    >10*tddb.sim3(w=50, w1=1.5, d=0.8, d1=2.1, sw=1)

     と入力(図7.3参照)します.引数w, w1, d, d1, sw はそれぞれ,領域全体の長さ,エッジ部分の片側の長さ,領域中央部での欠陥の大きさ,領域エッジ部分での欠陥の大きさ,描画のon/off を表しています.



    図7.3 2種類の欠陥(d/d1=0.8/2.1)を領域の比率(w/w1=50/1.5)で合成した寿命分布

  2.  シミュレーションを実行すると,図7.3の結果とともに,図7.4,7.5に示すパーコレーションモデルの状況がグラフウインドウに表示されます.図7.4は,領域中央部で破壊に至った事例,図7.5は,領域のエッジ部分で破壊に至った例を示しています.



    図7.4 シミュレーション結果.領域の中央部(図7.1の緑色部分)で破壊に至った場合



    図7.5 シミュレーション結果.領域のエッジ部(図7.1の黄色部分)で破壊に至った場合

  3.  領域の割合を変えた場合を一気にシミュレーションします(図7.6).この場合,引数sw=0にしグラフの描画をoffにします.


    図7.6 バッチ処理(wratio.txt) 

     上記シミュレーション結果を図7.7に示します.全体に占めるエッジ部分の割合によって寿命分布に変化があられることが認められました.w1=8,15のケースでは,エッジ部分が領域全体の寿命を決める上で支配的になり,分布全体が,左側(寿命が短い方向)へシフトしていることがわかります.また,w1=2.5のケースでは,図6.1で示したような,分布に折れ曲がりが認められます.


    図7.7 影響度の異なる領域の割合を変えた場合のシミュレーション結果

  4. 図7.6で行ったシミュレーション結果を異なる変数にコピーします.コマンドプロンプトから,

    > d1.split <- l.t

    と入力します.図7.6のバッチ処理を行った直後に変数をコピーしてください.次に,パーコレーションモデルのシミュレーション結果(ワイブル分布に相当)を,それぞれの比率で見合うようにサンプリングし,合成します(図7.8参照).合成結果を図7.9に示します.

     図7.8で最後に表示される値は,1つのワイブル分布とみなし,その分布から求めた0.1%の値です.また,図7.9ではその分布をオレンジの直線で表しています.もはやこの状態では,1種類のワイブル分布として扱うことは困難です.

     2種類のワイブル分布が合成される割合によって,全体の分布の折れ曲がる位置が変化することが確かめられました.


    図7.8 2つの異なるワイブル分布の合成.バッチ処理(arearatio.txt)



    図7.9 2つの異なるワイブル分布の合成結果

 図7.7に示す影響度の異なる領域の割合を変えた場合,および,図7.9に示す2つの異なるワイブル分布の合成した場合,この2つのシミュレーションの結果から,1種類のワイブル分布で表せないような寿命分布(サンプル2)も,複数の(今回は2種類)ワイブル分布の合成として表せると考えられます.
 

8. 2つのワイブル分布による計測データの分離 

 この章では,前の章の結果に基づき,図6.1に示した分布を,式8.1で示すように2種類のワイブル分布の合成として分離することを試みます.

 式(8.1) 

 ここで,αは2つのワイブル分布の合成比を表しています.

  1. 2種類のワイブル分布の合成(式8.1)には関数,cal.beta2()を用います.コマンドラインから,

    > cal.beta2(sample2[,2])

    と入力します.サンプル2の2カラム目(カラム名X11M)に対する分離結果(図8.1)が出ます.出力[1]は左から,それぞれ,β1, η1, β2, η2, α を表しています.
    図8.1 2種類のワイブル分布による分離結果

     図8.2に2種類のワイブル分布の合成によるフィッテング状況を示します.
     
    図8.2 2種類のワイブル分布の合成によるフィッテング状況

 サンプル2の2カラム目(カラム名X11M)は,図7.1のエッジ部分(黄色の領域)が40%,領域中央部(緑色)が60%の割合で合成された寿命の分布であると推定することができました.

9.さいごに

 今回のデータ解析およびシミュレーションで以下のことが明らかになりました.


関数の実行結果について

 以下の関数,tddb.sampling(), tddb.sim3(), sample() は関数内部で乱数を使用しています.そのため,実行結果は,この本(CDROM)で紹介した内容と異なります.

謝辞 

 関数作成ならびに技術的討論において多大なるアドバイスをいただきました,叶迫揀Vステムの佐々木俊久様に対してお礼申し上げます.

参考文献 

  1. 平野泉他,HfSiO(N)膜の欠陥生成と絶縁膜破壊機構,電子情報通信学会技術報告,Vol.104,p71,(2004)
  2. Degraeve at al., New Insights in the Relation Between Electron Trap Generation and the Statistical Properties of Oxide Breakedown, IEEE Trans.Elec.Dev.,Vol.45,No.4,p904,(1998)
  3. E.Y.Wu at al., Ultra-thin oxide reliability for ULSI applications, Semicond.Sci.Technol., Vol.15, p425, (2000)
  4. J.H.Stathis et al., Percolation models for gate oxide breakedown, J.Appl.Phys., Vol.86, p5757, (1999)
  5. http://www-personal.buseco.monash.edu.au/~hyndman/papers/sturges.pdf

2006.10.11 Masao.SHIMIZU

S-PLUSホームページへ