SlideShare uma empresa Scribd logo
1 de 59
Baixar para ler offline
ソフトウェアエンジニアにもわかる
高位合成
わさらぼ
みよし たけふみ
(miyox)
2015.02.01
2014 年 8 月 2015 年 1 月
0
5
10
15
20
25
30
35
40
45
x20
2014 年 8 月 2015 年 1 月
0
5
10
15
20
25
30
35
40
45
x20
高位合成を実装する人達の
飲み会 # 2014.8.3
高位合成友の会
# 2015.1.16
4
高位合成友の会(恋友)
✔ 豊島さん: 「両刀使いエンジニアは高位合成ツールの夢を見るか?」
✔ たばたさん: Neon light compiler - http://goo.gl/JEhlyn
✔ みよし: Synthesijer – http://goo.gl/2w3J6Z
✔ 高前田さん: PyCoRAM – http://goo.gl/0b16rr
論理回路の高位合成について試作した実装と
アイデアと妄想について語る会
http://hls.connpass.com/event/11009/
5
高位合成処理系の前に
6
一般的なFPGAアプリ設計
✔ 論理回路構成要素の内容を決める
✔ 論理回路構成要素同士の接続関係を決める
7
一般的なFPGAアプリ設計
1) http://japan.xilinx.com/support/documentation/data_sheets/ds180_7Series_Overview.pdf
2) http://hitechglobal.com/boards/virtex7_v2000t.htm
3) http://http://low-powerdesign.com/sleibson/2011/10/25/generation-jumping-2-5d-xilinx-virtex-7-2000t-fpga-delivers-
1954560-logic-cells-consumes-only-20w/
8
一般的なFPGAアプリ設計
HDL(VHDLやVerilog HDL)によるRTL(Register Transfer Level)設計
9
ちょっと脇道にそれますが
10
FPGAっていつ有用なの?
10G if
DRAM
Network
adapter
FPGA
Network stack Memcached
x86 DRAM
motherboard
Hash table Value store
図は https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf より
データはどうせ移動させる
移動途中で副次的に処理できる
✔ Memcached部分はデータフローアーキテクチャ
✔ レイテンシ = 481Cycles@156MHz
11
鍵はパイプライン並列化
FIFO
スループット T [bps]
w [byte]
f [Hz]
実行
ステージ
FIFO
実行
ステージ
実行
ステージ
12
データが来たら迎え撃つ
デスクトップタワーディフェンス的なゲーム
13
鍵はパイプライン並列化
パケットデータが d [byte] のとき全データ入力を受け取るのにかかる時間 = (d/w)*(1/f) [sec]
同様に、全データの出力にかかる時間 = (d/w)*(1/f) [sec]
スループットT [bps]を実現するとき、パケットデータを(8*d)*(1/T) [sec]内で処理し続ける必要がある
→ 各モジュールで処理に使える時間 t は 8*d/T-2*d/(w*f) [sec] → (8*d/T-2*d/(w*f))/(1/f) [cycle]
 たとえば、d=1500, T=1G, w=4, f=100Mのとき
 1パケットあたりの処理にかけられるサイクル数は450サイクル.
    f=200Mなら1650サイクル,w=16なら1012サイクル
T=10Gの場合,w=16,f=200M でも 52サイクル
FIFO
スループット T [bps]
w [byte]
f [Hz]
実行
ステージ
FIFO
実行
ステージ
実行
ステージ
とはいえ,各ステージで状態遷移のある処理が必要
14
鍵はパイプライン並列化
パケットデータが d [byte] のとき全データ入力を受け取るのにかかる時間 = (d/w)*(1/f) [sec]
同様に、全データの出力にかかる時間 = (d/w)*(1/f) [sec]
スループットT [bps]を実現するとき、パケットデータを(8*d)*(1/T) [sec]内で処理し続ける必要がある
→ 各モジュールで処理に使える時間 t は 8*d/T-2*d/(w*f) [sec] → (8*d/T-2*d/(w*f))/(1/f) [cycle]
 たとえば、d=1500, T=1G, w=4, f=100Mのとき
 1パケットあたりの処理にかけられるサイクル数は450サイクル.
    f=200Mなら1650サイクル,w=16なら1012サイクル
T=10Gの場合,w=16,f=200M でも 52サイクル
FIFO
スループット T [bps]
w [byte]
f [Hz]
実行
ステージ
FIFO
実行
ステージ
実行
ステージ
とはいえ,各ステージで状態遷移のある処理が必要
限られた
許容サイクルを
効率よく使う必要
15
組み合わせ回路/データ並列性の活用
✔ プロセッサと比べてFPGA回路のφは圧倒的に低速
✔ 高速データ処理では1クロックでデータを捌く必要も
✔ 時にはソフトウェア実装とは全く違う場合も
条件
・・・
条件
v.s
16
話は戻りまして
17
一般的なFPGAアプリ設計
HDL(VHDLやVerilog HDL)によるRTL(Register Transfer Level)設計
18
HDLによるRTL設計
✔ ロジックを抽象化した式/構文で設計できる
✔ クロックレベルのデータ制御
✔ 細粒度の並列性の活用
✔ 記述が煩雑
✔ “状態”を自分で管理しなければいけない
✔ デバッグ/動作検証が難しい
メリット
デメリット
19
HDLによるRTL設計
✔ ロジックを抽象化した式/構文で設計できる
✔ クロックレベルのデータ制御
✔ 細粒度の並列性の活用
✔ 記述が煩雑
✔ “状態”を自分で管理しなければいけない
✔ デバッグ/動作検証が難しい
メリット
デメリット
アプリケーション書くの大変
開発に時間/コストがかかる
20
FPGAにキラーアプリはないの定理
Florent de Dinechin, "Building Custom Arithmetic Operators with the FloPoCo Generator”,
http://www.hipeac.net/conference/berlin/tutorial/flopoco
なんとかして開発スピードを速くしたい
21
デメリット克服のためには
✔ FPGAを使うのをやめる
✔ より抽象度の高い設計手法/処理系を使う
22
デメリット克服のためには
✔ FPGAを使うのをやめる
✔ 別にプロセッサを持ってくる
✔ FPGAの上にプロセッサを作る
✔ より抽象度の高い設計手法/処理系を使う
✔ 既存のプログラミング言語を借用する
✔ 新しい記述言語を模索する
✔ 新しい設計概念を模索する
23
デメリット克服のためには
✔ FPGAを使うのをやめる
✔ 別にプロセッサを持ってくる
✔ FPGAの上にプロセッサを作る
✔ より抽象度の高い設計手法/処理系を使う
✔ 既存のプログラミング言語を借用する
✔ 新しい記述言語を模索する
✔ 新しい設計概念を模索する
24
高位合成処理系 Synthesijer
25
Synthesijer とは
✔ JavaプログラムをFPGA上のハードウェアに変換
✔ 複雑なアルゴリズムのハードウェア実装を楽に
✔ オブクジェクト指向設計による再利用性の向上
✔ 特殊な記法,追加構文はない
✔ ソフトウェアとして実行可能.動作の確認、検証が容易
✔ 書けるプログラムに制限は加える
(動的なnew,再帰は不可など)
✔ HDLモジュールのJavaからのインスタンス生成
Javaコンパイラ
フロントエンド
Synthesijer
エンジン
Javaコンパイラ
バックエンド
合成
配置配線
while(){
if(...){
…
}else{
…
…
}
….
}
複雑な状態遷移も,Javaの制御構文を使って楽に設計できる
同じJavaプログラムをソフトウェアとしても
FPGA上のハードウェアとしても実行可能
Open-source
26
Synthesijer 開発の経緯
✔ 2009年頃 Bluespecに感銘を受ける
✔ 2010年12月頃 高位合成処理系を作ってみたい→Javaベースに
✔ 2011年7月
JavaRockの開発を開始
JavaをVHDLに変換する.1文1ステート→簡単な並列化
✔ 2012(?)年〜2013年
農工大中條研小池さんによるJavaRock-Thrashの開発
種々の最適化の実装など
✔ 2014年
Synthesijerとして名称をあらため開発を再スタート
JavaRock/JavaRock-Thrashの実装を通じた知見の活用
なぜか
27
参考
✔ http://synthesijer.sourceforge.net
✔ リソース一式,クイックスタートガイドなど
✔ http://qiita.com/kazunori279/items/4951ca5f6164040878ce
✔ Synthesijer関連資料まとめ
✔ http://labs.beatcraft.com/ja/index.php?Synthesijer
✔ Altera DE0-nanoでのサンプルの動作手順など
(ビートクラフト様)
✔ http://marsee101.blog19.fc2.com/blog-category-116.html
✔ FPGAの部屋: Synthesijerでラプラシアンフィルタを作ってみた
✔ http://wasa-labo.com/wp/
✔ わさらぼ ブログ – 開発状況,Tipsなど
28
Synthesijerのコード生成
✔ (その前に)典型的な高位合成処理系
✔ Synthesijerの場合
✔ 最適化のために
29
高位合成処理系は何をするか?
http://www.ida.liu.se/~petel/SysSyn/lect3.frm.pdf
基本はこれに書いてあります
High-Level Synthesis
30
高位合成処理系は何をするか
入力言語 データフロー スケジューリング
データパス生成
ステート生成
物理マッピング
31
高位合成処理系は何をするか
入力言語 データフロー スケジューリング
データパス生成
ステート生成
物理マッピング
(1) (2)
(3)
32
高位合成処理系のレイヤ
(1)言語デザイン
(2)アーキテクチャの生成
(3)テクノロジ・マッピング
✔ 設計コストが小さくなるように
✔ パフォーマンスを出しやすいように
✔ 命令スケジューリング,並列化の抽出
✔ 動作周波数,リソース使用量,レイテンシの考慮
✔ 適切な物理マッピング
✔ 符号化
33
Synthesijerでは
✔ 設計コストが小さくなるように
✔ パフォーマンスを出しやすいように
✔ 命令スケジューリング,並列化の抽出
✔ 動作周波数,リソース使用量,レイテンシの考慮
✔ 適切な物理マッピング
✔ 符号化
(1)言語デザイン
(2)アーキテクチャの生成
(3)テクノロジ・マッピング
Java
- オブジェクト指向設計
- スレッドで並列化
- 既存資産の活用
ISE/Vivado,QuartusII
にお任せ
Javaから変換する
エンジンを実装
34
Synthesijerオーバービュー
Javaコード 字句解析/構文解析
コントロール・データフロー作成
最適化
出力
VHDL/
Verilog HDL
コード
Javaコード
VHDL/
Verilog HDL
コード
35
Javaコンパイラ
Javaコード 字句解析/構文解析
コントロール・データフロー作成
最適化
出力
VHDL/
Verilog HDL
コード
Javaコード
class
JVM用の
バイトコード
JVM命令セット内
での最適化
36
(理想的な)高位合成処理系の場合
Javaコード 字句解析/構文解析
コントロール・データフロー作成
最適化
出力
VHDL/
Verilog HDL
コード
Javaコード
VHDL/
Verilog HDL
コード
自由なデータパス
ステートマシン
命令セットを
強制されない/
並列化し放題
37
(理想的な)高位合成処理系の場合
Javaコード 字句解析/構文解析
コントロール・データフロー作成
最適化
出力
VHDL/
Verilog HDL
コード
Javaコード
VHDL/
Verilog HDL
コード
自由なデータパス
ステートマシン
命令セットを
強制されない/
並列化し放題
完全にはムリ!!
38
Synthesijer でのHDL生成: 例題
package blink_led;
public class BlinkLED {
public boolean led;
public void run(){
while(true){
led = true;
for(int i = 0; i < 5000000; i++) ;
led = false;
for(int i = 0; i < 5000000; i++) ;
}
}
}
39
Synthesijer でのHDL生成: 大枠
class
entity blink_led_BlinkLED is
port (
clk : in std_logic;
reset : in std_logic;
field_led_output : out std_logic;
field_led_input : in std_logic;
field_led_input_we : in std_logic;
run_req : in std_logic;
run_busy : out std_logic
);
end blink_led_BlinkLED;
class BlinkLED {
public boolean led;
public void run(){
while(true){
…
}
}
}
module
クラス毎にHWモジュールを生成
40
Synthesijer でのHDL生成: スケジュール表
メソッド毎にスケジュール表を生成
run_0000: op=METHOD_EXIT, src=, dest=, next=0001
run_0001: op=METHOD_ENTRY, src=, dest=, next=0002 (name=run)
run_0002: op=JT, src=true:BOOLEAN, dest=, next=0004, 0003
run_0003: op=JP, src=, dest=, next=0023
run_0004: op=ASSIGN, src=true:BOOLEAN, dest=class_led_0000:BOOLEAN, next=0005
run_0005: op=ASSIGN, src=0:INT, dest=run_i_0001:INT, next=0006
run_0006: op=LT, src=run_i_0001:INT, 5000000:INT, dest=binary_expr_00002:BOOLEAN, next=0007
run_0007: op=JT, src=binary_expr_00002:BOOLEAN, dest=, next=0012, 0008
run_0008: op=JP, src=, dest=, next=0013
run_0009: op=ADD, src=run_i_0001:INT, 1:INT, dest=unary_expr_00003:INT, next=0010
run_0010: op=ASSIGN, src=unary_expr_00003:INT, dest=run_i_0001:INT, next=0011
run_0011: op=JP, src=, dest=, next=0006
run_0012: op=JP, src=, dest=, next=0009
run_0013: op=ASSIGN, src=false:BOOLEAN, dest=class_led_0000:BOOLEAN, next=0014
run_0014: op=ASSIGN, src=0:INT, dest=run_i_0004:INT, next=0015
run_0015: op=LT, src=run_i_0004:INT, 5000000:INT, dest=binary_expr_00005:BOOLEAN, next=0016
run_0016: op=JT, src=binary_expr_00005:BOOLEAN, dest=, next=0021, 0017
run_0017: op=JP, src=, dest=, next=0022
run_0018: op=ADD, src=run_i_0004:INT, 1:INT, dest=unary_expr_00006:INT, next=0019
run_0019: op=ASSIGN, src=unary_expr_00006:INT, dest=run_i_0004:INT, next=0020
run_0020: op=JP, src=, dest=, next=0015
run_0021: op=JP, src=, dest=, next=0018
run_0022: op=JP, src=, dest=, next=0002
run_0023: op=JP, src=, dest=, next=0000
41
スケジューラ表の疑似命令
✔ 四則演算,論理演算,シフト
✔ 比較
✔ 代入
✔ 配列のアドレス指定,配列アクセス
✔ Call/Return
✔ CallしたらReturnされるまで待つ(基本)
✔ Thread.startの呼び出し時は待たずに次へ
✔ 無条件ジャンプ,条件分岐,SELECT
✔ フィールドアクセス指示命令
42
Synthesijer でのHDL生成: 出力(状態遷移)
メソッド毎にスケジュール表を生成 → 状態遷移機械
while
for
for
43
Synthesijer でのHDL生成: 状態遷移
状態遷移機械に相当するステートマシンをベタに作る
always @(posedge clk) begin
if(reset == 1'b1) begin
run_method <= run_method_IDLE;
run_method_delay <= 32'h0;
end else begin
case (run_method)
run_method_IDLE : begin
run_method <= run_method_S_0000;
end
run_method_S_0000 : begin
run_method <= run_method_S_0001;
run_method <= run_method_S_0001;
end
run_method_S_0001 : begin
if (run_req_flag == 1'b1) begin
run_method <= run_method_S_0002;
end
end
run_method_S_0002 : begin
if (tmp_0003 == 1'b1) begin
run_method <= run_method_S_0004;
end else if (tmp_0004 == 1'b1) begin
run_method <= run_method_S_0003;
end
end
run_method_S_0003 : begin
...
44
Synthesijer でのHDL生成: 出力(データ操作)
メソッド毎にスケジュール表を生成 → 文/式相当のデータ操作
run_0000: op=METHOD_EXIT, src=, dest=, next=0001
run_0001: op=METHOD_ENTRY, src=, dest=, next=0002 (name=run)
run_0002: op=JT, src=true:BOOLEAN, dest=, next=0004, 0003
run_0003: op=JP, src=, dest=, next=0023
run_0004: op=ASSIGN, src=true:BOOLEAN, dest=class_led_0000:BOOLEAN, next=0005
run_0005: op=ASSIGN, src=0:INT, dest=run_i_0001:INT, next=0006
run_0006: op=LT, src=run_i_0001:INT, 5000000:INT, dest=binary_expr_00002:BOOLEAN, next=0007
run_0007: op=JT, src=binary_expr_00002:BOOLEAN, dest=, next=0012, 0008
run_0008: op=JP, src=, dest=, next=0013
run_0009: op=ADD, src=run_i_0001:INT, 1:INT, dest=unary_expr_00003:INT, next=0010
run_0010: op=ASSIGN, src=unary_expr_00003:INT, dest=run_i_0001:INT, next=0011
run_0011: op=JP, src=, dest=, next=0006
run_0012: op=JP, src=, dest=, next=0009
run_0013: op=ASSIGN, src=false:BOOLEAN, dest=class_led_0000:BOOLEAN, next=0014
run_0014: op=ASSIGN, src=0:INT, dest=run_i_0004:INT, next=0015
run_0015: op=LT, src=run_i_0004:INT, 5000000:INT, dest=binary_expr_00005:BOOLEAN, next=0016
run_0016: op=JT, src=binary_expr_00005:BOOLEAN, dest=, next=0021, 0017
run_0017: op=JP, src=, dest=, next=0022
run_0018: op=ADD, src=run_i_0004:INT, 1:INT, dest=unary_expr_00006:INT, next=0019
run_0019: op=ASSIGN, src=unary_expr_00006:INT, dest=run_i_0004:INT, next=0020
run_0020: op=JP, src=, dest=, next=0015
run_0021: op=JP, src=, dest=, next=0018
run_0022: op=JP, src=, dest=, next=0002
run_0023: op=JP, src=, dest=, next=0000
45
Synthesijer でのHDL生成: 出力(データ操作)
メソッド毎にスケジュール表を生成 → 文/式相当のデータ操作
run_0000: op=METHOD_EXIT, src=, dest=, next=0001
run_0001: op=METHOD_ENTRY, src=, dest=, next=0002 (name=run)
run_0002: op=JT, src=true:BOOLEAN, dest=, next=0004, 0003
run_0003: op=JP, src=, dest=, next=0023
run_0004: op=ASSIGN, src=true:BOOLEAN, dest=class_led_0000:BOOLEAN, next=0005
run_0005: op=ASSIGN, src=0:INT, dest=run_i_0001:INT, next=0006
run_0006: op=LT, src=run_i_0001:INT, 5000000:INT, dest=binary_expr_00002:BOOLEAN, next=0007
run_0007: op=JT, src=binary_expr_00002:BOOLEAN, dest=, next=0012, 0008
run_0008: op=JP, src=, dest=, next=0013
run_0009: op=ADD, src=run_i_0001:INT, 1:INT, dest=unary_expr_00003:INT, next=0010
run_0010: op=ASSIGN, src=unary_expr_00003:INT, dest=run_i_0001:INT, next=0011
run_0011: op=JP, src=, dest=, next=0006
run_0012: op=JP, src=, dest=, next=0009
run_0013: op=ASSIGN, src=false:BOOLEAN, dest=class_led_0000:BOOLEAN, next=0014
run_0014: op=ASSIGN, src=0:INT, dest=run_i_0004:INT, next=0015
run_0015: op=LT, src=run_i_0004:INT, 5000000:INT, dest=binary_expr_00005:BOOLEAN, next=0016
run_0016: op=JT, src=binary_expr_00005:BOOLEAN, dest=, next=0021, 0017
run_0017: op=JP, src=, dest=, next=0022
run_0018: op=ADD, src=run_i_0004:INT, 1:INT, dest=unary_expr_00006:INT, next=0019
run_0019: op=ASSIGN, src=unary_expr_00006:INT, dest=run_i_0004:INT, next=0020
run_0020: op=JP, src=, dest=, next=0015
run_0021: op=JP, src=, dest=, next=0018
run_0022: op=JP, src=, dest=, next=0002
run_0023: op=JP, src=, dest=, next=0000
...
assign tmp_0010 = run_i_0001 + 32'h00000001;
...
always @(posedge clk) begin
if(reset == 1'b1) begin
run_i_0001 <= 32'h00000000;
end else begin
if (run_method == run_method_S_0004) begin
run_i_0001 <= 32'h00000000;
end else if (run_method == run_method_S_0010) begin
run_i_0001 <= unary_expr_00003;
end
end
end
...
always @(posedge clk) begin
if(reset == 1'b1) begin
unary_expr_00003 <= 0;
end else begin
if (run_method == run_method_S_0009) begin
unary_expr_00003 <= tmp_0010;
end
end
end
...
46
最適化
✔ メモリ書き込みアクセスのパック
✔ 基本ブロック内の細粒度並列化
✔ メモリ読み込みのアドレス指定のステート最適化
✔ 演算のチェイニング
今実装しているもの
もうすぐ実装するもの
≒ スケジュール表ベースでサイズを小さくすること
47
たとえば
public void test(){
boolean success = false;
int a = 10;
int b = 20;
int c = 0;
int d = 40;
int e = 50;
int f = 0;
int g = 70;
int h = 80;
int i = 0;
int j = 100;
int k = 110;
int l = 0;
c = a + b;
f = d + e;
i = g + h;
l = j + k;
c = c + f;
l = l + i;
c = c + l;
if(c == 10+20+40+50+70+80+100+110) success = true;
boolean success2 = check(c);
}
48
たとえば
test_0000: op=METHOD_EXIT, src=, dest=, next=0001
test_0001: op=METHOD_ENTRY, src=, dest=, next=0002 (name=test)
test_0002: op=ASSIGN, src=false:BOOLEAN, dest=test_success_0009:BOOLEAN, next=0003
test_0003: op=ASSIGN, src=10:INT, dest=test_a_0010:INT, next=0004
test_0004: op=ASSIGN, src=20:INT, dest=test_b_0011:INT, next=0005
test_0005: op=ASSIGN, src=0:INT, dest=test_c_0012:INT, next=0006
test_0006: op=ASSIGN, src=40:INT, dest=test_d_0013:INT, next=0007
test_0007: op=ASSIGN, src=50:INT, dest=test_e_0014:INT, next=0008
test_0008: op=ASSIGN, src=0:INT, dest=test_f_0015:INT, next=0009
test_0009: op=ASSIGN, src=70:INT, dest=test_g_0016:INT, next=0010
test_0010: op=ASSIGN, src=80:INT, dest=test_h_0017:INT, next=0011
test_0011: op=ASSIGN, src=0:INT, dest=test_i_0018:INT, next=0012
test_0012: op=ASSIGN, src=100:INT, dest=test_j_0019:INT, next=0013
test_0013: op=ASSIGN, src=110:INT, dest=test_k_0020:INT, next=0014
test_0014: op=ASSIGN, src=0:INT, dest=test_l_0021:INT, next=0015
test_0015: op=ADD, src=test_a_0010:INT, test_b_0011:INT, dest=binary_expr_00022:INT, next=0016
test_0016: op=ASSIGN, src=binary_expr_00022:INT, dest=test_c_0012:INT, next=0017
test_0017: op=ADD, src=test_d_0013:INT, test_e_0014:INT, dest=binary_expr_00023:INT, next=0018
test_0018: op=ASSIGN, src=binary_expr_00023:INT, dest=test_f_0015:INT, next=0019
test_0019: op=ADD, src=test_g_0016:INT, test_h_0017:INT, dest=binary_expr_00024:INT, next=0020
test_0020: op=ASSIGN, src=binary_expr_00024:INT, dest=test_i_0018:INT, next=0021
test_0021: op=ADD, src=test_j_0019:INT, test_k_0020:INT, dest=binary_expr_00025:INT, next=0022
test_0022: op=ASSIGN, src=binary_expr_00025:INT, dest=test_l_0021:INT, next=0023
test_0023: op=ADD, src=test_c_0012:INT, test_f_0015:INT, dest=binary_expr_00026:INT, next=0024
test_0024: op=ASSIGN, src=binary_expr_00026:INT, dest=test_c_0012:INT, next=0025
test_0025: op=ADD, src=test_l_0021:INT, test_i_0018:INT, dest=binary_expr_00027:INT, next=0026
test_0026: op=ASSIGN, src=binary_expr_00027:INT, dest=test_l_0021:INT, next=0027
...
49
たとえば
test_0000: op=METHOD_EXIT, src=, dest=, next=0001
test_0001: op=METHOD_ENTRY, src=, dest=, next=0002 (name=test)
test_0002: op=ASSIGN, src=false:BOOLEAN, dest=test_success_0009:BOOLEAN, next=0015
test_0002: op=ASSIGN, src=10:INT, dest=test_a_0010:INT, next=0015
test_0002: op=ASSIGN, src=20:INT, dest=test_b_0011:INT, next=0015
test_0002: op=ASSIGN, src=0:INT, dest=test_c_0012:INT, next=0015
test_0002: op=ASSIGN, src=40:INT, dest=test_d_0013:INT, next=0015
test_0002: op=ASSIGN, src=50:INT, dest=test_e_0014:INT, next=0015
test_0002: op=ASSIGN, src=0:INT, dest=test_f_0015:INT, next=0015
test_0002: op=ASSIGN, src=70:INT, dest=test_g_0016:INT, next=0015
test_0002: op=ASSIGN, src=80:INT, dest=test_h_0017:INT, next=0015
test_0002: op=ASSIGN, src=0:INT, dest=test_i_0018:INT, next=0015
test_0002: op=ASSIGN, src=100:INT, dest=test_j_0019:INT, next=0015
test_0002: op=ASSIGN, src=110:INT, dest=test_k_0020:INT, next=0015
test_0002: op=ASSIGN, src=0:INT, dest=test_l_0021:INT, next=0015
test_0002: op=ADD, src=10:INT, 20:INT, dest=binary_expr_00029:INT, next=0015
test_0015: op=ADD, src=test_a_0010:INT, test_b_0011:INT, dest=binary_expr_00022:INT, next=0016
test_0015: op=ADD, src=test_d_0013:INT, test_e_0014:INT, dest=binary_expr_00023:INT, next=0016
test_0015: op=ADD, src=test_g_0016:INT, test_h_0017:INT, dest=binary_expr_00024:INT, next=0016
test_0015: op=ADD, src=test_j_0019:INT, test_k_0020:INT, dest=binary_expr_00025:INT, next=0016
test_0015: op=ADD, src=binary_expr_00029:INT, 40:INT, dest=binary_expr_00030:INT, next=0016
test_0016: op=ASSIGN, src=binary_expr_00022:INT, dest=test_c_0012:INT, next=0023
test_0016: op=ASSIGN, src=binary_expr_00023:INT, dest=test_f_0015:INT, next=0023
test_0016: op=ASSIGN, src=binary_expr_00024:INT, dest=test_i_0018:INT, next=0023
test_0016: op=ASSIGN, src=binary_expr_00025:INT, dest=test_l_0021:INT, next=0023
test_0016: op=ADD, src=binary_expr_00030:INT, 50:INT, dest=binary_expr_00031:INT, next=0023
...
50
結局プロセッサと何が違うの?
CPU 高位合成でできたもの
処理方式 読む→解釈→実行 演算器としてならべられる
適切なタイミングで確定
命令セット 決まっている 入力コードによって生成
I/O 決まっている 割と自由に追加できる
個数 決まっている 入力コードによって決まる
51
Synthesijerのこれから
52
ロードマップ
手続き型言語的
基本演算,操作
整数プリミ
ティブ型変
数の利用
算術,論理,
シフト演算
(除算・剰
余算以外)
制御構文
(分岐,ルー
プ)
メソッド呼び
出し
除算・剰余
算
浮動小数点
数演算
オブジェクト指向
的インスンタンス
協調
finalでのイ
ンスタンス
の生成
インスタン
スメソッドの
呼び出し
インスタン
ス変数への
リードアク
セス
インスタン
ス変数への
ライトアクセ
ス
インスタン
ス間での配
列読み書き
のサポート
インスタン
スの配列,
配列の配列
のサポート
コンストラク
タのサポー
ト
インスタン
スのチェイ
ンアクセス
並列化
パフォーマンス
基本ブロッ
ク内自動並
列化
Threadに
よる明示的
な処理の並
列化をサ
ポート
ループ内パ
イプライニ
ング
ライブラリ 整数プリミ
ティブ変数
の配列
AXI接続用
のコンポー
ネントライブ
ラリの提供
Stringクラ
スのサポー
ト
ユーザビリティ コマンドライ
ンでのコン
パイル
HDLモ
ジュールと
のバイン
ディング機
構
FPGA合成
ツールとの
連携,統一
的な開発フ
ローの提供
スケジュー
リング可視
化ツール
HDL生成ラ
イブラリを
活用した
DSLの提供
2014年7月 2014年12月 2015年3月 2015年6月
53
市販の高位合成処理系に憧れつつ...
✔ 設計空間の自動探索
✔ パイプライン生成,ストリーム処理対応
54
今後挑戦したいこと
✔ メソッドのパイプライン化
✔ I/Oストリームへの対応
✔ コンストラクタに対応
✔ コンパイル時のJavaプログラム実行
✔ lambda式対応
✔ Streamへの対応
✔ Erlangフロントエンド
55
ところで
56
高位合成処理系は何をするか
入力言語 データフロー スケジューリング
データパス生成
ステート生成
物理マッピング
(1) (2)
(3)
57
共通基盤があると嬉しくない?
✔ 設計コストが小さくなるように
✔ パフォーマンスを出しやすいように
✔ 命令スケジューリング,並列化の抽出
✔ 動作周波数,リソース使用量,レイテンシの考慮
✔ 適切な物理マッピング
✔ 符号化
(1)言語デザイン
(2)アーキテクチャの生成
(3)テクノロジ・マッピング
ベンダの
合成ツール
最強の言語の
設計に没頭!!
共通基盤
58
参考書
✔ 笠原博徳 “並列処理技術” コロナ社
✔ 中田育男 “コンパイラの構成と最適化” 朝倉書店
✔ 中田育男, 佐々政孝, 滝本宗宏, 渡邊坦 “コンパイラの基盤
技術と実践―コンパイラ・インフラストラクチャCOINSを
用いて” 朝倉書店
59
まとめ
✔ 高位合成処理系についてのオーバビュー
✔ Synthesijerのコード生成について
✔ 次回,高位合成友の会も是非ご参加ください

Mais conteúdo relacionado

Mais procurados

仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
magoroku Yamamoto
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
 
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
 

Mais procurados (20)

C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawaV6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
 
OSC2015nagoya
OSC2015nagoyaOSC2015nagoya
OSC2015nagoya
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
Ptt391
Ptt391Ptt391
Ptt391
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan
 
V6read#4
V6read#4V6read#4
V6read#4
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
 

Destaque

パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
Miyoshi Yuya
 

Destaque (20)

FPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみたFPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみた
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi
 
Hdmits fpgax6-v0
Hdmits fpgax6-v0Hdmits fpgax6-v0
Hdmits fpgax6-v0
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
 
なにわTech20160827
なにわTech20160827なにわTech20160827
なにわTech20160827
 
Offloading BPF Implementation to FPGA-NIC したいねって話
Offloading BPF Implementation to FPGA-NIC したいねって話Offloading BPF Implementation to FPGA-NIC したいねって話
Offloading BPF Implementation to FPGA-NIC したいねって話
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシン
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
 
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
SDSoC解体新書2016.2版ソフトウェア編 (チラ見) : Inside SDSoC v2016.2 (Software short edtion)
 
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learning
 
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
 
$30で始めるFPGA
$30で始めるFPGA$30で始めるFPGA
$30で始めるFPGA
 
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
 
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
 
PYNQで○○してみた!
PYNQで○○してみた!PYNQで○○してみた!
PYNQで○○してみた!
 

Semelhante a Synthesijer fpgax 20150201

0730 bp study#35発表資料
0730 bp study#35発表資料0730 bp study#35発表資料
0730 bp study#35発表資料
Yasuhiro Horiuchi
 
攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐
攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐
攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐
CODE BLUE
 
Machine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のこと
Machine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のことMachine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のこと
Machine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のこと
Naoto Tamiya
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション
Takahiro Inoue
 

Semelhante a Synthesijer fpgax 20150201 (20)

PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
20190920 hannaripython20
20190920 hannaripython2020190920 hannaripython20
20190920 hannaripython20
 
0730 bp study#35発表資料
0730 bp study#35発表資料0730 bp study#35発表資料
0730 bp study#35発表資料
 
【更新版】20190628玉川大学脳トレ社会科学oTree演習編
【更新版】20190628玉川大学脳トレ社会科学oTree演習編【更新版】20190628玉川大学脳トレ社会科学oTree演習編
【更新版】20190628玉川大学脳トレ社会科学oTree演習編
 
Python 機械学習プログラミング データ分析演習編
Python 機械学習プログラミング データ分析演習編Python 機械学習プログラミング データ分析演習編
Python 機械学習プログラミング データ分析演習編
 
攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐
攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐
攻撃者の行動を追跡せよ -行動パターンに基づく横断的侵害の把握と調査- by 朝長 秀誠, 六田 佳祐
 
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
po-1. プログラミング入門
po-1. プログラミング入門po-1. プログラミング入門
po-1. プログラミング入門
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
できる!KickstartとAnsible!
できる!KickstartとAnsible!できる!KickstartとAnsible!
できる!KickstartとAnsible!
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
Machine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のこと
Machine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のことMachine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のこと
Machine Learning Casual Talks #4 ビッグデータチームを発足するにあたって気をつけておきたいn個のこと
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
 

Mais de Takefumi MIYOSHI

FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
 

Mais de Takefumi MIYOSHI (20)

ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyo
 
DAS_202109
DAS_202109DAS_202109
DAS_202109
 
ACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組みACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組み
 
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
 
Misc for edge_devices_with_fpga
Misc for edge_devices_with_fpgaMisc for edge_devices_with_fpga
Misc for edge_devices_with_fpga
 
Cq off 20190718
Cq off 20190718Cq off 20190718
Cq off 20190718
 
Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511
 
Reconf 201901
Reconf 201901Reconf 201901
Reconf 201901
 
Hls friends 201803.key
Hls friends 201803.keyHls friends 201803.key
Hls friends 201803.key
 
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
 
Hls friends 20161122.key
Hls friends 20161122.keyHls friends 20161122.key
Hls friends 20161122.key
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
Microblaze loader
Microblaze loaderMicroblaze loader
Microblaze loader
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
 
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
 
Synthesijer hls 20150116
Synthesijer hls 20150116Synthesijer hls 20150116
Synthesijer hls 20150116
 
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
 
ICD/CPSY 201412
ICD/CPSY 201412ICD/CPSY 201412
ICD/CPSY 201412
 
Reconf_201409
Reconf_201409Reconf_201409
Reconf_201409
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
 

Synthesijer fpgax 20150201