先说实话
学习 Verilog 不需要安装任何东西。这套文档中的每个交互式编辑器,都在沙盒里用 Icarus Verilog 运行真正的 Verilog,还自带波形查看器。如果你只是来学这门语言,可以跳过这一页,等到想在本地做一个更大的项目时再回来。
还是想在本地安装?那就继续往下看。
“安装 Verilog”到底指什么
Verilog 是一门语言,不是一个程序。要运行它,你需要:
- 一个仿真器:编译并运行
.v文件的工具。对大多数学习者来说,就是 Icarus Verilog,它提供iverilog编译器和vvp运行时。 - 一个波形查看器:通常是 GTKWave,用来读取测试平台生成的
.vcd文件。 - 一个文本编辑器:常见的选择是装了 Verilog 扩展的 VS Code,不过用什么都行。
厂商工具链(Xilinx Vivado、Intel Quartus、Synopsys VCS、Cadence Xcelium)是用于 FPGA 编程和 ASIC 开发的。它们体积庞大,通常需要许可证,用来学习就大材小用了。用 Icarus 就好。
在 macOS 上安装
最快的方式是用 Homebrew:
brew install icarus-verilog gtkwave
这会同时安装编译器和波形查看器。验证一下:
iverilog -V
gtkwave --version
你应该能看到两者的版本号。iverilog 会自动加入你的 PATH。GTKWave 会在 /Applications 下安装一个应用程序,同时提供一个可以在终端启动的 gtkwave 命令。
如果还没有安装 Homebrew,先按照 brew.sh 上的说明安装(只需一条 curl 命令),然后再回来。
在 Linux 上安装
在基于 Debian 的发行版上(Ubuntu、Mint、Pop!_OS):
sudo apt update
sudo apt install iverilog gtkwave
在 Fedora / RHEL 系的系统上:
sudo dnf install iverilog gtkwave
在 Arch 上:
sudo pacman -S iverilog gtkwave
然后用同样的方法验证:
iverilog -V
gtkwave --version
软件仓库中的版本有时会比上游落后一个版本。对大多数学习场景来说没有影响。如果你需要更新的版本,可以从源码编译:项目的 GitHub 仓库里有说明,只需执行 ./configure && make && sudo make install。
在 Windows 上安装
最简单的方法是使用 iverilog 社区在 bleyer.org 上维护的预编译安装程序(搜索“iverilog Windows”)。它打包了 Icarus Verilog、GTKWave,以及 Icarus 内部需要的 GCC 工具链。
- 下载最新的安装程序(通常是
iverilog-vXX-setup.exe)。 - 运行它。除非有特别的理由,否则全部使用默认选项。
- 安装程序询问时,保持“Add to PATH”处于勾选状态。
- 打开一个新的 PowerShell 或命令提示符窗口,验证安装:
iverilog -V
gtkwave --version
如果忘了添加到 PATH,程序通常位于 C:\iverilog\bin\iverilog.exe 这样的位置。你可以在“系统属性”中把 C:\iverilog\bin 添加到用户 PATH,或者重新运行安装程序并勾选该选项。
在 Windows 上,WSL2 也是不错的选择:从 Microsoft Store 安装 Ubuntu,然后在其中按照 Linux 的说明操作。这样你会得到一个更熟悉的类 Unix 工作流。
编译并运行你的第一个文件
安装完成后,工作流程是这样的。把下面的代码保存为 hello.v:
module hello;
initial begin
$display("hello from verilog");
$finish;
end
endmodule
把它编译成一个仿真程序:
iverilog -o hello hello.v
iverilog 是编译器,-o hello 指定输出文件名,hello.v 是你的源文件。
运行仿真:
vvp hello
你应该会看到:
hello from verilog
本地的完整流程就是这样。接下来,你可以把设计拆分到多个文件中(iverilog -o sim *.v),用 -g2012 参数启用 SystemVerilog-2012 特性,或者把输出交给你自己的脚本处理。
生成并查看波形
在测试平台中加入 $dumpfile 和 $dumpvars,运行它,然后在 GTKWave 中打开生成的 VCD:
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, test);
// ...
end
vvp sim 执行完后,你的源文件旁边会多出一个 dump.vcd。打开它:
gtkwave dump.vcd
GTKWave 加载文件后,会在左侧显示信号树。把你关心的信号拖到右侧的波形区域。Dumpfile 与 VCD 中有详细讲解。
常见错误
iverilog: command not found:程序不在你的 PATH 中。在 Windows 上,这通常意味着运行安装程序时没有启用 PATH 更新。在 macOS/Linux 上,通常是 Homebrew/apt 没有执行完,或者你所在的 shell 还没有重新加载 PATH(关闭终端再重新打开)。
看起来正确的行报 syntax error:检查一下你是不是在普通 Verilog 模式下用了 SystemVerilog 的特性。给 iverilog 加上 -g2012 来启用 SystemVerilog-2012:
iverilog -g2012 -o sim main.v
编译时提示 Unknown module:要么是模块的源文件没有传给 iverilog,要么是实例化时写的模块名和 module 声明不完全一致。Verilog 区分大小写。
GTKWave 中的波形是空的:你的测试平台没有调用 $dumpfile 和 $dumpvars,或者仿真在任何信号变化之前就执行到了 $finish。至少加一个 $dumpvars(0, top),并让仿真运行足够长的时间,产生信号跳变。
接下来
无论你是在本地安装了,还是继续使用浏览器,下一篇文档都会带你从零开始写出第一个完整的模块:模块声明、端口、一小段组合逻辑,以及围绕它的测试平台。
常见问题
如何安装 Verilog?
并没有一个叫“Verilog”的程序:它是一门语言,你要安装的是编译器/仿真器。学习时的标准选择是 Icarus Verilog(iverilog 和 vvp 命令),搭配用来查看波形的 GTKWave。macOS 上用 brew install icarus-verilog gtkwave;Debian/Ubuntu 上用 apt install iverilog gtkwave;Windows 上从 Bleyer 网站下载预编译的安装程序。
学习 Verilog 必须安装软件吗?
不必。本页的编辑器会在云端用 iverilog 和 vvp 运行你的代码,并直接在页面中显示 VCD 波形。不安装任何东西,你也能学完这套教程的每一篇文档。当你想保存文件、用版本控制管理项目,或者设计规模大到浏览器编辑器装不下时,本地安装才会派上用场。
iverilog 和 vvp 有什么区别?
iverilog 是编译器,它把 .v 源文件编译成一个仿真程序。vvp 是执行这个程序的运行时。典型的命令顺序是先 iverilog -o sim main.v test.v,再 vvp sim。大多数工作流脚本会把这两步包装在一起。
Icarus Verilog 是免费的吗?
是的。Icarus Verilog 是基于 GPL/LGPL 的开源软件。没有许可证服务器,没有试用期,学习和商业用途都可以使用。商业替代品(ModelSim、VCS、Xcelium)都是付费的;对于这套文档涉及的所有内容,Icarus 就够用了。
如何查看 iverilog 的版本?
打开终端,运行 iverilog -V。你应该会看到类似 Icarus Verilog version 12.0 的版本号。如果提示“command not found”,说明这个程序不在你的 PATH 中:重新运行安装程序,或者把 bin 目录添加到 shell 配置中。