********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2012.1.7
類別:FPGA開發
********************************LoongEmbedded********************************
備忘:下面的描述基於ALTERA系列的FPGA晶片,而且是第一次學習FPGA,其中的一部分內容是參考一些資料總結的,個人獨特的分析和見解還偏少。
1. FPGA概述
FPGA是英文Field Programmable Gate Array的縮寫,即現場可程式化門陣列,它是在PAL、GAL、EPLD等可程式化器件的基礎上進一步發展的產物。它是作為專用整合電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可程式化器件門電路數有限的缺點
2. FPGA晶片結構
FPGA晶片主要由三部分組成,分別是IOE(input output element,輸入輸出單元)、LAB(logic array block,邏輯陣列塊,對於Xilinx稱之為可配置邏輯塊CLB)和Interconnect(內部連接線)。
2.1 IOE
IOE是晶片與外部電路的物理介面,主要完成不同電氣特性下輸入/輸出訊號的驅動與匹配要求,比如從基本的LVTTL/LVCMOS介面到PCI/LVDS/RSDS甚至各種各樣的差分介面,從5V相容到3.3V/2.5V/1.8V/1.5V的電平介面,下面是ALTERA公司的Cyclone IV EP4CE115F29裝置的IOE結構
圖1 EP4CE115F29裝置的IOE結構圖
FPGA的IOE按組分類,每組都能夠獨立地支援不同的I/O標準,通過軟體的靈活配置,可匹配不同的電器標準與IO物理特性,而且可以調整驅動電流的大小,可以改變上/下拉電阻,Cyclone IV裝置有8個IO blank(組),見:
圖2 Cyclone IV裝置的IO組
2.2 LAB
LAB是FPGA的基本邏輯單元,其實際的數量和特性依據所採用的器件的不同而不同,EP4CE115F29裝置的每個LAB的布局包括16個LE、LAB控制訊號、LE carry chains、Register chains和Local interconnect,其LAB結構圖如下:
圖3 LAB結構圖
LE是Cyclone IV裝置最小的邏輯單元,每個LE主要有LUT和寄存器組成的,
圖4 LE的結構圖
尋找表LUT(Look-Up-Table)其本質是一個靜態儲存空間SRAM,目前FPGA多採用4輸入的LUT,每個LUT可以看作一個有4位地址線的16x1的RAM。當我們通過原理圖或HDL語言描述了一個邏輯電路後,FPGA開發軟體會自動計算邏輯電路的所有可能的結果,並把結果事先寫入RAM。這樣,在FPGA工作時,每輸入一個訊號進行邏輯運算就等於輸入一個地址進行查表,找出地址對應的內容,然後輸出。
圖5 LUT的實現原理圖
2.3 Interconnect
FPGA內部連接線很豐富,根據資料手冊的描述,主要有圖3中的Row interconnect、column interconnect、Direct link interconnect、和Local interconnect和Register chain interconnect(寄存器之間串連的連接線)。
內部連接線聯通FPGA內部的所有單元,而連線的長度和工藝決定著訊號再連接線上的驅動能力和傳輸速度。在實際開發中,設計者不需要直接選擇連接線,布局布線器可自動地根據輸入邏輯網表(這由綜合產生)的拓撲結構和約束條件選擇連接線來連通各個邏輯單元,所以,從本質上來說,布線資源的使用方法和設計的結果有密切和直接、直接的關係。
3. FPGA工作原理
FPGA利用小型尋找表(16×1RAM)來實現組合邏輯,每個尋找表串連到一個D觸發器的輸入端(見圖4),觸發器再來驅動其他邏輯電路或驅動I/O,由此構成了既可實現組合邏輯功能又可實現時序邏輯功能的基本邏輯單元模組,這些模組間利用金屬連線互相串連或串連到I/O模組。FPGA的邏輯是通過向內部靜態儲存單元載入編程資料來實現的,儲存在儲存空間單元中的值決定了邏輯單元的邏輯功能以及各模組之間或模組與I/O間的聯結方式,並最終決定了FPGA所能實現的功能,FPGA允許無限次的編程。
4. FPGA開發流程
原理圖和HDL(Hardware description language,硬體描述語言)是兩種最常用的數字硬體電路描述方法,其中HDL設計法具有更好的可移植性、通用性和模組劃分與重用性的特點,在目前的工程設計中被廣泛使用,下面對FPGA設計熟悉電路時的開發流程是基於HDL的。
圖6 FPGA的開發流程
1) 系統功能設計
在系統設計之前,首先要進行的是方案論證、系統設計和FPGA晶片選擇等準備工作。系統工程師根據任務要求,如系統的指標和複雜度,對工作速度和晶片本身的各種資源、成本等方面進行權衡,選擇合理的設計方案和合適的器件類型。一般都採用自頂向下的設計方法,把系統分成若干個基本單元,然後再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。
2) RTL級HDL設計
RTL級(Register Transfer Level,寄存器傳輸級)指不關注寄存器和組合邏輯的細節(如使用了多少個邏輯門、邏輯門的串連拓撲結構等),通過描述資料在寄存器之間的流動和如何處理、控制這些資料流動的模型的HDL設計方法。RTL級比門級更抽象,同時也更簡單和高效。RTL級的最大特點是可以直接用綜合工具將其綜合成為門級網表,其中RTL級設計直接決定著系統的功能和效率。
3) RTL級模擬
也稱為功能(行為)模擬,或是綜合前模擬,是在編譯之前對使用者所設計的電路進行邏輯功能驗證,此時的模擬沒有延遲資訊,僅對初步的功能進行檢測。模擬前,要先利用波形編輯器和HDL等建立波形檔案和測試向量(即將所關心的輸入訊號組合成序列),模擬結果將會產生報告檔案和輸出訊號波形,從中便可以觀察各個節點訊號的變化。如果發現錯誤,則返回設計修改邏輯設計。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟體。雖然功能模擬不是FPGA開發過程中的必需步驟,但卻是系統設計中最關鍵的一步。
為了提高功能模擬的效率,需要建立測試平台testbench,其測試激勵一般使用行為級HDL語言描述,其中RTL級模組是可綜合的,它是行為級模組的一個子集合。
4) 綜合
所謂綜合就是將較進階抽象層次的描述轉化成較低層次的描述。綜合最佳化根據目標與要求最佳化所產生的邏輯串連,使層次設計平面化,供FPGA布局布線軟體進行實現。就目前的層次來看,綜合最佳化(Synthesis)是指將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯串連網表,而並非真實的門級電路。真實具體的門級電路需要利用FPGA製造商的布局布線功能,根據綜合後產生的標準門級結構網表來產生。為了能轉換成標準的門級結構網表,HDL程式的編寫必須符合特定綜合器所要求的風格。由於門級結構、RTL級的HDL程式的綜合是很成熟的技術,所有的綜合器都可以支援到這一層級的綜合。常用的綜合工具有Synplicity公司的Synplify/Synplify
Pro軟體以及各個FPGA廠家自己推出的綜合開發工具。
5) 門級模擬
也稱為綜合後模擬,綜合後模擬檢查綜合結果是否和原設計一致。在模擬時,把綜合產生的標準延時檔案反標註到綜合模擬模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線後的實際情況還有一定的差距,並不十分準確。目前的綜合工具較為成熟,對於一般的設計可以省略這一步,但如果在布局布線後發現電路結構和設計意圖不符,則需要回溯到綜合後模擬來確認問題之所在。在功能模擬中介紹的軟體工具一般都支援綜合後模擬。
6) 布局布線
實現是將綜合產生的邏輯網表配置到具體的FPGA晶片上,將工程的邏輯和時序與器件的可用資源匹配。布局布線是其中最重要的過程,布局將邏輯網表中的硬體原語和底層單元合理地配置到晶片內部的固有硬體結構上,並且往往需要在速度最優和面積最優之間作出選擇。布線根據布局的拓撲結構,利用晶片內部的各種連線資源,合理正確地串連各個元件。也可以簡單地將布局布線理解為對FPGA內部尋找表和寄存器資源的合理配置,布局可以被理解挑選可實現設計網表的最優的資源群組合,而布線就是將這些尋找表和寄存器資源以最優方式串連起來。
目前,FPGA的結構非常複雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行布局布線。布線結束後,軟體工具會自動產生報告,提供有關設計中各部分資源的使用方式。由於只有FPGA晶片生產商對晶片結構最為瞭解,所以布局布線必須選擇晶片開發商提供的工具。
7) 時序模擬
是指將布局布線的延時資訊反標註到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。時序模擬包含的延遲資訊最全,也最精確,能較好地反映晶片的實際工作情況。由於不同晶片的內部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線後,通過對系統和各個模組進行時序模擬,分析其時序關係,估計系統效能,以及檢查和消除競爭冒險是非常有必要的。
8) FPGA板級調試
通過編程器將布局布線後的設定檔下載至FPGA中,對其硬體進行編程。設定檔一般為.pof或.sof檔案格式,下載的方式包括AS(主動)、PS(被動)、JTAG(邊界掃描)等方式。
邏輯分析儀(Logic Analyzer,LA)是FPGA設計的主要調試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA晶片生產商都提供了內嵌的線上邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要佔用晶片少量的邏輯資源,具有很高的實用價值。