23
PYNQ 単 UI 単単単単単単単 PYNQ 単単単 2017/03/04 Kenta IDA (@ciniml)

PYNQ単体でUIを表示してみる(PYNQまつり)

Embed Size (px)

Citation preview

Page 1: PYNQ単体でUIを表示してみる(PYNQまつり)

PYNQ単体で UIを表示してみるPYNQまつり2017/03/04

Kenta IDA (@ciniml)

Page 2: PYNQ単体でUIを表示してみる(PYNQまつり)

自己紹介

•Kenta IDA (@ciniml)•仕事•組み込みソフト (~2017/01)• FPGA(2017/02~)• Vivado HLS書き始めました

•使用言語: C#, C++, VHDL, 仕方なく CPYNQ単体で UIを表示してみる 2017/3/4

Page 3: PYNQ単体でUIを表示してみる(PYNQまつり)

PYNQの HDMIまわり

PYNQ単体で UIを表示してみる

•HDMIから入力•入力したフレームを編集•図形を描画するなど

•HDMIへ出力

→画像処理結果の表示などに便利2017/3/4

Page 4: PYNQ単体でUIを表示してみる(PYNQまつり)

HDMIからの出力方法

PYNQ単体で UIを表示してみる

•出力用にHDMI初期化hdmi = HDMI('out')hdmi.mode(0) # [email protected]()

•フレーム取得 ,編集 ,設定hdmi = hdmi.frame(0)frame[x,y] = (0, 255, 255) #ピクセル設定hdmi.frame(0, frame)

2017/3/4

Page 5: PYNQ単体でUIを表示してみる(PYNQまつり)

図形の描画

PYNQ単体で UIを表示してみる

•用意されていない•フレームバッファ直接アクセス

•主に HDMI入力に処理をするのが目的•簡単な GUIつくるのも割と面倒な感じ• X動かない。

→X動くようにしよう。2017/3/4

Page 6: PYNQ単体でUIを表示してみる(PYNQまつり)

PYNQの HDMI処理部

PYNQ単体で UIを表示してみる

•video sub block•HDMIの信号解析• TMDSポート

•HDMIの信号生成• TMDS1ポート (名前雑… )

•フレームバッファアクセス• M00_AXI (AXI4 Master)

2017/3/4

Page 7: PYNQ単体でUIを表示してみる(PYNQまつり)

PYNQの HDMI処理部内部構成

PYNQ単体で UIを表示してみる 2017/3/4

HDMI入力

HDMI信号生成

クロック生成

タイミング信号生成

フレームバッファアクセス

Page 8: PYNQ単体でUIを表示してみる(PYNQまつり)

HDMI出力に必要なモジュール

PYNQ単体で UIを表示してみる

• HDMI信号生成• 特に設定する項目はない、というかCPUにつながってない• データを流せば動く

• クロック生成 (axi_dynclk_0)• タイミング信号生成 (v_tc_0)• 出力したい画面の解像度に応じた設定が必要

• フレームバッファアクセス (axi_vdma_0)• 確保したフレームバッファを使うように設定が必要

→これらのモジュールを設定して使うドライバを作ればよい

2017/3/4

Page 9: PYNQ単体でUIを表示してみる(PYNQまつり)

フレームバッファドライバの作成

PYNQ単体で UIを表示してみる

•Xilinxのリポジトリから Linuxカーネルソース取得• v2016.2-sdsoc •ちょっとバージョン違うかも?

•drivers/video/fbdev 以下に FBドライバのコード• FPGAマガジンNo.12の特集を参考に新しいコードを追加• simplefb.c 、 PYNQのHDMIモジュールのコードも参照

2017/3/4

Page 10: PYNQ単体でUIを表示してみる(PYNQまつり)

フレームバッファドライバの作成 (2)

PYNQ単体で UIを表示してみる

•PYNQの HDMIドライバの設定を解析• Jupiter上で各モジュールのレジスタを読みだし• PYNQのソースコードを読む• Python/pynq/_pynq以下にドライバのコードあり• _pynq/src/video_display.c• bspディレクトリ以下にレジスタのオフセット定義

2017/3/4

Page 11: PYNQ単体でUIを表示してみる(PYNQまつり)

フレームバッファドライバの作成 (3)

PYNQ単体で UIを表示してみる

•PYNQのHDMIドライバの設定を解析• Xilinxの IPはドキュメントあり• Video Timing Controller• AXI VDMA

• Digilentの IPにはない。→コード見るしかない• dynclk

• AXI-Lite経由で動的に設定変更可能なクロックジェネレータ• Video Timing Controller用のクロック生成• PLLのフィルタ係数とかドライバのソースコード上に定義されてる模様

2017/3/4

Page 12: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 1:PLで計算結果の表示

PYNQ単体で UIを表示してみる

•X上の GUIから独自 overlayのモジュールを使用• bitreversal(ビット反転 )モジュール•入力した 32bit値のビット順序を反転• e.g. 11010 -> 01011

2017/3/4

Page 13: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 1:PLで計算結果の表示

PYNQ単体で UIを表示してみる 2017/3/4

Page 14: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 1:PLで計算結果の表示

PYNQ単体で UIを表示してみる 2017/3/4

Page 15: PYNQ単体でUIを表示してみる(PYNQまつり)

動画

PYNQ単体で UIを表示してみる 2017/3/4

Page 16: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 1:PLで計算結果の表示

PYNQ単体で UIを表示してみる

•一応 Pythonから PLにアクセスしている•これだけだとあまり PYNQっぽくない

2017/3/4

Page 17: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 2:PLの描画調整

PYNQ単体で UIを表示してみる

•X上の GUIで指定した位置に PLのモジュールで描画•モジュールのレジスタに描画先の座標を設定•モジュールが AXI Streamに割り込んで対象ピクセルの値を置換

2017/3/4

rectangularoverlay

AXIVDMA

AXISto Video Out

指定した矩形範囲のピクセルなら

設定した色に置き換える

Page 18: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 2:実装

PYNQ単体で UIを表示してみる 2017/3/4

AXIVDMA

AXISto Video Out

rectangularoverlay

AXIVDMA

AXISto Video Out

変更前

変更後

ピクセルデータ(AXI Stream)

Page 19: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 2:実装

PYNQ単体で UIを表示してみる

•X上の GUIで指定した位置に PLのモジュールで描画

2017/3/4

Window on PYNQ

指定した矩形範囲のピクセルなら設定した色に置き換える

(波形表示とか )

buttonbutton

Text

Text

Text

Text

Page 20: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 2:実装

PYNQ単体で UIを表示してみる

•X上の GUIで指定した位置に PLのモジュールで描画

2017/3/4

Window on PYNQ

指定した矩形範囲のピクセルなら設定した色に置き換える

(波形表示とか )

buttonbutton

Text

Text

Text

Text

左上座標

高さ

Page 21: PYNQ単体でUIを表示してみる(PYNQまつり)

使用例 2:利点

PYNQ単体で UIを表示してみる

•PS(CPU)を使うことなく画面更新•単にストリームに割り込んでいるだけ

•Pythonの既存 UIライブラリを使用可能•マウスのイベント処理とかやりたくない。

2017/3/4

rectangularoverlay

AXIVDMA

AXISto Video Out

指定した矩形範囲のピクセルなら

設定した色に置き換える

Page 22: PYNQ単体でUIを表示してみる(PYNQまつり)

動画

PYNQ単体で UIを表示してみる

•…はありません。• Vivado HLSで適当に書いてみたが間に合わなかった• Co-SIM結果はよさげだったけど…

•実装してパッケージ化するところまで行きたい

2017/3/4

Page 23: PYNQ単体でUIを表示してみる(PYNQまつり)

まとめ

PYNQ単体で UIを表示してみる

•とりあえず PYNQの base overlayでフレームバッファ使用可能•ドライバのソースは整理して後日公開

• Jupyter Notebookはデバッグにも便利•PYNQらしく PLを有効活用するのはもう少し先•できたらパッケージ作りたい

2017/3/4