« UltraScale+におけるJTAGの扱いが完璧になった | トップページ | HyperFADCを出荷 »

2018.10.18

UltraScale+におけるチップの温度をJTAGで拾ってみた

MITOUJTAGでUltraScale+の温度や電圧が表示されるようにしました。

Zubscan_5

毎秒2回更新します。

JTAGで温度を見る方法はユーザガイドUG580 (v1.9)に書かれているDRPという仕組みを利用します。

簡単に言うと、SYSMON_DRPという命令を使って、読み出したいステータスレジスタのアドレスをセットし、読み出します。

どのようなステータスレジスタがあるかというと、

Zubscan_6

このような感じになっています。

まず、IRにSYSMON_DRPという命令を発行し、次にDRに32bitの値をセットします。

シフトイン値は26bit目を1にし、[25:16]に読み出したいアドレスをセットします。

val = (1 << 26) | (addr << 16) | data;

DRPレジスタに書き込むのでなければdataは0でよいでしょう。

こうして、2回スキャンすると、2回目で目的のレジスタの値が読み出されます。

温度を測る場合は、

rdvalue / 65536. * 509.3140064 - 280.23087870;

で[℃]に変換します。

電圧を測る場合は、

rdvalue / 65536. * 3;

で[V]に変換します。

同じ要領でレジスタ0x10~0x1Fを読み出せば、XADCの値が読み出せると思います。

電源ピン電圧の監視では、HR I/Oでは上記の*3が*6になる場合もあるそうです。

なお、JTAG DRPは、バウンダリスキャンとは排他的です。JTAGのデータレジスタにDRPが接続されているときは、バウンダリスキャンレジスタは切り離されています。

Zubscan_7_2

そのため、MITOUJTAGでは、I/Oの状態を表示している時には温度は出ないようにしました。

Zubscan_8_2

|

« UltraScale+におけるJTAGの扱いが完璧になった | トップページ | HyperFADCを出荷 »

コメント

コメントを書く



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




« UltraScale+におけるJTAGの扱いが完璧になった | トップページ | HyperFADCを出荷 »