Verilatorを使ってシミュレーション(1)

久々にVerilatorを使って論理シミュレーションを行いました。

すっかり忘れてたところもあったのでメモです。

Verilatorとは

VerilatorとはVerilog HDLを論理シミュレーションするシミュレータです。

Webページは次のところです。

https://www.veripool.org/wiki/verilator

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で終了したことが表示されます。

これでシミュレーションは完了です。

write: 2020/06/27/ 16:00:00