SlideShare a Scribd company logo
1 of 80
Download to read offline
Pythonによる高位設計
フレームワークPyCoRAMで
FPGAシステムを開発してみよう
高前田 伸也
奈良先端科学技術大学院大学 情報科学研究科
E-mail: shinya_at_is_naist_jp
2015年8月28日 14:30-15:50 (s5c)
SWEST17@下呂温泉水明館
(第38回SIGEMB招待講演)
今日のテーマ
n  「好きな道具」で「好きなもの」を作る世界
l  発表者の場合
•  好きな道具: 好きな言語(Python)・モデル・書き方
•  好きなもの: FPGAを使ったカスタムコンピュータ
n  「こんな風に設計できたらいいな」を実現しよう
l  自分の手になじむ道具を実際に作ろう、そして公開しよう
l  発表者の場合
•  PyCoRAM: PythonによるIPコア高位設計フレームワーク
•  Pyverilog: Verilog HDL解析・生成ツールキット
•  Veriloggen: PythonでVerilog HDLを組み立てる軽量ライブラリ
SWEST2015 Shinya T-Y, NAIST 2
All software are available!
n  GitHubで公開中
l  PyCoRAM: https://github.com/PyHDI/PyCoRAM
l  Pyverilog: https://github.com/PyHDI/Pyverilog
l  Veriloggen: https://github.com/PyHDI/veriloggen
n  PIP(Pythonパッケージ管理)でもインストール可
l  ただしGitHubが最新版です
SWEST2015 Shinya T-Y, NAIST 3
$ pip install pyverilog�
$ pip install pycoram�
$ pip install veriloggen�
$ git clone https://github.com/PyHDI/Pyverilog.git�
$ git clone https://github.com/PyHDI/PyCoRAM.git�
$ git clone https://github.com/PyHDI/veriloggen.git�
目次
n  FPGAとは?
l  FPGAの基礎
l  近年のFPGAを取り巻く環境
n  高位合成ツールとは?
l  高位合成の基礎
l  商用ツールとオープンソースなツール
n  Pythonによる高位設計フレームワークPyCoRAM
l  PythonとVerilog HDLを組み合わせたIPコア設計ツール
l  関連ツールの紹介: Pyverilog, Veriloggen
n  今後の高位合成ツールはどうあるべきか?
l  まじめな話とフランクは話
n  まとめ
SWEST2015 Shinya T-Y, NAIST 4
FPGAとは?
SWEST2015 Shinya T-Y, NAIST 5
ヘテロジニアスコンピューティング
OoO
Core
OoO
Core
OoO
Core
OoO
Core
L2 L2 L2 L2
L3 Cache
DDR3 DRAM
Multicore (Intel Corei7)
L2 Cache
GDDR5 DRAM
GPU (NVIDIA GeForce)
DDR3 DRAM
Manycore (Intel Xeon Phi)
DDR3 DRAM
FPGA (Xilinx Virtex-7)
SWEST2015 Shinya T-Y, NAIST 6
FPGA (Field Programmable Gate Array)
n  中身を改変可能なLSI
(PLD: Programmable Logic Device)
l  設計者が独自のデジタル回路を形成することができる
l  対してCPUやGPUはFLD (Fixed Logic Device)?
n  CPUなどとの大きな違いは?
l  CPUの振る舞いはソフトウェア(プログラム)で規定される
•  ユーザはCPUそのものの回路を変更することはできない
l  FPGAの振る舞いはハードウェアそのものの変更で変えられる
Digital circuits
SWEST2015 Shinya T-Y, NAIST 7
FPGAボードの基礎
FPGA
(Xilinx Virtex-7 XC7V690T)
DDR3 SODIMM
(4GB x2)
PCI-express10Gbps Ethernet x4
SATA-3 x2
Digilent NetFPGA SUME
Price $24,500
SWEST2015 Shinya T-Y, NAIST 8
SWEST2015 Shinya T-Y, NAIST 9
Digilent Nexys3
FPGA: Xilinx Spartan-6 LX16
Size: Pipelined CPU ×2
Price: 15,000yen (Academic)
Digilent ZedBoard
FPGA: Xilinx Zynq 7020
Size: Pipelined CPU ×8 (+ ARM DualCore)
Price: 60,000yen (Academic)
SWEST2015 Shinya T-Y, NAIST 10
SSD
Dual Camera
FPGA (Xilinx Zynq 7020, ARM Dualcore)
+DDR3 DRAM 512MB
SSD Interface
SWEST2015 Shinya T-Y, NAIST 11
Xilinx ZC706
FPGA: Xilinx Zynq 7045
Size: Pipelined CPU ×16
Price: 300,000yen
SWEST2015 Shinya T-Y, NAIST 12
Tokyo Electron Deice TB-6V-LX760-LSI
FPGA: Xilinx Virtex-6 LX760
Size: Pipelined CPU x100?
Price: 4,000,000yen?
ScalableCore System
FPGA: Xilinx Spartan-6 ×100
Size: Pipelined CPU x200?
Price: 100万円程度?
SWEST2015 Shinya T-Y, NAIST 13
アイランドスタイルFPGAの構成
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
SB
CB
SB
CB
SB
IOB
IOB
IOB
IOB
IOB
IOB
IOBIOBIOB
IOBIOBIOB
FPGA
SB
LB
CB
IOB
Logic Block
Switch Block
Connection Block
I/O Block
Wire
•  An LB has logical
circuit components for
both combinational
circuits and sequential
circuits
•  They are connected via
interconnection
components (SB, CB
and wire)
SWEST2015 Shinya T-Y, NAIST 14
アイランドスタイルFPGAの構成
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
SB
CB
SB
CB
SB
IOB
IOB
IOB
IOB
IOB
IOB
IOBIOBIOB
IOBIOBIOB
FPGA
SB
LB
CB
IOB
Logic Block
Switch Block
Connection Block
I/O Block
Wire
•  An LB has logical
circuit components for
both combinational
circuits and sequential
circuits
•  They are connected via
interconnection
components (SB, CB
and wire)
SWEST2015 Shinya T-Y, NAIST 15
Logic Block
n  Two basic elements in a logic block
l  LUT (Look Up Table): for combinational circuits
l  Flip-flop: for memory (sequential circuits)
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
CB
LB
SB
CB
SB
CB
SB
CB
SB
CB
SB
IOB
IOB
IOB
IOB
IOB
IOB
IOBIOBIOB
IOBIOBIOB
FPGA
Logic Block
LUT
D Q
SWEST2015 Shinya T-Y, NAIST 16
LUT: Look Up Table
n  LUTs realize combinational logics
n  An LUT returns a 1-bit value corresponding to the input
bit-vector (=Boolean function)
l  N-input LUT has 2N combinations of results: 4-input LUT has 16
a[0]
a[1]
a[2]
a[N-1]
N-input
LUT
b
Input Output
000…0 0
000…1 1
… …
111…1 0
SWEST2015 Shinya T-Y, NAIST 17
FPGA in Anywhere
n  LSI設計・検証のプラットフォームとして
l  LSIの機能を製造前に検証
l  HWの完成を待たなくても
SWの開発検証ができる
l  ソフトウェアシミュレータによる
回路シミュレーションよりも
高速に検証できる
n  最終製品に組み込むLSIとして
l  画像処理
l  ネットワーク機器
n  アクセラレータとして
l  データベース
l  ウェブ検索
l  証券取引
l  機械学習
SWEST2015 Shinya T-Y, NAIST 18
Input Layer Hidden Layers Output Layer
Convolution Pooling Max Out Convolution Full Connection
ASIC vs. FPGA
n  ASIC (Application Specific Integrated Circuit)
l  それぞれのアプリケーションに特化した専用回路を設計
•  専用パイプライン・高い周波数で高い性能
n  FPGA (Field Programmable Gate Array)
l  どのアプリケーションも数種類のFPGAで実現:少量生産もOK
l  製品リリース後の回路構成の改変が可能
The number of units
Cost
ASIC
FPGA
FPGA is cheaper ASIC is cheaper
SWEST2015 Shinya T-Y, NAIST 19
増え続けるFPGAの回路規模
n  トランジスタの
スケーリングにより
FPGの回路規模も増大
l  5年で6倍以上に増加
l  今後も更なる増加が予想
•  マルチダイ化
•  3次元積層
n  その分設計が大変に
l  設計検証の時間が増大
l  効率的な開発方式が必要
•  RTLのみの開発の限界
•  高位合成処理系の利用
From Xilinx UG872SWEST2015 Shinya T-Y, NAIST 20
How to Develop a Software?
Writing a software
in programming languages
Preprocess
Compile
Assemble
Link
CompilerFlow
Execution on a CPU
int main(){�
int a = 1 + 2;�
printf(“Hello %dn”, a);�
return 0;�
}�
add $t0, $t1, $t2�
li $v0, 1�
syscall�
ELF01ABF00F1...�
Executable Binary
SWEST2015 Shinya T-Y, NAIST 21
How to Develop a (FPGA) Hardware?
Writing a hardware design in HDL
(Hardware Description Language)
Synthesis
Technology Mapping
Place and Route
Bitstream Generation
EDAFlow
Configuration of the bitstream
to an FPGA
module top�
(input CLK, RST, �
output reg [7:0] LED);�
always @(posedge CLK) begin�
LED <= LED + 1;�
end�
endmodule�
1A0C021E...�
Original HW on an FPGA
Bitstream
SWEST2015 Shinya T-Y, NAIST 22
近年のFPGAを取り巻く環境
SWEST2015 Shinya T-Y, NAIST 23
ARM搭載FPGAの登場 (1)
n  ARMプロセッサ+FPGA (Xilinx Zynq, Altera SoC)
l  専用インターコネクトで密結合,キャッシュ・DRAM共有
l  普通のLinuxが動作する→大量なソフトウェア資源が利用可能
Zynq-7000 All Programmable SoC
http://japan.xilinx.com/products/silicon-devices/soc/zynq-7000.html
AlteraのARMベースSoC
https://www.altera.com/ja_JP/pdfs/literature/br/br-soc-fpga_j.pdf
SWEST2015 Shinya T-Y, NAIST 24
ARM搭載FPGAの登場 (2)
n  普通のFPGAとは何が違う?
l  そもそも通常のFPGA上もCPU搭載可能(ソフトマクロ)
l  コア性能が数倍∼10倍違う
•  MicroBlaze: 100MHz∼200MHz, In-order, Single issue
•  ARM: 600MHz∼1GHz, OoO, Super scalar
n  独自のHW/SW協調SoCの実現が容易になる
l  面倒な処理は処理はCPU上のソフトウェアで実現
•  ネットワーク・ファイルシステムなど
l  並列処理部はFPGA上の専用ハードウェアで実現
•  並列度とメモリ帯域に応じて演算器を追加し高速化
•  必要に応じて演算精度を削り更に高速化
l  CPU-FPGAロジック間のデータ共有は?
•  キャッシュ・DRAMをCPUとロジックで共有しているので簡単
SWEST2015 Shinya T-Y, NAIST 25
例)Zynq 7000 アーキテクチャ
n  ARM Cortex-A9 (Dual-core, OoO, 8-stage)
n  3種類のCPU-PL間接続 (すべてAXIインターフェース)
AXI GP Port AXI HP Port
AXI
ACP
Port
Cache
DRAM
GP
•  低速
•  制御レジスタ
アクセス用
HP
•  高バンド幅
•  DRAMへの
バースト転送向け
ACP
•  低レイテンシ
•  キャッシュ
コヒーレント
•  CPUとの
データ共有向け
http://www.ioe.nchu.edu.tw/Pic/CourseItem/4468_20_Zynq_Architecture.pdf
http://japan.xilinx.com/support/documentation/data_sheets/j_ds190-Zynq-7000-Overview.pdf
SWEST2015 Shinya T-Y, NAIST 26
浮動小数点ユニット搭載FPGA
n  従来FPGAのDSP(乗算)ユニットは整数のみ対応
l  浮動小数点演算は変換ロジックを組み合わせて実現
(ソフトマクロ)→大きな回路・電力オーバーヘッド
•  そのため浮動小数点演算ではGPUが有利だった
n  Altera次期モデルがハードマクロ浮動小数点DSPを搭載
l  コンピューティングデバイスとしてのFPGAの利用が増加?
Altera Expands Floating-Point Hardware Support Across
Its Product Lines
http://www.bdti.com/InsideDSP/2014/07/22/Altera
SWEST2015 Shinya T-Y, NAIST 27
IPコアベースのシステム開発環境の普及
n  IPコアを開発・追加して繋げばHW完成J
l  標準的なインターコネクトでIPコア達を接続
l  EDAツールが自動的にインターコネクトと(いくつかの)
デバイス依存のインターフェースを生成してくれるため楽
l  いかにしてIPコアを簡単に開発するかが重要
•  高位合成ツールの活用
SWEST2015 Shinya T-Y, NAIST 28
FPGA
CPU
HW
Acc
DRAM
I/F
Ether PCI-E
Interconnect
HW
Acc
DRAMXilinx VivadoにおけるIPコアとARMの接続
アプリケーションの変化
n  以前は画像処理やネットワーキングなどが主流
n  「ビッグデータ」指向へ: 脱ノイマン型?
l  イーサネットNICでMemcached [Fukuda+, FPL’14]
l  Microsoft Bing search engine (Catapult) [Putnam+, ISCA'14]
•  FPGA間を専用線で接続するクラスタシステム
SWEST2015 Shinya T-Y, NAIST 29Fig1 from [Putman+, ISCA'14]Fig2 from [Fukuda+, FPL'14]
高位合成のあれこれ
SWEST2015 Shinya T-Y, NAIST 30
高位合成とは?
n  動作モデルからRTLモデルを
生成するツール・コンパイラ
l  入力: ソフトウェアのソースコード
•  C, C++, OpenCL, Java, Python, ...
l  出力: RTL(HDLソースコード)
•  Verilog HDL, VHDL
n  構成:SWコンパイラと同等の
フロントエンドと高位合成
ならではのバックエンド
l  フロントエンド: 抽象構文木(AST)生成・
コントロールデータフロー(CDFG)解析
l  バックエンド: 「いつ」「どの演算」を
するか決めたり、演算を演算器に、
変数をレジスタに割り当てり
SWEST2015 Shinya T-Y, NAIST 31
ソースコード
構文解析
コントロール・
データフロー解析
スケジューリング
アロケーション
制御回路生成
コード生成
RTL
フロント
エンドバックエンド
FPGAシステムの設計フロー(高位合成なし)
SWEST2015 Shinya T-Y, NAIST 32
システム設計 (HW/SW分割)
要件・仕様
HW
ソフトウェア設計
SW
HWアーキテクチャ設計
論理合成・配置配線
RTL設計・実装 ソフトウェア実装
コンパイル
システム
データフロー・
メモリシステム
クロックレベル
の振る舞い・
HDLによる実装
ほぼ合成ツール
による自動処理
HW/SW結合により
システム完成
シミュレータを
用いた検証を行
うことも
早い段階でHW/SWを分割
全体を一旦SW実装してから
HW/SW再設計することも
FPGAシステムの設計フロー(高位合成あり)
SWEST2015 Shinya T-Y, NAIST 33
システム設計
要件・仕様
HW
ソフトウェア設計 (HW/SW混合設計)
SW
論理合成・配置配線
HW部高位設計
ソフトウェア実装 (全体実装)
コンパイル
システム
全体をSWで実装
その後一部をHW化
プログラミング
言語による動作
モデル実装
合成ツールによ
る自動処理
HW/SW結合により
システム完成
シミュレータを
用いた検証を行
うことも
高位合成
高位合成ツール
によるRTL生成
ソフトウェア実装
一部HW化の
ためのイン
ターフェー
スの実装等
RTL設計と高位設計の違い
n  RTL (Register Transfer Level) 設計
l  クロックサイクルレベルでレジスタ間のデータ移動や演算の
タイミングを定義する
l  Timed設計:「なに」を「いつ」「どのように」行うかを定義
l  通常のソフトウェアでいう「アセンブリ」の様なもの
n  高位設計(動作設計・High Level Synthesis)
l  (一般に)汎用プログラミング言語を用いて振る舞いを定義
l  Untimed設計:「なに」を行うかを実装
•  「いつ」「どのように」かは定義しなくても良い
•  指示子(Directive)で「いつ」「どのように」の情報を付加すること
により、より良いハードウェアが生成される
l  通常のソフトウェアでいう高級プログラミング言語に設計
SWEST2015 Shinya T-Y, NAIST 34
例:2配列の積和演算 (c += a * b)
SWEST2015 Shinya T-Y, NAIST 35
積和演算器(トップレベル) 乗算器
RTL設計 (Verilog HDL): 105行,2098文字,15分
「いつ」「なに」を
「どのように」するかを
設計者が決める
例:2配列の積和演算 (c += a * b)
SWEST2015 Shinya T-Y, NAIST 36
高位設計 (C言語): 11行,163文字,1分
→1/10の記述量と1/15の開発時間
(ただしディレクティブ等はなし)
(性能が出れば)高位設計最高!
「なに」をするかだけを
設計者が決める
FPGA向け商用高位合成ツールが多数登場
n  Xilinx Vivado HLS (+ SDSoC)
l  C/C++で振る舞いを定義・ディレクティブで性能チューニング
l  SDSoCならSWコードから部分的にHW化・I/Fも自動生成
l  その他C言語ベースImpulse C・CWB・eXCiteなど
n  OpenCL系: Altera OpenCLやXilinx SDAccel
l  ホストPCありき・ホストPC上SWのお作法も定義
https://www.youtube.com/
watch?v=URUVkq6zQhQ
SWEST2015 Shinya T-Y, NAIST 37
オープンソースな高位合成ツールの登場
n  LegUp: トロント大で開発されているCベース処理系
l  C記述をMIPS CPU用SW部とHW部に自動分割・論文多数
n  Synthesijer: Javaによる高位合成処理系
l  Java言語仕様に改変なし,サブセットをそのまま合成可能
9
クイックスタート 5/8
(5) 間隔をおいて変数ledをtrue/falseするプログラムを書く
Lチカに相当する変数
適当なウェイト
点滅
自動コンパイルが裏で動くので,Javaコードとしての正しさは
即座にチェックされる
2
Synthesijer とは
✔ JavaプログラムをFPGA上のハードウェアに変換
✔ 複雑なアルゴリズムのハードウェア実装を楽に
✔ オブクジェクト指向設計による再利用性の向上
✔ 特殊な記法,追加構文はない
✔ ソフトウェアとして実行可能.動作の確認、検証が容易
✔ 書けるプログラムに制限は加える
(動的なnew,再帰は不可など)
Javaコンパイラ
フロントエンド
Synthesijer
エンジン
Javaコンパイラ
バックエンド
合成
配置配線
while(){
if(...){
…
}else{
…
…
}
….
}
複雑な状態遷移も,Javaの制御構文を使って楽に設計できる
同じJavaプログラムをソフトウェアとしても
FPGA上のハードウェアとしても実行可能
Open-source
http://www.sigemb.jp/ESS/2014/files/IPSJ-ESS2014003-1.pdf
SWEST2015 Shinya T-Y, NAIST 38
高位合成のメリット・デメリット
n  メリットJ
l  いつものプログラミング言語でハードウェアが開発できる
l  少ない記述量:RTL設計の1/10以下
l  デバッグのしやすさ:
通常のソフトウェアとして実行して機能レベルの正しさを検証
n  デメリットL
l  達成可能な性能・電力効率・面積効率はRTL設計の方が高い
•  RTL設計は開発者の知見(アプリケーションの要件等)が直接反映
l  癖のあるソースコードを書く必要がある
•  専用の型の導入や機能制限
•  性能を追求するにはディレクティブを多数挿入する必要がある
–  結局書き直すならRTLで書き直しても良いのでは?という人も多い
l  クロックサイクルレベルの振る舞いを書くのが苦手
•  I/Oの制御を細粒度に行う回路等は不向き(なことが多い)
SWEST2015 Shinya T-Y, NAIST 39
PyCoRAM
Pythonによるハードウェア
IPコア設計フレームワーク
SWEST2015 Shinya T-Y, NAIST 40
背景
n  CPU with IP-cores
l  ハードマクロCPU (ARM) 搭載FPGAが主流に: Xilinx Zynq, etc
l  専用HWはIPコアとして実装し
インターコネクト(AXI4やAvalon)を介してCPUと接続
n  どのようにしてアクセラレータIPコアを設計するか?
l  HDLですべて設計するのは大変
•  例)演算とメモリアクセスのスケジューリング
–  ダブルバッファリングとか面倒
–  HDLでステートマシンを書くのは大変だし間違えやすい
l  性能を出すには高稼働率パイプラインとデータ供給機構が必要
•  ストールのない綺麗なパイプラインを定義したい: HDLが得意
•  (OSSな)高位合成系だとチューニングが難しい
n  →データ転送を抽象化すれば幸せそう?
SWEST2015 Shinya T-Y, NAIST 41
CoRAM [Chung+,FPGA’11]
n  FPGAアクセラレータのためのメモリ抽象化
l  高位モデルによるメモリ管理でアクセラレータをポータブルに
•  計算カーネルとメモリアクセスの分離
•  ソフトウェアのモデルによるメモリアクセスパターンの記述
HW Kernels
(Computing Logics)
CoRAM
Memory
Read
Write
Manage
Control Threads
(Memory Access
Pattern)
CoRAM
Channel
Read/Write Read/Write
Communication
FIFOs (Registers)
Abstracted
On-chip Memories
Off-chip
Memory
SWEST2015 Shinya T-Y, NAIST 42
PyCoRAM [Takamaeda+,CARL’13]
n  抽象化されたインターコネクトとメモリシステムの上で
IPコアを開発するフレームワーク
l  標準的なインターコネクトに繋げる:AMBA AXI4, Altera Avalon
l  ポータブル:抽象化がプラットフォームの違いを吸収
l  CPUや他のIPコアと共存が容易:ビルディングブロック開発
SWEST2015 Shinya T-Y, NAIST 43
On-chip Interconnect (AXI4, Avalon)
PyCoRAM
Abstraction
Accelerator logic
Standard IP-core
Device-dependent Interfaces
(DRAM, etc)
CPU
Portable application
with PyCoRAM
Cooperation with standard IP-cores
PyCoRAM:フレームワーク構成
n  入力:2種類のソースコード
l  データフロー(演算パイプライン):Verilog HDL
l  データ転送制御:Python
n  出力:演算パイプと制御機構を持つIPコア
l  DMAを主体としたデータ転送重点型ハードウェアが合成される
SWEST2015 Shinya T-Y, NAIST 44
データフロー
(Verilog HDL)
制御フロー
(Python)
HW
構造
解析
RTL
変換
制解
対象
解析
高位
合成
処理系
による
RTL化
インター
フェース
合成
・
IPコア
パッケー
ジ化
PyCoRAMコンパイルフロー
入力: 高抽象度
デザイン
出力: 演算パイプライン+データ供給エンジンを
持つアクセラレータIPコア・システム
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
オンチップ・インターコネクト
メインメモリ (DRAM)
IPコア
IOChannel/
IORegister
PyCoRAM:アーキテクチャ
SWEST2015 Shinya T-Y, NAIST 45
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
IOChannel/
IORegister
PyCoRAM:アーキテクチャ
SWEST2015 Shinya T-Y, NAIST 46
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
IOChannel/
IORegister
Computing Logic
Modeled in Verilog HDL
Control Thread
Modeled in Python
PyCoRAM:アーキテクチャ
SWEST2015 Shinya T-Y, NAIST 47
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
IOChannel/
IORegister
Memory: ロジック用ローカルメモリ
Stream: ロジック用FIFO
Channel: ロジック-スレッド間FIFO
Register: ロジック-スレッド間共有レジスタ
IO Channel: 外部制御用FIFO
IO Register: 外部制御用共有レジスタ
PyCoRAM:アーキテクチャ
SWEST2015 Shinya T-Y, NAIST 48
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
オンチップ・インターコネクト
メインメモリ (DRAM)
IOChannel/
IORegister
PyCoRAM:アーキテクチャ
SWEST2015 Shinya T-Y, NAIST 49
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
オンチップ・インターコネクト
メインメモリ (DRAM)
IOChannel/
IORegister
Master Interface
メモリへ能動的にアクセス
Slave Interface
CPUからアクセスされる
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)�
);�
def calc_sum(times):�
ram = CoramMemory(idx=0, datawidth=32, size=1024)�
channel = CoramChannel(idx=0, datawidth=32)�
addr = 0�
sum = 0�
for i in range(times):�
ram.write(0, addr, 128)�
channel.write(addr)�
sum += channel.read()�
addr += 128 * (32/8)�
print(‘sum=’, sum)�
calc_sum(8)�
SWEST2015 Shinya T-Y, NAIST 50
計算ロジックにおけるPyCoRAMオブジェクト
n  ブロックRAMやFIFOと同様のインターフェス
l  ロジック側からおなじみのインターフェースでアクセスできる
l  いくつかのパラメータで特性を指定
•  スレッド名,ID,データ幅,アドレス幅,スキャッターギャザー等
l  外部を接続するインターフェースは自動的に追加される
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)�
);�
(a) Memory
CoramChannel�
#(�
.CORAM_THREAD_NAME("thread_name"),�
.CORAM_ID(0),�
.CORAM_ADDR_LEN(CHANNEL_ADDR_LEN),�
.CORAM_DATA_WIDTH(CHANNEL_DATA_WIDTH)�
)�
inst_channel�
(.CLK(CLK),�
.RST(RST),�
.D(comm_d),�
.ENQ(comm_enq),�
.FULL(comm_full),�
.Q(comm_q),�
.DEQ(comm_deq),�
.EMPTY(comm_empty)�
);�
(b) Channel
SWEST2015 Shinya T-Y, NAIST 51
Pythonによるコントロールスレッド
n  PyCoRAMオブジェクトに対する処理を記述する
l  CoramMemory: read(), write()
•  MemoryとDRAMとの間のDMA転送によるデータ移動
l  CoramChannel: read(), write()
•  計算ロジックとコントロールスレッドの間のデータのやりとり
def calc_sum(times):�
ram = CoramMemory(idx=0, datawidth=32, size=1024)�
channel = CoramChannel(idx=0, datawidth=32)�
addr = 0�
sum = 0�
for i in range(times):�
ram.write(0, addr, 128)�
channel.write(addr)�
sum += channel.read()�
addr += 128 * (32/8)�
print(‘sum=’, sum)�
calc_sum(8)�
# Transfer (off-chip DRAM to BRAM)
# Notification to User-logic
# Wait for Notification from User-logic
# $display Verilog system task
�
0�
1�
2�
3�
4�
5�
6�
7�
8�
9�
10�
11�
SWEST2015 Shinya T-Y, NAIST 52
例: 配列の和を求めるアクセラレータ
n  1メモリ+1スレッドの簡単なハードウェア
l  CoramMemoryにDRAMからデータを読み込む
l  スレッド側でCoramMemory-DRAM間のデータ転送系列を表現
Computing Logic (Verilog HDL)
Control
Thread
(Python)
sum
Coram
Memory 0
+
Control Logic
Coram
Channel 0
A
SWEST2015 Shinya T-Y, NAIST 53
計算ロジック (1): I/Oポート
クロック(CLK)とリセット(RST)
以外に専用のI/Oは不要
CoramMemoryのための信号
(BRAMと同じインターフェース)
CoramChannelのための信号
(FIFOと同じインターフェース)
ステートマシン用変数
SWEST2015 Shinya T-Y, NAIST 54
計算ロジック (2): パイプライン/FSM
CoramChannelに書き込み
(コントロールスレッドに通知)
CoramChannelから読み出し
(コントロールスレッドから受信)
SWEST2015 Shinya T-Y, NAIST 55
計算ロジック (3): 子インスタンス
CoramMemory
(BRAMと同じインターフェース)
CoramChannel
(FIFOと同じインターフェース)
SWEST2015 Shinya T-Y, NAIST 56
コントロールスレッド (Python)
ram (CoramMemory)とchannel (CoramChannel)の宣言
CoramMemoryにDMA転送したり
CoramChannelから読んだり書いたり
SWEST2015 Shinya T-Y, NAIST 57
コンパイル
SWEST2015 Shinya T-Y, NAIST 58
シミュレーション結果
SWEST2015 Shinya T-Y, NAIST 59
シミュレーション結果(波形)
SWEST2015 Shinya T-Y, NAIST 60
例)行列積IPコア
n  行列A・B・Cの各行をCoRAMメモリに格納
l  DRAMとの間のデータ転送をコントロールスレッドが担当
l  毎サイクル乗算パイプラインにデータを投入
l  行列Bの転送と演算をダブルバッファリング
l  SIMD幅をメモリバンド幅を使い切るように合わせる
Computing Logic (Verilog HDL)
Control
Thread
(Python)
sum
CoRAM
Memory 0
B
× +
CoRAM
Memory 1
CoRAM
Memory 2
Control Logic
CoRAM
Channel 0
8-stage
Multiply
PipelineA
C
check
sum+
I/O
Channel
SWEST2015 Shinya T-Y, NAIST 61
例)ダイクストラIPコア
n  PyCoRAMを使って演算モジュールはVerilog HDLで実装
メモリアクセス制御はPythonで実装
Read Node
InStream
Read Edge
InStream
Update
Node
OutStream
Mark Visited
OutStream
Priority Queue
InStreamOutStream
Edge
Page
Addr
Cost
+
Next Node Addr
Node
Addr
Next Node Cost
Node Addr
Next Node Addr
Next Node Cost
FSM
DMAC DMAC DMAC DMAC DMAC DMAC Slave I/F
AXI4 Master Interfaces
AXI4-lite
Slave Interfaces
Dijkstra
Logic
(Modeled in Verilog
HDL)
Mark Visited
Cthread
Read Node
Cthread
Read Edge
Cthread
Priority Queue Cthread
Mark Visited
Cthread
Main
CThread
Control Threads (Modeled in Python)
UserDefinition(ModeledinVerilogHDLandPython)Generatedby
PyCoRAM
SWEST2015 Shinya T-Y, NAIST 62
FPGAシステム開発で面倒なところ
n  CPUや他のIPとの接続方法・インターフェース実装
l  IPコアのバスインターフェス:AXI4, Avalon
•  PyCoRAMならインターフェースもIPコア設定ファイルも自動生成
n  データの置き場・供給方法
l  オンチップメモリ(ブロックRAM)・DRAM
•  PyCoRAMならDRAM-オンチップメモリ間のデータ移動制御は
Pythonで書けて楽ちん
n  CPUとのデータ共有方法
l  OSなし:論理メモリ空間=物理メモリ空間なので簡単
•  volatileな変数を使えばOK
l  OSあり:仮想メモリが存在するため面倒
•  CPU: 仮想メモリあり,論理アドレスでアクセス
•  HW: 仮想メモリなし,物理アドレスでアクセス
–  数MB以上の物理連続領域を確保するの小技が必要
SWEST2015 Shinya T-Y, NAIST 63
Zynq + PyCoRAM (+Debian) 入門
n  SlideShareでチュートリアルスライド公開中
l  http://www.slideshare.net/shtaxxx/zynqpycoram
n  今時のFPGAアクセラレータを
作る方法の一例をまとめました
l  PyCoRAM IPコアの作り方
l  Zynq (ARM搭載FPGA)の上で
Debian Linuxを動作させるには
l  その上でPyCoRAM IPコアを
使うにはどんなSWが必要か
n  2015年3月時点の情報なので
そろそろ更新予定
l  Debian 7.0から8.0へ移行
l  HW用メモリ領域確保の方法更新
SWEST2015 Shinya T-Y, NAIST 64
Pyverilog & Veriloggen
SWEST2015 Shinya T-Y, NAIST 65
Pyverilog: Verilog HDL解析・生成ツールキット
SWEST2015 Shinya T-Y, NAIST 66
Module
Analyzer
Syntax
Analyzer
Lexical
Analyzer
AST
Signal
Analyzer
Bind
Analyzer
Dataflow
State
Machine
Pattern
Matcher
Control-flow
Optimizer
Code
Generator
Active
Condition
Analyzer
Visualizer
Verilog HDL
Code
module TOP
(input CLK,
input RST,
output rslt, …
Graphical
Output
Verilog HDL
Code
module TOP
(input CLK,
input RST,
output rslt, …
Parser
Dataflow Analyzer
Control-flow Analyzer
Input
Output
AST
構文解析・抽象構文木(AST)生成
SWEST2015 Shinya T-Y, NAIST 67
1 module stopwatch
2 (
3 input CLK,
4 input RST,
5 input start,
6 input stop,
7 input init,
8 output reg busy,
9 output reg [31:0] timecount
10 );
11 localparam IDLE = 0;
12 localparam COUNTING = 1;
13 localparam WAITINIT = 2;
14 reg [3:0] state;
15 always @(posedge CLK) begin
16 if(RST) begin
17 state <= 0;
18 timecount <= 0;
19 end else begin
20 if(state == IDLE) begin
21 if(start) begin
22 state <= COUNTING;
23 timecount <= 0;
24 busy <= 1;
25 end
26 end else if(state == COUNTING) begin
27 timecount <= timecount + 1;
28 if(stop) begin
29 state <= WAITINIT;
30 busy <= 0;
31 end
32 end else if(state == WAITINIT) begin
33 if(init) begin
34 timecount <= 0;
35 state <= IDLE;
36 end else if(start) begin
37 timecount <= 0;
38 state <= COUNTING;
39 end
40 end
41 end
42 end
43 endmodule
11 17, 14 17:10 Page 1/1stopwatch.v
Source:
Description:
ModuleDef: stopwatch
Paramlist:
Portlist:
Ioport:
Input: CLK, False
Width:
IntConst: 0
IntConst: 0
Ioport:
Input: RST, False
Width:
IntConst: 0
IntConst: 0
Ioport:
Input: start, False
Width:
IntConst: 0
IntConst: 0
Ioport:
Input: stop, False
Width:
IntConst: 0
IntConst: 0
Ioport:
Input: init, False
Width:
IntConst: 0
IntConst: 0
Ioport:
Output: busy, False
Width:
IntConst: 0
IntConst: 0
Reg: busy, False
Width:
IntConst: 0
IntConst: 0
Ioport:
Output: timecount, False
Width:
IntConst: 31
IntConst: 0
Reg: timecount, False
Width:
IntConst: 31
IntConst: 0
変換
Verilog HDL
ソースコード
AST
データフロー解析
SWEST2015 Shinya T-Y, NAIST 68
stopwatch.timecount
Branch
stopwatch_RST
COND
’d0
TRUE
Branch
FALSE
Eq
COND
Branch
TRUE
Branch
FALSE
stopwatch_state
’d0
stopwatch_start
COND
’d0
TRUE
stopwatch_timecount
FALSE
Eq
COND
Plus
TRUE
Branch
FALSE
’d1 ’d1
FALSE
Eq
COND
Branch
TRUE
’d2 stopwatch_init
COND
’d0
TRUE
Branch
FALSE
CONDFALSE
’d0
TRUE
制御フロー(状態遷移)解析
n  状態遷移(いつ・どこからどこへ)を解析
n  ある信号が活性化する条件を解析
SWEST2015 Shinya T-Y, NAIST 69
0
1
GreaterThan
2
GreaterThan
GreaterThan
Land
# SIGNAL NAME: stopwatch.state
# DELAY CNT: 0
0 --(stopwatch_start>'d0)--> 1
1 --(stopwatch_stop>'d0)--> 2
2 --(stopwatch_init>'d0)--> 0
2 --((!(stopwatch_init>'d0))&&(stopwatch_start>'d0))--> 1
Loop
(0, 1, 2)
(1, 2)
(a) Command Line Output (b) Graphical Output
Active Conditions: stopwatch.busy
[((stopwatch_start 1:None) && (stopwatch_state 0:0))]
Changed Conditions
[((stopwatch_start 1:None) && (stopwatch_state 0:0)), ((stopwatch_state 1:1) && (stopwatch_stop 1:None))]
Changed Condition Dict
[(((stopwatch_start 1:None) && (stopwatch_state 0:0)), 'd1), (((stopwatch_state 1:1) && (stopwatch_stop 1:None)), 'd0)]
Condition
Signal
Condition’s
Min/Max
Values
Target’s
Assigned
Value
AND
Condition
Target
Signal
PythonでVerilog HDLのコード生成
1 import pyverilog.vparser.ast as vast
2 from pyverilog.ast_code_generator.codegen import ASTCodeGenerator
3
4 params = vast.Paramlist(())
5 clk = vast.Ioport( vast.Input(’CLK’) )
6 rst = vast.Ioport( vast.Input(’RST’) )
7 width = vast.Width( vast.IntConst(’7’), vast.IntConst(’0’) )
8 led = vast.Ioport( vast.Output(’led’, width=width) )
9 ports = vast.Portlist( (clk, rst, led) )
10 items = ( vast.Assign( vast.Identifier(’led’), vast.IntConst(’8’) ) ,)
11 ast = vast.ModuleDef("top", params, ports, items)
12
13 codegen = ASTCodeGenerator()
14 rslt = codegen.visit(ast)
15 print(rslt)
11 19, 14 13:53 codegen.py
1 module top
2 (
3 input [0:0] CLK,
4 input [0:0] RST,
5 output [7:0] led
6 );
7 assign led = 8;
8 endmodule
11 19, 14 14:15 generated.v
Python
Verilog HDL
Execute
これをベースに
抽象度の高いHDLを作りたい
SWEST2015 Shinya T-Y, NAIST 70
Veriloggen
Veriloggen
SWEST2015 Shinya T-Y, NAIST 71
実行
Verilog HDLPython
PythonでVerilog HDLを
組み立てるライブラリ
n  Pythonで書いた動作を
HDLに変換する
高位合成ではない
n  Pythonのオブジェクト
としてVerilogの信号や
代入を組み上げていく
n  当該オブジェクトの
to_verilog() を呼ぶと
Verilogのソースコード
のテキストに変換
例)たくさんLEDを追加してみる
SWEST2015 Shinya T-Y, NAIST 72
実行
Veriloggenで何ができるか?
n  Verilog HDLのメタプログラミングができる
l  例)回路生成するレシピをPython+Veriloggenで定義して
アプリケーション規模に応じて回路を自動生成
•  Verilog HDLにはgenerate構文があるか機能は限定的
n  独自の高位合成コンパイラのバックエンドとして使える
l  (PyCoRAMではない)Pythonベースの高位合成ツールとか?
l  Post PyCoRAMを現在開発中・・・こうご期待
•  制御とパイプラインを柔軟に結合する仕組み
•  既存のVerilog HDL資源を再利用する仕組み
SWEST2015 Shinya T-Y, NAIST 73
今後の高位合成ツールは
どうあるべきか?
SWEST2015 Shinya T-Y, NAIST 74
私が思う今後の高位合成の要件(まじめな話)
n  オープンソースである
l  普段よく使うコンパイラの多くはオープンソース
•  GCCやLLVM、最近は.NETすらオープンソースに
l  誰でもすぐ導入できるのは正義
•  今はFPGAの評価ボードも安価である:2万5千円でZyboが買える
n  ソフトウェア開発者が自然に導入できる
l  記述モデル:結局、手続き型+オブジェクト指向がよい?
•  より多くの人が使える
•  慣れ親しんだプログラミングモデル=手になじんでいる
l  多少のディレクティブは許容される
•  GPUではCUDAが当たり前
•  FPGAでもOpenACC,OpenMPやMPI程度なら許されるか?
–  Xilinx SDSoCは近いかも?
SWEST2015 Shinya T-Y, NAIST 75
私が思う今後の高位合成の要件(まじめな話)
n  高位合成系におけるLLVM的環境
l  データフローを入力したらスケジューリング・アロケーション
してくれるフレームワーク・足回り
•  LLVM: LLVM-IRを入力に最適化したり機械語を吐いたり
•  DFGレベルのスケジューリング・最適化をやってくれる
l  言語や記述モデルでオリジナリティを出す
•  粗粒度・スレッドレベルなスケジューリングは自分で
SWEST2015 Shinya T-Y, NAIST 76
今日のテーマ
n  「好きな道具」で「好きなもの」を作る世界
l  発表者の場合
•  好きな道具: 好きな言語(Python)・モデル・書き方
•  好きなもの: FPGAを使ったカスタムコンピュータ
n  「こんな風に設計できたらいいな」を実現しよう
l  自分の手になじむ道具を実際に作ろう、そして公開しよう
l  発表者の場合
•  PyCoRAM: PythonによるIPコア高位設計フレームワーク
•  Pyverilog: Verilog HDL解析・生成ツールキット
•  Veriloggen: PythonでVerilog HDLを組み立てる軽量ライブラリ
SWEST2015 Shinya T-Y, NAIST 77
私が思う今後の高位合成の要件(気楽な話)
n  好きな言語でハードウェア開発できる
l  ソフトウェア開発は用途と好みに応じて言語を選べる
•  C, C++, C#, Java, Python, Ruby, Perl, JavaScrit, Scala, Go, Haskell
l  ハードウェア開発は?→選択肢が少ない
•  RTL: Verilog HDL, VHDL
•  高級HDL: Chisel (Scala DSL), PyMTL (Python DSL), Veriloggen
•  高位合成: C, C++, OpenCL, Java (Synthesijer), Python (PyCoRAM)
n  「好きな道具」で「好きなもの」を作る世界
•  高位設計 ≠ C設計(Cベースが現状一番良いのは認める)
•  でもRubyで書きたい!Goで書きたい!Pythonで書きたい!
–  発表者はPythonで書きたいのでこれからもいろいろやってみます
–  でも他の言語も検討中です
SWEST2015 Shinya T-Y, NAIST 78
「こんな風に設計できたらいいな」を実現しよう
n  自分が使いたい道具を自分で作ろう
l  こんな風に回路が書けたらいいな
l  あの言語でハードウェアを生成したい
l  でもそんな道具ない・・・じゃあ作りましょう!
•  公開したら誰かが使ってくれるかも?
n  (特に学生さん)研究になるか?
l  研究:基礎研究・応用研究・開発研究
•  新しいもの・自分がワクワクするものを開発して
ああでもないこうでもないと検証していくのは開発研究
l  新規性とか有用性とかは?
•  新規性:ちゃんと作れば何かしらある
•  有用性:少なくとも自分には有用
SWEST2015 Shinya T-Y, NAIST 79
まとめ
n  FPGA・高位合成の基礎と
Pythonによる高位設計フレームワークについて
n  今後の高位合成ツールはどうあるべきか?
l  「こんな風に設計できたらいいな」を実現しよう
n  各種ツールはGitHubで公開中
l  PyCoRAM: https://github.com/PyHDI/PyCoRAM
l  Pyverilog: https://github.com/PyHDI/Pyverilog
l  Veriloggen: https://github.com/PyHDI/veriloggen
SWEST2015 Shinya T-Y, NAIST 80

More Related Content

What's hot

組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画までShunji Umetani
 
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)Shota Imai
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Shinya Takamaeda-Y
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoderSho Tatsuno
 
Optimizer入門&最新動向
Optimizer入門&最新動向Optimizer入門&最新動向
Optimizer入門&最新動向Motokawa Tetsuya
 
【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem
【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem
【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling ProblemDeep Learning JP
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...Deep Learning JP
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIShota Imai
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介Jun Ando
 
報酬設計と逆強化学習
報酬設計と逆強化学習報酬設計と逆強化学習
報酬設計と逆強化学習Yusuke Nakata
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題joisino
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence ModelingDeep Learning JP
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Modelscvpaper. challenge
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健Preferred Networks
 

What's hot (20)

組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで
 
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
強化学習エージェントの内発的動機付けによる探索とその応用(第4回 統計・機械学習若手シンポジウム 招待公演)
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
 
[Track2-5] CPUだけでAIをやり切った最近のお客様事例 と インテルの先進的な取り組み
[Track2-5] CPUだけでAIをやり切った最近のお客様事例 と インテルの先進的な取り組み[Track2-5] CPUだけでAIをやり切った最近のお客様事例 と インテルの先進的な取り組み
[Track2-5] CPUだけでAIをやり切った最近のお客様事例 と インテルの先進的な取り組み
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
Optimizer入門&最新動向
Optimizer入門&最新動向Optimizer入門&最新動向
Optimizer入門&最新動向
 
【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem
【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem
【DL輪読会】論文解説:Offline Reinforcement Learning as One Big Sequence Modeling Problem
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介ACRi HLSチャレンジ 高速化テクニック紹介
ACRi HLSチャレンジ 高速化テクニック紹介
 
報酬設計と逆強化学習
報酬設計と逆強化学習報酬設計と逆強化学習
報酬設計と逆強化学習
 
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
 
近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
 
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
 

Similar to Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう

PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみたHiroki Nakahara
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向Shinya Takamaeda-Y
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータShinya Takamaeda-Y
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)Shinya Takamaeda-Y
 
FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料marsee101
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Coreslankdev
 
VHDL-2008が好きなんです
VHDL-2008が好きなんですVHDL-2008が好きなんです
VHDL-2008が好きなんですwindy12806
 
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムPython, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムJunichi Kakisako
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi愛美 林
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話Masawo Yamazaki
 
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)Shinya Takamaeda-Y
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
Trema day 1
Trema day 1Trema day 1
Trema day 1ykuga
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_yskysk256
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはHideki Takase
 

Similar to Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう (20)

PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
Myoshimi extreme
Myoshimi extremeMyoshimi extreme
Myoshimi extreme
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
 
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
 
FPGAスタートアップ資料
FPGAスタートアップ資料FPGAスタートアップ資料
FPGAスタートアップ資料
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
 
Introduction of ISHI-KAI with OpenMPW
Introduction of ISHI-KAI with OpenMPWIntroduction of ISHI-KAI with OpenMPW
Introduction of ISHI-KAI with OpenMPW
 
VHDL-2008が好きなんです
VHDL-2008が好きなんですVHDL-2008が好きなんです
VHDL-2008が好きなんです
 
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムPython, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話
 
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
 
Imaocande LT
Imaocande LTImaocande LT
Imaocande LT
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
 
Introduction of FPGA
Introduction of FPGAIntroduction of FPGA
Introduction of FPGA
 

More from Shinya Takamaeda-Y

オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムShinya Takamaeda-Y
 
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモDNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモShinya Takamaeda-Y
 
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発Shinya Takamaeda-Y
 
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)Shinya Takamaeda-Y
 
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...Shinya Takamaeda-Y
 
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)Shinya Takamaeda-Y
 
ゆるふわコンピュータ (IPSJ-ONE2017)
ゆるふわコンピュータ (IPSJ-ONE2017)ゆるふわコンピュータ (IPSJ-ONE2017)
ゆるふわコンピュータ (IPSJ-ONE2017)Shinya Takamaeda-Y
 
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」Shinya Takamaeda-Y
 
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)Shinya Takamaeda-Y
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングShinya Takamaeda-Y
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
 
A CGRA-based Approach for Accelerating Convolutional Neural Networks
A CGRA-based Approachfor Accelerating Convolutional Neural NetworksA CGRA-based Approachfor Accelerating Convolutional Neural Networks
A CGRA-based Approach for Accelerating Convolutional Neural NetworksShinya Takamaeda-Y
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
 
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)Shinya Takamaeda-Y
 
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...Shinya Takamaeda-Y
 
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...Shinya Takamaeda-Y
 
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
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発Shinya Takamaeda-Y
 
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...Shinya Takamaeda-Y
 

More from Shinya Takamaeda-Y (20)

オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
 
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモDNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
 
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
 
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
 
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
 
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
 
ゆるふわコンピュータ (IPSJ-ONE2017)
ゆるふわコンピュータ (IPSJ-ONE2017)ゆるふわコンピュータ (IPSJ-ONE2017)
ゆるふわコンピュータ (IPSJ-ONE2017)
 
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
 
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)
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミング
 
マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
 
A CGRA-based Approach for Accelerating Convolutional Neural Networks
A CGRA-based Approachfor Accelerating Convolutional Neural NetworksA CGRA-based Approachfor Accelerating Convolutional Neural Networks
A CGRA-based Approach for Accelerating Convolutional Neural Networks
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
 
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
 
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
 
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
 
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)
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
 
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
 

Recently uploaded

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 

Recently uploaded (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう

  • 2. 今日のテーマ n  「好きな道具」で「好きなもの」を作る世界 l  発表者の場合 •  好きな道具: 好きな言語(Python)・モデル・書き方 •  好きなもの: FPGAを使ったカスタムコンピュータ n  「こんな風に設計できたらいいな」を実現しよう l  自分の手になじむ道具を実際に作ろう、そして公開しよう l  発表者の場合 •  PyCoRAM: PythonによるIPコア高位設計フレームワーク •  Pyverilog: Verilog HDL解析・生成ツールキット •  Veriloggen: PythonでVerilog HDLを組み立てる軽量ライブラリ SWEST2015 Shinya T-Y, NAIST 2
  • 3. All software are available! n  GitHubで公開中 l  PyCoRAM: https://github.com/PyHDI/PyCoRAM l  Pyverilog: https://github.com/PyHDI/Pyverilog l  Veriloggen: https://github.com/PyHDI/veriloggen n  PIP(Pythonパッケージ管理)でもインストール可 l  ただしGitHubが最新版です SWEST2015 Shinya T-Y, NAIST 3 $ pip install pyverilog� $ pip install pycoram� $ pip install veriloggen� $ git clone https://github.com/PyHDI/Pyverilog.git� $ git clone https://github.com/PyHDI/PyCoRAM.git� $ git clone https://github.com/PyHDI/veriloggen.git�
  • 4. 目次 n  FPGAとは? l  FPGAの基礎 l  近年のFPGAを取り巻く環境 n  高位合成ツールとは? l  高位合成の基礎 l  商用ツールとオープンソースなツール n  Pythonによる高位設計フレームワークPyCoRAM l  PythonとVerilog HDLを組み合わせたIPコア設計ツール l  関連ツールの紹介: Pyverilog, Veriloggen n  今後の高位合成ツールはどうあるべきか? l  まじめな話とフランクは話 n  まとめ SWEST2015 Shinya T-Y, NAIST 4
  • 6. ヘテロジニアスコンピューティング OoO Core OoO Core OoO Core OoO Core L2 L2 L2 L2 L3 Cache DDR3 DRAM Multicore (Intel Corei7) L2 Cache GDDR5 DRAM GPU (NVIDIA GeForce) DDR3 DRAM Manycore (Intel Xeon Phi) DDR3 DRAM FPGA (Xilinx Virtex-7) SWEST2015 Shinya T-Y, NAIST 6
  • 7. FPGA (Field Programmable Gate Array) n  中身を改変可能なLSI (PLD: Programmable Logic Device) l  設計者が独自のデジタル回路を形成することができる l  対してCPUやGPUはFLD (Fixed Logic Device)? n  CPUなどとの大きな違いは? l  CPUの振る舞いはソフトウェア(プログラム)で規定される •  ユーザはCPUそのものの回路を変更することはできない l  FPGAの振る舞いはハードウェアそのものの変更で変えられる Digital circuits SWEST2015 Shinya T-Y, NAIST 7
  • 8. FPGAボードの基礎 FPGA (Xilinx Virtex-7 XC7V690T) DDR3 SODIMM (4GB x2) PCI-express10Gbps Ethernet x4 SATA-3 x2 Digilent NetFPGA SUME Price $24,500 SWEST2015 Shinya T-Y, NAIST 8
  • 9. SWEST2015 Shinya T-Y, NAIST 9 Digilent Nexys3 FPGA: Xilinx Spartan-6 LX16 Size: Pipelined CPU ×2 Price: 15,000yen (Academic) Digilent ZedBoard FPGA: Xilinx Zynq 7020 Size: Pipelined CPU ×8 (+ ARM DualCore) Price: 60,000yen (Academic)
  • 10. SWEST2015 Shinya T-Y, NAIST 10 SSD Dual Camera FPGA (Xilinx Zynq 7020, ARM Dualcore) +DDR3 DRAM 512MB SSD Interface
  • 11. SWEST2015 Shinya T-Y, NAIST 11 Xilinx ZC706 FPGA: Xilinx Zynq 7045 Size: Pipelined CPU ×16 Price: 300,000yen
  • 12. SWEST2015 Shinya T-Y, NAIST 12 Tokyo Electron Deice TB-6V-LX760-LSI FPGA: Xilinx Virtex-6 LX760 Size: Pipelined CPU x100? Price: 4,000,000yen?
  • 13. ScalableCore System FPGA: Xilinx Spartan-6 ×100 Size: Pipelined CPU x200? Price: 100万円程度? SWEST2015 Shinya T-Y, NAIST 13
  • 14. アイランドスタイルFPGAの構成 SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB SB CB SB CB SB IOB IOB IOB IOB IOB IOB IOBIOBIOB IOBIOBIOB FPGA SB LB CB IOB Logic Block Switch Block Connection Block I/O Block Wire •  An LB has logical circuit components for both combinational circuits and sequential circuits •  They are connected via interconnection components (SB, CB and wire) SWEST2015 Shinya T-Y, NAIST 14
  • 15. アイランドスタイルFPGAの構成 SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB SB CB SB CB SB IOB IOB IOB IOB IOB IOB IOBIOBIOB IOBIOBIOB FPGA SB LB CB IOB Logic Block Switch Block Connection Block I/O Block Wire •  An LB has logical circuit components for both combinational circuits and sequential circuits •  They are connected via interconnection components (SB, CB and wire) SWEST2015 Shinya T-Y, NAIST 15
  • 16. Logic Block n  Two basic elements in a logic block l  LUT (Look Up Table): for combinational circuits l  Flip-flop: for memory (sequential circuits) SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB CB LB SB CB CB LB SB CB CB LB SB CB SB CB SB CB SB CB SB IOB IOB IOB IOB IOB IOB IOBIOBIOB IOBIOBIOB FPGA Logic Block LUT D Q SWEST2015 Shinya T-Y, NAIST 16
  • 17. LUT: Look Up Table n  LUTs realize combinational logics n  An LUT returns a 1-bit value corresponding to the input bit-vector (=Boolean function) l  N-input LUT has 2N combinations of results: 4-input LUT has 16 a[0] a[1] a[2] a[N-1] N-input LUT b Input Output 000…0 0 000…1 1 … … 111…1 0 SWEST2015 Shinya T-Y, NAIST 17
  • 18. FPGA in Anywhere n  LSI設計・検証のプラットフォームとして l  LSIの機能を製造前に検証 l  HWの完成を待たなくても SWの開発検証ができる l  ソフトウェアシミュレータによる 回路シミュレーションよりも 高速に検証できる n  最終製品に組み込むLSIとして l  画像処理 l  ネットワーク機器 n  アクセラレータとして l  データベース l  ウェブ検索 l  証券取引 l  機械学習 SWEST2015 Shinya T-Y, NAIST 18 Input Layer Hidden Layers Output Layer Convolution Pooling Max Out Convolution Full Connection
  • 19. ASIC vs. FPGA n  ASIC (Application Specific Integrated Circuit) l  それぞれのアプリケーションに特化した専用回路を設計 •  専用パイプライン・高い周波数で高い性能 n  FPGA (Field Programmable Gate Array) l  どのアプリケーションも数種類のFPGAで実現:少量生産もOK l  製品リリース後の回路構成の改変が可能 The number of units Cost ASIC FPGA FPGA is cheaper ASIC is cheaper SWEST2015 Shinya T-Y, NAIST 19
  • 20. 増え続けるFPGAの回路規模 n  トランジスタの スケーリングにより FPGの回路規模も増大 l  5年で6倍以上に増加 l  今後も更なる増加が予想 •  マルチダイ化 •  3次元積層 n  その分設計が大変に l  設計検証の時間が増大 l  効率的な開発方式が必要 •  RTLのみの開発の限界 •  高位合成処理系の利用 From Xilinx UG872SWEST2015 Shinya T-Y, NAIST 20
  • 21. How to Develop a Software? Writing a software in programming languages Preprocess Compile Assemble Link CompilerFlow Execution on a CPU int main(){� int a = 1 + 2;� printf(“Hello %dn”, a);� return 0;� }� add $t0, $t1, $t2� li $v0, 1� syscall� ELF01ABF00F1...� Executable Binary SWEST2015 Shinya T-Y, NAIST 21
  • 22. How to Develop a (FPGA) Hardware? Writing a hardware design in HDL (Hardware Description Language) Synthesis Technology Mapping Place and Route Bitstream Generation EDAFlow Configuration of the bitstream to an FPGA module top� (input CLK, RST, � output reg [7:0] LED);� always @(posedge CLK) begin� LED <= LED + 1;� end� endmodule� 1A0C021E...� Original HW on an FPGA Bitstream SWEST2015 Shinya T-Y, NAIST 22
  • 24. ARM搭載FPGAの登場 (1) n  ARMプロセッサ+FPGA (Xilinx Zynq, Altera SoC) l  専用インターコネクトで密結合,キャッシュ・DRAM共有 l  普通のLinuxが動作する→大量なソフトウェア資源が利用可能 Zynq-7000 All Programmable SoC http://japan.xilinx.com/products/silicon-devices/soc/zynq-7000.html AlteraのARMベースSoC https://www.altera.com/ja_JP/pdfs/literature/br/br-soc-fpga_j.pdf SWEST2015 Shinya T-Y, NAIST 24
  • 25. ARM搭載FPGAの登場 (2) n  普通のFPGAとは何が違う? l  そもそも通常のFPGA上もCPU搭載可能(ソフトマクロ) l  コア性能が数倍∼10倍違う •  MicroBlaze: 100MHz∼200MHz, In-order, Single issue •  ARM: 600MHz∼1GHz, OoO, Super scalar n  独自のHW/SW協調SoCの実現が容易になる l  面倒な処理は処理はCPU上のソフトウェアで実現 •  ネットワーク・ファイルシステムなど l  並列処理部はFPGA上の専用ハードウェアで実現 •  並列度とメモリ帯域に応じて演算器を追加し高速化 •  必要に応じて演算精度を削り更に高速化 l  CPU-FPGAロジック間のデータ共有は? •  キャッシュ・DRAMをCPUとロジックで共有しているので簡単 SWEST2015 Shinya T-Y, NAIST 25
  • 26. 例)Zynq 7000 アーキテクチャ n  ARM Cortex-A9 (Dual-core, OoO, 8-stage) n  3種類のCPU-PL間接続 (すべてAXIインターフェース) AXI GP Port AXI HP Port AXI ACP Port Cache DRAM GP •  低速 •  制御レジスタ アクセス用 HP •  高バンド幅 •  DRAMへの バースト転送向け ACP •  低レイテンシ •  キャッシュ コヒーレント •  CPUとの データ共有向け http://www.ioe.nchu.edu.tw/Pic/CourseItem/4468_20_Zynq_Architecture.pdf http://japan.xilinx.com/support/documentation/data_sheets/j_ds190-Zynq-7000-Overview.pdf SWEST2015 Shinya T-Y, NAIST 26
  • 27. 浮動小数点ユニット搭載FPGA n  従来FPGAのDSP(乗算)ユニットは整数のみ対応 l  浮動小数点演算は変換ロジックを組み合わせて実現 (ソフトマクロ)→大きな回路・電力オーバーヘッド •  そのため浮動小数点演算ではGPUが有利だった n  Altera次期モデルがハードマクロ浮動小数点DSPを搭載 l  コンピューティングデバイスとしてのFPGAの利用が増加? Altera Expands Floating-Point Hardware Support Across Its Product Lines http://www.bdti.com/InsideDSP/2014/07/22/Altera SWEST2015 Shinya T-Y, NAIST 27
  • 28. IPコアベースのシステム開発環境の普及 n  IPコアを開発・追加して繋げばHW完成J l  標準的なインターコネクトでIPコア達を接続 l  EDAツールが自動的にインターコネクトと(いくつかの) デバイス依存のインターフェースを生成してくれるため楽 l  いかにしてIPコアを簡単に開発するかが重要 •  高位合成ツールの活用 SWEST2015 Shinya T-Y, NAIST 28 FPGA CPU HW Acc DRAM I/F Ether PCI-E Interconnect HW Acc DRAMXilinx VivadoにおけるIPコアとARMの接続
  • 29. アプリケーションの変化 n  以前は画像処理やネットワーキングなどが主流 n  「ビッグデータ」指向へ: 脱ノイマン型? l  イーサネットNICでMemcached [Fukuda+, FPL’14] l  Microsoft Bing search engine (Catapult) [Putnam+, ISCA'14] •  FPGA間を専用線で接続するクラスタシステム SWEST2015 Shinya T-Y, NAIST 29Fig1 from [Putman+, ISCA'14]Fig2 from [Fukuda+, FPL'14]
  • 31. 高位合成とは? n  動作モデルからRTLモデルを 生成するツール・コンパイラ l  入力: ソフトウェアのソースコード •  C, C++, OpenCL, Java, Python, ... l  出力: RTL(HDLソースコード) •  Verilog HDL, VHDL n  構成:SWコンパイラと同等の フロントエンドと高位合成 ならではのバックエンド l  フロントエンド: 抽象構文木(AST)生成・ コントロールデータフロー(CDFG)解析 l  バックエンド: 「いつ」「どの演算」を するか決めたり、演算を演算器に、 変数をレジスタに割り当てり SWEST2015 Shinya T-Y, NAIST 31 ソースコード 構文解析 コントロール・ データフロー解析 スケジューリング アロケーション 制御回路生成 コード生成 RTL フロント エンドバックエンド
  • 32. FPGAシステムの設計フロー(高位合成なし) SWEST2015 Shinya T-Y, NAIST 32 システム設計 (HW/SW分割) 要件・仕様 HW ソフトウェア設計 SW HWアーキテクチャ設計 論理合成・配置配線 RTL設計・実装 ソフトウェア実装 コンパイル システム データフロー・ メモリシステム クロックレベル の振る舞い・ HDLによる実装 ほぼ合成ツール による自動処理 HW/SW結合により システム完成 シミュレータを 用いた検証を行 うことも 早い段階でHW/SWを分割 全体を一旦SW実装してから HW/SW再設計することも
  • 33. FPGAシステムの設計フロー(高位合成あり) SWEST2015 Shinya T-Y, NAIST 33 システム設計 要件・仕様 HW ソフトウェア設計 (HW/SW混合設計) SW 論理合成・配置配線 HW部高位設計 ソフトウェア実装 (全体実装) コンパイル システム 全体をSWで実装 その後一部をHW化 プログラミング 言語による動作 モデル実装 合成ツールによ る自動処理 HW/SW結合により システム完成 シミュレータを 用いた検証を行 うことも 高位合成 高位合成ツール によるRTL生成 ソフトウェア実装 一部HW化の ためのイン ターフェー スの実装等
  • 34. RTL設計と高位設計の違い n  RTL (Register Transfer Level) 設計 l  クロックサイクルレベルでレジスタ間のデータ移動や演算の タイミングを定義する l  Timed設計:「なに」を「いつ」「どのように」行うかを定義 l  通常のソフトウェアでいう「アセンブリ」の様なもの n  高位設計(動作設計・High Level Synthesis) l  (一般に)汎用プログラミング言語を用いて振る舞いを定義 l  Untimed設計:「なに」を行うかを実装 •  「いつ」「どのように」かは定義しなくても良い •  指示子(Directive)で「いつ」「どのように」の情報を付加すること により、より良いハードウェアが生成される l  通常のソフトウェアでいう高級プログラミング言語に設計 SWEST2015 Shinya T-Y, NAIST 34
  • 35. 例:2配列の積和演算 (c += a * b) SWEST2015 Shinya T-Y, NAIST 35 積和演算器(トップレベル) 乗算器 RTL設計 (Verilog HDL): 105行,2098文字,15分 「いつ」「なに」を 「どのように」するかを 設計者が決める
  • 36. 例:2配列の積和演算 (c += a * b) SWEST2015 Shinya T-Y, NAIST 36 高位設計 (C言語): 11行,163文字,1分 →1/10の記述量と1/15の開発時間 (ただしディレクティブ等はなし) (性能が出れば)高位設計最高! 「なに」をするかだけを 設計者が決める
  • 37. FPGA向け商用高位合成ツールが多数登場 n  Xilinx Vivado HLS (+ SDSoC) l  C/C++で振る舞いを定義・ディレクティブで性能チューニング l  SDSoCならSWコードから部分的にHW化・I/Fも自動生成 l  その他C言語ベースImpulse C・CWB・eXCiteなど n  OpenCL系: Altera OpenCLやXilinx SDAccel l  ホストPCありき・ホストPC上SWのお作法も定義 https://www.youtube.com/ watch?v=URUVkq6zQhQ SWEST2015 Shinya T-Y, NAIST 37
  • 38. オープンソースな高位合成ツールの登場 n  LegUp: トロント大で開発されているCベース処理系 l  C記述をMIPS CPU用SW部とHW部に自動分割・論文多数 n  Synthesijer: Javaによる高位合成処理系 l  Java言語仕様に改変なし,サブセットをそのまま合成可能 9 クイックスタート 5/8 (5) 間隔をおいて変数ledをtrue/falseするプログラムを書く Lチカに相当する変数 適当なウェイト 点滅 自動コンパイルが裏で動くので,Javaコードとしての正しさは 即座にチェックされる 2 Synthesijer とは ✔ JavaプログラムをFPGA上のハードウェアに変換 ✔ 複雑なアルゴリズムのハードウェア実装を楽に ✔ オブクジェクト指向設計による再利用性の向上 ✔ 特殊な記法,追加構文はない ✔ ソフトウェアとして実行可能.動作の確認、検証が容易 ✔ 書けるプログラムに制限は加える (動的なnew,再帰は不可など) Javaコンパイラ フロントエンド Synthesijer エンジン Javaコンパイラ バックエンド 合成 配置配線 while(){ if(...){ … }else{ … … } …. } 複雑な状態遷移も,Javaの制御構文を使って楽に設計できる 同じJavaプログラムをソフトウェアとしても FPGA上のハードウェアとしても実行可能 Open-source http://www.sigemb.jp/ESS/2014/files/IPSJ-ESS2014003-1.pdf SWEST2015 Shinya T-Y, NAIST 38
  • 39. 高位合成のメリット・デメリット n  メリットJ l  いつものプログラミング言語でハードウェアが開発できる l  少ない記述量:RTL設計の1/10以下 l  デバッグのしやすさ: 通常のソフトウェアとして実行して機能レベルの正しさを検証 n  デメリットL l  達成可能な性能・電力効率・面積効率はRTL設計の方が高い •  RTL設計は開発者の知見(アプリケーションの要件等)が直接反映 l  癖のあるソースコードを書く必要がある •  専用の型の導入や機能制限 •  性能を追求するにはディレクティブを多数挿入する必要がある –  結局書き直すならRTLで書き直しても良いのでは?という人も多い l  クロックサイクルレベルの振る舞いを書くのが苦手 •  I/Oの制御を細粒度に行う回路等は不向き(なことが多い) SWEST2015 Shinya T-Y, NAIST 39
  • 41. 背景 n  CPU with IP-cores l  ハードマクロCPU (ARM) 搭載FPGAが主流に: Xilinx Zynq, etc l  専用HWはIPコアとして実装し インターコネクト(AXI4やAvalon)を介してCPUと接続 n  どのようにしてアクセラレータIPコアを設計するか? l  HDLですべて設計するのは大変 •  例)演算とメモリアクセスのスケジューリング –  ダブルバッファリングとか面倒 –  HDLでステートマシンを書くのは大変だし間違えやすい l  性能を出すには高稼働率パイプラインとデータ供給機構が必要 •  ストールのない綺麗なパイプラインを定義したい: HDLが得意 •  (OSSな)高位合成系だとチューニングが難しい n  →データ転送を抽象化すれば幸せそう? SWEST2015 Shinya T-Y, NAIST 41
  • 42. CoRAM [Chung+,FPGA’11] n  FPGAアクセラレータのためのメモリ抽象化 l  高位モデルによるメモリ管理でアクセラレータをポータブルに •  計算カーネルとメモリアクセスの分離 •  ソフトウェアのモデルによるメモリアクセスパターンの記述 HW Kernels (Computing Logics) CoRAM Memory Read Write Manage Control Threads (Memory Access Pattern) CoRAM Channel Read/Write Read/Write Communication FIFOs (Registers) Abstracted On-chip Memories Off-chip Memory SWEST2015 Shinya T-Y, NAIST 42
  • 43. PyCoRAM [Takamaeda+,CARL’13] n  抽象化されたインターコネクトとメモリシステムの上で IPコアを開発するフレームワーク l  標準的なインターコネクトに繋げる:AMBA AXI4, Altera Avalon l  ポータブル:抽象化がプラットフォームの違いを吸収 l  CPUや他のIPコアと共存が容易:ビルディングブロック開発 SWEST2015 Shinya T-Y, NAIST 43 On-chip Interconnect (AXI4, Avalon) PyCoRAM Abstraction Accelerator logic Standard IP-core Device-dependent Interfaces (DRAM, etc) CPU Portable application with PyCoRAM Cooperation with standard IP-cores
  • 44. PyCoRAM:フレームワーク構成 n  入力:2種類のソースコード l  データフロー(演算パイプライン):Verilog HDL l  データ転送制御:Python n  出力:演算パイプと制御機構を持つIPコア l  DMAを主体としたデータ転送重点型ハードウェアが合成される SWEST2015 Shinya T-Y, NAIST 44 データフロー (Verilog HDL) 制御フロー (Python) HW 構造 解析 RTL 変換 制解 対象 解析 高位 合成 処理系 による RTL化 インター フェース 合成 ・ IPコア パッケー ジ化 PyCoRAMコンパイルフロー 入力: 高抽象度 デザイン 出力: 演算パイプライン+データ供給エンジンを 持つアクセラレータIPコア・システム データパス 制御 Memory/Stream DMAコントローラ Channel/ Register オンチップ・インターコネクト メインメモリ (DRAM) IPコア IOChannel/ IORegister
  • 45. PyCoRAM:アーキテクチャ SWEST2015 Shinya T-Y, NAIST 45 データパス 制御 Memory/Stream DMAコントローラ Channel/ Register IOChannel/ IORegister
  • 46. PyCoRAM:アーキテクチャ SWEST2015 Shinya T-Y, NAIST 46 データパス 制御 Memory/Stream DMAコントローラ Channel/ Register IOChannel/ IORegister Computing Logic Modeled in Verilog HDL Control Thread Modeled in Python
  • 47. PyCoRAM:アーキテクチャ SWEST2015 Shinya T-Y, NAIST 47 データパス 制御 Memory/Stream DMAコントローラ Channel/ Register IOChannel/ IORegister Memory: ロジック用ローカルメモリ Stream: ロジック用FIFO Channel: ロジック-スレッド間FIFO Register: ロジック-スレッド間共有レジスタ IO Channel: 外部制御用FIFO IO Register: 外部制御用共有レジスタ
  • 48. PyCoRAM:アーキテクチャ SWEST2015 Shinya T-Y, NAIST 48 データパス 制御 Memory/Stream DMAコントローラ Channel/ Register オンチップ・インターコネクト メインメモリ (DRAM) IOChannel/ IORegister
  • 49. PyCoRAM:アーキテクチャ SWEST2015 Shinya T-Y, NAIST 49 データパス 制御 Memory/Stream DMAコントローラ Channel/ Register オンチップ・インターコネクト メインメモリ (DRAM) IOChannel/ IORegister Master Interface メモリへ能動的にアクセス Slave Interface CPUからアクセスされる
  • 50. 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)� );� def calc_sum(times):� ram = CoramMemory(idx=0, datawidth=32, size=1024)� channel = CoramChannel(idx=0, datawidth=32)� addr = 0� sum = 0� for i in range(times):� ram.write(0, addr, 128)� channel.write(addr)� sum += channel.read()� addr += 128 * (32/8)� print(‘sum=’, sum)� calc_sum(8)� SWEST2015 Shinya T-Y, NAIST 50
  • 51. 計算ロジックにおけるPyCoRAMオブジェクト n  ブロックRAMやFIFOと同様のインターフェス l  ロジック側からおなじみのインターフェースでアクセスできる l  いくつかのパラメータで特性を指定 •  スレッド名,ID,データ幅,アドレス幅,スキャッターギャザー等 l  外部を接続するインターフェースは自動的に追加される 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)� );� (a) Memory CoramChannel� #(� .CORAM_THREAD_NAME("thread_name"),� .CORAM_ID(0),� .CORAM_ADDR_LEN(CHANNEL_ADDR_LEN),� .CORAM_DATA_WIDTH(CHANNEL_DATA_WIDTH)� )� inst_channel� (.CLK(CLK),� .RST(RST),� .D(comm_d),� .ENQ(comm_enq),� .FULL(comm_full),� .Q(comm_q),� .DEQ(comm_deq),� .EMPTY(comm_empty)� );� (b) Channel SWEST2015 Shinya T-Y, NAIST 51
  • 52. Pythonによるコントロールスレッド n  PyCoRAMオブジェクトに対する処理を記述する l  CoramMemory: read(), write() •  MemoryとDRAMとの間のDMA転送によるデータ移動 l  CoramChannel: read(), write() •  計算ロジックとコントロールスレッドの間のデータのやりとり def calc_sum(times):� ram = CoramMemory(idx=0, datawidth=32, size=1024)� channel = CoramChannel(idx=0, datawidth=32)� addr = 0� sum = 0� for i in range(times):� ram.write(0, addr, 128)� channel.write(addr)� sum += channel.read()� addr += 128 * (32/8)� print(‘sum=’, sum)� calc_sum(8)� # Transfer (off-chip DRAM to BRAM) # Notification to User-logic # Wait for Notification from User-logic # $display Verilog system task � 0� 1� 2� 3� 4� 5� 6� 7� 8� 9� 10� 11� SWEST2015 Shinya T-Y, NAIST 52
  • 53. 例: 配列の和を求めるアクセラレータ n  1メモリ+1スレッドの簡単なハードウェア l  CoramMemoryにDRAMからデータを読み込む l  スレッド側でCoramMemory-DRAM間のデータ転送系列を表現 Computing Logic (Verilog HDL) Control Thread (Python) sum Coram Memory 0 + Control Logic Coram Channel 0 A SWEST2015 Shinya T-Y, NAIST 53
  • 57. コントロールスレッド (Python) ram (CoramMemory)とchannel (CoramChannel)の宣言 CoramMemoryにDMA転送したり CoramChannelから読んだり書いたり SWEST2015 Shinya T-Y, NAIST 57
  • 61. 例)行列積IPコア n  行列A・B・Cの各行をCoRAMメモリに格納 l  DRAMとの間のデータ転送をコントロールスレッドが担当 l  毎サイクル乗算パイプラインにデータを投入 l  行列Bの転送と演算をダブルバッファリング l  SIMD幅をメモリバンド幅を使い切るように合わせる Computing Logic (Verilog HDL) Control Thread (Python) sum CoRAM Memory 0 B × + CoRAM Memory 1 CoRAM Memory 2 Control Logic CoRAM Channel 0 8-stage Multiply PipelineA C check sum+ I/O Channel SWEST2015 Shinya T-Y, NAIST 61
  • 62. 例)ダイクストラIPコア n  PyCoRAMを使って演算モジュールはVerilog HDLで実装 メモリアクセス制御はPythonで実装 Read Node InStream Read Edge InStream Update Node OutStream Mark Visited OutStream Priority Queue InStreamOutStream Edge Page Addr Cost + Next Node Addr Node Addr Next Node Cost Node Addr Next Node Addr Next Node Cost FSM DMAC DMAC DMAC DMAC DMAC DMAC Slave I/F AXI4 Master Interfaces AXI4-lite Slave Interfaces Dijkstra Logic (Modeled in Verilog HDL) Mark Visited Cthread Read Node Cthread Read Edge Cthread Priority Queue Cthread Mark Visited Cthread Main CThread Control Threads (Modeled in Python) UserDefinition(ModeledinVerilogHDLandPython)Generatedby PyCoRAM SWEST2015 Shinya T-Y, NAIST 62
  • 63. FPGAシステム開発で面倒なところ n  CPUや他のIPとの接続方法・インターフェース実装 l  IPコアのバスインターフェス:AXI4, Avalon •  PyCoRAMならインターフェースもIPコア設定ファイルも自動生成 n  データの置き場・供給方法 l  オンチップメモリ(ブロックRAM)・DRAM •  PyCoRAMならDRAM-オンチップメモリ間のデータ移動制御は Pythonで書けて楽ちん n  CPUとのデータ共有方法 l  OSなし:論理メモリ空間=物理メモリ空間なので簡単 •  volatileな変数を使えばOK l  OSあり:仮想メモリが存在するため面倒 •  CPU: 仮想メモリあり,論理アドレスでアクセス •  HW: 仮想メモリなし,物理アドレスでアクセス –  数MB以上の物理連続領域を確保するの小技が必要 SWEST2015 Shinya T-Y, NAIST 63
  • 64. Zynq + PyCoRAM (+Debian) 入門 n  SlideShareでチュートリアルスライド公開中 l  http://www.slideshare.net/shtaxxx/zynqpycoram n  今時のFPGAアクセラレータを 作る方法の一例をまとめました l  PyCoRAM IPコアの作り方 l  Zynq (ARM搭載FPGA)の上で Debian Linuxを動作させるには l  その上でPyCoRAM IPコアを 使うにはどんなSWが必要か n  2015年3月時点の情報なので そろそろ更新予定 l  Debian 7.0から8.0へ移行 l  HW用メモリ領域確保の方法更新 SWEST2015 Shinya T-Y, NAIST 64
  • 65. Pyverilog & Veriloggen SWEST2015 Shinya T-Y, NAIST 65
  • 66. Pyverilog: Verilog HDL解析・生成ツールキット SWEST2015 Shinya T-Y, NAIST 66 Module Analyzer Syntax Analyzer Lexical Analyzer AST Signal Analyzer Bind Analyzer Dataflow State Machine Pattern Matcher Control-flow Optimizer Code Generator Active Condition Analyzer Visualizer Verilog HDL Code module TOP (input CLK, input RST, output rslt, … Graphical Output Verilog HDL Code module TOP (input CLK, input RST, output rslt, … Parser Dataflow Analyzer Control-flow Analyzer Input Output AST
  • 67. 構文解析・抽象構文木(AST)生成 SWEST2015 Shinya T-Y, NAIST 67 1 module stopwatch 2 ( 3 input CLK, 4 input RST, 5 input start, 6 input stop, 7 input init, 8 output reg busy, 9 output reg [31:0] timecount 10 ); 11 localparam IDLE = 0; 12 localparam COUNTING = 1; 13 localparam WAITINIT = 2; 14 reg [3:0] state; 15 always @(posedge CLK) begin 16 if(RST) begin 17 state <= 0; 18 timecount <= 0; 19 end else begin 20 if(state == IDLE) begin 21 if(start) begin 22 state <= COUNTING; 23 timecount <= 0; 24 busy <= 1; 25 end 26 end else if(state == COUNTING) begin 27 timecount <= timecount + 1; 28 if(stop) begin 29 state <= WAITINIT; 30 busy <= 0; 31 end 32 end else if(state == WAITINIT) begin 33 if(init) begin 34 timecount <= 0; 35 state <= IDLE; 36 end else if(start) begin 37 timecount <= 0; 38 state <= COUNTING; 39 end 40 end 41 end 42 end 43 endmodule 11 17, 14 17:10 Page 1/1stopwatch.v Source: Description: ModuleDef: stopwatch Paramlist: Portlist: Ioport: Input: CLK, False Width: IntConst: 0 IntConst: 0 Ioport: Input: RST, False Width: IntConst: 0 IntConst: 0 Ioport: Input: start, False Width: IntConst: 0 IntConst: 0 Ioport: Input: stop, False Width: IntConst: 0 IntConst: 0 Ioport: Input: init, False Width: IntConst: 0 IntConst: 0 Ioport: Output: busy, False Width: IntConst: 0 IntConst: 0 Reg: busy, False Width: IntConst: 0 IntConst: 0 Ioport: Output: timecount, False Width: IntConst: 31 IntConst: 0 Reg: timecount, False Width: IntConst: 31 IntConst: 0 変換 Verilog HDL ソースコード AST
  • 68. データフロー解析 SWEST2015 Shinya T-Y, NAIST 68 stopwatch.timecount Branch stopwatch_RST COND ’d0 TRUE Branch FALSE Eq COND Branch TRUE Branch FALSE stopwatch_state ’d0 stopwatch_start COND ’d0 TRUE stopwatch_timecount FALSE Eq COND Plus TRUE Branch FALSE ’d1 ’d1 FALSE Eq COND Branch TRUE ’d2 stopwatch_init COND ’d0 TRUE Branch FALSE CONDFALSE ’d0 TRUE
  • 69. 制御フロー(状態遷移)解析 n  状態遷移(いつ・どこからどこへ)を解析 n  ある信号が活性化する条件を解析 SWEST2015 Shinya T-Y, NAIST 69 0 1 GreaterThan 2 GreaterThan GreaterThan Land # SIGNAL NAME: stopwatch.state # DELAY CNT: 0 0 --(stopwatch_start>'d0)--> 1 1 --(stopwatch_stop>'d0)--> 2 2 --(stopwatch_init>'d0)--> 0 2 --((!(stopwatch_init>'d0))&&(stopwatch_start>'d0))--> 1 Loop (0, 1, 2) (1, 2) (a) Command Line Output (b) Graphical Output Active Conditions: stopwatch.busy [((stopwatch_start 1:None) && (stopwatch_state 0:0))] Changed Conditions [((stopwatch_start 1:None) && (stopwatch_state 0:0)), ((stopwatch_state 1:1) && (stopwatch_stop 1:None))] Changed Condition Dict [(((stopwatch_start 1:None) && (stopwatch_state 0:0)), 'd1), (((stopwatch_state 1:1) && (stopwatch_stop 1:None)), 'd0)] Condition Signal Condition’s Min/Max Values Target’s Assigned Value AND Condition Target Signal
  • 70. PythonでVerilog HDLのコード生成 1 import pyverilog.vparser.ast as vast 2 from pyverilog.ast_code_generator.codegen import ASTCodeGenerator 3 4 params = vast.Paramlist(()) 5 clk = vast.Ioport( vast.Input(’CLK’) ) 6 rst = vast.Ioport( vast.Input(’RST’) ) 7 width = vast.Width( vast.IntConst(’7’), vast.IntConst(’0’) ) 8 led = vast.Ioport( vast.Output(’led’, width=width) ) 9 ports = vast.Portlist( (clk, rst, led) ) 10 items = ( vast.Assign( vast.Identifier(’led’), vast.IntConst(’8’) ) ,) 11 ast = vast.ModuleDef("top", params, ports, items) 12 13 codegen = ASTCodeGenerator() 14 rslt = codegen.visit(ast) 15 print(rslt) 11 19, 14 13:53 codegen.py 1 module top 2 ( 3 input [0:0] CLK, 4 input [0:0] RST, 5 output [7:0] led 6 ); 7 assign led = 8; 8 endmodule 11 19, 14 14:15 generated.v Python Verilog HDL Execute これをベースに 抽象度の高いHDLを作りたい SWEST2015 Shinya T-Y, NAIST 70 Veriloggen
  • 71. Veriloggen SWEST2015 Shinya T-Y, NAIST 71 実行 Verilog HDLPython PythonでVerilog HDLを 組み立てるライブラリ n  Pythonで書いた動作を HDLに変換する 高位合成ではない n  Pythonのオブジェクト としてVerilogの信号や 代入を組み上げていく n  当該オブジェクトの to_verilog() を呼ぶと Verilogのソースコード のテキストに変換
  • 73. Veriloggenで何ができるか? n  Verilog HDLのメタプログラミングができる l  例)回路生成するレシピをPython+Veriloggenで定義して アプリケーション規模に応じて回路を自動生成 •  Verilog HDLにはgenerate構文があるか機能は限定的 n  独自の高位合成コンパイラのバックエンドとして使える l  (PyCoRAMではない)Pythonベースの高位合成ツールとか? l  Post PyCoRAMを現在開発中・・・こうご期待 •  制御とパイプラインを柔軟に結合する仕組み •  既存のVerilog HDL資源を再利用する仕組み SWEST2015 Shinya T-Y, NAIST 73
  • 75. 私が思う今後の高位合成の要件(まじめな話) n  オープンソースである l  普段よく使うコンパイラの多くはオープンソース •  GCCやLLVM、最近は.NETすらオープンソースに l  誰でもすぐ導入できるのは正義 •  今はFPGAの評価ボードも安価である:2万5千円でZyboが買える n  ソフトウェア開発者が自然に導入できる l  記述モデル:結局、手続き型+オブジェクト指向がよい? •  より多くの人が使える •  慣れ親しんだプログラミングモデル=手になじんでいる l  多少のディレクティブは許容される •  GPUではCUDAが当たり前 •  FPGAでもOpenACC,OpenMPやMPI程度なら許されるか? –  Xilinx SDSoCは近いかも? SWEST2015 Shinya T-Y, NAIST 75
  • 76. 私が思う今後の高位合成の要件(まじめな話) n  高位合成系におけるLLVM的環境 l  データフローを入力したらスケジューリング・アロケーション してくれるフレームワーク・足回り •  LLVM: LLVM-IRを入力に最適化したり機械語を吐いたり •  DFGレベルのスケジューリング・最適化をやってくれる l  言語や記述モデルでオリジナリティを出す •  粗粒度・スレッドレベルなスケジューリングは自分で SWEST2015 Shinya T-Y, NAIST 76
  • 77. 今日のテーマ n  「好きな道具」で「好きなもの」を作る世界 l  発表者の場合 •  好きな道具: 好きな言語(Python)・モデル・書き方 •  好きなもの: FPGAを使ったカスタムコンピュータ n  「こんな風に設計できたらいいな」を実現しよう l  自分の手になじむ道具を実際に作ろう、そして公開しよう l  発表者の場合 •  PyCoRAM: PythonによるIPコア高位設計フレームワーク •  Pyverilog: Verilog HDL解析・生成ツールキット •  Veriloggen: PythonでVerilog HDLを組み立てる軽量ライブラリ SWEST2015 Shinya T-Y, NAIST 77
  • 78. 私が思う今後の高位合成の要件(気楽な話) n  好きな言語でハードウェア開発できる l  ソフトウェア開発は用途と好みに応じて言語を選べる •  C, C++, C#, Java, Python, Ruby, Perl, JavaScrit, Scala, Go, Haskell l  ハードウェア開発は?→選択肢が少ない •  RTL: Verilog HDL, VHDL •  高級HDL: Chisel (Scala DSL), PyMTL (Python DSL), Veriloggen •  高位合成: C, C++, OpenCL, Java (Synthesijer), Python (PyCoRAM) n  「好きな道具」で「好きなもの」を作る世界 •  高位設計 ≠ C設計(Cベースが現状一番良いのは認める) •  でもRubyで書きたい!Goで書きたい!Pythonで書きたい! –  発表者はPythonで書きたいのでこれからもいろいろやってみます –  でも他の言語も検討中です SWEST2015 Shinya T-Y, NAIST 78
  • 79. 「こんな風に設計できたらいいな」を実現しよう n  自分が使いたい道具を自分で作ろう l  こんな風に回路が書けたらいいな l  あの言語でハードウェアを生成したい l  でもそんな道具ない・・・じゃあ作りましょう! •  公開したら誰かが使ってくれるかも? n  (特に学生さん)研究になるか? l  研究:基礎研究・応用研究・開発研究 •  新しいもの・自分がワクワクするものを開発して ああでもないこうでもないと検証していくのは開発研究 l  新規性とか有用性とかは? •  新規性:ちゃんと作れば何かしらある •  有用性:少なくとも自分には有用 SWEST2015 Shinya T-Y, NAIST 79
  • 80. まとめ n  FPGA・高位合成の基礎と Pythonによる高位設計フレームワークについて n  今後の高位合成ツールはどうあるべきか? l  「こんな風に設計できたらいいな」を実現しよう n  各種ツールはGitHubで公開中 l  PyCoRAM: https://github.com/PyHDI/PyCoRAM l  Pyverilog: https://github.com/PyHDI/Pyverilog l  Veriloggen: https://github.com/PyHDI/veriloggen SWEST2015 Shinya T-Y, NAIST 80