PYNQ が IPython あらため Jupyter をつかっているとのことで、ここは Python つながりで、Polyphony をつかって Python のコードを verilog に変換してみます。
ついでに Zybo とかその後 i386 の docker でのチャレンジも
Polyphony のインストール
pip3 で簡単にインストールできます。
$ pip3 install polyphony
Jupyter へアクセス
PYNQ は Samba を使っているので pynq:9090 で Windows からアクセスできたりします。
Folder をつくる
New のメニュから Folder を選択して Folder を作ります。ここでは Polyphony という名称に変えました。
list11.py を入力
New で Text File を選び(Python 3 は選ばない) 下の Python ソースを打ち込みます。できたソースは untitled.txt なので rename して list11.py にしておきます。
from polyphony import testbench
def sum(l1:list):
def sub_sum(l2:list):
def sub_sub_sum(l2:list):
s = 0
for l in l2:
s += l
return s
return sub_sub_sum(l2)
return sub_sum(l1)
def list11(x):
data1 = [x, 1, 2]
data2 = [x, 1, 2, 3, 4, 5]
s1 = sum(data1)
s2 = sum(data2)
return s1 + s2 + x
@testbench
def test():
assert 18 == list11(0)
assert 21 == list11(1)
assert 24 == list11(2)
test()
手元にソースがある場合は upload もできます。
コンパイル
今度は New で Python3 を選びます。これで、jupyter の UI が使えます(マスマティカ風の UI)。
まずは必要なモジュールの import
import polyphony
import subprocess
polyphony がインストールされていれば import がうまくいきます。続いて polyphony でコンパイル
subprocess.check_output(["polyphony", "list11.py"])
これで list11.py がコンパイルされ Folder に戻ってみると polyphony_out.v が生成されています。
え?それだけ!?
そう、それだけです。ここでは verilog の中身は見ません。興味のある人は次の記事を参考にしてください。
[フィボナッチを求める回路をPolyphonyとMessagePack-RPCでFPGAに実装してみた] (http://qiita.com/ikwzm/items/48acfa3003522cf0c7a3)
Pythonベースの高位合成コンパイラPolyphonyを試してみた
いろんな意味で今後に期待ということで許してください。
Docker でもやってみた。
docker run -d -p 8888:8888 -v `pwd`/notebooks:/home/jovyan/work -e GRANT_SUDO=yes --user root mokemokechicken/jupyter-tensorflow
jupyter の初期画面でパスワードを必要とするなら -e PASSWORD="ぱすわーど" も必要。後は同じなので割愛。
DockerでJupyter Notebook環境をお手軽に準備する(TensorflowやGraphvizもあるよ)
をつかうと graphviz も入っているみたい。こっち使えばよかった、、、
Zybo でできるか?
素の jupyter なら Zynq でもできるんじゃないかな?と思って試してみました。
大事なことは /etc/rc.local の /root/4_boot_leds.sh をコメントアウトしておくこと。その他、fpga をさわりにいくようなことをしたらだめ。(Zybo 用の fpga.bit がこの時点でないから)
PYNQ の image に boot.bin u-boot.img uEnv.txt zybo-zynq7.dtb を入れ替える。uImage と partition2 の rootfs はそのまま。すると、Linux としてはとりあえず立ち上がる。
おーすると jupyter だけはとりあえず立ち上がる。その先は同じだから割愛。