《基于树莓派5的RTL仿真体验》
对于FPGA或者RTL爱好者来讲,树莓派5开发板可以运行RTL仿真,仿真工具使用iverilog,波形工具使用gtkwave。为什么是这些?因为工具免费且对硬件性能要求更少……
iverilog 和 GTKwave 的安装非常便捷。
Icarus Verilog 是一个轻量级的 verilog 仿真工具,以编译器的形式工作,将以 verilog 编写的源代码编译为某种目标格式。如果要进行仿真的话,它可以生成一个叫做 vvp 的中间格式。这个格式可以由其所附带的 vvp 命令执行。
GTKwave是一款免费的波形查看器,可以用于查看标准的 verilog VCD/EVCD,以及其他一些格式的波形文件。
环境配置主要是仿真软件iverilog、波形软件gtkwave的安装。
//------环境安装配置
# 安装iverilog仿真软件
sudo apt install iverilog
或者
sudo apt-get install iverilog
# 安装gtkwave
sudo apt install gtkwave
或者
sudo apt-get install gtkwave
//------
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/heart_rtl$ iverilog -V
Icarus Verilog version 11.0 (stable) ()
Copyright 1998-2020 Stephen Williams
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/heart_rtl$ vvp -V
Icarus Verilog runtime version 11.0 (stable) ()
Copyright 1998-2020 Stephen Williams
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/heart_rtl$ gtkwave -V
GTKWave Analyzer v3.3.118 (w)1999-2023 BSI
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$
安装完所需软件之后,准备仿真文件进行仿真测试。仿真测试流程及结果参考下方记录。
//------仿真测试
//---流程
编辑源码 --> 执行仿真,输出仿真结果 --> 导出波形 --> 查看波形
//---指令
a.编辑源码:
编写任意rtl代码,此处设计了加法器和波形仿真,详细代码参考后续代码截图。
/wave_rtl
.
├── tb_wave.v //仿真顶层文件
├── dut_add.v //加法器
├── wave_rtl.v //读取文件,输出波形
└── init_wave.txt //初始化文件
在“tb_wave.v”中使用了系统函数 dumpfile 用来在运行仿真时生成 .vcd 波形文件;
dumpvars 表示选择记录哪些信号,直接加分号结束表示记录设计中所有信号。
b.执行仿真,输出仿真结果:
iverilog -o test.out tb_wave.v dut_add.v wave_rtl.v
“-o”选项用来指定输出文件,执行完仿真之后,输出仿真结果test.out文件。
c.导出波形:
vvp -n test.out
test.out是目标可执行文件,但此文件执行后只会在终端上显示仿真时文字信息,需要使用 vvp 工具将其可视化成 .vcd 文件。
其中“-n”选项表示运行完退出,以便进行下一步操作。
d.查看波形:
gtkwave wave.vcd
用 GTKwave 打开并显示出波形。
//------示例Log
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$ ll
total 28
drwxr-xr-x 2 zhaomeijing zhaomeijing 4096 Apr 27 14:46 ./
drwxr-xr-x 4 zhaomeijing zhaomeijing 4096 Apr 27 14:47 ../
-rw-r--r-- 1 zhaomeijing zhaomeijing 314 Apr 27 11:50 dut_add.v
-rw-r--r-- 1 zhaomeijing zhaomeijing 4128 Apr 27 13:05 init_wave.txt
-rw-r--r-- 1 zhaomeijing zhaomeijing 1905 Apr 27 13:03 tb_wave.v
-rw-r--r-- 1 zhaomeijing zhaomeijing 2168 Apr 27 13:06 wave_rtl.v
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$ iverilog -o test.out tb_wave.v dut_add.v wave_rtl.v
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$ ll ; vvp -n test.out ;
total 36
drwxr-xr-x 2 zhaomeijing zhaomeijing 4096 Apr 27 14:49 ./
drwxr-xr-x 4 zhaomeijing zhaomeijing 4096 Apr 27 14:47 ../
-rw-r--r-- 1 zhaomeijing zhaomeijing 314 Apr 27 11:50 dut_add.v
-rw-r--r-- 1 zhaomeijing zhaomeijing 4128 Apr 27 13:05 init_wave.txt
-rw-r--r-- 1 zhaomeijing zhaomeijing 1905 Apr 27 13:03 tb_wave.v
-rwxr-xr-x 1 zhaomeijing zhaomeijing 7510 Apr 27 14:49 test.out*
-rw-r--r-- 1 zhaomeijing zhaomeijing 2168 Apr 27 13:06 wave_rtl.v
WARNING: wave_rtl.v:32: $readmemh(init_wave.txt): Too many words in the file for the requested range [0:1023].
VCD info: dumpfile wave.vcd opened for output.
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$ ll
total 60
drwxr-xr-x 2 zhaomeijing zhaomeijing 4096 Apr 27 14:50 ./
drwxr-xr-x 4 zhaomeijing zhaomeijing 4096 Apr 27 14:47 ../
-rw-r--r-- 1 zhaomeijing zhaomeijing 314 Apr 27 11:50 dut_add.v
-rw-r--r-- 1 zhaomeijing zhaomeijing 4128 Apr 27 13:05 init_wave.txt
-rw-r--r-- 1 zhaomeijing zhaomeijing 1905 Apr 27 13:03 tb_wave.v
-rwxr-xr-x 1 zhaomeijing zhaomeijing 7510 Apr 27 14:49 test.out*
-rw-r--r-- 1 zhaomeijing zhaomeijing 2168 Apr 27 13:06 wave_rtl.v
-rw-r--r-- 1 zhaomeijing zhaomeijing 20948 Apr 27 14:50 wave.vcd
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$ gtkwave wave.vcd
GTKWave Analyzer v3.3.118 (w)1999-2023 BSI
[0] start time.
[3795000] end time.
WM Destroy
zhaomeijing@raspberrypi5:~/workspace/13_rtl_sim/wave_rtl$
//------仿真源码
//------运行仿真,查看波形
//------完整仿真波形
//------end
更多回帖