SlideShare una empresa de Scribd logo
1 de 130
Vivado HLS勉強会4
(AXI4 Master)
小野 雅晃
2
注意点
● 元はVivado HLS 2014.4で作製した資料を修正が
必要なところだけVivado HLS 2015.4に修正して
あります
● よって、Vivado HLSのウインドウにOpen Wave
viewer…が無い画面がありますがご了承下さい
3
これからすること
● Cで書いたラプラシアンフィルタ・ソフトウェア
– AXI4 Master IPにする
● ラプラシアンフィルタは画像フィルタの1種(この後詳しく)
● Vivado HLSのCシミュレーションで、実際のBMPファイ
ルを読み込んで、ラプラシアンフィルタ処理を行ったデー
タをBMPファイルに書き込む
● CからHDLへ合成して、C/RTLコシミュレーションを行う
● VivadoでC/RTLコシミュレーションの波形を確認する
●
残念ながら、実機確認は無し
4
ラプラシアンフィルタについて
● 画像処理フィルタ
● 画像のエッジを検出(二次微分フィルタ)
● 3x3, 5x5
● 3x3
● 5x5
5
ラプラシアンフィルタ処理前後の画像
ラプラシアンフィルタ
処理前
ラプラシアンフィルタ
処理後
6
ラプラシアンフィルタIPブロック図
memory
カメラ画像領域
ラプラシアンフィルタ
処理領域
DMA
DMA
AXI4 Lite Slave
AXI4
Master
Read
AXI4
Master
Write
アドレス
ラプラシアンフィルタ
処理部
Start Done
ラプラシアンフィルタIP
AXI4 Lite
Slave
7
AXI4 Lite Slaveの必要性
● AXI4 Lite SlaveはAXI Masterバスの開始アドレ
スを設定するためにある
● LinuxなどでDMAアドレスが起動ごとに変更される
状況に対処するため(オフセット)
8
ラプラシアンフィルタ処理部
ラプラシアンフィルタ
処理データ
画像の
輝度成分
AXI4 Master Write
画像の
輝度成分
AXI4 Master Writeラプラシアンフィルタ
処理データ
nクロック
n+1クロック
AXI4 Read信号1(AXI4 Liteとの違
い)
 Read address channel
 ACLK クロック
 ARADDR[31:0] アドレス、32ビット、64ビット
 ARVALID Read Address Valid
 ARREADY Read Address Ready
 ARID[0:0] ID、XilinxのIPでは多分1ビット
 ARLEN[7:0] 転送長、設定値の+1、最大256
 ARSIZE[2:0] 1回に転送するバイト数
 ARBURST[1:0] バースト・タイプ
 ARLOCK[1:0] アクセス・タイプ
 ARCACHE[3:0] メモリ・タイプ
 ARPORT[2:0] 保護タイプ
 ARQOS[3:0] Quality of Service、デフォルト値はオール0
 ARUSER[0:0] ユーザー信号 
 (注: ARREADYなどの青色の信号名は Mater の入力)
AXI4 Read信号2(AXI4 Liteとの違
い)
 Read data channel
 RID[0:0] ID、XilinxのIPでは多分1ビット
 RDATA[31:0] データ、32ビット、64ビット、128ビット
 RRESP[1:0] Read Response
 RLAST Read Last
 RUSER[0:0] ユーザー信号
 RVALID Read Valid
 RREADY Read Ready 
11
AXI4 Master Readタイミングチャート
AXI4 Write信号1(AXI4 Liteとの違
い)
 Write address channel
 ACLK クロック
 AWADDR[31:0] アドレス、32ビット、64ビット
 AWVALID Write address valid
 AWREADY Write address ready
 AWID[0:0] ID、XilinxのIPでは多分1ビット
 AWLEN[7:0] 転送長、設定値の+1 、最大256
 AWSIZE[2:0] 1回に転送するバイト数
 AWBURST[1:0] バースト・タイプ
 AWLOCK[1:0] アクセス・タイプ
 AWCACHE[3:0] メモリ・タイプ
 AWPROT[2:0] 保護タイプ
 AWQOS[3:0] Quality of Service、デフォルト値はオール0
 AWUSER[0:0] ユーザー信号、幅は選択できる
AXI4 Write信号2(AXI4 Liteとの違
い)
 Write data channel
 WDATA[31:0] データ、32ビット、64ビット、128ビット
 WSTRB[3:0] バイトイネーブル、幅はWDATA/8
 WLAST Write last
 WVALID Write valid
 WREADY Write ready
 WUSER[0:0] ユーザー信号
 Write response channel
 BID[0:0] ID、XilinxのIPでは多分1ビット
 BRESP[1:0] Write Response
 BVALID Write response valid
 BREADY Write response ready
 BUSER[0:0] ユーザー信号
14
AXI4 Master Writeタイミングチャート
15
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
16
これから何をするのか? 2
● memcpy()関数を使用してバースト転送を行う
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
17
これから何をするのか? 3
● 更にディレクティブやソースの変更でHLSに最適化
– @tu1978さんが書き換えてくれたコードを使用しています
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
18
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
19
ラプラシアンフィルタCソース
(lap_filter_soft.cなど)
● ラプラシアンフィルタの高位合成用のCソース
● なるべくソフトウェアとして書くという前提で書いた
● 画像の外周1ピクセルは値が出ないので0とした
● 基本的には1ピクセルごとに処理している
● AXI Masterアクセスはシングル転送となる
20
AXI4 Masterインターフェースの生成1
● INTERFACE m_axi ディレクティブ1行でAXI4 Masterイ
ンターフェースを生成
●
オプションを指定できる
● ラプラシアンフィルタの使用するAXI4 Masterインター
フェースは2つに設定している(まとめて1つでも良い)
– 画像のデータ領域をReadするためのcam_fbポート
– ラプラシアンフィルタ処理後のデータをWriteするlap_fbポート
– #pragma HLS INTERFACE m_axi depth=3072
port=cam_fb offset=slave bundle=cam_fb
– #pragma HLS INTERFACE m_axi depth=3072
port=lap_fb offset=slave bundle=lap_fb
21
AXI4 Masterインターフェースの生成2
● AXI4 Masterインターフェースはアドレスは0からスタート
する
● Vivado HLS 2014.3からオフセットを指定するオプション
ができた(Vivado HLS 2014.1のマニュアルには記載が
ない)
– offset=off(デフォルト、オフセットアドレスを適用しない)
– offset=direct(32ビットポートを追加してアドレスオフセットとす
る)
– offset=slave(AXI4 Lite Slave内のレジスタの値をオフセット
アドレスとする)
– 2014.3以降ではoffset=slaveを利用しよう
● offset=slaveを使用するとAXI4 Lite Slaveのレジスタに
オフセットレジスタがマップされる
22
AXI4 Masterインターフェースの生成3
● depthオプション
– depthオプションはC/RTLコシミュレーションの時にデザイ
ンに与えるデータ量を指定するらしい(ラプラシアンフィル
タで言えば1ラインのDMA 分ではなく画像全体のデータ
量を指すようだ)
– テストベンチでは64ピクセル x 48ライン = 3072を指定す
る
– depth=3072
– Vivado Design Suite ユーザー ガイド 高位合成 UG902
(v2015.2) 2015 年 6 月 24 日 136ページ参照
23
Vivado HLS 2015.4の起動と
新規プロジェクト作製
● Vivado HLS 2015.4を起動する
● Create New Projectをクリックして、新規プロジェクトを作製する
24
プロジェクト作成パスと
プロジェクト名の指定
● Locationに適当なフォルダを指定する(ここでは、V_HLS_study_meetingを指
定した)
● Project nameにlap_filter1_aximを入力する
● Next >ボタンをクリックする
25
Add/Remove C-based source files
● デフォルト状態で、Next >ボタンをクリックする
26
Add/Remove C-based testbench
files
● デフォルト状態で、Next >ボタンをクリックする
27
Solution Configuration 1
● solution1の設定を行う
● Clock Periodは10(ns)なので、そのままとする
● FPGAの種類を選択するためにPart Selectionの…ボタンをクリックする
28
Device Selection Dialog
● Filterを上図のように設定する
● xc7z010clg400-1を選択して、OKボタンをクリックする
29
Solution Configuration 2
● Part SelectionのPartにxc7z010clg400-1が設定された
● Finishボタンをクリックする
30
Vivado HLS起動
● Vivado HLSが起動した
31
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
32
ファイルをコピー
● Vivado_HLS勉強会FilesVivado HLS勉強会4用lap_filter1フォルダの
laplacian_filter_soft.c、lap_filter_tb.c、bmp_header.h、test.bmpを
lap_filter1_aximフォルダへコピーする
33
SourceにAdd Files...
● ExplorerのSourceを右クリックし、右クリックメ
ニューからAdd Files...を選択する
34
”開く”ダイアログ
● lap_filter_soft.cを選択して”開く”ボタンをクリック
する
35
Test Bench
● Sourceにlap_filter_soft.cが入った
● 同様にTest Benchを右クリックし、右クリックメ
ニューからAdd Files...を選択した
36
”開く”ダイアログ
● lap_filter_tb.c、bmp_header.h、test.bmpを選択して、”開く”
ボタンをクリックする
● 3つのファイルがExplorerのTest Benchに入った
37
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
38
lap_filter_soft.c
● ハードウェア変換用ラプラシアンフィルタ処理用C
ソフトウェア
● ディレクティブの説明
– #pragma HLS INTERFACE s_axilite port=return
● returnをAXI4 Lite Slaveとして宣言
39
ディレクティブの説明(続き)
● #pragma HLS INTERFACE m_axi depth=3072
port=cam_fb offset=slave bundle=cam_fb
● #pragma HLS INTERFACE m_axi depth=3072
port=lap_fb offset=slave bundle=lap_fb
– cam_fb, lap_fbポートをAXI4 Masterに指定
– offset=slaveでオフセット用レジスタをAXI4 Lite Slaveに実装した
– depthはシミュレーションするときの総画素数64ピクセル x 48ライ
ン = 3072を指定する
– bundleを指定しないとAXI4 Masterインターフェースが1つにまと
まる
– bundleを指定して、cam_fbとlap_fbに分けた
40
lap_filter_tb.c
● test.bmpという名前のBMPファイルをReadする
● ピクセルデータをラプラシアンフィルタのハードウェ
ア実装用のCソースで変換する
● ピクセルデータをラプラシアンフィルタのソフトウェ
ア実装用のCソースで変換する(今回は同一コー
ド)
● ハードウェア実装用のCソースの出力を
temp_lap.bmpという名前でBMPファイルに出力す
る
41
Cシミュレーション
● ProjectメニューからRun C Simulationを選択する
42
C Simulation Dialog
● ダイアログが開く
● OKボタンをクリックする
43
Cシミュレーション結果
● Success HW and SW results matchと表示され
た
44
temp_lap.bmp
● lap_filter1_aximsolution1csimbuildに
temp_lap.bmpが生成された
45
BMPファイルの
ラプラシアンフィルタ処理
● test.bmpをラプラシアンフィルタ処理した結果を
temp_lap.bmpに書き込んだ
test.bmp
temp_lap.bmp
46
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
47
Top Functionの指定1
● Cコードを合成する前に、Top Functionを指定する。
● これがCコードの合成の最上位関数になる。
● ProjectメニューからProject Settings...を選択する
48
Top Functionの指定2
● 左のウインドウで、Synthesisを選択する
● Top Functionの右のBrows...ボタンをクリックする
49
Top Functionの指定3
● laplacian_filter_soft.cのlap_filter_aximを選択する
● OKボタンをクリックする
50
Top Functionの指定4
● Top Functionにlap_filter_aximが入った
● OKボタンをクリックする
51
Cコードの合成
● SolutionメニューからRun C Synthesis->Active
Solutionを選択して、Cソースコードの合成を行う
52
Cコードの合成結果
● TimingのSummaryでClockのTarget周期が10nsのところ、
8.75nsなので問題無い
● Uncertaintyはクロックのばらつきの値(デフォルト:12.5%)
53
Cコードの合成結果2
● 下にスクロールして合成結果を見る
54
Analysis
● Analysisボタンをクリックして解析結果を見てみよ
う
● HDLソースも確認する
55
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
56
C/RTLコシミュレーション
● 右上のSynthesisボタンをクリックして表示を戻す
● Run C/RTL Cosimulationボタンをクリックする
● CやC++で書かれたテストベンチのデータをHDLシミュ
レータに入力してシミュレーションを行う
57
Co-simulation Dialog
● Dump Trace を none
から all に設定を変更
する
● allにすると、すべてのシ
ミュレーション波形が記
録される
● OKボタンをクリックする
とC/RTLコシミュレー
ションが始まる
58
C/RTLコシミュレーション結果
● C/RTLコシミュレーションが終了した
● Latencyは85894クロックだった
● Intervalは0クロックだった
59
temp_lap.bmpの生成
● lap_filter1_aximsolution1simの下のwrapc, wrapc_pcフォルダに
temp_lap.bmpが生成されている
● C/RTLコシミュレーションで生成されたtemp_lap.bmpはwrapc_pcフォルダ
の方だと思う
60
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
61
AXI4バス
● AXI4バス ー ARM社のAMBAバスの一種
● 主にICチップ内部のバス
● AXI4バスには3種類ある(Master, Slave)
– AXI4 ー メモリマップ式の高性能バス
– AXI4-Lite ー シングル転送のメモリマップ式のバス
– AXI4-Stream ー 高速のデータ・ストリーミング用バス
●
参考文献
– AXIリファレンスガイド UG761 (v13.1) 2011 年 3 月 7 日
● http://japan.xilinx.com/support/documentation/ip_documentation/j
_ug761_axi_reference_guide.pdf
– 7 axi4 バス説明、axi4バスを使用したカスタムipの作成方法2
● http://www.slideshare.net/marsee101/7-axi4-axi4ip2-44567631
62
Open Wave viewer…アイコンをクリック
● Open Wave viewer…アイコンをクリックする
63
Vivadoが立ち上がった
64
Waveformウインドウを表示
● WindowメニューからWaveformを選択する
65
Vivadoによる
シミュレーション波形表示
66
波形ウインドウをフロート
● 波形ウインドウのFloatアイコンをクリックして、波形
ウインドウをフローティング・ウインドウにする
67
波形ウインドウ1
● シミュレーションが終了するまでに約859us掛かっ
ている
68
波形ウインドウ2
● 拡大すると1ピクセルのWriteが見えてくる
● 転送長は64ワード
● 1ピクセルのReadの間の時間は290ns。0.29us x 64 x 48 891us≒
69
波形ウインドウ3
● Readも見てみよう
● 転送長は? 1ピクセルのRead間の時間は?
70
実機の処理時間の考察
● シミュレーション終了時刻は859 us
● シミュレーション結果の1ピクセルの処理時間290nsか
ら1フレーム64ピクセルx48ラインの処理速度を類推す
る
● 380ns x 64ピクセル x 48ライン ≒ 851 us
● AXI4 Masterのシングル転送の例では、シミュレーショ
ンの計算よりも3倍程度時間がかかる場合がある
– http://marsee101.blog19.fc2.com/blog-entry-3189.html
– http://marsee101.blog19.fc2.com/blog-entry-3190.html
● シングル転送でDDR3 SDRAMをアクセスしている影響
があるかもしれない?(未確認)
71
これから何をするのか? 1
● ソフトウェアとして作製したCソースを使用する
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
72
IPのパッケージ
● 合成したHDLをIPとしてパッケージ化
● Export RTLをクリックする
73
Export RTL Dialog
● Exprot RTLダイアログが開く
● デフォルトのIP Catalog(Vivado用)を選択
● OKボタンをクリックする
74
IP生成が完了
● solution1の下にimplフォルダが作られ、その下の
ipフォルダにIPが生成された
75
impl/ipフォルダ
● solution1/impl/ipフォルダ
● xilinx_com_hls_lap_filter_axim_1_0.zipにIPが圧縮され
ている
76
ドライバ
● AXI4 Lite Slaveが生成されているので、ドライバも
生成されている
● 以前紹介したようにベアメタル・アプリケーションと
Linux用ドライバが生成されている
77
AXI4 Lite Slaveのレジスタマップ
(xlap_filter_axim_hw.h)
// AXILiteS
// 0x00 : Control signals
// bit 0 - ap_start (Read/Write/COH)
// bit 1 - ap_done (Read/COR)
// bit 2 - ap_idle (Read)
// bit 3 - ap_ready (Read)
// bit 7 - auto_restart (Read/Write)
// others - reserved
// 0x04 : Global Interrupt Enable Register
// bit 0 - Global Interrupt Enable (Read/Write)
// others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
// bit 0 - Channel 0 (ap_done)
// bit 1 - Channel 1 (ap_ready)
// others - reserved
// 0x10 : Data signal of ap_return
// bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of cam_fb_offset
// bit 31~0 - cam_fb_offset[31:0] (Read/Write)
// 0x1c : reserved
// 0x20 : Data signal of lap_fb_offset
// bit 31~0 - lap_fb_offset[31:0] (Read/Write)
// 0x24 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)
78
これから何をするのか? 2
● memcpy()関数を使用してバースト転送を行う
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
79
laplacian_filter2.c
● laplacian_filter_soft.cとの違い
– 画像のラインの判定に割り算を使用しない
– memcpy()関数を使って1ライン分をRead /Writeする
● AXI4 Masterアクセスはバースト転送となる
– PIPELINEディレクティブを一部使用してパイプライン処
理を行う
● あまり大きな範囲にPIPELINEディレクティブを適用するとコ
ンパイル時間やリソースの関連で現実的でないこともある
80
Vivado HLS 2015.4のプロジェクトを
新規作成1
● Vivado HLS 2015.4のプロジェクトを新規作成しよ
う
● FileメニューからNew Project...を選択して、新規プ
ロジェクトを作製する
● Project nameはlap_filter2_aximとすること
81
Vivado HLS 2015.4のプロジェクトを
新規作成2
● Part Selectionは”xc7z010clg400-1”を選択する
82
ファイルのコピー
Vivado HLSにAdd Sources
● Vivado_HLS勉強会FilesVivado HLS勉強会4
用lap_filter2フォルダの
laplacian_filter2.c、lap_filter_tb.c、bmp_header.h、t
est.bmpをlap_filter2_aximフォルダへコピーする
● Vivado HLSで、ExplorerのSourceに
laplacian_filter2.cを登録する
● ExplorerのTest Benchに
lap_filter_tb.c、bmp_header.h、test.bmpを登録する
83
ファイルのコピーが終了
84
Cシミュレーション
● ProjectメニューからRun C Simulationを選択して、
Cシミュレーションを行う
85
CからHDLを生成
● Top Functionを指定する(Top Functionを指定・ページ参照)
● Cコードの合成(Cコードの合成・ページ参照)
● Analysisも見てみよう
86
Cコードの合成結果
● laplacian_filter_soft.cと比較して
– BRAM_18Kは1個から3個に増え
– DSP48Eは10個から7個に減った
– LUTは14%から15%に増えた
87
C/RTLコシミュレーション
● 右上のSynthesisボタンをクリックして表示を戻す
● Run C/RTL Cosimulationボタンをクリックする
● Co-simulation Dialogが表示される
● Dump Trace を none から all に設定を変更する
● OKボタンをクリックするとC/RTLコシミュレーション
が始まる
88
C/RTLコシミュレーション結果
● Latencyは36907クロックだった
● Intervalは0クロックだった
89
Vivadoを起動して波形を確認1
● Vivado HLS 2015.4のOpen Wave viewer…ボタ
ンをクリックする
● Vivado 2015.4が立ち上がる
● WindowメニューからWaveformを選択する
90
Vivadoを起動して波形を確認2
● 波形ウインドウをフロートして拡大するか、Vivado
ウインドウを拡大して波形を見やすくする
● デフォルトで16進数表示
91
Vivadoを起動して波形を確認3
● シミュレーション終了までに約370us掛かっている
92
Vivadoを起動して波形を確認4
● 行のRead間の時間は7.86us
● AXI4 Master Readのバースト長は0x40=64ワード
93
Vivadoを起動して波形を確認5
● 行のWrite間の時間は7.86us
● AXI4 Master Writeのバースト長は0x40=64ワード
94
前回の結果との比較
● 前回の1ピクセルずつReadし、ラプラシアンフィル
タ処理後に1ピクセルをWriteする実装ではラプラシ
アンフィルタの処理時間は約859usだった
● 1行分のピクセルをReadして、1行分のラプラシア
ンフィルタ処理結果をWriteする今回の処理時間は
約370usだった
● 859us / 370 us = 2.32倍今回の方が性能が良く
なった
95
IPのパッケージ
● 合成したHDLをIPとしてパッケージ化
● solution1/impl/ipフォルダ
96
これから何をするのか? 3
● 更にディレクティブやソースの変更でHLSに最適化
– @tu1978さんが書き換えてくれたコードを利用しています
● Vivado HLS 2015.4
– Vivado HLS 2015.4のプロジェクトを新規作成
– ソースコードとテストベンチをコピー
– Cシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– IPとしてパッケージ
97
ARRAY_PARTITION
ディレクティブ
● 配列のデータ出力方法を決定する
● 配列パーティション方法
– block, cyclic, complete
● Block RAMのボトルネックを解消する
– デュアルポートBlock RAMで配列を構成すると多くても
出力ポートは2つ
– 3つ以上の配列要素を使って演算するときは2クロック
以上必要
– 1クロックで演算をするにはどうするのか?
● ARRAY_PARTITIONを使う
98
ARRAY_PARTITIONの
配列パーティション方法
● factorオプション2
● 高位合成 UG902 (v2015.2) 2015 年 6 月 24 日の173ページ図 1 65 :‐ 配列のパーテ ィ シ ョ ンを引用
– http://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2015_2/ug902-vivado-high-level-synthesis.pdf
99
ARRAY_PARTITIONの
その他のオプション
● factor ー 作製される配列数を指定
– 前の図はfactor=2
● dimension ー どの次元をパーティションするかを指定する
(dim)
– abc[2][3][4] → dim=1 → abc_0[3][4]
– abc_1[3][4]
– abc[2][3][4] → dim=3 → abc_0[2][3]
– abc_1[2][3]
– abc_2[2][3]
– abc_3[2][3]
– abc[2][3][4] → dim=0 →2x3x4 = 24 レジスタ(すべての次元)
100
laplacian_filter3.cpp
● laplacian_filter2.cとの違い
– 2はmemcpy()した後に、配列を読み込んでRGBをY信号に直
しているが、3はラプラシアンフィルタ処理の直前にしかも3つ
conv_rgb2y()を実装している
– ラプラシアンフィルタ処理するレジスタをarray_partition
complete dim=0で宣言して9つのレジスタすべてへの配線パ
スを用意している(1クロックで演算できるかもしれない?)
● C/RTLコシミュレーションでソフトウェアとハードウェアの
結果を同じにするのに苦労した
– ラプラシアンフィルタ処理部分はfilter_line()関数で実装されて
いたが、それをメインルーチンに展開した
– https://gist.github.com/formalism/acce54f738c7c6069302
101
Vivado HLS 2015.4のプロジェクトを
新規作成1
● Vivado HLS 2015.4のプロジェクトを新規作成しよ
う
● FileメニューからNew Project...を選択して、新規プ
ロジェクトを作製する
● Project nameはlap_filter3_aximとすること
102
Vivado HLS 2015.4のプロジェクトを
新規作成2
● Part Selectionは”xc7z010clg400-1”を選択する
103
ファイルのコピー
● Vivado_HLS勉強会FilesVivado HLS勉強会4用lap_filter3
フォルダの
laplacian_filter3.c、lap_filter_tb.c、bmp_header.h、test.bmp
をlap_filter2_aximフォルダへコピーする
● Vivado HLSで、ExplorerのSourceにlaplacian_filter3.cを登
録する
● ExplorerのTest Benchに
lap_filter_tb.c、bmp_header.h、test.bmpを登録する
● 登録方法は25ページから28ページを参照
● 元はlaplacian_filter3.cppで、C++だったのですが、テストベン
チがCだとCシミュレーションできないようなので、Cに変更しま
した
104
ファイルのコピーが終了
105
Cシミュレーション
● ProjectメニューからRun C Simulationを選択して、
Cシミュレーションを行う
106
CからHDLを生成
● Top Functionを指定する
● Cコードの合成
● Analysisも見てみよう
107
CからHDLへの合成結果
● BRAM_18Kを7個、DSP48Eを29個
● FFを7%、LUTを16%使用している
108
C/RTLコシミュレーション
● 右上のSynthesisボタンをクリックして表示を戻す
● Run C/RTL Cosimulationボタンをクリックする
● Co-simulation Dialogが表示される
● Dump Trace を none から all に設定を変更する
● OKボタンをクリックするとC/RTLコシミュレーション
が始まる
109
C/RTLコシミュレーション結果
● Latencyは、11356クロックだった
● Intervalは0クロックだった
110
Vivadoを起動して波形を確認1
● Vivado HLS 2015.4のOpen Wave viewer…ボタ
ンをクリックする
● Vivado 2015.4が立ち上がる
● WindowメニューからWaveformを選択する
111
Vivadoを起動して波形を確認2
● 波形ウインドウをフロートして拡大するか、Vivado
ウインドウを拡大して波形を見やすくする
● デフォルトで16進数表示
112
Vivadoを起動して波形を確認3
● シミュレーション終了までに約114us掛かっている
113
Vivadoを起動して波形を確認4
● 行のRead間の時間は2.38us
● AXI4 Master Readのバースト長は0x40=64ワード
114
Vivadoを起動して波形を確認5
● 行のWrite間の時間は2.38us
● AXI4 Master Writeのバースト長は0x40=64ワード
115
過去の結果との比較
● 前々回の1ピクセルずつReadし、ラプラシアンフィルタ処
理後に1ピクセルをWriteする実装ではラプラシアンフィル
タの処理時間は約859usだった
● 前回の1行分のピクセルをReadして、1行分のラプラシア
ンフィルタ処理結果をWriteする処理時間は約370usだっ
た
● いろいろと最適化した今回の実装でのラプラシアンフィル
タ処理時間は約114usだった
● ただし画像の大きさは64ピクセル x 48行
● 前々回との性能差は 859 / 114 = 7.54倍
● 前回との性能差は 370 / 114 = 3.25倍
116
IPのパッケージ
●
合成したHDLをIPとしてパッケージ化(48ページ~51ページ)
●
solution1/impl/ipフォルダ
117
まとめ
● CやC++で書いたそのままではVivado HLSでハー
ドウェア化しても遅くなるだけでメリットがない
● FPGAの構造をよく理解して速くなるような記述をす
る必要がある
● CやC++ではなく効率的に回路を書ける新しい言語
– Vivado HLSに合った記述を心がける
● ドライバまで作ってくれるので便利
● SDSoCはVivadoのブロックデザインやソフトウエア
制御用のアプリも作ってくれる
118
まとめ2
● laplacian_filter3.cでDATAFLOWディレクティブを
使って、memcpy()とその他のループの処理を並
列実行しようとしたが、うまく行かなかった
● Vivado HLSでAXI4 Masterを使うのがフィルタ処
理の王道だと思うが、DMAとの並列化に苦労して
いるようだったらAXI-Streamでフィルタ処理のみを
IPとした方が性能が出る
● 今のところの王道はAXI4-StreamでDMA IPを使う
方法だと思う
119
DATAFLOWディレクティブ
● DATAFLOW - 関数を並列実行する
● 複数の関数がコールされている時に、各関数をス
ケジュールして、データが使用可能になった直後に
実行する
120
DATAFLOW最適化の図
● Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2015.1) 2015 年
4 月 1 日 70ページ”図 1 38 : DATAFLOW‐ 最適化”を引用
121
ラプラシアンフィルタAXI4 Master IP
の使用方法の概要
● IP化したラプラシアンフィルタAXI4 Master IPは
AXI Interconnectを通してProcessor System(PS)
のAXI_HPポートかAXI_ACPポートに接続する
● PSのAXI_HPポートかAXI_ACPポートを使用して
PSに接続されたDDR3 SDRAMにDMAを行う
122
ラプラシアンフィルタAXI4 Master IP
の使用方法1
● 私はカメラの画像のFrame Buffer0領域から、ラプ
ラシアンフィルタAXI4 Master IPによってピクセル
データをDMAし、ラプラシアンフィルタ処理を行って
から、結果を異なるFrame Buffer1領域へDMAし
ている
● ディスプレイ・コントローラーは、Frame Buffer0を
読みだせば通常のカメラ画像をディスプレイに表示
することができ、Frame Buffer1を読みだせばラプ
ラシアンフィルタ処理した画像を表示することがで
きる
123
ラプラシアンフィルタIPブロック図
memory
カメラ画像領域
ラプラシアンフィルタ
処理領域
DMA
DMA
AXI4 Lite Slave
AXI4
Master
Read
AXI4
Master
Write
アドレス
ラプラシアンフィルタ
処理部
Start Done
ラプラシアンフィルタIP
AXI4 Lite
Slave
ラプラシアンフィルタ
処理部
CPU
ARM(Cortex-A9)
124
ラプラシアンフィルタAXI4 Master IP
を使用したカメラ画像表示システム1
125
ラプラシアンフィルタAXI4 Master IP
の使用方法2
● 現在、ラプラシアンフィルタAXI4 Master IPを使用
しているシステムの概要
– OSはUbuntu 14.04 LTS
– ラプラシアンフィルタAXI4 Master IPの制御はVivado
HLSで生成されたドライバを使ってUbuntu上でコンパイ
ルした
– Vivado HLSで生成されたIPのドライバはUIOを使って
ラプラシアンフィルタAXI4 Master IPを制御している
126
ラプラシアンフィルタAXI4 Master IPに
関するブログ記事1
● Vivado HLS 2014.4でラプラシアン・フィルタ関数をa
xi masterモジュールにする1
● Vivado HLS 2014.4でラプラシアン・フィルタ関数をaxi
masterモジュールにする3(IP Catalog にVivado
HLSのIPを追加)
●
Vivado HLS 2014.4でラプラシアン・フィルタ関数
をaxi masterモジュールにする4(ブロックデザインにV
ivado HLSのIPを追加、インプリメント)
● Vivado HLS 2014.4でラプラシアン・フィルタ関数をaxi
masterモジュールにする5(BOOT.bin, devicetree
.dtb の生成)
127
ラプラシアンフィルタAXI4 Master IPに
関するブログ記事2
● Vivado HLS 2014.4でラプラシアン・フィルタ関数をax
i masterモジュールにする6(/sys, /devディレクトリ
)
● ZYBO Linux (Ubuntu 14.04 LTS) 上でMa
kefile を作ってラプラシアンフィルタIPの制御ソフトをコン
ル
● ZYBO Linux (Ubuntu 14.04 LTS) 上でMa
kefile を作ってラプラシアンフィルタIPの制御ソフトをコン
ル2
● ZYBO Linux (Ubuntu 14.04 LTS) 上でMa
kefile を作ってラプラシアンフィルタIPの制御ソフトをコン
ル3
128
ラプラシアンフィルタAXI4 Master IPに
関するブログ記事3
● Vivado HLS 2014.4で生成したラプラシアンフィ
ルタIPをシミュレーション3(原因が分かった)
● ZYBO Linux (Ubuntu 14.04 LTS) 上でM
akefile を作ってラプラシアンフィルタIPの制御ソフトをコ
パイル4(うまく行った)
129
謝辞
● 3のラプラシアンフィルタ・ソースコードを書き直して
性能が出る書き方を教えて頂いた tu1978 さんに
感謝いたします
● また、おるさんにはいろいろとお世話になっており、
感謝いたします
130
参考文献
● Vivado Design Suite ユーザー ガイド 高位合成
UG902 (v2014.3) 2014 年 10 月 1 日
– http://japan.xilinx.com/support/documentation/sw_m
anuals_j/xilinx2014_4/ug902-vivado-high-level-synt
hesis.pdf
● Vivado Design Suite ユーザー ガイド 高位合成
UG902 (v2015.2) 2015 年 6 月 24 日
– http://japan.xilinx.com/support/documentation/sw_m
anuals_j/xilinx2015_2/ug902-vivado-high-level-synt
hesis.pdf

Más contenido relacionado

La actualidad más candente

ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料直久 住川
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介Jun Ando
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)marsee101
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説Takateru Yamagishi
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Hiroyuki Okuhata
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことNVIDIA Japan
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learningMori Labo.
 
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)Shinya Takamaeda-Y
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Preferred Networks
 
ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性Kenichiro MITSUDA
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料直久 住川
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法Kentaro Sano
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたakira6592
 
Chainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなすChainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなすNVIDIA Japan
 

La actualidad más candente (20)

ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learning
 
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
 
llvm入門
llvm入門llvm入門
llvm入門
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性ソフトウェア技術者から見たFPGAの魅力と可能性
ソフトウェア技術者から見たFPGAの魅力と可能性
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
 
Chainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなすChainer で Tensor コア (fp16) を使いこなす
Chainer で Tensor コア (fp16) を使いこなす
 

Similar a Vivado hls勉強会4(axi4 master)

FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)Mr. Vengineer
 
Vitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモVitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモJun Ando
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overviewnothingcosmos
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話Wooram Yang
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Masaru Horioka
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
ポータブルコンポーネントマネージャの実装
ポータブルコンポーネントマネージャの実装ポータブルコンポーネントマネージャの実装
ポータブルコンポーネントマネージャの実装Yosuke Matsusaka
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707IBM Analytics Japan
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要 Ken Taki
 
Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編Osamu Masutani
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みYusuke Goto
 
130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 

Similar a Vivado hls勉強会4(axi4 master) (20)

FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
 
Vitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモVitisのご紹介とAmazon EC2 F1体験デモ
Vitisのご紹介とAmazon EC2 F1体験デモ
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overview
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
ポータブルコンポーネントマネージャの実装
ポータブルコンポーネントマネージャの実装ポータブルコンポーネントマネージャの実装
ポータブルコンポーネントマネージャの実装
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707Db2リブランディングと製品動向 201707
Db2リブランディングと製品動向 201707
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編Windows HPC Server 講習会 第2回 開発編
Windows HPC Server 講習会 第2回 開発編
 
第3回「マイクロソフトの仮想化と、クラウドの今後」(2011/06/16 on しすなま!) ②IBM資料
第3回「マイクロソフトの仮想化と、クラウドの今後」(2011/06/16 on しすなま!) ②IBM資料第3回「マイクロソフトの仮想化と、クラウドの今後」(2011/06/16 on しすなま!) ②IBM資料
第3回「マイクロソフトの仮想化と、クラウドの今後」(2011/06/16 on しすなま!) ②IBM資料
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組み
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 

Más de marsee101

Robot car gabor_filter
Robot car gabor_filterRobot car gabor_filter
Robot car gabor_filtermarsee101
 
Ultra96 pmod expansion board
Ultra96 pmod expansion boardUltra96 pmod expansion board
Ultra96 pmod expansion boardmarsee101
 
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_connectormarsee101
 
Fpga robot car
Fpga robot carFpga robot car
Fpga robot carmarsee101
 
FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料marsee101
 
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)
Fpgaでの非同期信号の扱い方とvivadoによるサポート(公開用)marsee101
 
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化marsee101
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出marsee101
 
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」marsee101
 
FPGAの部屋、slide share、xilinxツールのご紹介
FPGAの部屋、slide share、xilinxツールのご紹介FPGAの部屋、slide share、xilinxツールのご紹介
FPGAの部屋、slide share、xilinxツールのご紹介marsee101
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能についてmarsee101
 
Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識
Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識
Ubuntuをインストールしたzyboボードにカメラを付けてopen cvで顔認識marsee101
 

Más de 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」の畳み込みニューラルネットワークのハードウェア化
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
 
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で顔認識
 

Último

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Último (9)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Vivado hls勉強会4(axi4 master)