标题党标题党。工具没有最好,只有最适合你的,Verilog行为级描述虽然已经抽象了很多,但是对于大规模的电路设计,Verilog有很多冗余编码逻辑,比如自动定义,自动实例化等等,尤其是做Top集成,上万行的连线,手动连线十分低效,也容易出错。比如现在很多工具上都有提高Verilog代码编写效率的插件,本文是分享的是两个Gvim的自动化插件。
两个插件
为了高效的编写Verilog,通常有些编辑器插件可以自动生成代码,比如自动端口定义,自动连线,自动实例化等等。一般的公司的环境有很好用的自动化插件,想给自己的电脑也整个怎么做。
博主找到了两个插件
- Emacs中有个插件叫verilog-mode。博主习惯了用Vim,查询后发现Vim也可以调用这个插件来实现自动化。
verilog-mode开发者网站在这里,更多内容去上网查询。
https://www.veripool.org/wiki/verilog-mode
- vim官网上也有一个插件,作者zhang guo,有好用的autodefine功能,这两个可以配合着用,写代码的时候可以完全不用在意reg和wire类型的定义,直接写assign和always块,最后autodefine一下就可以了。
https://www.vim.org/scripts/script.php?script_id=4067
Emacs的安装
第一个插件需要按装Emacs,各个版本的Emacs下载安装
https://www.gnu.org/savannah-checkouts/gnu/emacs/download.html#nonfree
MacOS安装Emacs
brew cask install emacs
CentOS安装Emacs
https://www.cnblogs.com/snake553/p/4943816.html
Windows安装Emacs
下载地址http://mirrors.ustc.edu.cn/gnu/emacs/windows/emacs-26/
放在安装目录在下,在bin文件夹下找到emacs.exe运行
Emacs的配置使用
自动化前
module
自动化后
module
实例化的文件和top在一个目录下直接运行就行,如果不在一个目录下,就在endmodule后添加如下
//Local Variables:
在相应的位置写好命令,测试了下不区分大小写。然后在Vim命令模式输入命令行。*号可以替换成对应的文件名。
:!emacs --batch *.v -f verilog-batch-auto
即可自动化定义和自动实例化,这个插件在Mac和Linux下可以直接输入上面的命令使用,在Windows下设置一下环境变量即可。
设置第三行执行文件的emacs.exe的路径。
这个插件有些小问题,autoinst执行时,如果修改了端口名称,则会恢复到默认。
autowire和autoreg,只能对output和实例化的端口进行操作,直接写一个always块或assign,如果操作的变量,不在output或实例化端口中,也不会自动定义。本文开始的那段代码中的变量doutx就没有被自动定义。在Emacs-菜单栏-Verilog-AUTO Help中打开这两个auto的详细介绍,所以读者在使用的过程中应该注意。
对于这两个问题,我找到了另外一个插件。
Vim官网的插件
https://www.vim.org/scripts/script.php?script_id=4067
直接下载这个文件。
在Windows中使用直接放在安装目录下plugin文件夹下,重启Gvim在菜单栏加载插件菜单。
MacOS与CentOS下需要安装这个插件,在用户根目录下新建一个文件夹为.vim/plugin/,然后这个插件复制进去,重新打开Gvim,就可以看到插件自动加载。
autoinst使用的过程中需要注意的是,光标必须放在需要操作位置对应的那一行,然后使用快捷键或者点击菜单栏图形界面就可以直接运行。这个插件的问题是不能垮文件夹实例化,不过对于平时做些小练习绰绰有余了,效率提高100%。
还可以添加always块,编写代码时,直接写assign和always块给变量进行赋值,使用autodef,则会自动声明变量成对应的wire或者reg。
最后
Emacs verilog-mode只能自动声明输出和实例化端口的变量,而且在Windows平台下,会出现自动对齐参差不齐,但是可以自定义跨文件夹实例化。而automatic.vim弥补了Emacs verilog-mode自动定义功能的不足,但是却没有跨文件夹实例化的功能。所以两个可以配合着用,对于做个小练习,甚至做工程开发也完全没有问题。最常用的就这几个功能,还有其他功能读者可以自己去尝试,提高编码效率。
最后,编辑器这个东西,找个自己用的顺的,能跨多个平台的,多人协作尽量保持统一的就行了。没有最好,只有最适合你的。