2016年10月12日水曜日

発振器とかメモリーとか〜テストの実際5

DCテスト、ファンクションテスト、ACテストと、実際にテストってどうやってやっているのかをご紹介してきました。

回路には回路ごとにその回路のためのテスト方法があるので、とても全てを網羅することはできませんし、私もASIC/SOCという限られた製品分野での経験しかありませんので、私の経験からご紹介できるテストの話しも残り少なくなりました。

今回は、水晶発振器のテスト、そしてASIC/SOCのみならず、マイコン製品にも必ず搭載されているメモリーのテストをご紹介します。

水晶発振器のテスト


ロジック系のLSIでは、回路全体の時間的な同期をとるために、一定周波数の矩形波を使います。この矩形波のことをクロック信号、もしくは単にクロックと言います。(矩形波の説明はこちらをご覧下さい。)

このクロックを生成する方法は色々ありますが、部品点数が少なくてコストの安い方法は、水晶振動子をLSIに接続してLSIにクロックを作らせる方法だと思います。パソコンなんかでは、発振モジュールからシステム全体にクロックを給電する方法を使うと思いますが、発振モジュールは大きいので、組み込み用途にはあまり使われないのではないかと思います。


この水晶振動子を振動させてクロックを生成するためのI/Oバッファ(以下、水晶発振器)を搭載するLSIはとても多くて、ASIC系の製品はほぼ100パーセント搭載しているのではないかと思います。私は記憶では水晶発振器を搭載しないLSIを担当したことがありません。組み込み用のマイコン製品も、おそらく100パーセント搭載しています。

この水晶発振器のテストはどうやってやるの?なにをやるの?というのがこの項目でのお話です。

水晶発振器は、水晶その他必要な部品を繋げて、電源が入ったら永続的に発振しなければならない回路なので、発振することをテストしなきゃいけないんだよね?ということになりますが、実際その通りで、外付け回路を繋げて発振させます。そしてそのときの消費電流と、発振して生成された矩形波の周波数を測定します。

図のように、通常はテスターにつながっているXIN(EXTAL)、XOUT(XTAL)端子を、外付けの水晶と接続して発振させます。発振出力は、回路動作の安定性を考えると外から直接観測することは避けた方がよいので、デバイスの中を通ってどこかの端子にそのままの周波数、または何分の1かに分周した波形として出力されるような仕掛けをあらかじめ作っておき、テスターで周波数を測定します。

さらに、マイコン製品では、ソフトウエア設定で水晶の発振を止める機能があるものがあるので、発振を止める機能が正常に動作するかテストしなければなりません。図のように、帰還インバーターを2入力NANDで構成しておくと、片方の端子がHレベルのときにはインバーターとして機能し、Lレベルの場合は出力はH固定となるので発振を停止させることが出来ます。

しかし、発振停止の機能的なテストはファンクションテストでテスト可能なので、水晶発振器のテストの中ではやりません。

また、マイコン系の製品では、帰還抵抗をLSI内に内蔵している製品もあります。この場合、スタンバイ状態(クロックを停止して、LSIの動作を完全に停止させる低消費電力状態)では帰還抵抗の接続を切らないと帰還抵抗に電流が流れてしまうので、それを防ぐために帰還抵抗の接続を切る機能を持っている場合があります。

この機能は、発振テストではなく、スタンバイ電流の測定でテストできます。

ちなみに、帰還抵抗は、帰還インバーターの動作点を1/2Vdd付近に持っていくために必要な抵抗です。これがないと帰還インバーターはフル振幅する単なるインバーターとして動作してしまうので、外に水晶振動子をつなげても発振動作は起こりません。

さて、実際に発振させてテストする方法は、発振開始時間だけ待ち時間を設ける必要があったり、テスト環境の中に外付け回路を設けなければならなかったり、色々と面倒なことが多いので、発振回路を構成するインバーターのゲインをDC的に測定するなどの別のテスト方法を導入する動きがありました。私はその頃はすでにテストの実務から離れていたので、私の居た会社、事業部の全ての製品において、発振テストが全てそのテストに置き換わったのかどうか、よくわかりません。また、本当にそのテストできちんと発振することを担保できるのかどうかもわかりません。

私の世代だと、保証する特性、機能はすべてテストする、というのがテストに対する認識で、重複するテストや故障検出に寄与していないテストは抜く、ということ以上に実際に測ることをしないことがどういうことなのか、感覚的にわからないところがあります。

しかし、水晶発振器のテストで、入力リークなど通常のDCパラメトリックテストでパスしているのに発振テストでパスしない、という事例はあまり記憶にないですね。

ところで、発振回路付きのLSIでは、外部からLSIにクロックを供給する場合も発振回路から入力する仕様となっていることが多いと思います。しかし、発振回路のインバーターは水晶発振動作に特性を合わせ込んで設計してあるので、通常のインバーターに比べると出力側の駆動能力が低いことが多く、入力バッファとして考えると、LSI内部の配線の負荷容量の影響を大きく受けやすい、入力遅延の大きな入力バッファということになります。

これがファンクションテストに悪影響を及ぼすことが多く、ファンクションテストの際には、動作を安定させるために、XOUT側(XTAL側)から、XIN(EXTAL)へのクロック入力の逆相のクロックを入力することがあります。

XOUT(XTAL)はEDAから見ると出力端子として取り扱われていると思いますので、単純にテストパターン、テストプログラムをEDAで生成すると、これらを出力端子として扱ったテストプログラムと、出力期待値がはいったテストパターンが生成されると思います。

これを実際のテストに持っていく際には、この端子をオープンとしてテストすると思いますが、その状態で動作が安定しないときには、逆相クロックを試してみると安定することが多いです。

メモリーのテスト


LSIに内蔵されているメモリー、大きく分けてROMとRAMがあります。ROMはROMに書かれたデータを読み出すテストパターンでテストするだけなので、ファンクションテストの中でテストできますが、RAMは一筋縄ではいきません。

不良を検出できない例
RAMは、外から書き込んだデータを保持して保持しているデータを読み出せるという機能があります。この外から書いたデータを保持して読み出せる、と言う当たり前の機能は、テストを考えると実はなかなか面倒なんです。

たとえば、実装評価ボードからメモリーのRead/Writeテストをする場合などによくある簡易的なテストとして、16進数の55HとAAHをアドレス0番地から交互に書き込んで読み出すというテストを考えると、このテストではアドレスバスが1本1固定もしくは0固定の故障をしていても検出することができず、テストがパスしてしまうことがあります。
たとえば図の例では、上の2色のハッチングがなされているアドレス領域は、A2が故障のために固定されてしまってもこのテストパターンでは検出できず、外から入力するアドレスの値のA2=0であってもA2=1であっても、最初の4アドレスのRead/Writeが出来ればパスしてしまいます。故障によるアドレス固定で選択できないアドレス領域は外からRead/Writeできないためテストされません。これは明らかに不良ですが、このテストパターンでは不良を検出することができません。
このようなことから、メモリーのテストの世界では、過去からの蓄積で色々な故障モードを検出することが可能な色々なテストパターンがあります。しかし、テストパターンのお話をする前に、一般的なメモリーの構造(メモリーセル自体ではなくて、メモリーセルがどのような配置になっているか)を説明します。なお、ASIC/SOCに搭載できるメモリーには色々な種類がありますが、単純なSRAMについて書いていきたいと思います。

図は、8bit X 128wordのSRAMの概略図です。各ビットにはそれぞれ図に示したようにメモリーセルの配列が接続されています。図の黒い点が四角く並んでいるところがメモリーセル配列、黒い点一つ一つがメモリーセルを示しています。ここに1ビットの情報が記録されます。

書き込み・読み出しを行うメモリーセルの場所を特定するための信号がアドレスと呼ばれる信号です。そして、そのアドレスも内部ではメモリーがどの行(Row、ロウ)にあるのかを特定するロウアドレス、1つの行の中で横に並んでいるメモリーセルのどの列(Column、カラム)を使うのかを特定する列(カラム)アドレスに別れています。図の例では、アドレス線のうち、A3、A2、A1、A0がロウアドレス、A6、A5、A4がカラムアドレスとなっています。これらをデコードして選択信号を作る回路をロウデコーダーもしくは縦方向なのでYデコーダー、カラムアドレスをデコードして選択信号を作る回路をカラムデコーダーもしくは横方向の選択なのでXデコーダーと呼んでいます。

このような構造になっているので、ロウアドレスとカラムアドレスに何が与えられているかがわかれば、メモリーセルの配列のうち、物理的にどこセルが不良を起こしているのかがわかるのです。

さて、このような構造になっているSRAMのテストがどういうことになっているか、ご紹介します。

All0/All1のRead/Write


これから始まる長大なSRAMのテストを始めるにあたって、そもそも全く動かない、というものを取り除くために、これをやります。メモリーセルの物理配置を全く考えずに、全アドレス0を書いて読み出し、全アドレス1を書いて読み出すというテストです。

チェッカーボードテスト


メモリーセルの物理配置を見て、隣り合ったメモリーセルの値が必ず反転しているように市松模様の書き込みと読み出しをします。そしてその反転もやります。

これは、隣接するメモリーセルの干渉を見るという意味がありますが、SRAMはスタティックにデータを保持しているメモリーなので、このテストパターンのビット干渉の検出がどの程度効果があるのか私にはわかりません。でも、メモリーセル間にリーク電流が流れていたりすると、その影響でデータが反転してしまうことはあるかもしれません。

なお、アドレスの進め方がAll0/All1と全く同じなので、チェッカー/チェッカーバーを適用することでAll0/All1を省略する、という考え方もあります。All0/All1の0と1という書き込むデータには意味が無いからです。

なお、このテストは、後述するリテンションテストにも使います。

マーチングテスト


このテストもRAMのテストとして代表的なものです。


  1. 全アドレスAll0をライトしてリード
  2. アドレス先頭から、書き込まれているはずの0を読み出し、1を書き込む
  3. 上記動作を最終アドレスまで繰り返す。
  4. アドレス先頭から、書き込まれているはずの1を読み出し、0を書き込む
  5. 上記動作を最終アドレスまで繰り返す。
  6. 全アドレスAll0を確認
  7. 最終アドレスから、書き込まれているはずの0を読み出し、1を書き込む
  8. 上記動作を先頭アドレスまで繰り返す
  9. 最終アドレスから、書き込まれているはずの1を読み出し、0を書き込む
  10. 上記動作を先頭アドレスまで繰り返す
  11. 全アドレスAll0を確認する。


上記手順は、日経テクノロジーOnLineのホームページに記載してある手順です。記憶が曖昧だと困るので、参考にさせて頂きました。

実は、先頭アドレスからの向きのテストは記憶に残っているんですが、最終アドレスから先頭までの向きのテストをやっていたかどうか、記憶が定かではありません。社内の設計技術の教科書を元にテストを作っていたので、社内の基準はクリアしたテストになっていたはずですが、世間一般のマーチングテストとなっていたかどうかは、グレーです。

RAMのテストには、他にも色々なテストパターンがありますが、ASICとして製品適用していたのはチェッカーボードとマーチングだけでした。

データリテンションテスト

通常のロジックとRAMって、上記の記事だけ読んでもテストの様子は違うことがわかると思います。これらに加えて、RAMではデータリテンションテストということをします。

これは何かというと、メモリーにデータを書き込んだあとに電源電圧を1V程度まで下げて時間を置き、再び電源電圧を通常電圧まで上げてから読み出しをして正しくデータが保持できているかテストするものです。

一般的にデータリテンション特性はフラッシュメモリーなどの不揮発性メモリーやDRAMで議論されるものですが、LSI内蔵SRAMでもテストをしていました。

書き込んで確認するためのテストパターンとして使用していたのは、隣接ビット干渉をテストできるチェッカーボードテストのパターンでした。チェッカー、チェッカーバーの2パターンでテストしていました。

恥ずかしながら、内蔵SRAMにおけるデータリテンションテストの必要性について、筆者はよく理解していません。在籍していた会社の品質保証関連の決まりごとでテスト適用が決められていたのでテストはしていましたが、なぜ必要かを示すものが身の回りに何も無かったものですから。リテンションテストのために一旦電源電圧を下げますが、その電圧は動作保証範囲の外ですからね。

フェイルビットマップなど

上記のSRAMの構造の説明で、ロウアドレスとカラムアドレスから不良が起きているメモリーセルの物理的な位置がわかることを書きました。これを利用した不良解析用のデータ形式にフェイルビットマップというものがあります。

アドレスデコーダーの並び方が素直な作りのメモリーであれば、ロウアドレスとカラムアドレスをテスターに教えてあげるだけで、自動的にフェイルビットマップを作ってくれる機能がテスターには備わっていると思います。

これを使うとたとえばカラムアドレスやロウアドレスが1本故障している場合はそのようにマップができますし、ランダムに故障が発生している場合もランダムにフェイルしている様子がわかります。

通常の出荷選別では使わないものですが、歩留まりが上がらずに不良解析をしなければならないときなどに大きな力となります。これがあれば、どのような不良モードなのかが直感的にわかるのです。

以上今回は、水晶発振器のテストとメモリー、SRAMのテストについてご紹介しました。

なお、DRAM混載のASIC/SOCというものもあります。これらはDRAMならではの難しさがあるようですが、私は担当したことがなく、ご紹介することができません。ご了承下さい。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。