2018年5月15日火曜日

シフトレジスタの罠

以前筆者が担当した製品で、バウンダリスキャン回路のテストパターンが、どう頑張っても通らないという事例が発生しました。

テストパターンのフェイルデータを取って解析してもらったところ、バウンダリスキャン回路の、シフトレジスタを構成するFFでホールドタイム不足が発生していたことが発覚しました。タイミング制約の設定抜けでした。




バウンダリースキャンテストは、プリント基板上に実装されたLSI同士の導通テストのための技術です。LSIの内部を動作させずに、I/Oバッファの状態設定をしたり論理値を検出したりするために、I/Oバッファの内側にバウンダリスキャンレジスタと呼ばれるFFを接続し、このFFでシフトレジスタを構成します。

I/Oから出力させたい論理値を、外からバウンダリスキャンレジスタにシフトインしたり、I/Oが受け取っている論理値をバウンダリスキャンレジスタに取り込んでシフトアウトして観測したりするのです。

本来は部品同士がきちんとつながっているかどうかをテストするバウンダリースキャンの仕掛けを使うと、LSI内部を動かすことなくI/Oバッファの状態設定をすることが出来るので、DCパラメトリックテストを容易化することができます。

この仕掛けを利用する為には、LSI内部にバウンダリースキャン用のテスト回路として、TAPコントローラと呼ばれるテスト回路と、I/Oバッファをシフトレジスタ状に接続する回路を予め組み込んでおく必要があります。この回路はEDAを使って自動挿入することが多いと思います。

また、ロジック系の製品のテストで、今の世の中適用していない製品はないだろう、というテストに、テスト容易化設計の一環として適用するスキャンテストがあります。このテストは、LSI内部のFFを、スキャンテスト時にシフトレジスタ状に接続することで、内部の回路を動作させることなく、任意の状態に設定できるようにしたものです。FFの状態をスキャンチェーン経由で簡単にLSI外部に取り出すことも出来ます。

論理の深いところにあるFFでも簡単に論理値の設定、および検出できるので、容易に故障検出率を上げることが出来ます。このことから、テストパターンの増大を抑制することが出来ます。


スキャンテストの回路の作り方


バウンダリースキャン用の回路にしても、スキャンテストの回路にしても、回路付加にはEDAの自動挿入機能を使います。論理合成が終わった後のゲートレベルネットリストに回路を自動付加して、回路付加前後の形式検証を実施し、通常動作モードでにおける回路の等価性の検証を行った後、回路付加後のネットリストをレイアウト工程に渡す、という流れになります。

レイアウト工程では、与えられたタイミング制約に従って、クロックの位相を合わせる為にクロックツリーを張ったり、セルの配置配線を行います。当然ながら、元々の回路と同様にスキャン回路にもタイミング制約を設定する必要があります。

しかしながら、何らかの原因でスキャン回路系のタイミング制約に漏れや間違いがあると、スキャン動作の時だけ、タイミング制約を満足できないレイアウト結果になってしまうことになります。

シフトレジスタを使った回路構成


冒頭で、バウンダリースキャン回路、スキャンテスト回路とも、シフトレジスタ構成を持った回路になっている旨書きました。

ここで言うシフトレジスタは、同じクロックで動く複数のFFで構成される、単純な直列入力直列出力型のシフトレジスタです。

図において、一番上の波形はFFに入力されるクロック、次の波形はシフトレジスタの初段FFに入力されるデータ波形です。

入力されたデータが、クロックの最初の立ち上がりエッジでFFに取り込まれ、その次の立ち上がりエッジで出力、その次の立ち上がりエッジで次段のFFに取り込まれる、と言う動作をしてデータをシフトしていきます。このような構成のシフトレジスタでは、FF入力のクロックに対するセットアップ時間は、クロックの1周期に近い分だけ確保できますが、ホールド時間はほとんど余裕がありません。綱渡りに近いタイミング設計ですね。

従って、データの遅延がクロックの遅延よりも少なくならないように管理しないと、簡単にホールドタイム不足が出てしまうことになります。

ホールドタイム不足が起こってしまった

そんな中、冒頭に書いた、どう頑張ってもテストパターンが通らない、というトラブルが出たのです。そして、解析の結果、FFのホールドタイム不足が原因であることが、かなり簡単にわかりました。おそらくSTAのレポートの中にホールドタイム不足の情報があったんでしょうね。

解析の仕方


ホールドタイム不足が起こると、該当するシフトレジスタの該当するFFは状態が確定せず、不定になります。データが上手く取り込めないメタステーブル状態になると考えられます。実デバイスで不定になるというのはどういうことかというと、テストするたびに結果が変わる、ということです。状態が確定しないので、そのような見え方になります。

シフトレジスタのどこでホールドタイム不足が起こっているかは、テスターのフェイルデータから解析します。

該当FFを通ってくるデータは不定であてになりませんが、該当FFよりも後ろ側(出力寄り)にあるFFのデータは正しいはずなので、出力に近い方から追いかけて行けばフェイルが発生しているFFが出力から見て何番目かがわかります。

バウンダリスキャン回路もスキャンテスト回路も、どのFFがどの順番でつながってどのピンに出てくるのかはEDAが情報を持っているので、それからFFの特定ができます。

ただ、故障検出と異なり、誤動作するかもしれないし、しないかもしれない、ということになるので、複数のデータを見ながら判断しないと、正しい結果が得られない可能性があります。

このようにフェイル状況からFFを絞り込んで、タイミング解析の結果と突き合わせて、確認すると、やっぱりホールドタイム不足が起こっていた、ということになるのです。

筆者が担当して製品では、冒頭に書いたように、バウンダリスキャン回路において、タイミング制約の設定抜けでホールドタイム不足が起こったのですが、なぜ抜けたのかはすでに記憶にありません。ゲートネットに対してEDAで回路付加をするので、本来なら回路付加後にネットリストと一緒に後付けの回路用のタイミング制約情報が出てくるべきなのでしょうが、出てこなかったのか、それとも出て来たにもかかわらず適用し忘れたのかわかりません。

ホールドタイム不足発覚後の取扱


この状況では、該当するFFの出力がI/Oに出てくるテストパターンは、そのままでは使い物になりません。

内部のFFのホールドタイムは、前段のFFの、クロックの立ち上がりエッジからの出力遅延で決まってしまうので、外部から入力タイミングを調整して動作マージンを広げることはできません。テスト担当がいくら頑張っても、どうにもならず、テストパターンを一部捨てるか、レイアウト修正するしかありません。

そしてその結果、スキャンテストであれば、数10本あるスキャンチェーンの1本が使用不能になりますし、バウンダリスキャン回路であれば、バウンダリスキャン回路を使ったテストが一部出来ないことになります。

通常動作でホールドタイム不足による誤動作が発生するのであれば、それは仕様上許されない話なので、当然レイアウト修正と言うことになります。おそらくレイアウト修正の為のダミーゲートをいくらかLSIの中に埋め込んでいる場合が多いと思うので、それを使用して該当FFのデータ入力に遅延を付ける修正を行う事と思います。

スキャンテストでのみ発生する誤動作の場合も、故障検出率に影響する話なので、修正するのが普通と思います。

問題は、筆者が経験したようなバウンダリスキャン回路のホールドタイム不足のケースです。

バウンダリスキャン回路が誤動作すると、当然バウンダリスキャンテストが出来ないことになります。しかし、バウンダリスキャンテストが適用できなくても、セットの生産を乗り切れるとお客様が判断したら、修正しないで済ませる場合もあります。

そうなると、バウンダリスキャンテストが出来ないことで困るのは、LSIのテストの中のDCパラメトリックテストの測定ポイントが探しにくい、と言うことだけになります。

筆者が担当した製品では、色々な理由から回路修正はせず、お客様にも了承して頂きました。回路の不具合が原因で状態設定が出来ないピンは、他のテストパターンで測定出来るポイントを探して全ピン測定することができました。

このような、通常動作では問題がないのにテスト時に問題が出るようなトラブルは、どのように決着させるかが難しいです。修正するにこしたことはないのでしょうが、重要度と時間と費用を修正するかどうかを考えてきめる必要があります。

0 件のコメント:

コメントを投稿

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