VsCode与Vivado的灵活使用
引言
现在大二了,在接触硬件描述语言。Vivado自带的编辑器实在很难用,为了能够“极客”一些,当然是去Google了一下有哪些方法可以取而代之。
网络上的答案大同小异,基本上都是用的Sublime Text.(我的学长们也几乎都是) 平时码代码的过程中,我习惯使用VsCode,尤其是在微软收购GitHub之后,Code 简直就是神器了。于是乎…一个大胆的想法出现了。
站在前人的肩膀上
在网络上,是找了一些古老的这样的文章,关于VsCode替换掉Vivado原本的编辑器的。我稍作尝试,其实也很简单。前辈们的努力让我们现在有着更加舒适的体验,我所做的一切都是站在前人的肩膀上。
步骤一、更换Vivado自带文本编辑器
打开你的vivado,在Tools->Setting->Text Editor选择Custom Editor,指令为"…(自己电脑的地址)//Microsoft VS Code//Code.exe" -g [file name]:[line number]。
步骤二、用VsCode舒适的编写verilog
在vscode扩展商店搜索verilog ,安装Verilog HDL的拓展即可以舒适的编写Verilog代码。他能帮你实现的功能主要有:语法高亮,自动补齐。
步骤三、自动生成Testbench
前人已经在VsCode编写过自动生成Testbench的脚本了,感谢前辈们的努力。
扩展商店搜索Verilog_TestBench,安装过后,任意编写一段verilog程序。按下ctrl+shift+p,选择testbench即可生成testbench对应的程式。
效果如上图所示。执行脚本之后,其出结果导向powershell的输出结果之中。其帮我们自动生成了了时钟信号,复位信号,以及进行了模块的例化。
步骤四、进一步优化
可以看到,美中不足的是,生成的文本你还需复制粘贴到新建的testbench文件中去,真是有些麻烦了!但是?从命令行执行的命令可以看到,这个脚本是用python编写的!顺着文件目录找到原本的python源文件,即可修改输出内容,至于自动生成新的文本文件?那就简单了,上一段powershell脚本~
理清一下我们的思路:脚本需要将命令执行,输入的第一个参数为文件名a.v,输出的文件名为tb_a.v.可以将整个脚本的初始化条件写入powershell的profile文件中(就和bash里的.bashrc一样,ps在启动时会自动加载此配置文件的内容)。
那么profile文件在哪儿呢?打开你的powershell。输入 echo $profile 即可。想编辑文件,直接在命令行输入 code $profile 。 前提是你的vscode添加进系统环境变量了,如果没有,就顺着文件所在地,直接编辑。
那么奉献上我最后写的脚本吧。
function createtb_function{
param(
[Parameter(ValueFromPipeline=$true)]
$InputObject
)
$FileName = $InputObject
$tbFileName = "tb_" + $FileName.split("\")[-1]
echo $tbFileName
python $env:TestBenchPath $FileName >> $tbFileName
}
set-alias ll Get-ChildItemColor
$env:TestBenchPath="C:\Users\22306\.vscode\extensions\truecrab.verilog-testbench-instance-0.0.5\out\vTbgenerator.py"
set-alias createtb createtb_function
修改过后,重启vscode的powershell命令行。输入命令createtb xxx.v,即可输出生成文件。
最后testbench脚本就自动生成啦!
如果你的vivado在ubuntu系统下
在学院的电脑里装了一个ubuntu系统,发现vivado也有ubuntu的支持,那么为了能够有更好的编程体验,我又对上述过程进行了linux的移植(虽然上述截图以及本文的撰写都是在ubuntu系统下进行的)。
首先,安装vscode
其次,把更换vivado中文本编辑器的命令换成 code [filename] , 这样你的vivado文本编辑器就换成vscode了。
然后,在您的系统里安装powershell。
再然后在设置里搜索terminal,把终端在linux上使用的路径换成pwsh所在路径。
最后修改powershell的profile文件,不过与windows的略有不同,这里贴上代码。
#以后要 使用 ll 而不是 ls了。
function createtb_function{
param(
[Parameter(ValueFromPipeline=$true)]
$InputObject
)
$FileName = $InputObject
$tbFileName = "tb_" + $FileName.split("/")[-1]
echo $tbFileName
python $env:TestBenchPath $FileName >> $tbFileName
}
set-alias ll Get-ChildItemColor
$env:TestBenchPath="/home/princeling/.vscode/extensions/truecrab.verilog-testbench-instance-0.0.5/out/vTbgenerator.py"
set-alias createtb createtb_function
其他就能和原来一样喽~
写在最后的
至此,我深深体会到了作为一名verilog编程者的辛酸,请大家都去学py吧,不要和我竞争了!
我的github主页:https://github.com/NjtechPrinceling
欢迎大家点评与指正,互相学习!