SlideShare a Scribd company logo
1 of 184
1
Vivado HLS勉強会1
(基礎編)
小野 雅晃
2
事前準備
● Vivado 2015.4をVivado HLS付きでインストール
しておいてください
3
注意点
● 元はVivado HLS 2014.4で作製した資料を修正が
必要なところだけVivado HLS 2015.4に修正して
あります
● よって、Vivado HLSのウインドウにOpen Wave
viewer…が無い画面がありますがご了承下さい
4
Windowsの弱点と克服方法
● VivadoをWindowsで使う場合はフォルダを深い階層ま
で作るので、すぐにWindowsのパス名の長さの限界に
達してしまう
● Windowsのパス名の長さの限界は260文字。
● 解決策 ー substコマンドを使おう
● substコマンドはフォルダにドライブを割り振るコマンド
– 例えばC:UsersOnoDocumentsHDLZynqZYBOSimを
Z:ドライブに割り当てる
– コマンド プロンプトを立ち上げて下のコマンドを入力する
– subst z: C:UsersOnoDocumentsHDLZynqZYBOSim
5
Vivado HLS勉強会の進め方
● 基本的にハンズオン
– 自分で資料を見ながらチュートリアルをやってみてくださ
い
● 各単元ごとに説明します
– 黒のタイトル ー ハンズオン・スライドなど
– 青のタイトル ー 説明のスライド
●
眠くなるので、説明のみは概要の説明だけです
6
掛け算器ブロック図
*
multi_in0multi_in0
multi_in1
multi_out
8 ビット
8 ビット
16 ビット
組み合わせ回路
7
C++ソースコード
(multi_apuint.cpp)
// multi_apuint.cpp
#include <ap_int.h>
void multi_apuint(ap_uint<8> multi_in0, ap_uint<8> multi_in1,
ap_uint<16> *multi_out){
*multi_out = multi_in0 * multi_in1;
}
8
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
9
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
10
Vivado HLS→Vivadoの手順
Vivado HLSで
C/C++ソースコード作成
Cシミュレーション
Cシミュレーションでデバック
ソースコード修正
Cコードの合成
条件を満たさない場合
ソースコード、
指示子(ディレクティブ)の修正
C/RTLコシミュレーション
IPパッケージの出力
Vivado HLSのIPを
IP Catalogに追加
IP Integratorのブロックデザイン
にIPを追加、回路の構成
Vivadoの新規
プロジェクトの作成
制約ファイルを
追加
論理合成、インプリメント
ビットストリームの生成
実機確認
Vivado HLSでの手順 Vivadoでの手順
GONG
NG
NG
GO
GO
GO
NG
C/RTLコシミュレーションを
省略した場合
NG
11
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
12
Vivado HLS 2015.4の起動と
新規プロジェクト作製
● Vivado HLS 2015.4を起動する
● Create New Projectをクリックして、新規プロジェクトを作製する
13
プロジェクト作成パスと
プロジェクト名の指定
● Locationに適当なフォルダを指定する(ここでは、V_HLS_study_meetingを指
定した)
● Project nameにmulti_apuintを入力する
● Next >ボタンをクリックする
14
Add/Remove C-based source files
● デフォルト状態で、Next >ボタンをクリックする
15
Add/Remove C-based testbench
files
● デフォルト状態で、Next >ボタンをクリックする
16
Solution Configuration 1
● solution1の設定を行う
● Clock Periodは10(ns)なので、そのままとする
● FPGAの種類を選択するためにPart Selectionの…ボタンをクリックする
17
Device Selection Dialog
● Filterを上図のように設定する
● xc7z010clg400-1を選択して、OKボタンをクリックする
18
Solution Configuration 2
● Part SelectionのPartにxc7z010clg400-1が設定された
● Finishボタンをクリックする
19
Vivado HLS起動
● Vivado HLSが起動した
20
New Source
● ProjectメニューからNew Source…を選択して、新
しいC++ファイルを作製する
21
c++ソースファイルの生成
● ファイル名にmulti_apuint.cppと入力する
● 保存ボタンをクリックする
22
multi_apuint.cpp
● C++コードを入力し、セーブボタンをクリックする
23
C++ソースコード
(multi_apuint.cpp)
// multi_apuint.cpp
#include <stdio.h>
#include <string.h>
#include <ap_int.h>
void multi_apuint(ap_uint<8> multi_in0, ap_uint<8>
multi_in1, ap_uint<16> *multi_out){
*multi_out = multi_in0 * multi_in1;
}
24
CとC++の任意精度型
● Cの任意精度型
– #include “ap_cint.h”
– int15 aaa - 符号付き15ビット幅
– uint52 bbb ー 符号なし52ビット幅
– 幅の最大値は1024ビット
● C++の任意精度型
– #include “ap_int.h”
– ap_int<96> aaa - 符号付き96ビット幅
– ap_uint<128> bbb ー 符号なし128ビット幅
– デフォルトの値の幅は1024ビットだが、32768までの値なら
ば設定することができる
25
Vivado HLSで取扱いできるデータ型
● (unsigned) char、 (unsigned) short、 (unsigned)
int
● (unsigned) long、 (unsigned) long long
● float、 double
● 任意精度型(int15, ap_int<56>)
26
関数の引数のタイプによる
入力ポート、出力ポートの生成
● void test(ap_int<8> aaa, ap_int<8> *bbb){ }
● 値渡し(aaa)の場合は入力ポート
● ポインタ渡し(bbb)の場合は入力ポートにも出力
ポートにもなる
● 例えば、*bbb = aaa + 1; だと出力ポートのみ
● *bbb += aaa; だったら入力ポートと出力ポートの
両方が生成される
27
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
28
テストベンチファイルの生成
● ExplorerのTest Benchを右クリックし、右クリックメ
ニューからNew File...を選択する
29
multi_apuint_tb.cpp
● ファイル名にmulti_apuint_tb.cppと入力する
● 保存ボタンをクリックする
30
テストベンチを保存
● テストベンチのC++コードを入力し、セーブボタンを
クリックする
31
テストベンチのソースコード
(multi_apuint_tb.cpp)
// multi_apuint_tb.c
#include <stdio.h>
#include <string.h>
#include <ap_int.h>
int multi_apuint(ap_uint<8> multi_in0, ap_uint<8> multi_in1, ap_uint<16> *multi_out);
int main(){
using namespace std;
ap_uint<8> multi_in0;
ap_uint<8> multi_in1;
ap_uint<16> multi_out;
multi_in0 = 10;
multi_in1 = 10;
multi_apuint(multi_in0, multi_in1, &multi_out);
cout << "multi_out = " << multi_out << endl;
if (multi_out == (multi_in0*multi_in1))
return(0);
else
return(1);
}
32
Cシミュレーション
● Run C Simulationボタンをクリックして、Cシミュ
レーションを行う
33
C Simulation Dialog
● ダイアログが開く
● OKボタンをクリックする
34
Cシミュレーション結果
● Cシミュレーション結果が表示された
● 10 x 10 = 100
35
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
36
Top Functionの指定1
● Cコードを合成する前に、Top Functionを指定する。
● これがCコードの合成の最上位関数になる。
● ProjectメニューからProject Settings...を選択する
37
Top Functionの指定2
● 左のウインドウで、Synthesisを選択する
● Top Functionの右のBrows...ボタンをクリックする
38
Top Functionの指定3
● multi_apuint.cppのmulti_apuintを選択する
● OKボタンをクリックする
39
Top Functionの指定4
● Top Functionにmulti_apuintが入った
● OKボタンをクリックする
40
Cコードの合成
● Run C Synthesisボタンをクリックして、Cソース
コードの合成を行う
41
Cコードの合成結果
● TimingのSummaryでClockのTarget周期が10nsのところ、
6.38nsなので問題無い
● Uncertaintyはクロックのばらつきの値(デフォルト:12.5%)
42
Cコードの合成結果2
●
下にスクロールして合成結果を見る
● Latencyは0、Intervalは1
● DSP48Eを1個のみ使用している
43
HDLコードの確認
● Verilog HDL(multi_apuint.v)
● VHDL(multi_apuint.vhd)
● 2つのHDLファイルが生成されている
44
Verilog HDLコード(multi_apuint.v)
1/3``timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="multi_apuint,hls_ip_2015_4,
{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=1,HLS_INPUT_PART=
xc7z010clg400-
1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=6.38000
0,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=1,HLS_SYN_FF
=0,HLS_SYN_LUT=0}" *)
module multi_apuint (
ap_start,
ap_done,
ap_idle,
ap_ready,
multi_in0_V,
multi_in1_V,
multi_out_V,
multi_out_V_ap_vld
);
parameter ap_const_logic_1 = 1'b1;
parameter ap_true = 1'b1;
parameter ap_const_logic_0 = 1'b0;
45
Verilog HDLコード(multi_apuint.v)
2/3
input ap_start;
output ap_done;
output ap_idle;
output ap_ready;
input [7:0] multi_in0_V;
input [7:0] multi_in1_V;
output [15:0] multi_out_V;
output multi_out_V_ap_vld;
reg multi_out_V_ap_vld;
wire [7:0] r_V_fu_43_p0;
wire [7:0] r_V_fu_43_p1;
wire [15:0] r_V_fu_43_p00;
wire [15:0] r_V_fu_43_p10;
always @ (ap_start) begin
if (~(ap_start == ap_const_logic_0)) begin
multi_out_V_ap_vld = ap_const_logic_1;
end else begin
multi_out_V_ap_vld = ap_const_logic_0;
end
end
46
Verilog HDLコード(multi_apuint.v)
3/3
assign ap_done = ap_start;
assign ap_idle = ap_const_logic_1;
assign ap_ready = ap_start;
assign multi_out_V = (r_V_fu_43_p0 * r_V_fu_43_p1);
assign r_V_fu_43_p0 = r_V_fu_43_p00;
assign r_V_fu_43_p00 = multi_in1_V;
assign r_V_fu_43_p1 = r_V_fu_43_p10;
assign r_V_fu_43_p10 = multi_in0_V;
endmodule //multi_apuint
47
VHDL HDLコード(multi_apuint.vhd)
1/3
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity multi_apuint is
port (
ap_start : IN STD_LOGIC;
ap_done : OUT STD_LOGIC;
ap_idle : OUT STD_LOGIC;
ap_ready : OUT STD_LOGIC;
multi_in0_V : IN STD_LOGIC_VECTOR (7 downto 0);
multi_in1_V : IN STD_LOGIC_VECTOR (7 downto 0);
multi_out_V : OUT STD_LOGIC_VECTOR (15 downto 0);
multi_out_V_ap_vld : OUT STD_LOGIC );
end;
48
VHDL HDLコード(multi_apuint.vhd)
2/3
architecture behav of multi_apuint is
attribute CORE_GENERATION_INFO : STRING;
attribute CORE_GENERATION_INFO of behav : architecture is
"multi_apuint,hls_ip_2015_4,
{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=1,HLS_INPU
T_PART=xc7z010clg400-
1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=
6.380000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DS
P=1,HLS_SYN_FF=0,HLS_SYN_LUT=0}";
constant ap_const_logic_1 : STD_LOGIC := '1';
constant ap_true : BOOLEAN := true;
constant ap_const_logic_0 : STD_LOGIC := '0';
signal r_V_fu_43_p0 : STD_LOGIC_VECTOR (7 downto 0);
signal r_V_fu_43_p1 : STD_LOGIC_VECTOR (7 downto 0);
signal r_V_fu_43_p00 : STD_LOGIC_VECTOR (15 downto 0);
signal r_V_fu_43_p10 : STD_LOGIC_VECTOR (15 downto 0);
begin
49
VHDL HDLコード(multi_apuint.vhd)
3/3ap_done <= ap_start;
ap_idle <= ap_const_logic_1;
ap_ready <= ap_start;
multi_out_V <=
std_logic_vector(resize(unsigned(r_V_fu_43_p0) *
unsigned(r_V_fu_43_p1), 16));
-- multi_out_V_ap_vld assign process. --
multi_out_V_ap_vld_assign_proc : process(ap_start)
begin
if (not((ap_start = ap_const_logic_0))) then
multi_out_V_ap_vld <= ap_const_logic_1;
else
multi_out_V_ap_vld <= ap_const_logic_0;
end if;
end process;
r_V_fu_43_p0 <= r_V_fu_43_p00(8 - 1 downto 0);
r_V_fu_43_p00 <=
std_logic_vector(resize(unsigned(multi_in1_V),16));
r_V_fu_43_p1 <= r_V_fu_43_p10(8 - 1 downto 0);
r_V_fu_43_p10 <=
std_logic_vector(resize(unsigned(multi_in0_V),16));
end behav;
50
インターフェース
● Vivado HLSでは、CをHDL(ハードウェア)へ変換する
● HDLにする場合には他のモジュールとの接続のため
のインターフェースが必要になる
● ブロックレベルとIOレベルのインターフェース
●
ブロックレベル
– ブロック用の制御信号(ap_ctrl_hs, ap_ctrl_none)
● IOレベル
– IO用の制御信号(ap_hs, ap_none, m_axi, s_axilite, axis)
● 生成されるインターフェースは57、58ページを参照
51
ブロックレベルのインターフェース
● ap_ctrl_none
● ap_ctrl_hs
● ap_ctrl_chain
52
ap_ctrl_hsプロトコル
(ブロックレベル)
● ap_start, ap_done, ap_idle, ap_ready
●
ブロック・レベルのインターフェース・プロトコル ー
ap_ctrl_hs(デフォルト値)
● ap_returnがあるが、関数の戻り値がvoidのため削除
53
ap_ctrl_hsプロトコル
タイミング波形
● ブロックレベルI/Oプロトコル
● ap_startが1になると処理が開始される
● ap_readyが1になるまで、ap_startを1に保つ
Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.3)
2014年10月 1日 405ページ
図 4 6 : ap_ctrl_hs‐ イ ン ターフ ェ イスの動作 から引用
54
ap_ctrl_hsプロトコル
タイミング波形の続き
● ap_startが1になるとap_idleが0になる
● 入力はap_idleが0になった後の最初のクロック・
エッジでサンプルされる
– この場合はHDLが組み合わせ回路なので、クロック・
エッジはなし
● ブロックの処理が終了するとap_doneが1になる
● ap_returnはap_doneが1の時に有効(あれば)
● ap_idleはap_doneが1になった次のクロックで1に
なる
55
IOレベルのインターフェース
● axis, s_axilite, m_axi
● ap_none, ap_stable
● ap_ack, ap_vld, ap_ovld, ap_hs
● ap_memory, bram, ap_fifo
● ap_bus
56
ap_hs (ap_ack、 ap_vld、 および
ap_ovld)プロトコル
Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.3) 2014年10月 1日 408ページ
図 4 8 : ap_hs‐ イ ン ターフ ェ イスの動作 から引用
57
ap_hs (ap_ack、 ap_vld、 および
ap_ovld)プロトコル
● I/Oプロトコル
● Valid( _vld)信号とACK( _ack)信号を持つ
● ap_ack ー ACK信号のみ
● ap_vld ー Valid信号のみ
● ap_ovld ー Valid信号のみ、出力ポートか入出力
ポート
58
ap_none
● I/Oプロトコル
● ハンドシェーク信号は無しで入力、出力、入出力
データのみ
●
入力の場合トランザクションの間、値を保持する必
要がある
● 入力のデフォルト値
59
データ型とインターフェース合成の
サポート 1/2
Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.3) 2014年10月 1日
129ページ 図 1 49 :‐ デー タ型と イ ン ターフ ェ イス合成のサポー ト から引用
60
データ型とインターフェース合成の
サポート 2/2
Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.3) 2014年10月 1日
129ページ 図 1 49 :‐ デー タ型と イ ン ターフ ェ イス合成のサポー ト から引用
61
Analysis表示への切替
● 右上のAnalysisボタンをクリックするとAnalysis表
示になる
62
Analysis表示(Performanceタブ)
● Performanceタブ表示
● 下のResourceタブをクリックするとResource表示となる
63
Analysis表示(Resourceタブ)
●
+ボタンをクリックしてすべて展開する
● read, write, *の掛け算を実行(組み合わせ回路)
● Synthesisボタンをクリックして画面を戻す
64
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
65
C/RTLコシミュレーション
● 右上のSynthesisボタンをクリックして表示を戻す
● Run C/RTL Cosimulationボタンをクリックする
● CやC++で書かれたテストベンチのデータをHDLシミュ
レータに入力してシミュレーションを行う
66
Co-simulation Dialog
● Dump Trace を none
から all に設定を変更
する
● allにすると、すべてのシ
ミュレーション波形が記
録される(portとallが選
べる)
● OKボタンをクリックする
とC/RTLコシミュレー
ションが始まる
67
C/RTLコシミュレーション結果
● C/RTLコシミュレーションが終了した
● LatencyもIntervalも0クロックだった
68
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
69
Open Wave viewer…ボタンをクリック
● Open Wave viewer…ボタンをクリックする
70
Vivadoが立ち上がった
71
Waveformウインドウを表示
● WindowメニューからWaveformを選択する
72
Vivadoによる
シミュレーション波形表示
73
波形ウインドウをフロート
● 波形ウインドウのFloatボタンをクリックして、波形
ウインドウをフローティング・ウインドウにする
74
波形ウインドウ1
● Zoom Fitボタンをクリックして、波形全体を表示
● Nameペインで右クリックメニューからSelect Allを選択
75
波形ウインドウ2
● 選択部分を右クリックし、右クリックメニューから
Radix -> Unsigned Decimal を選択
76
波形ウインドウ3
● multi_in0_Vに 10、multi_in1_Vに 10 を入力した
クロックでmulti_out_Vに 100 が出力されているの
がわかる
77
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
78
ap_***、***_vld信号の削除
● ap_***(ap_start, ap_idleなど)、出力の***_vldの信号
は入力をスイッチ、出力をLEDにするのに邪魔なので消
去しよう
● ブロック・レベルのインターフェースをap_ctrl_noneに変
更する
● 出力のmulti_outのI/Oプロトコルをap_noneに変更する
●
変更方法ーディレクティブを使用する
●
ディレクティブの書き方
– Cソース・ファイルに書く
– ディレクティブ・ファイルに書く
● Cソース・ファイルに書く方法でやってみよう
79
ディレクティブ
● いろいろなディレクティブ(指示子)を指定してHDL
コードの最適化を行う
– PIPELINE, INTERFACE, UNROLL,
ARRAY_PARTITION…
● 今回はINTERFACEディレクティブを使ってブロッ
ク・レベルのプロトコルをap_ctrl_noneに、 I/Oプロ
トコルをap_noneにしてみよう
80
ディレクティブを入力1
● Vivado HLSの右のウインドウでDirectiveタブをク
リックする
● multi_apuintを右クリックし、右クリックメニューから
Insert Directive...を選択する
81
Vivado HLS Directive Editor
● Vivado HLS Directive Editor
が開く
● DirectiveからINTERFACEを
選択する
● DestinationではSource File
を選択する
● Optionsのmodeは
ap_ctrl_noneを選択する
● OKボタンをクリックする
82
INTERFACEディレクティブの挿入
● Cソースに”#pragma HLS INTERFACE
ap_ctrl_none port=return”が追加された
● Directiveウインドウにも表示された
83
multi_outをap_noneへ変更
● Vivado HLSの右のウインドウでDirectiveタブをクリックする
● multi_outを右クリックし、右クリックメニューからInsert
Directive...を選択する
84
Vivado HLS Directive Editor
● Vivado HLS Directive Editor
が開く
● DirectiveからINTERFACEを
選択する
● DestinationではSource Fileを
選択する
● Optionsのmodeはap_noneを
選択する
● OKボタンをクリックする
85
INTERFACEディレクティブの挿入
● Cソースに”#pragma HLS INTERFACE ap_none
port=multi_out”が挿入された
● Directiveウインドウにも表示された
● Cソースファイルをセーブする
86
Cコードの合成(2回目)
● C Synthesisボタンをクリックして、Cソースコードの
合成を行う
87
Cコードの合成結果(2回目)
● TimingのSummaryでClockのTarget周期が10nsのとこ
ろ、6.38nsなので問題無い
● 成功
88
Cコードの合成結果2
●
下にスクロールして合成結果を見る
● Latencyは0、Intervalは1
● DSP48Eを1個のみ使用している
89
HDLコードの確認
(Verilog HDLコード)
● multi_in0_V, multi_in1_V, multi_out_V ポートの
みになった
90
HDLコードの確認
(VHDLコード)
● multi_in0_V, multi_in1_V, multi_out_V ポートの
みになった
91
これから何するのか?1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
– IPとしてパッケージ
92
IPのパッケージ
● 合成したHDLをIPとしてパッケージ化
● Export RTLをクリックする
93
Export RTL Dialog
● Exprot RTLダイアログが開く
● デフォルトのIP Catalog(Vivado用)を選択
● OKボタンをクリックする
94
IP生成が完了
● solution1の下にimplフォルダが作られ、その下の
ipフォルダにIPが生成された
95
impl/ipフォルダ
● solution1/impl/ipフォルダ
● xilinx_com_hls_multi_apuint_1_0.zipにIPが圧縮されて
いる
96
Vivado HLSで作ったIPを使ってみよう
● 今までの工程(Vivado HLS)
– Cシミュレーション
– CからHDLを合成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– HDLをIPとしてパッケージ
● 次の工程(Vivado)
– Vivadoでプロジェクトを作製
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
97
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
98
Vivado 2015.4の起動
● Vivado 2015.4を起動する
● Create New Projectボタンをクリックする
99
New Project ダイアログ
● New Project ダイアログが開く
● Next >ボタンをクリックする
100
Project Nameの設定
● Project locationを適当なところに設定する
● Project nameに”multi_ex1”と入力する
101
Project Typeの設定
● RTL Projectのラジオボタンが選択されていることを確認
する
● Next >ボタンをクリックする
102
Add Sources
● デフォルトのまま、Next >ボタンをクリックする
103
Add Existing IP (optional)
● デフォルトのまま、Next >ボタンをクリックする
104
Add Contraints (optional)
● デフォルトのまま、Next >ボタンをクリックする
105
Default Parts
● 上図のように項目を選択して、xc7z010clg400-1を
選択する
106
New Project Summary
● Finishボタンをクリックする
107
multi_ex1プロジェクト
● multi_ex1プロジェクトが立ち上がった
108
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
109
Vivado HLSプロジェクト(multi_apuint)
のIPをIP Catalogに登録
● Vivado HLSプロジェクトのsolution?/impl/ipフォル
ダをIP Catalogのリポジトリに追加するとVivado
HLSで作製したIPが使用できる
● どこでIPを使うか?
– IPインテグレーターのブロック・デザイン内で使用できる
● Vivado HLS製のIPをAddするとVivado HLSの
マークがIPのシンボルに付く
110
IP Catalogを開く
● Project NavigatorからIP Catalogをクリックする
111
IP Setting
● IP Catalogが開いた
● IP Catalog内で右クリックし、右クリックメニューからIP
Settings…を選択する
112
Project Settingsダイアログ
● Repository
Managerタブを
クリックし
て、Addボタン
をクリックする
(Vivado HLS
で作製したIPを
追加する)
113
Vivado HLSのIPの選択
● V_HLS_study_meetingmulti_apuintsolution1implip
を選択する
● Selectボタンをクリックする
114
Add Repositoryダイアログ
● OKボタンをクリックする
115
Repository Manager
● Multi_apuintが
選択された
● OKボタンをク
リックすると、IP
Catalogに追加
される
116
IP Catalogに追加された
● Multi_apuintがIP Catalogに追加された
117
IPインテグレーター
● ブロック・デザインを新規作成する
● multi_apuint IPをAdd IPする
● Slice IPをAdd IPし、multi_apuintとI/Oのバス幅を
合わせる
●
ベリファイして回路があっているかどうか?を確認
する
118
ブロック・デザインの作製
● Flow Navigator -> IP Integrator -> Create Block
Designをクリックする
119
Create Block Designダイアログ
● Create Block Designダイアログが開く
● Design nameにmulit_bdと入力する
● OKボタンをクリックする
120
ちょっと一息、便利なTips
(Flow Navigatorを表示/非表示)
● Flow Navigatorの<<ボタンをクリックすると表示/非表示
の切替ができる
● <<ボタンをクリックして非表示にする
121
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
122
ZYBOへの入出力ポートのマッピング
● ZYBOの実機でmulti_apuintの機能、つまり掛け算の機
能を検証する
● 入力は4個のスライドスイッチ
● 出力は4個のLED
● multi_in0_Vに2個、multi_in1_Vに2個のスライドスイッ
チを割り当てる
– どちらも2ビット入力
● multi_out_Vに4個のLEDを割り当てる
– 4ビット出力
● 入力はConcat、Constantを使用する
● 出力はSliceを使用する
123
Constant, Concat, Slice
● IP Integratorの便利なIP
● Constant, Concat, Slice, Utility Vector Logic, Utility
Recuced Logic
● Constant – 任意のビット幅の定数を与える
● Concat – 複数の入力ポートを1つの出力ポートにまとめる
● Slice - 入力ポートの任意のビット幅を出力ポートに出力する
● Utility Vector Logic – 各ビットごとに演算を行う
– and, or, xor, not
● Utility Reduced Logic – 各ビット同士を演算して1ビット出力
とする
– and, or, xor
● http://marsee101.blog19.fc2.com/blog-entry-3209.html
124
Constant
125
Concat
126
Slice
127
Utility Vector Logic
128
Utility Reduced Logic
129
Add IP
● Diagramタブ内を右クリックし、右クリックメニュー
からAdd IP...を選択する
130
Multi_apuintをAdd IP
● 開いたダイアログのSearchに”multi”と入力する
●
文字列が検索されて候補が表示される
● Multi_apuintをダブルクリックする
131
multi_apuint_0を追加
● multi_apuint_0が追加された
132
Slice IPの追加
● 先ほどと同様にDiagramタブ内で右クリックし、右クリックメニューから
Add IP...を選択する
● ダイアログのSearchに”Slice”と入力し、Sliceをダブルクリックする
133
Slice
● xlslice_0をダブルクリックし、設定画面を開く
134
xlslice_0のバス幅設定
● Din Widthを16に、Din Fromを3、Din Down Toを0に設
定する
● OKボタンをクリックする
135
multi_apuintとxlslice_0の配線
● IPのシンボルのポートにマウス・カーソルを持っていくと
鉛筆の形になる
●
ドラックすると配線することができる
136
ウインドウをフロートして見やすく
● VivadoのウインドウはIDEに統合しておくこともで
きるが、単独でフロート・ウインドウとすることもでき
る。
● フロートする場合は、Floatボタンをクリックする
137
Concatの追加
● Diagramウインドウで右クリックし、右クリックメニューからAdd IP...を選択する
● ダイアログのSearchに”Concat”と入力する
● Concatをダブルクリックする
138
Concatを追加した
● もう1つ同様に”Concat”を追加した
139
Concatの設定
●
xlconcat_0をダブルクリックする
●
Number of Portsを2、In0 WidthをManualの2、In1 Widthを6に設定する
●
Xlconcat_1も同様に設定する
140
ConcatとMulti_apuint間の配線
● xlconcat_0、xlconcat_1のdoutとmulti_apuintの
入力ポートを配線する
141
Constantの追加
● Diagramウインドウで右クリックし、右クリックメニューから
Add IP...を選択する
● ダイアログのSearchに”Constant”と入力する
142
Constantを追加した
● 同様にもう1つ”Constant”を追加した
143
Constantの設定
● xlconstant_0をダブルクリックする
● Const Widthを6、Const Valを0に設定する
● xlconstant_1も同様に設定する
144
ConstantとConcatの間の配線
● ConstantのdoutとConcatのIn1の間を配線する
145
Make Externalを選択
● xlconcat_0の
In0の配線部分
で右クリックし、
右クリックメ
ニューから
Make External
を選択する
146
入力ポートIn0
● xlconcat_0にIn0ポートに入力ポートIn0が接続さ
れた
147
すべてのポートをMake Externalする
● xlconcat_1のIn0とxslice_0のDoutをMake
Externalした
148
Validate Design
● Validate Designボタンをクリックする(もし表示され
ていない場合は、Diagramウインドウの左下端の
下向き▼2つをクリックする)
149
Validate Designダイアログ
● Validate Designダイアログが表示される
● OKボタンをクリックする
150
Regenerate Layout
● Regenerate Layoutボタンをクリックして全体のレ
イアウトを整えた
151
ブロック・デザイン完成
● Save Block Designボタンをクリックしてブロック・
デザインをセーブする
152
HDL Wrapperファイルの生成
● Sourcesウインド
ウのSourcesタブ
をクリックする
● multi_bdブロッ
ク・デザインを右
クリックし、右ク
リックメニューか
らCreate HDL
Wrapper...を選
択する
153
Create HDL Wrapperダイアログ
● Create HDL Wrapperダイアログが開く
● デフォルトのままでOKボタンをクリックする
154
multi_bd_wrapper.v
● multi_bd_wrapper.vが生成された
155
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
156
制約ファイルを追加する
● 作製済みの制約ファイルを追加する(multi_bd_wrapper.xdc)
● 制約ファイルはFilesフォルダ→Vivado HLS勉強会1用
→multi_bd_wrapper.xdc
– コピーしてmulti_ex1フォルダにペーストする
●
制約ファイルの役割
– 入力ポート、出力ポートに対応するFPGAのピンの位置の指定
– 動作周波数の指定
– タイミングの指定
● FPGA用の回路をコンパイルする場合に必要不可欠なファイル
です
● In0にsw3, sw2、In0_1にsw1, sw0、DoutにLEDを割り当てる
157
制約ファイルを追加
● SourcesウインドウのDesign Sourcesを右クリック
し、右クリックメニューからAdd Sources…を選択
する
158
Add Sourcesダイアログ
● Add or create constraintsのラジオボタンをクリックする
● Next >ボタンをクリックする
159
Add Files
● Add Files… ボタンをクリックする
160
multi_bd_wrapper.xdcを選択
● multi_bd_wrapper.xdcを選択する
● OKボタンをクリックする
161
Add Sourcesダイアログ
● multi_apuint_wrapper.xdcが入った
● Finishボタンをクリックする
162
multi_apuint_wrapper.xdc
● SourcesウインドウのConstraintsのconstrs_1に
multi_apuint_wrapper.xdcが入った
163
multi_apuint_wrapper.xdc (1/2)
# multi_apuint_wrapper.xdc
# 2015/07/02 by marsee
#
##Switches
##IO_L19N_T3_VREF_35 sw0
set_property PACKAGE_PIN G15 [get_ports {In0_1[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0_1[0]}]
##IO_L24P_T3_34 sw1
set_property PACKAGE_PIN P15 [get_ports {In0_1[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0_1[1]}]
##IO_L4N_T0_34 sw2
set_property PACKAGE_PIN W13 [get_ports {In0[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0[0]}]
##IO_L9P_T1_DQS_34 sw3
set_property PACKAGE_PIN T16 [get_ports {In0[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0[1]}]
164
multi_apuint_wrapper.xdc (2/2)
##LEDs
##IO_L23P_T3_35 Dout[0]
set_property PACKAGE_PIN M14 [get_ports {Dout[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[0]}]
##IO_L23N_T3_35 Dout[1]
set_property PACKAGE_PIN M15 [get_ports {Dout[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[1]}]
##IO_0_35 Dout[2]
set_property PACKAGE_PIN G14 [get_ports {Dout[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[2]}]
##IO_L3N_T0_DQS_AD1N_35 Dout[3]
set_property PACKAGE_PIN D18 [get_ports {Dout[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[3]}]
set_switching_activity -signal_rate 1 -static_probability .99 [get_ports]
165
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
166
Flow Navigatorを表示
● Flow NavigatorをクリックしてFlow Navigatorを表
示させる
167
論理合成、インプリメント
ビットストリームの生成
● Flow NavigatorのProgram and Debugを開いて、Generate
Bitstreamをクリックする
●
論理合成、インプリメント、ビットストリームの生成が行われる
168
No Implementation Results
Availableダイアログ
● ダイアログが表示されるので、Yesボタンをクリアす
る
169
Bitstream Generation Completed
ダイアログ
●
論理合成、インプリメント、ビットストリームの生成まで成
功し、ダイアログが表示される
● Cancelボタンをクリックする
170
Feedback Requestダイアログ
● Feedback Requestダイアログが表示される
● Laterボタンをクリックする
●
出ないこともあります
171
Project Summaryの表示
● Project Summaryボタンをクリックして、サーマリー
を表示させる
172
Project Summary
● Project
Summaryが
表示された
173
これから何するのか?2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– Vivado HLSプロジェクト(multi_apuint)のIPをIP
Catalogに登録
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
174
ZYBOを用意しよう
● JP5のショートピンをJTAGの位置にする
● JP7のショートピンをUSBの位置にする
● PROG/UARTのMicro USB-Bコネクタからケーブ
ルでパーソナルコンピューターのUSB-Aコネクタに
接続する
● 電源SWをONする
175
ZYBO
JP5
JP7
電源SW
176
Open Hardware Manager
● Flow Navigator
のProgram and
Debugの
Open Hardware
Managerを開い
て、Open Target
をクリックし、Auto
Connectをクリッ
クする
177
Auto Connectダイアログ
● Auto Connectダイアログが表示されて、自動的に
設定を行う
178
ZYBOをプログラム
● Program deviceをクリックし、xc7z010_1をクリック
して、ZYBOのZynq-7010をプログラムする
179
Program Deviceダイアログ
● Program Deviceダイアログが表示された
● Programボタンをクリックする
180
プログラム成功
● ZYBOのLD10(DONE)の緑のLEDが点灯する
● ビットストリームがダウンロードされて成功した
181
掛け算器のテスト
● Cソースコードで書いた掛け算器がZYBOに実装さ
れたのでテストしよう
● SW3→In0[1], SW2→In0[0],
SW1→In0_1[1], SW0->In0_1[0]
● LD3~LD0がDout[3:0]に対応している
● SWを動かして掛け算された値がLEDに表示され
るかどうか?を確かめてみよう
182
まとめ1
● Vivado HLS 2015.4
– 掛け算のプロジェクト、Cソースコードの作製
– Cのテストベンチを作製してCシミュレーション
– CからHDLを生成
– C/RTLコシミュレーション
– VivadoでC/RTLコシミュレーションの波形を確認
– ディレクティブを追加して再度CからHDLを生成
● ap_ctrl_none, ap_none
– IPとしてパッケージ
183
まとめ2
● Vivado 2015.4
– Vivadoでプロジェクトを作製
– ブロックデザインにIPを追加し、回路を構成
– 制約ファイルを追加
– 論理合成、インプリメント、ビットストリームの生成
– 実機確認
184
参考文献
● 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.3) 2015 年 9 月 30 日
– http://japan.xilinx.com/support/documentation/sw_m
anuals_j/xilinx2015_3/ug902-vivado-high-level-synt
hesis.pdf
–

More Related Content

What's hot

ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料直久 住川
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介Jun Ando
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)marsee101
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料一路 川染
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムShinya Takamaeda-Y
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク7shi
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)Shota Shinogi
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料直久 住川
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介Takeo Imai
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 

What's hot (20)

ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 

Similar to Vivado hls勉強会1(基礎編)

Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要 Ken Taki
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5Tsukasa Sugiura
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Mr. Vengineer
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)Iwana Chan
 
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14Takako Miyagawa
 
170622 02
170622 02170622 02
170622 02openrtm
 
わんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみたわんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみた伸男 伊藤
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Tomoaki Shimizu
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29Takefumi MIYOSHI
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチMr. Vengineer
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
64ビット対応Dllインジェクション
64ビット対応Dllインジェクション64ビット対応Dllインジェクション
64ビット対応DllインジェクションShinichi Hirauchi
 
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編Shin Tanigawa
 

Similar to Vivado hls勉強会1(基礎編) (20)

C#勉強会
C#勉強会C#勉強会
C#勉強会
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)
 
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
 
170622 02
170622 02170622 02
170622 02
 
わんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみたわんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみた
 
Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!Cocos2d xをさらにさわってみよう!
Cocos2d xをさらにさわってみよう!
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
64ビット対応Dllインジェクション
64ビット対応Dllインジェクション64ビット対応Dllインジェクション
64ビット対応Dllインジェクション
 
Synverll
SynverllSynverll
Synverll
 
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編
 

More from 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
 

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」の畳み込みニューラルネットワークのハードウェア化
 
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で顔認識
 

Recently uploaded

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

Vivado hls勉強会1(基礎編)