乐于分享
好东西不私藏

iverilog 与 GTKWave 安装指南(WSL)

iverilog 与 GTKWave 安装指南(WSL)

本文介绍了怎么在 WSL 中安装 和使用HDL 仿真器(iverilog)和波形查看器(GTKWave),这两者都是轻量的开源工具链,适合快速验证。

文章中的示例工程:

https://github.com/HaroldFrey/cocotb_counter_example


相关文章:

WSL 安装与基础配置

配置 VS Code Remote-WSL

cocotb 使用指南——用 Python 验证你的 RTL

在 WSL 中使用 Claude Code和Vivado

文章也开源在了github:

https://github.com/HaroldFrey/WSL_Use


目录

  1. 它们是什么
  2. 检查是否已安装
  3. 安装
  4. 验证安装
  5. iverilog 使用详解
  6. GTKWave 使用入门
  7. 与 cocotb 配合
  8. 常见问题

1. 它们是什么

工具
角色
通俗类比
iverilog
(Icarus Verilog)
HDL 仿真器——把 Verilog 代码编译并跑仿真
“跑 Verilog 代码的引擎”
GTKWave波形查看器
——把仿真产生的波形可视化
“波形示波器”

工作流程

写 Verilog 代码 → iverilog 仿真 → 生成波形文件(.fst/.vcd)→ GTKWave 打开查看

iverilog 是 cocotb 官方默认支持的仿真器(见 04-cocotb使用指南.md),GTKWave 通过 WSLg 图形界面直接在 Windows 桌面上显示波形。


2. 检查是否已安装

在 Ubuntu 终端执行:

iverilog -V 2>&1 | head -1        # 应显示 Icarus Verilog version 12.0gtkwave --version | head -1       # 应显示 GTKWave Analyzer v3.3.x

有输出版本号 = 已安装 ✅(本机实测:iverilog 12.0 / GTKWave 3.3.116,均已就绪) 显示 command not found = 未安装,执行第 3 步。


3. 安装

如果未安装,在 Ubuntu 终端执行:

# 一条命令装两个(iverilog + gtkwave)sudo apt install iverilog gtkwave -y

💡 GTKWave 是 GUI 程序,通过 WSLg 显示(WSL 2 自带图形支持,无需额外配置)。首次使用建议同时装中文字体(波形里的中文标签不乱码):

sudo apt install fonts-noto-cjk -y

4. 验证安装

iverilog -V 2>&1 | head -1    # Icarus Verilog version 12.0gtkwave --version | head -1   # GTKWave Analyzer v3.3.116gtkwave                      # 启动后 Windows 桌面上应弹出 GTKWave 主窗口

GTKWave 主窗口能弹出 = WSLg 图形通路正常 ✅

⚠️ 若窗口只在任务栏有图标但点不出来,wsl --shutdown 后重开(详见 02 §7.2)。


5. iverilog 使用详解

5.1 基本三步

iverilog -o sim counter.sv tb_counter.v   # ① 编译:Verilog 源码 → 仿真程序 simvvp sim                                   # ② 运行:执行仿真,生成波形gtkwave dump.vcd &                        # ③ 看波形

5.2 常用选项

选项
作用
示例
-o <文件>
指定输出文件名
-o sim
-s <模块>
指定顶层模块(多模块时)
-s counter
-g2012
按 SystemVerilog-2012 标准编译(.sv 文件)
-g2012 counter.sv
-Wall
显示全部警告(找潜在问题)
-Wall counter.sv
-I <目录>
添加 include 搜索目录(include "xxx.v"
-I include/
-y <目录>
添加模块库目录(自动按需搜索模块)
-y lib/
-tn
只做语法检查,不生成仿真程序
-tn counter.sv

💡 .sv 文件不写 -g2012 一般也能编译(iverilog 按扩展名自动识别),但加 -g2012 最保险(严格按 SV-2012 标准)。

5.3 语法检查(写代码后先跑这个)

iverilog -tn counter.sv && echo"语法 OK"# 无输出 = 通过

写完 RTL 先语法检查再仿真,是省时间的好习惯。

5.4 多文件项目

# 所有源文件一起列出即可,iverilog 自动解析模块依赖关系iverilog -o sim top.sv sub_module1.sv sub_module2.sv tb_top.v

5.5 波形语句 $dumpfile / $dumpvars(测试台里)

initialbegin$dumpfile("dump.vcd");     // 波形文件名(扩展名决定格式:.vcd 或 .fst)$dumpvars(0, tb_counter);  // 记录范围:0 = 该模块及以下所有层级end

这两句写在测试台的 initial 块里,仿真一运行就自动开始记录波形。


6. GTKWave 使用入门

打开波形文件

gtkwave dump.fst       # 打开 FST 波形(推荐,文件小、速度快)gtkwave dump.vcd       # 打开 VCD 波形(通用格式,文件较大)gtkwave dump.fst &

打开后界面:

基本操作:

操作
方法
添加信号到波形区
左栏选中信号 → 点"Append"(或直接拖拽)
放大/缩小
工具栏放大镜按钮,或 Ctrl+滚轮
查看某时刻值
点击波形区,看右侧的数值栏
批量添加
左栏 Ctrl+A 全选 → Append

工具栏图标速查(实测体验):

图标
作用
Zoom In / Zoom Out(放大/缩小镜)
缩放时间轴(或 Ctrl+滚轮
Zoom Fit
一键显示全部波形
Zoom to Start / Zoom to End
跳到波形开头 / 末尾
Search(放大镜+箭头)
搜索信号跳变沿(找某次上升/下降)
Mark(旗帜)
在时间轴打标记,量两点之间的时间
Append / Replace
把左侧选中信号加入波形区 / 替换现有波形
波形区右键菜单
Set Cursor(精确定位时间)、更多缩放选项

这些图标只改变"查看方式",不会修改波形数据本身——随便点,多试试就熟了。

纯 iverilog 手动流程(不用 make,理解原理)

不依赖 cocotb 的最简方式,4 步走通"编译 → 仿真 → 波形":

① 写测试台 tb_counter.v(手动驱动时钟/复位):

`timescale 1ns/1psmodule tb_counter;reg clk = 0;reg rst = 1;wire [7:0] count;    counter dut (.clk(clk), .rst(rst), .count(count));  // 例化被测模块always #5 clk = ~clk;          // 每 5ns 翻转 → 10ns 周期时钟initialbegin$dumpfile("dump.vcd");     // ⭐ 生成波形$dumpvars(0, tb_counter);  //    记录所有信号        #10 rst = 0;               // 复位后释放        #100$finish;              // 仿真结束endendmodule

② 编译(iverilog 把两个文件编译成仿真程序 sim):

iverilog -o sim counter.sv tb_counter.v

③ 运行仿真(vvp 执行,自动生成 dump.vcd):

vvp sim

④ 打开波形

gtkwave dump.vcd &

💡 这套流程的好处:每一步都看得见、可理解(编译 → 运行 → 波形)。cocotb 只是把这套流程用 Python 断言自动化了,底层还是这几步。


7. 与 cocotb 配合

cocotb 用 iverilog 作默认仿真器,生成波形的方法:

# Makefile 中加一行:WAVES=1

运行 make 后生成波形文件 sim_build/counter.fst,然后用 GTKWave 打开:

gtkwave sim_build/counter.fst

⚠️ 实测修正COMPILE_ARGS += --trace 是 Verilator 的写法,iverilog 会报 invalid option -- '-'。iverilog + cocotb 请用 WAVES=1

想要 VCD 格式? cocotb 的 iverilog 支持固定生成 .fst(源码里写死了扩展名),用 fst2vcd 转换(GTKWave 自带):

fst2vcd sim_build/counter.fst > sim_build/counter.vcd   # 注意:输出到标准输出,用 > 重定向gtkwave sim_build/counter.vcd                           # 打开 VCD

传统 iverilog 方式(不依赖 cocotb)可以直接生成 VCD:测试台里写 $dumpfile("dump.vcd"); $dumpvars;(见 §6 手动流程和 §5.5)。

推荐流程:cocotb 写断言验证功能 → GTKWave 看波形分析时序,两者互补。


8. 常见问题

Q: gtkwave 启动没有窗口 / 窗口点不出来

WSLg 会话异常。wsl --shutdown(Windows PowerShell 中执行)后重新打开终端再试。

Q: 波形里中文显示为方块

缺少中文字体:sudo apt install fonts-noto-cjk -y,然后 fc-cache -fv

Q: 提示 cannot open display

不应发生(WSLg 自动设置 DISPLAY)。检查 echo $DISPLAY 应为 :0;仍异常则 wsl --shutdown 重启。


点击公众号菜单栏可查看更多内容。

如需转载,请联系作者获得授权(点击公众号主页的“联系我们”)