verilog的免费编译器

由于某些原因,原来调fpga的那台机器暂时使用不能,只好四处搜索verilog编译器,希望能在配置糟糕的第一台机器上完成前仿。后来就有了这篇文章,希望对于逃不掉linux+verilog的童鞋有点用

首先列出找到的两个比较上路子的编译器:
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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值