20
Polyphony IO ままま まままままままま 2017/3/31

Polyphony IO まとめ

  • Upload
    ryos36

  • View
    98

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Polyphony IO まとめ

Polyphony IO まとめシンビー社内資料

2017/3/31

Page 2: Polyphony IO まとめ

ケース1Zynq から RPC

Page 3: Polyphony IO まとめ

Testbench 主導開発Python 関数Python 関数

(testbench)

def sum(a, b, c): return a * b + c

@testbenchdef test(): r = sum(1, 2, 3) print(r)

test()

Page 4: Polyphony IO まとめ

I/F

Polyphony が Python への道を開いてくれるPython 関数Python 関数

(testbench)

def sum(a, b, c): return a * b + c

@testbenchdef test(): r = sum(1, 2, 3) print(r)

test()

主に CPU からの RPC 的な使用法を想定している

Polyphony が生成したVerilog の I/F の意味

Page 5: Polyphony IO まとめ

I/F

msgpack-RPC Server

最終形はこれ

Python 関数IO

AXI

AXI バス

CPU AXI

Linuxドライバ

msgpack-RPC Client

Python Msgpack RPC

Python アプリケーショ

Page 6: Polyphony IO まとめ

ケース2IO を扱う

Page 7: Polyphony IO まとめ

Python

Polyphony IO

SPI

IO

Page 8: Polyphony IO まとめ

I/F Python

Polyphony が SPI を IO ごとラップ

SPI

IO

主に SPI などの IO をラッピングしてくれる

Page 9: Polyphony IO まとめ

I/FPython

反対側の IF はどうする?

SPI

IO?

Page 10: Polyphony IO まとめ

Verilog

Python

処理の本質と IO をきれいに分離

SPI

IO? 本質

IO とのきれいな分離

Page 11: Polyphony IO まとめ

I/FPython

Standalone タイプ

SPI

IO

Python のコードは橋渡し的になるPython が能動的にメモリをアクセス

IO

Memory

Page 12: Polyphony IO まとめ

I/FPython

IoT タイプ

SPI

IO

Python のコードは橋渡し的になるCPU からは SPI や I2C に見える

IO

CPU

SPIorI2C

Page 13: Polyphony IO まとめ

I/FPython

関数 (RPC) タイプ ( というのはない )

SPI

IO

Zynq などの ARM CPU から SPI をラッピングしているように見える

CPU

AXI バス

Page 14: Polyphony IO まとめ

ケース 3フィルタ

Page 15: Polyphony IO まとめ

フィルターアプリを Python でフィルターアプリ

@workerdef woker_func1(): …

@workerdef woker_func2(): …

Que

IO Q

ueue

IO Q

ueue

Page 16: Polyphony IO まとめ

I/FVerilog

AXIS

他のモジュールと連携フィルターアプリ

@workerdef woker_func1(): …

@workerdef woker_func2(): …

Que

IO Q

ueue

IO Q

ueueVerilog

AXIS

Page 17: Polyphony IO まとめ

ケース 4研究の人たちが使いたいパターン

Page 18: Polyphony IO まとめ

I/F

msgpack-RPC Server

これに近い

Python 関数IO

AXI

AXI バス

CPU AXI

Linuxドライバ

msgpack-RPC Client

Python Msgpack RPC

Python アプリケーショ

Page 19: Polyphony IO まとめ

バースト的にメモリから情報をとる

I/F

msgpack-RPC Server

Python 関数IOIO

Queue

IO Q

ueue

Memory

@worker

AXI バスCPU

Memory

@worker

Page 20: Polyphony IO まとめ

疑似コードreg_woker_to_kick_me = Reg()memory_IO_0 = IO_Queue()memory_IO_1 = IO_Queue()memory_IO_2 = IO_Queue()

def kick_me(para_a, para_b, para_c): kick_worker() # ワーカーを起動 wait_worker() # ワーカー終了待ち return reg_woker_to_kick_me

@workerdef multiple_worker(): flag = True n = 0 while ( flag ): (data_0, user_0, last_0) = memory_IO_0.pull() (data_1, user_1, last_1) = memory_IO_1.pull() n += 1 if ( last_0 == 1 ) : assert(last_1 == 1) flag = False data_result = data_0 * data_1 memory_IO_2.push((data_result, user_0, user1)) reg_worker_to_kick_me.value = n finish_worker()