デバッグソリューションズホームへ

1.はじめに

2.Test Access Port

3.BS周辺回路

4.TAPコントローラ

5.インストラクションレジスタ

6.Testデータレジスタ

7.BS試験例

8.インフラ試験

9.BS試験

  DEBSOLホームへ

5.インストラクションレジスタ

5.1 インストラクションレジスタの構成

インストラクションレジスタはバウンダリスキャンテストを実行するためのテストパターンの取り込みやテストの実行を指示するための命令コード(インストラクション)をセットするためのレジスタです。インスラクションレジスタはTDIとTDOの間にあるシフトレジスタとそのデータを保持するレジスタから構成されます。レジスタ長は最低2ビットの大きさをもたなければなりません。インスラクションレジスタ内のシフトレジスタは Test−Logic−Reset ステートで IDCODE の値(IDCODEを持たない場合は、BYPASS命令)に初期化されます。

インスラクションレジスタ内のシフトレジスタは Capture-IR ステートで初期化されます。その初期値はLSBの2ビット(つまりTDO側の2ビット)が “01” のパターンでなければなりません。他のビットは、チップデザインで定義されます。その値はBSDLファイルの INSTRUCTION_CAPTURE 属性で定義されます。

 

TDIとTDOの間にあるシフトレジスタはTCKの立ち上がりエッジでシフトされます。TDIから入力された全てのインストラクションデータのシフト動作後、Upudate-IR ステートの立ち下がりエッジでインスラクションレジスタにラッチされます。

 

5.2 TAPコントローラのインストラクション

インストラクションレジスタにセットされたインストラクションによって、TAPコントローラはテストパターンデータの取り込みやテストの実行指示を行います。TAPコントローラのインストラクションにはユーザーによって使用される Public Instruction とデバイスベンダが使用する Private Instruction があります。Public 命令はユーザーによって使用されるインストラクションで IEEE 1149.1でその動作が定義されています。Public Instruction は BYPASS , SAMPLE , PRELOAD , EXTEST が定義されています。又オプションとして IDCODE , USERCODE , INTEST , RUNBIST が実装可能です。

Private 命令は デバイスベンダが、設計回路のテストや、製造試験のために使用する独自のインストラクションです。その使用方法を公開する必要はなく、一般にユーザーが使用することはありません。

 

5.3 Bypass Instruction

Bypass 命令は、Shift-DR ステートにおける動作で Bypass Register を選択します。Bypass Register は TDi と TDo の間にある 1ビットのシフトレジスタです。このレジスタを使用することにより、バウンダリスキャンレジスタを通ることなく、TDi から入力されたデータは、最短時間で TDo に出力されます。Bypass インストラクションは、Shift-DR ステートにおけるテストパターンデータを TDi から TDo にバイパスします。

インストラクションコードのオール“1”の値が Bypass 命令のオペコードに予約されています。又オール“1” の値とは別に、オール “1” 以外の値をとる事も許されていますが、オール“1” のコードは必ずBypass 命令に割り当てられなければなりません。Bypass 命令が指定されている時、デバイスのシステムロジックの動作には影響を与えません。

 

5.4 Sample Instruction

Sample 命令を実行することで、システムロジックに影響を与えることなく、デバイスの入出力をモニタすることができます。インストラクションレジスタにSample 命令が選択されると、Capture−DR ステートの TCK の立ち上がりエッジで、入/出力ピンの状態がバウンダリスキャンレジスタにラッチされます。Sample 命令が指定されている時、デバイスのシステムロジックの動作には影響を与えません。バウンダリスキャンレジスタと入/出力ピンの接続図を示します。

拡大表示

Sample 命令が選択されると、入力ピンに接続されたバウンダリスキャンセルでは、SEL1が入力ピンからの信号を選択し、FF1 にラッチする準備を行います。そして Capture−DR ステートのTCKの立ち上がりエッジで入力信号が、シフトレジスタを構成するFF1にラッチされ、Update-DR ステートの TCK の立ち下がりエッジでFF2にラッチされます。出力信号に接続されたバウンダリスキャンセルでは、内部論理回路の出力(=出力ピンに出力しようとしている)値が同様にシフトレジスタを構成するFF1とFF2にラッチされます。

Sample 命令はデバイスに対して必須命令で、そのバイナリコードはデバイスベンダから提供されます。

Sample 命令での動作は外部からの信号が、内部のシフトレジスタにラッチされるだけで、シフトレジスタのデータを TDo ピンから取り出すことはできません。この動作を実現するのが Preload 命令です。Preload 命令はSEL1を切り換えてShift Scan Inの信号を選択することにより、TDI からTDOに連なるシフトレジスタを構成します。これらのことから Sample 命令は Preload 命令と同一コマンド(Sample/Preload 命令)で動作することが推奨されており、一般的に、そのバイナリコードは同じ値が使用されています。

 

5.5 Preload Instruction

Preload 命令は TDI と TDO の間でバウンダリスキャンレジスタ間を結ぶのシフトレジスタを構成します。インストラクションレジスタにPreload 命令が選択されると、Capture−DR ステートのTCKの立ち上がりエッジで、データノシフト動作を行います。最初のバウンダリスキャンレジスタはTDIピンからの信号がラッチされ、最後のバウンダリスキャンレジスタのデータはTDOピンから出力されます。Preload 命令はシステムロジックに影響を与えることはありません。

バウンダリスキャンレジスタと入/出力ピンの接続図を示します。

拡大表示

Preload 命令が選択されると、セレクタ(SEL1)は隣のバウンダリスキャンセルからの信号を選択し、Capture−DR ステートのTCKの立ち上がりエッジでシフトレジタのシフト動作を行い、Update-DR ステートの TCK の立ち下がりエッジでFF2にラッチされます。

Preload 命令はデバイスに対して必須命令で、そのバイナリコードはデバイスベンダから提供されます。

Preload 命令はSample 命令と組み合わせて動作します。Sample 命令の動作に関しては 『5.4 Sample Instruction』 を参照してください。

 

5.6 Extest Instruction

Extest 命令はデバイスが搭載されるボードレベルの試験を行うための命令です。Extest 命令を実行することで、バウンダリスキャンレジスタにセットされたデータがデバイスの出力ピンに出力され、入力ピンの状態がバウンダリスキャンセル内のシフトレジスタにセットされます。

Extest 命令の動作(Capture−DR ステート)

拡大表示

xtest 命令の動作(Shift−DR ステート)

拡大表示

Extest 命令の動作(Update-DR ステート)

拡大表示

Extest 命令が選択されると、セレクタ(SEL2)はバウンダリスキャンレジスタ(FF2)の出力を選択し、バウンダリスキャンレジスタ(FF2)に保持されている値を出力ピンから出力します。又、Capture−DR ステートのTCKの立ち上がりエッジでシフトレジタ(FF1)に入力信号の状態がラッチされ、Shift-DR ステートでシフト動作を行うことで、入力ピンの状態を取り出すことができます。又、Update-DR ステートの TCK の立ち下がりエッジでシフトレジタ(FF1)の状態がバウンダリスキャンレジスタ(FF2)にラッチされます。

これらの Extest 命令の動作から、ボードテスト時の最初の Extest 命令の実行の前には (Sample/)Preload 命令を実行して、バウンダリスキャンレジスタにデータをセットしなければならないことがわかります。Extest 命令をセットするとセレクタ(SEL2)がバウンダリスキャンレジスタ(FF2)の出力を選択し、バウンダリスキャンレジスタ(FF2)に保持されている値を出力ピンから出力するからです。

一般的なボード試験の流れは以下のようになります。

1.(Sample/)Preload命令をインストラクションレジスタにセット。

2.試験パターンをTDIから入力しバウンダリスキャンレジスタにセット。

3.Extest 命令を実行(出力ピンから試験パターンが出力される)。

4.(Sample/)Preload命令命令をインストラクションレジスタにセット。

5.TDOからバウンダリスキャンレジスタのデータを取り出す。

6.取り出したデータを解析

Extest 命令はデバイスに対して必須命令で、そのバイナリコードはデバイスベンダから提供されます。

注意:Extest 命令を実行すると、デバイスの内部論理回路の正常性は保証されません。Extest 命令を実行した後に、内部論理回路を動作させる場合、システムリセットが必要となる場合があります。

 

5.7 Intest Instruction

Intest 命令(オプション)はデバイス内部回路の試験を実現します。試験パターンはTDIからシリアル入力されバウンダリスキャンレジスタにセットされたデータを使用します。このため Intest 命令による試験はスタティック試験に限られます(ダイナッミックな試験はできません)。また入力されるシステムクロックに対して1CLK毎に動作確認を行うため、デバイスのシングルステップ動作が可能であることが必要となります。

Intest 命令の動作(Capture−DR ステート)

拡大表示

Intest 命令の動作(Shift-DR ステート)

拡大表示

Intest 命令の動作(Update-DR ステート)

拡大表示

Intest 命令が選択されると、セレクタ(SEL2)はバウンダリスキャンレジスタ(FF2)の出力を選択し、バウンダリスキャンレジスタ(FF2)に保持されている値を内部論理回路に出力します。又、Capture−DR ステートのTCKの立ち上がりエッジでシフトレジタ(FF1)に内部論理回路出力の状態がラッチされ、Shift-DR ステートでシフト動作を行うことで、入力ピンの状態を取り出すことができます。又、Update-DR ステートの TCK の立ち下がりエッジでシフトレジタ(FF1)の状態がバウンダリスキャンレジスタ(FF2)にラッチされます。

Intest 命令はオプション命令で、そのバイナリコードはデバイスベンダから提供されます。

注意:Intest 命令を実行すると、デバイスの内部論理回路の正常性は保証されません。Intest 命令を実行した後に、内部論理回路を動作させる場合、システムリセットが必要となる場合があります。

 

5.8 Runbist Instruction

unbist 命令(オプション)はデバイスに組み込まれた自己診断テスト(BIST:Built In Self Test)を実行します。自己診断テストではIntest命令よる試験と違って、シングルステップ動作や、複雑なパターンの設定は必要ありません。

Runbist 命令の実行シーケンスは以下のようになります。

1.自己診断テスト実行前にバウンダリスキャンレジスタに設定すべきデータがある場合は(Sample/)Preload命令を用いて、必要なデータをセットします

2.Sample/)Preload命令をインストラクションレジスタにセット。

3.TAPコントローラの状態遷移を Run-Test/Idle 状態にすることで、デバイスに組み込まれた自己診断テストが実行されます。

4.デバイスに定義されている継続時間が経過した後、Shift-DR ステートでシフト動作を行うことで、TDOから自己診断テストの結果を取り出す。(継続時間及び診断結果はBSDLファイルの RUNBIST_EXECUTION 属性で定義されます。)

自己診断テストに必要なCLKには、システムCLKが使用される構成と、TCK信号が用いられる構成があります。システムCLKが使用される場合は外部ピンが直接内部論理回路に入力されます。この場合、 Run-Test/Idle 状態でTCK を入力する必要はありません。自己診断テストのCLKにTCK信号が使用される場合、Run-Test/Idle を保持するように TCK を入力する必要があります。

自己診断テスト中、デバイスからの出力ピンの状態は、2つの方法が定義されています。

1) 出力ピンには、バウンダリスキャンレジスタの値が出力される。

2) 出力ピンは、ディスエーブル状態(Hi−Z)とする。

出力ピンの状態をどちらにするかは、BSDLファイルの RUNBIST_EXECUTION 属性で定義されます。

Runbist 命令はオプション命令で、そのバイナリコードはデバイスベンダから提供されます。

注意:Runbist 命令を実行すると、デバイスの内部論理回路の正常性は保証されません。Runbist 命令を実行した後に、内部論理回路を動作させる場合、システムリセットが必要となる場合があります。

 

5.9 Clamp Instruction

Clamp 命令 は Preload命令によって設定されたバウンダリスキャンレジスタの値を出力し、かつバイパス動作を行います。

通常、バウンダリスキャン試験において、試験対象外のデバイスはバイパス動作にして、試験パターンの削減を図ります。しかし、バイパス動作対象のデバイスに対して外部ピンを特定のレベルに固定設定しなければならない場合があります。このような場合、Preload命令で出力するデータをバウンダリスキャンレジスタに設定し,Extest 命令を実行しなければなりません(Bypass 命令は、デバイスのシステムロジックの動作及びその入出力には影響を与えない為) 。しかし、この方法では、Preload命令によるテストパターンは膨大な大きさになる可能性があります。このような場合、Clamp 命令(オプション)が適しています。Clamp 命令 は Preload 命令によって設定されたバウンダリスキャンレジスタの値を出力し、かつバイパスレジスタを選択することで、バイパス動作を行います。

Clamp 命令の実行は以下のようになります。

1.(Sample/)Preload命令をインストラクションレジスタにセット。

2.デバイスからの出力パターンをTDIから入力しバウンダリスキャンレジスタにセット。

3.Clamp 命令を実行(出力ピンから出力パターンが出力され、かつバイパス動作になる)。

Clamp 命令はオプション命令で、そのバイナリコードはデバイスベンダから提供されます。

注意:Clamp 命令を実行すると、デバイスの内部論理回路の正常性は保証されません。Clamp 命令を実行した後に、内部論理回路を動作させる場合、システムリセットが必要となる場合があります。

 

5.10 IDCODE Instruction

IDCODE 命令は、デバイスの IDCODE の読み取りを行います。

IDCODE 命令が設定されると、Capture−DR ステートのTCKの立ち上がりエッジでデバイスのIDCODEが IDCODEレジスタにロードされ、Shift-DR ステートでシフト動作を行うことで、IDCODEレジスタの状態を取り出すことができます。IDCODE 命令が指定されている時、デバイスのシステムロジックの動作には影響を与えません。

IDCODEは Test Logic Reset 状態でもインストラクションレジスタに設定されます。Test Logic Reset ステートに続く、Shift-IR ステートでシフト動作を行うことで、IDCODEを読み出すことができます。

IDCODE 命令はオプション命令で、そのバイナリコードはデバイスベンダから提供されます。

 

5.11 UserCode Instruction

UserCode 命令はデバイスメーカー独自の32ビット−識別コードの読み取りを行います。

UserCode 命令が設定されると、Capture−DR ステートのTCKの立ち上がりエッジでデバイスの UserCode が UserCode レジスタにロードされ、Shift-DR ステートでシフト動作を行うことで、UserCode レジスタの状態を取り出すことができます。UserCODE 命令が指定されている時、デバイスのシステムロジックの動作には影響を与えません。

UserCode 命令はオプション命令で、そのバイナリコードはデバイスベンダから提供されます。

 

5.12 HIGHZ Instruction

HIGHZ 命令は、内部論理回路からの全ての出力をディスエーブル状態にします。HIGHZ 命令が実行されると、3ステート出力は、Hi−Z状態になります。2ステート出力は、ドライブ状態のままですが、インアクティブ状態をもつ出力(例えばオープンコレクタ出力等)は、インアクティブ状態になります。

HIGHZ 命令はオプション命令で、そのバイナリコードはデバイスベンダから提供されます。

注意:HIGHZ 命令を実行すると、デバイスの内部論理回路の正常性は保証されません。HIGHZ 命令を実行した後に、内部論理回路を動作させる場合、システムリセットが必要となる場合があります。