天天看點

FPGA開發基本流程及注意事項

 本文是根據FPGA技術牛人曆年來的經驗所總結出來的關于FPGA開發基本流程及注意事項基本介紹,希望給初學者丁點幫助。衆所周知,FPGA是可程式設計晶片,是以FPGA的設計方法包括硬體設計和軟體設計兩部分。硬體包括FPGA晶片電路、 存儲器、輸入輸出接口電路以及其他裝置,軟體即是相應的HDL程式以及嵌入式C程式。

本文引用位址:http://www.eepw.com.cn/article/221688.htm

  由于目前微電子技術已經發展到SOC階段,即內建系統(Integrated System)階段,相對于內建電路(IC)的設計思想有着革命性的變化。SOC是一個複雜的系統,它将一個完整産品的功能內建在一個晶片上,包括核心處理器、存儲單元、硬體加速單元以及衆多的外部裝置接口等,具有設計周期長、實作成本高等特點,是以其設計方法必然是自頂向下的從系統級到功能子產品的軟、硬體協同設計,達到軟、硬體的無縫結合。

  這麼龐大的工作量顯然超出了單個工程師的能力,是以需要按照階層化、結構化的設計方法來實施。首先由總設計師将整個軟體開發任務劃分為若幹個可操作的子產品,并對其接口和資源進行評估,編制出相應的行為或結構模型,再将其配置設定給下一層的設計師。這就允許多個設計者同時設計一個硬體系統中的不同子產品,并為自己所設計的子產品負責;然後由上層設計師對下層子產品進行功能驗證。

  自頂向下的設計流程從系統級設計開始,劃分為若幹個二級單元,然後再把各個二級單元劃分為下一層次的基本單元。一直下去,直到能夠使用基本子產品或者IP核直接實作為止,流行的FPGA開發工具都提供了階層化管理,可以有效地梳理錯綜複雜的層次,能夠友善地檢視某一層次子產品的源代碼以修改錯誤。

  在工程實踐中,還存在軟體編譯時長的問題。由于大型設計包含多個複雜的功能子產品,其時序收斂與仿真驗證複雜度很高,為了滿足時序名額的要求,往往需要反複修改源檔案,再對所修改的新版本進行重新編譯,直到滿足要求為止。這裡面存在兩個問題:首先,軟體編譯一次需要長達數小時甚至數周的時間,這是開發所不能容忍的;其次,重新編譯和布局布線後結果差異很大,會将已滿足時序的電路破壞。是以必須提出一種有效提高設計性能,繼承已有結果、便于團隊化設計的軟體工具。FPGA廠商意識到這類需求,由此開發出了相應的邏輯鎖定和增量設計的軟體工具。例如,賽靈思公司的解決方案就是PlanAhead。

  Planahead允許高層設計者為不同的子產品劃分相應FPGA晶片區域,并允許底層設計者在所給定的區域内獨立地進行設計、實作和優化,等各個子產品都正确後,再進行設計整合。如果在設計整合中出現錯誤,單獨修改即可,不會影響到其它子產品。Planahead将結構化設計方法、團隊化合作設計方法以及重用繼承設計方法三者完美地結合在一起,有效地提高了設計效率,縮短了設計周期。

  不過從其描述可以看出,新型的設計方法對系統頂層設計師有很高的要求。在設計初期,他們不僅要評估每個子子產品所消耗的資源,還需要給出相應的時序關系;在設計後期,需要根據底層子產品的實作情況完成相應的修訂。

  典型FPGA開發流程與注意事項

  FPGA的設計流程就是利用EDA開發軟體和程式設計工具對FPGA晶片進行開發的過程。典型FPGA的開發流程一般如圖4.1.1所示,包括功能定義/器件選型、設計輸入、功能仿真、綜合優化、綜合後仿真、實作、布線後仿真、闆級仿真以及晶片程式設計與調試等主要步驟。

  1.功能定義/器件選型

  在FPGA設計項目開始之前,必須有系統功能的定義和子產品的劃分,另外就是要根據任務要求,如系統的功能和複雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進行權衡,選擇合适的設計方案和合适的器件類型。一般都采用自頂向下的設計方法,把系統分成若幹個基本單元,然後再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。

  2.設計輸入

  設計輸入是将所設計的系統或電路以開發軟體要求的某種形式表示出來,并輸入給EDA工具的過程。常用的方法有硬體描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可程式設計晶片發展的早期應用比較廣泛,它将所需的器件從元件庫中調出來,畫出原理圖。這種方法雖然直覺并易于仿真,但效率很低,且不易維護,不利于子產品構造和重用。更主要的缺點是可移植性差,當晶片更新後,所有的原理圖都需要作一定的改動。目前,在實際開發中應用最廣的就是HDL語言輸入法,利用文本描述設計,可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等,支援邏輯方程、真值表和狀态機等表達方式,主要用于簡單的小型設計。而在中大型工程中,主要使用行為HDL,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣與電子工程師協會(IEEE)的标準,其共同的突出特點有:語言與晶片工藝無關,利于自頂向下設計,便于子產品的劃分與移植,可移植性好,具有很強的邏輯描述和仿真功能,而且輸入效率很高。除了這IEEE标準語言外,還有廠商自己的語言。也可以用HDL為主,原理圖為輔的混合設計方式,以發揮兩者的各自特色。

  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)來解決上述沖突,它們隻需要占用晶片少量的邏輯資源,具有很高的實用價值。