vim插件:vhdl插件

今年开始使用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".
        
   

   下载地址

http://www.vim.org/scripts/script.php?script_id=3420

posted @ 2010-11-20 17:58  楼心月  阅读(2685)  评论(0编辑  收藏  举报