GVIM與模板——讓FPGA開發變得更簡單

  還在使用FPGA開發環境自帶的代碼編輯器?還在逐個字母敲擊冗長重複的代碼?明德揚至簡設計法讓你快速提升代碼編寫效率!利用GVIM這一高效的編輯工具並添加自定義模板,經過簡短的腳本命令便可自動生成全部經常使用的邏輯塊。算法

  先來講說WIN系統下VIVADO和quartusII綁定GVIM做爲默認代碼編輯器的方法:vim

1 VIVADO:IDE上方主菜單欄Tools ->Options ,選擇General項,點擊Text Editor右側「...」按鈕。在彈出的Custom Editor Definition 下方的Editor空白內填寫xxx /gvim.exe [file name] :[line number] 按下OK退出便可。其中xxx爲GVIM軟件安裝路徑。框架

2 quartusII:一樣選擇菜單欄中Tools ->Options  編輯器

   選擇左側的Preferred Text Editor,1處選中下拉菜單中Vim,並點擊2處右側「...」按鈕找到GVIM的安裝目錄。最後點擊OK退回。工具

  在FPGA設計中一個個複雜的模塊均由接口定義、信號定義、時序邏輯和組合了邏輯塊等部分組成,所以將代碼劃分紅幾種類型的模塊,以統一的代碼風格經過簡短的腳本語言調用能夠很大程度提升設計效率,實現「填空式」設計!如下是腳本自動生成代碼示例,括號中爲根據規定格式的參數輸入。測試

1 計數器spa

  計數器是FPGA實現時序的基本單元,好比數據幀處理,串並轉換等均要用到。命令模式下輸入<:Mdyjsq > (注意<>不用輸入,加尖括號只是爲了與文字區分開) 按下回車自動生成以下計數器模塊,連相關的信號定義也可自動生成。設計

   再次輸入一樣的命令,會產生另外一個計數器模塊,同時cnt後編號依次遞增,對於須要多個計數器嵌套使用的場合很是實用。3d

  但若是想自定義定義計數器名稱怎麼辦?難道要手動修改麼?例如須要對din_vld這一信號進行計數,計10個一循環。命令模式下輸入調試

<:call MDYJSQ("cnt_din","din_vld",10)>,按下回車生成以下代碼。

  格式爲call MDYJSQ("計數器名稱","加1條件",計數個數)。該模板加1條件和計數個數是可選參數,但建議輸入腳本時添加,這樣有助於在編寫代碼以前,思考好計數器最重要的兩個要素:加1條件和計數個數。

2 狀態機

  較爲複雜的時序邏輯中,常常須要狀態機與計數器配合使用。若有以下狀態轉移圖:

在命令模式下輸入<:call MDYZTJ(3,"IDLE","S1","S2",12,23,31)>,按下回車生成明德揚四段式狀態機。

  在生成的框架中添加狀態轉移條件和相應狀態輸出。命令格式爲call MDYZTJ(狀態個數,"狀態1名稱","狀態2名稱",...,跳轉條件1,跳轉條件2,...)

3 always邏輯塊

  在邏輯設計中,最經常使用的就是always時序邏輯塊,其內部經過多個if else語句區分不一樣的狀況。當要產生信號dout邏輯且在兩種狀況下須要賦予不一樣的值時,命令模式下輸入<:call MDYSHIXU("dout",2)>,按下回車生成以下代碼。格式爲call MDYSHIXU("信號名稱",狀況個數)

  固然也少不了組合邏輯塊,能夠很方便地作到連續當即更新信號數值。插入模式下輸入<Zuhe> 按下回車:

4 接口與信號定義

  除了核心代碼外的信號定義和接口定義一樣能夠快速生成。如數據包處理模塊要輸入位寬爲8bit的數據包。根據至簡設計法命名規範,在命令模式下輸入

<:call MDYINPUT(「din_sop」,1, 「din_eop」,1, 「din」,8, 「din_vld」,1) > 回車

  格式爲call MDYINPUT("輸入接口信號1名稱",信號1位寬,"輸入接口信號2名稱",信號2位寬) 同理,output,reg類型信號,wire類型信號生成方式和格式與input一致。

   有了上述生成代碼的腳本命令,對設計人員的幫助否則而喻。接下來經過GVIM工具經常使用快捷鍵操做示例,進一步體會什麼叫效率!

1.補全命令

  在插入模式,輸入din_以後按下<ctrl+p>補全命令,能夠快速根據當前文件中已有符號進行補全。有多個符號匹配時可自行選擇。

2.跳轉命令

  命令模式下,按下<gg>會跳轉到當前文件頭,按下<G>跳轉到文件尾(不再用不停地滾動鼠標滾輪了)。

3.搜索命令

  命令模式下,在想要找出一樣符號位置的符號上按下*鍵,全部該符號出現位置自動高亮。調試起來很方便。

  當要查找一個已知名稱符號時,命令模式下輸入</xxx> 直接找到全部xxx符號位置。上述兩種搜索命令都可使用<n>跳轉到下一個高亮位置,<N>跳轉到上一位置。

4.刪除複製命令

  複製N整行:命令模式下,光標在一行頭位置輸入yy,將光標移到欲粘貼位置上一行任意處,按下p便可在下一行粘貼所複製內容。可在yy前加數字表示要從當前行開始向下複製行數。

5.保存退出

  命令模式下,輸入<:w xxx.y> 回車爲以特定文件名和文件格式保存文件。輸入<:wq> 回車保存當前文件退出。

6.替換命令

  全文件替換:命令模式下,輸入<:%s/xx/yy/gc> 回車把當前文件全部xx可選擇替換成yy,逐個按下y確認替換,按下n否認替換。

  範圍替換:命令模式下,輸入<:n,ms/xx/yy/gc>回車把n到m行全部xx可選擇替換成yy,以相同方式確認。

  如將5到22行clk替換成clk_tx:命令模式下,輸入<:5,22s/clk/clk_tx/gc> 回車

  灰色爲當前待替換位置,按下<y>或<n>逐一確認。

7.列操做模式

  在編寫testbench時,要例化待測試模塊。這是複製待測試模塊中如下部分。

   a.鼠標選中待刪除區域,按下<ctrl+q>進入列選模式。b.按下delete直接刪除,以後用tab鍵在每行前流出空白。c.命令模式下,輸入<ctrl+q>進入列操做模式,經過<j><k><h><l>(下 上 左 右)鍵選擇欲編輯區域。d.輸入大寫字母「I」,再輸入想要列插入符號「.」,最後按下Esc鍵退出完成列插入。以一樣方式插入每行後()

 

  

  合理規範的代碼是設計成功關鍵,經過上述一個個簡短便於記憶的腳本命令,可讓設計人員從低級重複性的工做中解脫出來,將時間花在「刀刃」上。從代碼搬運工變成專一於功能算法的設計師,讓解答題變成填空題,今後開始!

相關文章
相關標籤/搜索