Windows下高效Verilog/System Verilog 开发环境搭建
0. 前言
在我们工程设计的过程中,经常会存在不直接跑EDA软件(如Vivado Quartus)编写Verilog 以及SV代码的情景 。 今天我就来安利大家一个小巧的Verilog/System Verilog 开发环境,你想要的它都有。同时它还具备代码提示,语法检查功能,代码跳转,自动生成Verilog Testbench 等功能,极大的提高我们编写代码的效率。当然vsim和emacs的死忠粉可以跳过这篇文章(●’◡’●)。
1. 环境准备
- 硬件
- 无
- 软件
- Windows10
- Vscode
- Vscode 中Verilog-HDL/SystemVerilog/Bluespec SystemVerilog 插件(后面简写为Verilog插件) ,用于语法检查、代码跳转、自动补全、自动生成实例化代码
- Universal Ctags ,代码跳转必备软件
- CTags Support插件 ,增强不同文件中代码跳转的支持
- Verilog_Testbench , 自动生成Testbench插件,需添加Python3 chardet库包支持
- modelsim , 用于Verilog插件的Linter,也可以用iverilog
安装方法
- VScode 直接在官网https://code.visualstudio.com/中下载即可
- Vscode 中安装Verilog-HDL/SystemVerilog/Bluespec SystemVerilog ,在拓展中安装,具体操作如 1-1所示
-
Vscode 中安装CTags Support ,下载完VScode后,在拓展中安装,具体操作如 1-2所示
-
安装Universal Ctags(国内github老崩,实在下不了留言或私信获取链接呗)
- 登录网站https://github.com/universal-ctags/ctags-win32/releases , 选个自己喜欢的版本安装,推荐选新的。
- 我这里选择的2021-07-24的版本 ,如图1-3 所示
图1-3:安装对应版本的ctags - 解压刚才的压缩包,我解压后ctags根目录为D:\environment\ctags(这里每个人都不一样),记下这个目录(这个目录用于设计Windows系统环境变量),以及ctags.exe的具体路径(用于Verilog插件的设置)。
- 配置系统环境变量,方便ctags的使用,不太熟悉怎么配置系统环境变量的小伙伴可以直接百度,操作如图1-5所示
- 在VScode 中的File->Preferences->Setting 中搜索Verilog 。对Verilog.Ctags.Path 、 Verilog.Linting.Linter、Verilog.Linter.Modelsim.Work进行配置,具体操作如图1-6所示。同时你也可以在这里添加一些仿真器编译选项,这里不做赘述。这里的work(必填)是对应modelsim的逻辑库名,不填这个无法做语法检查。(如果选择了iverilog做linter ,那么iverilog的参数中应该覆盖到对应的源代码文件夹路径,如我这里填的-y ./sim -y ./src,否则也是做不了语法检查滴)
5.安装Verilog_Testbench插件,如图1-7所示
- python3安装,Modelsim具体安装过程推荐参考百度,安装完python3后,在cmd中用pip install chardet安装对应的库包,否则的话自动生成testbench插件会用不了,如图1-8所示
- 重启VScode
2.环境运行
前面就已经把环境搭好了,当然codeblock还有很多verilog、systemverilog的插件,读者们可以自己去探索下。
接下来我们就体验一下Verilog插件、TestBench插件的强大功能
创建工作区
-
在VScode中 File->Open Folder 打开个文件夹作为工作区,我这里打开的是PRJ1
-
简单的工作区一般由一个sim(用于存放testbench),src(用于存放源代码)组成,我们直接先创建两个文件夹就好,如图2-1所示 。
- 由于我用的是modelsim,还得创建个逻辑库,在VScode的命令行中输入vlib work即可,结果如图2-2所示
vlib work
vmap work work #这个可以不填,在modelsim.ini中逻辑库work 默认对应的就是./work
到这里,一个简单的工作区就创建好了。
体验Verilog插件功能
- 在src 文件下创建top.v文件,编个简单的流水灯代码
- 体验module快速生成,语法错误检查,如图2-3所示
- 体验always块快速生成,如图2-4所示
- top.v完整代码如代码2-1所示
module top (
input clk,
input rst_n,
output reg [3:0] led
);
always @(posedge clk or negedge rst_n) begin
if(~rst_n)
led <= 4'b0001;
else
led <= {led[2:0],led[3]};
end
endmodule
- 体验自动生成testbench 功能 (这个属于testbench 插件功能) ,在VScode中键盘输入
ctrl+shift+p
打开命令,搜索testbench,然后在终端中就会显示对应testbench的代码,具体操作如图2-5所示
- 在sim 文件夹下 新建一个tb_top.v 文件,并将刚才生成的代码赋值进去 ,并修改finish前的延迟,具体操作如图2-6所示 。 记住一点,testbench插件只是生成一个testbench模板,具体内容要根据实际需求做修改。
- 体验下自动生成实例化代码功能 (这功能Verilog插件和Testbench插件里都有,但是Verilog插件里生成的代码没有信号声明, 所以推荐用Testbench插件中的)。打开代码top.v文件 ,键盘输入
ctrl+shift+p
打开命令,搜索Instance并点击。具体操作如图2-7所示
- 体验同文件中的代码跳转,可以在OUTLINE中跳至信号声明 , 也可以通过
ctrl+鼠标左键对应信号
进行跳转,操作如图2-8所示
- 体验不同文件中代码跳转功能 如跳到module的定义。注意不同文件跳转 ,需要在最顶层目录(即工作区目录路径,我这里是E:\FPGA_PROJECT\prj1)生成对应个.tag文件 ,并且每添加一次文件都要执行一次,否则是找不多对应文件滴。
-
在工作区目录终端输入
ctags -R -f .tags
生成.tags文件 -
选择对应的module信号
ctrl+t
跳到它的声明 -
ctrl+shift+t
跳到历史跳转位置 -
整体操作如图2-9所示
3.跑仿真
接下来,我们通过命令的方式执行文件的编译 , 仿真
- 在终端中执行下面命令编译工作区的所有文件
vlog .\sim\tb_top.v .\src\top.v
- 进行仿真 ,这里记得加 -voptargs=+acc选项 否则新版本的modelsim很容易把object给优化掉
vsim tb_top -voptargs=+acc
- 执行上两步后,终端会显示如图3-1内容,并且会跳出modelsim 的gui界面
- 添加波形 , 设置仿真时间 ,RUN跑仿真,操作如图3-2所示 ,结果如图3-3所示。
4.结语
最近忙的飞起,更新会挺慢滴,不过还是会持续更滴。
顺便在线请教各位大佬们,怎么截取gif并上传到图床。我都是用QQ截成MP4格式再用ffmpeg转的,画质巨差。图床用码云搭的,非登录有1M限制,请教一下有什么地方可以白嫖个好点的图床。