Polyphony: さぁ始めよう
polyphony
2019-3-12 23:35 JST

階乗の計算(サンプル)

最初の例として階乗計算を行う回路を実装してみます。以下の内容のファイルを作成し、fact.pyとして保存します。

fact.py
def fact(x):
    y = 1
    for i in range(1, x+1):
        y = y * i
    return y

高位合成(コンパイル)を実行

次に、polyphonyで高位合成(コンパイル)を行います。

$ ./polyphony -o fact fact.py

ここでは-oオプションにより、出力ファイルをfact.vとするよう指定しています。高位合成の結果としてVerilogファイルfact.vが出力されます。出力結果を見ると、Verilogモジュール factが定義されていることが確認できます。

テストベンチの追加

次に、出力されたVerilogモジュールの動作確認をするため、テストベンチを追加します。先ほどのfact.pyに対してテストベンチを以下のように追加します。

test-bench
@testbench
def test():
    assert 1 == fact(0)
    assert 1 == fact(1)
    assert 2 == fact(2)
    assert 6 == fact(3)
    assert 24 == fact(4)
    assert 120 == fact(5)

Pythonの関数test()がテストベンチであることをpolyphonyに伝えるため、Pythonのデコレータとして@testbenchを指定しています。@testbenchが指定された関数は、Verilogのシミュレータ上で実行するためのモジュールに合成されます。テストベンチの中では特別にPythonのassert文を使用することができます。