FPGA
Python3
Polyphony
More than 1 year has passed since last update.

Polyphony 誕生

もともと個人的にも企業としてもコンパイラ技術を生かしてみたいという
気持ちがあった。2007 年頃に携帯電話の仕事をしている時に、「RTOS + Script 言語」で開発効率をアップしようというアイデアがあった。当時は Scheme をベースにして Java Script という考え方だった。本当は Java がよいのだろうけど権利関係で無理だろうなと思っていた。その後、Android にあっさり追い抜かれる。

そして、Polyphony。Python をベースにするというアイデアはメイン開発者の K さんのもので、2015/01/16 の高位合成友の会の Synthesijer に刺激され、その数か月後には Polyphony の最初のバージョンが動いていた。開発秘話というものはない。気が付いたら K さんが作っていたのだ。そして 2015/12/08 の高位合成友の会での発表、2016年1月発売のFPGA マガジン No.12への寄稿と続いていく。

HelloWorld

「Hello World」という言葉は今や開発者でなくても使う言葉になった。組み込みシステムの開発者にとって特別な意味をもつ言葉だったので、ガレージで味わう立ち上げの瞬間の鼓動を共有できずに広まってしまっていることにはちょっとした取り残されを感じてしまう。

Polyphony が生成するコードは Verilog-HDL であり、FPGA 等をターゲットとしたコンパイラなので、組み込みシステムのそれとはちょっと違う。立ち上げ確認に putc も UART も期待できない。ただし、$display を生成する
組み込み関数の print が用意されているので、シミュレーション上では「Hello World」が可能だ。やってみよう。

ソースコードは次のようになる。

hello.py
from polyphony import testbench

def hello():
    print("Hello World.")

@testbench
def test():
    hello()

test()

コンパイルしてみよう。pip3 が入っていれば polyphony をインストールすることが出来る。

$ pip3 install polyphony
$ polyphony -V
polyphony 0.3.2
$ polyphony hello.py
$ ls
hello.py  hello.v  polyphony_out.v  test.v

出来たソースは hello.v polyphony_out.v test.v の3つだ。polyphony_out.v が実機をターゲットにしたトップモジュールになる。test.v はテストベンチ。シミュレータがあれば実行することが出来る。ここでは iverilog を使う。

$ iverilog -o hello polyphony_out.v test.v
$ ./hello
Hello World.
Hello World.
Hello World.
Hello World.
  150:finish
Hello World.

Tutorial はここにある

ここではざくっと Hello World をシミュレーションで実行してみた。
細かいインストールは割愛した。より細かいチュートリアルが必要な人は次の URL を見てほしい。

http://polyphony.sinby.com/tutorial.html