« EXPARTAN-6Tの最終出荷 | トップページ | VivadoのJTAG書き込みではPAUSE DRステートを使う »

2018.11.06

UltraScale+のJTAG RESETは余分なTCKを必要とする

VivadoからMITOUJTAGを介してUltraScale+を認識しようとしたとき、リセット後のデバイスを検出できないという問題がありました。

Usjtag1

Digilentケーブルを使っていればこの画面にUltraScale+本体とARM DAPが出てくるのですが、MITOUJTAG経由だと出てきません。

この問題を徹底的に調査しました。

VivadoがUltraScake+を検出するときのJTAGのシーケンスは次のようになっています。
STATE RESET;
SDR 32 TDI (000000FF) TDO (28E20126);
STATE RESET;
SDR 1056 TDI (000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF) TDO (000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE28E20126);
SIR 192 TDI (FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE) TDO (FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0751);
STATE RESET;

ここで、28E20126というのは、UltraScale+のIDCODEを1bit左にシフトさせたもので、これはUltraScale+のDummy DAPが接続されていることに由来します。

まず、VivadoとDigilentのHSケーブルでUltraScale+を認識するところをオシロで見ましたが、MITOUJTAGでも同じシーケンスで出しているはずです。

Scope_6

問題は2回目のSTATE RESETにありました。

JTAGのTAPステートマシンはRESETステートに入るとリセットされるのですが、UltraScale+ではRESETステートで何発かの余分なTCKを与えないといけないのです。

実際にVivadoから送受信されたデータのログを見てみると、

最終送受信データの表示
tms: ff
11111111 01000000 00000000 00000000・・
tdi:
00000000 00001111 11110000 00000000・・
tdo:
11111111 11110110 01001000 00000100・・

と、TMSを1にしたまま、8回ものパルスを与えているのです。

この問題に対処して、RESETステートで複数回のパルスを与えてとどまれるようにしたら、

Usjtag2

ちゃんとリセット後にも2つのデバイスを認識してくれるようになりました。

sun

普通のJTAGデバイスなら、RESETステートを通ってRUNTEST_IDLEに戻るにはTMS=1にしたままTCKに5回のパルスを与えるというのが「常識」ですが、UltraScale+の場合は6回以上のTCKを与えないとうまくいかないのです。

UltraScale+はPLやARM DAPにダミーのものが用意されていて、その切り替えに1クロックかかるからです。

これもまた、UltraScale+の仕様です。バグと言ってもいいと思います。

おそらく、MITOUJTAG以外のJTAGツールでは、SVFを実行してもUltrasScale+は思ったように動作しないでしょう。

sun

また、UltraScale+の動作中にいきなりリセットしても、

Usjtag3_2

一瞬、Not programmedになりますが、Refresh Deviceの操作をすれば元に戻ります。

Usjtag4_2  

場合によっては、Refreshをしなくても勝手に戻ります。

Usjtag5

これで、VivadoからMITOUJTAG経由でJTAGアクセスするということが、ほぼ完璧にできるようになりました。

|

« EXPARTAN-6Tの最終出荷 | トップページ | VivadoのJTAG書き込みではPAUSE DRステートを使う »

コメント

コメントを書く



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




« EXPARTAN-6Tの最終出荷 | トップページ | VivadoのJTAG書き込みではPAUSE DRステートを使う »