久々にVerilatorを使って論理シミュレーションを行いました。
すっかり忘れてたところもあったのでメモです。
VerilatorとはVerilog HDLを論理シミュレーションするシミュレータです。
Webページは次のところです。
https://www.veripool.org/wiki/verilator
Verilatorの特徴はVerilog HDLをC言語に変換してシミュレーションを行います。
テストベンチは
Ubuntu 20.04LTS環境でのインストール手順を解説します。
$ sudo apt install verilator
非常に簡単ですね。
次のようなVerilog HDLのコードを作成しました。
`default_nettype none
`timescale 1ns / 1ps
module test0;
initial begin
$display("Hello World");
$finish();
end
endmodule
`default_nettype wire
実行されるとHello World
が表示されます。
論理回路じゃないけど、まずは実行できるかを確認します。
ファイル名はtest0.v
としました。
これをテストするテストベンチを次のように作成しました。
#include "Vtest0.h"
#include "verilated.h"
int main (int argc, char **argv)
{
Verilated::commandArgs(argc, argv);
Vtest0* top = new Vtest0;
while(!Verilated::gotFinish()){
top->eval();
}
delete top;
exit(0);
}
次のようにVerilog HDLのコードとテストベンチをコンパイルします。
$ verilator -Wall --cc test0.v --exe sim_test0.cpp
そうすると、obj_dir
というディレクトリが作成されます。
obj_dir
へ移動し、次のようにmake
を実行します。
$ cd obj_dir/
$ make -f Vtest0.mk Vtest0
正常にコンパイルできるとVtest0
という実行バイナリができます。
これがシミュレーションの実行バイナリです。
次のように実行します。
$ ./Vtest0
Hello World
- test0.v:5: Verilog $finish
Hello World
が表示され、$finish
で終了したことが表示されます。
これでシミュレーションは完了です。