MITOUJTAGとは何か
製品について
ご購入を検討中の方へ
サポート
JTAGについて
JTAG技術サービス(有料)
JTAG開発日記
JTAGを熱く語る

12月2日 JTAGの信号線と波形
JTAGの制御信号にはTCK、TDI、TMS、TDOの4本があります。
これにTRSTという負論理のリセット信号を加えることもあるのですが、TRSTオプションとされています。オプションである理由は、TCKとTMSに特定のパターン(TMSを1に保ったままTCKを5回トグルする)を与えればいつでもJTAG回路をリセットすることができるからです。
そのため、ほとんどのCPLDやFPGAにはTRSTはありません。
ただし、中にはTMS 5回のリセットではだめで、TRSTによるリセットでないと完全にはリセットされない、というICも数多くあるので、TRSTがあるなら使ったほうがよいでしょう。
CPUのデバッグ回路は、1990年代にバウンダリスキャンとは別の流れで発展してきました。そのため、メーカーごとに様々な発展の経緯があるため、TMSとTCKで作り出す条件だけでは内部回路がうまくリセットできないのでしょう。
さらに、テスト回路リセット(TRST)以外にもシステムリセット(SRST)などが用意されていて、SRSTをLにしながらTRSTをLにするとか、SRSTをLにしている間のTRSTの値でデバッグのモードが決まる、とか。CPUのJTAGに関しては独自規格のオンパレードです。
JTAG対応ICの中はどうなっているのか?
JTAG対応ICは、本来のICの動作をする「内部ロジック」をぐるっと取り囲むスキャンレジスタと、JTAGのテスト用ロジックが入っています。
JTAGのテスト用ロジックのことをTAP(Test Access Port)といいます。TAPコントローラについてはのちの章で詳しく解説します。
図2 JTAG対応ICの中身
DRとIR
TAPの中には、DR(データレジスタ)系と、IR(命令レジスタ)系の2つのデータパス(経路)があります。実際には、DRはさらに複数のパスに分かれています。
図3 TAP内のデータの経路
テストデータ入力(TDI)はシフトレジスタの入力に、テストデータ出力(TDO)はシフトレジスタの出力につながっています。TDIから入ったデータはシフトレジスタを流れていきます。シフトレジスタに元からあった値はTDOから出てきます。
TAPコントローラ
TDIから与えられたデータが、IRを通るのか、DRを通るのかを決めるのがTAPコントローラです。
TAPコントローラは、16個の状態を持つステートマシンで、現在のステートとTMSの値によって、次のステートが決まります。
図4 TAPコントローラの状態遷移図
最初はTest-Logic-Resetと考えれば、TMSに"0100"という信号を与えればDR側のパスを通ります。TMSに"01100"という信号を与えればIR側のパスを通ります。
また、Capture-DR/IRのときにIC内のステータスがシフトレジスタにコピーされ、Update-DR/IRのときにシフトレジスタの内容がIC内の機能レジスタにコピーされます。
Shift-DR/IRの時にTDIとTDOの間にシフトレジスタが接続されます。それ以外のステートではTDIとTDOは無効になっています。
つまり、TAPコントローラの
- TDI→TDOの信号をIR側のシフトレジスタに入れるか、DR側のシフトレジスタに入れるかを決める
- シフトレジスタの内容を、IC内のレジスタにコピーするタイミングを決める
- IC内のステータスレジスタの内容をシフトレジスタにコピーするタイミングを決める
といった役割があります。
JTAG対応ICの動作
つまり、JTAG対応ICは、
- TDIから入ったデータはDRかIRに書き込まれる
- 同時に、DRのキャプチャされた値か、IRのステータスレジスタがTDOから読み出される
ということだけを行っています。
JTAGを通じたアクセスはつまるところ、IRに読み書きするか、DRに読み書きするか、それだけです。
図5 TAPコントローラ
JTAG信号線の波形の例
JTAGの信号を操作して行いたいことは、以下の3つです。
- TAPをリセットする
- IRにコマンドを与える
- DRにデータを与え、現在のステータスを読み出す
つまり、この3つの組み合わせでたいていのことを行っています。
TAPをリセットする
TAPをリセットするには、TMSを1に保ったままTCKに5回のパルスを与えます。
※UltraScaleでは6回与えないと完全にはリセットされない。
図4のTAPコントローラの状態遷移図を見て考えてみてください。一番長い、5回のTCKを必要とするのはどこにいる場合でしょうか?
IR(命令レジスタ)への読み書き波形
命令レジスタを読み書きするには、TAPステートマシンがRuntest-Idleにいると仮定すると、TMSに"1100"と入れた後、TMSを'0'に保ったまま命令レジスタの長さだけTDIからデータをシフトインします。シフトする最後のビットだけはTMSを'1'にします。
下の図は、命令レジスタに"01001"というコードの命令をセットしたい場合の波形です。
図6 IRに書き込むときの波形
普通はShift-IRが終わってExit1-IRに入ると、TDOはオープンドレインになって充電カーブを描きながら緩やかにH状態になります。
DR(データレジスタ)への読み書き波形
データレジスタを読み書きするには、TAPステートマシンがRuntest-Idleにいると仮定すると、TMSに"100"と入れた後、TMSを'0'に保ったままデータレジスタの長さだけTDIからデータをシフトインします。シフトする最後のビットだけはTMSを'1'にします。
下の図は、データレジスタに"0101011"というデータをセットしたい場合の波形です。
図7 DRに書き込むときの波形