FPGA的設計流程就是利用EDA開發軟體和編程工具對FPGA晶元進行開發的過程。FPGA的開發流程一般下如圖所示,包括電路設計、設計輸入、功能模擬、綜合優化、綜合後模擬、實現、佈線後模擬、板級模擬以及晶元編程與調試等主要步驟。 1. 電路設計 在系統設計之前,首先要進行的是方案論證、系統設計和FPG ...
FPGA的設計流程就是利用EDA開發軟體和編程工具對FPGA晶元進行開發的過程。FPGA的開發流程一般下如圖所示,包括電路設計、設計輸入、功能模擬、綜合優化、綜合後模擬、實現、佈線後模擬、板級模擬以及晶元編程與調試等主要步驟。
1. 電路設計
在系統設計之前,首先要進行的是方案論證、系統設計和FPGA晶元選擇等準備工作。系統工程師根據任務要求,如系統的指標和複雜度,對工作速度和晶元本身的各種資源、成本等方面進行權衡,選擇合理的設計方案和合適的器件類型。一般都採用自頂向下的設計方法,把系統分成若幹個基本單元,然後再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。
2. 設計輸入
設計輸入是將所設計的系統或電路以開發軟體要求的某種形式表示出來,並輸入給EDA工具的過程。常用的方法有硬體描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程晶元發展的早期應用比較廣泛,它將所需的器件從元件庫中調出來,畫出原理圖。這種方法雖然直觀並易於模擬,但效率很低,且不易維護,不利於模塊構造和重用。更主要的缺點是可移植性差,當晶元升級後,所有的原理圖都需要作一定的改動。目前,在實際開發中應用最廣的就是HDL語言輸入法,利用文本描述設計,可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等,支持邏輯方程、真值表和狀態機等表達方式,主要用於簡單的小型設計。而在中大型工程中,主要使用行為HDL,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣與電子工程師協會(IEEE)的標準,其共同的突出特點有:語言與晶元工藝無關,利於自頂向下設計,便於模塊的劃分與移植,可移植性好,具有很強的邏輯描述和模擬功能,而且輸入效率很高。
3. 功能模擬
功能模擬,也稱為前模擬,是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的模擬沒有延遲信息,僅對初步的功能進行檢測。模擬前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關心的輸入信號組合成序列),模擬結果將會生成報告文件和輸出信號波形,從中便可以觀察各個節點信號的變化。如果發現錯誤,則返回設計修改邏輯設計。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟體。
4. 綜合優化
所謂綜合就是將較高級抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連接,使層次設計平面化,供FPGA佈局佈線軟體進行實現。就目前的層次來看,綜合優化(Synthesis)是指將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連接網表,而並非真實的門級電路。真實具體的門級電路需要利用FPGA製造商的佈局佈線功能,根據綜合後生成的標準門級結構網表來產生。為了能轉換成標準的門級結構網表,HDL程式的編寫必須符合特定綜合器所要求的風格。由於門級結構、RTL級的HDL程式的綜合是很成熟的技術,所有的綜合器都可以支持到這一級別的綜合。常用的綜合工具有Synplicity公司的Synplify/Synplify Pro軟體以及各個FPGA廠家自己推出的綜合開發工具。
5. 綜合後模擬
綜合後模擬檢查綜合結果是否和原設計一致。在模擬時,把綜合生成的標準延時文件反標註到綜合模擬模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和佈線後的實際情況還有一定的差距,並不十分準確。目前的綜合工具較為成熟,對於一般的設計可以省略這一步,但如果在佈局佈線後發現電路結構和設計意圖不符,則需要回溯到綜合後模擬來確認問題之所在。在功能模擬中介紹的軟體工具一般都支持綜合後模擬。
6. 實現與佈局佈線
實現是將綜合生成的邏輯網表配置到具體的FPGA晶元上,佈局佈線是其中最重要的過程。佈局將邏輯網表中的硬體原語和底層單元合理地配置到晶元內部的固有硬體結構上,並且往往需要在速度最優和麵積最優之間作出選擇。佈線根據佈局的拓撲結構,利用晶元內部的各種連線資源,合理正確地連接各個元件。目前,FPGA的結構非常複雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行佈局佈線。佈線結束後,軟體工具會自動生成報告,提供有關設計中各部分資源的使用情況。由於只有FPGA晶元生產商對晶元結構最為瞭解,所以佈局佈線必須選擇晶元開發商提供的工具。
7. 實現與佈局佈線
時序模擬,也稱為後模擬,是指將佈局佈線的延時信息反標註到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。時序模擬包含的延遲信息最全,也最精確,能較好地反映晶元的實際工作情況。由於不同晶元的內部延時不一樣,不同的佈局佈線方案也給延時帶來不同的影響。因此在佈局佈線後,通過對系統和各個模塊進行時序模擬,分析其時序關係,估計系統性能,以及檢查和消除競爭冒險是非常有必要的。在功能模擬中介紹的軟體工具一般都支持綜合後模擬。
8. 板級模擬與驗證
板級模擬主要應用於高速電路設計中,對高速系統的信號完整性、電磁干擾等特征進行分析,一般都以第三方工具進行模擬和驗證。
9. 晶元編程與調試
設計的最後一步就是晶元編程與調試。晶元編程是指產生使用的數據文件(位數據流文件,Bitstream Generation),然後將編程數據下載到FPGA晶元中。其中,晶元編程需要滿足一定的條件,如編程電壓、編程時序和編程演算法等方面。邏輯分析儀(Logic Analyzer,LA)是FPGA設計的主要調試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA晶元生產商都提供了內嵌的線上邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用晶元少量的邏輯資源,具有很高的實用價值。