(文章來源:T客幫)
隨著云計算,大數(shù)據(jù)和人工智能技術(shù)應(yīng)用,單靠 CPU 已經(jīng)無法滿足各行各業(yè)的算力需求。海量數(shù)據(jù)分析、機器學(xué)習(xí)和邊緣計算等場景需要計算架構(gòu)多樣化,需要不同的處理器架構(gòu)和 GPU,NPU 和 FPGA 等異構(gòu)計算技術(shù)協(xié)同,滿足特定領(lǐng)域的算法和專用計算需求。今天,筆者帶大家詳細(xì)了解下 FPGA 技術(shù)。
FPGA 是英文 Field Programmable Gate Array 簡稱,即現(xiàn)場可編程門陣列。它是在 PLA、PAL、GAL、CPLD 等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路 (ASIC) 領(lǐng)域中的一種半定制電路,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。
FPGA 普遍用于實現(xiàn)數(shù)字電路模塊,用戶可對 FPGA 內(nèi)部的邏輯模塊和 I/O 模塊重新配置,以實現(xiàn)用戶的需求。它還具有靜態(tài)可重復(fù)編程和動態(tài)在系統(tǒng)重構(gòu)的特性,使得硬件的功能可以像軟件一樣通過編程來修改??梢院敛豢鋸埖闹v,F(xiàn)PGA 能完成任何數(shù)字器件的功能,下至簡單的 74 電路,上至高性能 CPU,都可以用 FPGA 來實現(xiàn)。FPGA 如同一張白紙或是一堆積木,工程師可以通過傳統(tǒng)的原理圖輸入法,或是硬件描述語言自由的設(shè)計一個數(shù)字系統(tǒng)。
FPGA 架構(gòu)主要包括可配置邏輯塊 CLB(Configurable Logic Block)、輸入輸出塊 IOB(Input Output Block)、內(nèi)部連線(Interconnect)和其它內(nèi)嵌單元四個部分。CLB 是 FPGA 的基本邏輯單元。實際數(shù)量和特性會依器件的不同而改變,但是每個 CLB 都包含一個由 4 或 6 個輸入、若干選擇電路(多路復(fù)用器等)和觸發(fā)器組成的可配置開關(guān)矩陣。開關(guān)矩陣具有高度的靈活性,經(jīng)配置可以處理組合型邏輯、移位寄存器或 RAM。
FPGA 可支持許多種 I/O 標(biāo)準(zhǔn),因而可以為系統(tǒng)設(shè)計提供理想的接口橋接。FPGA 內(nèi)的 I/O 按 bank 分組,每個 bank 能獨立支持不同的 I/O 標(biāo)準(zhǔn)。目前最先進(jìn)的 FPGA 提供了十多個 I/O bank,能夠提供靈活的 I/O 支持。
CLB 提供了邏輯性能,靈活的互連布線則負(fù)責(zé)在 CLB 和 I/O 之間傳遞信號。布線有幾種類型,從設(shè)計用于專門實現(xiàn) CLB 互連(短線資源)、到器件內(nèi)的高速水平和垂直長線(長線資源)、再到時鐘與其它全局信號的全局低 skew 布線(全局性專用布線資源)。一般,各廠家設(shè)計軟件會將互連布線任務(wù)隱藏起來,用戶根本看不到,從而大幅降低了設(shè)計復(fù)雜性。

一般來說,器件型號數(shù)字越大,表示器件能提供的邏輯資源規(guī)模越大。在 FPGA 器件選型時,用戶需要對照此表格,根據(jù)業(yè)務(wù)對邏輯資源(CLB)、內(nèi)部 BlockRAM、接口(高速 Serdes 對數(shù))、數(shù)字信號處理(DSP 硬核數(shù))以及今后擴展等多方面的需求,綜合考慮項目最合適的邏輯器件。
功能定義/器件選型:在 FPGA 設(shè)計項目開始之前,必須有系統(tǒng)功能的定義和模塊的劃分,另外就是要根據(jù)任務(wù)要求,如系統(tǒng)的功能和復(fù)雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進(jìn)行權(quán)衡,選擇合適的設(shè)計方案和合適的器件類型。設(shè)計輸入:設(shè)計輸入指使用硬件描述語言將所設(shè)計的系統(tǒng)或電路用代碼表述出來。最常用的硬件描述語言是 Verilog HDL。
功能仿真:功能仿真指在邏輯綜合之前對用戶所設(shè)計的電路進(jìn)行邏輯功能驗證。仿真前,需要搭建好測試平臺并準(zhǔn)備好測試激勵,仿真結(jié)果將會生成報告文件和輸出信號波形,從中便可以觀察各個節(jié)點信號的變化。如果發(fā)現(xiàn)錯誤,則返回設(shè)計修改邏輯設(shè)計。常用仿真工具有 Model Tech 公司的 ModelSim、Sysnopsys 公司的 VCS 等軟件。
邏輯綜合:所謂綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。綜合優(yōu)化根據(jù)目標(biāo)與要求優(yōu)化所生成的邏輯連接,使層次設(shè)計平面化,供 FPGA 布局布線軟件進(jìn)行實現(xiàn)。就目前的層次來看,綜合優(yōu)化是指將設(shè)計輸入編譯成由與門、或門、非門、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,而并非真實的門級電路。
真實具體的門級電路需要利用 FPGA 制造商的布局布線功能,根據(jù)綜合后生成的標(biāo)準(zhǔn)門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生。為了能轉(zhuǎn)換成標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表,HDL 程序的編寫必須符合特定綜合器所要求的風(fēng)格。常用的綜合工具有 Synplicity 公司的 Synplify/Synplify Pro 軟件以及各個 FPGA 廠家自己推出的綜合開發(fā)工具。
布局布線與實現(xiàn):布局布線可理解為利用實現(xiàn)工具把邏輯映射到目標(biāo)器件結(jié)構(gòu)的資源中,決定邏輯的最佳布局,選擇邏輯與輸入輸出功能鏈接的布線通道進(jìn)行連線,并產(chǎn)生相應(yīng)文件 (如配置文件與相關(guān)報告);實現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的 FPGA 芯片上。由于只有 FPGA 芯片生產(chǎn)商對芯片結(jié)構(gòu)最為了解,所以布局布線必須選擇芯片開發(fā)商提供的工具。
編程調(diào)試:設(shè)計的最后一步就是編程調(diào)試。芯片編程是指產(chǎn)生使用的數(shù)據(jù)文件 (位數(shù)據(jù)流文件,Bitstream Generaon),將編程數(shù)據(jù)加載到 FPGA 芯片中;之后便可進(jìn)行上板測試。最后將 FPGA 文件(如.bit 文件)從電腦下載到單板上的 FPGA 芯片中。
FPGA 開發(fā)完畢,最終得到驗證好的加載文件。輸出加載文件后,即可開始正常業(yè)務(wù)處理和驗證 (以軟件加載方式為例,描述整個過程)。1、邏輯加載;2、單板軟件加載邏輯后,需要復(fù)位邏輯;3、復(fù)位完成后,軟件需等待等待一段時間至邏輯鎖相環(huán)工作穩(wěn)定;4、軟件啟動對邏輯的外部 RAM、內(nèi)部 Block RAM、DDRC 等的自檢操作。
5、軟件完成自檢以后,對邏輯所有可寫 RAM 空間及寄存器進(jìn)行初始化操作;6、初始化完畢,軟件參考邏輯芯片手冊配置表項及寄存器;7、邏輯準(zhǔn)備好,可以開始處理業(yè)務(wù)。7、FPGA 適用場景FPGA 適合非規(guī)則性多并發(fā)、密集計算及協(xié)議解析處理場景,例如人工智能、基因測序、視頻編碼、數(shù)據(jù)壓縮、圖片處理、網(wǎng)絡(luò)處理等各領(lǐng)域的加速。
? ? ? ?(責(zé)任編輯:fqj)
電子發(fā)燒友App























評論