LoginSignup
1
1

More than 5 years have passed since last update.

Python で FPGA/テストベンチ ってなんでしょう?

Last updated at Posted at 2018-12-03

テストベンチって何でしょう?

Polyphony ではテストプログラムを FPGA の世界の伝統に従ってテストベンチと表現してます。Lチカの例で実際のプログラムとテストベンチを図示します。
image.png

テストプログラムを眺める

テストベンチ
@testbench
def test(dut):
    for i in range(4):
        wait_value(1, dut.led)
        wait_value(0, dut.led)

device_under_test = Blink(10000)
test(device_under_test)

@testbench と test 関数

@testbench というデコレータで修飾された関数がテスト用の関数です。ここでは test という名称にしていますが、別の名前でも構いません。

test 関数内では引数 dut に対象となるテストのオブジェクトが入ってきます。dut は実は Lチカ プログラムです。Lチカだけに dut の led のポートは 1 (点灯) 0 (消灯) を繰り返します。Polyphony が用意する wait_value 関数でその変化を待つようになってします。それを 4 回繰り返すと終了です。

オブジェクトの生成とテストベンチの実行

Blink クラス(Lチカでした)のオブジェクトを生成し、グローバル変数 device_under_test に入れ、テスト関数を呼びます。

オブジェクトの生成
device_under_test = Blink(10000)
test(device_under_test)

Python で実行する

Python (バージョン 3です)で実行してみましょう。うまくいけば何事もなかったように終了します。

pythonで実行
shell$ python blink.py

あるいはWindows なら

Windowsのcmdで実行
> py -3.6 blink.py

なお、上の -3.6 という引数はWindowsで複数の Python がインストールされている場合に指定する Python のバージョンです。もし1つしかインストールしていないのなら必要ありません。

エラーです

Polyphony がインストールされていない場合は次のエラーが出ます。私の環境では Python の 3.5 にはインストールしていなかったのでエラーになりました。

エラーです
>py -3.5 blink.py
  File "blink.py", line 14
    led_bit:bit = 1
           ^
SyntaxError: invalid syntax

print の追加

うまくいってもなんの表示もしないので print を追加してみます。

test
@testbench
def test(dut):
    v = 0
    for i in range(4):
        print("loop:", i)
        wait_value(1, dut.led)
        wait_value(0, dut.led)
    print("finished")

実行すると

実行と表示
> python blink.py
loop: 0
loop: 1
loop: 2
loop: 3
finished

地味な感じですが表示されました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1