第1章:iverilog工具链安装
1.1 iverilog简介与特点
说到Verilog仿真,我第一个想到的就是iverilog。这玩意儿,说白了就是个开源的Verilog仿真器。我在做项目的时候经常用它,为啥?因为它轻量、免费,而且跨平台。
iverilog的全称是Icarus Verilog,由Stephen Williams大神开发维护。它支持IEEE 1364-2005标准,也就是Verilog-2005。嗯,这里要注意,它不支持SystemVerilog的全部特性,但对我们做数字IC验证来说,大部分场景都够用了。
它的特点我总结了一下:
- 开源免费:GPL协议,随便用,不用担心版权问题
- 跨平台:Windows、Linux、macOS都能跑
- 轻量级:安装包才几兆,不像VCS、QuestaSim那样动辄几个G
- 与GTKWave配合:生成VCD文件后,用GTKWave看波形,完美组合
- 支持PLI/VPI:可以写C代码扩展功能,这个我在项目中用过几次
我个人习惯:在项目早期阶段,用iverilog快速验证模块功能。等到了系统级验证,再切换到商业仿真器。这样既省钱又高效。
1.2 源码编译安装步骤
源码编译安装,听起来挺吓人,其实步骤不多。我当年第一次装的时候也怕,后来发现就几条命令的事。
先下载源码包:
wget https://github.com/steveicarus/iverilog/archive/v11_0.tar.gz
tar -xzf v11_0.tar.gz
cd iverilog-11_0
然后配置、编译、安装:
./configure
make
sudo make install
这里有个坑,我踩过。如果你系统里缺flex和bison,configure那步就会报错。解决办法:
# Ubuntu/Debian
sudo apt-get install flex bison
# CentOS/RHEL
sudo yum install flex bison
我曾经遇到过:在旧版Ubuntu上编译,make到一半报错,说gcc版本太老。后来我升级了gcc才搞定。所以建议用较新的系统来编译。
1.3 二进制包安装方法
如果你不想折腾编译,直接用二进制包安装就行。我个人更推荐这种方式,省时省力。
Ubuntu/Debian系:
sudo apt-get install iverilog
CentOS/RHEL系:
sudo yum install iverilog
macOS:
brew install iverilog
Windows:
去官网下载安装包,双击安装就行。记得把安装目录加到PATH环境变量里。
小技巧:装完后在终端输入 iverilog -V,如果能看到版本号,说明装成功了。我每次装完都先跑这条命令确认一下。
1.4 安装验证与常见问题
装完了怎么验证?写个最简单的testbench跑一下:
// counter.v
module counter (
input clk,
input rst_n,
output reg [3:0] cnt
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 4'b0;
else
cnt <= cnt + 1'b1;
end
endmodule
// tb_counter.v
module tb_counter;
reg clk;
reg rst_n;
wire [3:0] cnt;
counter u_counter (.clk(clk), .rst_n(rst_n), .cnt(cnt));
initial begin
clk = 0;
rst_n = 0;
#20 rst_n = 1;
#200 $finish;
end
always #5 clk = ~clk;
initial begin
$dumpfile("counter.vcd");
$dumpvars(0, tb_counter);
end
endmodule
编译和仿真:
iverilog -o counter counter.v tb_counter.v
vvp counter
如果没报错,并且生成了counter.vcd文件,那就说明iverilog安装成功了。
常见问题:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| iverilog: command not found | 没装或者PATH没配好 | 重新安装,检查PATH |
| vvp: command not found | iverilog没装全 | 重新安装iverilog |
| 编译时报语法错误 | 代码有语法问题 | 检查Verilog代码 |
| VCD文件为空 | 没加$dumpvars | 在initial块里加上$dumpvars |
我曾经遇到过:有次编译通过了,但仿真结果不对。折腾了半天,发现是代码里有个always块漏了敏感列表。所以仿真结果不对时,先检查代码逻辑。
1.5 GTKWave波形查看器安装
有了VCD文件,怎么看波形?GTKWave就是干这个的。它和iverilog是黄金搭档。
安装方法:
# Ubuntu/Debian
sudo apt-get install gtkwave
# CentOS/RHEL
sudo yum install gtkwave
# macOS
brew install gtkwave
# Windows
去官网下载安装包
装完后,用GTKWave打开VCD文件:
gtkwave counter.vcd
然后就能看到波形了。你可以添加信号、缩放、测量时间,操作很直观。
小技巧:GTKWave支持保存配置文件。你把信号排好序、设置好颜色后,保存为.sav文件。下次直接加载这个文件,省得重新配置。我每次做项目都会保存一份配置文件。
好了,iverilog和GTKWave的安装就讲完了。说白了,装这两个工具就是几条命令的事。你想想看,有了这套开源工具链,你就能在自己的电脑上跑Verilog仿真了,多方便。