link
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
安装systemc
-
$ 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
别忘记设置三个环境变量SYSTEMC_INCLUDE,SYSTEMC_LIBDIR和LD_LIBRARY_PATH,否则后面第二个例子没法编译。
当然最好是把这三个设置放入.profile或者.bashrc启动文件中。下面给出两个简单的例子来展示Verilator的使用方法
工作目录如下:
-
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 <<EOF >our.v
-
module our;
-
initial begin $
display(
"Hello World"); $finish; end
-
endmodule
-
EOF
-
-
cat <<EOF >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 <<EOF >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 <<EOF >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 !!!
</article>
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165634.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!