SlideShare a Scribd company logo
1 of 16
Download to read offline
1
PYNQ で Pmod に搭載したカメラ画像を
リアルタイムで FASTX コーナー検出
marseeこと小野雅晃
2
自己紹介
● 定年間近の大学の技術職員
● 11 年前から「 FPGA の部屋」のブログを書いています
– http://marsee101.blog19.fc2.com/
● 今のところ 3735 記事
● FPGA やそのツール、日記も書いています
● 爺さんなので早起きです
– 午前 3 時か 4 時ころ起きてブログを書いています
3
今日の発表
● PYNQ に CMOS カメラを付けて芸をさせました
– FASTX コーナー検出( OpenCV )
– ラプラシアンフィルタ
– アンシャープ・マスクキング・フィルタ
● 今のところベアメタル・アプリケーション
– Python で動かすのに失敗しています
● 誰か教えて。。。
4
CMOS カメラ
● MT9D111 (日昇テクノロジー)
– 1,600 x 1,200 ピクセル( UXGA ) 15 fps
– preview mode 800 x 600 (SVGA) 30 fps (使用中)
– MotionJPEG
– パラレル・インターフェース
– レジスタがたくさん、 6 万個くらい
– NDA があってレジスタの使い方がよくわからない?
● PMOD x 2 とのインターフェース基板は自作
– KiCAD で基板のデータを作製
– 実は ZedBoard 用
5
写真
6
● USB カメラとの比較
● USB カメラはつなぐの簡単
– USB ポートにつないでソフトを入れれば OK
● PMOD につけるカメラ
– つなぐためにはハンダ付けが必要
– インターフェース基板を設計する手間
● 利点
– インターフェースを作ればハードウェア処理が簡単にでき
る
– フィルタをカメラのピクセルデータの取り込みデータパス
に入れればメモリ帯域を使用しない
7
PYNQ ボード用 Vivado のブロックデザイン
カメラ
D
D
R
camera interface
switch
switch
DMAC
FASTX
laplacian filter
unsharp masking
filter
8
USB カメラを CPU で使用する場合
USB
カメラ
CPU
カメラ画像
フィルタ処理後の画像
DDR SDRAM
9
高位合成ツールを使用して各フィルタ IP を作成
( Vivado HLS )
● C 、 C++ 、 SystemC から HDL を合成し IP へ
● 関数の引数がプラグマ 1 つでいろいろなインター
フェースを実装
– Vivado HLS の独自インターフェース
– AXI4-Lite Slave
– AXI4 Master
– AXI4-Stream
10
Vivado HLS について
● C, C++ で書くと HDL に変換され IP 化(無料、ただしデバイス
限定)
● pragma で動作やインターフェースなどを指定する必要がある
● 今のところ、ハードウェアを知らないと性能が出ない
● 合成済みライブラリ
– hls_math ライブラリ( atan, sin, cos, log, log10, sqrt など)
– HLS ビデオライブラリ( OpenCV の一部をサポート)
– FFT や FIR 、線形代数ライブラリ( cholesky)
– HLS DSP ライブラリ( SDR アプリケーション)
11
Vivado HLS の OpenCV 対応ライブラリ関数
AXIvideo2cvMat AXIvideo2CvMat AXIvideo2IplImage cvMat2AXIvideo CvMat2AXIvideo
cvMat2hlsMat CvMat2hlsMat CvMat2hlsWindow hlsMat2cvMat hlsMat2CvMat
hlsMat2IplImage hlsWindow2CvMat IplImage2AXIvideo IplImage2hlsMat
AXIvideo2Mat Mat2AXIvideo Array2Mat Array2Mat
ビデオプロセッシング
AbsDiff AddWeighted And Avg AvgSdv
Cmp CmpS CornerHarris CvtColor Dilate
Duplicate EqualizeHist Erode FASTX Filter2D
GaussianBlur Harris HoughLines2 Integral InitUndistortRectifyMap
Max MaxS Mean Merge Min
MinMaxLoc MinS Mul Not PaintMask
PyrDown PyrUp Range Remap Reduce
Resize Set Scale Sobel Split
SubRS SubS Sum Threshold Zero
OpenCVインタフェース
AXIインターフェース
「Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2016.4) 2016 年 11 月 30 日」参照
https://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2016_4/ug902-vivado-hig
h-level-synthesis.pdf
12
宣伝
● FPGA マガジン No.14, No.15, No.16, … で Vivado
HLS の使い方を書いています
● HDL ではなく C 、 C++ でお手軽にフィルタ IP などを
書いてみませんか?
● HDL も必要ですが、 C で書いた方が 10 倍くらい書く
時間が短いです
● 皆さんも高位合成ツールを使ってみませんか?
13
デモ
● FASTX コーナー検出
● ラプラシアンフィルタ
● アンシャープ・マスキング・フィルタ
14
FASTX コーナー検出( theshold = 5 )
15
ラプラシアンフィルタ
16
アンシャープ・マスキング・フィルタ

More Related Content

What's hot

OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
 
マルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCLマルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCL
maruyama097
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
 
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS) GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
智啓 出川
 
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
智啓 出川
 
2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造
2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造
2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造
智啓 出川
 

What's hot (20)

PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
 
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
 
マルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCLマルチコアのプログラミング技法 -- OpenCLとWebCL
マルチコアのプログラミング技法 -- OpenCLとWebCL
 
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
 
Linux KVM のコードを追いかけてみよう
Linux KVM のコードを追いかけてみようLinux KVM のコードを追いかけてみよう
Linux KVM のコードを追いかけてみよう
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
 
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS) GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
GPGPU Seminar (GPU Accelerated Libraries, 1 of 3, cuBLAS)
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
 
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
 
(公開版)Reconf研2017GUINNESS
(公開版)Reconf研2017GUINNESS(公開版)Reconf研2017GUINNESS
(公開版)Reconf研2017GUINNESS
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
 
Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)Vivado hls勉強会3(axi4 lite slave)
Vivado hls勉強会3(axi4 lite slave)
 
2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造
2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造
2015年度GPGPU実践基礎工学 第10回 GPUのプログラム構造
 

Viewers also liked

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

Viewers also liked (12)

[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祭り資料
Pynq祭り資料Pynq祭り資料
Pynq祭り資料
 
Presto in my_use_case
Presto in my_use_casePresto in my_use_case
Presto in my_use_case
 
PYNQで○○してみた!
PYNQで○○してみた!PYNQで○○してみた!
PYNQで○○してみた!
 
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 祭り: 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
 
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のすすめ
 

Similar to Pynqでカメラ画像をリアルタイムfastx コーナー検出

もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
Yasumasa Suenaga
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 

Similar to Pynqでカメラ画像をリアルタイムfastx コーナー検出 (20)

研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
Fpgax20170924
Fpgax20170924Fpgax20170924
Fpgax20170924
 
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual BoothsChipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
Chipyardによるベイズニューラルネットワーク向け学習アクセラレータ開発 @ RISC-V Day Tokyo 2020 Virtual Booths
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料
 
Myoshimi extreme
Myoshimi extremeMyoshimi extreme
Myoshimi extreme
 
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリーム
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
 
Riscv+fpga200606
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
Mt basic as-os_on_danbot
Mt basic as-os_on_danbotMt basic as-os_on_danbot
Mt basic as-os_on_danbot
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
なにわTech20160827
なにわTech20160827なにわTech20160827
なにわTech20160827
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
機械学習 / Deep Learning 大全 (6) Library編
機械学習 / Deep Learning 大全 (6) Library編機械学習 / Deep Learning 大全 (6) Library編
機械学習 / Deep Learning 大全 (6) Library編
 
Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御する
 
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
 

More from marsee101

More from marsee101 (12)

Robot car gabor_filter
Robot car gabor_filterRobot car gabor_filter
Robot car gabor_filter
 
Ultra96 pmod expansion board
Ultra96 pmod expansion boardUltra96 pmod expansion board
Ultra96 pmod expansion board
 
Camera input from_ultra_96's_slow_expansion_connector
Camera input from_ultra_96's_slow_expansion_connectorCamera input from_ultra_96's_slow_expansion_connector
Camera input from_ultra_96's_slow_expansion_connector
 
Fpga robot car
Fpga robot carFpga robot car
Fpga robot car
 
FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
 
FPGAの部屋、slide share、xilinxツールのご紹介
FPGAの部屋、slide share、xilinxツールのご紹介FPGAの部屋、slide share、xilinxツールのご紹介
FPGAの部屋、slide share、xilinxツールのご紹介
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能について
 
Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識
Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識
Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
 

Pynqでカメラ画像をリアルタイムfastx コーナー検出

  • 1. 1 PYNQ で Pmod に搭載したカメラ画像を リアルタイムで FASTX コーナー検出 marseeこと小野雅晃
  • 2. 2 自己紹介 ● 定年間近の大学の技術職員 ● 11 年前から「 FPGA の部屋」のブログを書いています – http://marsee101.blog19.fc2.com/ ● 今のところ 3735 記事 ● FPGA やそのツール、日記も書いています ● 爺さんなので早起きです – 午前 3 時か 4 時ころ起きてブログを書いています
  • 3. 3 今日の発表 ● PYNQ に CMOS カメラを付けて芸をさせました – FASTX コーナー検出( OpenCV ) – ラプラシアンフィルタ – アンシャープ・マスクキング・フィルタ ● 今のところベアメタル・アプリケーション – Python で動かすのに失敗しています ● 誰か教えて。。。
  • 4. 4 CMOS カメラ ● MT9D111 (日昇テクノロジー) – 1,600 x 1,200 ピクセル( UXGA ) 15 fps – preview mode 800 x 600 (SVGA) 30 fps (使用中) – MotionJPEG – パラレル・インターフェース – レジスタがたくさん、 6 万個くらい – NDA があってレジスタの使い方がよくわからない? ● PMOD x 2 とのインターフェース基板は自作 – KiCAD で基板のデータを作製 – 実は ZedBoard 用
  • 6. 6 ● USB カメラとの比較 ● USB カメラはつなぐの簡単 – USB ポートにつないでソフトを入れれば OK ● PMOD につけるカメラ – つなぐためにはハンダ付けが必要 – インターフェース基板を設計する手間 ● 利点 – インターフェースを作ればハードウェア処理が簡単にでき る – フィルタをカメラのピクセルデータの取り込みデータパス に入れればメモリ帯域を使用しない
  • 7. 7 PYNQ ボード用 Vivado のブロックデザイン カメラ D D R camera interface switch switch DMAC FASTX laplacian filter unsharp masking filter
  • 8. 8 USB カメラを CPU で使用する場合 USB カメラ CPU カメラ画像 フィルタ処理後の画像 DDR SDRAM
  • 9. 9 高位合成ツールを使用して各フィルタ IP を作成 ( Vivado HLS ) ● C 、 C++ 、 SystemC から HDL を合成し IP へ ● 関数の引数がプラグマ 1 つでいろいろなインター フェースを実装 – Vivado HLS の独自インターフェース – AXI4-Lite Slave – AXI4 Master – AXI4-Stream
  • 10. 10 Vivado HLS について ● C, C++ で書くと HDL に変換され IP 化(無料、ただしデバイス 限定) ● pragma で動作やインターフェースなどを指定する必要がある ● 今のところ、ハードウェアを知らないと性能が出ない ● 合成済みライブラリ – hls_math ライブラリ( atan, sin, cos, log, log10, sqrt など) – HLS ビデオライブラリ( OpenCV の一部をサポート) – FFT や FIR 、線形代数ライブラリ( cholesky) – HLS DSP ライブラリ( SDR アプリケーション)
  • 11. 11 Vivado HLS の OpenCV 対応ライブラリ関数 AXIvideo2cvMat AXIvideo2CvMat AXIvideo2IplImage cvMat2AXIvideo CvMat2AXIvideo cvMat2hlsMat CvMat2hlsMat CvMat2hlsWindow hlsMat2cvMat hlsMat2CvMat hlsMat2IplImage hlsWindow2CvMat IplImage2AXIvideo IplImage2hlsMat AXIvideo2Mat Mat2AXIvideo Array2Mat Array2Mat ビデオプロセッシング AbsDiff AddWeighted And Avg AvgSdv Cmp CmpS CornerHarris CvtColor Dilate Duplicate EqualizeHist Erode FASTX Filter2D GaussianBlur Harris HoughLines2 Integral InitUndistortRectifyMap Max MaxS Mean Merge Min MinMaxLoc MinS Mul Not PaintMask PyrDown PyrUp Range Remap Reduce Resize Set Scale Sobel Split SubRS SubS Sum Threshold Zero OpenCVインタフェース AXIインターフェース 「Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2016.4) 2016 年 11 月 30 日」参照 https://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2016_4/ug902-vivado-hig h-level-synthesis.pdf
  • 12. 12 宣伝 ● FPGA マガジン No.14, No.15, No.16, … で Vivado HLS の使い方を書いています ● HDL ではなく C 、 C++ でお手軽にフィルタ IP などを 書いてみませんか? ● HDL も必要ですが、 C で書いた方が 10 倍くらい書く 時間が短いです ● 皆さんも高位合成ツールを使ってみませんか?
  • 13. 13 デモ ● FASTX コーナー検出 ● ラプラシアンフィルタ ● アンシャープ・マスキング・フィルタ