« VivadoとUltraScale+との間の通信を解析 | トップページ | VivadoとUltraScale+との間の通信を解析(2) »

2018.11.03

Ultra96(UltraZed)実践勉強会に参加しました

今日はUltra96実践勉強会に参加してきました。

DisplayPortをベアメタルで動かすというチームになりました。

考えるだけでも複雑そうなテーマなのですが、いろいろ触ってわかったことは、

  • ひでみさんやikwzmさんのLinux、デフォルトのLinuxでは、Linux起動時にDisplayPortは有効になっている
  • U-Bootの時点ではDisplayPortは有効ではない
  • PLにJTAGで書き込んでいる最中でもDisplayPortは表示され続けている

ということでした。

このことから、

  • DisplayPortは、Linuxのドライバによってレジスタが初期化され、設定されて、動作するようになっている
  • PLの力を借りず、PSだけで動ける

ということがわかります。

LinuxのドライバでDisplayPortっぽいものは、

  • /linux-xlnx/drivers/gpu/drm/xlnx/zynqmp_disp.c
  • /linux-xlnx/drivers/gpu/drm/xlnx/zynqmp_dp.c
  • /linux-xlnx/drivers/gpu/drm/xlnx/zynqmp_dpsub.c
  • /linux-xlnx/drivers/gpu/drm/xilinx/xilinx_drm_drv.c
  • /linux-xlnx/drivers/gpu/drm/xilinx/xilinx_drm_dp.c
  • /linux-xlnx/drivers/gpu/drm/xilinx/xilinx_drm_dp_sub.c

があります。

xilinxと書かれたほうのフォルダは2014年ごろのファイルなので、Kintex-7とLogiCOREを使ってDisplayPortを実現していたもので、xlnxになっているほうがおそらくZYNQMPのものだと思われました。

ただ、それでも3000行くらいあるし、解析して、プログラムのエッセンシャルな部分を抜き出して短い時間内にデモプログラムを仕上げるのは無理そうです。

そんなとき、小林さんが教えてくれたのが、AR# 71416「2018.1/2 Zynq UltraScale+ MPSoC: ベアメタル DPDMAP のサンプルをシングル レーンの DisplayPort でコンフィギュレーションできるようにする方法」

https://japan.xilinx.com/support/answers/71416.html

というものです。

ここに載っている方法を使って、DisplayPortがあっさり動きました。(私のUltra96ではboot.binの作り方が悪くてうまくいきませんでしたが、いずれ再挑戦します)

ただ、画面が黒一色なので、AXI StreamかDPDMAを使って何かの画像を送り込んでやらねばならないのだと思います。

ZYNQMPはGPUを積んでいるはずですが、Linuxの文字の表示がZYNQ7000と大して変わらないのが気になっていました。

ZYNQMPのLinuxでも、フレームバッファを作っておいて、フレームバッファからDisplayPortコントローラへDMDMAして表示しているのではないかと思われます。

機会があれば、

  • /linux-xlnx/drivers/dma/xilinx/zynqmp_dma.c

あたりを読んでみようかと思います。

いろいろな人と話ながらFPGAが触れて、とても楽しかったです。

|

« VivadoとUltraScale+との間の通信を解析 | トップページ | VivadoとUltraScale+との間の通信を解析(2) »

コメント

コメントを書く



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




« VivadoとUltraScale+との間の通信を解析 | トップページ | VivadoとUltraScale+との間の通信を解析(2) »