1 引言
之前大多數(shù)軟件都是與它們各自的硬件一起發(fā)布,沒有辦法對其進(jìn)行更改。但隨著技術(shù)的成熟,制造商找到了在現(xiàn)有硬件上更新軟件以增加附加功能的方法。
現(xiàn)在,想象一下未來硬件更新也成為可能——不是很有趣嗎?
那么,這種可編程硬件,其子系統(tǒng)配置甚至在制造后也可以修改,屬于可重構(gòu)系統(tǒng)的范疇。而支持可重構(gòu)計(jì)算的最主要的集成電路是FPGA,即可編程門陣列的縮寫。
FPGA使您可以編程產(chǎn)品功能,適應(yīng)新標(biāo)準(zhǔn),并在產(chǎn)品安裝在現(xiàn)場后針對特定應(yīng)用重新配置硬件——因此稱為“現(xiàn)場可編程”。而“門陣列”指的是其架構(gòu)中存在的二維邏輯門陣列。
所有現(xiàn)代個(gè)人計(jì)算機(jī),包括臺(tái)式機(jī)、筆記本、智能手機(jī)和平板電腦,都是通用計(jì)算機(jī)的例子。通用計(jì)算采用“馮·諾依曼”方法,即指令獲取和數(shù)據(jù)操作不能同時(shí)發(fā)生。因此,它們是順序機(jī)器,其性能也受到限制。
另一方面,我們有應(yīng)用特定集成電路(ASIC),這些電路是為特定任務(wù)定制的,例如數(shù)字語音記錄器或高效的比特幣礦工。ASIC使用空間方法來實(shí)現(xiàn)只實(shí)現(xiàn)一個(gè)特定應(yīng)用程序,并將電路中的元件針對該應(yīng)用程序進(jìn)行了高度優(yōu)化,提供了最大的性能。但是由于ASIC的電路結(jié)構(gòu)非常專門化,它只能用于執(zhí)行被設(shè)計(jì)的特定任務(wù),不能用于其他任務(wù)。
那么,為了獲得ASIC的高性能,是否需要犧牲通用處理器的靈活性呢?
實(shí)際上FPGA處于這兩種架構(gòu)范式之間,具有一定的靈活性和可重構(gòu)性!
雖然FPGA具有可重新編程和相對較低的NRE(非重復(fù)性工程)成本等優(yōu)勢,但與ASIC相比,F(xiàn)PGA的能源效率較低(指在完成特定計(jì)算任務(wù)時(shí)所消耗的能量與計(jì)算任務(wù)完成的速度之比),且不適用于大規(guī)模生產(chǎn)。
因此,ASIC和FPGA具有不同的優(yōu)勢和價(jià)值主張。通常,大多數(shù)設(shè)備制造商會(huì)使用FPGA進(jìn)行原型設(shè)計(jì),因?yàn)樗鼈兛梢钥焖俚蜏y試不同的設(shè)計(jì),且具有一定的靈活性。而在確定了最終的設(shè)計(jì)之后,制造商通常會(huì)使用ASIC進(jìn)行大規(guī)模生產(chǎn),以獲得更高的性能和更低的成本。
過去,F(xiàn)PGA通常被用于較低速度和復(fù)雜設(shè)計(jì),因?yàn)镕PGA的電路結(jié)構(gòu)相對復(fù)雜處理速度相對較低;且其可編程性和靈活性使FPGA更適用于那些需要實(shí)現(xiàn)較為復(fù)雜設(shè)計(jì)的場合。但是現(xiàn)在隨著FPGA技術(shù)的不斷發(fā)展和改進(jìn),F(xiàn)PGA已經(jīng)能夠?qū)崿F(xiàn)更高的處理速度和更優(yōu)化的電路結(jié)構(gòu)。目前,F(xiàn)PGA已經(jīng)可以輕松地實(shí)現(xiàn)超過500MHz的處理性能基準(zhǔn)。
2 FPGA的內(nèi)部架構(gòu)
1985年,一家名為Xilinx的半導(dǎo)體制造公司發(fā)明了第一個(gè)商業(yè)化的FPGA芯片XC2064。另一家在2015年被英特爾收購的公司Altera也推動(dòng)了市場的發(fā)展,并與Xilinx一起推動(dòng)了FPGA技術(shù)的發(fā)展。
FPGA起源于相對較簡單的技術(shù),如可編程只讀存儲(chǔ)器(PROM)和可編程邏輯器件(PLD),如PAL、PLA或復(fù)雜PLD(CPLD)。
FPGA由三個(gè)主要部分組成:
-
可配置邏輯塊 - 實(shí)現(xiàn)邏輯功能。 -
可編程互聯(lián) - 實(shí)現(xiàn)路由功能。 -
可編程輸入/輸出塊 - 與外部元件連接。
邏輯塊實(shí)現(xiàn)設(shè)計(jì)所需的邏輯功能,由各種組件組成,例如晶體管對、查找表(LUT)、觸發(fā)器和多路復(fù)用器。
您可以將邏輯塊視為單獨(dú)的模塊,就像樂高積木一樣,并且可以并行操作。但與樂高積木不同的是,邏輯塊是可配置的,即其內(nèi)部狀態(tài)可以進(jìn)行控制,并且可以通過編程互聯(lián)將它們連接在一起以構(gòu)建有意義的東西。
可編程互聯(lián)的層次結(jié)構(gòu)用于在可配置邏輯塊(CLB)之間分配資源;其中路由路徑包含可通過反熔絲或基于存儲(chǔ)器的技術(shù)連接的具有不同長度的電線段。
每個(gè)CLB都與交換矩陣相結(jié)合,以訪問通用路由結(jié)構(gòu)。交換矩陣提供可編程的多路復(fù)用器,用于選擇給定路由通道中的信號(hào),并因此連接垂直和水平線。
最后,輸入/輸出塊(IOB)用于將CLB和路由架構(gòu)與外部元件接口。
在早期的FPGA芯片中,沒有處理器來運(yùn)行任何軟件,實(shí)現(xiàn)應(yīng)用程序意味著從頭設(shè)計(jì)電路。因此,我們可以將FPGA配置得像OR門一樣簡單,也可以像多核處理器一樣復(fù)雜。
但是自XC2064以來,F(xiàn)PGA的基本架構(gòu)已經(jīng)通過添加更多專門的可編程功能塊(如ALU、塊RAM、多路復(fù)用器、DSP-48和微處理器)而得到發(fā)展。
3 FPGA設(shè)計(jì)流程
設(shè)計(jì)流程描述了在物理板上實(shí)現(xiàn)和編程任何給定邏輯的流程。于該流程與軟件開發(fā)生命周期(SDLC)類比,我將其稱為 FPGA 開發(fā)生命周期(FDLC)。
FPGA架構(gòu)設(shè)計(jì)流程包括設(shè)計(jì)輸入、邏輯綜合、設(shè)計(jì)實(shí)現(xiàn)、設(shè)備編程和設(shè)計(jì)驗(yàn)證等步驟。然而,具體步驟因制造商而異。
4 設(shè)計(jì)輸入
邏輯的描述可以使用原理圖編輯器、有限狀態(tài)機(jī)(FSM)編輯器或硬件描述語言(HDL)來制作。這是通過從給定庫中選擇組件并將設(shè)計(jì)函數(shù)直接映射到所選的計(jì)算塊來完成的。
當(dāng)設(shè)計(jì)具有大量功能時(shí),圖形化管理變得困難,此時(shí)可以使用HDL以結(jié)構(gòu)化或行為方式捕捉設(shè)計(jì)。除了已經(jīng)成為最常用的HDL語言之一的VHDL和Verilog之外,還有一些類似于C語言的HDL語言可供選擇,如Handel-C、Impulse C和SystemC等。
使用HDL進(jìn)行設(shè)計(jì)描述,可以更直觀地表達(dá)設(shè)計(jì)的結(jié)構(gòu)和行為,并方便設(shè)計(jì)的復(fù)用和修改。同時(shí),HDL還可以進(jìn)行仿真驗(yàn)證,確保設(shè)計(jì)的正確性和可靠性。因此,HDL在FPGA設(shè)計(jì)中具有廣泛的應(yīng)用價(jià)值。
5 邏輯綜合
這個(gè)過程將上述VHDL代碼翻譯成設(shè)備網(wǎng)表格式,以描述具有邏輯元素的完整電路。綜合過程涉及檢查代碼語法和分析設(shè)計(jì)體系結(jié)構(gòu)的層次結(jié)構(gòu)。接下來是將代碼與優(yōu)化一起編譯,并將生成的網(wǎng)表保存為.ngc文件。
6 設(shè)計(jì)實(shí)現(xiàn)
設(shè)計(jì)實(shí)現(xiàn)過程包括以下步驟:
-
翻譯:合并所有輸入網(wǎng)表到邏輯設(shè)計(jì)文件中,生成 .ngd 文件。用戶約束文件為端口指定物理元素。
-
映射:將.ngd文件中定義的邏輯映射到FPGA器件的組件上,并生成 .ncd 文件。
-
布局布線:按照約束條件,將上述過程中的子塊放置到邏輯塊中,然后連接這些塊。
7 設(shè)備編程
將上述路由好的設(shè)計(jì)加載并轉(zhuǎn)換為FPGA支持的格式。將路由好的.ncd文件傳遞給BitGen程序,生成一個(gè)包含所有FPGA編程信息的比特流文件。
8 設(shè)計(jì)驗(yàn)證
這個(gè)過程是與設(shè)計(jì)流程一起完成的,以確保邏輯行為符合預(yù)期。這個(gè)過程涉及以下仿真:
-
行為仿真(RTL仿真) -
功能仿真 -
靜態(tài)時(shí)序仿真
通過為設(shè)計(jì)提供各種輸入測試模式,并觀察輸出,這些仿真可以模擬設(shè)計(jì)的行為,從而驗(yàn)證其正確性和可靠性。設(shè)計(jì)驗(yàn)證過程是確保設(shè)計(jì)質(zhì)量的關(guān)鍵步驟,可以在設(shè)計(jì)實(shí)現(xiàn)之前或之后進(jìn)行。
9 FPGA的未來
產(chǎn)業(yè)趨勢將FPGA推向在異構(gòu)計(jì)算范例中越來越重要的作用。這里的異構(gòu)計(jì)算是指使用多種類型的處理器來執(zhí)行各自的專門處理能力的系統(tǒng)。而所有這些不同的處理器,包括FPGA,都可以通過OpenCL進(jìn)行編程——這是一個(gè)行業(yè)標(biāo)準(zhǔn)的開發(fā)平臺(tái)。
FPGA提供了成本效益的并行計(jì)算能力,適用于快速原型制作。在測試神經(jīng)網(wǎng)絡(luò)時(shí),F(xiàn)PGA有時(shí)也能夠超越GPU。雖然GPU對于訓(xùn)練來說可能很好,但當(dāng)涉及實(shí)時(shí)應(yīng)用時(shí),F(xiàn)PGA更加適應(yīng)。微軟已經(jīng)在通過Microsoft Azure云服務(wù)加速AI時(shí)使用了英特爾Stratix FPGA。