図1は、バウンダリスキャンテストの試験システムの一例を示す構成図である。試験システムは、パーソナルコンピュータなどの端末装置90と、バウンダリスキャンテスト用の試験装置91と、試験対象の回路基板92とを有する。
端末装置90は、回路基板92に実装されたデバイス及び配線に関する情報に基づいて生成された各種の試験パタンデータを、例えばネットワークを介してサーバなどから取得する。端末装置90は、試験パタンデータを試験装置91に送信し、また、試験結果のデータを試験装置91から受信して、結果をディスプレイなどの表示装置に表示する。
試験装置91は、端末装置90から入力された試験パタンデータに基づいて、データ信号TDI(Test Data In)及びクロック信号TCK(Test Clock)を生成し、回路基板92に出力する。また、試験装置91は、試験パタンデータに基づいて、TAP(Test Access Port)コントローラの状態制御信号TMS(Test Mode Select)及びリセット信号TRST(Test Reset)を生成し、回路基板92に出力する。試験装置91は、回路基板92から出力されたデータ信号TDO(Test Data Out)を受信して、データ信号TDOに基づいて試験結果のデータを生成し、端末装置90に出力する。
回路基板92は、試験装置91から入力された各信号TDI,TCK,TMS,TRSTに従って、試験モードに移行し、バウンダリスキャンレジスタのデータシフトなどを実行する。回路基板92は、試験結果としてデータ信号TDOを試験装置91に出力する。回路基板92には、状態制御信号TMSに従って状態が遷移するTAPコントローラを備えた複数のデバイスが実装されている。
図2は、試験対象のデバイスの一例を示す構成図である。図2には、一例として、互いに接続された2つのデバイス1a,1bが示されているが、接続されたデバイス数及び接続形態に限定はない。
デバイス1a,1bは、バウンダリスキャンテストに対応するLSIなどの電子回路装置の一例である。デバイス1a,1bは、複数の外部端子Tと、複数の外部端子Tにそれぞれ接続された複数段のバウンダリスキャンセルBCと、各バウンダリスキャンセルBCに接続された内部ロジック回路10と、TAPコントローラ11とを有する。
また、デバイス1a,1bには、外部端子Tとは別に、バウンダリスキャンテストの各信号TDI,TCK,TMS,TRST,TDOに対応する端子が設けられている。なお、以降の説明では、データ信号TDI,TDOの端子を、TDI,TDOとそれぞれ表記する。
内部ロジック回路10は、デバイス1a,1bの機能を実現する論理回路である。内部ロジック回路10には、複数の外部端子Tを介して信号が入出力される。デバイス1a,1bの外部端子Tの一部は、回路基板92上の配線Wを介して互いに接続されている。
TAPコントローラ11には、状態制御信号TMS、リセット信号TRST、及びクロック信号TCKが入力される。TAPコントローラ11は、複数のバウンダリスキャンセルBCと接続され、状態制御信号TMSに従って状態遷移することでバウンダリスキャンテストのシーケンスを実行する。なお、TAPコントローラ11は、リセット信号TRSTの入力により初期状態に遷移する。
複数段のバウンダリスキャンセルBCは、バウンダリスキャンテストの実行により入力された値を順次に保持して出力する複数段のレジスタ回路の一例である。複数段のバウンダリスキャンセルBCは、入力端子TDIと出力端子TDOの間に直列に接続され、クロック信号TCKのエッジをトリガとして入力値をラッチすることにより、バウンダリスキャンレジスタとして保持する。
デバイス1a,1bは、JTAGチェーン上で互いに接続されている。つまり、一方のデバイス1aの出力端子TDOは、他方のデバイス1bの入力端子TDIに接続されている。このため、各デバイス1a,1bの複数段のバウンダリスキャンセルBCは、両方のデバイス1a,1bにわたるシフトレジスタとして機能する。
より具体的には、バウンダリスキャンセルBCは、クロック信号TCKに同期して、入力端子TDIまたは前段のバウンダリスキャンセルBCから入力されたシリアルデータをバウンダリスキャンレジスタとして保持し、後段のバウンダリスキャンセルBCに出力し、あるいは後段のバウンダリスキャンセルBC及び出力端子TDOに出力する。つまり、複数のバウンダリスキャンセルBCは、前段から後段に向けて、順次にバウンダリスキャンレジスタの値をシフトさせる。デバイス1bの出力端子TDOから出力されたシリアルデータは、試験装置91に入力される。
本実施例のバウンダリスキャンテストでは、デバイス1a,1b同士の端子T間の接続が検査される。以下に、バウンダリスキャンセルBCの動作を説明する。
図3(a)は、デバイス1a,1b同士の端子T間の接続が正常である場合の動作の一例を示す。図3(a)には、図2のデバイス1a,1bの端子Tの一部分が表されている。また、図3(b)には、バウンダリスキャンセルBCごとのシリアルデータの入力値、出力値、及び期待値の一例が示されている。
デバイス1aには、直列に接続されたバウンダリスキャンセルBC#1〜#5が設けられ、デバイス1bには、直列に接続されたバウンダリスキャンセルBC#6〜#10が設けられている。デバイス1aのバウンダリスキャンセルBC#1〜#5は、配線Wを介して、他方のデバイス1bのバウンダリスキャンセルBC#6〜#10とそれぞれ接続されている。また、バウンダリスキャンセルBC#5,#6は、端子TDI,TDOを介して互いに接続されている。
バウンダリスキャンセルBC#1〜#5には、シリアルデータの入力値の一例として、「1」,「0」,「1」,「0」,「1」(2進数)がそれぞれ入力される。デバイス1aバウンダリスキャンセルBC#1〜#5の入力値は、バウンダリスキャンレジスタとして保持された後、端子T間の配線Wを介してデバイス1bのバウンダリスキャンセルBC#6〜#10に出力される。例えば、入力値「1」は、ハイ(High)レベルの電圧‘H’として出力され、入力値「0」は、ロー(Low)レベルの電圧‘L’として出力される。
これにより、バウンダリスキャンセルBC#6〜#10は、「1」,「0」,「1」,「0」,「1」を保持する。バウンダリスキャンセルBC#1〜#10に保持されたバウンダリスキャンレジスタの値は、シフト動作によりデバイス1bの出力端子TDOから出力され、試験装置91において所定の期待値と照合される。なお、期待値は、予め試験装置91に保持されている。
試験装置91は、シリアルデータの出力値「1」,「0」,「1」,「0」・・・が期待値「1」,「0」,「1」,「0」・・・と一致するため、デバイス1a,1bの端子T間の接続は正常であると判定する。
一方、図4(a)は、デバイス1a,1b同士の端子T間の接続が異常である場合の動作の一例を示す。図4(a)において、図3(a)と共通する構成については同一の符号を付し、その説明を省略する。また、図4(b)には、バウンダリスキャンセルBCごとのシリアルデータの入力値、出力値、及び期待値の一例が示されている。
本例において、バウンダリスキャンセルBC#1,#10の端子T間の接続は、配線Wの不良(×印参照)のためにオープン状態である。このため、バウンダリスキャンセルBC#1に保持されたバウンダリスキャンレジスタの値「1」は、ハイレベルの電圧‘H’としてバウンダリスキャンセルBC#10に出力されるが、バウンダリスキャンセルBC#10は「0」を保持する。
したがって、バウンダリスキャンセルBC#10から試験装置91への出力値は「0」となる。試験装置91は、バウンダリスキャンセルBC#10の出力値「0」が当該期待値「1」に一致しないため(符号E1参照)、バウンダリスキャンセルBC#1,#10の端子T間の接続の異常を検出する。これにより、試験結果として、バウンダリスキャンセルBC#1,#10の各端子Tまたは端子T間の配線Wに、はんだ不良、切断、またはグランドショートが存在するとの判定がなされる。
しかし、デバイス1a,1bのバウンダリスキャンテスト機能自体が故障状態または不安定状態である場合、正常な確認は不可能である。例えば、デバイス1aのバウンダリスキャンレジスタに異常がある場合でも、接続不良と判定される箇所が、バウンダリスキャンテストを行うたびに変わるため、不良のデバイス1aを特定することができない。以下にバウンダリスキャンレジスタが異常である場合の動作を、例を挙げて説明する。
図5(a)は、バウンダリスキャンレジスタが異常である場合の動作の一例を示す。図5(a)において、図3(a)と共通する構成については同一の符号を付し、その説明を省略する。また、図5(b)には、バウンダリスキャンセルBCごとのシリアルデータの入力値、出力値、及び期待値の一例が示されている。
バウンダリスキャンセルBC#3は、不安定状態であるとき、シフト動作を行うたびに、正常な値を保持する場合と、異常な値を保持する場合とがランダムに発生する。本例において、バウンダリスキャンセルBC#3は、後段のバウンダリスキャンセルBC#4,BC#5の各入力値「0」,「1」を保持するシフト動作では、正常な値「0」,「1」を保持する。しかし、バウンダリスキャンセルBC#3は、自己の入力値「1」を保持するシフト動作では、異常な値「0」を保持する。
すなわち、バウンダリスキャンセルBC#3は、バウンダリスキャンセルBC#4,BC#5の各入力値を保持するシフト動作には成功したが、自己の入力値「1」を保持するシフト動作には、ラッチ不良のために失敗している。これにより、バウンダリスキャンセルBC#3は、誤ったバウンダリスキャンレジスタの値「0」(正しい値は「1」)を保持する。該バウンダリスキャンレジスタの値「0」は、ローレベルの電圧‘L’としてバウンダリスキャンセルBC#8に出力されるので、バウンダリスキャンセルBC#8は「0」を保持する。
したがって、バウンダリスキャンセルBC#8から試験装置91への出力値は「0」となる。試験装置91は、バウンダリスキャンセルBC#8の出力値「0」が当該期待値「1」に一致しないため(符号E2参照)、正常であるにもかかわらず、バウンダリスキャンセルBC#3,#8の端子T間の接続の異常を検出する。
また、図6(a)は、バウンダリスキャンレジスタの保持値が異常である場合の動作の他例を示す。図6(a)において、図3(a)と共通する構成については同一の符号を付し、その説明を省略する。また、図6(b)には、バウンダリスキャンセルBCごとのシリアルデータの入力値、出力値、及び期待値の他例が示されている。
本例において、バウンダリスキャンセルBC#3は、図5(a)及び図5(b)の場合とは異なり、自己と後段のバウンダリスキャンセルBC#4の各入力値「1」,「0」を保持するシフト動作では、正常な値「1」,「0」を保持する。しかし、バウンダリスキャンセルBC#3は、後段のバウンダリスキャンセルBC#5の入力値「1」を保持するシフト動作では、異常な値「0」を保持する。つまり、バウンダリスキャンセルBC#5にセットされるべき値「1」が、不安定状態のバウンダリスキャンセルBC#3を通過したときに発生したラッチ不良によるシフト動作の失敗のため、異常な値「0」として後段のバウンダリスキャンセルBC#4にシフトされる。
これにより、バウンダリスキャンセルBC#5は、誤ったバウンダリスキャンレジスタの値「0」(正しい値は「1」)を保持している。このため、該バウンダリスキャンレジスタの値「0」は、ローレベルの電圧‘L’としてバウンダリスキャンセルBC#6に出力されるので、バウンダリスキャンセルBC#6は「0」を保持する。
したがって、バウンダリスキャンセルBC#6から試験装置91への出力値は「0」となる。試験装置91は、バウンダリスキャンセルBC#6の出力値「0」が当該期待値「1」に一致しないため(符号E3参照)、正常であるにもかかわらず、バウンダリスキャンセルBC#5,#6の端子T間の接続の異常を検出する。
次に、バウンダリスキャンセルBCの構成を説明する。図7は、バウンダリスキャンセルBCの比較例を示す構成図である。図7には、バウンダリスキャンセルBCの一例としてBC_1を上げるが、これに限定されず、BC_2〜BC_10であってもよい。
バウンダリスキャンセルBCは、セレクタ20,23及びフリップフロップ21,22を有する。セレクタ20は、TAPコントローラ11からの制御信号ShiftDR(Shift Data Register)に従って、外部端子Tからの入力値と前段のバウンダリスキャンセルBC(または入力端子TDI)からの入力値の一方を選択してフリップフロップ21に出力する。フリップフロップ21は、TAPコントローラ11からのクロック信号ClockDR(Clock Data Register)の立ち上がりエッジを検出したとき、セレクタ20からの入力値をラッチすることにより、バウンダリスキャンレジスタとして保持する。
フリップフロップ21が保持する値は、後段のバウンダリスキャンセルBC(または出力端子TDO)及び他のフリップフロップ22に出力される。フリップフロップ22は、TAPコントローラ11からの制御信号UpdateDR(Update Data Register)の立ち上がりエッジを検出したとき、フリップフロップ21からの入力値を保持してセレクタ23に出力する。
セレクタ23は、TAPコントローラ11からの制御信号Modeに従って、内部ロジック回路10からの入力値とフリップフロップ22からの入力値の一方を選択して外部端子Tに出力する。なお、制御信号ShiftDR,UpdateDR,Modeは、TAPコントローラ11の状態遷移に応じて出力され、クロック信号ClockDRは、クロック信号TCKに基づいて生成される。
バウンダリスキャンセルBCがシリアルデータのシフト動作を行うとき、セレクタ20は、実線で示されるように、前段のバウンダリスキャンセルBC(または入力端子TDI)からの入力値を選択してフリップフロップ21に出力する。フリップフロップ21は、該入力値を保持して後段のバウンダリスキャンセルBC(または出力端子TDO)に出力する。
また、上述した例において、一方のデバイス1aのバウンダリスキャンセルBCが、配線Wを介して他方のデバイス1bのバウンダリスキャンセルBCに値を出力するとき、フリップフロップ22は、点線で示されるように、他のフリップフロップ21からの入力値を保持してセレクタ23に出力する。セレクタ23は、フリップフロップ22からの入力値を選択して外部端子Tに出力する。これにより、フリップフロップ21に保持された値が、配線Wを介して他方のデバイス1bの当該バウンダリスキャンセルBCに入力される。
また、一方のデバイス1bが他方のデバイス1aからの入力値をバウンダリスキャンセルBCに保持するとき、セレクタ20は、一点鎖線で示されるように、外部端子Tからの入力値を選択してフリップフロップ21に出力する。フリップフロップ21は、該入力値を保持する。
このように、バウンダリスキャンセルBCは、フリップフロップ21にシフトデータの入力値を、バウンダリスキャンレジスタとして保持する。このため、フリップフロップ21が不良である場合、上述したようにバウンダリスキャンレジスタが異常となる。
そこで、本実施例のデバイス1a,1bには、異常なバウンダリスキャンレジスタを検出するため、各バウンダリスキャンレジスタの入力値及び出力値を比較して、該比較結果を出力する比較回路が設けられている。
図8は、バウンダリスキャンレジスタの入力値及び出力値の比較手段の一例を示す構成図である。図8には、複数段のバウンダリスキャンセルBCの各フリップフロップ21が、直列に接続された形態で示されている。複数のフリップフロップ21は、入力端子TDIから入力されたシリアルデータのシフト動作を行い、出力端子TDOから出力する。
比較回路3aは、各バウンダリスキャンセルBCのフリップフロップ21(#1,#2,・・・,#N(N:正の整数))に対応して設けられたフリップフロップ30(#1,#2,・・・,#N)及びXOR(排他的論理和)回路31を有する。各フリップフロップ30は、クロック信号ClockDRの立ち上がりエッジを検出したとき、当該フリップフロップ21の入力値を保持してXOR回路31に出力する。
XOR回路31は、当該フリップフロップ30からの入力値とバウンダリスキャンセルBCの当該フリップフロップ21からの入力値の排他的論理和を演算し、演算結果として演算値EX1,EX2,・・・,EXnを出力する。つまり、XOR回路31は、クロック信号ClockDRに同期して、当該フリップフロップ21の入力値及び出力値(保持値)の排他的論理和を演算する。これにより、比較回路3aは、複数段のバウンダリスキャンセルBCの各々の入力値及び出力値を比較する。
図9(a)及び図9(b)には、正常時及び異常時のシフト動作がそれぞれ示されている。図9(a)及び図9(b)は、入力端子TDIから入力されたシリアルデータの入力値a,b,・・・,f(2進数)、各フリップフロップ21,30(#1,#2,#N)の出力値(保持値)、及びXOR回路31の演算値EX1,EX2,EXnを示す。なお、本例では、フリップフロップ21,30の段数を3段(つまりN=3)とする。
本例において、入力端子TDIには、クロック信号ClockDRに同期してシリアルデータa,b,・・・,fが順次に入力される。シフト動作が正常である場合、図9(a)に示されるように、各フリップフロップ21,30(#1,#2,#N)は、クロック信号ClockDRに同期してシリアルデータa,b,・・・,fを順次に保持して出力する。XOR回路31の演算値EX1,EX2,EXnは、当該フリップフロップ21,30(#1,#2,#N)からの各入力値が常に一致するため、全て「0」となる。
一方、シフト動作が異常である場合、図9(b)に示されるように、例えば、フリップフロップ21(#1)は、入力端子TDIから入力値bが入力されたとき、入力値bとは異なる入力値xを保持する(符号E4参照)。これにより、当該XOR回路31の演算値EX1は、フリップフロップ21,30(#1)からの各入力値が一致しないため、「1」となる(符号E5参照)。
図10は、バウンダリスキャンセルBCに比較回路3aを追加した構成の一例を示す構成図である。図10は、1つのバウンダリスキャンセルBCに対応する比較回路3aの構成を示す。比較回路3aは、上記のフリップフロップ30及びXOR回路31に加えて、フリップフロップ32を有する。
フリップフロップ30は、クロック信号ClockDRに同期して、セレクタ20からの入力値を保持し、XOR回路31に出力する。XOR回路31は、フリップフロップ21,30の各入力値の排他的論理和を演算し、演算値EXnをフリップフロップ32に出力する。フリップフロップ32は、クロック信号ClockDRの立ち上がりエッジを検出したとき、演算値EXnを保持して出力する。
このように、比較回路3aは、シフト動作中、XOR回路31によりフリップフロップ21の入力値及び出力値を比較して、比較結果(EX1,EX2,・・・,EXn)を出力する。
また、図11は、バウンダリスキャンレジスタの入力値及び出力値の比較手段の他例を示す構成図である。図11には、複数段のバウンダリスキャンセルBCの各フリップフロップ21が、直列に接続された形態で示されている。複数のフリップフロップ21は、入力端子TDIから入力されたシリアルデータのシフト動作を行い、出力端子TDOから出力する。
比較回路3bは、各バウンダリスキャンセルBCのフリップフロップ21(#1,#2,・・,#N)に対応して設けられたフリップフロップ30(#1,#2,・・,#N)及びXOR回路31を有する。フリップフロップ30(#1,#2,・・,#N)は、図8の例とは異なり、互いに直列に接続されている。このため、フリップフロップ30(#1,#2,・・,#N)は、フリップフロップ21(#1,#2,・・,#N)と同期してシリアルデータのシフト動作を行う。
フリップフロップ30(#1)は、クロック信号ClockDRの立ち上がりエッジを検出したとき、当該フリップフロップ21(#1)の入力値を保持して当該XOR回路31及び後段のフリップフロップ30(#2)に出力する。該XOR回路31は、フリップフロップ30(#1)からの入力値とフリップフロップ21(#1)からの入力値の排他的論理和を演算し、演算値EX1を出力する。
フリップフロップ30(#2)は、クロック信号ClockDRの立ち上がりエッジを検出したとき、前段のフリップフロップ30(#1)からの入力値を保持して当該XOR回路31及び後段のフリップフロップ30(#3)に出力する。該XOR回路31は、フリップフロップ30(#2)からの入力値とフリップフロップ21(#2)からの入力値の排他的論理和を演算し、演算値EX2を出力する。なお、フリップフロップ30(#1)より後段のフリップフロップ30(#2,・・・,#N)も、上記と同様に動作する。
このように、XOR回路31は、クロック信号ClockDRに同期して、当該フリップフロップ21,30の出力値(保持値)同士の排他的論理和を演算する。これにより、比較回路3aは、複数段のバウンダリスキャンセルBCの各々の入力値及び出力値を比較する。なお、本例におけるシフト動作は、図9(a)及び図9(b)と同様である。
図12は、バウンダリスキャンセルBCに比較回路3bを追加した構成の一例を示す構成図である。図12には、一例として1段目及び2段目のバウンダリスキャンセルBCに対応する比較回路3bの構成が示されている。比較回路3bは、上記のフリップフロップ30及びXOR回路31に加えて、フリップフロップ32を有する。
1段目のフリップフロップ30(#1)は、クロック信号ClockDRに同期して、セレクタ20からの入力値を保持し、当該XOR回路31及び後段のフリップフロップ30(#2)に出力する。該XOR回路31は、フリップフロップ21,30(#1)の各入力値の排他的論理和を演算し、演算値EX1をフリップフロップ32(#1)に出力する。フリップフロップ32(#1)は、クロック信号ClockDRの立ち上がりエッジを検出したとき、演算値EX1を保持して出力する。
2段目のフリップフロップ30(#2)は、クロック信号ClockDRに同期して、前段のフリップフロップ30(#1)からの入力値を保持し、当該XOR回路31及び後段のフリップフロップ30(#3)に出力する。該XOR回路31は、フリップフロップ21,30(#2)の各入力値の排他的論理和を演算し、演算値EX2をフリップフロップ32(#2)に出力する。フリップフロップ32(#2)は、クロック信号ClockDRの立ち上がりエッジを検出したとき、演算値EX2を保持して出力する。
また、図13は、バウンダリスキャンレジスタの入力値及び出力値の比較手段の他例を示す構成図である。図13には、複数段のバウンダリスキャンセルBCの各フリップフロップ21,21aが、直列に接続された形態で示されている。複数のフリップフロップ21,21aは、入力端子TDIから入力されたシリアルデータのシフト動作を行い、出力端子TDOから出力する。
本例では、偶数番号のバウンダリスキャンセルBC#2,#4,・・・には、第1フリップフロップ21が設けられ、奇数番号のバウンダリスキャンセルBC#1,#3,・・・には、第1フリップフロップ21とはトリガが異なる第2フリップフロップ21aが設けられている。つまり、複数段のバウンダリスキャンセルBCには、第1フリップフロップ21及び第2フリップフロップ21aが交互に設けられている。
第1フリップフロップ21は、クロック信号ClockDRの立ち上がりエッジを検出したとき、入力値を保持して出力する。一方、第2フリップフロップ21aは、クロック信号ClockDRの立ち下がりエッジを検出したとき、入力値を保持して出力する。
比較回路3cは、各第1フリップフロップ21及び各第2フリップフロップ21aに接続されたXOR回路31を有する。XOR回路31は、第1フリップフロップ21及び第2フリップフロップ21aごとに、入力値と出力値の排他的論理和を演算する演算回路の一例である。
XOR回路31は、第1フリップフロップ21及び第2フリップフロップ21aの入力値と出力値の排他的論理和を演算し、演算値EX1,EX2,EX3,EX4,・・・を出力する。これにより、比較回路3cは、複数段のバウンダリスキャンセルBCの各々の入力値及び出力値を比較する。
図14は、バウンダリスキャンセルBCに比較回路3cを追加した構成の他例を示す構成図である。図14には、互いに接続された一組の奇数段及び偶数段のバウンダリスキャンセルBC#i,#i+1(i:奇数)に対応する比較回路3cの構成が示されている。比較回路3cは、上記のXOR回路31に加えて、フリップフロップ32a,32bを有する。
奇数段のXOR回路31は、当該第2フリップフロップ21a(#i)からの入力値と、前段(偶数段)のバウンダリスキャンセルBCの第1フリップフロップ21(#i−1)からの入力値との排他的論理和を演算し、演算値EXiをフリップフロップ32aに出力する。フリップフロップ32aは、クロック信号ClockDRの立ち上がりエッジを検出したとき、演算値EXiを保持して出力する。
偶数段のXOR回路31は、当該第1フリップフロップ21(#i+1)からの入力値と、前段(奇数段)のバウンダリスキャンセルBCの第1フリップフロップ21a(#i)からの入力値との排他的論理和を演算し、演算値EXi+1をフリップフロップ32bに出力する。フリップフロップ32bは、クロック信号ClockDRの立ち下がりエッジを検出したとき、演算値EXi+1を保持して出力する。
図15(a)及び図15(b)には、本例における正常時及び異常時のシフト動作がそれぞれ示されている。図15(a)及び図15(b)は、クロック信号ClockDR、入力端子TDIから入力されたシリアルデータの入力値a,b,・・・,fと、第1フリップフロップ21(#2,#4)及び第2フリップフロップ21a(#1,#3)の出力値とを示す。さらに、図15(a)及び図15(b)は、比較回路3cの各フリップフロップ32a(#1,#3),32b(#2,#4)の出力値と、各XOR回路31の演算値EX1〜EX4とを示す。
本例において、入力端子TDIには、クロック信号ClockDRに同期してシリアルデータa,b,・・・,fが順次に入力される。シフト動作が正常である場合、図15(a)に示されるように、各フリップフロップ21,21a(#1〜#4)は、クロック信号ClockDRに同期してシリアルデータa,b,・・・,fを順次に保持して出力する。これにより、シリアルデータa,b,・・・,fは、クロック信号ClockDRの半周期ごとにシフトする。
したがって、第1フリップフロップ21(#2,#4)及び第2フリップフロップ21a(#1,#3)は、クロック信号ClockDRの半周期ごとに入力値及び出力値(保持値)が一致する。このため、各XOR回路31の演算値EX1〜EX4は、クロック信号ClockDRの半周期ごとに「1」(不一致状態)及び「0」(一致状態)を繰り返す。
しかし、奇数段のフリップフロップ32a(#1,#3)は、クロック信号ClockDRの立ち上がりエッジをトリガにラッチ動作を行うため、正しい状態である「0」を演算値EX1,EX3として保持して出力する。同様に、偶数段のフリップフロップ32b(#2,#4)は、クロック信号ClockDRの立ち下がりエッジをトリガにラッチ動作を行うため、正しい状態である「0」を演算値EX2,EX4として保持して出力する。
シフト動作が異常である場合、例えば、フリップフロップ21a(#1)は、入力端子TDIから入力値aが入力されたとき、入力値aとは異なる入力値xを保持する(符号E6参照)。これにより、当該XOR回路31の演算値EX1は、フリップフロップ21a(#1)の入力値及び出力値が一致しないため、「1」となる(符号E7参照)。フリップフロップ32a(#1)は、クロック信号ClockDRの立ち上がりエッジを検出したとき、該演算値EX1(=「1」)を保持して出力する。
このように、比較回路3cは、シフト動作中、XOR回路31によりフリップフロップ21,21aの入力値及び出力値を比較して、比較結果(EX1〜EX4)を出力する。
また、本例では、入力値を保持するためのトリガが相違する第1フリップフロップ21及び第2フリップフロップ21aが交互に設けられているため、図8〜図12に示された例とは異なり、比較回路3cからフリップフロップ30を省くことができる。
上述した構成により得られた演算値EX1〜EXnは、例えば専用端子から試験装置91に出力される。例えば、デバイス1a,1bは、全ての演算値EX1〜EXnをAND演算し、該演算値をクロック信号ClockDRでリタイミングして専用端子に出力するか、あるいはラッチして保持してもよい。これにより、異常なバウンダリスキャンレジスタがデバイス1a,1b単位で特定される。
一方、異常なバウンダリスキャンレジスタをバウンダリスキャンセルBC単位で特定する場合、デバイス数が多いほど、特定に多くの時間がかかるため、デバイス1a,1bは、バウンダリスキャンセルBCの番号(#1,#2,・・・)をコード化して試験装置91に通知してもよい。この場合、例えば、デバイス1a,1bごとに、バウンダリスキャンセル数に応じたビット数分の専用端子が設けられる。例えば、256個のバウンダリスキャンセルBCの場合、256の2進数表示に必要な8ビット分(8個)の専用端子が設けられ、また、1024個のバウンダリスキャンセルBCの場合、1024の2進数表示に必要な10ビット分(10個)の専用端子が設けられる。
しかし、上述した手法では、デバイス1a,1bに、上記のAND演算及びコード化などを実行する論理回路と複数の専用端子とが追加される。このような大規模なハードウェアの追加を避けるため、例えば、以下に述べる簡単な制御回路を追加することにより、試験装置91は、出力端子TDOから出力されるシリアルデータに基づいて、異常なバウンダリスキャンレジスタを特定してもよい。
図16は、バウンダリスキャンセルBCに制御回路を追加した構成の一例を示す構成図である。図16には、図10に示された比較回路3aが例示されているが、図12または図14に示された比較回路3b,3cが用いられてもよい。なお、図16において、図10と共通する構成については同一の符号を付し、その説明を省略する。また、図16には、1つのバウンダリスキャンセルBCに対応する制御回路4の構成が示されているが、制御回路4は、各バウンダリスキャンセルBCについて同様の構成を備える。
制御回路4は、ラッチ回路40と、AND回路41,42と、切替制御部43とを有する。制御回路4は、比較回路3aと接続され、比較回路3aから出力された演算値EXnに応じてバウンダリスキャンセルBCの出力値を制御する。このため、バウンダリスキャンセルBCにおいて、フリップフロップ21と後段のバウンダリスキャンセルBC(または出力端子TDO)への出力端の間にセレクタ24が追加されている。
ラッチ回路40は、比較回路3aのフリップフロップ32から出力された演算値EXnを保持する。ラッチ回路40に保持された演算値EXnは、AND回路41,42の入力端子の一方にそれぞれ入力される。切替制御部43は、TAPコントローラ11の制御に従った制御値C0,C1を生成して出力する論理回路である。
切替制御部43は、制御値C0,C1をAND回路41,42の入力端子の他方にそれぞれ出力する。AND回路41,42は、制御値C0,C1及び演算値EXnのAND演算をそれぞれ行い、該演算結果を示す選択信号SEL_0,SEL_1をバウンダリスキャンセルBC内のセレクタ24にそれぞれ出力する。なお、選択信号SEL_0,SEL_1は、複数段のバウンダリスキャンセルBCをそれぞれ制御する複数の制御信号の一例である。
セレクタ24は、選択信号SEL_0,SEL_1のレベル(「0」または「1」)に応じた出力値を選択して、後段のバウンダリスキャンセルBC(または出力端子TDO)に出力する。より具体的には、セレクタ24は、選択値SEL_0,SEL_1がともに「0」である場合、フリップフロップ21からの入力値を選択して出力する。
また、セレクタ24は、選択値SEL_0が「1」であり、SEL_1が「0」である場合、固定値「0」を選択して出力する。一方、選択値SEL_0が「0」であり、SEL_1が「1」である場合、セレクタ24は、固定値「1」を選択して出力する。
上記の構成により、制御回路4は、TAPコントローラ11の制御に従ってバウンダリスキャンセルBCの出力値を制御する。これにより、バウンダリスキャンセルBCは、演算値EXnが「0」である場合、保持しているシリアルデータを後段のバウンダリスキャンセルBC(または出力端子TDO)に出力する。一方、演算値EXnが「1」である場合、バウンダリスキャンセルBCは、固定値「0」または「1」を後段のバウンダリスキャンセルBC(または出力端子TDO)に出力する。
制御回路4は、比較回路3a〜3cによる比較の結果、複数段のバウンダリスキャンセルBCのうち、入力値と出力値が不一致であるバウンダリスキャンセルBCの出力値を「0」に固定し、該固定値が出力された後、固定値を「1」に切り替える。これにより、試験装置91は、出力端子TDOから出力されたシリアルデータから、固定値「0」及び「1」の境界を検出することにより、異常なバウンダリスキャンレジスタを特定する。以下に、試験装置91の処理について述べる。
図17は、試験装置91の処理を示すフローチャートである。本処理は、図5及び図6に例示したように、バウンダリスキャンレジスタのシフト動作の異常が発生した場合に実行される。また、図18(a)〜図18(c)には、図3〜図6に例示されたデバイス1a,1bに対して本処理を行った場合における初期化時、異常再現時、及び出力制御時のバウンダリスキャンレジスタの値が示されている。
試験装置91は、デバイス1aの入力端子TDIにAll「0」(2進数)のシリアルデータを出力する(ステップSt1)。これにより、各バウンダリスキャンセルBC#1〜#10のバウンダリスキャンレジスタが、図18(a)に示されるように「0」に初期化される。
次に、試験装置91は、デバイス1aの入力端子TDIにトグルパタンのシリアルデータを出力する(ステップSt2)。トグルパタンのシリアルデータとしては、例えば、「010101・・・」、「101010・・・」、「00110011・・・」、及び「11001100・・・」(2進数)などが挙げられる。これにより、バウンダリスキャンレジスタの異常なシフト動作が再現しやすくなる。
異常なシフト動作が再現すると、例えば、図18(b)に示されるように、異常なバウンダリスキャンセルBC#4より後段の全バウンダリスキャンセルBC#5〜#10のバウンダリスキャンレジスタが異常値「x」となる。異常なバウンダリスキャンセルBC#4は、異常状態を演算値EX4=「1」としてラッチしておく。
次に、試験装置91は、「Instruction OPCODE」のコマンドを用いて、TAPコントローラ11に、異常なバウンダリスキャンレジスタの出力を「0」に固定するように指示する(ステップSt3)。このとき、TAPコントローラ11は、切替制御部43の制御値C0を「1」とし、制御値C1を「0」とする。このため、演算値EXnが「1」である異常なバウンダリスキャンセルBCの出力値は、「0」に固定される。一方、演算値EXnが「0」である正常なバウンダリスキャンセルBCの出力値は、固定されず、フリップフロップ21に保持されたシリアルデータの値となる。
次に、試験装置91は、デバイス1aの入力端子TDIにAll「1」(2進数)のシリアルデータを出力する(ステップSt4)。これにより、図18(c)に示されるように、異常なバウンダリスキャンセルBC#4及び当該バウンダリスキャンセルBC#4より前段のバウンダリスキャンセルBC#1〜#3の各バウンダリスキャンレジスタの値は「1」となる。一方、異常なバウンダリスキャンセルBC#4より後段のバウンダリスキャンセルBC#5〜#10の各バウンダリスキャンレジスタの値は、上記のステップSt3における出力値の固定制御により「0」となる。
次に、試験装置91は、「Instruction OPCODE」のコマンドを用いて、TAPコントローラ11に、異常なバウンダリスキャンレジスタの出力を「1」に固定するように指示する(ステップSt5)。このとき、TAPコントローラ11は、切替制御部43の制御値C0を「0」とし、制御値C1を「1」とする。このため、演算値EXnが「1」である異常なバウンダリスキャンセルBCの出力値は、「1」に固定される。一方、演算値EXnが「0」である正常なバウンダリスキャンセルBCの出力値は、固定されず、フリップフロップ21に保持されたシリアルデータの値となる。
このように、制御回路4は、比較回路3a〜3cの比較結果に基づいて複数の選択信号SEL_0,SEL_1を生成して、複数段のバウンダリスキャンセルBCにそれぞれ出力する。複数段のバウンダリスキャンセルBCは、複数の選択信号SEL_0,SEL_1にそれぞれ従って出力値を制御する。このため、制御回路4は、複数段のバウンダリスキャンセルBCから、入力値と出力値が不一致であるバウンダリスキャンセルBCを選択して制御する手間が省かれる。
次に、試験装置91は、バウンダリスキャンセルBC#1〜#10から全てのバウンダリスキャンレジスタを読み出す(ステップSt6)。これにより、出力端子TDOから試験装置91にシリアルデータが入力される。このとき、仮にバウンダリスキャンセルBC#4が異常なシフト動作を行っても、出力値が「1」に固定されているため、異常値「x」が後段のバウンダリスキャンセルBCに出力されることはない。
次に、試験装置91は、読み出したバウンダリスキャンレジスタの値(図18(c)の符号H参照)から、異常なシフト動作の再現の成否を判定する(ステップSt7)。試験装置91は、バウンダリスキャンレジスタの値が全て「1」である場合、再現に失敗したと判定し(ステップSt7のNo)、トグルパタンを変更したうえで(ステップSt10)、再びステップSt1の処理を行う。
一方、試験装置91は、バウンダリスキャンレジスタの値が全て「1」ではない場合、再現に成功したと判定する(ステップSt7のYes)。この場合、試験装置91は、読み出したバウンダリスキャンレジスタの「0」及び「1」の境界を検出して(ステップSt8)、異常なデバイス1a,1b及び異常なバウンダリスキャンレジスタを特定する(ステップSt9)。
図18(c)の符号Hで示された例では、「0」及び「1」の境界は、デバイス1aのバウンダリスキャンセルBC#4,#5の間に存在する。したがって、試験装置91は、デバイス1aのバウンダリスキャンセルBC#4のバウンダリスキャンレジスタが異常であることを検出する。このようにして、試験装置91は処理を行う。
また、図19は、デバイス1a,1bの処理を示すフローチャートである。より具体的には、図19は、図17に示された処理に対応するデバイス1a,1b側の処理を示す。
各バウンダリスキャンセルBCは、上記のステップSt1の処理に応じて、All「0」のシリアルデータをシフトする(ステップSt21)。次に、各バウンダリスキャンセルBCは、上記のステップSt2の処理に応じて、トグルパタンのシリアルデータをシフトする(ステップSt22)。このとき、異常なシフト動作が再現すれば、図8(b)に例示されるように、異常なバウンダリスキャンセルBC#4より後段のバウンダリスキャンセルBC#5〜#10は異常値「x」を保持する。
上記のステップSt3以降の処理に応じたデバイス1a,1bの動作は、バウンダリスキャンセルBCごとに、バウンダリスキャンレジスタが正常である場合と異常である場合に分かれる。バウンダリスキャンレジスタが正常である場合(ステップSt23のNo)、バウンダリスキャンセルBC#1〜#3,#5〜#10は、セレクタ24がフリップフロップ21の保持値を選択するため、入力されたシリアルデータをシフトする(ステップSt27)。
また、バウンダリスキャンレジスタが異常である場合(ステップSt23のYes)、バウンダリスキャンセルBC#4は、上記のステップSt3の処理に応じて、セレクタ24が固定値「0」を選択することにより、出力値を「0」に固定する(ステップSt24)。次に、該バウンダリスキャンセルBC#4は、上記のステップSt4の処理に応じて、シフト動作を行う(ステップSt25)。これにより、該バウンダリスキャンセルBC#4は、後段のバウンダリスキャンセルBC#5に「0」を出力するため、図18(c)に例示されるように、バウンダリスキャンセルBC#5〜#10は「0」を保持する。
次に、該バウンダリスキャンセルBC#4は、上記のステップSt5の処理に応じて、セレクタ24が固定値「1」を選択することにより、出力値を「1」に固定する(ステップSt26)。このため、上記のステップSt6の処理により読み出されたバウンダリスキャンレジスタの値は、図18(c)の符号Hに示されるように、バウンダリスキャンセルBC#1〜#4が「1」で、バウンダリスキャンセルBC#5〜#10が「0」となる。このようにして、デバイス1a,1bは、処理を行う。
このように、複数段のバウンダリスキャンセルBC#1〜#10から読み出されたバウンダリスキャンレジスタの値は、連続する「1」と連続する「0」の境界を有する。そして、「0」及び「1」の境界は、バウンダリスキャンレジスタが異常なバウンダリスキャンセルBC#4を示す。
したがって、試験装置91は、出力端子TDOから出力されるシリアルデータから「0」及び「1」の境界を検出することにより、異常なバウンダリスキャンセルBC#4を特定できるため、大規模なハードウェアの変更が不要である。一方、デバイス1a,1bも、先に述べた手法のような大規模なハードウェアの追加が不要である。よって、上記の手法によると、コストアップを抑制しつつ、異常なバウンダリスキャンレジスタを検出できる。
なお、本実施例において、制御回路4は、異常なバウンダリスキャンセルBC#4の出力値を「0」に固定し、シフト動作の後、該出力値を「1」に固定したが、これに限定されない。これとは逆に、制御回路4は、異常なバウンダリスキャンセルBC#4の出力値を「1」に固定し、シフト動作の後、該出力値を「0」に固定してもよい。
次に、試験装置91の構成を説明する。図20は、試験装置91の一例を示す構成図である。試験装置91は、上述したように、複数段のバウンダリスキャンセルBC#1〜#10が設けられたデバイス1a,1bのバウンダリスキャンテストを行う。
試験装置91は、出力部910と、制御部911と、特定部912と、比較部913と、期待値格納部914とを有する。制御部911は、端末装置90からコマンドを受け付けて、該コマンドに従って出力部910と、特定部912と、比較部913とを制御する。例えば、制御部911は、バウンダリスキャンテストを行う場合、比較部913を起動し、図17に示されるように、異常なバウンダリスキャンレジスタの特定処理を行う場合、特定部912を起動する。
出力部910は、バウンダリスキャンセルBC#1〜#10に所定のパタンに従って値を順次に出力する。出力された値は、データ信号TDIとしてデバイス1a,1bに入力される。図17に示された処理において、出力部910は、All「0」(2進数)のシリアルデータを出力し(ステップSt1)、トグルパタンのシリアルデータを出力し(ステップSt2)、さらにAll「1」(2進数)のシリアルデータを出力する(ステップSt4)。
制御部911は、受け付けたコマンドに従い、クロック信号TCK、状態制御信号TMS、及びリセット信号TRSTを生成してデバイス1a,1bのTAPコントローラ11に出力する。図17に示された処理において、制御部911は、デバイス1a,1bに、異常なバウンダリスキャンレジスタの出力を、「0」に固定するように指示し(ステップSt3)、また、「1」に固定するように指示する(ステップSt5)。このとき、制御部911は、上記の「Instruction OPCODE」のコマンドに応じた状態制御信号TMSを生成して、デバイス1a,1bのTAPコントローラ11に出力する。
このように、制御部911は、指示部として機能し、デバイス1a,1bに対し、バウンダリスキャンセルBC#1〜#10のうち、入力された値と出力した値が不一致であるバウンダリスキャンセルの出力値を「0」に固定し、該固定値が出力された後、固定値が他の値「1」に切り替えるように指示する。
特定部912は、図17に示された処理において、バウンダリスキャンセルBC#1〜#10から全てのバウンダリスキャンレジスタを読み出して(ステップSt6)、異常なシフト動作の再現の成否を判定する(ステップSt7)。特定部912は、再現に成功したと判定した場合(ステップSt7のYes)、読み出したバウンダリスキャンレジスタの「0」及び「1」の境界を検出して(ステップSt8)、異常なデバイス1a,1b及び異常なバウンダリスキャンレジスタを特定する(ステップSt9)。
すなわち、特定部912は、バウンダリスキャンセルBC#1〜#10から順次に出力された値が切り替わる境界を検出することにより、入力された値と出力した値が不一致であるバウンダリスキャンセルを特定する。特定部912は、特定した異常なデバイス1a,1b及び異常なバウンダリスキャンレジスタを、特定結果として端末装置90に通知する。
また、特定部912は、再現に失敗したと判定した場合(ステップSt7のNo)、つまり読み出したバウンダリスキャンレジスタの「0」及び「1」の境界を検出できない場合、その旨を制御部911に通知する。制御部911は、該通知を受けると、出力部910にトグルパタンを変更するように指示する(ステップSt10)。
出力部910は、変更後のトグルパタンで再度シリアルデータを出力する。すなわち、出力部910は、特定部912において境界が検出されない場合、所定のパタンを変更し、変更後のパタンに従って値を出力する。これにより、バウンダリスキャンレジスタの異常なシフト動作が再現される。
比較部913は、図3〜図6を参照して述べたように、デバイス1a,1bから、バウンダリスキャンセルBC#1〜#10に保持されたバウンダリスキャンレジスタを読み出して、期待値格納部914から読み出した期待値と比較する。期待値格納部914は、例えばメモリなどの情報格納手段であり、バウンダリスキャンセルBC#1〜#10の出力値の期待値を格納する。比較部913は、比較により得た試験結果を端末装置90に出力する。
なお、出力部910、制御部911、特定部912、及び比較部913は、LSIなどのハードウェアで構成されてもよいし、ソフトウェアで構成されてもよい。出力部910、制御部911、特定部912、及び比較部913は、ソフトウェアで構成される場合、CPU(Central Processing Unit)などのプロセッサに読み込まれたプログラムの機能の一部としてそれぞれ形成される。
これまで述べたように、実施例に係る電子回路装置1a,1bは、複数段のレジスタ回路BCと、比較回路3a〜3cと、制御回路4とを有する。複数段のレジスタ回路BCは、バウンダリスキャンテストの実行により入力された値を順次に保持して出力する。
比較回路3a〜3cは、複数段のレジスタ回路BCの各々の入力値と出力値を比較する。制御回路4は、複数段のレジスタ回路BCのうち、比較回路3a〜3cによる比較の結果、入力値と出力値が不一致であるレジスタ回路BCの出力値を固定して、該固定値が出力された後、固定値を他の値に切り替える。
上記の構成によると、比較回路3a〜3cは、複数段のレジスタ回路BCの各々の入力値と出力値を比較するので、入力値と出力値が不一致であるレジスタ回路BCを検出できる。制御回路4は、該レジスタ回路BCの出力値を固定して、該固定値が出力された後、固定値を他の値に切り替える。
したがって、複数段のレジスタ回路BCから順次に出力される値が切り替わる箇所を検出することにより、異常なバウンダリスキャンレジスタを検出することができる。
また、実施例に係る試験装置91は、入力された値を順次に保持して出力する複数段のレジスタ回路BCが設けられた電子回路装置1a,1bのバウンダリスキャンテストを行う。試験装置91は、出力部910と、制御部911と、特定部912とを有する。
出力部910は、複数段のレジスタ回路BCに、所定のパタンに従って値を順次に出力する。制御部911は、電子回路装置1a,1bに対し、複数段のレジスタ回路BCのうち、入力された値と出力した値が不一致であるレジスタ回路の出力値を固定し、該固定値が出力された後、固定値が他の値に切り替えるように指示する。特定部912は、複数段のレジスタ回路BCから順次に出力された値が切り替わる境界を検出することにより、複数段のレジスタ回路BCのうち、入力された値と出力した値が不一致であるレジスタ回路を特定する。
したがって、試験装置91は、異常なバウンダリスキャンレジスタを検出することができる。
上述した実施形態は本発明の好適な実施の例である。但し、これに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形実施可能である。