概述
VIM的官方网站中给出了一款由Gavin Ge[1]编写的专门针对Verilog语言的automatic插件:
类别 | 详情 |
---|---|
插件 | automatic for Verilog : Automatic generator for Verilog HDL[2] |
作者 | Gavin Ge |
博客 | http://blog.sina.com.cn/arrowroothover |
邮箱 | arrowroothover@hotmail.com |
描述 | 支持像Emacs那样为Verilog HDL语言加入自动填充功能 |
功能 | 自动填充参数、自动例化、自动生成敏感列表、自动定义信号、自动添加文件头、自动注释 |
注:[1]和[2]的链接需要进行简单注册才能显示内容
automatic插件原理
原理如下:
- 在Verilog代码中添加特定格式的注释;
- 利用插件脚本,用正则表达式去匹配特定格式的注释;
- 根据特定格式的注释,执行特定的操作。
安装Vim
在Vim官方下载地址中点击下图所示红框位置下载Windows版最新的Vim安装文件并安装。
若加载过慢,可点击此网盘链接地址。
下载automatic插件
在插件官方下载地址中点击下图所示红框位置下载automatic插件。
若加载过慢,可点击此网盘链接地址。
安装automatic插件
以Vim8.1版本为例,将下载的automatic.vim文件放在 $安装目录/vim81/plugin 文件夹下,重启Vim,可以看到Vim界面菜单栏按钮中新出现了一个Verilog按钮,如下图:
使用automatic插件
更多使用功能,可以参加插件官方下载地址中的vim.rar文件,各子文件夹名与其代表的功能相对应,其中before.v是使用插件之前的代码,after.v是使用插件之后的代码。
下面,只介绍最为常用的自动例化和自动生成always块。
自动例化
-
保证文件名和模块名一致;
-
在代码中加入如下格式的注释,用以注明要例化的模块的代码文件所在的路径在代码中加入如下格式的注释,用以注明要例化的模块的代码文件所在的路径
// Instance: folderName/module.v
- 模块的端口连接列表中加入如下格式注释
moduleName instanceName(/*autoinst*/);
例如:
// Instance: ahb/ahb_slave.v
module example;
ahb_slave u_slave(/*autoinst*/);
endmodule
- 点击Verilog按钮中的AutoInstance按钮
- 自动生成的代码块如下:
// Instance: ahb/ahb_slave.v
module example;
ahb_slave u_slave(/*autoinst*/
//Inputs
.ahbm_ahbs_HWDATA (ahbm_ahbs_HWDATA[31:0] ),
.arb_ahbs_HMASTLOCK (arb_ahbs_HMASTLOCK ),
.ahbm_ahbs_HWRITE (ahbm_ahbs_HWRITE ),
.ahbm_HBURST (ahbm_HBURST[2:0] ),
.ahbm_HADDR (ahbm_HADDR[31:0] ),
.ahbm_ahbs_HSIZE (ahbm_ahbs_HSIZE[2:0] ),
.HSEL (HSEL ),
.HCLK (HCLK ),
.ahbm_HTRANS (ahbm_HTRANS[1:0] ),
.HRESETn (HRESETn ),
.arb_ahbs_HMASTER (arb_ahbs_HMASTER[3:0] ),
//Outputs
.ahbs_arb_HSPLIT (ahbs_arb_HSPLIT[15:0] ),
.ahbs_HREADY (ahbs_HREADY ),
.ahbs_ahbm_HRDATA (ahbs_ahbm_HRDATA[31:0] ),
.ahbs_HRESP (ahbs_HRESP[1:0] ));
endmodule
自动生成always块
- 在模块端口用clock注释和reset注释分别注明时钟信号名和复位信号名
module example(
input clk, //clock
input rst_n //reset);
endmodule
- 光标移到要添加always块的位置
- clock和reset各有上升沿和下降沿两种情况,此为四种组合。加上仅用clock的两情况,以及组合逻辑块,共有7中情况可选,可根据实际情况,点击Verilog按钮中的下图部分:
- 自动生成的代码块如下:
module example(
input clk, // clock
input rst_ n // reset
);
always @(posedge clk or negedge rst_ n) begin
if (!rst_ n) begin
end
else begin
end
end
always @(posedge clk) begin
end
always @(*) begin
end
endmodule
总结
Vim结合automatic插件可以大大提高编程效率。
但是!!!Vim的颜值真的不高,相比之下微软的Visual Studio Code不仅颜值高,还有大量的Verilog插件可用,而且自动补全的功能也比Vim优秀。
后续将会推出VSCode编写Verilog的相关插件介绍(例如自动生成testbench、自动例化,自动填充各种for case always 等常用语句块),以大大提高编程效率。