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

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

FPGAの部屋

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

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

cocotb を試してみる1”の続き。

Python で書いたコードをテストベンチとして使用できるテストベンチ環境の cocotb を使ってみたいということで、前回は、cocotb のインストールと最初のサンプルをやってみて成功した。今回は、前回実行したサンプルの波形を gtkwave で表示した。

シミュレータには Icarus Verilog を使用しているので、VCD ファイルを出力させたい。
”cocotb’s documentation”の”Icarus Verilog/Waveforms”にやり方が書いてあった。
そうだ、Icarus Verilog は Verilog HDL コードに VCD コードに出力するように書くんだった。
”cocotb’s documentation”の”Icarus Verilog/Waveforms”のコードの一部を引用する。

// the "macro" to dump signals
`ifdef COCOTB_SIM
initial begin
  $dumpfile ("button_deb.vcd");
  $dumpvars (0, button_deb);
  #1;
end
`endif


これを dff.sv に追加する。
cocotb/cocotb”の README の dff.sv を引用して、VCD ファイルに波形を出力するコードを追加した dff.sv を貼る。
cocotb_9_220908.png

// dff.sv

`timescale 1us/1ns

module dff (
    output logic q,
    input logic clk, d
);

always @(posedge clk) begin
    q <= d;
end

`ifdef COCOTB_SIM
initial begin
  $dumpfile ("dff.vcd");
  $dumpvars (0, dff);
  #1;
end
`endif

endmodule


Makefile にも、シミュレータを指定する行を追加した。

SIM ?= icarus


cocotb/cocotb”の README の Makefile を引用して、現在の Makefile を貼った。
cocotb_8_220908.png

# Makefile

SIM ?= icarus

TOPLEVEL_LANG = verilog
VERILOG_SOURCES = $(shell pwd)/dff.sv
TOPLEVEL = dff
MODULE = test_dff

include $(shell cocotb-config --makefiles)/Makefile.sim


更にテストベンチの説明をする。
cocotb/cocotb”の README の test_dff.py を引用する。
cocotb_4_220908.png

”cocotb’s documentation”の”Creating a Test”によると、
”@cocotb.test() ”でテストする関数を指定しているようだ。
”.value = value”で信号に値を割り当てる。
”.value”で信号の値を取得できる。

これで VCD ファイルを出力する設定が終了したので、make を実行した。
make

実行後に dff_example ディレクトリを見ると dff.vcd が生成されていた。
cocotb_10_220908.png

gtkwave を起動して、dff.vcd を読み込ませる。
gtkwave dff.vcd
波形を表示するとクロックの立ち下がりで q が d をキャプチャしているのが分かる。
cocotb_11_220908.png
  1. 2022年09月10日 05:00 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0