1. 程式人生 > >vim外掛:vhdl外掛

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-2414: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; //clockinput rst; //resetor: 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".

   下載地址