今年开始使用vhdl语言,发现vhdl的插件非常少,自己平时用起来很不方便。
自己在使用vim的同时,不断在vimrc中增加自己想要的功能,慢慢的发现写了快1000行了,不如做成一个插件拿出来和大家分享。
我觉得做一个vhdl的插件还是有必要的,平时需要进行的机械的操作还是很多,最常见的是component或者生成一个testbench文件。要是每次一点点输入,那是非常麻烦的。
我找很多verilog的插件,有的功能非常强大,但是vhdl可以说是基本没有,由此可见verilog还是比vhdl应用的广泛的多。
安装插件:
解压到vim的plugin文件夹中即可。
下面是该插件的功能描述:
1 建立一个编译库 create a library <F6>
modesim在编译前需在当前目录下建立一个库
2 编译文件 compile file <F7>
快速编译文件,检查是否有语法错误。这在写程序的时候将十分方便,不用再打开modesim了。
如果出错会调用quickfix窗口显示错误,无错误则不显示。
3 在文件的开头加入文件信息。 Add File Header
大概信息如下:
1 ---------------------------------------------------------------------------------
2 -- Created by : Vorx Ltd.com
3 -- Filename :
4 -- Author : ChenYong
5 -- Created On : 2010 - 12 - 24 14 : 50
6 -- Last Modified :
7 -- Version : v1. 0
8 -- Description :
9 --
10 --
11 ---------------------------------------------------------------------------------
每次保存(:w)将自动更新最后修改时间(Last Modified)。
另外:
在vhdl文件中:加入了库声明,不用再每次建立文件都辛辛苦苦去敲那4行了(直到现在,我都没记住那4行具体内容)。
在verilog文件中:加入了`timescale 的定义,默认为`timescale 1ns / 1ps,如果要修改,可以在vimrc中设置:
let g:Verilog_Timescale = "1ns / 1ps"
可以在vimrc中修改作者名字和公司名字
let g:HDL_Author = "Gigi" "默认值是我的名字
let g:HDL_Company = "ABC" "默认值为空
3 插入功能说明 Add Content
在光标位置插入三行注释,用来添加模块的说明
4 生成进程模块 Process Build
这个function是修改自某verilog插件。
需要在信号后面加入标注,例如:
verilog:
input clk; // clock
input rst; // reset
or :
reg clk; // clock
reg rst; // reset
vhdl:
port (
clk : std_logic ; -- clock
rst : std_logic -- reset
)
or :
signal clk : std_logic ; -- clock
signal rst : std_logic ; -- reset
这个功能并不好用,最近也一直都没进行更新。建议使用snipMate。
5 vhdl/Verilog的模块声明 VHDL Entity Build
vhdl模块声明时写的字比较多,所以使用此命令还比较方便的。
该命令执行时会弹出一个窗口用来输入entity的名字。architecture名字默认为arc。
6 创建本模块的component信息 VHDL component Build
运行命令后,建立一个新的分割窗口来显示component信息。
同时component信息加入剪贴板。
窗口的分割方式有3种:
当g:RightB_Commponent未定义时,即默认为水平分割
当g:RightB_Commponent = 1 右侧垂直分割
当g:RightB_Commponent = 0 左侧垂直分割
水平分割时,可以设置component窗口高度,默认为25:
let g:Height_of_Component = "25"
垂直分割时,可以设置component窗口的宽度,默认为70
let g:Width_of_Component = "70"
7 为vhdl模块创建一个可在verilog里例化的instant Verilog Instant for Vhdl
为了配合verilog和vhdl混用,实现了这个模块。实现方式和6相似。
8 为vhdl/verilog生成一个testbench Vhdl Testbench /Verilog Testbench
模块完成后,需要用一个简单的testbench进行测试,但每次测试都去建立testbench文档实在太麻烦了,尤其是例化部分。
如果能一个命令或一个按键就生成testbench那就方便多了,Xilinx ISE中便有这个功能。于是仿照ISE,完成了这个功能。
命令执行后,会在当前文件夹下建立testbench文档,名字为:tb_xxxx.vhd或tb_xxxx.v,其中xxxx为测试模块名字。
并将testbench文档用水平分割显示,便于和原文档进行对比和修改。
鉴于用verilog做测试的异常强大,增加了verilog testbench。
关于testbench的时钟:
时钟名字默认为clk,自动检测文件中时钟的功能还没有做,以后可能会更新。
时钟默认为64ns / 15.625MHz,如果需要修改,在vimrc中设置:
let g:HDL_Clock_Period = 64
2.1版本加入了对verilog的支持。
9 加入对Debussy的快速添加。
10 新加入了快速设置signal的功能。默认快捷键<leader>,
更新记录:
v1.0 创建插件,实现编译,加入注释,文件头等功能
v1.1 加入函数HDL_Component_Build() 可以实现垂直分割窗口
生成component信息
v1.2 加入函数Tb_Build() 可以为vhdl模块生成testbench文档
v1.3 1 生成进程的命令改为:ProBuild
2 加入函数HDL_Tb_Build(type) 函数
代替函数Tb_Build()
修改了testbench文档的生成方式
功能:可以生成vhdl模块的vhdl testbench或者 verilog testbench
3 修改了HDL_Component_Build()函数
修改了component的生成方式
4 代码风格做了一些修改
5 修改了光标位置
v1.4 修改了HDL_Tb_Build(type)函数 使生成的component按原信号顺序排列
v1.5 加入菜单
v1.6 优化程序
v1.7 HDL_Component_Build可以用变量定义选择instant窗口的方式
不定义 g:HDL_RightB_Commponent 则水平分割打开
g:HDL_RightB_Commponent = 1 原文件右侧垂直打开
g:HDL_RightB_Commponent = 0 原文件左侧垂直打开
v1.8 修改了一些错误
v1.9 1 修改了HDL_Add_File_Information()和HDL_Add_Content()函数
2 加入变量g:HDL_Author g:HDL_Company g:HDL_Verilog_Timescale
可以在vimrc中添加设置,例如:
let g:HDL_Company = "Vorx"
let g:HDL_Author = "ChenYong"
let g:HDL_Verilog_Timescale = " 1ns / 1ns"
3 加入generic部分 使可识别generic
4 加入g:HDL_Clock_Period 时钟周期可设置,默认为64
let g:HDL_Clock_Period = 64
5 暂时不支持一行多个port
6 菜单中加入compile file 默认快捷键为<F7>
7 菜单中加入vlib work 默认快捷键为<F6>
需要安装modelsim。windows下需设置环境变量PATH=$ModelSim\win32
v2.0 现在可以支持同一行多个port了
v2.1 支持inout端口
支持verilog模块,可为verilog模块生成testbench和instant
v2.2 加入格式整理的功能。
支持component,entity,signal,instant模块。
尽量使“:,=>”符号对齐。例如:
component bufg
port( i : in std_logic;
o : out std_logic
);
end component;
整理后为:
component bufg
port(
i : in std_logic;
o : out std_logic
);
end component;
整理前会先进行编译。
对于较大的文件可能时间会有3-4秒延迟(indent操作比较费时间)。
变量名字超过16个字符将不留空格。如:
cak_ram_char_ch14: out std_logic_vector(1 downto 0)
v2.3 加入了一个添加signal的函数,感谢作者sunil shukla。
我仅修改了一下正则匹配方式和标志"begin"的查找方式。
设定快捷键"<leader>,"。
光标要停留在未定义的signal上。
会询问signal长度。
很好用。
Fixed Some Bugs.
Redifined The function name.
v2.4 Fixed Some Bugs.
v2.5 修复函数HDL_Signal_Dec_Vhdl()的bug:如果有component的端口名和signal
相同,就会提示"signal already define".