使用VS Code进行Verilog HDL的编译和仿真
Icarus Verilog与GTKWave编译与仿真
Verilog的纠错和编译
首先在Icarus Verilog的官网下载对应版本。
https://bleyer.org/icarus/
这个软件提供了查错和仿真的功能。
这里提供Windows的教学。
安装很简单,记住选择Full installation并且添加路径到PATH变量里。
在VS code里安装这三个插件。
第一个是为了编译和快速仿真。
第二个是自动补全。
第三个是查错。
完成后进行配置。
左下角点击齿轮图标-Settings,在搜索框里输入Verilog Linter,找到下面选项更改为iverilog,此时.v文件就能实现补全和查错了。此时右上角的绿色图标就已经可以进行编译了。如果顺利编译,就会在目录中生成一个*.v.out文件。
可选配置:
运行PowerShell管理员,使用指令winget install 'Universal Ctags'
安装ctags。成功后重启PowerShell窗口,输入ctags -v
测试,查询到版本即证明安装成功。
安装好后,使用第三个插件即可按住ctrl点选变量后跳转到定义,但是对于module不能跨文件跳转。
如果需要跨文件跳转,继续安装vs code扩展,Ctags Companion。(未测试)
安装好后将如下命令添加到.vscode/settings.json里:
"ctags-companion.command": "ctags -R --fields=+nKz -f .vscode/.tags --langmap=SystemVerilog:+.v -R rtl /opt/uvm-1.2/src",
"ctags-companion.readtagsEnabled": true,
其中/opt/uvm-1.2/src
为指定的source源码目录。
至此按照第三个插件的文档说明来看,应该可以实现跨文件跳转的功能。
2024.06.16更新:
当然上面的方法有点复杂。
推荐一个国人大佬写的插件:
https://1391074994.github.io/Verilog-Hdl-Format/#/
这个插件解决了上面第三个插件ctags功能无法跨文件跳转的问题。推荐使用此插件替换上面第二和第三个插件。
安装好后,配置查错软件:
修改这个选项,如果你已经安装了Icarus Verilog,这里就选iVerilog。我这里因为已经配置了下面介绍的TerosHDL的查错,这里就没有开启。
仿真
仿真的前提就是写好Testbench文件。这里假定tb文件测试内容已经写好,在此前提下,在initial语句块中插入:
$dumpfile("*.vcd");
$dumpvars;
这里的$dumpfile
的参数就是生成的波形文件。
当然我们可以添加一个Snippet来便于我们后续的自动添加。
左下角设置-User Snippets,输入Verilog创建一个,将下面内容粘贴到大括号里。这样我们在下次编写tb时直接打出dum即可自动添加此段。
"Generate .vhd for GTKWave": {
"prefix": ["$dum","dum"],
"body": [
"$$dumpfile(\"$TM_FILENAME_BASE.vcd\");",
"$$dumpvars;"
],
"description": "Add this block to generate .vhd for GTKWave. Remember to put this in initial block."
}
添加后,再次运行编译,即可得到.vcd波形文件。在对应.vcd文件右键即可选择打开波形查看器即可查看。
GTKWave查看器窗口中点击tb后,选择需要查看的信号,点击Append添加到右边窗口,或者直接ctrl+a全选添加。
这个方法好处就是很快,但是iVerilog的仿真生成速度比Modelsim快不少,不知道对精度有没有影响。
使用TerosHDL插件调用第三方工具(Modelsim)仿真
这里非常推荐使用TerosHDL插件。这个插件功能很多,简单介绍一下。
基础的比如联想和纠错,进阶的自动规范格式、tb模板、生成说明文档、自动绘制原理图和状态机图以及调用第三方工具仿真。
官方说明文档:
https://terostechnology.github.io/terosHDLdoc/docs/intro
对于不想看官方文档的,可以看看我的简化版安装流程。
环境安装
首先安装Python 3,这个我就不赘述了,没安装的可以网上搜搜,现在官网好像也有一键安装的版本了。
然后安装Python3的支持包。
Ctrl + R运行cmd,输入pip install teroshdl
和pip install cocotb
。
接着安装make。
windows标志上右键,运行Windows PowerShell管理员模式,在窗口输入:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
安装好Chocolatey后,继续输入:
choco install make
完成后使用make --version
可以测试是否安装成功。
基础环境安装好后,在VS code的扩展中搜索TerosHDL并安装。
安装完成后侧边栏就会出现Teros的图标,点击后拉到最下面,点击Check dependencies即可测试功能是否能够正常使用。如果没有报错,那么上面除了仿真以外的功能就可以使用了。
配置
使用查错仍然是调用第三方工具,需要提前安装好。
简单点可以使用上面提到的Icarus Verilog。然后在设置里Linter settings - General - Verilog/SV linter处修改为对应的软件。
当然如果你使用了前面已经介绍过的其他插件,也可以不用配置查错。
调用第三方工具仿真
这个插件可以调用很多软件进行仿真,基本主流软件都有。
这里简单讲讲Modelsim的配置,其他软件也应该大同小异。
使用此插件的好处就是可以减少操作界面卡顿的Modelsim的UI哈哈。
Modelsim的安装,我提供一个版本。理论上任何版本都可。
链接:https://pan.baidu.com/s/18qhnIzfXLNVq0iqZF0TpHw?pwd=e722
提取码:e722
对于插件设置,点击ACTIONS里的Open Configuration Menu - Tools - General,第一个选项选择你需要的第三方软件,这里是Modelsim。
下面的执行模式,因为没有其他查看器,这里仍然使用原本的GUI。
Tools选项里的Modelsim设置,第一个就是安装目录,注意选择安装的主目录而不是下面那个win64的文件夹。
最下面的Additional run options for vsim选项,给vsim仿真命令加入-vopt -voptargs=+acc
的选项,否则可能出现仿真Objects里面没有端口的问题。也可以在这里的选项添加其他命令来实现更多的限定和功能,比方说脚本自动化。具体命令选项可以查看Modelsim安装目录下面的说明文档。
所有设置完成后,即可使用此插件调用Modelsim进行仿真。
使用此插件仿真首先得创建一个工程,然后将所需代码添加到SOURCES里,将仿真的testbench设置为toplevel,即可在下方的RUNS里看到tb,点击Run就会调用Modelsim仿真。