ubuntu16.04 verilator+systemcをインストールし、テストプログラムを実行する
Verilatorは、統合可能な(通常は動作レベルではない)Verilogコードに、synthesis、SystemVerilog、およびVerilog AMSコードの一部を加えてC++またはSystemCコードに変換することができる.Verilatorは完全なシミュレータ(simulator)ではなく、コンパイラ(compiler)にすぎない.
verilatorのインストール
ubuntu16.04システムの下にverilatorをインストールするのは簡単です:sudo apt-get install verilator
バージョン:
$ verilator --version Verilator 3.874 2015-06-06 rev verilator_3_872-20-g0d43051
システムcのインストール
3つの環境変数SYSTEMCを設定するのを忘れないでください.INCLUDE,SYSTEMC_LIBDIRとLD_LIBRARY_PATH,そうでなければ後の2番目の例はコンパイルできない.
もちろんこの3つの設定を入れたほうがいいです.ファイルかbashrc起動ファイルにあります.以下に、Verilatorの使用方法を示す2つの簡単な例を示します.
作業ディレクトリは次のとおりです.
例C++プログラム
この例をC++プログラムにコンパイルします.
この小さな例をverilatorでコンパイルし始めます.
「obj_dir」ディレクトリの下にソースコードが表示されます.
これらのC++ソースコードをコンパイルすることができます
(Verilatorにはデフォルトのコンパイルとリンクルールが含まれており、コマンドラインでは--exeを使用して.cppファイルを渡しています.もちろん、次の例で行ったように、独自のコンパイルルールを作成することもできます)
これで実行できます.
得られたプログラムの出力は以下の通りである.
例SYSTEMCプログラム
この例は上の例と同じで、SystemCを使っただけです.
ここでは、ウィジェットに対してVerilatorを実行します.
次にコンパイルします.
次にSystemCにリンクします.
プログラムを実行できます
最後に、上記のC++の例と同様の出力を得た.
Enjoy Verilator !!!
verilatorのインストール
ubuntu16.04システムの下にverilatorをインストールするのは簡単です:sudo apt-get install verilator
バージョン:
$ verilator --version Verilator 3.874 2015-06-06 rev verilator_3_872-20-g0d43051
システムcのインストール
$ wget -O systemc-2.3.0a.tar.gz http://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.0a.tar.gz
$ tar -xzvf systemc-2.3.0a.tar.gz
$ cd systemc-2.3.0a
$ sudo mkdir -p /usr/local/systemc-2.3.0/
$ mkdir objdir
$ cd objdir
$ ../configure --prefix=/usr/local/systemc-2.3.0
$ make
$ sudo make install
$ export SYSTEMC_INCLUDE=/usr/local/systemc-2.3.0/include
$ export SYSTEMC_LIBDIR=/usr/local/systemc-2.3.0/lib-linux64
$ export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64:$LD_LIBRARY_PATH
3つの環境変数SYSTEMCを設定するのを忘れないでください.INCLUDE,SYSTEMC_LIBDIRとLD_LIBRARY_PATH,そうでなければ後の2番目の例はコンパイルできない.
もちろんこの3つの設定を入れたほうがいいです.ファイルかbashrc起動ファイルにあります.以下に、Verilatorの使用方法を示す2つの簡単な例を示します.
作業ディレクトリは次のとおりです.
user@ubuntu1:~/verilator$ tree
.
├── test_our
│ ├── obj_dir
│ ├── our.v
│ └── sim_main.cpp
└── test_our_sc
├── obj_dir
├── our.v
├── sc_main.cpp
├── sc_main.d
└── sc_main.o
例C++プログラム
この例をC++プログラムにコンパイルします.
mkdir test_our
cd test_our
cat <our.v
module our;
initial begin $display("Hello World"); $finish; end
endmodule
EOF
cat <sim_main.cpp
#include "Vour.h"
#include "verilated.h"
int main(int argc, char** argv, char** env) {
Verilated::commandArgs(argc, argv);
Vour* top = new Vour;
while (!Verilated::gotFinish()) { top->eval(); }
delete top;
exit(0);
}
EOF
この小さな例をverilatorでコンパイルし始めます.
verilator -Wall --cc our.v --exe sim_main.cpp
「obj_dir」ディレクトリの下にソースコードが表示されます.
ls -l obj_dir
これらのC++ソースコードをコンパイルすることができます
make -j -C obj_dir -f Vour.mk Vour
(Verilatorにはデフォルトのコンパイルとリンクルールが含まれており、コマンドラインでは--exeを使用して.cppファイルを渡しています.もちろん、次の例で行ったように、独自のコンパイルルールを作成することもできます)
これで実行できます.
obj_dir/Vour
得られたプログラムの出力は以下の通りである.
Hello World
- our.v:2: Verilog $finish
例SYSTEMCプログラム
この例は上の例と同じで、SystemCを使っただけです.
mkdir test_our_sc
cd test_our_sc
cat <our.v
module our (clk);
input clk; // Clock is required to get initial activation
always @ (posedge clk)
begin $display("Hello World"); $finish; end
endmodule
EOF
cat <sc_main.cpp
#include "Vour.h"
int sc_main(int argc, char **argv) {
Verilated::commandArgs(argc, argv);
sc_clock clk ("clk", 10, 0.5, 3, true);
Vour* top;
top = new Vour("top");
top->clk(clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
delete top;
exit(0);
}
EOF
ここでは、ウィジェットに対してVerilatorを実行します.
verilator -Wall --sc our.v
次にコンパイルします.
cd obj_dir
make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verilated.o
次にSystemCにリンクします.
export SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
export LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# Might be needed if SystemC 2.3.0
export SYSTEMC_CXX_FLAGS=-pthread
g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o verilated.o \
-o Vour -lsystemc
プログラムを実行できます
cd ..
obj_dir/Vour
最後に、上記のC++の例と同様の出力を得た.
Hello World
- our.v:2: Verilog $finish
Enjoy Verilator !!!