收藏: 全面解析FPGA基礎知識
FPGA (Field Programmable Gate Array)即現場可程式設計門陣列。它是在PLA、PAL、GAL、CPLD等可程式設計器件的基礎上進一步發展的產物。它是作為專用積體電路(ASIC)領域中的一種半定製電路,既解決了定製電路的不足,又克服了原有可程式設計器件閘電路數有限的缺點。
1、 FPGA簡介
FPGA普遍用於實現數位電路模組,使用者可對FPGA內部的邏輯模組和I/O模組重新配置,以實現使用者的需求。它還具有靜態可重複程式設計和動態在系統重構的特性,使得硬體的功能可以像軟體一樣通過程式設計來修改。可以毫不誇張的講,FPGA能完成任何數字器件的功能,下至簡單的74電路,上至高效能CPU,都可以用FPGA來實現。FPGA如同一張白紙或是一堆積木,工程師可以通過傳統的原理圖輸入法,或是硬體描述語言自由的設計一個數字系統。
2、FPGA發展史
FPGA的發展歷史如下圖所示。相對於PROM、PAL/GAL、CPLD而言,FPGA規模更大效能更高。
圖1 FPGA發展史
FPGA晶片主流生產廠家包括Xilinx、Altera、Lattice、Microsemi,其中前兩家的市場份額合計達到88%。目前FPGA主流廠商全部為美國廠商。國產FPGA由於研發起步較美國晚至少20年,目前還處於成長期,僅限於低端,在通訊市場還沒有成熟應用。
2015年12月,Intel公司斥資167億美元收購了Altera公司。Altera被收購後不久即制定了英特爾處理器與FPGA整合的產品路線圖。這兩種產品整合的好處是可以提供創新的異構多核架構,適應例如人工智慧等新市場的需求,同時能大幅縮減功耗。
圖2 FPGA在電信領域的應用歷史
FPGA在航天、軍工、電信領域有非常成熟和廣泛的應用。以電信領域為例,在電信裝置一體機階段,FPGA由於其程式設計的靈活性以及高效能被應用網路協議解析以及介面轉換。
在NFV(NetworkFunction Virtualization階段,FPGA基於通用伺服器和Hypervisor實現網後設資料面5倍的效能提升,同時能夠被通用Openstack框架管理編排。
在雲時代,FPGA已經被作為基本IaaS資源在公有云提供開發服務和加速服務,AWS、華為、BAT均有類似通用服務提供。
截至目前,Intel的Stratix 10器件已被成功應用於微軟實時人工智慧雲平臺Brainwave專案。
3、兩家主流FPGA公司發展近況
Xilinx聚焦晶片領先和豐富的加速解決方案,通過開放策略獲得主流雲平臺支援,確立了其在資料中心的領先地位。其UltraScale+系列FPGA領先友商1年多,使其在雲平臺競爭中佔領先機,其VU9P器件被大量應用於包括AWS、Baidu、Ali、Tencent及華為在內的多家公司的雲端計算平臺。
為滿足加速器領域對FPGA晶片日益遞增的效能需求,Xilinx已釋出面向資料中心的下一代ACAP晶片架構、推出7nm Everest器件。此器件已不屬於傳統的FPGA,它整合了ARM、DSP、Math Engine處理器陣列等核心,將於2019年量產。相較於VU9P,Everest支援的AI處理效能將能提升20倍。
Intel則提供從硬體到平臺到應用的全棧解決方案,不開放硬體和平臺設計以避免生態碎片化,投入巨大但進展緩慢。
圖3 Xilinx產品系列圖
圖4 Intel(以Stratix系列為例)產品工藝年代
FPGA在資料中心伺服器市場的實際應用中存在一定技術難點,具體包括如下幾方面:
1、程式設計門檻較高:硬體描述語言不同於軟體開發語言,需要開發者對底層硬體有著較深刻的認識;因此人才也就成為限制FPGA應用的一個重要因素。據瞭解,目前國內從事FPGA開發的人員初步估計大約兩萬多人。
2、整合難度較大:FPGA開發與應用需要軟硬體的協同,包括使用高階語言的系統建模、硬體程式碼(電路)設計、硬體程式碼模擬、底層驅動軟體與硬體邏輯的聯調等等。
3、開發週期相對軟體要長:硬體開發比軟體開發過程複雜,除錯周期也被拉長。
4、很難獲取獨立邏輯IP。
4、FPGA整體結構
FPGA架構主要包括可配置邏輯塊CLB(Configurable Logic Block)、輸入輸出塊IOB(Input Output Block)、內部連線(Interconnect)和其它內嵌單元四個部分。
CLB是FPGA的基本邏輯單元。實際數量和特性會依器件的不同而改變,但是每個CLB都包含一個由4或6個輸入、若干選擇電路(多路複用器等)和觸發器組成的可配置開關矩陣。開關矩陣具有高度的靈活性,經配置可以處理組合型邏輯、移位暫存器或 RAM。
FPGA可支援許多種I/O標準,因而可以為系統設計提供理想的介面橋接。FPGA 內的I/O按bank分組,每個bank能獨立支援不同的I/O標準。目前最先進的FPGA提供了十多個I/O bank,能夠提供靈活的I/O支援。
CLB 提供了邏輯效能,靈活的互連佈線則負責在CLB和I/O之間傳遞訊號。佈線有幾種型別,從設計用於專門實現 CLB 互連(短線資源)、到器件內的高速水平和垂直長線(長線資源)、再到時鐘與其它全域性訊號的全域性低skew佈線(全域性性專用佈線資源)。一般,各廠家設計軟體會將互連佈線任務隱藏起來,使用者根本看不到,從而大幅降低了設計複雜性。
內嵌硬核單元包括RAM、DSP、DCM(數字時鐘管理模組)及其它特定介面硬核等,FPGA器件內部結構如下示意圖。
圖5 FPGA器件內部結構圖
一般來說,器件型號數字越大,表示器件能提供的邏輯資源規模越大。在FPGA器件選型時,使用者需要對照此表格,根據業務對邏輯資源(CLB)、內部BlockRAM、介面(高速Serdes對數)、數字訊號處理(DSP硬核數)以及今後擴充套件等多方面的需求,綜合考慮專案最合適的邏輯器件。
5、FPGA開發流程
FPGA的設計流程就是利用EDA開發軟體和程式設計工具對FPGA晶片進行開發的過程。FPGA的開發流程一般如下圖所示,包括功能定義/器件選型、設計輸入、功能模擬、邏輯綜合、佈局佈線與實現、程式設計除錯等主要步驟。
1、功能定義/器件選型:在FPGA設計專案開始之前,必須有系統功能的定義和模組的劃分,另外就是要根據任務要求,如系統的功能和複雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進行權衡,選擇合適的設計方案和合適的器件型別。
2、 設計輸入:設計輸入指使用硬體描述語言將所設計的系統或電路用程式碼表述出來。最常用的硬體描述語言是Verilog HDL。
3、 功能模擬:功能模擬指在邏輯綜合之前對使用者所設計的電路進行邏輯功能驗證。模擬前,需要搭建好測試平臺並準備好測試激勵,模擬結果將會生成報告檔案和輸出訊號波形,從中便可以觀察各個節點訊號的變化。如果發現錯誤,則返回設計修改邏輯設計。常用模擬工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS等軟體。
4、 邏輯綜合:所謂綜合就是將較高階抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連線,使層次設計平面化,供FPGA佈局佈線軟體進行實現。就目前的層次來看,綜合優化是指將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連線網表,而並非真實的門級電路。
真實具體的門級電路需要利用FPGA製造商的佈局佈線功能,根據綜合後生成的標準門級結構網表來產生。為了能轉換成標準的門級結構網表,HDL程式的編寫必須符合特定綜合器所要求的風格。常用的綜合工具有Synplicity公司的Synplify/Synplify Pro軟體以及各個FPGA廠家自己推出的綜合開發工具。
5、佈局佈線與實現:佈局佈線可理解為利用實現工具把邏輯對映到目標器件結構的資源中,決定邏輯的最佳佈局,選擇邏輯與輸入輸出功能連結的佈線通道進行連線,併產生相應檔案(如配置檔案與相關報告);實現是將綜合生成的邏輯網表配置到具體的FPGA晶片上。由於只有FPGA晶片生產商對晶片結構最為了解,所以佈局佈線必須選擇晶片開發商提供的工具。
6、程式設計除錯:設計的最後一步就是程式設計除錯。晶片程式設計是指產生使用的資料檔案(位資料流檔案,Bitstream Generaon),將程式設計資料載入到FPGA晶片中;之後便可進行上板測試。最後將FPGA檔案(如.bit檔案)從電腦下載到單板上的FPGA晶片中。
6、如何使用FPGA
FPGA開發完畢,最終得到驗證好的載入檔案。輸出載入檔案後,即可開始正常業務處理和驗證(以軟體載入方式為例,描述整個過程)
1、邏輯載入;
2、單板軟體載入邏輯後,需要復位邏輯;
3、復位完成後,軟體需等待等待一段時間至邏輯鎖相環工作穩定;
4、軟體啟動對邏輯的外部RAM、內部Block RAM、DDRC等的自檢操作;
5、軟體完成自檢以後,對邏輯所有可寫RAM空間及暫存器進行初始化操作;
6、初始化完畢,軟體參考邏輯晶片手冊配置表項及暫存器;
7、邏輯準備好,可以開始處理業務。
7、FPGA適用場景
FPGA適合非規則性多併發、密集計算及協議解析處理場景,例如人工智慧、基因測序、視訊編碼、資料壓縮、圖片處理、網路處理等各領域的加速
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557822/viewspace-2645203/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 值得收藏的資料分析基礎知識
- 超全面的Linux基礎知識的梳理Linux
- 全面的MySQL基礎運維知識點(一)MySql運維
- 全面的MySQL基礎運維知識點(三)MySql運維
- 全面的MySQL基礎運維知識點(二)MySql運維
- 知識圖譜 KnowledgeGraph基礎解析
- 使用Jquery解析Json基礎知識jQueryJSON
- 10張圖幫你全面瞭解JavaScript基礎知識JavaScript
- 小白系列:資料庫基礎知識解析資料庫
- 基礎知識
- 【FPGA基礎】Latch基礎FPGA
- 應用基礎框架全面解析框架
- AI 基礎知識AI
- Webpack 基礎知識Web
- Dart基礎知識Dart
- RabbitMQ基礎知識MQ
- webpack基礎知識Web
- javascript基礎知識JavaScript
- ThinkPHP基礎知識PHP
- Laravel基礎知識Laravel
- Redis基礎知識Redis
- Docker基礎知識Docker
- 程式基礎知識
- Envoy基礎知識
- DockerFile基礎知識Docker
- Nginx基礎知識Nginx
- CSS基礎知識CSS
- Java基礎知識Java
- PRML 基礎知識
- BGP基礎知識
- PHP基礎知識PHP
- React基礎知識React
- httpclient基礎知識HTTPclient
- HBase基礎知識
- Jquery基礎知識jQuery
- js基礎知識JS
- PGA基礎知識
- Javascript 基礎知識JavaScript