上一篇我们安装了开源 Verilog 仿真器 EpicSim。既然是仿真,就会有通过波形 debug 的需求。这篇我们来安装一款开源的 VCD 波形查看器, GTKWave。
首先要解决 Win10 WSL 2下的 Gui App 运行的问题。思路是在 Win10 上安装一个 X11 Server,然后在 WSL 2 内部运行 Gui App,以 Win10 的一个窗口显示出来。
Win10 的 X11 Server 的选择有很多,例如 Xming,X410(X for Win10),VcXsrv 等等。我们选用老牌的自由软件 Xming。
官方下载地址在 https://sourceforge.net/projects/xming/,但国内访问速度比较慢,大家自己想办法就好。下载和安装过程略去不提,和安装普通 Windows 软件类似。
第一次运行时,记得选择允许穿过防火墙。这个挺重要的,需要的话可以如下图所示确认和更改。
在开始菜单里可以找到 XLaunch 这个软件进行 X Server 的配置,记得在下面的窗口上选中 No Access Control
。如果您的显示器也是 1920x1080 分辨率,可以在绿色框中输入 -dpi 110
,这样稍后显示出来的窗口看起来会比较舒服,图标和文字不至于过小。
下一步可以保存这些配置到一个 xlaunch 文件,下次就可以直接用这个配置文件启动 Xming。这里我们保存为 wsl2.xlaunch。
启动 Xming 的方式如下,首先在 Win10 任务栏的右下角找下 X 字样的图标,如果有就右键点击退出。然后从开始菜单中,右键点击 XLaunch,找到刚才保存的配置文件左击,就会启动我们所需的 X Server 了。
到这里,Win10 端的 X Server 工作就结束了。
下面我们回到 WSL 2,准备安装 GTKWave,方法很简单。
sudo apt-get install gtkwave
接下来特别重要的是,需要配置好 WSL 2 的 DISPLAY
环境变量。和 WSL 1 的虚拟化方式不同, WSL 2 是一个独立的虚拟化平台,有不同于 Win10 Host 的 IP 地址,所以我们需要做到每次启动 WSL 2 都要动态解析出这次新分配的 IP。听起来麻烦,实际做起来很简单,只需要在 ~/.bashrc
里加一句。
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
这一次需要执行下 source ~/.bashrc
,下次就不需要了。
然后执行 gtkwave &
,一切正常的话,就可以看到 GTKWave 以一个 Win10 的窗口形式显示出来。
接下来,我们需要准备一个可以产生 VCD 波形的 Verilog 测试文件,来看一下 GTKWave 显示波形的效果。例如类似这样的。
//vcd_test.v
`timescale 1ns/100ps
module vcd_test;
reg rstn;
reg clk;
integer cnt;
initial begin
rstn = 1'b0;
clk = 1'b0;
#100;
rstn = 1'b1;
#1000;
$finish;
end
always #5 clk = ~clk;
always @ ( posedge clk or negedge rstn) begin
if (~rstn) begin
cnt <= 0;
end
else begin
cnt <= cnt + 1'b1;
end
end
initial begin
$dumpfile("vcd_test.vcd");
$dumpvars(0, vcd_test);
end
endmodule //vcd_test
其实最关键的就是最后一个 initial 过程里的两句,指定 VCD 波形的 dump 层次和文件名。
同样执行编译命令,会有 VCD task 执行的提示。
icsoc@LAPTOP-L491MNVH:/mnt/d/wsl2/verilog$ epicsim vcd_test.v
VCD info: dumpfile vcd_test.vcd opened for output.
一切正常的话, 就可以在当前目录看到生成的波形文件 vcd_test.vcd
了。
然后我们在 GTKWave 里打开这个波形。点击 File - Open New Tab,按路径找到刚才生成的 VCD 文件。
然后单击左上方的顶层 module 名字,可以在左下方看到信号名。全部选中,点击 Append 按钮,就可以在右边的波形窗口看到波形了。
常用的快捷键,可以看菜单 Time - Zoom。鼠标右键按下拖动可以水平放大波形。
到这里,我们已经准备好了 Verilog 仿真器,以及图形化的波形调试工具 GTKWave,而且全部都是开源或者自由的软件,已经可以自由的开展一些有趣的 Verilog 学习和探索了。