【树莓派5 测评】 + 09.基于iverilog的RTL仿真(zmj)
对于FPGA或者RTL爱好者来讲,树莓派5开发板可以运行RTL仿真,仿真工具使用iverilog,波形工具使用gtkwave。为什么是这些?因为工具免费且对硬件性能要求更少…… 1. 工具简介iverilog 和 GTKwave 的安装非常便捷。 1.1 iverilogIcarus Verilog 是一个轻量级的 verilog 仿真工具,以编译器的形式工作,将以 verilog 编写的源代码编译为某种目标格式。如果要进行仿真的话,它可以生成一个叫做 vvp 的中间格式。这个格式可以由其所附带的 vvp 命令执行。 1.2 GTKwaveGTKwave是一款免费的波形查看器,可以用于查看标准的 verilog VCD/EVCD,以及其他一些格式的波形文件。 1.3 环境安装配置环境配置主要是仿真软件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$
复制代码
2. 仿真测试安装完所需软件之后,准备仿真文件进行仿真测试。仿真测试流程及结果参考下方记录。 - //------仿真测试
- //---流程
- 编辑源码 --> 执行仿真,输出仿真结果 --> 导出波形 --> 查看波形
- //---指令
- 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
|