Upload
kenta-ida
View
448
Download
1
Embed Size (px)
Citation preview
PYNQ単体で UIを表示してみるPYNQまつり2017/03/04
Kenta IDA (@ciniml)
自己紹介
•Kenta IDA (@ciniml)•仕事•組み込みソフト (~2017/01)• FPGA(2017/02~)• Vivado HLS書き始めました
•使用言語: C#, C++, VHDL, 仕方なく CPYNQ単体で UIを表示してみる 2017/3/4
PYNQの HDMIまわり
PYNQ単体で UIを表示してみる
•HDMIから入力•入力したフレームを編集•図形を描画するなど
•HDMIへ出力
→画像処理結果の表示などに便利2017/3/4
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
図形の描画
PYNQ単体で UIを表示してみる
•用意されていない•フレームバッファ直接アクセス
•主に HDMI入力に処理をするのが目的•簡単な GUIつくるのも割と面倒な感じ• X動かない。
→X動くようにしよう。2017/3/4
PYNQの HDMI処理部
PYNQ単体で UIを表示してみる
•video sub block•HDMIの信号解析• TMDSポート
•HDMIの信号生成• TMDS1ポート (名前雑… )
•フレームバッファアクセス• M00_AXI (AXI4 Master)
2017/3/4
PYNQの HDMI処理部内部構成
PYNQ単体で UIを表示してみる 2017/3/4
HDMI入力
HDMI信号生成
クロック生成
タイミング信号生成
フレームバッファアクセス
HDMI出力に必要なモジュール
PYNQ単体で UIを表示してみる
• HDMI信号生成• 特に設定する項目はない、というかCPUにつながってない• データを流せば動く
• クロック生成 (axi_dynclk_0)• タイミング信号生成 (v_tc_0)• 出力したい画面の解像度に応じた設定が必要
• フレームバッファアクセス (axi_vdma_0)• 確保したフレームバッファを使うように設定が必要
→これらのモジュールを設定して使うドライバを作ればよい
2017/3/4
フレームバッファドライバの作成
PYNQ単体で UIを表示してみる
•Xilinxのリポジトリから Linuxカーネルソース取得• v2016.2-sdsoc •ちょっとバージョン違うかも?
•drivers/video/fbdev 以下に FBドライバのコード• FPGAマガジンNo.12の特集を参考に新しいコードを追加• simplefb.c 、 PYNQのHDMIモジュールのコードも参照
2017/3/4
フレームバッファドライバの作成 (2)
PYNQ単体で UIを表示してみる
•PYNQの HDMIドライバの設定を解析• Jupiter上で各モジュールのレジスタを読みだし• PYNQのソースコードを読む• Python/pynq/_pynq以下にドライバのコードあり• _pynq/src/video_display.c• bspディレクトリ以下にレジスタのオフセット定義
2017/3/4
フレームバッファドライバの作成 (3)
PYNQ単体で UIを表示してみる
•PYNQのHDMIドライバの設定を解析• Xilinxの IPはドキュメントあり• Video Timing Controller• AXI VDMA
• Digilentの IPにはない。→コード見るしかない• dynclk
• AXI-Lite経由で動的に設定変更可能なクロックジェネレータ• Video Timing Controller用のクロック生成• PLLのフィルタ係数とかドライバのソースコード上に定義されてる模様
2017/3/4
使用例 1:PLで計算結果の表示
PYNQ単体で UIを表示してみる
•X上の GUIから独自 overlayのモジュールを使用• bitreversal(ビット反転 )モジュール•入力した 32bit値のビット順序を反転• e.g. 11010 -> 01011
2017/3/4
使用例 1:PLで計算結果の表示
PYNQ単体で UIを表示してみる 2017/3/4
使用例 1:PLで計算結果の表示
PYNQ単体で UIを表示してみる 2017/3/4
動画
PYNQ単体で UIを表示してみる 2017/3/4
使用例 1:PLで計算結果の表示
PYNQ単体で UIを表示してみる
•一応 Pythonから PLにアクセスしている•これだけだとあまり PYNQっぽくない
2017/3/4
使用例 2:PLの描画調整
PYNQ単体で UIを表示してみる
•X上の GUIで指定した位置に PLのモジュールで描画•モジュールのレジスタに描画先の座標を設定•モジュールが AXI Streamに割り込んで対象ピクセルの値を置換
2017/3/4
rectangularoverlay
AXIVDMA
AXISto Video Out
指定した矩形範囲のピクセルなら
設定した色に置き換える
使用例 2:実装
PYNQ単体で UIを表示してみる 2017/3/4
AXIVDMA
AXISto Video Out
rectangularoverlay
AXIVDMA
AXISto Video Out
変更前
変更後
ピクセルデータ(AXI Stream)
使用例 2:実装
PYNQ単体で UIを表示してみる
•X上の GUIで指定した位置に PLのモジュールで描画
2017/3/4
Window on PYNQ
指定した矩形範囲のピクセルなら設定した色に置き換える
(波形表示とか )
buttonbutton
Text
Text
Text
Text
使用例 2:実装
PYNQ単体で UIを表示してみる
•X上の GUIで指定した位置に PLのモジュールで描画
2017/3/4
Window on PYNQ
指定した矩形範囲のピクセルなら設定した色に置き換える
(波形表示とか )
buttonbutton
Text
Text
Text
Text
左上座標
幅
高さ
使用例 2:利点
PYNQ単体で UIを表示してみる
•PS(CPU)を使うことなく画面更新•単にストリームに割り込んでいるだけ
•Pythonの既存 UIライブラリを使用可能•マウスのイベント処理とかやりたくない。
2017/3/4
rectangularoverlay
AXIVDMA
AXISto Video Out
指定した矩形範囲のピクセルなら
設定した色に置き換える
動画
PYNQ単体で UIを表示してみる
•…はありません。• Vivado HLSで適当に書いてみたが間に合わなかった• Co-SIM結果はよさげだったけど…
•実装してパッケージ化するところまで行きたい
2017/3/4
まとめ
PYNQ単体で UIを表示してみる
•とりあえず PYNQの base overlayでフレームバッファ使用可能•ドライバのソースは整理して後日公開
• Jupyter Notebookはデバッグにも便利•PYNQらしく PLを有効活用するのはもう少し先•できたらパッケージ作りたい
2017/3/4