Gvim-Verilog-Handbook
此篇为中篇,主要介绍部分功能使用。部分功能可能已改动,只做参考。
点击查看终篇效果
代码编写
添加头部
在Normal模式下输入header
(或菜单栏中Verilog的AddHeader),自动生成文件头部。
可在automatic.vim的AddHeader()函数中修改相关的参数模板。
1 | function AddHeader() |
添加波形图
点击GUI界面工具栏中的AddClk,AddSig和AddBus(或菜单栏中的TimingWave)分别添加时钟,一般信号,总线信号,末尾取反标志位以及分割线。
通过快捷键Ctrl+F8
或者TimingWave中的Invert键进行信号的翻转和总线的调整,信号末尾的取反标志位代表信号翻转时使用下降沿触发(默认为上升沿触发)。
波形的相关配置在automatic.vim中的位置及其含义如下。
1 | let s:sig_offset = 13 "信号偏移值 |
添加代码段
添加always块
多种always块添加,可通过菜单栏AlwaysBlock的选项点击或工具栏部分图标点击,或者通过快捷键al
,修改配置与添加文件头部的功能类似,在automatic.vim相关函数中对应修改即可。
添加状态机
快捷键fsm
,生成三段式状态机模板,修改配置与添加文件头部的功能类似,在automatic.vim相关函数中对应修改即可。
类似添加
还有添加单行注释、选定后添加多行注释、添加reg/wire注释块、添加主程序注释块等。参考automaic.vim配置即可。插入模式下快捷键F2添加时间,参考vimrc配置。
信号操作
产生信号定义
- 端口信号定义
输入信号后,在对应信号行Normal模式下输入;di
产生input信号声明,输入;dow
产生output wire 信号声明,输入;dor
产生output reg信号声明,注意此声明不能带位宽,不然会被截位。
- reg/wire信号定义
输入信号后,在对应信号行Normal模式下;dr
产生input信号声明,;dw
产生output wire 信号声明,注意此声明不能带位宽,不然会被截位。
input/output定义切换
快捷键Shift+F9
(或菜单栏的Verilog)调整端口信号input/output切换
信号对齐
输入信号位宽之后信号对齐会有问题,通过快捷键F7
对齐输入输出端口的格式;通过快捷键F8
对齐reg/wire的格式;通过快捷键F6
调整例化模块的端口对齐。
自动例化
将需要例化的模块与顶层模块放在一个文件夹下,然后在顶层模块中输入
1 | uart u_uart(/*autoinst*/); //模块名+u_模块名+(/*autoinst*/); 注意要添加分号 |
然后使用快捷键Shift+F3
(或菜单栏Verilog功能)即可。例化端口自带input和outrput注释,可以更改automati.vim代码选择不添加。
另外,自动例化autoinst功能里带有例化更新,例化顺序重排,重对齐等操作,具体可尝试使用。AutoArg功能用于声明输入输出,现在暂时不太需要使用了。
自动定义reg/wire
慎用,部分功能有异常。在需要添加reg/wire定义的位置输入
1 | /*autodef*/ |
然后使用快捷键Shift+F2
(或菜单栏Verilog功能)即可,此功能会自动定义当前未定义的例化模块端口,模块内使用到的wire和reg信号。
自动连线
待补充。
递增/减命名
进入Gvim列操作后选定单列后(在windows下Ctrl+q,Linux下Ctrl+v),输入
1 | :I |
则生成第一个数为起始数的递增序列。若输入
1 | :I -1 |
则生成第一个数为起始数的递减序列。
IDE操作
树形拓扑
文件树
Normal模式下输入
1 | :NERdTree |
显示当前文件夹的文件树。
RTL树
RTL树需要perl脚本支持,linux下操作比较方便。Windows下可用git的git-bash集成的perl。
在.v文件夹下使用调用git-bash,并把名为ctags_gen的perl脚本放入该文件夹,在git-bash中输入命令
1 | perl ctags_gen *.v |
这里会生成一个模块之间关联信息的文件tags
。这样在文件夹下用Gvim打开.v的顶层文件,命令行模式输入命令
1 | :RtlTree |
即可打开Rtl树列表。
代码检查
代码检查需要iverilog作为Linter来进行操作。下载windows版的iverilog并将iverilog.exe的地址添加到环境变量$PATH中。Syntasticcheck会调用cmd.exe(或git-bash,可通过vimrc配置)作为shell启动iveirllog检查代码,并将结果返回Syntasticcheck,然后由Syntasticcheck显示到Gvim编辑器中。在Normal模式下输入
1 | :SyntasticCheck |
即可进行代码检查。
BTW
据说Emacs的verilog-mode插件集成度高且很好用,但在vim中调用貌似不太方便,详见用Emacs写Verilog 。不过现在这版Gvim作者个人用着已经很方便了,且自己配置也很方便,所以暂不考虑替换。