PYNQ に Polyphony をインストールして使ってみる

  • 6
    いいね
  • 0
    コメント

PYNQ が IPython あらため Jupyter をつかっているとのことで、ここは Python つながりで、Polyphony をつかって Python のコードを verilog に変換してみます。
ついでに Zybo とかその後 i386 の docker でのチャレンジも

Polyphony のインストール

pip3 で簡単にインストールできます。

$ pip3 install polyphony

Jupyter へアクセス

PYNQ は Samba を使っているので pynq:9090 で Windows からアクセスできたりします。
Juypter

Folder をつくる

New のメニュから Folder を選択して Folder を作ります。ここでは Polyphony という名称に変えました。
create folder

list11.py を入力

New で Text File を選び(Python 3 は選ばない) 下の Python ソースを打ち込みます。できたソースは untitled.txt なので rename して list11.py にしておきます。

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 が生成されています。

2016-10-15 (7).png

え?それだけ!?

そう、それだけです。ここでは verilog の中身は見ません。興味のある人は次の記事を参考にしてください。

フィボナッチを求める回路をPolyphonyとMessagePack-RPCでFPGAに実装してみた
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 だけはとりあえず立ち上がる。その先は同じだから割愛。