- Intel FPGA/CPLD設計(基礎篇)
- 王欣 王江宏 蔡海寧 王誠 吳繼華
- 3113字
- 2019-09-10 13:13:43
1.4 FPGA/CPLD的設計流程
一般來說,完整的FPGA/CPLD設計流程包括電路設計與輸入、功能仿真、綜合、綜合后仿真、實現、布線后仿真與驗證、板級仿真驗證與調試等主要步驟,如圖1-3所示。

圖1-3 完整的FPGA/CPLD設計流程
(1) 電路設計與輸入。
電路設計與輸入是指通過某些規范的描述方式,將工程師電路構思輸入給EDA工具。常用的設計輸入方法有硬件描述語言(HDL)和原理圖設計輸入方法等。原理圖設計輸入法在早期應用得比較廣泛,它根據設計要求,選用器件、繪制原理圖、完成輸入過程。這種方法的優點是直觀、便于理解、元器件庫資源豐富。但是在大型設計中,這種方法的可維護性較差,不利于模塊構造與重用;更主要的缺點是當所選用芯片升級換代后,所有的原理圖都要做相應的改動。目前進行大型工程設計時,最常用的設計方法是HDL設計輸入法,其中影響最為廣泛的HDL語言是VHDL和Verilog HDL。它們的共同特點是利于由頂向下設計,利于模塊的劃分與復用,可移植性好,通用性好,設計不因芯片的工藝與結構的不同而變化,更利于向ASIC的移植。波形輸入和狀態機輸入方法是兩種常用的輔助設計輸入方法:使用波形輸入法時,只要繪制出激勵波形和輸出波形,EDA軟件就能自動地根據響應關系進行設計;使用狀態機輸入法時,設計者只需畫出狀態轉移圖,EDA軟件就能生成相應的HDL代碼或原理圖,使用十分方便。但是需要指出的是,波形輸入和狀態機輸入方法只能在某些特殊情況下緩解設計者的工作量,并不適合所有的設計。
(2) 功能仿真。
電路設計完成后,要用專用的仿真工具對設計進行功能仿真,驗證電路功能是否符合設計要求。功能仿真有時也被稱為前仿真。常用的仿真工具有Mentor公司的Model Sim、Synopsys公司的VCS、Cadence公司的NC-Verilog和NC-VHDL及Aldec公司的Active-HDL等。通過仿真能及時發現設計中的錯誤,加快設計進度,提高設計的可靠性。
(3) 綜合優化。
綜合優化(Synthesize)是指將HDL語言、原理圖等設計輸入翻譯成由與、或、非門及RAM和觸發器等基本邏輯單元組成的邏輯連接(網表),并根據目標與要求(約束條件)優化所生成的邏輯連接,輸出.edf和.edn等標準格式的網表文件,供FPGA/CPLD廠家的布局布線器進行實現。常用的專業綜合優化工具有Synplicity公司的Synplify/Synplify Pro、Amplify,Synopsys公司的FPGA Compiler Ⅱ(Synopsys公司將停止發展FPGA Express軟件,致力于FPGA Compiler Ⅱ平臺的開發),Mentor公司旗下Exemplar Logic公司出品的Leonardo Spectrum和Mentor Graphics公司出品的Precision RTL等。另外,FPGA/CPLD廠商的集成開發環境也自帶綜合工具。
(4) 綜合后仿真。
綜合完成后需要檢查綜合結果是否與原設計一致,做綜合后仿真。在仿真時,把綜合生成的標準延時文件反標注到綜合仿真模型中去,可估計門延時帶來的影響。綜合后仿真雖然比功能仿真精確一些,但是只能估計門延時,不能估計線延時,仿真結果與布線后的實際情況還有一定的差距,并不十分準確。這種仿真的主要目的在于檢查綜合器的綜合結果是否與設計輸入一致。目前主流綜合工具日益成熟,對于一般性設計,如果設計者確信自己表述明確,沒有綜合歧義發生,則可以省略綜合后仿真步驟。但是如果在布局布線后仿真時發現有電路結構與設計意圖不符的現象,則常常需要回溯到綜合后仿真以確認是否是由于綜合歧義造成的問題。在功能仿真中介紹的仿真工具一般都支持綜合后仿真功能。
(5) 實現與布局布線。
綜合結果的本質是一些由與、或、非門及觸發器和RAM等基本邏輯單元組成的邏輯網表,它與芯片實際的配置情況還有較大差距。此時應該使用FPGA/CPLD廠商提供的軟件工具,根據所選芯片的型號,將綜合輸出的邏輯網表適配到具體FPGA/CPLD器件上,這個過程就叫作實現過程。因為只有器件開發商最了解器件的內部結構,所以實現步驟必須選用器件開發商提供的工具。在實現過程中最主要的過程是布局布線(PAR,Place And Route):所謂布局(Place)是指將邏輯網表中的硬件原語或底層單元合理地適配到FPGA內部的固有硬件結構上,布局的優劣對設計的最終實現結果(在速度和面積兩個方面)影響很大;所謂布線(Route)是指根據布局的拓撲結構,利用FPGA內部的各種連線資源,合理正確連接各個元件的過程。FPGA的結構相對復雜,為了獲得更好的實現結果,特別是保證能夠滿足設計的時序條件,一般采用時序驅動的引擎進行布局布線,所以對于不同的設計輸入,特別是不同的時序約束,獲得的布局布線結果一般有較大差異。CPLD結構相對簡單得多,其資源有限而且布線資源一般為交叉連接矩陣,故CPLD的布局布線過程相對簡單明朗得多,一般被稱為適配過程。一般情況下,用戶可以通過設置參數指定布局布線的優化準則,總的來說優化目標主要有面積和速度兩個方面。一般根據設計的主要矛盾,選擇面積或速度或平衡兩者等優化目標,但是當兩者沖突時,滿足時序約束要求更重要一些,此時選擇速度或時序優化目標效果更佳。
關于“面積”和“速度”兩個設計目標的平衡與互換可以參考人民郵電出版社出版的《Intel FPGA/CPLD設計(高級篇)》中的相關論述。
(6) 時序仿真與驗證。
將布局布線的時延信息反標注到設計網表中,所進行的仿真就叫時序仿真或布局布線后仿真,簡稱后仿真。布局布線之后生成的仿真時延文件包含的時延信息最全,不僅包含門延時,還包含實際布線延時,所以布線后仿真最準確,能較好地反映芯片的實際工作情況。一般來說,布線后仿真步驟必須進行,通過布局布線后仿真能檢查設計時序與FPGA實際運行情況是否一致,確保設計的可靠性和穩定性。布局布線后仿真的主要目的在于發現時序違規(Timing Violation),即不滿足時序約束條件或器件固有時序規則(建立時間、保持時間等)的情況。在功能仿真中介紹的仿真工具一般都支持布局布線后仿真功能。
到此我們介紹了FPGA/CPLD設計流程中3個不同階段的仿真,請大家明確這些仿真的本質和目的,功能仿真的主要目的在于驗證語言設計的電路結構和功能是否和設計意圖相符;綜合后仿真的主要目的在于驗證綜合后的電路結構是否與設計意圖相符、是否存在歧義綜合結果;布局布線后仿真即時序仿真的主要目的在于驗證是否存在時序違規。這些不同階段不同層次的仿真配合使用,能夠更好地確保設計的正確性,明確問題定位,節約調試時間。
有時為了保證設計的可靠性,在時序仿真后還要做一些驗證。驗證的手段比較豐富,可以用Quartus Ⅱ內嵌時序分析工具完成靜態時序分析(STA,Static Timing Analyzer),也可以用第三方驗證工具(如Synopsys的Formality驗證工具、Prime Time靜態時序分析工具等),還可以用Quartus Ⅱ內嵌的Chip Editor分析芯片內部的連接與配置情況。
(7) 板級仿真與驗證。
在有些高速設計情況下還需要使用第三方的板級驗證工具進行仿真與驗證,如Mentor Tau、Forte Design - Timing Designer、Mentor Hyperlynx、Mentor ICX、Cadence SPECCTRAQuest、Synopsys HSPICE。這些工具通過對設計的IBIS和HSPICE等模型的仿真,能較好地分析高速設計的信號完整性、電磁干擾(EMI)等電路特性。
(8) 調試與加載配置。
設計開發的最后步驟就是在線調試或將生成的配置文件寫入芯片中進行測試。示波器和邏輯分析儀(LA,Logic Analyzer)是邏輯設計的主要調試工具。傳統的邏輯功能板級驗證手段是用邏輯分析儀分析信號,設計時要求FPGA和PCB設計人員保留一定數量的FPGA管腳作為測試管腳,編寫FPGA代碼時將需要觀察的信號作為模塊的輸出信號,在綜合實現時再把這些輸出信號鎖定到測試管腳上,然后連接邏輯分析儀的探頭到這些測試腳,設定觸發條件,進行觀測。邏輯分析儀的特點是專業、高速,觸發邏輯可以相對復雜。其缺點是價格昂貴(好一些的LA需要幾十萬甚至上百萬元人民幣),靈活性差。PCB布線后測試腳的數量就固定了,不能靈活增加,當測試腳不足時會影響測試,如果測試腳太多又影響PCB布局布線。
對于相對簡單一些的設計,使用Quartus Ⅱ內嵌的Signal Tap Ⅱ對設計進行在線邏輯分析可以較好地解決上述矛盾。Signal Tap Ⅱ是一種FPGA在線片內信號分析工具,它的主要功能是通過JTAG口,在線、實時地讀出FPGA的內部信號。其基本原理是利用FPGA中未使用的Block RAM,根據用戶設定的觸發條件將信號實時地保存到這些Block RAM中,然后通過JTAG口傳送到計算機,最后在計算機屏幕上顯示出時序波形。
任何仿真或驗證步驟出現問題,就需要根據錯誤的定位返回到相應的步驟更改或重新設計。
- 計算機應用與維護基礎教程
- 從零開始學51單片機C語言
- 電腦維護365問
- Learning Stencyl 3.x Game Development Beginner's Guide
- R Deep Learning Essentials
- Arduino BLINK Blueprints
- 微型計算機系統原理及應用:國產龍芯處理器的軟件和硬件集成(基礎篇)
- 筆記本電腦維修實踐教程
- Istio服務網格技術解析與實踐
- 基于網絡化教學的項目化單片機應用技術
- 微服務架構基礎(Spring Boot+Spring Cloud+Docker)
- 多媒體應用技術(第2版)
- 電腦軟硬件維修寶典
- Unreal Development Kit Game Programming with UnrealScript:Beginner's Guide
- Hands-On Embedded Programming with C++17