際際滷

際際滷Share a Scribd company logo
Polyphony
Python ではじめる FPGA
椳
2017/9/9
アジェンダ
? FPGA ってなに
? Polyphony 秘T
? 聞ってみよう Polyphony
C Polyphony 鮄胆(RISC-V)
C 函りMみ1(CNN)
C 函りMみ2(CV)
? rgがあれば チュ`トリアル
? まとめ
徭失B初
? @ryos36
? ハッシュタグ
#polyphony
广宀
です
FPGA てなに
FPGA を聞ってみよう。
FPGA でハ`ドウェアに徭喇業を
http://www.ni.com より
Wikipedia より
FPGA=
Field-Programmable Gate Array
聞喘箭(OLED)
OLED もライブラリが
あらかじめある
Jupyter からコントロ`ル
聞喘箭(キ`パッド)
FPGA と WiFi 俊A箭
ブレッドボ`ドで
プロトタイプの_k
FPGA の蒙
誼吭なこと
? K双麻
? レイテンシを便ること
? ビット麻
? 悲來
音誼吭なこと
? 互堀I尖
FPGA vs Raspberry PI
? FPGA ? Raspberry PI
ARM SoCARM SoC FPGA
u-boot & Linuxu-boot & Linux
Linux Driver Linux Driver
Python Python
やりたいこと やりたいこと
カ里箸M薦とか秘返來とかをoして、ソフト議にざっくりと曳^
コミュニティの寄きさ秤鵑糧襪蠅笋垢毅もだいぶ`うけど、、、
HDL で採かg廾してみよう!?
? 聞う冱Z
C VHDL
C Verilog HDL
LED チカチカ=Lチカ
ハ`ドウェアの
Hello World 議贋壓
FPGAでハ`ドウェアを徭喇にMむ
module fulladder
(
input x,
input y,
input cin,
output A,
output cout
);
assign {cout,A} = cin + y + x;
endmodule
ハ`ドウェア峰冱Z
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 とします。
恣xにある 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 でパイプラインI尖
I尖 I尖 I尖 I尖 I尖
I尖を蛍晒することで互堀晒が辛嬬
x + 1
x
x + 1
x
^の嶄でオ`バラップするrgを
深えながらOする!!
採を吭龍してい
るのか
FPGA のO = ^の嶄にこんなのが
房い検かぶ駅勣あり
書でも編^には襖侘を需る
ここまでのまとめ
? FPGA なんだかSしそう
? FPGA ちょっとyしそう
Polyphony秘T
Python で FPGA
FPGA つかってみたいけど
Polyphonyを聞おう!!
? PolyphonyPython でハ`ドウェアO!
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 がgに聞えそう
? Polyphony で採ができる
? どこまでできる
聞ってみよう Polyphony
? N源なライブラリ
これからN源になる(だろう)
Polyphony ライブラリ
? bitonic_sort : バイトニックソ`トのサンプル
? chenidct : 2肝圷IDCT(剃コサインQ)
? adpcm : ADPCMのエンコ`ダ?デコ`ダ
? UART: printf デバッグ議なことが竃栖る
? SPI + A/D: センサ`とのB亊
ちょっと用
@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 : バイトニックソ`トのサンプル
蒙eなデコレ`タ
Python により^啜弔法瓜愨蹐鰈喇撹
Polyphony 鮄胆
? RISC-V
? CNN
? CV(コンピュ`タ?ビジョン)
RISC-V
RISC-V:寄返二Iも廣朕する オ`プンな CPU のク顱
すでに FPGA 貧でも咾い董Linux も嘛する庁。
RISC-V on Polyphony
パイプラインのシミュレ`ト
CNN
Python で僥ぶディ`プラ`ニングの云
CV(コンピュ`タ?ビジョン)
CV と柵ぶには殻hい。
OpenCV とのB亊は^できません ̄。
あしからず。
エッジ奮
チュ`トリアル
? Hello World
? Mul and Add
? gC!!
Hello World 1
? エディタ`で Hello World を亟しましょう(亟U)。
from polyphony import testbench
def hello():
print("Hello World.")
@testbench
def test():
hello()
test()
Hello World 2
? Python3 でg佩
C 駅ず Python3 でg佩するようにします
> python3 hello.py
Hello World.
Hello World 3
? Polyphony でコンパイル
C polyphony でコンパイルします。
> polyphony hello.py
> ls *.v
hello.v polyphony_out.v test.v
verilog のファイル(.v のファイル) が伏撹されます。
Hello World 4
? iverilog でコンパイル&g佩
> 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指g佩されるのが櫃砲覆觀修
Mul and Add1
? エディタ`で Hello World を亟しましょう(亟U)。
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 でg佩
C 駅ず Python3 でg佩するようにします
> 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
? シミュレ`タでg佩
> ../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
gCでは
? 栽撹して
? IO 塘して
? g廾して
? ソフトもいて
C 軟咾垢襪里縫愁侫箸箸駅勣かも
Python でフィルタI尖
SPI SPI
I/F
SPI
I/F
フレ`ムワ`ク
#from polyphony import testbench
def filter(spi_in, spi_out):
....
....
SPI
Python でいたフィルタ`が
FPGA 貧で咾!!
互了栽撹ツ`ル
_kキット
フレ`ムワ`ク
Murata
(LoRa鬋皀献紿`ル
SX1276 + Cortex-M0)
Kiss4
(Zynq = ARM + FPGA)
OR
Xilinx のツ`ルへの鬉發靴泙靴
ARM プロセッサ Polyphony の
Lチカ?モジュ`ル
おまけ坤妊`プラ`ニング
ARM
Cortex-M4
モデルをぎゅっと
Rs
3 FPGA
Polyphony の書瘁
? HPC
C めざせ奨 !!
? ステレオビジョン
C 餓鮫
? Bayes
C メ`ルのxe
? 方モ麻
C 娼業隠^原き
まとめ
? FPGA つかってみよう!!
? Polyphony を聞えば
Python のコ`ドを HDL に!!
? Happy Python Life!!
これからも Polyphony をよろしく!!
ご賠ありがとうございました

More Related Content

Polyphony: Python ではじめる FPGA