今年開始使用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".
????????
???
? 下載地址
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
