« Ultra96ボードのBOOT.BINを作って起動させてみた | トップページ | トランジスタ技術2018年11月号に掲載されました »

2018.10.09

Ultra96ボードのJTAGバウンダリスキャンができた

Ultra96ボードを使ってZYNQ UltraScale+ MPSoC(以下、ZUと略)のJTAGの仕組みを解明しています。

まず、ZUは本体のPLのJTAGのほか、ARMのDAPや、ダミーのDAPが付いたりして、JTAGチェーンの構成が変わります。JTAGチェーンの構成はおそらくFSBLの中からCSUレジスタを操作することで行われますが、デフォルトのFSBLでは以下のようになります。

Zujtag_1_2

ここで厄介なことが3つあります。JTAGチェーンの構成が変わるたびに、JTAGのTMSを1にして何回かのTCKを与えてTAPをRESETしないといけないことと、JTAGチェーンの構成はソフトで変わることです。そのため、ハードウェアリセットが行われて、PMU→CSU→FSBLと起動のステップが進んだあたりでJTAGをリセットしなければなりません。

また、ZUのARM TAPはJTAGの規格に反してTAP RESET後にDRにIDCODEが現れません。そのため、自動で認識することができないことです。

sun

JTAGを使う汎用的なツールに「MITOUJTAG(みとうジェイタグ)」というのがあります。MITOUJTAGを使うとバウンダリスキャンで端子の状態が見えます。

Ultra96ボードでは以下のように見えます。

Zujtag_2

Ultra96ボードでチカチカ光っているLEDのあたりのピンを見てみます。

Zujtag_3

AB4、AA4、Y5、AA3、AB5番ピンにこれらの端子があります。

ZUでは、普通にバウンダリスキャンでSAMPLEしても、これらの端子の状態は正しく見ることができません。

前の記事で書いたとおり、SAMPLEするときには入力セルから値を読むのが普通なのですが、

Bscan1_2

ZUではなぜか出力セルから入力値が読み込まれるからです。

Bscan2

これは、はっきり言って、ZUのバグだと思います。

しかも、この入力ピンの値が出力セルから読み出される現象は、SAMPLE時のみ発生し、EXTEST時には発生しません。したがって、BSDLファイルの変更では対処できません。

そこで、MITOUJTAGでは、「ZYNQUltraScale+ MPSoCならば、SAMPLE状態のときに、入力セルと出力セルの読み出した値を入れ替える」という方法でこの問題に対処することにしました。

このようにすることで、端子から出力している値と、端子から入力している値を正しく読み出すことに成功しました。

sun

以上の問題を解決し、Ultra96ボードでLinuxが起動する時の波形を見ることに成功しました。

まずは下の波形をご覧ください。

UART0_TXに間欠的に動く波形が出ています。これはコンソールへの文字出力です。

Zujtag_4

起動してから5秒と8秒付近で、それぞれLinuxの起動と、BlueToothとWLANの起動が起こります。このときにMIOのピンの出力状態が変わるのが見てとれます。

Zujtag_5

起動後8秒後くらいというのは、コンソールにこのような文字列が出力されているあたりです。

Zujtag_9

LED0(緑のLED)がチカチカを開始するのが見えています。

Zujtag_6

あと、見て面白いのは起動後8秒付近でUSB1が起動することと、SD1に一瞬だけアクセスすることかなと思います。

Zujtag_7Zujtag_8

sun

UltraScale+のJTAGの仕組みがだいたい解明できました。

ポイントは、

  • CSUやFSBLによってソフト的にJTAGチェーンの構成が変わるので、それに合わせてTAP RESETをしなければならない
  • SAMPLE時の入力セルと出力セルが逆になっている
  • DDR4メモリの端子は見えない(これもチップのバグかもしれない)

MITOUJTAGでは、このような問題に対処するためのUltraScale+用のパッチを提供する用意があります。

|

« Ultra96ボードのBOOT.BINを作って起動させてみた | トップページ | トランジスタ技術2018年11月号に掲載されました »

コメント

コメントを書く



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




« Ultra96ボードのBOOT.BINを作って起動させてみた | トップページ | トランジスタ技術2018年11月号に掲載されました »