SlideShare a Scribd company logo
Polyphony
Python ではじめる FPGA
鈴木
2017/9/9
アジェンダ
• FPGA ってなに?
• Polyphony 入門
• 使ってみよう Polyphony
– Polyphony 応用例(RISC-V)
– 取り組み1(CNN)
– 取り組み2(CV)
• 時間があれば チュートリアル
• まとめ
自己紹介
• @ryos36
• ハッシュタグ
#polyphony
著者
です
FPGA てなに?
FPGA を使ってみよう!!
FPGA でハードウェアに自由度を!
http://www.ni.com より
Wikipedia より
FPGA=
Field-Programmable Gate Array
使用例(OLED)
OLED もライブラリが
あらかじめある
Jupyter からコントロール
使用例(キーパッド)
FPGA と WiFi 接続例
ブレッドボードで
プロトタイプの開発
FPGA の特徴
得意なこと
• 並列計算
• レイテンシを守ること
• ビット計算
• 柔軟性
不得意なこと
• 高速処理?
FPGA vs Raspberry PI
• FPGA • Raspberry PI
ARM SoCARM SoC FPGA
u-boot & Linuxu-boot & Linux
Linux Driver Linux Driver
Python Python
やりたいこと やりたいこと
値段とか消費電力とか入手性とかを無視して、ソフト的にざっくりと比較
コミュニティの大きさ(情報の入りやすさ)もだいぶ違うけど、、、
HDL で何か実装してみよう!?
• 使う言語
– VHDL
– Verilog HDL
LED チカチカ=Lチカ
ハードウェアの
Hello World 的存在
FPGAでハードウェアを自由に組む
module fulladder
(
input x,
input y,
input cin,
output A,
output cout
);
assign {cout,A} = cin + y + x;
endmodule
ハードウェア記述言語
VHDL を使った問題
signal x: std_logic
…
process (clk)
variable y : std_logic;
begin
if clk’event and clk = 1 then
y := x + 1
x <= x + 1
end if;
end process;
Q: x はいま 3 とします。
左辺にある y と x は
いくつになるでしょう?
VHDL を使った問題
signal x: std_logic
…
process (clk)
variable y : std_logic;
begin
if clk’event and clk = 1 then
y := x + 1
x <= x + 1
end if;
end process;
A:
y は 4、
x は 3のまま。
次のクロックで 4。
何を意味してい
るのか?
FPGA でパイプライン処理
処理 処理 処理 処理 処理
処理を細分化することで高速化が可能
x + 1
x
x + 1
x
頭の中でオーバラップする時間を
考えながら設計する!!
何を意味してい
るのか?
FPGA の設計 = 頭の中にこんなのが
思い浮かぶ必要あり
今でも検証には波形を見る
ここまでのまとめ
• FPGA なんだか楽しそう
• FPGA ちょっと難しそう
Polyphony入門
Python で FPGA
FPGA つかってみたいけど
Polyphonyを使おう!!
• Polyphony:Python でハードウェア設計!
What is Polyphony?(1/3)
Python for Hardware Design
Python Polyphony
Verilog HDL
(synthesizable)
What is Polyphony?(2/3)
Python Polyphony
Verilog HDL
(synthesizable)
● Bring higher level of abstraction to your design
● Allow designers to focus on developing the algorithm
● Reduce costs for program maintenance
● Open Source (https://github.com/ktok07b6/polyphony)
Polyphony はPythonコードの
サブセットを合成可能
Python
Polyphony
(is a subset of Python)
Function
Class
List(Fixed
size)
Tuple
For/While
If/Else
...
String
Dictionary
Set
Builtin funcs
...
What is Polyphony?(3/3)
まずは Lチカ、、、
• こんな感じでできます
from polyphony import testbench, module, is_worker_running
from polyphony.io import Bit
@module
class Blink:
def __init__(self):
self.led = Bit(0)
self.append_worker(self.main, led)
def main(self):
led = 1
while is_worker_running():
self.led.wr(led)
led = ~led
self._wait(10000000)
def _wait(self, interval):
for i in range(interval):
pass
blink = Blink()
Fibonacci Number(フィボナッチ数列)
#from polyphony import testbench
def fib(n):
if n <= 0: return 0
if n == 1: return 1
r0 = 0
r1 = 1
for i in range(n-1):
prev_r1 = r1
r1 = r0 + r1
r0 = prev_r1
return r1
#@testbench
def test():
expect = [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610]
for i in range(len(expect)):
result = fib(i)
assert expect[i] == result
print(i, "=>", result)
test()
ここまでのまとめ
• Polyphony で FPGA が簡単に使えそう
• Polyphony で何ができる?
• どこまでできる?
使ってみよう Polyphony
• 豊富なライブラリ
これから豊富になる(だろう)
Polyphony ライブラリ
• bitonic_sort : バイトニックソートのサンプル
• chenidct : 2次元IDCT(逆コサイン変換)
• adpcm : ADPCMのエンコーダ・デコーダ
• UART: printf デバッグ的なことが出来る
• SPI + A/D: センサーとの連携
ちょっと脱線
@polyphony.pure
def bitonic_indices(size, blocks, offset):
for i in range(0, size):
if (i % (offset << 1)) >= offset:
continue
direction = ASCENDING if (i // blocks) % 2 == 0 else DESCENDING
ii = i + offset
yield i, ii, direction
• bitonic_sort : バイトニックソートのサンプル
特別なデコレータ
Python により“動的に”回路図を自動生成
Polyphony 応用例
• RISC-V
• CNN
• CV(コンピュータ・ビジョン)
RISC-V
RISC-V:大手企業も注目する オープンな CPU の規格。
すでに FPGA 上でも動いて、Linux も動作する模様。
RISC-V on Polyphony
パイプラインのシミュレート
CNN
Python で学ぶディープラーニングの本
CV(コンピュータ・ビジョン)
CV と呼ぶには程遠い。
OpenCV との連携は“できません”。
あしからず。
エッジ検出
チュートリアル
• Hello World
• Mul and Add
• 実機!!
Hello World 1
• エディターで Hello World を写しましょう(写経)。
from polyphony import testbench
def hello():
print("Hello World.")
@testbench
def test():
hello()
test()
Hello World 2
• Python3 で実行
– 必ず Python3 で実行するようにします
> python3 hello.py
Hello World.
Hello World 3
• Polyphony でコンパイル
– polyphony でコンパイルします。
> polyphony hello.py
> ls *.v
hello.v polyphony_out.v test.v
verilog のファイル(.v のファイル) が生成されます。
Hello World 4
• iverilog でコンパイル&実行
> iverilog -o hello polyphony_out.v test.v
[test-0.3.0] Persimmon:Tutorial_0> ls hello
hello*
> ./hello
0:
Hello World.
Hello World.
Hello World.
Hello World.
150:finish
Hello World
Hello World が5回実行されるのが気になる方は
Mul and Add1
• エディターで Hello World を写しましょう(写経)。
from polyphony import testbench
def mul_add(a, b, c, d):
return a * b + c * d
@testbench
def test():
assert 17 == mul_add(1, 2, 3, 4)
assert 62 == mul_add(4, 5, 6, 7)
test()
Mul and Add 2
• Python3 で実行
– 必ず Python3 で実行するようにします
> python3 mul_add.py
Traceback (most recent call last):
File "mul_add.py", line 11, in <module>
test()
File "/lib/... .../polyphony/__init__.py", line 30, in _testbench_decorator
func()
File "mul_add.py", line 8, in test
assert 17 == mul_add(1, 2, 3, 4)
AssertionError
AssertionError です。17 ではなく 14 に変えて再度チャレンジ
Mul and Add 3
• シミュレータで実行
> ../bin/simu.py mul_add.py
0:mul_add_0_in_a= x, mul_add_0_in_b= x, mul_add_0_in_c= x,
mul_add_0_in_d= x, mul_add_0_out_0= x
10:mul_add_0_in_a= 0, mul_add_0_in_b= 0, mul_add_0_in_c= 0,
mul_add_0_in_d= 0, mul_add_0_out_0= 0
110:mul_add_0_in_a= 1, mul_add_0_in_b= 2, mul_add_0_in_c= 3,
mul_add_0_in_d= 4, mul_add_0_out_0= 0
130:mul_add_0_in_a= 1, mul_add_0_in_b= 2, mul_add_0_in_c= 3,
mul_add_0_in_d= 4, mul_add_0_out_0= 14
160:mul_add_0_in_a= 4, mul_add_0_in_b= 5, mul_add_0_in_c= 6,
mul_add_0_in_d= 7, mul_add_0_out_0= 14
180:mul_add_0_in_a= 4, mul_add_0_in_b= 5, mul_add_0_in_c= 6,
mul_add_0_in_d= 7, mul_add_0_out_0= 62
220:finish
実機では?
• 合成して
• IO 配線して
• 実装して
• ソフトも書いて
– 起動するのにソフトとか必要かも
Python でフィルタ処理
SPI SPI
I/F
SPI
I/F
フレームワーク
#from polyphony import testbench
def filter(spi_in, spi_out):
....
....
SPI
Python で書いたフィルターが
FPGA 上で動く!!
高位合成ツール:
開発キット
フレームワーク
Murata
(LoRa対応モジュール
SX1276 + Cortex-M0)
Kiss4
(Zynq = ARM + FPGA)
OR
Xilinx のツールへの対応もしました
ARM プロセッサ Polyphony の
Lチカ・モジュール
おまけ:ディープラーニング
ARM
Cortex-M4
モデルをぎゅっと
圧縮
3 FPGA
Polyphony の今後
• HPC
– めざせ京 対応!!
• ステレオビジョン
– 視差画像
• Bayes
– メールの選別
• 数値計算
– 精度保証付き?
まとめ
• FPGA つかってみよう!!
• Polyphony を使えば
Python のコードを HDL に!!
• Happy Python Life!!
これからも Polyphony をよろしく!!
ご清聴ありがとうございました

More Related Content

What's hot (20)

PDF
Scapyで作る・解析するパケット
Takaaki Hoyo
 
PDF
プログラムを高速化する話
京大 マイコンクラブ
 
PDF
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
PPTX
研究者のための Python による FPGA 入門
ryos36
 
PPTX
DockerコンテナでGitを使う
Kazuhiro Suga
 
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
PDF
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
Fixstars Corporation
 
PDF
NVIDIA GPUで作るHeadless X11 Linux
Tomoki SHISHIKURA
 
PDF
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
 
PDF
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
 
PDF
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
 
PPTX
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
 
PDF
llvm入門
MITSUNARI Shigeo
 
PDF
明日使えないすごいビット演算
京大 マイコンクラブ
 
PDF
PsychoPyを使った初学者向けの心理実験環境の構築
Hirokazu Ogawa
 
PDF
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
UnityTechnologiesJapan002
 
PDF
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
Fixstars Corporation
 
PDF
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
 
PDF
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
KLab Inc. / Tech
 
PDF
TensorFlow Lite Delegateとは?
Mr. Vengineer
 
Scapyで作る・解析するパケット
Takaaki Hoyo
 
プログラムを高速化する話
京大 マイコンクラブ
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
研究者のための Python による FPGA 入門
ryos36
 
DockerコンテナでGitを使う
Kazuhiro Suga
 
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
Fixstars Corporation
 
NVIDIA GPUで作るHeadless X11 Linux
Tomoki SHISHIKURA
 
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
 
Optunaを使ったHuman-in-the-loop最適化の紹介 - 2023/04/27 W&B 東京ミートアップ #3
Preferred Networks
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
 
llvm入門
MITSUNARI Shigeo
 
明日使えないすごいビット演算
京大 マイコンクラブ
 
PsychoPyを使った初学者向けの心理実験環境の構築
Hirokazu Ogawa
 
【Unite Tokyo 2019】今すぐ現場で覚えておきたい最適化技法 ~「ゲシュタルト・オーディン」開発における最適化事例~
UnityTechnologiesJapan002
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
Fixstars Corporation
 
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
 
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
KLab Inc. / Tech
 
TensorFlow Lite Delegateとは?
Mr. Vengineer
 

Viewers also liked (20)

PPTX
Cortex-M0プロセッサから自作して Lチカをやってみた
Junichi Akita
 
PPTX
電子回路の民主化とその実践
Junichi Akita
 
PDF
Beatroboでのハードウェアプロトタイピング
Hideyuki TAKEI
 
PDF
IkaLog: Data Collector for Splatoon and Machine Learning
Takeshi HASEGAWA
 
PDF
Klabの梅雨対策
Hideyuki TAKEI
 
PDF
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
Kentaro Sano
 
PDF
cocos2d-x で PlugAir を 使えるようにしてみた
Hideyuki TAKEI
 
PDF
IkaLog: Data Collector for Splatoon and Machine Learning (Jan 2017 @ Softbank)
Takeshi HASEGAWA
 
PDF
Golang, make and robotics #gocon
Hideyuki TAKEI
 
PDF
2017年のFPGA Community活動について
Mr. Vengineer
 
PDF
ゆるふわコンピュータ (IPSJ-ONE2017)
Shinya Takamaeda-Y
 
PDF
IkaLog20170316pynq_dist
Takeshi HASEGAWA
 
PPTX
集積回路が真の道具になるために
Junichi Akita
 
PPTX
Polyphony の並列化
ryos36
 
PDF
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
 
PDF
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Shinya Takamaeda-Y
 
PDF
Gpu vs fpga
Yukitaka Takemura
 
PDF
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
 
PDF
TensorFlow XLA とハードウェア
Mr. Vengineer
 
PDF
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
 
Cortex-M0プロセッサから自作して Lチカをやってみた
Junichi Akita
 
電子回路の民主化とその実践
Junichi Akita
 
Beatroboでのハードウェアプロトタイピング
Hideyuki TAKEI
 
IkaLog: Data Collector for Splatoon and Machine Learning
Takeshi HASEGAWA
 
Klabの梅雨対策
Hideyuki TAKEI
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
Kentaro Sano
 
cocos2d-x で PlugAir を 使えるようにしてみた
Hideyuki TAKEI
 
IkaLog: Data Collector for Splatoon and Machine Learning (Jan 2017 @ Softbank)
Takeshi HASEGAWA
 
Golang, make and robotics #gocon
Hideyuki TAKEI
 
2017年のFPGA Community活動について
Mr. Vengineer
 
ゆるふわコンピュータ (IPSJ-ONE2017)
Shinya Takamaeda-Y
 
IkaLog20170316pynq_dist
Takeshi HASEGAWA
 
集積回路が真の道具になるために
Junichi Akita
 
Polyphony の並列化
ryos36
 
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
 
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
Shinya Takamaeda-Y
 
Gpu vs fpga
Yukitaka Takemura
 
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
 
TensorFlow XLA とハードウェア
Mr. Vengineer
 
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
 
Ad

Similar to Polyphony: Python ではじめる FPGA (20)

PDF
Pyconjp2014_implementations
masahitojp
 
ODP
Introduction of Python
Tomoya Nakayama
 
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
 
PDF
Python physicalcomputing
Noboru Irieda
 
PDF
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
 
KEY
ひのきのぼうだけで全クリ目指す
AromaBlack
 
PPTX
Polyphony IO まとめ
ryos36
 
PDF
Pythonによる非同期プログラミング入門
Hironori Sekine
 
PDF
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
PDF
C#勉強会
hakugakucafe
 
PDF
Using PyFoam as library(第25回オープンCAE勉強会@関西)
TatsuyaKatayama
 
PDF
Subprocess no susume
Makoto Kishimoto
 
PDF
FlexUnit4とMockitoFlex
Yasuhiro Morikawa
 
PDF
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
PPT
20090415 すばらしきSymfonyの世界へようこそ
Hiromu Shioya
 
ODP
Symfony tdd
Hidenori Goto
 
PDF
Cython intro prelerease
Shiqiao Du
 
KEY
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
 
PDF
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
 
PDF
NumPyが物足りない人へのCython入門
Shiqiao Du
 
Pyconjp2014_implementations
masahitojp
 
Introduction of Python
Tomoya Nakayama
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
 
Python physicalcomputing
Noboru Irieda
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
 
ひのきのぼうだけで全クリ目指す
AromaBlack
 
Polyphony IO まとめ
ryos36
 
Pythonによる非同期プログラミング入門
Hironori Sekine
 
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
C#勉強会
hakugakucafe
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
TatsuyaKatayama
 
Subprocess no susume
Makoto Kishimoto
 
FlexUnit4とMockitoFlex
Yasuhiro Morikawa
 
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
20090415 すばらしきSymfonyの世界へようこそ
Hiromu Shioya
 
Symfony tdd
Hidenori Goto
 
Cython intro prelerease
Shiqiao Du
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
 
NumPyが物足りない人へのCython入門
Shiqiao Du
 
Ad

More from ryos36 (17)

PPTX
Pycairo を使ってみる その1
ryos36
 
PPTX
ストーリーとは
ryos36
 
PPTX
CNN でテニス選手の動きを解析する
ryos36
 
PPTX
Polyphony の行く末(2018/3/3)
ryos36
 
PPTX
Polyphony 新機能ツアー
ryos36
 
PPTX
Stellaris を使った組み込みアプリ開発ガイド
ryos36
 
PPTX
数値計算のための Python + FPGA
ryos36
 
PPTX
PYNQ 祭り: Pmod のプログラミング
ryos36
 
PPTX
SDSoC でストリーム
ryos36
 
PPTX
Analog Devices の IP コアを使う
ryos36
 
PPTX
SDSoC と Vivado
ryos36
 
PPTX
高速化のポイント
ryos36
 
PPTX
20周遅れ
ryos36
 
PPTX
90分 Scheme to C(勝手に抄訳版)
ryos36
 
PPTX
並列計算への道 2015年版
ryos36
 
PDF
NiosII と RTOS について
ryos36
 
PPTX
Synthesijer で作るFORTH仮想マシン
ryos36
 
Pycairo を使ってみる その1
ryos36
 
ストーリーとは
ryos36
 
CNN でテニス選手の動きを解析する
ryos36
 
Polyphony の行く末(2018/3/3)
ryos36
 
Polyphony 新機能ツアー
ryos36
 
Stellaris を使った組み込みアプリ開発ガイド
ryos36
 
数値計算のための Python + FPGA
ryos36
 
PYNQ 祭り: Pmod のプログラミング
ryos36
 
SDSoC でストリーム
ryos36
 
Analog Devices の IP コアを使う
ryos36
 
SDSoC と Vivado
ryos36
 
高速化のポイント
ryos36
 
20周遅れ
ryos36
 
90分 Scheme to C(勝手に抄訳版)
ryos36
 
並列計算への道 2015年版
ryos36
 
NiosII と RTOS について
ryos36
 
Synthesijer で作るFORTH仮想マシン
ryos36
 

Polyphony: Python ではじめる FPGA