FC2カウンター FPGAの部屋 2022年09月11日
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

cocotb を試してみる3(examples/adder)

cocotb を試してみる2(シミュレーション波形を表示)”の続き。

Python で書いたコードをテストベンチとして使用できるテストベンチ環境の cocotb を使ってみたいということで、前回は、”cocotb を試してみる1”で実行したサンプルの波形を gtkwave で表示した。今回は cocotb を git clone して、examples の adder をやってみよう。

cocotb を git clone した。
git clone https://github.com/cocotb/cocotb.git
cocotb_12_220911.png

cocotb/examples/adder に移動した。
cd cocotb/examples/adder/
tree .

cocotb_13_220911.png

hdl/adder.sv から見ていく。
4 ビット長の加算で、dump.vcd に波形を出力する。
cocotb_17_220911.png

model/adder_model.py を見た。
Python で書かれた加算だった。
cocotb_18_220911.png

tests/test_adder.py を見た。
adder_basic_test() と adder_randomised_test() の 2 つの関数(テスト)があった。
adder_basic_test() は 5 と 10 を加算して、dut の X の値を adder_model() の結果と比較する。
adder_randomised_test() はランダムな値の加算を 10 回行う。こちらも dut の X の値を adder_model() の結果と比較する。
2 つのテスト関数の時間を進めるのは、

await Timer(2, units="ns")

のようだ。つまり、1 つのテストあたり 2 ns 時間が進むようだ。
cocotb_19_220911.png

tests/Makefile を見た。
icarus verilog が指定されていないので、make 時に指定する必要があるようだ。
cocotb_20_220911.png

tests ディレクトリに行って make を行った。
cd tests
make SIM=icarus

cocotb_14_220911.png

cocotb_15_220911.png

adder_basic_test() と adder_randomised_test() の 2 つの関数(テスト)共に PASS した。

シミュレーション実行後のファイルを見ると dump.vcd があったので、gtkwave で波形を確認する。
gtkwave dump.vcd
cocotb_16_220911.png

gtkwave の波形を示す。
なお、表示は Data Format を Decimal に変更してある。
cocotb_21_220911.png

最初の結果が adder_basic_test() の 5 + 10 で、その後は adder_randomised_test() の 10 個の加算が続くようだ。
全ての加算は 2 ns の間隔になっていた。

最後に make の結果を貼っておく。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests$ make SIM=icarus
rm -f results.xml
make -f Makefile results.xml
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests' に入ります
mkdir -p sim_build
/usr/bin/iverilog -o sim_build/sim.vvp -D COCOTB_SIM=1 -s adder -f sim_build/cmds.f -g2012   /media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests/../hdl/adder.sv
rm -f results.xml
MODULE=test_adder TESTCASE= TOPLEVEL=adder TOPLEVEL_LANG=verilog \
         /usr/bin/vvp -M /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb/libs -m libcocotbvpi_icarus   sim_build/sim.vvp 
     -.--ns INFO     gpi                                ..mbed/gpi_embed.cpp:76   in set_program_name_in_venv        Did not detect Python virtual environment. Using system-wide Python interpreter
     -.--ns INFO     gpi                                ../gpi/GpiCommon.cpp:101  in gpi_print_registered_impl       VPI registered
     0.00ns INFO     cocotb                             Running on Icarus Verilog version 10.1 (stable)
     0.00ns INFO     cocotb                             Running tests with cocotb v1.7.0 from /home/masaaki/anaconda3/lib/python3.8/site-packages/cocotb
     0.00ns INFO     cocotb                             Seeding Python random module with 1662838789
     0.00ns INFO     cocotb.regression                  Found test test_adder.adder_basic_test
     0.00ns INFO     cocotb.regression                  Found test test_adder.adder_randomised_test
     0.00ns INFO     cocotb.regression                  running adder_basic_test (1/2)
                                                          Test for 5 + 10
VCD info: dumpfile dump.vcd opened for output.
     2.00ns INFO     cocotb.regression                  adder_basic_test passed
     2.00ns INFO     cocotb.regression                  running adder_randomised_test (2/2)
                                                          Test for adding 2 random numbers multiple times
    22.00ns INFO     cocotb.regression                  adder_randomised_test passed
    22.00ns INFO     cocotb.regression                  ******************************************************************************************
                                                        ** TEST                              STATUS  SIM TIME (ns)  REAL TIME (s)  RATIO (ns/s) **
                                                        ******************************************************************************************
                                                        ** test_adder.adder_basic_test        PASS           2.00           0.00       2616.21  **
                                                        ** test_adder.adder_randomised_test   PASS          20.00           0.00      19518.44  **
                                                        ******************************************************************************************
                                                        ** TESTS=2 PASS=2 FAIL=0 SKIP=0                     22.00           0.29         76.33  **
                                                        ******************************************************************************************
                                                        
make[1]: ディレクトリ '/media/masaaki/Ubuntu_Disk/Cocotb/cocotb/examples/adder/tests' から出ます

  1. 2022年09月11日 05:19 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0