2. 目次
n 背景:FPGAと高位合成の流行
l 逐次記述からRTLに変換する動作合成だけでOK?
l 内容に応じて異なるパラダイムを使い分けるのが重要
n 提案:マルチパラダイム型高位ハードウェア設計
l 異なるモデル(RTL・データフロー・逐次)を密結合
l 要素技術:Veriloggen.Dataflow
• オペレータオーバーロードによる
データフローを主体とした演算パイプライン設計
n 評価
l Veriloggen.Dataflowの設計効率の評価
l PyCoRAM逐次合成器を用いたマルチパラダイム方式の初期評価
n まとめ
VLD2016-02 Shinya T-Y, NAIST 2
3. FPGAと高位合成、流行ってますね
n アクセラレータとしての
FPGA
l 機械学習(深層学習)
l データセンター
l スパコン,など
n 高位合成ツールの普及
l Vivado HLSが無料で利用可能
l (Altera, Xilinx共に)
OpenCLによる設計が可能
l オープンソースの高位合成ツールも登場
• LegUp (C)
• Synthesijer (Java)
• Polyphony (Python)
VLD2016-02 Shinya T-Y, NAIST 3
Microsoft Catapult [Putnam+, ISCA'14]
4. 高位合成だけでOK?
n No.
n 動作合成では記述できない・したくない回路も多数存在
l 例)プロセッサ,タイミング・レイテンシ制約が厳しいI/F,等
n 最終的な性能チューニングにはRTLが結局必要だったり
l 例)Traxコンテストで毎回優勝する静岡大学はRTL設計
n 関連研究: プログラミング言語の記述力を活用した
RTL設計方式・ドメイン固有言語
l Chisel[Bachrach+,DAC'12]
l PyMTL[Lockhart+,MICRO’14]
l Synthesijer.Scala[三好,IEICE RECONF'15]
VLD2016-02 Shinya T-Y, NAIST 4
15. Veriloggen.Dataflow:オペレータオーバーロード
によるデータフロー設計
VLD2016-02 Shinya T-Y, NAIST 15
delay
dout3
delay
R
delay
R
delay
R
Cond
R
<
0
Cond
0
<
R
delay
R
Cond
0
Cond
01 2
delay
R
<
R
delay
R
Cond
L
delay
R
2 1
<
0
Cond
0
<
R
delay
R
Cond
0
Cond
0 1 2
L
delay
R
delay
R
Cond
L
delay
R
2 1
<
0
Cond
0
delay
R
delay
R
L
delay
R
din0
L
delay
R
21
din1
R
delay
R
12
delay
R
delay
R
1 2
delay
R
din2
R
delay
R
delay
R
1 2
delay
R
delay
R
delay
R
din3
R
delay
dout2
R
Cond
0
Cond
02 1
dout0 dout1
2 1
delay
R
L
delay
R
2 1
1 2
データフローグラフ生成
遅延レジスタが自動挿入されたパイプライン回路
パイプライン入力
パイプライン出力
17. Veriloggenとその他の処理系との違い
n 高位合成や高位DSLはソースコードそのものが回路定義
l リフレクションを利用:ソースコード情報を取得
l ソースコードを「コンパイラで」解析しデータフロー等に変換
l 回路を追加するにはソースコードを追加する必要がある
• 頻出パターンもコード化しないといけないL
l 生成元言語のサブセットのみ対応L
n Veriloggen.Dataflowは明示的にHDLを組み立てる
l リフレクション未使用:ソースコードそのもの定義は無関係
l ソースコードの「実行」によりデータフロー等を構築
l 回路の追加は明示的なオブジェクト操作で実現される
• 頻出パターンはメソッド切り出しができるJ
l 生成元言語のすべての機能を利用できるJ
l ソフトウェア文法をそのままHW化はできないL
VLD2016-02 Shinya T-Y, NAIST 17
24. PyCoRAMにおけるIPコアの作り方・でき方
n 2種類のファイルを用意する
l Verilog HDL:
計算ロジック
l Python:
データ転送制御
n PyCoRAMが自動的にIPコアのパッケージを作成
l Python-Verilog高位合成とRTL変換を自動で行う
CoramMemory1P
#(
.CORAM_THREAD_NAME("thread_name
"),
.CORAM_ID(0),
.CORAM_ADDR_LEN(ADDR_LEN),
.CORAM_DATA_WIDTH(DATA_WIDTH)
)
inst_memory
(.CLK(CLK),
.ADDR(mem_addr),
.D(mem_d),
.WE(mem_we),
.Q(mem_q)
);
VLD2016-02 Shinya T-Y, NAIST 24
25. 評価
n 本発表では2つの観点で評価
l Dataflow.Dataflowの生産性
l マルチパラダイム型高位設計環境の初期検討
n Dataflow.Dataflowの生産性について
l アプリケーション: ソーティングネットワーク
• 完全なパイプライン回路:N-sort / cycle
• N = 4, 8, 16, 32 で評価
l 参考までにLED点灯回路(Lチカ)も評価
VLD2016-02 Shinya T-Y, NAIST 25
26. 評価
n マルチパラダイム型高位設計環境の初期検討
l RTL+Dataflow+Threadを併せ持つ高位設計環境の
プロトタイプを開発
l Pythonをベースとする独立した開発済みツールを簡易的に結合
• RTL: Veriloggen
• Dataflow: Veriloggen.Dataflow
• Thread: PyCoRAM (Thread Generator部)
n 評価方法
l SLOC: Source Lines of Code
• 同一のPyCoRAM IPコアを作成するのに必要なPythonでの
コード行数と従来手法(Verilog HDL+Python)の行数を比較
l 回路規模・最大動作周波数(見積もり)
• 合成ツール: Xilinx ISE 14.7
• デバイス: Airtix-7 XC7A100T-1csg324
VLD2016-02 Shinya T-Y, NAIST 26
27. 評価アプリケーション
n 密行列積 PyCoRAM IPコア
l 従来はRTL・Dataflow部はVerilog HDLにて実装
l 本評価ではPythonにて実装しVerilog HDLを生成
VLD2016-02 Shinya T-Y, NAIST 27
Computing Logic
Control
Thread
(Python)
sum
CoRAM
Memory 0
B
× +
CoRAM
Memory 1
CoRAM
Memory 2
Control Logic
CoRAM
Channel 0
8-stage
Multiply
PipelineA
C
Dataflow
Thread
RTL
28. 評価結果: Dataflowの生産性
n 単一のPythonコードから異なる構成のハードウェアを
n 単一のPythonコードから異なる構成のハードウェアを
生成可能
l 45行のPythonコードから4種類のソート回路を生成
l 遅延レジスタ・ストール用回路等は自動で挿入される
l →高い生産性を持つと言って良いのでは?
VLD2016-02 Shinya T-Y, NAIST 28
Python Verilog
29. 評価結果: マルチパラダイム方式の初期検討
n 単一のPythonコードから異なる構成のハードウェアを
n RTL+Dataflow: 4倍程度の長さのVerilogコードを生成
l 手書きのものと比べての遜色ないコード長
n 回路規模については若干削減
l Dataflowにより合成されたパイプラインの構成が若干異なる?
VLD2016-02 Shinya T-Y, NAIST 29
Python Verilog
手書きVerilog