使用Verilator和TerosHDL作高效代码开发
好风凭借力,送我上青云。——《临江仙·柳絮》
还不知道如何优雅地开发Verilog?
本文内容为Verilog代码编写的进阶内容,请确保前往普通班主页了解如何优雅的进行开发后再阅读本文。
Verilator是一款开源的支持Verilog和System Verilog仿真工具,它支持代码质量检查等功能,能够将给定的电路设计翻译成C++或者System C的库等中间文件,最后使用C/C++编写testbench,去调用前面生成的中间文件,由C编译器编译执行,来完成仿真。
在本文中,我们主要介绍Verilator作代码检查的配置方法,但Verilator本身还是目前最为主流的处理器设计验证工具,其功能远远超出了代码检查,我们将在后续硬件课程中为大家介绍。感兴趣的同学可以进入Verilator官网了解更多信息。
Verilator可以检查出哪些错误
- 常规词法错误
always
中对wire
型变量赋值case
或if-else
条件不完备,推断出锁存器- 阻塞与非阻塞赋值滥用
- 单文件内信号多驱动、组合逻辑环路
- 信号位宽不匹配
- 例化模块接口不一一对应
- ………… !!! bug "Verilator检查的“小毛病”" 若模块名与模块所在文件名不一致,Verilator会报错“找不到对应的模块”,这是Verilator的一个bug,可以通过修改模块名或者文件名解决。
Verilator到底有多强大?
作为一款占据处理器调试领域主流的工具,Verilator的功能和性能都是非常强大的。其仿真速度几乎是Vivado仿真的十倍以上,且通过对工程源代码严格的检查,能够发现大量的设计错误,大大提高了设计的可靠性。在Windows平台下,Vivado、iverilog、ModelSim等仿真工具都无法找出“case和if-else条件不完备”、“单文件内组合逻辑环路”等严重设计问题,而Verilator可以轻松发现这些问题。在大规模的设计工程下,Verilator的优势更加明显,这也使其成为NSCSCC全国大赛的主流仿真工具。
Verilator的运行环境
Verilator是面向Linux平台开发的一款工具,截至目前,使用官网方法在Windows平台上编译的Verilator都无法配合VSCode完成代码检查,但VSCode为我们提供了一个选项,我们可以通过使用子系统WSL运行Verilator来完成高效代码检查。
在WSL中安装Verilator并运行
安装WSL
大部分的Windows电脑都自带了WSL,如果自己的电脑并没有WSL的话,可以执行如下命令:
之后在Microsoft Store中选择一个稳定版的Ubuntu下载,再执行如下命令进行切换: 其中<Distrbution Name>为发行版名称。在命令行中启动后,就可以看到一个命令行Ubuntu了
安装Verilator
目前通过apt安装的Verilator版本较低,但也可以使用。如果不希望体验过于麻烦的安装,可以执行如下命令安装Verilator:
如果希望安装较高版本的Verilator,可以参考官网提供的安装指南,下面列出编译Verilator需安装的库:sudo apt-get install git perl python3 make autoconf g++ flex bison ccache
sudo apt-get install libgoogle-perftools-dev numactl perl-doc help2man
sudo apt-get install libfl2
sudo apt-get install libfl-dev
sudo apt-get install zlibc zlib1g zlib1g-dev
在VSCode中使用Verilator检查
找到Verilog-HDL/SystemVerilog拓展,点击设置,选择扩展设置,在搜索框中输入Verilator,按照如下进行配置:
之后重启VSCode,就可以使用Verilator进行高效代码检查了。
TerosHDL插件补充
TerosHDL是一款基于VSCode的Verilog-HDL/SystemVerilog语言插件,它可以帮助我们更好地对Verilog模块进行补充,在本节中我们将介绍TerosHDL的使用方法。
安装TerosHDL
在VSCode的插件中,直接搜索Teroshdl,点击安装即可。
注意:TerosHDL在2024.9.22更新到v6.0.4,截止2024.9.28更新到v6.0.7。这些版本目前在window下不能正常使用示意图查看器(schematic viewer)和状态机查看器(state machine viewer)。
目前,你可以选择安装特定版本,再选择v5.0.12。
同时,如果你没有安装过对应的Python库,还需要使用如下命令来安装Python库支持:
使用TerosHDL进行一键例化
在VSCode中,我们可以使用TerosHDL进行一键例化,这样可以大大提高我们的开发效率。首先我们需要打开一个Verilog文件:
注意观察右上角的图标:
点击这里左数第五个图标:即可出现如下弹框:
点击Copy as instance,即可将例化模板复制到粘贴板里,再选择你需要例化的位置,粘贴即可:
Verilog_Testbench插件
Verilog_Testbench插件可用于自动生成testbench,我们再在自动生成的tb文件的基础上手动做需要的改动,可以提高仿真测试的效率。
在命令行中执行pip install chardet
来安装依赖的python库chardet。
在VScode中安装Verilog_Testbench插件。
在.v/.sv文件中ctrl+shift+p
然后输入testbench
即可在终端中生成tb文件。
在.v/.sv文件中ctrl+shift+p
然后输入instance
可以在终端中生成例化代码。