FPGA是可編程芯片,,因此FPGA的設(shè)計方法包括硬件設(shè)計和軟件設(shè)計兩部分。硬件包括FPGA芯片電路,、存儲器,、輸入輸出接口電路以及其他設(shè)備,軟件即是相應(yīng)的HDL程序以及最新才流行的嵌入式C程序,。硬件設(shè)計是基礎(chǔ),,但其方法比較固定,本書將在第4節(jié)對其進行詳細介紹,,本節(jié)主要介紹軟件的設(shè)計方法,。
目前微電子技術(shù)已經(jīng)發(fā)展到SOC階段,即集成系統(tǒng)(Integrated System)階段,,相對于集成電路(IC)的設(shè)計思想有著革命性的變化,。SOC是一個復(fù)雜的系統(tǒng),它將一個完整產(chǎn)品的功能集成在一個芯片上,,包括核心處理器,、存儲單元、硬件加速單元以及眾多的外部設(shè)備接口等,,具有設(shè)計周期長,、實現(xiàn)成本高等特點,因此其設(shè)計方法必然是自頂向下的從系統(tǒng)級到功能模塊的軟,、硬件協(xié)同設(shè)計,,達到軟、硬件的無縫結(jié)合,。
這么龐大的工作量顯然超出了單個工程師的能力,,因此需要按照層次化、結(jié)構(gòu)化的設(shè)計方法來實施,。首先由總設(shè)計師將整個軟件開發(fā)任務(wù)劃分為若干個可操作的模塊,,并對其接口和資源進行評估,編制出相應(yīng)的行為或結(jié)構(gòu)模型,,再將其分配給下一層的設(shè)計師,。這就允許多個設(shè)計者同時設(shè)計一個硬件系統(tǒng)中的不同模塊,,并為自己所設(shè)計的模塊負責;然后由上層設(shè)計師對下層模塊進行功能驗證,。
自頂向下的設(shè)計流程從系統(tǒng)級設(shè)計開始,,劃分為若干個二級單元,然后再把各個二級單元劃分為下一層次的基本單元,,一直下去,,直到能夠使用基本模塊或者IP核直接實現(xiàn)為止,如圖1-6所示,。流行的FPGA開發(fā)工具都提供了層次化管理,,可以有效地梳理錯綜復(fù)雜的層次,能夠方便地查看某一層次模塊的源代碼以修改錯誤,。
圖1-6 自頂向下的FPGA設(shè)計開發(fā)流程
在工程實踐中,,還存在軟件編譯時長的問題。由于大型設(shè)計包含多個復(fù)雜的功能模塊,,其時序收斂與仿真驗證復(fù)雜度很高,,為了滿足時序指標的要求,往往需要反復(fù)修改源文件,,再對所修改的新版本進行重新編譯,,直到滿足要求為止。這里面存在兩個問題:首先,,軟件編譯一次需要長達數(shù)小時甚至數(shù)周的時間,,這是開發(fā)所不能容忍的;其次,,重新編譯和布局布線后結(jié)果差異很大,,會將已滿足時序的電路破壞。因此必須提出一種有效提高設(shè)計性能,,繼承已有結(jié)果,,便于團隊化設(shè)計的軟件工具。FPGA廠商意識到這類需求,,由此開發(fā)出了相應(yīng)的邏輯鎖定和增量設(shè)計的軟件工具,。例如,Xilinx公司的解決方案就是PlanAhead,。
Planahead 允許高層設(shè)計者為不同的模塊劃分相應(yīng)FPGA芯片區(qū)域,,并允許底層設(shè)計者在在所給定的區(qū)域內(nèi)獨立地進行設(shè)計、實現(xiàn)和優(yōu)化,,等各個模塊都正確后,,再進行設(shè)計整合。如果在設(shè)計整合中出現(xiàn)錯誤,,單獨修改即可,,不會影響到其它模塊,。Planahead將結(jié)構(gòu)化設(shè)計方法、團隊化合作設(shè)計方法以及重用繼承設(shè)計方法三者完美地結(jié)合在一起,,有效地提高了設(shè)計效率,,縮短了設(shè)計周期。
不過從其描述可以看出,,新型的設(shè)計方法對系統(tǒng)頂層設(shè)計師有很高的要求,。在設(shè)計初期,他們不僅要評估每個子模塊所消耗的資源,,還需要給出相應(yīng)的時序關(guān)系,;在設(shè)計后期,需要根據(jù)底層模塊的實現(xiàn)情況完成相應(yīng)的修訂,。
典型FPGA開發(fā)流程
FPGA的設(shè)計流程就是利用EDA開發(fā)軟件和編程工具對FPGA芯片進行開發(fā)的過程,。FPGA的開發(fā)流程一般如圖1-7所示,,包括電路設(shè)計,、設(shè)計輸入、功能仿真,、綜合優(yōu)化,、綜合后仿真、實現(xiàn),、布線后仿真,、板級仿真以及芯片編程與調(diào)試等主要步驟。
圖1-7 FPGA開發(fā)的一般流程
1. 電路設(shè)計
在系統(tǒng)設(shè)計之前,,首先要進行的是方案論證,、系統(tǒng)設(shè)計和FPGA芯片選擇等準備工作。系統(tǒng)工程師根據(jù)任務(wù)要求,,如系統(tǒng)的指標和復(fù)雜度,,對工作速度和芯片本身的各種資源、成本等方面進行權(quán)衡,,選擇合理的設(shè)計方案和合適的器件類型,。一般都采用自頂向下的設(shè)計方法,把系統(tǒng)分成若干個基本單元,,然后再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止,。
2. 設(shè)計輸入
設(shè)計輸入是將所設(shè)計的系統(tǒng)或電路以開發(fā)軟件要求的某種形式表示出來,,并輸入給EDA工具的過程。常用的方法有硬件描述語言(HDL)和原理圖輸入方法等,。原理圖輸入方式是一種最直接的描述方式,,在可編程芯片發(fā)展的早期應(yīng)用比較廣泛,,它將所需的器件從元件庫中調(diào)出來,畫出原理圖,。這種方法雖然直觀并易于仿真,,但效率很低,且不易維護,,不利于模塊構(gòu)造和重用,。更主要的缺點是可移植性差,當芯片升級后,,所有的原理圖都需要作一定的改動,。目前,在實際開發(fā)中應(yīng)用最廣的就是HDL語言輸入法,,利用文本描述設(shè)計,,可以分為普通HDL和行為HDL。普通HDL有ABEL,、CUR等,,支持邏輯方程、真值表和狀態(tài)機等表達方式,,主要用于簡單的小型設(shè)計,。而在中大型工程中,主要使用行為HDL,,其主流語言是Verilog HDL和VHDL,。這兩種語言都是美國電氣與電子工程師協(xié)會(IEEE)的標準,其共同的突出特點有:語言與芯片工藝無關(guān),,利于自頂向下設(shè)計,,便于模塊的劃分與移植,可移植性好,,具有很強的邏輯描述和仿真功能,,而且輸入效率很高。
3. 功能仿真
功能仿真,,也稱為前仿真,,是在編譯之前對用戶所設(shè)計的電路進行邏輯功能驗證,此時的仿真沒有延遲信息,,僅對初步的功能進行檢測,。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關(guān)心的輸入信號組合成序列),,仿真結(jié)果將會生成報告文件和輸出信號波形,,從中便可以觀察各個節(jié)點信號的變化。如果發(fā)現(xiàn)錯誤,則返回設(shè)計修改邏輯設(shè)計,。常用的工具有Model Tech公司的ModelSim,、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。
4. 綜合優(yōu)化
所謂綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述,。綜合優(yōu)化根據(jù)目標與要求優(yōu)化所生成的邏輯連接,,使層次設(shè)計平面化,供FPGA布局布線軟件進行實現(xiàn),。就目前的層次來看,,綜合優(yōu)化(Synthesis)是指將設(shè)計輸入編譯成由與門、或門,、非門,、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,,而并非真實的門級電路,。真實具體的門級電路需要利用FPGA制造商的布局布線功能,根據(jù)綜合后生成的標準門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生,。為了能轉(zhuǎn)換成標準的門級結(jié)構(gòu)網(wǎng)表,,HDL程序的編寫必須符合特定綜合器所要求的風格。由于門級結(jié)構(gòu),、RTL級的HDL程序的綜合是很成熟的技術(shù),,所有的綜合器都可以支持到這一級別的綜合,。常用的綜合工具有Synplicity公司的Synplify/Synplify Pro軟件以及各個FPGA廠家自己推出的綜合開發(fā)工具,。
5. 綜合后仿真
綜合后仿真檢查綜合結(jié)果是否和原設(shè)計一致。在仿真時,,把綜合生成的標準延時文件反標注到綜合仿真模型中去,,可估計門延時帶來的影響。但這一步驟不能估計線延時,,因此和布線后的實際情況還有一定的差距,,并不十分準確。目前的綜合工具較為成熟,,對于一般的設(shè)計可以省略這一步,,但如果在布局布線后發(fā)現(xiàn)電路結(jié)構(gòu)和設(shè)計意圖不符,則需要回溯到綜合后仿真來確認問題之所在,。在功能仿真中介紹的軟件工具一般都支持綜合后仿真,。
6. 實現(xiàn)與布局布線
實現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,布局布線是其中最重要的過程,。布局將邏輯網(wǎng)表中的硬件原語和底層單元合理地配置到芯片內(nèi)部的固有硬件結(jié)構(gòu)上,,并且往往需要在速度最優(yōu)和面積最優(yōu)之間作出選擇。布線根據(jù)布局的拓撲結(jié)構(gòu),利用芯片內(nèi)部的各種連線資源,,合理正確地連接各個元件,。目前,F(xiàn)PGA的結(jié)構(gòu)非常復(fù)雜,,特別是在有時序約束條件時,,需要利用時序驅(qū)動的引擎進行布局布線。布線結(jié)束后,,軟件工具會自動生成報告,,提供有關(guān)設(shè)計中各部分資源的使用情況。由于只有FPGA芯片生產(chǎn)商對芯片結(jié)構(gòu)最為了解,,所以布局布線必須選擇芯片開發(fā)商提供的工具,。
7. 實現(xiàn)與布局布線
時序仿真,也稱為后仿真,,是指將布局布線的延時信息反標注到設(shè)計網(wǎng)表中來檢測有無時序違規(guī)(即不滿足時序約束條件或器件固有的時序規(guī)則,,如建立時間、保持時間等)現(xiàn)象,。時序仿真包含的延遲信息最全,,也最精確,能較好地反映芯片的實際工作情況,。由于不同芯片的內(nèi)部延時不一樣,,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線后,,通過對系統(tǒng)和各個模塊進行時序仿真,,分析其時序關(guān)系,估計系統(tǒng)性能,,以及檢查和消除競爭冒險是非常有必要的,。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。
8. 板級仿真與驗證
板級仿真主要應(yīng)用于高速電路設(shè)計中,,對高速系統(tǒng)的信號完整性,、電磁干擾等特征進行分析,一般都以第三方工具進行仿真和驗證,。
9. 芯片編程與調(diào)試
設(shè)計的最后一步就是芯片編程與調(diào)試,。芯片編程是指產(chǎn)生使用的數(shù)據(jù)文件(位數(shù)據(jù)流文件,Bitstream Generation),,然后將編程數(shù)據(jù)下載到FPGA芯片中,。其中,芯片編程需要滿足一定的條件,,如編程電壓,、編程時序和編程算法等方面。邏輯分析儀(Logic Analyzer,LA)是FPGA設(shè)計的主要調(diào)試工具,,但需要引出大量的測試管腳,,且LA價格昂貴。目前,,主流的FPGA芯片生產(chǎn)商都提供了內(nèi)嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope,、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用芯片少量的邏輯資源,,具有很高的實用價值,。
1.3.3 基于FPGA的SOC設(shè)計方法
基于FPGA的SOC設(shè)計理念將FPGA可編程的優(yōu)點帶到了SOC領(lǐng)域,其系統(tǒng)由嵌入式處理器內(nèi)核,、DSP單元,、大容量處理器、吉比特收發(fā)器,、混合邏輯,、IP以及原有的設(shè)計部分組成。相應(yīng)的FPGA規(guī)模大都在百萬門以上,,適合于許多領(lǐng)域,,如電信、計算機等行業(yè),。
系統(tǒng)設(shè)計方法是SOC常用的方法學(xué),,其優(yōu)勢在于,可進行反復(fù)修改并對系統(tǒng)架構(gòu)實現(xiàn)進行驗證,,包括SOC集成硬件和軟件組件之間的接口,。不過,目前仍存在很多問題,,最大的問題就是沒有通用的系統(tǒng)描述語言和系統(tǒng)級綜合工具,。隨著FPGA平臺的融入,將 SOC逐步地推向了實用,。SOC平臺的核心部分是內(nèi)嵌的處理內(nèi)核,其硬件是固定的,,軟件則是可編程的,;外圍電路則由FPGA的邏輯資源組成,大都以IP 的形式提供,,例如存儲器接口,、USB接口以及以太網(wǎng)MAC層接口等,用戶根據(jù)自己需要在內(nèi)核總線上添加,,并能自己訂制相應(yīng)的接口IP和外圍設(shè)備,。
基于FPGA的典型SOC開發(fā)流程為:
1.芯片內(nèi)的考慮
從設(shè)計生成開始,設(shè)計人員需要從硬件/軟件協(xié)同驗證的思路入手,以找出只能在系統(tǒng)集成階段才會被發(fā)現(xiàn)的軟,、硬件缺陷,。然后選擇合適的芯片以及開發(fā)工具,在綜合過程得到優(yōu)化,,隨后進行精確的實現(xiàn),,以滿足實際需求。由于設(shè)計規(guī)模越來越大,,工作頻率也到了數(shù)百兆赫茲,,布局布線的延遲將變得非常重要。為了確保滿足時序,,需要在布局布線后進行靜態(tài)時序分析,,對設(shè)計進行驗證。
2.板級驗證
在芯片設(shè)計完畢后,,需要再進行板級驗證,,以便在印刷電路板(PCB)上保證與最初設(shè)計功能一致。因此,,PCB布局以及信號完整性測試應(yīng)被納入設(shè)計流程,。由于芯片內(nèi)設(shè)計所做的任何改變都將反映在下游的設(shè)計流程中,各個過程之間的數(shù)據(jù)接口和管理也必須是無誤的,。預(yù)計SOC系統(tǒng)以及所必須的額外過程將使數(shù)據(jù)的大小成指數(shù)增長,,因此,管理各種數(shù)據(jù)集本身是急劇挑戰(zhàn)性的任務(wù),。