摘要:自三十多年前問世以來,現(xiàn)場(chǎng)可編程門陣列(FPGAs)已被廣泛用于實(shí)現(xiàn)來自不同領(lǐng)域的無數(shù)應(yīng)用。由于其底層的硬件可重新配置性,與定制設(shè)計(jì)的芯片相比,F(xiàn)PGAs具有更快的設(shè)計(jì)周期和更低的開發(fā)成本。FPGA架構(gòu)的設(shè)計(jì)涉及許多不同的設(shè)計(jì)選擇,從高級(jí)架構(gòu)參數(shù)到晶體管級(jí)實(shí)現(xiàn)細(xì)節(jié),目標(biāo)是制造高度可編程的器件,同時(shí)最小化可重新配置的面積和性能成本。隨著應(yīng)用需求和工藝技術(shù)能力的不斷發(fā)展,F(xiàn)PGA架構(gòu)也必須適應(yīng)。在這篇文章中,我們回顧了現(xiàn)代商用FPGA架構(gòu)的不同關(guān)鍵組件的演變,并闡明了它們的主要設(shè)計(jì)原則和實(shí)現(xiàn)挑戰(zhàn)。
01簡(jiǎn)介
現(xiàn)場(chǎng)可編程門陣列(FPGAs)是可重構(gòu)的計(jì)算機(jī)芯片,可以通過編程實(shí)現(xiàn)任何數(shù)字硬件電路。如圖1所述,F(xiàn)PGAs由不同類型的可編程塊(邏輯、輸入輸出和其他)組成的陣列,這些可編程塊可以使用預(yù)制的布線通道與它們之間的可編程開關(guān)靈活地互連。所有FPGA塊的功能和布線開關(guān)的配置使用數(shù)百萬個(gè)靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)單元來控制,這些SRAM在工作時(shí)被編程(即寫入)以實(shí)現(xiàn)特定功能。用戶用硬件描述語言(HDL)如Verilog或VHDL描述所需的功能,或者可能使用高級(jí)綜合將C或OpenCL翻譯成HDL。然后,使用復(fù)雜的計(jì)算機(jī)輔助設(shè)計(jì)(CAD)流程將HDL設(shè)計(jì)編譯成比特流文件,用于對(duì)FPGA的所有配置SRAM單元進(jìn)行編程。
與構(gòu)建定制專用集成電路(ASIC)相比,F(xiàn)PGAs的非重復(fù)性工程成本低得多,上市時(shí)間也短得多。預(yù)制的現(xiàn)成的FPGA可以用來在幾周內(nèi)實(shí)現(xiàn)一個(gè)完整的系統(tǒng),跳過了定制ASIC通常要經(jīng)歷的物理設(shè)計(jì)、布局、制造和驗(yàn)證階段。它們還允許持續(xù)的硬件升級(jí),以支持新功能或通過在現(xiàn)場(chǎng)部署后簡(jiǎn)單地加載新比特流來修復(fù)錯(cuò)誤,因此稱為現(xiàn)場(chǎng)可編程。這使得FPGAs成為中小型設(shè)計(jì)的引人注目的解決方案,特別是在當(dāng)今市場(chǎng)產(chǎn)品周期快的情況下。FPGAs的比特級(jí)可重新配置性使得能夠?qū)崿F(xiàn)每個(gè)應(yīng)用所需的精確硬件(例如:數(shù)據(jù)路徑位寬、流水線級(jí)、并行計(jì)算單元的數(shù)量、存儲(chǔ)子系統(tǒng)等。)而不是通用處理器(CPUs)或圖形處理單元(GPUs)的固定的單一尺寸結(jié)構(gòu)。因此,通過實(shí)現(xiàn)無指令流硬件[1]或覆蓋有應(yīng)用定制流水線和指令集的處理器[2],它們可以實(shí)現(xiàn)比CPU或GPU更高的效率。
這些優(yōu)勢(shì)促使FPGAs在許多應(yīng)用領(lǐng)域采用,包括無線通信、嵌入式信號(hào)處理、網(wǎng)絡(luò)、ASIC原型、高頻交易等[3]–[7]。它們最近也被大規(guī)模部署在數(shù)據(jù)中心,以加速搜索引擎、數(shù)據(jù)包處理[9]和機(jī)器學(xué)習(xí)[10]等工作負(fù)載。然而,與ASIC相比,F(xiàn)PGA硬件的靈活性帶來了效率成本。庫(kù)恩和羅斯[11]表明,僅使用FPGA的電路比相應(yīng)的ASIC實(shí)現(xiàn)平均大35倍,慢4倍。最近的一項(xiàng)研究[12]表明,對(duì)于大量使用其他FPGA(如隨機(jī)存取存儲(chǔ)器和數(shù)字信號(hào)處理器)的全功能設(shè)計(jì),這一面積差距有所縮小,但仍為9倍。FPGA設(shè)計(jì)師試圖盡可能地縮小這種效率差距,同時(shí)保持可編程性,使FPGA在廣泛的應(yīng)用中非常有用。
在這篇文章中,我們介紹了FPGA的關(guān)鍵原理,并強(qiáng)調(diào)了這些器件在過去30年的發(fā)展。圖1顯示了FPGAs如何從簡(jiǎn)單的可編程邏輯陣列和輸入輸出模塊發(fā)展到復(fù)雜的異構(gòu)多芯片系統(tǒng),包括嵌入式模塊存儲(chǔ)、數(shù)字信號(hào)處理(DSP)模塊、處理器子系統(tǒng)、各種高性能外部接口、系統(tǒng)級(jí)互連等。首先,我們簡(jiǎn)要概述了用于評(píng)估新的FPGA架構(gòu)思想的CAD流程和方法。然后,我們?cè)敿?xì)介紹了一個(gè)FPGA的每個(gè)關(guān)鍵組件的架構(gòu)挑戰(zhàn)和設(shè)計(jì)原則。我們重點(diǎn)介紹了過去三十年來在這些組件的設(shè)計(jì)和實(shí)施方面的關(guān)鍵創(chuàng)新,以及正在進(jìn)行的研究領(lǐng)域。
圖1:早期具有可編程邏輯和IOs的FPGA架構(gòu)與現(xiàn)代具有RAMs、DSPs和其他硬模塊的異構(gòu)FPGA架構(gòu)相比。所有模塊都使用比特級(jí)可編程布線進(jìn)行互連
02FPGA架構(gòu)評(píng)估
如圖2所示,F(xiàn)PGA架構(gòu)評(píng)估流程由三個(gè)主要組件組成:一套基準(zhǔn)應(yīng)用、一個(gè)架構(gòu)模型和一個(gè)CAD系統(tǒng)。與為特定功能構(gòu)建的ASIC不同,F(xiàn)PGA是為許多用例設(shè)計(jì)的通用平臺(tái),其中一些用例甚至可能在FPGA構(gòu)建時(shí)不存在。因此,在實(shí)現(xiàn)代表關(guān)鍵FPGA市場(chǎng)和應(yīng)用領(lǐng)域的各種基準(zhǔn)設(shè)計(jì)時(shí),將根據(jù)效率來評(píng)估FPGA架構(gòu)。通常,每個(gè)FPGA供應(yīng)商都有一套精心選擇的基準(zhǔn)設(shè)計(jì),這些設(shè)計(jì)是從專有系統(tǒng)實(shí)現(xiàn)和各種客戶應(yīng)用中收集的。還有幾個(gè)開源基準(zhǔn)套件,如經(jīng)典的MCNC20[13]、VTR[14]和Titan23[15]套件,這些在學(xué)術(shù)FPGA架構(gòu)和CAD研究中是常用的。雖然早期的學(xué)術(shù)FPGA研究使用了MCNC設(shè)計(jì)套件,但這些電路現(xiàn)在太小(數(shù)千個(gè)邏輯原語)和太簡(jiǎn)單(只有輸入輸出和邏輯),無法代表現(xiàn)代FPGA用例。VTR,尤其是Titan套件更大、更復(fù)雜,使它們更具代表性,但隨著FPGA容量和應(yīng)用復(fù)雜性的不斷增長(zhǎng),通常需要新的基準(zhǔn)套件。
圖2:FPGA架構(gòu)評(píng)估流程
評(píng)估流程的第二部分是FPGA架構(gòu)模型。FPGA的設(shè)計(jì)涉及來自架構(gòu)級(jí)組織的許多不同決策(例如塊的數(shù)量和類型、線段長(zhǎng)度的分布、邏輯簇和邏輯元件的大小)到晶體管級(jí)電路實(shí)現(xiàn)(例如可編程開關(guān)類型、布線緩沖器晶體管大小、寄存器實(shí)現(xiàn))。還涉及到不同的實(shí)現(xiàn)風(fēng)格;邏輯塊和可編程布線被設(shè)計(jì)和布局為全定制的電路,而大多數(shù)硬化的塊(例如DSP)分別為模塊內(nèi)核和外設(shè)混合了標(biāo)準(zhǔn)單元和全定制設(shè)計(jì)。一些模塊(存儲(chǔ)、輸入輸出)甚至包括重要的模擬電路。所有這些不同的組件都需要仔細(xì)建模,以評(píng)估整個(gè)FPGA架構(gòu)。除
了從每個(gè)組件的電路級(jí)實(shí)現(xiàn)中獲得的面積、時(shí)序和功率模型之外,這通常使用架構(gòu)描述文件來獲取,架構(gòu)描述文件指定不同的FPGA塊和布線架構(gòu)的組織和類型。
最后,使用可重定位的CAD系統(tǒng),如VTR [14],將選定的基準(zhǔn)應(yīng)用映射到指定的FPGA架構(gòu)上。這種CAD系統(tǒng)由一系列復(fù)雜的優(yōu)化算法組成,這些算法將寫在HDL中的基準(zhǔn)綜合為電路網(wǎng)表,將其映射到不同的FPGA塊,將映射的塊放置在FPGA上的特定位置,并使用指定的可編程布線架構(gòu)在它們之間布線連接。然后,我們用由CAD系統(tǒng)產(chǎn)生的實(shí)現(xiàn)來評(píng)估幾個(gè)關(guān)鍵指標(biāo)??偯娣e是應(yīng)用使用的FPGA塊的總面積,以及其中包含的可編程布線。時(shí)序分析器找到通過塊和布線的關(guān)鍵路徑,以確定應(yīng)用時(shí)鐘的最大頻率。功耗是根據(jù)使用的資源和信號(hào)切換速率來估計(jì)的。FPGAs從來不是為一個(gè)應(yīng)用設(shè)計(jì)的,所以這些指標(biāo)在所有基準(zhǔn)中是平均的。最后,根據(jù)架構(gòu)目標(biāo)(例如高性能或低功率)。其他指標(biāo),如CAD工具運(yùn)行時(shí)間以及CAD工具未能在一個(gè)架構(gòu)上布線一些基準(zhǔn)也經(jīng)常被考慮。
例如,F(xiàn)PGA架構(gòu)中的一組關(guān)鍵問題是: 在FPGA架構(gòu)中應(yīng)該硬化什么功能(即作為新的ASIC風(fēng)格的塊實(shí)現(xiàn))?這個(gè)塊應(yīng)該有多靈活?FPGA芯片面積應(yīng)該有多少專用于它?理想情況下,F(xiàn)PGA架構(gòu)師希望以盡可能低的硅成本為盡可能多的應(yīng)用提供硬化功能。與僅在可編程結(jié)構(gòu)中實(shí)現(xiàn)相比,能夠利用硬模塊的應(yīng)用將受益于更小、更快和更節(jié)能。這促使在硬模塊中有更多的可編程性來捕獲更多的用例;然而,更高的靈活性通常以更大的面積和降低的硬模塊效率為代價(jià)。另一方面,如果應(yīng)用電路不能使用硬模塊,則浪費(fèi)其硅面積;FPGA用戶寧愿在未使用的硬模塊區(qū)域有更多可用的通用邏輯塊。還必須考慮這種新的硬模塊對(duì)可編程布線的影響——它需要更多的互連還是會(huì)導(dǎo)致進(jìn)出該塊的布線路徑變慢?為了評(píng)估一個(gè)特定的功能是否應(yīng)該被硬化,硬化的成本和收益必須使用本節(jié)描述的流程根據(jù)經(jīng)驗(yàn)進(jìn)行量化。FPGA架構(gòu)師在找到正確的設(shè)計(jì)選擇組合之前,可能會(huì)嘗試許多想法,這些設(shè)計(jì)選擇在正確的位置添加了正確的可編程性,使這種新的硬模塊取得了最終的勝利。
在下一節(jié)中,我們將詳細(xì)介紹FPGAs的許多不同組件以及每個(gè)組件的關(guān)鍵架構(gòu)問題。雖然我們描述了關(guān)鍵結(jié)果,但沒有詳細(xì)說明用于發(fā)現(xiàn)它們的實(shí)驗(yàn)方法,一般來說,它們來自類似于圖2中的整體架構(gòu)評(píng)估流程。
03FPGA架構(gòu)演進(jìn)
3.1 可編程序邏輯
最早的可重構(gòu)計(jì)算器件是可編程邏輯(PAL)架構(gòu)。如圖3所示,PALs由一個(gè)“與”門陣列和另一個(gè)“或”門陣列組成,并且可以將布爾邏輯表達(dá)式實(shí)現(xiàn)為兩級(jí)積和函數(shù)。PALs通過可編程開關(guān)實(shí)現(xiàn)可配置性,可編程開關(guān)選擇每個(gè)與/或門的輸入來實(shí)現(xiàn)不同的布爾表達(dá)式。因?yàn)闊o論實(shí)現(xiàn)什么邏輯功能,通過器件的延遲都是不變的,所以用于器件的設(shè)計(jì)工具非常簡(jiǎn)單。但是,PALs的擴(kuò)展性不好;隨著器件邏輯容量的增加,形成與/或陣列的導(dǎo)線變得越來越長(zhǎng)、越來越慢,所需的可編程開關(guān)數(shù)量也呈二次增長(zhǎng)。
圖3:可編程陣列邏輯(PAL)架構(gòu),帶有一個(gè)“與”陣列,饋入到“或”陣列。叉是可重新配置的開關(guān),用于將任何布爾表達(dá)式編程為兩級(jí)的積和函數(shù)
隨后,復(fù)雜可編程邏輯器件(CPLDs)保留了與/或陣列作為基本邏輯元件,但試圖以更復(fù)雜的設(shè)計(jì)工具為代價(jià),通過在同一芯片上集成多個(gè)具有交叉互連的PALs來解決可擴(kuò)展性挑戰(zhàn)。不久之后,Xilinx在1984年首創(chuàng)了第一個(gè)基于查找表的(基于LUT的)FPGA,它由一系列基于SRAM的LUTs組成,它們之間有可編程的互連。這種類型的可重構(gòu)器件顯示出很好的可擴(kuò)展性,與PALs和CPLDs中的與/或邏輯相比,LUTs實(shí)現(xiàn)了更高的面積效率。因此,基于LUT的架構(gòu)變得越來越占優(yōu)勢(shì),今天LUTs構(gòu)成了所有商用FPGAs的基本邏輯元件。幾項(xiàng)研究[16]–[18]嘗試研究了用不同形式的可配置與門來替換LUTs:一種具有可編程輸出/輸入反轉(zhuǎn)的與門的完整二進(jìn)制樹,稱為與-反相器錐(AIC)。然而,當(dāng)在[19]中進(jìn)行全面評(píng)估時(shí),基于AIC的FPGA架構(gòu)比基于LUT架構(gòu)面積大得多,延遲增益僅在關(guān)鍵路徑較短小的基準(zhǔn)上。
K-LUT可以通過在配置SRAM單元中存儲(chǔ)真值表來實(shí)現(xiàn)任何K輸入布爾函數(shù)。K個(gè)輸入信號(hào)被用作多路復(fù)用器選擇線,從真值表的個(gè)值中選擇一個(gè)輸出。圖4(a)展示出了使用傳輸晶體管邏輯的4-LUT的晶體管級(jí)電路實(shí)現(xiàn)。除了輸出緩沖器之外,還有一個(gè)內(nèi)部緩沖級(jí)(如圖4(a)中LUT的第二級(jí)和第三級(jí)之間所示),通常是為了減小當(dāng)通過一串傳輸晶體管時(shí)的二次增加延遲而實(shí)現(xiàn)的。LUT的傳輸晶體管和內(nèi)部/輸出緩沖器的尺寸經(jīng)過精心調(diào)整,以實(shí)現(xiàn)最佳的面積延遲積。經(jīng)典的FPGA文獻(xiàn)[20]將基本邏輯元件(BLE)定義為與輸出寄存器耦合并旁路2:1多路復(fù)用器的K-LUT,如圖4(c)所示。因此,一個(gè)BLE既可以實(shí)現(xiàn)一個(gè)觸發(fā)器(FF),也可以實(shí)現(xiàn)一個(gè)帶有寄存或未寄存輸出的LUT觸發(fā)器.如圖4(d)所示,BLEs通常在邏輯塊(LBs)中聚合,使得LBs包含N個(gè)BLEs以及局部互連。邏輯塊中的局部互連由信號(hào)源(BLE輸出和邏輯塊輸入)和目的地(BLE輸入)之間的多路復(fù)用器組成。這些多路復(fù)用器通常被安排成形成局部完全交叉開關(guān)[21]或部分交叉開關(guān)[22]。在電路級(jí),這些多路復(fù)用器通常由兩級(jí)傳輸晶體管構(gòu)成,后面是一個(gè)兩級(jí)緩沖器,如圖4(b)所示;在大多數(shù)情況下,這是FPGA多路復(fù)用器最有效的電路設(shè)計(jì)[23]。圖4(d)還示出了形成可編程布線的開關(guān)和連接塊多路復(fù)用器,其允許邏輯塊相互連接;第三章第二節(jié)詳細(xì)討論了這種布線。
圖4:(a) 在第二和第三LUT級(jí)之間具有內(nèi)部緩沖器的4-LUT晶體管級(jí)實(shí)現(xiàn)(b) 兩級(jí)多路復(fù)用器電路(c)基本邏輯單元(BLE)和(d)邏輯塊內(nèi)部結(jié)構(gòu)
多年來,隨著器件邏輯容量的增長(zhǎng),LUTs(K)和LBs (N)的大小逐漸增加。隨著K的增加,更多的功能可以封裝到單個(gè)LUT中,不僅減少了所需的LUTs數(shù)量,而且減少了關(guān)鍵路徑上的邏輯級(jí)數(shù)量,從而提高了性能。此外,隨著越來越多的連接通過增加N而被捕獲到快速局部互連中,對(duì)LB間布線的需求減少。另一方面,LUT的面積隨K成指數(shù)增長(zhǎng)(由于2的k次方SRAM單元),其速度線性下降(因?yàn)槎嗦窂?fù)用器構(gòu)成了具有周期性緩沖的K個(gè)傳輸晶體管的鏈)。如果LB局部互連實(shí)現(xiàn)為交叉開關(guān),其大小會(huì)呈四次方增長(zhǎng),速度會(huì)隨著LB中的BLEs數(shù)量呈線性下降。Ahmed和Rose[24]根據(jù)經(jīng)驗(yàn)評(píng)估了這些權(quán)衡,并得出結(jié)論,4-6尺寸的LUT和3-10尺寸的BLEs為FPGA架構(gòu)提供了最佳的面積延遲積,4-LUTs導(dǎo)致更好的面積,但6-LUTs產(chǎn)生更高的速度。歷史上,Xilinx的第一個(gè)基于LUT的FPGA,1984年的XC2000系列,有一個(gè)只包含兩個(gè)3-LUTs的LB(即N = 2,K = 3)。LB尺寸隨著時(shí)間的推移逐漸增加,到1999年,Xilinx的Virtex系列包括四個(gè)4-LUTs,Altera的Apex 20K系列包括每個(gè)LB中的十個(gè)4-LUTs。
架構(gòu)的下一個(gè)重大變化來自2003年的Altera,在他們的Stratix II架構(gòu)中引入了可分割的LUT[25]。Ahmed和Rose在[24]中表明,10個(gè)6-LUTs的LB比10個(gè)4-LUTs的LB性能高14%,但面積高17%??煞指頛UTs試圖結(jié)合兩者的優(yōu)點(diǎn),實(shí)現(xiàn)更大LUTs的性能和更小LUTs的面積效率。傳統(tǒng)6-LUTs面積增加的一個(gè)主要因素是利用率低。Lewis et al.發(fā)現(xiàn)64%的嵌入式應(yīng)用中的LUTs使用少于6個(gè)輸入,浪費(fèi)了一些6-LUT的功能[26]。一個(gè)可分割的{K,M}-LUT可以配置為一個(gè)大小為K的單個(gè)LUT,也可以分割為兩個(gè)大小不超過K–1的LUTs,這些LUTs共同使用不超過K + M個(gè)不同的輸入。圖5(a)顯示6-LUT內(nèi)部由兩個(gè)5-LUTs和一個(gè)2:1多路復(fù)用器組成。因此,幾乎不需要任何電路(只有紅色的附加輸出)來允許6-LUTs作為共享相同輸入的兩個(gè)5-LUTs工作。然而,要求兩個(gè)5-LUTs共享它們的所有輸入將限制兩者同時(shí)使用的頻率。添加額外的布線端口,如圖5(b),增加了可分割的6-LUT的面積,但更容易找到兩個(gè)可以組合在一起的邏輯功能。Stratix II架構(gòu)中的自適應(yīng)邏輯模塊(ALM)實(shí)現(xiàn)了一個(gè){6,2}-LUT,它有8個(gè)輸入和2個(gè)輸出端口。因此,一個(gè)ALM可以實(shí)現(xiàn)y一個(gè)6-LUT或兩個(gè)5-LUTs共享2個(gè)輸入(因此總共有8個(gè)不同的輸入)。成對(duì)的較小LUTs也可以在沒有任何共享輸入的情況下實(shí)現(xiàn),例如兩個(gè)4LUTs或一個(gè)5-LUT和一個(gè)3-LUT。利用可分割的6-LUT,在6-LUTs中實(shí)現(xiàn)了更大的邏輯功能,降低了關(guān)鍵路徑上的邏輯級(jí),實(shí)現(xiàn)了性能改進(jìn)。另一方面,較小的邏輯功能可以打包在一起(每個(gè)只使用半個(gè)ALM),提高了面積效率。與基準(zhǔn)的基于4 LUT的LB相比,LBin Stratix II不僅性能提高了15%,而且邏輯和布線面積也減少了2.6%。
圖5: 6-LUT可分為兩個(gè)5-查找表,其中(a)沒有額外的輸入端口,導(dǎo)致5個(gè)共享輸入(A-E)或(b)兩個(gè)額外的輸入端口和轉(zhuǎn)向多路復(fù)用器,導(dǎo)致只有2個(gè)共享輸入(C,D)
Xilinx后來在其Virtex-5架構(gòu)中采用了相關(guān)的可分割LUT方法。像Stratix II一樣,Virtex-5 6-LUT可以分解成兩個(gè)5-LUT。然而,Xilinx選擇最小化增加的額外電路,以提高分割性,如圖5(a)所示?!惶砑宇~外的輸入布線端口或轉(zhuǎn)向多路復(fù)用器。這導(dǎo)致每個(gè)可分割LUT的面積更小,但是由于它們必須使用不超過5個(gè)不同的輸入,所以將兩個(gè)更小的LUTs打包在一起更加困難[27]。雖然Altera/Intel和Xilinx的后續(xù)架構(gòu)也是基于可分割的6-LUTs,但最近的一項(xiàng)Microsemi研究[28]重新審視了4-LUT與6-LUT之間的效率權(quán)衡,該權(quán)衡針對(duì)的是比之前使用的更新的工藝技術(shù)、計(jì)算機(jī)輔助設(shè)計(jì)工具和設(shè)計(jì)。它表明,一個(gè)具有兩個(gè)緊密耦合的4路LUTs的LUTs結(jié)構(gòu),一個(gè)饋送另一個(gè),可以獲得接近普通6-LUTs的性能,同時(shí)具有4路LUTs的面積和功率優(yōu)勢(shì)。就LB尺寸而言,Altera/Intel和Xilinx的FPGA架構(gòu)在幾代的時(shí)間里分別使用了10個(gè)和8個(gè)BLEs的相對(duì)較大的LB。然而,Xilinx最近宣布的Versal架構(gòu)進(jìn)一步將每個(gè)LB中的BLEs的數(shù)量增加到32[29]。這種大幅增長(zhǎng)的原因有兩個(gè)方面。首先,LB之間的線路延遲隨著工藝的縮小而縮小,因此在LB的局部布線中捕獲更多的連接越來越有利。其次,越來越大的FPGA設(shè)計(jì)往往會(huì)增加CAD工具的運(yùn)行時(shí)間,但更大的LBs可以通過簡(jiǎn)化布局和LB間布線來幫助緩解這一趨勢(shì)。
另一個(gè)重要的架構(gòu)選擇是每個(gè)BLE的FFs數(shù)量。早期的FPGA將一個(gè)(不可分割的)LUT與一個(gè)FPGA連接起來,如圖4(c)所示。當(dāng)他們轉(zhuǎn)移到可分割的LUTs時(shí),Altera/Intel和Xilinx架構(gòu)都給每個(gè)BLE增加了第二個(gè)LUTs,這樣就可以將分割后的LUT的兩個(gè)輸出都寄存,如圖5(a)和5(b)所示。在Stratix V架構(gòu)中,隨著設(shè)計(jì)變得更加深入流水線化以實(shí)現(xiàn)更高的性能,每個(gè)BLE的FFs數(shù)量進(jìn)一步從2個(gè)增加到4個(gè),以適應(yīng)對(duì)FFs不斷增長(zhǎng)的需求[30]。低成本多路復(fù)用電路允許在LUTs和FFs之間共享現(xiàn)有的輸入,以避免增加更昂貴的布線端口。Stratix V將FFs實(shí)現(xiàn)為脈沖鎖存器,而不是邊沿觸發(fā)的FFs。如圖6(b)所示,這移除了主從鎖存中的兩個(gè)鎖存器中的一個(gè)(圖6(a)),減少寄存器延遲和面積。一個(gè)脈沖鎖存器充當(dāng)一個(gè)更便宜的FF,它的保持時(shí)間更長(zhǎng),因?yàn)樗诜浅6痰拿}沖期間而不是像傳統(tǒng)的FF那樣在時(shí)鐘沿鎖存數(shù)據(jù)輸入。如果為每個(gè)FF建造一個(gè)脈沖發(fā)生器,每個(gè)FF的總面積將增加而不是減少。相反,Stratix V每個(gè)LB只包含兩個(gè)可配置的脈沖發(fā)生器;LB中的40個(gè)脈沖鎖存器中的每一個(gè)都選擇哪個(gè)發(fā)生器提供它的脈沖輸入。FPGA的CAD工具還可以對(duì)這些發(fā)生器的脈沖寬度進(jìn)行編程,允許在源寄存器和目的寄存器之間借用有限的時(shí)間。更長(zhǎng)的脈沖會(huì)進(jìn)一步降低保持時(shí)間,但通常任何違反保持時(shí)間的情況都可以通過使用更長(zhǎng)的布線路徑來延遲信號(hào)的FPGA布線算法來解決。在Ultrascale+架構(gòu)中,Xilinx還使用脈沖鎖存器作為其FFs[31]。
圖6:用于(a)主從正邊沿觸發(fā)觸發(fā)器和(b)脈沖鎖存器的電路
算術(shù)運(yùn)算(加法和減法)在FPGA設(shè)計(jì)中非常常見: Murray等人.發(fā)現(xiàn)在一套FPGA設(shè)計(jì)中,22%的邏輯元件都在實(shí)現(xiàn)算法[32]。雖然這些操作可以用LUTs來實(shí)現(xiàn),但行波進(jìn)位加法器中的每個(gè)算術(shù)位都需要兩個(gè)LUTs(一個(gè)用于求和輸出,一個(gè)用于進(jìn)位)。這導(dǎo)致了高邏輯利用率和緩慢的關(guān)鍵路徑,因?yàn)榇?lián)的任何LUTs都要計(jì)算多位加法的進(jìn)位.因此,所有現(xiàn)代的FPGA架構(gòu)都在其邏輯塊中包含了硬件算術(shù)電路。變體很多,但都有幾個(gè)共同點(diǎn)。首先,為了避免增加昂貴的布線端口,算術(shù)電路重復(fù)使用LUT布線端口或由LUT輸出饋送。其次,進(jìn)位位在特殊的專用互連上傳播,幾乎沒有或根本沒有可編程性,因此關(guān)鍵的進(jìn)位路徑是快速的。最低成本的算術(shù)電路硬化了行波進(jìn)位結(jié)構(gòu),并在LUTs上實(shí)現(xiàn)了較大的速度增益(在[32]中,32位加法器的速度增益為3.4)。硬化更復(fù)雜的結(jié)構(gòu),如進(jìn)位跳躍加法器,進(jìn)一步提高了速度(在[33]中,32位時(shí)速度增加了20%)。Xilinx的最新Versal架構(gòu)硬化了8位超前進(jìn)位加法器的進(jìn)位邏輯(即加法只能從每八個(gè)BLE開始),而求和、傳播和產(chǎn)生邏輯都是在可分割的6-LUTs中實(shí)現(xiàn)的,這些LUTs提供進(jìn)位邏輯,如圖7(a)所示[29]。這種組織允許每個(gè)邏輯元件實(shí)現(xiàn)1位算術(shù)。另一方面,最新的Intel Agilex架構(gòu)可以為每個(gè)邏輯元件實(shí)現(xiàn)2位算術(shù),邏輯元件之間的進(jìn)位具有專用的互連,如圖所示7(b)。它通過硬化2位進(jìn)位跳躍加法器來實(shí)現(xiàn)這一點(diǎn),該加法器由包含在6-LUT[34]中的4個(gè)4位LUTs饋送。Murray等人的研究[32]表明,與不可分割LUTs或每個(gè)邏輯元件一位算術(shù)的架構(gòu)相比,可分割LUTs和兩位算術(shù)的組合(類似于Altera/Intel FPGAs中采用的)特別有效。它還得出結(jié)論,在FPGA邏輯元件中專用的算術(shù)電路(即硬化加法器和進(jìn)位鏈)分別將算術(shù)微基準(zhǔn)電路和通用基準(zhǔn)電路的平均性能提高了75%和15%。
圖7:(a) Xilinx和(b) Altera/Intel FPGAs邏輯元件中的硬算術(shù)電路概述(紅色)。A[i]和B[i]是兩個(gè)加法操作數(shù)A和B的第i位。Xilinx LEs在查找表中計(jì)算進(jìn)位傳播和產(chǎn)生,而Altera/Intel使用查找表將輸入傳遞給硬加法器。實(shí)現(xiàn)加法器時(shí),未標(biāo)記的輸入未被使用
最近,深度學(xué)習(xí)(DL)已經(jīng)成為許多終端用戶應(yīng)用的關(guān)鍵工作負(fù)載,其核心操作是乘加(MAC)。一般來說,MAC可以在數(shù)字信號(hào)處理器模塊中實(shí)現(xiàn),這將在第三章第五節(jié)中描述;然而,具有8位或更窄操作數(shù)的低精度MAC(在數(shù)字邏輯工作負(fù)載中變得越來越普遍)也可以在可編程邏輯中有效地實(shí)現(xiàn)[9]。LUTs用于生成乘法器陣列的部分積,然后是加法器樹,以減少部分積并執(zhí)行累加。因此,最近的多項(xiàng)研究[35]–[37]研究了如何增加FPGA邏輯結(jié)構(gòu)中硬化加法器的密度,以提高其在實(shí)現(xiàn)算術(shù)繁重的應(yīng)用(如DL加速)時(shí)的性能。[36]和[37]中的工作提出了多種不同的邏輯塊架構(gòu),每個(gè)邏輯單元包含4位算術(shù)運(yùn)算,排列在一個(gè)或兩個(gè)具有不同配置的進(jìn)位鏈中,而不是在類似Intel Stratix ALM中只有的2位算術(shù)運(yùn)算。由于乘法器陣列中的高度輸入共享,這些方案在實(shí)現(xiàn)乘法時(shí)不需要增加邏輯簇中的(相對(duì)昂貴的)布線端口的數(shù)量(即,對(duì)于N位乘法器,僅需要2N個(gè)輸入來生成N平方部分積)。這些提議中最有希望的一個(gè)將MAC操作的密度提高了1.7倍,同時(shí)提高了速度。它還將一般基準(zhǔn)測(cè)試所需的邏輯和布線面積減少了8%,突出了更多的算法密度對(duì)除了DL以外的應(yīng)用是有益的。
3.2 可編程布線
可編程布線通常占應(yīng)用的結(jié)構(gòu)面積和關(guān)鍵路徑延遲的50%以上[38],因此其效率至關(guān)重要??删幊滩季€由預(yù)制接線段和可編程開關(guān)組成。通過將適當(dāng)?shù)拈_關(guān)序列編程為接通,任何功能塊輸出都可以連接到任何輸入。FPGA布線架構(gòu)主要有兩類。分層次的FPGAs的靈感來源于這樣一個(gè)事實(shí),即設(shè)計(jì)本質(zhì)上是分層的:高級(jí)模塊實(shí)例化低級(jí)模塊,并在它們之間連接信號(hào)。在設(shè)計(jì)層次中,相互靠近的模塊之間的通信更加頻繁,層次化的FPGA可以通過連接芯片小區(qū)域的短線來實(shí)現(xiàn)這些連接。如圖8所示,為了與層次化的FPGA的更遠(yuǎn)的區(qū)域進(jìn)行通信,一個(gè)連接(用紅色突出顯示)在穿過互連層次的不同級(jí)時(shí)通過多條線路和開關(guān)。這種風(fēng)格的架構(gòu)在許多早期的FPGAs中很受歡迎,如Altera的7K和Apex20K系列,但它會(huì)導(dǎo)致互連層次結(jié)構(gòu)上層的線路非常長(zhǎng),隨著工藝長(zhǎng)度的縮減,這種導(dǎo)線的電阻越來越大,這就成了問題。嚴(yán)格的分層布線架構(gòu)還會(huì)導(dǎo)致一些塊在物理上靠得很近(例如圖8中的藍(lán)色塊)仍然需要幾根線和開關(guān)來連接。因此,它現(xiàn)在主要用于較小的FPGA,例如可以嵌入大型SoC設(shè)計(jì)中的FlexLogix FPGA IP核[39]。
圖8:在層次化FPGAs中的布線架構(gòu)
另一種類型的FPGA互連是島式的,如圖9所示。該架構(gòu)由Xilinx首創(chuàng),其靈感來源于這樣一個(gè)事實(shí),即水平和垂直定向線段的規(guī)則二維布局可以有效地布局。如圖9所示,島式布線包括三個(gè)部分:布線線段、將功能塊輸入連接到布線的連接塊(多路復(fù)用器)和將布線連接在一起以實(shí)現(xiàn)更長(zhǎng)布線的開關(guān)塊(可編程開關(guān)).FPGA CAD工具中的布局引擎選擇哪個(gè)功能塊實(shí)現(xiàn)設(shè)計(jì)的每個(gè)元件,以最小化所需的布線。因此,大多數(shù)功能塊之間的連接跨越很小的距離,并且可以用一些布線來實(shí)現(xiàn),如圖9中的紅色連接所示。
圖9:島式布線架構(gòu)。粗實(shí)線是走線,而虛線是可編程開關(guān)。連接塊和開關(guān)塊分別用黃色和綠色陰影表示
創(chuàng)建一個(gè)好的布線架構(gòu)需要管理復(fù)雜的權(quán)衡。它應(yīng)該包含足夠多的可編程開關(guān)和線段,以使絕大多數(shù)電路都能實(shí)現(xiàn);然而,過多的電線和開關(guān)浪費(fèi)了面積。布線架構(gòu)也應(yīng)符合應(yīng)用的需要:理想情況下,短連接將使用短導(dǎo)線,以最小化電容和版圖面積,而長(zhǎng)連接可以使用較長(zhǎng)的布線段,以避免通過許多布線開關(guān)的額外延遲。一些布線架構(gòu)參數(shù)包括:每個(gè)邏輯塊輸入或輸出可以連接多少條布線線(Fc),每條布線線可以連接多少條其他布線線(Fs),布線線段的長(zhǎng)度,布線開關(guān)模式,線路和開關(guān)本身的電氣設(shè)計(jì),以及每個(gè)通道的布線線數(shù)量[20]。例如在圖9,F(xiàn)c = 3,F(xiàn)s = 3,通道寬度為4條導(dǎo)線,一些布線長(zhǎng)度為1,而其他布線長(zhǎng)度為2.針對(duì)目標(biāo)應(yīng)用和特定流程節(jié)點(diǎn),全面評(píng)估這些權(quán)衡需要使用完整的CAD流程進(jìn)行實(shí)驗(yàn),詳見第二節(jié)。
早期的島式架構(gòu)只包含了可編程開關(guān)之間穿過單個(gè)邏輯塊的短線。后來的研究表明,這導(dǎo)致可編程開關(guān)比需要的多,并且在終止前使所有布線段跨越四個(gè)邏輯塊將應(yīng)用延遲減少40%,布線面積減少25% [40]?,F(xiàn)代架構(gòu)包括多種長(zhǎng)度的接線段,以更好地滿足短連接和長(zhǎng)連接的需要,但最豐富的接線段仍然是中等長(zhǎng)度,四個(gè)邏輯塊是一種流行的選擇。較長(zhǎng)距離的連接可以使用較長(zhǎng)的電線段來實(shí)現(xiàn)較低的延遲,但是在最近的工藝節(jié)點(diǎn),跨越許多(例如16)邏輯模塊必須在上部金屬層上使用寬而厚的金屬走線,以獲得可接受的電阻[41]。這種長(zhǎng)距離布線可以包含在金屬疊層中的數(shù)量是有限的。為了更好地利用這種稀缺的布線,Intel的Stratix FPGAs允許長(zhǎng)線段僅連接到短線段,而不是功能塊輸入或輸出[42]。這在島式的FPGA中創(chuàng)建了一種布線層次結(jié)構(gòu),其中短連接只使用較短的導(dǎo)線,而較長(zhǎng)的連接通過短導(dǎo)線到達(dá)長(zhǎng)導(dǎo)線網(wǎng)絡(luò)。在島式FPGA中使用層次化FPGA概念的另一個(gè)領(lǐng)域是邏輯塊。如圖4(d)所示,大多數(shù)邏輯塊現(xiàn)在將多個(gè)BLEs與局部布線組合在一起。這意味著每個(gè)邏輯塊都是層次化FPGA中的一個(gè)小簇;島式布線連接成千上萬個(gè)邏輯簇。
關(guān)于開關(guān)的最佳數(shù)量以及如何最好地安排開關(guān),已經(jīng)有了大量的研究。雖然有許多詳細(xì)的選擇,但還是出現(xiàn)了一些原則。首先,功能塊引腳和導(dǎo)線(Fc)之間的連接性可能相對(duì)較低:通常只有10%或更少的導(dǎo)線經(jīng)過引腳時(shí)會(huì)有開關(guān)與之連接。類似地,布線線路在其末端(Fs)可以連接的其他線路的數(shù)量也可以很少,但是它應(yīng)該至少為3,以便信號(hào)可以在線路端點(diǎn)向左、向右或向右轉(zhuǎn)向。邏輯簇中的局部布線(在第三章中第一節(jié)描述)允許在布線過程中交換一些塊輸入和一些塊輸出。通過利用這種額外的靈活性,并考慮多級(jí)可編程布線網(wǎng)絡(luò)提供的所有選項(xiàng),布線CAD工具即使在Fc和Fs值較低的情況下也可以實(shí)現(xiàn)較高的完成率。為CAD工具提供更多選項(xiàng)的開關(guān)模式也有助于布線;例如,Wilton開關(guān)模式確保遵循不同的通道序列,讓布線器到達(dá)目的塊附近的不同線段[43]。
可編程開關(guān)的電氣設(shè)計(jì)也有多種選擇,如圖10。早期的FPGA使用由SRAM單元控制的傳輸門晶體管來連接導(dǎo)線。雖然這是傳統(tǒng)CMOS工藝中可能的最小開關(guān),但通過晶體管串聯(lián)的走線延遲呈二次方增長(zhǎng),這使得它們對(duì)于大面積FPGA來說非常慢。添加一些三態(tài)緩沖開關(guān)會(huì)增加面積,但會(huì)提高速度[40]。如圖4(b)所示,最近的FPGAs主要使用由傳輸門構(gòu)建的多路復(fù)用器,其后是不能三態(tài)化的緩沖器。這種直接驅(qū)動(dòng)開關(guān)中的傳輸晶體管可以很小,因?yàn)樗鼈兊呢?fù)載很輕,而緩沖器可以更大,以驅(qū)動(dòng)布線線段周圍的大電容。這種直接驅(qū)動(dòng)開關(guān)對(duì)開關(guān)模式產(chǎn)生了一個(gè)主要的限制:一根導(dǎo)線只能在一個(gè)點(diǎn)上被驅(qū)動(dòng),因此只有功能塊輸出和該點(diǎn)附近的布線導(dǎo)線才能饋送到布線多路復(fù)用器的輸入,因此可能是信號(hào)源。盡管有這種限制,學(xué)術(shù)界和工業(yè)界都認(rèn)為直接驅(qū)動(dòng)開關(guān)由于其優(yōu)越的電氣特性而提高了面積和速度[42],[44]。例外情況是昂貴或稀有的導(dǎo)線,如在上層金屬層的寬金屬跡線上實(shí)現(xiàn)的長(zhǎng)導(dǎo)線或第三章第七節(jié)中討論的跨中介層導(dǎo)線。這些線路通常有多個(gè)三態(tài)緩沖器來驅(qū)動(dòng)它們,因?yàn)檫@些較大的可編程開關(guān)的成本值得允許更靈活地使用這些昂貴的線路。
圖10: SRAM控制的可編程開關(guān)的不同實(shí)現(xiàn),使用傳輸晶體管(左)、三態(tài)緩沖器(中)或緩沖多路復(fù)用器(右)。
FPGA布線的一個(gè)主要挑戰(zhàn)是,長(zhǎng)導(dǎo)線的延遲沒有隨著工藝尺寸的縮小而改善,這意味著即使時(shí)鐘頻率上升,穿過芯片的延遲也會(huì)停滯或增加。這使得FPGA應(yīng)用開發(fā)人員增加了他們?cè)O(shè)計(jì)中的流水線數(shù)量,從而允許長(zhǎng)布線有多個(gè)時(shí)鐘周期。為了使這種策略更加有效,一些FPGA制造商已經(jīng)將寄存器集成到布線網(wǎng)絡(luò)本身中。Intel的Stratix10器件允許每個(gè)布線驅(qū)動(dòng)器(即多路復(fù)用器后接一個(gè)緩沖器)被配置為脈沖鎖存器,如6(b)所示,從而充當(dāng)延遲低但保持時(shí)間相對(duì)較差的寄存器。這允許在不使用昂貴的邏輯資源的情況下進(jìn)行互連的深度管道化,代價(jià)是適度的面積和布線驅(qū)動(dòng)器的延遲增加[45]。保持時(shí)間問題意味著在直接連續(xù)的Stratix布線開關(guān)中使用脈沖鎖存器是不可能的,因此Intel在其下一代Agilex器件中改進(jìn)了這種方法,只在三分之一的互連驅(qū)動(dòng)器(以降低面積成本)上集成了當(dāng)前的寄存器(保持時(shí)間更短)[34]。Xilinx的Versal器件不是通過互連集成寄存器,而是只在功能塊的輸入端添加旁路寄存器。與Intel的互連寄存器不同,這些輸入寄存器功能齊全,具有時(shí)鐘使能和清除信號(hào)[46]。
3.3 可編程輸入輸出
FPGA包括獨(dú)特的可編程IO結(jié)構(gòu),使它們能夠與各種各樣的其他器件通信,使FPGA成為許多系統(tǒng)的通信基礎(chǔ)。對(duì)于一組物理接口來說,有計(jì)劃地支持許多不同的IO接口和標(biāo)準(zhǔn)是一項(xiàng)挑戰(zhàn),因?yàn)樗枰m應(yīng)不同的電平、電氣特性、時(shí)序規(guī)范和命令協(xié)議。可編程IO的價(jià)值和挑戰(zhàn)都因FPGAs上用于IO的大面積空間而凸顯出來。例如,Altera的Stratix II (90納米)器件支持28種不同的IO標(biāo)準(zhǔn),并將其20%(最大器件)至48%(最小器件)的芯片面積用于與IO相關(guān)的結(jié)構(gòu)。
如圖11所示,F(xiàn)PGAs采用多種方法[47]–[49]來應(yīng)對(duì)這一挑戰(zhàn)。首先,F(xiàn)PGA使用可以在一定電壓范圍內(nèi)工作的IO緩沖器。這些IO被分組到組(bank)中(通常每個(gè)組大約50個(gè)IO),其中每個(gè)組都有一個(gè)單獨(dú)的IO緩沖器線路。這允許不同的組工作不同的電壓電平;例如一組的IO可以在1.8 V下工作,而另一組的IO可以在1.2 V下工作。第二,每個(gè)IO可以單獨(dú)用于單端標(biāo)準(zhǔn),或者成對(duì)的IO可以編程形成差分IO標(biāo)準(zhǔn)的正負(fù)線。第三,IO緩沖器由多個(gè)并行的上拉和下拉晶體管實(shí)現(xiàn),因此它們的驅(qū)動(dòng)強(qiáng)度可以通過啟用或禁用不同數(shù)量的上拉/下拉晶體管來進(jìn)行編程調(diào)整。通過將一些上拉或下拉晶體管編程為使能,即使沒有輸出被驅(qū)動(dòng),也可以將FPGA IOs編程為實(shí)現(xiàn)不同的片內(nèi)端接電阻,以最小化信號(hào)反射??删幊萄舆t鏈提供了第四級(jí)可配置性,允許對(duì)進(jìn)出IO緩沖器的信號(hào)時(shí)序進(jìn)行精細(xì)的延遲調(diào)整。
除了電氣和時(shí)序可編程性之外,F(xiàn)PGA IO模塊還包含額外的硬化數(shù)字電路,以簡(jiǎn)化IO數(shù)據(jù)的捕獲和傳輸。一般來說,SRAM控制的多路復(fù)用器可以旁路部分或全部這種硬化電路,允許FPGA用戶選擇給定設(shè)計(jì)和IO協(xié)議所需的硬化功能。圖11第5部分顯示了IO路徑上的一些常見數(shù)字邏輯選項(xiàng):捕獲寄存器、雙數(shù)據(jù)速率至單數(shù)據(jù)速率轉(zhuǎn)換寄存器(與DDR存儲(chǔ)器一起使用)和串行至并行轉(zhuǎn)換器,允許以較低頻率傳輸?shù)浇Y(jié)構(gòu)。大多數(shù)FPGA現(xiàn)在還包含可旁路的高級(jí)塊,這些塊連接到一組IOs,并實(shí)現(xiàn)更高級(jí)別的協(xié)議,如DDR存儲(chǔ)控制器。這些方法結(jié)合在一起,使通用FPGA的IO能夠以高達(dá)3.2Gb/s的速度服務(wù)于許多不同的協(xié)議。
最高速度的IOs實(shí)現(xiàn)串行協(xié)議,如PCIe和以太網(wǎng),將時(shí)鐘嵌入數(shù)據(jù)轉(zhuǎn)換,可以28 Gb/s或更高的速度工作。為了實(shí)現(xiàn)這些速度,F(xiàn)PGAs包括一組單獨(dú)的差分IO,具有更低的電壓和電氣可編程性;它們只能用作串行收發(fā)器[50]。就像通用IOs一樣,這些串行IOs在它們和結(jié)構(gòu)之間有一系列高速硬化電路,其中一些可以選擇旁路,以允許最終用戶定制確切的接口協(xié)議。
總的來說,F(xiàn)PGA的IO設(shè)計(jì)非常具有挑戰(zhàn)性,因?yàn)槿藗儾粌H需要快速IO,還需要可編程IO。此外,從IO接口分配非常高的數(shù)據(jù)帶寬需要在結(jié)構(gòu)中使用寬的軟總線,這帶來了額外的挑戰(zhàn),如第三章第六節(jié)所述。
圖11:在FPGAs上實(shí)現(xiàn)可編程IOs的不同技術(shù)概述
3.4 片上存儲(chǔ)器
FPGA架構(gòu)中第一種形式的片上存儲(chǔ)元件是集成在FPGA邏輯塊中的FFs,如第三章第一節(jié)所述。然而,隨著FPGA邏輯容量的增長(zhǎng),它們被用來實(shí)現(xiàn)更大的系統(tǒng),這些系統(tǒng)幾乎總是需要存儲(chǔ)來緩沖和重用芯片上的數(shù)據(jù),因此非常需要更密集的片上存儲(chǔ),因?yàn)橛眉拇嫫骱蚅UTs構(gòu)建大RAM比(ASIC的)SRAM塊密度低100多倍。與此同時(shí),在FPGA上實(shí)現(xiàn)的應(yīng)用的存儲(chǔ)需求非常多樣,包括(但不限于)用于FIR濾波器的小系數(shù)存儲(chǔ)RAM、用于網(wǎng)絡(luò)數(shù)據(jù)包的大緩沖區(qū)、用于類似處理器的模塊的緩存和寄存器文件、用于指令的只讀存儲(chǔ)以及用于解耦計(jì)算模塊的數(shù)百萬個(gè)FIFO。這意味著在FPGA設(shè)計(jì)中沒有普遍使用的單一RAM配置(容量、字寬、端口數(shù)量),這使得決定哪(些)種RAM塊應(yīng)該添加到FPGA中以使它們?cè)趶V泛的應(yīng)用中高效變得具有挑戰(zhàn)性。第一個(gè)包含存儲(chǔ)硬功能塊的FPGA(塊RAMs或BRAMs)是1995年的Altera Flex 10k[51]。它包括通過可編程布線連接到結(jié)構(gòu)其余部分的小型(2kb)BRAM列。FPGA已經(jīng)逐漸集成了更大、更多樣的BRAM,典型的情況是,現(xiàn)代FPGA的大約25%的面積專用于BRAM[52]。
一個(gè)FPGA BRAM由一個(gè)基于SRAM的存儲(chǔ)器組成,帶有額外的外圍電路,使它們更容易配置為多種用途,并將其連接到可編程布線。一個(gè)基于SRAM的BRAM通常是如圖12所示。它由存儲(chǔ)位的SRAM單元的二維陣列和大量外圍電路組成,這些外圍電路協(xié)調(diào)對(duì)這些單元的訪問以進(jìn)行讀/寫操作。為了簡(jiǎn)化讀和寫操作的時(shí)序,所有現(xiàn)代的FPGA BRAM都寄存了它們的所有輸入。在寫操作期間,列譯碼器激活寫驅(qū)動(dòng)器,寫驅(qū)動(dòng)器又根據(jù)要寫入存儲(chǔ)單元的輸入數(shù)據(jù)對(duì)位線(BL和)充電。同時(shí),行譯碼器激活由輸入寫地址指定的行的字線,將一行單元連接到它們的位線,以便它們被新數(shù)據(jù)覆蓋。在讀操作期間,BL和都被預(yù)充電到高電平,然后行譯碼器激活由輸入讀地址指定的行的字線。激活單元的內(nèi)容導(dǎo)致BL和之間的電壓略有差異,這種差異被感知放大器電路感知和放大,以產(chǎn)生輸出數(shù)據(jù)[52]。
圖12:一個(gè)傳統(tǒng)的基于雙端口SRAM的FPGA BRAM的組織和電路。以藍(lán)色突出顯示的組件在任何基于SRAM的存儲(chǔ)模塊中都很常見,而以綠色突出顯示的組件是特定于FPGA的。該BRAM最大數(shù)據(jù)寬度為8位,但輸出交叉開關(guān)配置為4位輸出模式
設(shè)計(jì)FPGA BRAMs的主要架構(gòu)決策是選擇它們的容量、數(shù)據(jù)字寬度和讀/寫端口數(shù)量。更強(qiáng)大的BRAMs需要更多的硅面積,因此架構(gòu)師必須仔細(xì)平衡BRAM設(shè)計(jì)選擇,同時(shí)考慮應(yīng)用電路中最常見的用例。SRAM單元占據(jù)的面積隨BRAM電容線性增長(zhǎng),但外圍電路的面積和布線端口的數(shù)量呈次線性增長(zhǎng)。這意味著更大的BRAM具有更低的每比特面積,使得更大的片上緩沖更有效。另一方面,如果一個(gè)應(yīng)用只需要很小的RAM,那么一個(gè)更大的BRAM的大部分容量可能會(huì)被浪費(fèi)掉。同樣,具有較大數(shù)據(jù)寬度的BRAM可以為下游邏輯提供更高的數(shù)據(jù)帶寬。然而,它比同樣容量但字寬更小的BRAM占用更多的面積,因?yàn)楦蟮臄?shù)據(jù)字寬需要更多的靈敏放大器、寫驅(qū)動(dòng)器和可編程布線端口。最后,增加一個(gè)BRAM的讀/寫端口的數(shù)量會(huì)增加SRAM單元和外圍電路的面積,但也會(huì)增加BRAM能夠提供的數(shù)據(jù)帶寬,并允許更多樣的用途。例如,F(xiàn)IFO(在FPGA設(shè)計(jì)中普遍存在)需要一個(gè)讀端口和一個(gè)寫端口。雙端口SRAM單元的實(shí)現(xiàn)細(xì)節(jié)顯示在圖12的底部。為SRAM單元實(shí)現(xiàn)第二個(gè)端口(端口B用紅色突出顯示)增加了兩個(gè)晶體管,使SRAM單元的面積增加了33%。此外,第二個(gè)端口還需要一個(gè)額外的靈敏放大器、寫驅(qū)動(dòng)器和行譯碼器的復(fù)制(圖12中的“讀/寫電路B”和“行譯碼器B”塊)。如果兩個(gè)端口都是讀/寫(r/w),我們還必須將可編程布線的端口數(shù)量增加一倍。
因?yàn)镕PGA片上存儲(chǔ)器必須滿足在該FPGA上實(shí)現(xiàn)的每個(gè)應(yīng)用的需求,所以向BRAM添加額外的可配置性以允許它們適應(yīng)應(yīng)用需求也是常見的[53],[54]。通過在存儲(chǔ)器陣列的外圍增加低成本多路復(fù)用電路,F(xiàn)PGA BRAMs被設(shè)計(jì)成具有可配置的寬度和深度。例如,在圖12中,實(shí)際的SRAM陣列被實(shí)現(xiàn)為4×8位陣列,這意味著它自然存儲(chǔ)8位數(shù)據(jù)字。通過在輸出交叉開關(guān)上添加由3個(gè)地址位控制的多路復(fù)用器,并在其上的讀/寫電路上添加額外的解碼和使能邏輯,該RAM還可以在8×4位、16×2位或32×1位模式下工作。寬度可配置譯碼器(WCnfg Dec.)在Vdd和地址位之間選擇,如圖12左上角所示,表示最大8位字節(jié)大小。多路復(fù)用器使用配置SRAM單元進(jìn)行編程,并用于產(chǎn)生列選擇(CS)和寫使能(Wen)信號(hào),分別控制靈敏放大器和寫驅(qū)動(dòng)器進(jìn)行局部讀和寫操作。對(duì)于典型的BRAM大小(幾kb或更多),這種額外寬度可配置電路的成本與傳統(tǒng)SRAM陣列的成本相比很小,并且不需要任何額外的布線端口。
與傳統(tǒng)存儲(chǔ)塊相比,F(xiàn)PGA的另一個(gè)獨(dú)特組件是它們與可編程布線結(jié)構(gòu)的接口。該接口一般被設(shè)計(jì)成類似于第三章第一節(jié)中描述的邏輯塊;如果所有塊類型都以類似的方式連接,那么創(chuàng)建一個(gè)平衡靈活性和成本的布線架構(gòu)會(huì)更容易。連接塊多路復(fù)用器,隨后是某些FPGA中的局部交叉開關(guān),形成BRAM輸入布線端口,而其讀輸出驅(qū)動(dòng)開關(guān)塊多路復(fù)用器形成輸出布線端口。這些布線接口的成本很高,尤其是對(duì)于小型BRAMs;它們分別占256Kb至8Kb的BRAM面積的5%至35%[55]。這促使盡可能減少通往BRAM的布線端口數(shù)量,同時(shí)又不影響其功能。表1總結(jié)了不同數(shù)量和類型的BRAM讀寫端口所需的布線端口數(shù)。例如,一個(gè)單端口BRAM (1r/w)需要W+log2(D)個(gè)輸入端口用于寫入數(shù)據(jù)和讀/寫地址,以及W個(gè)輸出端口用于讀取數(shù)據(jù),其中W和D分別是最大的字寬和BRAM深度。該表顯示,與簡(jiǎn)單的雙端口(1r+1w)BRAM相比,真雙端口(2r/w) BRAM多需要2W的端口,這顯著增加了布線接口的成本。雖然真雙端口存儲(chǔ)適用于寄存器文件、緩存和共享存儲(chǔ)開關(guān),但FPGA上多端口RAM最常見的用途是用于FIFOs,它只需要一個(gè)讀端口和一個(gè)寫端口(1r+1w,而不是2r/w端口)。因此,F(xiàn)PGA BRAMs通常具有真雙端口SRAM核,但在SRAM核(W)支持的全寬度下,只有足夠的布線接口用于簡(jiǎn)單雙端口模式,并將真正雙端口模式的寬度限制為最大寬度的一半(W/2)。
表1:不同數(shù)量和類型的BRAM讀/寫端口所需的布線端口數(shù)(W:數(shù)據(jù)寬度,D:BRAM深度)
另一種降低額外BRAM成本的方法是多泵(multi-pump)存儲(chǔ)塊(即以設(shè)計(jì)邏輯其余部分所用頻率的倍數(shù)運(yùn)行BRAM)。通過這樣做,物理上的單端口SRAM陣列可以實(shí)現(xiàn)邏輯上的多端口BRAM,而不需要增加額外的端口,正如在Tabula的時(shí)空架構(gòu)中那樣[56]。通過在軟結(jié)構(gòu)中建立時(shí)分多路復(fù)用邏輯,多泵也可以與傳統(tǒng)的FPGA BRAM一起使用;然而,這導(dǎo)致了對(duì)時(shí)分多路復(fù)用邏輯的激進(jìn)的時(shí)序約束,這可能使時(shí)序更加困難并增加編譯時(shí)間。Altera在2000年代早期在其Mercury器件中引入了四端口BRAMs,以提高共享存儲(chǔ)開關(guān)(用于數(shù)據(jù)包處理)和寄存器文件的效率[57]。然而,這一特性增加了BRAM的尺寸,并沒有在后續(xù)的FPGA代中充分地用于證明它的內(nèi)容。相反,設(shè)計(jì)人員使用各種技術(shù)將雙端口FPGA BRAM和軟件邏輯結(jié)合起來,在需要時(shí)制造高度移植的結(jié)構(gòu),盡管效率較低[58],[59]。我們請(qǐng)感興趣的讀者參考[52]和[55],了解BRAM核和外圍電路設(shè)計(jì)的更多細(xì)節(jié)。
除了構(gòu)建存儲(chǔ)之外,F(xiàn)PGA供應(yīng)商還可以添加電路,使設(shè)計(jì)人員能夠?qū)?gòu)成邏輯結(jié)構(gòu)的LUTs重新調(diào)整為額外的存儲(chǔ)塊。邏輯塊K-LUT中的真值表是2的k次方×1位只讀存儲(chǔ)器;當(dāng)設(shè)計(jì)比特流被加載時(shí),它們由配置電路寫入一次。由于LUTs已經(jīng)有了讀電路(根據(jù)一個(gè)K位輸入/地址讀出一個(gè)存儲(chǔ)值),只要增加設(shè)計(jì)者控制的寫電路,它們就可以用作小型分布式基于LUT的RAM(LUT-RAMs)。然而,一個(gè)主要的問題是實(shí)現(xiàn)寫功能所需的額外布線端口的數(shù)量,以便將LUT更改為L(zhǎng)UT-RAM。例如,在最近的Altera/Intel架構(gòu)中,ALM是一個(gè)6-LUT,它可以分為兩個(gè)5-LUTs,有8個(gè)輸入布線端口,如第三章第一節(jié)所述。這意味著它可以運(yùn)行一個(gè)64×1位或32×2位的存儲(chǔ)器,分別有6位或5位的讀地址。這僅留下2或3個(gè)未使用的布線端口,如果我們想要在每個(gè)周期中讀寫(簡(jiǎn)單雙端口模式),這對(duì)于寫地址、數(shù)據(jù)和寫使能(總共8個(gè)信號(hào))是不夠的,這是FPGA設(shè)計(jì)中最常用的RAM模式。為了克服這個(gè)問題,一個(gè)10ALM的完整邏輯塊被配置為一個(gè)LUT-RAM,以緩沖控制電路和10ALM的地址位。寫地址和寫使能是通過從每個(gè)ALM中一個(gè)未使用的布線端口帶來一個(gè)信號(hào),并將結(jié)果地址和使能廣播給所有ALM來組裝的[60]。因此,一個(gè)邏輯塊可以實(shí)現(xiàn)64×10位或32×20位的簡(jiǎn)單雙端口RAM,但有一個(gè)限制,即單個(gè)邏輯塊不能混合邏輯和LUT-RAM。Xilinx Ultrascale類似地將整個(gè)邏輯塊轉(zhuǎn)換為L(zhǎng)UT-RAM,但是邏輯塊中八個(gè)LUTs中的一個(gè)的所有布線端口都被重新用于驅(qū)動(dòng)(廣播)寫地址和使能信號(hào)。因此,Xilinx邏輯塊可以實(shí)現(xiàn)64×7位或32×14位簡(jiǎn)單雙端口RAM,或稍寬的單端口存儲(chǔ)(64×8位或32 ×16位)。避免額外的布線端口可以降低LUT-RAM的成本,但仍會(huì)增加一些面積。由于將50%以上的邏輯結(jié)構(gòu)轉(zhuǎn)換為L(zhǎng)UT-RAM的設(shè)計(jì)非常罕見,Altera/Intel和Xilinx都選擇在其最新的架構(gòu)中僅使用一半的邏輯塊LUT-RAM,從而進(jìn)一步降低了面積成本。
在一個(gè)典型的設(shè)計(jì)中,設(shè)計(jì)者需要許多不同的RAM,所有這些都必須由芯片上的固定BRAM和LUT-RAM資源來實(shí)現(xiàn)。迫使設(shè)計(jì)人員為他們需要的每種存儲(chǔ)配置確定組合BRAM和LUT-RAM的最佳方式,并編寫verilog來實(shí)現(xiàn)它們將是非常困難的,而且還會(huì)將設(shè)計(jì)與特定的FPGA架構(gòu)聯(lián)系起來。相反,供應(yīng)商的CAD工具包括一個(gè)RAM映射階段,該階段使用物理BRAM和芯片上的LUT-RAM在用戶的設(shè)計(jì)中實(shí)現(xiàn)邏輯存儲(chǔ)。存儲(chǔ)映射器選擇物理存儲(chǔ)實(shí)現(xiàn)(即存儲(chǔ)類型及其端口的寬度/數(shù)量/類型),并生成組合多個(gè)BRAM或LUT-RAM以實(shí)現(xiàn)每個(gè)邏輯存儲(chǔ)所需的任何額外邏輯。圖13給出了一個(gè)將具有2個(gè)讀端口和1個(gè)寫端口的邏輯2048×32位RAM映射到具有物理1024×8位雙端口RAM的FPGA的示例。首先,四個(gè)物理存儲(chǔ)并行組合在一起,形成更寬的存儲(chǔ),沒有額外的邏輯。然后,使用軟邏輯資源來執(zhí)行兩組四個(gè)物理BRAM的深度匹配,使得寫和讀地址的最高有效位分別用作寫使能和讀輸出多路復(fù)用選擇信號(hào)。最后,在這種情況下,我們需要兩個(gè)讀端口和一個(gè)寫端口,而物理磁盤最多只能支持2個(gè)讀/寫端口。為了實(shí)現(xiàn)第二個(gè)讀端口,整個(gè)結(jié)構(gòu)被復(fù)制(見圖13)或雙泵,如前所述。[61],[62]描述了幾種優(yōu)化RAM映射的算法。
圖13:將2048×32位2r+1w邏輯內(nèi)存映射到具有1024×8位1r+1w物理內(nèi)存的FPGA
在過去的25年里,F(xiàn)PGA的存儲(chǔ)結(jié)構(gòu)發(fā)生了很大的變化,并且變得越來越重要,因?yàn)镕PGA上存儲(chǔ)與邏輯的比例顯著增加。圖14顯示了從350納米Flex 10 K器件(1995年)到10納米Aeilex器件(2019年)的Altera/Intel器件中存儲(chǔ)位/邏輯元件(包括LUT-RAM)與邏輯元件數(shù)量的關(guān)系。隨著時(shí)間的推移,F(xiàn)PGA的存儲(chǔ)豐富程度逐漸增加,為了滿足對(duì)更多位的需求,現(xiàn)代BRAM比最初的存儲(chǔ)(2 kb)具有更大的容量(20 kb)。一些FPGA具有高度異構(gòu)的RAM,以便提供一些對(duì)小型或?qū)掃壿婻AM有效的物理RAM,以及對(duì)大型和相對(duì)窄的邏輯RAM有效的其他RAM。例如,Stratix (130 nm)有3種類型的BRAM,容量分別為512b、4kb和512kb。Stratix III中LUT-RAM (65納米)的引入減少了對(duì)小型BRAM的需求,因此轉(zhuǎn)移到了9 kb和144 kb BRAM的存儲(chǔ)架構(gòu)。Stratix V (28納米)和更高版本的Intel器件已經(jīng)轉(zhuǎn)向LUT-RAM和單個(gè)中型BRAM(20kb)的組合,以簡(jiǎn)化FPGA版圖以及RAM映射和放置。Tatsumura等人[52] 也呈現(xiàn)了Xilinx器件的片上存儲(chǔ)器密度的類似趨勢(shì)。與Intel相似,Xilinx的存儲(chǔ)架構(gòu)結(jié)合了LUT-RAM和一個(gè)中等大小的18 kbRAM,但也包括一個(gè)將兩個(gè)BRAM結(jié)合到一個(gè)36kb塊中的硬件電路。然而,Xilinx的最新器件還包括一個(gè)大的288 kb BRAM (UltraRAM),以更有效地處理非常大的緩沖區(qū),這表明在最佳BRAM架構(gòu)上仍然有廣泛的共識(shí)。
圖14:從350納米Flex 10k(1995年)到10納米Agilex(2019年)架構(gòu),Altera/Intel FPGAs每LE內(nèi)存位的趨勢(shì)。這些標(biāo)簽顯示了每種架構(gòu)中BRAM的大小
為了深入了解不同RAM塊的相對(duì)面積和效率,表2顯示了2048×72位邏輯RAM的資源使用、硅面積和頻率,當(dāng)它由Quartus(Altera/Intel FPGA的CAD流程)以多種方式在Stratix IV器件上實(shí)現(xiàn)時(shí)。硅面積的計(jì)算使用了已公布的Stratix III塊面積[63],并將其從65納米縮小至40納米,因?yàn)镾tratix III和IV具有相同的架構(gòu),但使用不同的工藝節(jié)點(diǎn)。由于這種邏輯RAM在Stratix IV上非常適合144kb的BRAM存儲(chǔ),所以當(dāng)映射到一個(gè)144kb的BRAM時(shí),它可以獲得最佳的面積。有趣的是,映射到18個(gè)9 kb的BRAMs在硅面積上只有1.9 倍大(注意,輸出寬度限制導(dǎo)致18個(gè)BRAMs,而不是可能預(yù)期的16個(gè))。9 kb的BRAM實(shí)現(xiàn)實(shí)際上比144 kb的BRAM實(shí)現(xiàn)更快,因?yàn)檩^小的BRAM具有更高的最大工作頻率。將如此大的邏輯存儲(chǔ)映射到LUT-RAM是低效的,需要12.7倍更多的面積,并以40%的頻率工作。最后,只映射到邏輯和布線源顯示了片上存儲(chǔ)的重要性:面積比144kb的BRAM大300倍多。雖然144 kb的BRAM對(duì)于這個(gè)單一的測(cè)試用例來說是最有效的,但是真正的設(shè)計(jì)有不同的邏輯RAM,對(duì)于小的或淺的存儲(chǔ)來說,9 kb和LUT-RAM的選項(xiàng)將優(yōu)于144 kb的BRAM,這激發(fā)了片上RAM資源的多樣性。為了選擇BRAM大小和最大字寬的最佳組合,需要一個(gè)RAM映射工具和工具來估計(jì)每個(gè)BRAM的面積、速度和功率[55]。已發(fā)表的對(duì)FPGA BRAM架構(gòu)權(quán)衡的研究包括[30],[55],[64]。
表2:Stratix IV上使用BRAMs、LUT-RAMs和寄存器的2048×72位1r+1w RAM的實(shí)現(xiàn)結(jié)果
到目前為止,所有的商用FPGA在它們的BRAM中只使用基于SRAM的存儲(chǔ)單元。由于工藝的變化,對(duì)更高密度的BRAM的需求使得存儲(chǔ)更豐富的FPGA和SRAM的縮小變得越來越困難。一些學(xué)術(shù)研究(例如如[52],[65])已經(jīng)探索了使用其他新興的存儲(chǔ)技術(shù),如磁隧道結(jié)(MTJs)來構(gòu)建FPGA存儲(chǔ)塊。根據(jù)[52],在相同的管芯尺寸下,基于MTJ的BRAMs可以將FPGA存儲(chǔ)容量提高高達(dá)2.95倍;然而,它們會(huì)增加工藝復(fù)雜度。
3.5 數(shù)字信號(hào)處理器模塊
最初,商用FPGA架構(gòu)中唯一的專用算法電路是進(jìn)位鏈,以實(shí)現(xiàn)高效的加法器,如第三章第一節(jié)所述。因此,乘法器必須使用LUTs和進(jìn)位鏈在軟邏輯中實(shí)現(xiàn),這導(dǎo)致了很大的面積和延遲損失。由于高乘法器密度的信號(hào)處理和通信應(yīng)用構(gòu)成了一個(gè)主要的FPGA市場(chǎng),設(shè)計(jì)人員提出了新的實(shí)現(xiàn)方法來減輕軟邏輯中乘法器實(shí)現(xiàn)的低效率。例如,無乘法器的分布式算術(shù)技術(shù)被用來在基于LUT的FPGAs上實(shí)現(xiàn)高效的有限脈沖響應(yīng)濾波器(FIR)結(jié)構(gòu)[66],[67]。
隨著乘法器在關(guān)鍵應(yīng)用領(lǐng)域的FPGA設(shè)計(jì)中的流行,以及它們?cè)谲涍壿嬛袑?shí)現(xiàn)時(shí)較低的面積/延遲/功率效率,它們很快成為FPGA架構(gòu)中專用電路硬化的候選對(duì)象。一個(gè)N位乘法器陣列由N平方個(gè)邏輯元件組成,只有2 N個(gè)輸入和輸出。因此,硬化乘法器邏輯的增益和可編程接口到FPGA布線結(jié)構(gòu)的成本導(dǎo)致了凈效率增益,并強(qiáng)烈主張?jiān)诤罄m(xù)的FPGA架構(gòu)中采用硬乘法器。如圖15左上角所示,Xilinx推出了其Virtex-II架構(gòu),該架構(gòu)采用了業(yè)界首款18×18位硬乘法器塊[68]。為了簡(jiǎn)化與完全定制的FPGA結(jié)構(gòu)的版圖集成,這些乘法器在BRAM列旁邊被排成列。為了進(jìn)一步降低互連成本,乘法器塊及其相鄰的BRAM共享一些互連資源,限制了BRAM塊的最大可用數(shù)據(jù)寬度。使用軟邏輯資源,可以將多個(gè)硬18位乘法器組合成更大的乘法器或FIR濾波器。
圖15:Altera/Intel和Xilinx FPGAs中的DSP塊演進(jìn)。增量添加的特征以紅色突出顯示
2002年,Altera采用了一種不同的方法,在其Stratix架構(gòu)中引入了針對(duì)通信和信號(hào)處理領(lǐng)域的全功能DSP模塊[42](參見圖15中的第二個(gè)模塊)。該DSP模塊的主要設(shè)計(jì)理念是通過硬化DSP模塊內(nèi)部的更多功能,并增強(qiáng)其靈活性以允許更多應(yīng)用使用它,從而最大限度地減少用于實(shí)現(xiàn)常見DSP算法的軟邏輯資源的數(shù)量。與Virtex-II架構(gòu)中的固定功能硬18位乘法器不同,Stratix DSP模塊可高度配置,支持不同的操作模式和乘法精度。每個(gè)Stratix可變精度DSP模塊跨越8行,可以實(shí)現(xiàn)8個(gè)9×9位乘法器、4個(gè)18×18位乘法器或1個(gè)36×36乘法器。
Altera選擇的這些操作模式突出了設(shè)計(jì)FPGA硬模塊的一個(gè)重要主題:通過添加低成本電路來增加這些模塊的可配置性和實(shí)用性。例如,一個(gè)18×18乘法數(shù)組可以分解成兩個(gè)9×9數(shù)組,它們一起使用相同數(shù)量的輸入和輸出(以及布線端口)。類似地,四個(gè)18×18乘法器可以使用廉價(jià)邏輯組合成一個(gè)36×36數(shù)組。圖16顯示了如何將一個(gè)18×18乘法器陣列分割成多個(gè)9×9陣列。通過將輸入和輸出引腳的數(shù)量增加一倍,它可以分成四個(gè)9×9陣列。然而,為了避免增加這些昂貴的布線接口,18×18陣列被分成兩個(gè)9×9陣列(圖中16的藍(lán)色)。這是通過在由紅色虛線指示的位置拆分部分積壓縮器樹,并將轉(zhuǎn)換功能添加到右上角數(shù)組的邊界單元格中來實(shí)現(xiàn)的,在圖16中用十字標(biāo)記。使用Baugh-Wooley算法[69]實(shí)現(xiàn)二進(jìn)制有符號(hào)乘法(左下角的數(shù)組已經(jīng)具有18×18數(shù)組的轉(zhuǎn)換能力)。
圖16:將一個(gè)18×18乘法器陣列分成兩個(gè)具有相同數(shù)量輸入/輸出端口的9×9陣列
除了可分割的乘法器陣列之外,Stratix DSP還集成了一個(gè)加法器/輸出塊來執(zhí)行求和和累加操作,以及可以配置為移位寄存器的硬化輸入寄存器,移位寄存器之間具有專用的級(jí)聯(lián)互連,以實(shí)現(xiàn)高效的FIR濾波器結(jié)構(gòu)[70]。晶格最新的28納米架構(gòu)也有一個(gè)可變精度的DSP模塊,可以實(shí)現(xiàn)相同的精度范圍,此外,還分別為濾波器結(jié)構(gòu)和視頻處理應(yīng)用提供特殊的一維和二維對(duì)稱模式。Xilinx還采用了一種全功能的DSP塊方法,在Virtex-4架構(gòu)中引入了DSP48芯片[71]。每個(gè)DSP都有兩個(gè)固定精度的18×18位乘法器,其功能與StratixDSP模塊相似(例如輸入級(jí)聯(lián)、加法器/減法器/累加器)。Virtex-4還引入了級(jí)聯(lián)加法器/累加器的能力,使用專用互連來實(shí)現(xiàn)具有硬化簡(jiǎn)化鏈的高速系統(tǒng)FIR濾波器。 N抽頭FIR濾波器在信號(hào)樣本X = {x0,x1,…,xT}和某些系數(shù)C = {c0,c1,…,c(n-1)}之間執(zhí)行離散的一維卷積,這些系數(shù)表示所需濾波器的脈沖響應(yīng),如等式1所示。
實(shí)踐中使用的許多FIR濾波器都是對(duì)稱的,ci =c(n-i) ,i = 0至N/2。由于這種對(duì)稱性,濾波器的計(jì)算可以重構(gòu)為等式2所示。
圖17顯示脈動(dòng)對(duì)稱FIR濾波器電路的結(jié)構(gòu),這是無線基站中FPGAs的一個(gè)關(guān)鍵用例。Stratix和Virtex-4DSP模塊都可以實(shí)現(xiàn)虛線框突出顯示的部分,與在FPGA的軟邏輯中實(shí)現(xiàn)它們相比,這導(dǎo)致了顯著的效率增益。有趣的是,雖然FPGA CAD工具會(huì)自動(dòng)在DSP塊中實(shí)現(xiàn)乘法(*)運(yùn)算,但它們通常不會(huì)利用任何高級(jí)DSP塊功能(例如累加,用于FIR濾波器的脈動(dòng)寄存器),除非設(shè)計(jì)者以適當(dāng)?shù)哪J绞謩?dòng)實(shí)例化DSP塊。因此,使用更強(qiáng)大的DSP模塊功能使設(shè)計(jì)更加輕便。
圖17:脈動(dòng)對(duì)稱FIR濾波電路
Stratix IIIDSP模塊類似于Stratix IIDSP模塊,但如果將結(jié)果相加以限制輸出布線接口的數(shù)量,則每半個(gè)DSP模塊(而不是兩個(gè))可以實(shí)現(xiàn)四個(gè)18×18乘法器[72]。表3列出了對(duì)稱和不對(duì)稱的51抽頭FIR濾波器的實(shí)現(xiàn)結(jié)果,在Stratix器件上使用和不使用硬件DSP模塊。當(dāng)不使用DSP塊時(shí),我們用兩種不同的情況進(jìn)行實(shí)驗(yàn):固定的濾波器系數(shù)和運(yùn)行時(shí)可以改變的濾波器系數(shù)。如果濾波器系數(shù)是固定的,則在軟邏輯中實(shí)現(xiàn)的乘法器陣列通過綜合部分積生成邏輯中對(duì)應(yīng)于系數(shù)值中的零比特的部分而被優(yōu)化。因此,與運(yùn)行時(shí)可能改變的輸入系數(shù)相比,它的資源利用率較低。對(duì)于對(duì)稱濾波器,即使使用DSP模塊,我們?nèi)匀恍枰褂靡恍┸涍壿嬞Y源來實(shí)現(xiàn)輸入級(jí)聯(lián)鏈和預(yù)加法器,如圖17所示。使用硬DSP模塊在系數(shù)固定的情況下導(dǎo)致比使用軟結(jié)構(gòu)的面積效率多3倍。對(duì)于運(yùn)行時(shí)可變的過濾器系數(shù),這一差距增長(zhǎng)到6.2倍。對(duì)于不對(duì)稱濾波器,完整的FIR濾波器結(jié)構(gòu)可以在DSP模塊中實(shí)現(xiàn),無需任何軟邏輯資源。因此,對(duì)于固定系數(shù)和輸入系數(shù),面積效率差距分別增加到3.9倍和8.5倍。這些收益很大,但仍低于學(xué)術(shù)界通常引用的FPGA和ASIC[11]之間的35倍差距。這種差異部分是由于大多數(shù)應(yīng)用電路中保留了一些軟邏輯,但即使在FIR濾波器完全適合沒有軟邏輯的DSP塊的情況下,面積減少也達(dá)到最大值8.5倍。低于[11]的35倍增益的主要原因是可編程布線的接口以及必須在DSP模塊中實(shí)現(xiàn)的通用模塊間可編程布線和多路復(fù)用器。在所有情況下,如表3所示,使用硬DSP模塊導(dǎo)致大約2倍頻率改善。
表3:Stratix IV上51抽頭對(duì)稱FIR濾波器的實(shí)現(xiàn)結(jié)果,使用和不使用硬化的DSP塊
Altera和Xilinx的后續(xù)代FPGA架構(gòu)僅見證了DSP塊架構(gòu)的微小變化。兩家供應(yīng)商的主要關(guān)注點(diǎn)是在不增加昂貴的可編程布線接口的情況下,微調(diào)關(guān)鍵應(yīng)用領(lǐng)域的DSP模塊功能。在Stratix V中,DSP塊被極大地簡(jiǎn)化為支持兩個(gè)18×18位乘法(無線基站信號(hào)處理中使用的關(guān)鍵精度)或一個(gè)27×27乘法(適用于單精度浮點(diǎn)尾數(shù))。因此,更簡(jiǎn)單的Stratix V DSP塊跨越了一個(gè)單一的行,這對(duì)于Altera的行冗余方案更友好。此外,添加了輸入預(yù)加法器以及存儲(chǔ)只讀濾波器權(quán)重的嵌入式系數(shù)庫(kù)[73],這允許實(shí)現(xiàn)圖17中所示的整個(gè)對(duì)稱濾波器結(jié)構(gòu),不需要任何軟邏輯資源。另一方面,Xilinx在其Virtex-5 DSP48E芯片[74]中從18×18乘法器切換到25×18乘法器,之后他們合并了輸入預(yù)加法器,并增強(qiáng)了加法器/累加單元,以支持Virtex-6DSP48E1芯片[75]中的位邏輯運(yùn)算。然后,他們將乘法寬度再次增加到27×18位,并在Ultrascale系列DSP48E2芯片中的算術(shù)邏輯單元中增加了第四個(gè)輸入[76]。
如圖15所示,直到2009年,DSP模塊架構(gòu)的發(fā)展主要是由通信應(yīng)用的要求驅(qū)動(dòng)的,尤其是在無線基站中,很少有學(xué)術(shù)研究探索[77],[78]。最近,F(xiàn)PGAs被廣泛應(yīng)用于數(shù)據(jù)中心,以加速各種類型的工作負(fù)載,如搜索引擎和網(wǎng)絡(luò)數(shù)據(jù)包處理[9]。此外,DL已經(jīng)成為數(shù)據(jù)中心和邊緣工作負(fù)載中許多應(yīng)用的關(guān)鍵組件,而MAC是其核心算術(shù)運(yùn)算。在這些新趨勢(shì)的推動(dòng)下,DSP模塊架構(gòu)朝著兩個(gè)不同的方向發(fā)展。第一個(gè)方向針對(duì)高性能計(jì)算(HPC)領(lǐng)域,增加了對(duì)單精度浮點(diǎn)(fp32)乘法的本機(jī)支持。在此之前,F(xiàn)PGA供應(yīng)商將為設(shè)計(jì)者提供IP核,這些核可以從定點(diǎn)DSP和大量軟邏輯資源中實(shí)現(xiàn)浮點(diǎn)算法。這為FPGAs在高性能計(jì)算領(lǐng)域與CPU和GPU(有專用浮點(diǎn)單元)競(jìng)爭(zhēng)創(chuàng)造了巨大的障礙。Intel的Arria10架構(gòu)首次引入了本機(jī)浮點(diǎn)功能,其主要設(shè)計(jì)目標(biāo)是避免DSP塊面積的大幅增加[79]。通過將相同的接口重新用于可編程布線,不支持不常見的功能,如次法距、標(biāo)志和多舍入方案,并最大限度地重用現(xiàn)有的定點(diǎn)硬件,塊面積的增加僅限于10%(即總芯片面積增加0.5%)。下一代Xilinx通用架構(gòu)的DSP58芯片也將支持浮點(diǎn)功能[80]。
第二個(gè)方向旨在增加低精度整數(shù)乘法的密度,特別是針對(duì)DL的推斷工作負(fù)載。先前的工作已經(jīng)證明了使用低精度定點(diǎn)算法(8位及以下)代替fp32,精度下降可以忽略不計(jì)或沒有,但大大降低了硬件成本[81]–[83]。然而,所需的精度取決于模型,甚至可以在同一模型的不同層之間變化。因此,F(xiàn)PGA已經(jīng)成為一種有吸引力的DL推斷解決方案,因?yàn)樗鼈兡軌驅(qū)崿F(xiàn)定制精細(xì)的數(shù)據(jù)路徑,與GPU相比具有更高的能效,與定制ASIC相比具有更低的開發(fā)成本。這導(dǎo)致學(xué)術(shù)研究人員和FPGA供應(yīng)商研究向DSP模塊添加對(duì)低精度乘法的本地支持。[84]的作者增強(qiáng)了類似Intel的DSP塊的可分割性,以支持更多的int9和int4乘法和MAC操作,同時(shí)保持相同的DSP塊布線接口并確保其向后兼容性。所提出的DSP塊可以實(shí)現(xiàn)4個(gè)int9和8個(gè)int4乘法/MAC運(yùn)算以及類似Arria-10的DSP塊功能,代價(jià)是DSP塊面積增加12%,這相當(dāng)于總芯片面積僅增加0.6%。與不支持這些操作模式的帶DSP的FPGA相比,該DSP塊將8位和4位DL加速器的性能分別提高了1.3倍和1.6倍,同時(shí)將已利用的FPGA資源分別減少了15%和30%。另一項(xiàng)學(xué)術(shù)工作[85]通過在DSP48E2塊中包含一個(gè)可分割的乘法器陣列來代替固定精度的乘法器,以支持int9、int4和int2精度,從而增強(qiáng)了類似Xilinx的DSP塊。它還添加了FIFO寄存器文件和DSP模塊之間的特殊專用互連,以實(shí)現(xiàn)更有效的標(biāo)準(zhǔn)、逐點(diǎn)和深度卷積層。此后不久,Intel宣布,下一代Agilex DSP塊將與半精度浮點(diǎn)(fp16)和浮點(diǎn)(bfloat16)精度一起添加相同的int9操作模式[86]。此外,下一代Xilinx Versal架構(gòu)將在其DSP58芯片中支持int8乘法[80]。
多年來,DSP塊架構(gòu)已經(jīng)發(fā)展到最適合FPGAs關(guān)鍵應(yīng)用領(lǐng)域的要求,并提供更高的靈活性,以便許多不同的應(yīng)用可以從其功能中受益。在這一演變的所有步驟中,共同的焦點(diǎn)是盡可能重用乘法器陣列和布線端口,以最好地利用這兩種昂貴的資源。然而,隨著高性能計(jì)算中的高精度浮點(diǎn)、通信中的中精度定點(diǎn)和DL中的低精度定點(diǎn)之間的關(guān)鍵FPGA應(yīng)用領(lǐng)域的DSP塊要求的最新進(jìn)展,這變得更加困難。因此,Intel最近宣布了一種人工智能優(yōu)化的FPGA,StATrix 10 NX,它用人工智能張量塊代替了傳統(tǒng)的DSP塊[87]。新的張量塊放棄了對(duì)傳統(tǒng)DSP模式和精度的支持,這些模式和精度針對(duì)通信領(lǐng)域,并采用了專門針對(duì)DL領(lǐng)域的新模式。在幾乎相同的芯片尺寸下,這種張量塊顯著地將每個(gè)塊的int8和int4 MACs的數(shù)量分別增加到30和60[88]。向所有乘法器提供輸入而不增加更多布線端口是一個(gè)關(guān)鍵問題。因此,NX張量塊引入了一個(gè)雙緩沖數(shù)據(jù)重用寄存器網(wǎng)絡(luò),可以從較少數(shù)量的布線端口順序加載,同時(shí)允許通用的DL計(jì)算模式來充分利用所有可用的乘法器[89]。Achronix的下一代Speedster7t FPGA還將包括一個(gè)機(jī)器學(xué)習(xí)處理(MLP)模塊[90]。除了fp24、fp16和bfloat16浮點(diǎn)格式之外,它還支持從int16到int3的各種精度。Speedster7t中的MLP模塊還將具有一個(gè)緊密耦合的BRAM和循環(huán)寄存器文件,允許重用輸入值和輸出結(jié)果。這些緊密集成的組中的每一個(gè)都有一個(gè)72位的外部輸入,但可以配置為具有高達(dá)144位的輸出,饋送到MLP乘法器陣列,從而將所需的布線端口數(shù)量減少2倍。
3.6 系統(tǒng)級(jí)互連:片上網(wǎng)絡(luò)
FPGA的外部IO接口(如DDR、PCIe和以太網(wǎng))的容量和帶寬不斷增加。在這些高速接口和越來越大的光纖之間分配數(shù)據(jù)流量是一項(xiàng)挑戰(zhàn)。這種系統(tǒng)級(jí)互連傳統(tǒng)上是通過配置部分FPGA邏輯和布線來實(shí)現(xiàn)軟總線,從而實(shí)現(xiàn)相關(guān)端點(diǎn)之間的多路復(fù)用、仲裁、流水線和布線。這些外部接口的工作頻率高于FPGA結(jié)構(gòu)所能實(shí)現(xiàn)的頻率,因此匹配其帶寬的唯一方法是使用更寬的(軟)總線。例如,一個(gè)單通道高帶寬存儲(chǔ)器(HBM)有一個(gè)128位雙數(shù)據(jù)速率接口,工作在1 GHz,因此在250 MHz工作的帶寬匹配軟總線必須是1024位寬。最近的FPGA集成了多達(dá)8個(gè)HBM通道[91]以及許多PCIe、以太網(wǎng)和其他接口,系統(tǒng)級(jí)互連可以快速使用FPGA邏輯和布線源的主要部分。此外,系統(tǒng)級(jí)互連往往會(huì)跨越很長(zhǎng)的距離。非常寬的總線和物理上很長(zhǎng)的總線的結(jié)合使得時(shí)序收斂具有挑戰(zhàn)性,并且通常需要軟總線的深度流水線操作,進(jìn)一步增加了它的資源使用。隨著FPGA外部接口的數(shù)量和速度的增加,以及金屬線寄生效應(yīng)(以及互連延遲)的不良擴(kuò)展,先進(jìn)工藝節(jié)點(diǎn)中的系統(tǒng)級(jí)互連挑戰(zhàn)變得更加困難[92]。
Abdelfattah和Betz[93]–[95]提出在FPGA結(jié)構(gòu)中嵌入一個(gè)硬的分組交換片上網(wǎng)絡(luò)(NoC),以實(shí)現(xiàn)更高效、更易于使用的系統(tǒng)級(jí)互連。雖然全功能數(shù)據(jù)包交換的NoC可以使用FPGA的軟邏輯和布線來實(shí)現(xiàn),但與軟NoC相比,具有硬化的處理器和鏈路的NoC的面積效率高23倍,速度快6倍,功耗低11倍。為FPGA設(shè)計(jì)一個(gè)硬的NoC是一個(gè)挑戰(zhàn),因?yàn)镕PGA架構(gòu)師必須為芯片做出許多選擇(例如布線器數(shù)量、鏈路寬度、NoC拓?fù)浣Y(jié)構(gòu)),但仍然保持了FPGA的靈活性,可以使用許多不同的外部接口和通信端點(diǎn)來實(shí)現(xiàn)各種各樣的應(yīng)用。[95]中的工作提倡布線器數(shù)量適中的網(wǎng)狀拓?fù)?例如16)和相當(dāng)寬(128位)的鏈路;這些選擇使面積成本不到總面積的2%,同時(shí)確保NoC更容易布局,一條NoC鏈路可以承載整個(gè)數(shù)據(jù)通道的帶寬。硬NoC控制器還必須能夠靈活地連接到在FPGA結(jié)構(gòu)中實(shí)現(xiàn)的用戶邏輯;Abdelfattahet等人[96]通過執(zhí)行寬度適配、跨時(shí)鐘域和電壓轉(zhuǎn)換,引入了將硬NoC布線器連接到FPGA可編程結(jié)構(gòu)的結(jié)構(gòu)端口。這將NoC從NoC結(jié)構(gòu)中分離出來,這樣NoC就可以以固定(高)頻率工作,并且仍然可以與不同速度和帶寬要求的FPGA邏輯和IO接口連接,只需很少的粘合邏輯。硬NoC似乎也非常適合數(shù)據(jù)中心的FPGA。數(shù)據(jù)中心FPGA通常由兩部分組成:shell提供與外部接口的系統(tǒng)級(jí)互連,一個(gè)角色實(shí)現(xiàn)應(yīng)用加速功能[9]。shell的資源使用可能很重要:在微軟的第一代Catapult系統(tǒng)中,它需要23%的器件資源[8]。Yazdanshenaset等人[97]表明,在這種shell+role FPGA用例中,硬NoC顯著提高了資源利用率、工作頻率和布線開銷。其他研究提出了特定于FPGA的優(yōu)化,以提高軟NoC的面積效率和性能[98]–[100]。然而,[101]表明,即使是優(yōu)化的軟NoC,在大多數(shù)方面(可用帶寬、延遲、面積和布線擁塞)仍然落后于硬NoC。
最近的Xilinx (Versal)和Achronix (Speedster7t)FPGAs集成了一個(gè)硬NoC [102],[103],類似于上面討論的學(xué)術(shù)建議。Versal使用硬NoC在各種端點(diǎn)(千兆收發(fā)器、處理器、子系統(tǒng)、軟結(jié)構(gòu))之間進(jìn)行系統(tǒng)級(jí)通信,事實(shí)上,這是外部存儲(chǔ)器接口與器件其余部分通信的唯一方式。它使用工作在1 GHz的128位寬的鏈路,匹配DDR信道的帶寬。它的拓?fù)浣Y(jié)構(gòu)與網(wǎng)格有關(guān),但是所有的水平鏈接都被推到器件的頂部和底部,以便更容易在FPGA布局中顯示。Versal NoC包含多行(即鏈路鏈和布線器鏈),以及許多垂直的NoC列(類似于任何其他硬模塊列,如DSP),具體取決于圖18(a)中所示的器件大小。NoC具有可編程布線表,這些布線表在引導(dǎo)時(shí)配置,并提供標(biāo)準(zhǔn)AXI接口[104]作為其結(jié)構(gòu)端口。Speedster7tNoC拓?fù)溽槍?duì)外部接口到幀傳輸進(jìn)行了優(yōu)化。它由圍繞結(jié)構(gòu)的外圍環(huán)組成,在FPGA結(jié)構(gòu)上有規(guī)則間隔的NoC控制器行和列,如圖18(b)所示。外環(huán)NoC可以獨(dú)立工作,而無需配置FPGA結(jié)構(gòu)來布線不同外部接口之間的流量。NoC的行和列之間沒有直接的聯(lián)系;來自連接到一個(gè)NoC行的主塊的數(shù)據(jù)包將通過外圍環(huán)到達(dá)連接到一個(gè)NoC列的從塊。
圖18:下一代(a) Xilinx Versal和(b) Achronix Speedster7t架構(gòu)中的片上網(wǎng)絡(luò)系統(tǒng)級(jí)互連
3.7 內(nèi)插器
FPGA是允許多個(gè)硅器件密集互連的內(nèi)插器技術(shù)的早期采用者。如圖19(a)所示,無源內(nèi)插器是一種硅器件(通常采用拖尾工藝技術(shù)以降低成本),其表面具有形成布線軌跡和數(shù)千個(gè)微凸點(diǎn)的傳統(tǒng)金屬層,這些金屬層連接到在其頂部翻轉(zhuǎn)的兩個(gè)或多個(gè)管芯?;趦?nèi)插器的FPGAs的一個(gè)動(dòng)機(jī)是以合理的成本實(shí)現(xiàn)高邏輯容量。制造前驗(yàn)證ASIC設(shè)計(jì)的高端系統(tǒng)和仿真平臺(tái)都需要具有高邏輯容量的FPGAs。然而,大型單片(即單硅芯片)器件的成品率很低,尤其是在工藝技術(shù)的早期階段(正好是FPGA最先進(jìn)的時(shí)候)。將多個(gè)較小的芯片組合在一個(gè)硅互連上是一種具有更高集成度的替代方法。2.5維系統(tǒng)的第二個(gè)動(dòng)機(jī)是將不同的專用小芯片(可能使用不同的處理技術(shù))集成到一個(gè)系統(tǒng)中。這種方法對(duì)FPGAs也很有吸引力,因?yàn)榻Y(jié)構(gòu)的可編程性可以橋接不同的小芯片功能和接口協(xié)議。
Xilinx最大的Virtex-7 (28納米)和Virtex Ultrascale(20納米)FPGAs使用無源硅內(nèi)插器將四個(gè)FPGA芯片集成在一起,每個(gè)芯片構(gòu)成FPGA的一部分行。最大的基于內(nèi)插器的器件在同一個(gè)工藝節(jié)點(diǎn)上提供了兩倍于最大單芯片F(xiàn)PGAs的邏輯元件。FPGA可編程布線需要大量的互連,這就提出了一個(gè)問題,即互連微凸點(diǎn)(比傳統(tǒng)的布線軌跡大得多,也慢得多)是否會(huì)限制系統(tǒng)的布線能力。例如,在Virtex-7基于內(nèi)插器的FPGAs中,只有23%的垂直布線軌跡通過內(nèi)插器在管芯之間交叉[105],估計(jì)附加延遲約為1 ns [106]。[105]中的研究表明,將FPGA邏輯設(shè)置為最小化內(nèi)插器邊界交叉的CAD工具,結(jié)合增加插入器交叉軌跡開關(guān)靈活性的結(jié)構(gòu)變化,可以大大減輕這種減少信號(hào)數(shù)量的影響。下一代Xilinx通用架構(gòu)(在第三章第六節(jié)中討論)中的NoC控制器的整個(gè)垂直和寬度在片之間交叉,有助于提供更多的互連帶寬。嵌入式NoC很好地利用了可以穿過中介層的有限數(shù)量的導(dǎo)線,因?yàn)樗愿哳l率運(yùn)行其鏈路,并且當(dāng)它們被分組交換時(shí),它們可以被不同的通信流共享。
取而代之的是,Intel FPGA使用更小的內(nèi)插器,稱為嵌入式多芯片互連橋(EMIB),嵌入在封裝襯底上,如圖19(b)所示。IntelStratix 10器件使用EMIB將大型FPGA結(jié)構(gòu)芯片與較小的IO收發(fā)器或HBM小芯片集成在同一個(gè)封裝中,將FPGA的這兩個(gè)關(guān)鍵元件的設(shè)計(jì)和工藝技術(shù)選擇去耦。最近的一些研究[107]–[109]使用EMIB技術(shù)將FPGA結(jié)構(gòu)與用于DL應(yīng)用的專用ASIC加速芯片緊密耦合。這種方法卸載了計(jì)算的特定內(nèi)核(例如matrixmatrixor矩陣向量乘法)到更高效的專用小芯片,同時(shí)利用FPGA結(jié)構(gòu)與外部世界接口,并實(shí)現(xiàn)快速變化的DL模型組件。
3.8 其他FPGA組件
現(xiàn)代FPGA架構(gòu)包含其他重要組件,我們不會(huì)詳細(xì)討論。其中一個(gè)組件是配置電路,它將比特流加載到數(shù)百萬個(gè)SRAM單元中,這些單元控制LUTs、布線開關(guān)和硬模塊中的配置位。上電時(shí),配置控制器從諸如板上FLASH或硬化PCIe接口的源串行加載該比特流。當(dāng)一組足夠的配置位被緩沖時(shí),它們被并行寫入一組配置SRAM單元,類似于將一個(gè)(非常寬的)字寫入SRAM陣列。這種配置電路也可以由FPGA軟邏輯訪問,允許器件的一部分進(jìn)行部分重新配置,而另一部分繼續(xù)處理。一個(gè)完整的FPGA應(yīng)用是非常有價(jià)值的知識(shí)產(chǎn)權(quán),如果沒有安全措施,只需復(fù)制編程比特流就可以克隆它。為了避免這種情況,F(xiàn)PGA CAD工具可以選擇性地加密比特流,并且FPGA器件可以具有由制造商編程的私有解密密鑰,使得比特流只能由購(gòu)買具有適當(dāng)密鑰的FPGA的單個(gè)客戶使用。
由于FPGA應(yīng)用通常以不同的速度與許多不同的器件通信,它們通常包括幾十個(gè)時(shí)鐘。這些時(shí)鐘大多由片內(nèi)可編程鎖相環(huán)(PLLs)、延遲鎖定環(huán)(DLL)和時(shí)鐘數(shù)據(jù)恢復(fù)(CDR)電路產(chǎn)生。對(duì)于不同的應(yīng)用,以不同的方式分配許多高頻時(shí)鐘是具有挑戰(zhàn)性的,并且導(dǎo)致了用于時(shí)鐘的特殊互連網(wǎng)絡(luò)。這些時(shí)鐘網(wǎng)絡(luò)在原理上類似于第三章第二節(jié)的可編程互連,但使用了允許構(gòu)建低偏斜網(wǎng)絡(luò)(如H樹)的布線和開關(guān)拓?fù)?,并使用更寬的金屬和屏蔽?dǎo)體來減少串?dāng)_和抖動(dòng)。
04結(jié)論和未來方向
FPGAs已經(jīng)從簡(jiǎn)單的可編程邏輯塊陣列和通過可編程加速互連的IOs發(fā)展成為更復(fù)雜的多芯片系統(tǒng),具有許多不同的嵌入式組件,如BRAM、DSP、高速外部接口和系統(tǒng)級(jí)NoC控制器。最近在高性能計(jì)算和數(shù)據(jù)中心領(lǐng)域采用FPGA,以及深度學(xué)習(xí)等新的高需求應(yīng)用的出現(xiàn),正在引領(lǐng)FPGA架構(gòu)設(shè)計(jì)的新階段。這些新應(yīng)用和數(shù)據(jù)中心的多用戶模式為架構(gòu)創(chuàng)新創(chuàng)造了機(jī)會(huì)。與此同時(shí),過程技術(shù)擴(kuò)展正在發(fā)生根本性的變化。線路延遲的伸縮性很差,這促使人們重新思考可編程的布線架構(gòu)。內(nèi)插和3D集成支持全新類型的異構(gòu)系統(tǒng)。控制功耗是一個(gè)壓倒一切的問題,并可能導(dǎo)致更多的電源門控和更多異構(gòu)硬件塊的FPGA。我們并不聲稱預(yù)測(cè)未來的FPGA架構(gòu),除了它將是有趣的和不同于今天!
審核編輯:湯梓紅
評(píng)論
查看更多