Weitere ähnliche Inhalte
Ähnlich wie Polyphony IO まとめ (20)
Polyphony IO まとめ
- 4. I/F
Polyphony が Python への
道を開いてくれる
Python 関数Python 関数
(testbench)
def sum(a, b, c):
return a * b + c
@testbench
def test():
r = sum(1, 2, 3)
print(r)
test()
主に CPU からの RPC 的な使用法を想定している
Polyphonyが生成した
Verilog のI/Fの意味
- 20. 疑似コード
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
@worker
def 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()
Hinweis der Redaktion
- もともとの Polyphony のスタイル。Testbench が トップモジュールを規定してくれる。
- Polyphony は Verilog を作ってくれる。ソフトウェアエンジニア的には Verilog かどうかはあまり気にならない。Python の関数を FPGA がわかるようにラップしてくれて CPU から RPC 的に使えるというイメージ
- 最終形態はこれ
mesgpack RPC でさらに Python でラップして ORB になるとベスト。ORB になると FPGA 側に状態を覚えておいてほしいというのはある。ORB は Python の話なので割愛。
- Polyphony IO を使うとSPI の細かいインタフェースを使えるようになる。
- Python 利用者から見ると SPI をラップしてくれる I/F に見える
上の絵は Python をラップしているように見えるが、、、、
- これだけだとSPIから来た情報を外に出せなないので、なんらかの I/F が必要
- なんらかの I/F との中心になにか本質(たとえばローパスフィルターとか)があればそれは切り出されて分離可能になるべきしかしそれがどのように実現できるかはまだ私が勉強不足
- CNN やマトリックス演算では情報をバースト的にとる必要がある。AXI バス経由(これは Zynq の都合)でとる必要があるかもしれないし
FPGA に繋がっているメモリ(上の図の右側)からとる必要があるかもしれない。