”
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 を貼る。

// 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 を貼った。

# 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’s documentation”の”Creating a Test”によると、
”@cocotb.test() ”でテストする関数を指定しているようだ。
”.value = value”で信号に値を割り当てる。
”.value”で信号の値を取得できる。
これで VCD ファイルを出力する設定が終了したので、make を実行した。
make実行後に dff_example ディレクトリを見ると dff.vcd が生成されていた。

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