OpenC906官方使用的是iverilog编译,gtkwave查看波形,上一篇已经体验了OpenC906的仿真。整个过程都是脚本完成所以其实并没有关注其细节,实际其也是脚本中调用了iverilog进行编译。所以为了后续了解整个编译过程,先来了解下iverilog和gtkwave。之前是linux环境下,这里就以windows下为例。
从以下地址下载
https://bleyer.org/icarus/
下载最新版
双击iverilog-v12-20220611-x64_setup开始安装,弹出用户账户控制对话框点击是。
勾选接受,Next
继续Next
指定安装路径,Next
勾选安装mingw依赖库和gtkwave,Next
继续Next
勾选添加路径和桌面图标,一定要勾选添加路径,否则命令行中无法找到命令。
Iverilog和gtkwave都是通过命令行运行。
继续安装
安装完成
D:\iverilog\samples下有一些例子,我们用这些例子进行测试,
在该目录下右键打开命令行,
编译,需要一会,有点慢
iverilog -o hello .\hello.vl
运行
vvp .\hello
lfsr16的例子
PS D:\iverilog\samples> iverilog -o lfsr16 .\lfsr16.v
PS D:\iverilog\samples> vvp .\lfsr16
VCD info: dumpfile lfsr16.vcd opened for output.
xxxxx
10000
00001
00011
00111
01111
11110
11101
11010
10101
01011
10110
01100
11001
10010
00100
01000
10000
00001
00011
00111
01111
11110
11101
11010
10101
01011
10110
01100
11001
10010
00100
01000
10000
103: $finish called at 380 (1s) :
PS D:\iverilog\samples>
Sqrt的例子
PS D:\iverilog\samples> iverilog -o sqrt .\sqrt.vl
PS D:\iverilog\samples> vvp .\sqrt
0 main.acc = 0000000000000000
225 main.acc = 0000000000000100
235 main.acc = 0000000000000110
63) --> 7
129: $finish called at 245 (1s) :
245 main.acc = 0000000000000111
PS D:\iverilog\samples>
上述lfsr.v的例子中
以下语句
initial begin
$dumpfile("lfsr16.vcd");
$dumpvars(-1, dut);
$monitor("%b", dout);
end
记录波形文件lfsr16.vcd
$dumpvars(-1, dut);改为
$dumpvars(0, dut);
即记录
lfsr16 dut实例模块下所有子模块的信号。
命令行中输入 gtkwave打开
gtkwave的GUI
File->Open New Tab打开vcd文件
添加信号,显示波形
iverilog+gtkwave非常轻量级的黄金搭档,非常好用,我们这里熟悉下其环境搭建。
为分析OpenC906的构建过程做下知识准备。
Iverilog文档参见https://iverilog.fandom.com/wiki/User_Guide
Gtkwave文档见https://gtkwave.sourceforge.net/gtkwave.pdf
Iverilog仓库https://github.com/steveicarus/iverilog
Gtkwave仓库https://github.com/gtkwave/gtkwave