JTAGのTMS含めた波形をロジアナで解析してみた

FPGA

JTAG通信の波形をロジックアナライザで解析してみました。

TMS信号からのステートの状態遷移含めて確認しています。

JTAGが未接続・アイドル・書き込みの際に、どのような波形になるかを紹介します。

 

スポンサーリンク

JTAGのTMS含めた波形をロジアナで解析してみた

JTAG通信をロジアナで解析してみました。

JTAGの信号であるTDI,TDO,TCK,TMSの波形を測定しています。

 

TMSはJTAGデバイスのコントローラ(TAPコントローラ)の状態遷移に使われます。

※TMS…Test Mode Select

TMS信号により、JTAG通信のステートが切り替わります。

 

「未接続」「アイドル(通信中)」「書き込み」のJTAG通信を確認しました。

テストした環境から、解析したJTAG信号・ステートの状態まで詳細に紹介していきます。

 

実際にJTAG通信をロジアナで測定した動画も紹介しています。

信号解析できている様子が分かりますので、是非合わせてご覧ください。

JTAGの信号を解析!ロジックアナライザで測定してみた

 

JTAGのコネクタから信号を取り出す

JTAGは基本的にTDI,TDO,TCK,TMSの4本の信号で通信します。

ロジアナで解析するためにも、JTAGコネクタから信号を取り出します

※他にもオプションの信号もありますが、ここでは省略します。

  • TDI…Test Data In
  • TDO…Test Data Out
  • TCK…Test Clock
  • TMS…Test Mode Select

 

XilinxのJTAGケーブルを使います

JTAG-HS2とはXilinxのFPGAにプログラムを書き込むためのツールです。

Xilinxの評価ボードメーカとしても有名なDiligent製のケーブルとなります。

パソコンで書いたプログラムをUSB経由で簡単にFPGAに転送することが可能です。

 

今回使用したケーブルに関しては下記記事で詳細に紹介しています。

XilinxをJTAG-USBケーブルで書き込み!JTAG-HS2を試してみた

XilinxをJTAG-USBケーブルで書き込み!JTAG-HS2を試してみた
JTAG-HS2を使ってXilinxのFPGAにプログラムを書き込んでみました。 従来の純正のダウンロードケーブルより、小型で非常に使いやすいです。 JTAG-USBケーブルを使ったFPGAへの書き込み方法を分かりやすく紹介します。

 

JTAGでFPGAに書き込みする

FPGAとJTAGケーブルの通信をロジアナで解析します。

JTAGケーブルを使う上での注意点ですがピン配置は確認しましょう。

今回のテストでも「FPGA評価ボード」と「JTAGケーブル」のピン配置が異なっていました。

 

今回使用したFPGAの評価ボードに関しては下記記事で紹介しています。

XilinxのFPGAの評価ボードを購入してみた。Spartan7に入門!

XilinxのFPGAの評価ボードを購入してみた。Spartan7に入門!
XilinxのFPGA評価ボードを購入して動かしてみました。 最新のSpartan-7が搭載されて、カメラやHDMIと多くのIFと接続できるボードです。 開発環境の構築からFPGAの書き込み方法まで分かりやすく紹介します。

 

必要に応じてジャンパーで接続して対応します。

市販の電子工作セットに入っているジャンパーでも通信できました

 

ロジックアナライザでJTAGを解析する

ロジックアナライザ(ロジアナ)でJTAGを解析していきます。

ロジアナの端子にJTAGの信号線4本とGNDを接続しています。

 

ロジアナの使い方に関しては下記記事で紹介しています。(リンク先はこちら)

ロジアナの使い方!USB接続で簡単に信号解析

ロジアナの使い方!USB接続で簡単に信号解析
ロジックアナライザ(ロジアナ)の使い方をまとめてみました。 1000円程度の個人のロジアナで、簡単に信号解析が可能になります。 I2C、SPI、UARTなど多くの波形測定・解析した事例を紹介します。

 

ブレッドボード経由でJTAGの信号線(TDI,TDO,TCK,TMS)をロジアナと繋げます。

JTAGの周波数を落とせばブレッドボード経由でも十分に測定可能です。

 

テスト時の全体像(FPGA⇔JTAGケーブル⇔ロジアナ)としては下記形です。

ジャンパーケーブルも増えるので各信号線で色分けした方が良いと思います。

 

JTAGの通信速度を変更する

JTAGの通信速度をデフォルト設定から変更します。

理由は今回のロジアナのサンプリングレートが最大24MHzで正確に測定出来ないためです。

現実的に波形として測定できるのは数MHz程度までとなります。

 

XilinxのJTAGケーブルの自動設定

最近のJTAGケーブルだとデフォルト(自動)設定で10~20MHzになるので注意が必要です。

XilinxのJTAG-HS2のデフォルト設定(AutoConnect)では10MHzになるようです。

 

実際に自動設定(Auto Connect)した際のログは下記形です。

JTAGのクロックのログは残っていませんでした。

 

実際にJTAGのクロックを10MHzでロジアナにて確認すると、正確に測定出来ませんでした。

本来クロックとして一定の方形波になる箇所が適切にサンプリングできていません。

 

JTAGのクロックを変更する

JTAGのクロック(速度)を変更します。

10MHz→1MHzにすると十分にサンプリングが取れて、正確に測定出来ました。

 

JTAGのクロックはFPGAを書き込む際の設定で変更できます。

「PROGRAM AND DEBUG」の箇所で「Open New Target」を選択します。

※普段は「Auto Connect」を選択している箇所です。

 

フローを進めていくと「JTAG Clock Frequency」を選択できる箇所があります。

ここで1MHz(1000000Hz)に設定しました。

 

1MHzに設定した際のログが下記です。

6行目辺りで周波数のパラメータが1000000に設定していることが分かります。

 

JTAGのプロトコルをロジアナで確認する

ロジアナのJTAGの設定も簡単です。ロジアナのソフトを起動します。

今回はSigrokというフリーソフトを使っています。

 

ロジアナのデコード設定をJTAGにする

Sigrokを開いたら、デコード設定のボタンをクリックします。

一覧からJTAGを選択すれば、自動的にロジアナがプロトコルを解析してくれます。

※Debug/traceの項目にJTAGがあります

 

JTAGのピンアサインをロジアナに割り振ります

JTAGのデコード箇所をクリックすると、JTAGの信号を割り振ることができます。

 

ロジアナに接続した各JTAGの信号(TDI,TDO,TCK,TMS)を設定します。

今回はCH0_TDI、CH1_TDO、CH2_TCK、CH3_TMSとしています。

 

あとはサンプルレートとレコード長を合わせて測定するだけです。

サンプルレートは最大の24MHzにして、レコード長は50M samples以上を選んでいます。

 

冒頭でも紹介しましたが、実際にJTAG通信を解析した動画です。

未接続・接続中・書き込みの各タイミングでJTAGの波形を確認しています。

JTAGの信号を解析!ロジックアナライザで測定してみた

 

JTAG回路のプルアップを確認する

最初はFPGAを「電源ON」のみの状態で測定しました。

※JTAGケーブルには配線していますが、まだ何も設定していない状態です。

 

測定するとTDI,TDO,TCK,TMSの全てのJTAG信号が「Hi(1)」でした。

JTAG回路の信号はプルアップされていることが分かります。

 

JTAG接続した波形を確認する

FPGAにJTAG接続した状態をロジアナで測定します。

但し、プログラムは書き込んでいない(アイドル)状態です

先述したように今回はJTAGのクロックは1MHzで接続しています。

 

秒単位の長い時間帯域でみると下記のような波形となります。

基本的にはIDLE状態ですが、一定間隔(約65ms)で通信していました。

 

一定間隔で通信しているブロックを見ると、更に何個かのブロックに分かれています。

一連の塊で約1.6ms程でした。

 

一定間隔のブロックの先頭箇所をアップすると下記形です。

TCKを基準に、他TDI,TDO,TMSが動作しています。

 

JTAGの周波数を確認する

JTAGのクロック(周波数)であるTCKが設定した値になっていることを確認します。

TCKの周波数1MHz(周期1us)であることを測定出来ました。

 

JTAGのステートを確認する

全てのJTAG(TAPコントローラ)のステートは難しいですが、部分的にでも確認していきます。

TMS信号はステートの状態遷移に使われます。

最初にTMS信号が入ってリセットがかかる箇所を中心に確認していきます。

 

JTAG(TAPコントローラ)のステートに関しては下記PDFを参考にさせていただきました。

Xilinx様にはこの場を借りてお礼を申し上げます。

 https://japan.xilinx.com/support/documentation/application_notes/j_xapp069.pdf

 

Run-Test-Idle

TMSがLow(0)が続く場合、「Run-Test-Idle」のアイドル状態が維持されています。

TMSをHi(1)にすることでステートが遷移することを確認出来ました。

 

Test-Logic-Reset

TMSをHi(1)後に「Select-DR-Scan」「Select-IR-Scan」に移行しています。

その後「Test-Logic-Reset」のステートに遷移してリセットをしています。

(仕様通りに)TCKの5回分、TMSがHi(1)を維持していることを確認できました。

 

SHIFR-DR

リセットが終わった後は、再度TMSが動きます。

「Run-Test-Idle」「Select-DR-Scan」「Capture-DR」の順でステートが遷移しています。

そして「SHIFT-DR」でTMSはLow(0)を維持して、データが入出力されています。

 

他にも多くのステート・状態遷移があります。(全16ステート)

今回紹介したのはあくまで、ほんの一部であることをご了承下さい。

 

JTAG書き込み中の波形を確認する

FPGAにプログラムを書き込んでいる際にJTAGの波形を確認します。

Xilinxの開発環境(Vivado)からプログラムします。

 

書き込み前(アイドル中)は一定間隔でしかJTAG波形が確認されませんでした。

しかし、プログラム書き込み中はTCK(クロック)が常に動きデータが入出力されています。

 

まとめ

今回はJTAGの波形に関して紹介させていただきました。

記事をまとめますと下記になります。

TMS信号により、JTAG通信のステートが切り替わります
JTAG通信が未接続・通信中・書き込み中で波形は変わります
ロジアナでJTAG通信は簡単に解析可能です

 

ロジアナは1000円程度で購入可能です。

今回のJTAG含めて多くの通信インターフェースで測定・解析が可能です。

よろしければ皆さまも是非試してみてください

コメント