此篇为中篇,主要介绍部分功能使用。部分功能可能已改动,只做参考。

点击查看终篇效果

代码编写

添加头部

在Normal模式下输入header(或菜单栏中Verilog的AddHeader),自动生成文件头部。

文件头

可在automatic.vim的AddHeader()函数中修改相关的参数模板。

1
function AddHeader()

添加波形图

点击GUI界面工具栏中的AddClk,AddSig和AddBus(或菜单栏中的TimingWave)分别添加时钟,一般信号,总线信号,末尾取反标志位以及分割线。

添加波形图

通过快捷键Ctrl+F8或者TimingWave中的Invert键进行信号的翻转和总线的调整,信号末尾的取反标志位代表信号翻转时使用下降沿触发(默认为上升沿触发)。

调整波形图

波形的相关配置在automatic.vim中的位置及其含义如下。

1
2
3
4
5
6
let s:sig_offset = 13                                       "信号偏移值
let s:clk_period = 8 "一个时钟间隔8个空格周期
let s:clk_num = 16 "产生16个时钟
let s:cq_trans = 1 "第一个触发点间隔1个空格周期
let s:wave_max_wd = s:sig_offset + s:clk_num*s:clk_period
"0 is clk posedge, 4 is clk negedge

添加代码段

添加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 信号声明,注意此声明不能带位宽,不然会被截位。

regwire定义

input/output定义切换

快捷键Shift+F9(或菜单栏的Verilog)调整端口信号input/output切换

inout切换

信号对齐

输入信号位宽之后信号对齐会有问题,通过快捷键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信号。

自动定义reg/wire

自动连线

待补充。

递增/减命名

进入Gvim列操作后选定单列后(在windows下Ctrl+q,Linux下Ctrl+v),输入

1
:I

则生成第一个数为起始数的递增序列。若输入

1
:I -1

则生成第一个数为起始数的递减序列。

递增序列

IDE操作

树形拓扑

文件树

Normal模式下输入

1
:NERdTree

显示当前文件夹的文件树。

nerdtree

RTL树

RTL树需要perl脚本支持,linux下操作比较方便。Windows下可用git的git-bash集成的perl。

在.v文件夹下使用调用git-bash,并把名为ctags_gen的perl脚本放入该文件夹,在git-bash中输入命令

1
perl ctags_gen *.v

rtltreeprepare

这里会生成一个模块之间关联信息的文件tags。这样在文件夹下用Gvim打开.v的顶层文件,命令行模式输入命令

1
:RtlTree

即可打开Rtl树列表。

rtltree

代码检查

代码检查需要iverilog作为Linter来进行操作。下载windows版的iverilog并将iverilog.exe的地址添加到环境变量$PATH中。Syntasticcheck会调用cmd.exe(或git-bash,可通过vimrc配置)作为shell启动iveirllog检查代码,并将结果返回Syntasticcheck,然后由Syntasticcheck显示到Gvim编辑器中。在Normal模式下输入

1
:SyntasticCheck

即可进行代码检查。

syntasticcheck

BTW

据说Emacs的verilog-mode插件集成度高且很好用,但在vim中调用貌似不太方便,详见用Emacs写Verilog 。不过现在这版Gvim作者个人用着已经很方便了,且自己配置也很方便,所以暂不考虑替换。