當前位置:編程學習大全網 - 編程語言 - 在PLD開發中提高VHDL的綜合質量

在PLD開發中提高VHDL的綜合質量

 隨著計算機與微電子技術的發展 電子設計自動化EDA(Electronic Design Automation)和可編程邏輯器件PLD(Programmable Logic Device)的發展都非常迅速 熟練地利用EDA軟件進行PLD器件開發已成為電子工程師必須掌握的基本技能 先進的EDA工具已經從傳統的自下而上的設計方法改變為自頂向下的設計方法 以硬件描述語言HDL(Hardware Description Language)來描述系統級設計 並支持系統仿真和高層綜合 ASIC(Application Specific Integrated Circuit)的設計與制造 電子工程師在實驗室就可以完成 這都得益於PLD器件的出現及功能強大的EDA軟件的支持 現在應用最廣泛的高密度PLD器件主要是現場可編程門陣列FPGA(Field Programmable Gate Array)和復雜可編程邏輯器件CPLD(Complex Programmable Logic Device) EDA軟件方面 大體可以分為兩類

 ① PLD器件廠商提供的EDA工具 較著名的如 Altera公司的 Max+plus II和Quartus II Xilinx公司的Foundation Series Latice Vantis公司的ispEXERT System

 ② 第三方專業軟件公司提供的EDA工具 常用的綜合工具軟件有 Synopsys公司的FPGA Compiler II Exemplar Logic公司的LeonardoSpectrum Synplicity公司的Synplify 第三方工具軟件是對CPLD/FPGA生產廠家開發軟件的補充和優化 如通常認為Max+plus II和Quartus II對VHDL/Verilog HDL邏輯綜合能力不強 如果采用專用的HDL工具進行邏輯綜合 會有效地提高綜合質量

  PLD器件的開發

 CPLD/FPGA設計越來越復雜 使用硬件描述語言設計可編程邏輯電路已經成為大勢所趨 目前最主要的硬件描述語言是 VHDL(Very High Speed Integrated Circuit HDL)和Verilog HDL 兩種語言都已被確定為IEEE標準 用VHDL/Verilog HDL語言開發可編程邏輯電路的完整流程為

 ① 文本編輯 用任何文本編輯器都可以 但通常在專用的HDL編輯環境中進行 因為專業的集成開發環境通常提供各種結構模板 並且可以自定義各種要素(例如關鍵字 字符串 註釋等)的色彩顯示 提高可讀性 提高輸入效率

 ② 功能仿真 將文件調入HDL仿真軟件進行功能仿真 檢查邏輯功能是否正確

 ③ 邏輯優化與綜合 將源文件調入邏輯綜合軟件進行邏輯分析處理 即將高層次描述(行為或數據流級描述)轉化為低層次的網表輸出(寄存器與門級描述) 邏輯綜合軟件會生成EDIF(Electronic Design Interchange Format)格式的EDA工業標準文件 這步在PLD開發過程中最為關鍵 影響綜合質量的因素有兩個 即代碼質量和綜合軟件性能

 ④ 適配與分割 如果整個設計超出器件的宏單元或I/O單元資源 可以將設計劃分到多片同系列的器件中

 ⑤ 裝配或布局布線 將EDIF文件調入PLD廠家提供的軟件中進行裝配(對於CPLD)或布局布線(對於FPGA) 即將設計好的邏輯寫入CPLD/FPGA器件中

 ⑥ 時序仿真 即延時仿真 由於不同器件 不同布局布線 給延時造成的影響不同 因此對系統進行時序仿真 檢驗設計性能 消除競爭冒險是必不可少的步驟

 利用VHDL語言進行PLD設計開發的基本流程如圖 所示 如果選用Altera公司CPLD器件作為目標器件 上述過程可以在Altera公司提供的 Max+plus II或Quartus II集成開發環境中完成 但如果選用專用的EDA綜合工具作為補充 完成邏輯優化與綜合 設計質量會更好 第三方綜合軟件的主要功能就是對HDL語言的源文件進行邏輯綜合 生成 edf的EDA工業標準文件 然後在PLD廠家提供的開發軟件中調入 edf文件 進行編譯 仿真 器件編程等過程 最終完成整個設計 針對Altera公司CPLD器件 我們選用Quartus II + LeonardoSpectrum的EDA組合開發方式 更重要的是 廣大學習愛好者可以在網站免費獲得 下面對兩款軟件作簡要介紹 Quartus II軟件的應用

 Quartus II是Altera公司的第四代可編程邏輯器件集成開發環境 提供從設計輸入到器件編程的全部功能 Quartus II可以產生並識別EDIF網表文件 VHDL網表文件和Verilog HDL網表文件 為其它EDA工具提供了方便的接口 可以在Quartus II集成環境中自動運行其它EDA工具

 利用Quartus II軟件的開發流程可概括為以下幾步 設計輸入 設計編譯 設計定時分析 設計仿真和器件編程

 ( )設計輸入

 

 Quartus II軟件在File菜單中提供 New Project Wizard… 向導 引導設計者完成項目的創建 當設計者需要向項目中添加新的VHDL文件時 可以通過 New 選項選擇添加

 ( )設計編譯

 Quartus II編譯器完成的功能有 檢查設計錯誤 對邏輯進行綜合 提取定時信息 在指定的Altera系列器件中進行適配分割 產生的輸出文件將用於設計仿真 定時分析及器件編程 圖 LeonardoSpectrum軟件Advanced FlowTabs界面 ① 首先確定軟件處於Compile Mode 可以通過Processing菜單進行選擇

 ② 在Processing菜單中選擇Compiler Settings項 如圖 所示 可以進行器件選擇 模式設定 綜合和適配選項設定及設計驗證等

 ③ 單擊Processing菜單下的 Start Compilation 項 開始編譯過程

 ④ 查看編譯結果 如圖 所示 我們可以得到詳細的編譯報告

 ( )設計定時分析

 單擊Project菜單下的 Timing Settings… 選項 可以方便地完成時間參數的設定 Quartus II軟件的定時分析功能在編譯過程結束之後自動運行 並在編譯報告的Timing Analyses文件夾中顯示 如圖 所示 其中我們可以得到最高頻率fmax 輸入寄存器的建立時間tSU 引腳到引腳延遲tPD 輸出寄存器時鐘到輸出的延遲tCO和輸入保持時間tH等時間參數的詳細報告 從中可以清楚地判定是否達到系統的定時要求

 ( )設計仿真

 Quartus II軟件允許設計者使用基於文本的向量文件( vec)作為仿真器的激勵 也可以在Quartus II軟件的波形編輯器中產生向量波形文件( vwf)作為仿真器的激勵 波形編輯方式與MAX+PLUS II軟件的操作相似 在Processing菜單下選擇 Simulate Mode 選項進入仿真模式 選擇 Simulator Settings… 對話框進行仿真設置 在這裏可以選擇激勵文件 仿真模式(功能仿真或時序仿真)等 單擊 Run Simulator 即開始仿真過程

 ( )器件編程

 設計者可以將配置數據通過MasterBlaster或ByteBlasterMV通信電纜下載到器件當中 通過被動串行配置模式或JTAG模式對器件進行配置編程 還可以在JTAG模式下給多個器件進行編程 利用Quartus II軟件給器件編程或配置時 首先需要打開編程器(在New菜單選項中選擇打開Chain Description File) 在編程器中可以進行編程模式設置(Mode下拉框) 硬件配置(Programming Hardware對話框)及編程文件選擇(Add File…按鈕) 將以上配置存盤產生 cdf文件 其中存儲了器件的名稱 器件的設計及硬件設置等編程信息 當以上過程正確無誤後 單擊Start按鈕即可開始對器件進行編程配置

  LeonardoSpectrum軟件的應用

 LeonardoSpectrum是Mentor Graphics的子公司Exemplar Logic的專業VHDL/Verilog HDL綜合軟件 簡單易用 可控性較強 可以在LeonardoSpectrum中綜合優化並產生EDIF文件 作為QuartusII的編譯輸入 該軟件有三種邏輯綜合方式 Synthesis Wizard(綜合向導) Quick Setup(快速完成) Advanced FlowTabs(詳細流程)方式 三種方式完成的功能基本相同 Synthesis Wizard方式最簡單 Advanced FlowTabs方式則最全面 該方式有六個選項單 如圖 所示 分別完成以下功能 器件選擇 設計文件輸入 約束條件指定 優化選擇 輸出網表文件設置及選擇調用布局布線工具

 以上每步操作都提供相應的幫助 簡單明了 需要註意的是 在輸入設計文件時要正確排列文件的次序 將底層文件放在前面 頂層文件放到後面 這樣LeonardoSpectrum軟件才能正確地建立數據信息庫 綜合完成後 可以將輸出網表文件 ( EDF)作為MAX+PLUS II或Quartus II的設計輸入文件 再完成編譯 仿真 定時分析和器件編程等步驟 完成整個系統的設計過程 (A)(B)(C)(D) VHDL編碼方式對綜合質量的影響

 VHDL語言支持全部的仿真功能 但並不是全部可綜合的 VHDL程序的許多硬件描述和仿真結構沒有對應的數字電路來實現 還有些描述在理論上可以映射為對應的數字電路 但是卻不能保證其精確性 比如延時模型 隨著綜合算法技術水平的提高 針對某些寄存器傳輸級RTL(Register Transfer Level)電路描述可以進行有效的優化 但是對於更普遍的電路描述這還不夠 因此綜合結果是否滿足給定的時間約束條件和面積約束條件 還取決於VHDL編碼方式 下面給出幾點經驗 相信對提高綜合質量有所幫助與啟發

 

 ( )資源***享

 例如下面的兩段代碼中 (A)需要 個加法器 而完成同樣的功能 略做修改 (B)只需要 個加法器 有效地減少了使用面積

 適當地利用圓括號進行重新組合 有時也可以實現資源的***享 如下面兩段代碼(C)和(D) (D)中輸入信號b和c即可實現加法器的***享

 ( )使用帶範圍限制的整數

 在VHDL中無約束整數的範圍是 ~+ 這意味著至少需要 位來表示 但通常這會造成資源的浪費 有些綜合軟件會自動優化 但所消耗的時間是相當可觀的 因此 如果不需要全範圍的整型數據 最好指定範圍 例如

 signal *** all_int : integer range downto ;

  *** all_int在本例中只需要 位 而不是 位 有效地節約了器件面積

 ( )使用宏模塊

 當在VHDL中使用算術邏輯 關系邏輯等通用邏輯結構時 多數EDA開發軟件及專用綜合工具通常包含針對特定工藝的優化宏模塊供我們選擇 從功能上可分為時序電路宏模塊 運算電路宏模塊和存儲器宏模塊 具有很高的執行效率 使得綜合結果面積更小 頻率更高 所需編譯時間更短 當然 它們是針對特定工藝的 這將使VHDL程序依賴於具體的器件系列 影響移植性 (E)(F) ( )高級設計優化

 上述幾種方法是在沒有改變其功能性的情況下進行綜合優化的 有時候我們可以在不妨礙設計規格約束的前提下 稍微改變其功能 來提高綜合效率 參考下面兩個例子(E)和(F)

 在(E)中 綜合工具建立遞增計數器和完整的比較器 在(F)中 綜合工具建立遞減計數器和對於常數零的比較器 由於和常數作比較更易於實現 且占用邏輯單元更少 因此(F)程序更高效

 另外 由於綜合工具只能支持VHDL的子集 為保證在綜合前後的仿真保持相同 以下語句在綜合中應該避免使用

 ◇ 避免使用 wait for xx ns 這種語句不會被綜合為實際的電路元件

 ◇ 避免使用after xx ns 在綜合工具進行綜合時 會忽略after語句

 ◇ 避免在信號和變量聲明時賦初值 因為大部分綜合工具會忽略初始化語句 如果使用初始化語句 那麽綜合的結果和仿真的結果將會產生差異

lishixinzhi/Article/program/qrs/201311/11080

  • 上一篇:編壹個C++程序,用同壹個函數名對n個數據進行從小到大排序。用重載函數實現。主要是程序!!
  • 下一篇:小趣味編程
  • copyright 2024編程學習大全網