« UltraScale+のJTAG RESETは余分なTCKを必要とする | トップページ | Gitがファイルの日付を管理しない問題を何とかしたい(1) »

2018.11.12

VivadoのJTAG書き込みではPAUSE DRステートを使う

一週間ほど悩んできた、「VivadoからMITOUJTAGを経由してXILINX FPGAに書き込む」というテーマがようやく完成に近づいてきました。

MITOUJTAG(みとうジェイタグ)を使ってターゲットボードとJTAGでつなぎながら、Vivadoから遠隔操作できるようにしようとする計画です。

今日、ついにVivadoからUltraScale+のJTAG書き込みに成功しました。

Vivadomjuscale

いままでうまくいかなかった原因は、Vivadoの書き込みシーケンスがJTAGのPAUSE DRステートというマイナーなステートを使っていたところにありました。

Ultra96ボードへの書き込みは

SDR 44549344 TDI (00000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400000004000000040000000400

というふうに44.5Mバイトのビット列をシフトして送り込むのですが、Vivadoでは1Mbitくらいの単位に区切って複数のSHIFT操作で送り込んでいるのです。

そのときに使われるのがPAUSE_DRというステートです。

Pausedr

PAUSE_DRステートを通ることで長いSHIFT動作を複数のSHIFTに分割したり、SHIFTの途中でダミーのクロックを与えたりすることができるのですが、VivadoがこのPAUSE_DRを使っている理由はわかりません。

DigilentのHSケーブルを使ってVivadoから操作したときにもPAUSE_DRは通っているので、ケーブルの種類によらずPAUSE_DRは使っているようです。

ただ、SVFを出力させたときにはPAUSE_DRを使わないような手順ができるので、PAUSE_DRを使うことはFPGA書き込みの本質ではないものと思われます。

実際の波形を示します。青い線がTMS、黄色がTCKです。TMSが1に上がっているところがPAUSE_DRになっているところです。

最初の波形は、SHIFT_DRを抜けてEXIT1_DRに入るところです。

Exit1dr

最後のパルスでTDOがハイインピーダンスに開放されるのが見えています。

次は、EXIT1_DR、PAUSE_DR、EXIT2_DRを経由してSHIFT_DRへと戻るところです。

Pause

最初の3つのパルスでステートが遷移して、その後の詰まっているクロックの部分がデータのシフトです。

Artix-7でも同様に書き込みができるようになったので、シーケンス的にはこれで問題ないのでしょう。

sun

MITOUJTAG経由でVivadoが使えるメリットは、

  • バウンダリスキャンで端子の状態が見える
  • MITOUJTAGのバウンダリスキャンロジアナで、全端子の状態が波形にできる
  • コンフィギュレーション失敗したときの原因が究明できる
  • Vivadoのロジアナを使って高速信号が見える

など、いいとこどりになるのです。

|

« UltraScale+のJTAG RESETは余分なTCKを必要とする | トップページ | Gitがファイルの日付を管理しない問題を何とかしたい(1) »

コメント

コメントを書く



(ウェブ上には掲載しません)




« UltraScale+のJTAG RESETは余分なTCKを必要とする | トップページ | Gitがファイルの日付を管理しない問題を何とかしたい(1) »