首先列出找到的两个比较上路子的编译器:
1.Icarus Verilog
2.VeriWell Verilog Simulator
两个项目都还活着,并且2009年都有更新,在sourceforge都能找到
然后列出的是查看波形图的软件:
1.gtkwave
我使用的是Icarus Verilog + gtkwave的组合,它们可以直接通过debian或者ubuntu的apt-get install安装,简单方便。
//我的Icarus是自己编译的最新的0.91,附件中是自己打的deb包...
//因为ubuntu源安装的Icarus Verilog[sudo apt-get install verilog]居然不支持lxt文件,会导致仿真文件比较大并且慢
Icarus Verilog的主页和wiki分别是:
http://www.icarus.com/eda/verilog/
http://iverilog.wikia.com
不幸的是后者被gfw了,需要翻墙...
这里给出一个看波形图的示例:
Icarus Verilog和gtkwave都是命令行工具,假设你要调一个D触发器的verilog模块,如下:
kana@wadarochi:~$ cat dff.v
//
// Copyleft (C) 1998 by Rajesh Bawankule
// This model is available for free distribution
//
// file name : dff.v
// last modified : 07/23/98
// function : d flip flop
//
module dff (data, clock, q);
// port list
input data, clock;
output q;
// reg / wire declaration for outputs / inouts
reg q;
// logic begins here
always @(posedge clock)
q <= data;
endmodule
(很弱智吧......
然后你应该怎么做?当然是写一个testbench,然后测试几个情况,简单起见,如下:
kana@wadarochi:~$ cat test.v
`timescale 10ns/1ns
module TB;
parameter START_DELAY = 5;
parameter SECOND_DELAY= 5;
parameter LAST_DELAY = 5;
// For clock
parameter ON_DELAY = 1;
parameter OFF_DELAY = 1;
// input of dff
reg Clock;
reg iD;
wire oQ;
// Instantial dff
dff D1(iD, Clock, oQ);
initial
begin
$dumpfile("test.vcd");
$dumpvars(0, TB);
$dumpvars(0, D1.data, D1.clock, D1.q);
end
// Clock partition
always
begin
#ON_DELAY;
Clock = 1;
#OFF_DELAY;
Clock = 0;
end
initial
begin
iD = 0;
#START_DELAY;
iD = 1;
#SECOND_DELAY;
iD = 0;
#LAST_DELAY;
iD = 1;
# 100;
$dumpflush;
$stop;
end
endmodule
很简单,在不同的时间点给D传入不同的电平,观察结果。
在test.v中比较重要的内容是:
$dumpfile
$dumpvars
$dumpflush
$stop
这几个系统任务[verilog语言内置],用于向特定VCD文件中写入各个变量值,然后你才你能通过gtkwave看到波形图。听起来有点麻烦,演示一下,在命令行下:
kana@wadarochi:~$ iverilog -o my_test dff.v test.v
这个命令行参数给的很像gcc,生成一个名为my_test的文件,可以在vvp这个运行时环境中运行,很晕吧,别管它,接着往下看:
kana@wadarochi:~$ vvp -n my_test -lxt2
kana@wadarochi:~$ mv test.vcd test.lxt
现在,你就得到了一个可以看得见的波形文件,只需要最后一条命令,就解决问题了:
kana@wadarochi:~$ gtkwave test.lxt
结果如图:
[img]Screenshot-GTKWave_-_test.lxt.png[/img]
略微有些简陋,不方便随时更改各个引脚的值。但是,这两个软件加起来也没有多大,跑起来很快,作几个模块的前仿还是没有问题,另外,由于是命令行操作,能够批量测试,自己定制一下会很强。如果你不想为了verilog作业装几百M甚至上G的盗版IDE,就试试这个吧。
至于上面涉及到的几个系统任务还有VCD文件的概念,可以参考手头的verilog书,一般都有讲的。需要注意的是,$dumpfinish没有被Icarus Verilog支持,使用不了
如果你不需要看波形图,那就更方便了,两条命令解决问题:
kana@wadarochi:~$ iverilog -o xxxx a.v b.v
kana@wadarochi:~$ vvp xxxx
就能观察输出,或者得到包含输出向量的文件。调试的时候,这种方法用的也多,方便使用大规模数据验证模块的正确性。
如果你真的对linux下使用free software开发verilog感兴趣,不妨把Icarus Verilog的wiki看看,真的很棒,强烈推荐
对于自己画板子的同学,这里顺带推荐一下gEDA;帮老板打工的话,还是听师兄师姐的话比较好...
See Also:
man iverilog
man vvp
man gtkwave
其它:
http://www.asic-world.com/verilog/index.html
http://www.faqs.org/faqs/verilog-faq/
http://iverilog.wikia.com/wiki/FAQ
http://www.bawankule.com/verilogfaq/page3.html
--
memento mori
Cogito,ergo sum
sub specie aeternitatis