SlideShare uma empresa Scribd logo
1 de 23
PYNQ単体でUIを表示してみる
PYNQまつり
2017/03/04
Kenta IDA (@ciniml)
自己紹介
•Kenta IDA (@ciniml)
•仕事
• 組み込みソフト(~2017/01)
• FPGA(2017/02~)
• Vivado HLS書き始めました
•使用言語:C#, C++, VHDL, 仕方なくC
PYNQ単体でUIを表示してみる 2017/3/4
PYNQのHDMIまわり
PYNQ単体でUIを表示してみる
•HDMIから入力
•入力したフレームを編集
• 図形を描画するなど
•HDMIへ出力
→画像処理結果の表示などに便利
2017/3/4
HDMIからの出力方法
PYNQ単体でUIを表示してみる
• 出力用にHDMI初期化
hdmi = HDMI('out')
hdmi.mode(0) # 640x480@60
hdmi.start()
• フレーム取得,編集,設定
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
rectangular
overlay
AXI
VDMA
AXIS
to
Video Out
指定した矩形範囲のピクセルなら
設定した色に置き換える
使用例2:実装
PYNQ単体でUIを表示してみる 2017/3/4
AXI
VDMA
AXIS
to
Video Out
rectangular
overlay
AXI
VDMA
AXIS
to
Video Out
変更前
変更後
ピクセルデータ
(AXI Stream)
使用例2:実装
PYNQ単体でUIを表示してみる
•X上のGUIで指定した位置にPLのモジュールで描画
2017/3/4
Window on PYNQ
指定した矩形範囲のピクセルなら
設定した色に置き換える
(波形表示とか)
button
button
Text
Text
Text
Text
使用例2:実装
PYNQ単体でUIを表示してみる
•X上のGUIで指定した位置にPLのモジュールで描画
2017/3/4
Window on PYNQ
指定した矩形範囲のピクセルなら
設定した色に置き換える
(波形表示とか)
button
button
Text
Text
Text
Text
左上座標
幅
高さ
使用例2:利点
PYNQ単体でUIを表示してみる
•PS(CPU)を使うことなく画面更新
• 単にストリームに割り込んでいるだけ
•Pythonの既存UIライブラリを使用可能
• マウスのイベント処理とかやりたくない。
2017/3/4
rectangular
overlay
AXI
VDMA
AXIS
to
Video Out
指定した矩形範囲のピクセルなら
設定した色に置き換える
動画
PYNQ単体でUIを表示してみる
•…はありません。
• Vivado HLSで適当に書いてみたが間に合わなかった
• Co-SIM結果はよさげだったけど…
• 実装してパッケージ化するところまで行きたい
2017/3/4
まとめ
PYNQ単体でUIを表示してみる
•とりあえずPYNQのbase overlayで
フレームバッファ使用可能
• ドライバのソースは整理して後日公開
•Jupyter Notebookはデバッグにも便利
•PYNQらしくPLを有効活用するのはもう少し先
• できたらパッケージ作りたい
2017/3/4

Mais conteúdo relacionado

Mais procurados

闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
l_b__
 

Mais procurados (20)

よいコード、わるいコード
よいコード、わるいコードよいコード、わるいコード
よいコード、わるいコード
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
Efficient Neural Architecture Search via Parameters Sharing @ ICML2018読み会
Efficient Neural Architecture Search via Parameters Sharing @ ICML2018読み会Efficient Neural Architecture Search via Parameters Sharing @ ICML2018読み会
Efficient Neural Architecture Search via Parameters Sharing @ ICML2018読み会
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
攻略リニアカラー改訂版
攻略リニアカラー改訂版攻略リニアカラー改訂版
攻略リニアカラー改訂版
 
RvizPlugin作成入門
RvizPlugin作成入門RvizPlugin作成入門
RvizPlugin作成入門
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
 
Inside WebM
Inside WebMInside WebM
Inside WebM
 
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
【DL輪読会】GET3D: A Generative Model of High Quality 3D Textured Shapes Learned f...
 
【Unity道場】VectorGraphicsで作る エモい表現
【Unity道場】VectorGraphicsで作る エモい表現【Unity道場】VectorGraphicsで作る エモい表現
【Unity道場】VectorGraphicsで作る エモい表現
 
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroidBinderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 

Destaque

20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
Ryuji Tamagawa
 

Destaque (13)

Presto in my_use_case
Presto in my_use_casePresto in my_use_case
Presto in my_use_case
 
20171012 found IT #9 PySparkの勘所
20171012 found  IT #9 PySparkの勘所20171012 found  IT #9 PySparkの勘所
20171012 found IT #9 PySparkの勘所
 
PYNQ祭りLT todotani
PYNQ祭りLT todotaniPYNQ祭りLT todotani
PYNQ祭りLT todotani
 
Pynq祭り資料
Pynq祭り資料Pynq祭り資料
Pynq祭り資料
 
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
 
PYNQで○○してみた!
PYNQで○○してみた!PYNQで○○してみた!
PYNQで○○してみた!
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
 
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van NiekerkAPACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
 
PYNQ祭り
PYNQ祭りPYNQ祭り
PYNQ祭り
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
 
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
 
20170210 sapporotechbar7
20170210 sapporotechbar720170210 sapporotechbar7
20170210 sapporotechbar7
 
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめコンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめ
 

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

Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
Masashi Shinbara
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方
CData Software Japan
 

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

第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89
 
Adobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみようAdobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみよう
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要
 
XenDesktop / XenAppグラフィック ディープダイブ
XenDesktop / XenAppグラフィック ディープダイブ XenDesktop / XenAppグラフィック ディープダイブ
XenDesktop / XenAppグラフィック ディープダイブ
 
マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方マルチクラウドデータ連携Javaアプリケーションの作り方
マルチクラウドデータ連携Javaアプリケーションの作り方
 
Adobe Premiere Pro CS6 | GY-HMQ10 4K編集
Adobe Premiere Pro CS6 | GY-HMQ10 4K編集Adobe Premiere Pro CS6 | GY-HMQ10 4K編集
Adobe Premiere Pro CS6 | GY-HMQ10 4K編集
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
Riscv+fpga200606
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
 
2018/1/30 Django勉強会
2018/1/30 Django勉強会2018/1/30 Django勉強会
2018/1/30 Django勉強会
 
Deploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipelineDeploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipeline
 
事前準備の手引書
事前準備の手引書事前準備の手引書
事前準備の手引書
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
コミケの取りまとめをしたので
コミケの取りまとめをしたのでコミケの取りまとめをしたので
コミケの取りまとめをしたので
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
 
animation1.0
animation1.0animation1.0
animation1.0
 

Mais de Kenta IDA

Mais de Kenta IDA (12)

M5StackにFPGAをつないでみた
M5StackにFPGAをつないでみたM5StackにFPGAをつないでみた
M5StackにFPGAをつないでみた
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
 
カスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にするカスタムブロックで自作モジュールをUIFlow対応にする
カスタムブロックで自作モジュールをUIFlow対応にする
 
Using SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPythonUsing SORACOM 3G Module From MicroPython
Using SORACOM 3G Module From MicroPython
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かす
 
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるMicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
 
ESP32開発環境まとめ2
ESP32開発環境まとめ2ESP32開発環境まとめ2
ESP32開発環境まとめ2
 
ESP32開発環境まとめ
ESP32開発環境まとめESP32開発環境まとめ
ESP32開発環境まとめ
 
EC2 F1 Virtual JTAG
EC2 F1 Virtual JTAGEC2 F1 Virtual JTAG
EC2 F1 Virtual JTAG
 
PSoC4 BLEで作る簡単無線センサーユニット
PSoC4 BLEで作る簡単無線センサーユニットPSoC4 BLEで作る簡単無線センサーユニット
PSoC4 BLEで作る簡単無線センサーユニット
 
Windows10 IoT CoreとBLE
Windows10 IoT CoreとBLEWindows10 IoT CoreとBLE
Windows10 IoT CoreとBLE
 
おそらく明日から役にたつC++11新機能
おそらく明日から役にたつC++11新機能おそらく明日から役にたつC++11新機能
おそらく明日から役にたつC++11新機能
 

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