緒論
在計(jì)算機(jī)與電子產(chǎn)品的世界中,我們習(xí)慣于通過(guò)兩種截然不同的方法實(shí)現(xiàn)計(jì)算:硬件以及軟件。計(jì)算機(jī)硬件,比如專用集成電路(ASIC),為關(guān)鍵任務(wù)提供了運(yùn)算快速與資源高度優(yōu)化的方案。但是 ASIC 一旦設(shè)計(jì)與加工完成,這其中需要花費(fèi)數(shù)以百萬(wàn)美元的成本與大量努力,就只能永久性地配置為單一應(yīng)用的解決方案。計(jì)算機(jī)軟件可以靈活地改變應(yīng)用,可以進(jìn)行大量不同的計(jì)算任務(wù)。但是軟件相比 ASIC 硬件實(shí)現(xiàn),在性能、硅片面積效率以及功耗等方面的表現(xiàn)有數(shù)量級(jí)的差距。
現(xiàn)場(chǎng)可編程邏輯門陣列(FPGA)是一種真正意義上的革命性器件,融合了軟件與硬件各自的優(yōu)勢(shì)。FPGA 所實(shí)現(xiàn)的電路與專用硬件相似,提供遠(yuǎn)超軟件的功耗、面積以及性能。而且,能夠輕易并低成本地重新編程,以適應(yīng)范圍廣泛的、不同的計(jì)算任務(wù)。與專用計(jì)算硬件一樣,F(xiàn)PGA 能夠利用空間上分布于整個(gè)芯片的資源并行數(shù)以百萬(wàn)計(jì)的運(yùn)算,相較于軟件所基于的通用處理器,速度運(yùn)算最高可以快上百倍。然而,與 ASIC 不同的是,這些運(yùn)算任務(wù)是編程到 FPGA 器件中的,而不是像 ASIC 一樣是在生產(chǎn)中固化的。這意味著基于 FPGA 的系統(tǒng)可以多次編程或者重編程(reprogrammed)。
有時(shí),重編程可用于修復(fù)系統(tǒng)的錯(cuò)誤行為,或者用于添加新的功能。而有時(shí),F(xiàn)PGA 也可通過(guò)重編程轉(zhuǎn)換為一個(gè)為新運(yùn)算任務(wù)量身設(shè)計(jì)的計(jì)算引擎。利用在運(yùn)行過(guò)程中的可重編程特性,單個(gè) FPGA 芯片甚至能夠?qū)崿F(xiàn)多塊專用芯片的不同功能。
但確實(shí),F(xiàn)PGA 實(shí)現(xiàn)軟硬件兩者的優(yōu)勢(shì)并不是沒有代價(jià)的。FPGA 幾乎具有軟件所有的靈活性優(yōu)勢(shì)以及可以使用軟件開發(fā)模型,并且具有接近硬件的高效率優(yōu)勢(shì)——但無(wú)論是相比軟件還是硬件,F(xiàn)PGA 實(shí)現(xiàn)還是有差距。相較于運(yùn)行軟件的通用微處理器,F(xiàn)PGA 的性能與功耗效率最高可比前者要高上幾個(gè)數(shù)量級(jí),但是高效的 FPGA 系統(tǒng)開發(fā)過(guò)程要復(fù)雜的多。通常來(lái)說(shuō),F(xiàn)PGA 只適合于處理以較長(zhǎng)數(shù)據(jù)流為輸入的運(yùn)算,比如信號(hào)處理、網(wǎng)絡(luò)以及其他數(shù)據(jù)流應(yīng)用。相較于 ASIC,F(xiàn)PGA 在面積、延遲以及性能方面有 5-25 倍的差距。然而, 單個(gè) ASIC 設(shè)計(jì)需要數(shù)個(gè)月到幾年的時(shí)間,花費(fèi)幾百萬(wàn)美元,F(xiàn)PGA 開發(fā)則僅需幾天,成本在幾十至幾百美元之間。(譯注:通常這個(gè)說(shuō)法適用于 FPGA 實(shí)現(xiàn)單一功能,而不是整個(gè)系統(tǒng),后者的開銷無(wú)疑會(huì)更高)對(duì)于那些不需要極高性能或者效率的系統(tǒng)來(lái)說(shuō),F(xiàn)PGA 實(shí)現(xiàn)是一個(gè)更吸引人的方案,因?yàn)?FPGA 方案開發(fā)更為簡(jiǎn)單,并可通過(guò)可重編程特性輕松地修復(fù)缺陷與添加功能。對(duì)于許多任務(wù),尤其是對(duì)初學(xué)的電子開發(fā)者來(lái)說(shuō),F(xiàn)PGA 是一種理想的選擇。
圖 I.1 FPGA 內(nèi)部結(jié)構(gòu)抽象;邏輯塊(內(nèi)部大方塊)嵌入在通用布線結(jié)構(gòu)中
圖 I.1展示了 FPGA 的內(nèi)部構(gòu)造。其內(nèi)部由邏輯塊組成,邏輯塊嵌入在一個(gè)通用的布線結(jié)構(gòu)中。邏輯塊可實(shí)現(xiàn)基礎(chǔ)邏輯門(Gate),大量邏輯塊排列成陣列(Array),這就是 FPGA 中的 ‘G’ 和 ‘A’ 的由來(lái)。邏輯塊由處理單元與觸發(fā)器構(gòu)成,分別用于實(shí)現(xiàn)組合邏輯與時(shí)序邏輯。處理單元是一小塊存儲(chǔ)空間,可實(shí)現(xiàn)任意的五輸入或者六輸入的布爾函數(shù)。(譯注:處理單元即為查找表(LUT),輸入數(shù)量取決于具體器件)通用布線結(jié)構(gòu)支持邏輯塊端口間任意的連線,所以各個(gè)邏輯塊可以按開發(fā)者設(shè)想的順序連接。
得益于 FPGA 的通用性與靈活性,可以實(shí)現(xiàn)非常復(fù)雜的電路。目前的 FPGA 器件可以實(shí)現(xiàn)百萬(wàn)門(譯注:電路中的組合邏輯電路規(guī)模等效于百萬(wàn)個(gè)基礎(chǔ)邏輯門,如與非門)電路,工作頻率達(dá)到上百M(fèi)Hz(譯注:一般在300MHz以下)。為了提高電路的速度以及規(guī)模,F(xiàn)PGA 在邏輯塊陣列的基礎(chǔ)上增加了一些特別的單元,比如大規(guī)模的存儲(chǔ)塊(BRAM)、乘法器、快速進(jìn)位鏈(fast-carry)甚至加入整個(gè)微處理器單元。(譯注:還有以太網(wǎng)控制器、DDR控制器以及高速總線的串行收發(fā)器,這些單元都是固化電路,不可編程的)通過(guò)這些預(yù)先定義并固化在硅片上的額外單元,單片 FPGA 便有能力構(gòu)成整個(gè)完整的系統(tǒng)。
FPGA 中的邏輯以及布線單元的可重構(gòu)由編程節(jié)點(diǎn)控制(programming points),基于反熔絲(antifuse)、SRAM 或者 FLASH 技術(shù),一般來(lái)說(shuō) SRAM FPGA 對(duì)于可重構(gòu)計(jì)算是一個(gè)適宜的選擇,SRAM 也是目前商用 FPGA 的主流技術(shù)。在 SRAM FPGA 中,每個(gè)布線或者邏輯單元的功能都由存儲(chǔ)于 SRAM 介質(zhì)中的內(nèi)容決定。整個(gè)器件中的 SRAM 內(nèi)容可通過(guò)一個(gè)配置文件或者比特流(bitstream)進(jìn)行配置,編程為用戶定義的功能。因此,整個(gè)配置過(guò)程可以快速地進(jìn)行,并且不需要一些固化步驟。(譯注:SRAM 的寫入擦除均十分快速且易于進(jìn)行)開發(fā)者能夠很方便地在自己的工作臺(tái)上對(duì)器件進(jìn)行編程。哪怕 FPGA 器件已經(jīng)安裝于終端產(chǎn)品中,編程也十分容易進(jìn)行。這就是為什么 FPGA 會(huì)被稱為現(xiàn)場(chǎng)可編程(Field programmable)的原因,并區(qū)別于那些僅在生產(chǎn)時(shí)可編程的掩膜可編程(mask programmable)器件,這些器件的可編程只能在產(chǎn)線上通過(guò)相應(yīng)設(shè)備進(jìn)行,無(wú)法在客戶現(xiàn)場(chǎng)完成。
譯注:Field programmable 指產(chǎn)品出了問(wèn)題,帶著電腦去用戶現(xiàn)場(chǎng)調(diào)試,干過(guò)這事兒都懂:苦差啊。
因?yàn)?FPGA 的定制只需要將相應(yīng)的內(nèi)容寫入到片上的存儲(chǔ)中,因此和編譯、然后將程序加載到計(jì)算機(jī)中運(yùn)行這一軟件開發(fā)流程相似。FPGA 相對(duì)應(yīng)的流程是創(chuàng)建與 FPGA 電路對(duì)應(yīng)的比特流、然后將比特流寫入到器件中(可見圖 I.2)。盡管有多種建立 FPGA 電路的方法,可以借助工具將軟件代碼(譯注:HLS)、原理圖或者其他格式的數(shù)據(jù)轉(zhuǎn)換為電路。FPGA 開發(fā)者一般還是通過(guò)硬件描述語(yǔ)言(HDL,Hardware description language)來(lái)構(gòu)建一個(gè)應(yīng)用,比如 Verilog 和 VHDL。由 HDL 描述的電路經(jīng)過(guò)一系列步驟轉(zhuǎn)換為可映射至 FPGA 器件的邏輯,這些步驟包括:
邏輯綜合(logic synthesis),將高級(jí)語(yǔ)法以及行為級(jí)描述,轉(zhuǎn)換為邏輯門網(wǎng)表。
工藝映射(technology mapping ),將若干邏輯門為劃分至一個(gè)邏輯組,并將邏輯組高效地映射于 FPGA 的邏輯資源。
布局布線(placement & routing,P&R),將邏輯組指定至器件上某個(gè)具體的邏輯單元,并按照用戶定義連接各個(gè)邏輯單元之間的端口。
生成比特流(bitstream generation),將布局布線后的信息生成為一個(gè)二進(jìn)制文件,用于恰當(dāng)?shù)嘏渲闷骷壿媶卧c布線資源。
在設(shè)計(jì)編譯完成后,我們可以通過(guò)比特流將 FPGA 器件編程為對(duì)應(yīng)于某個(gè)計(jì)算應(yīng)用的平臺(tái)。一般通過(guò)主機(jī)上的處理器完成比特流的下載工作?;蛘呖梢詫㈩A(yù)先編程完成的存儲(chǔ)介質(zhì)連接至 FPGA 的配置管腳。無(wú)論如何,F(xiàn)PGA 在每次上電之后都需要讀取比特流進(jìn)行配置。或者在運(yùn)行時(shí),用戶可以按需控制器件重新下載比特流進(jìn)行重配置。一旦 FPGA 配置完成,那么就會(huì)像一個(gè)具有特定功能的數(shù)字電路一樣工作。
因?yàn)?FPGA 同時(shí)具有軟件靈活性與硬件高性能兩項(xiàng)特性,F(xiàn)PGA 開發(fā)者的思路需要區(qū)別于純粹的軟件或者硬件開發(fā)者。軟件開發(fā)者一般開發(fā)串行執(zhí)行的程序,最大化利用微處理器的性能,來(lái)執(zhí)行一系列的指令
譯注:假設(shè)程序員只有一個(gè)單獨(dú)的處理核,并且目標(biāo)運(yùn)算的指令數(shù)量固定。軟件程序員的目標(biāo)就是降低相同數(shù)量指令的執(zhí)行時(shí)間,換句話說(shuō),減少微處理器的等待時(shí)間。
但是在高質(zhì)量的 FPGA 設(shè)計(jì)開發(fā)中需要考慮空間的并行性,即使用芯片上的多路資源并行計(jì)算,盡可能地減少運(yùn)算整體時(shí)間。
譯注:假設(shè)資源是無(wú)限的,對(duì)于目標(biāo)運(yùn)算,F(xiàn)PGA開發(fā)者的目標(biāo)是盡可能實(shí)現(xiàn)指令的并行,將指令盡可能地分配到多個(gè)并行處理單元上。
對(duì)于 ASIC 等硬件開發(fā)人員來(lái)說(shuō),因?yàn)闀?huì)從硬件電路實(shí)現(xiàn)出發(fā),所以在硬件設(shè)計(jì)中具有一定優(yōu)勢(shì)(譯注:在設(shè)計(jì)階段實(shí)現(xiàn)更好的 PPA,Performance/Power/Area)。但是 FPGA 的靈活特性能夠給開發(fā)者帶來(lái) ASIC 或者其他固化器件設(shè)計(jì)中不存在的新機(jī)遇。FPGA 設(shè)計(jì)可以更快地進(jìn)行新功能的迭代和部署,甚至在現(xiàn)場(chǎng)重新編程。因此,F(xiàn)PGA 設(shè)計(jì)不需要 ASIC 開發(fā)那么大規(guī)模的設(shè)計(jì)團(tuán)隊(duì),所需的驗(yàn)證工作也會(huì)更少 。此外,F(xiàn)PGA 的動(dòng)態(tài)可重編程特性使一些設(shè)計(jì)成為可能。比如,在運(yùn)算過(guò)程中設(shè)計(jì)可以根據(jù)當(dāng)前的外部需求的動(dòng)態(tài)改變重編程,動(dòng)態(tài)地優(yōu)化自身的結(jié)構(gòu)。或者通過(guò)定時(shí)對(duì)自身功能進(jìn)行重構(gòu),在小型的器件上時(shí)分復(fù)用功能,實(shí)現(xiàn)規(guī)模更大的設(shè)計(jì)。但是有一點(diǎn),F(xiàn)PGA 相比 ASIC 運(yùn)行速度要低得多,并且容量也小得多,設(shè)計(jì)者需要細(xì)致地對(duì)設(shè)計(jì)進(jìn)行優(yōu)化,以契合目標(biāo)器件。
圖 I.2 典型的 FPGA 開發(fā)流程示意圖
FPGA 是一項(xiàng)擁有獨(dú)立機(jī)遇以及挑戰(zhàn)的器件,是一個(gè)非常靈活的硬件平臺(tái)。本書《可重構(gòu)計(jì)算:可重構(gòu)計(jì)算的原理與實(shí)踐》旨在介紹基于 FPGA 平臺(tái)的各個(gè)方面,這些方面可能是積極的,也有可能是面臨問(wèn)題的,本書主要包括 6 個(gè)部分:
第一部分介紹硬件器件,包括 FPGA 以及那些為可重構(gòu)專門優(yōu)化的器件(章 1-4)
第二部分關(guān)注可重構(gòu)計(jì)算平臺(tái)的編程實(shí)現(xiàn),包括編程語(yǔ)言以及編程模型(章 5-12)
第三部分關(guān)注 FPGA 開發(fā)流程的軟件,包括圖 I.2 中每個(gè)步驟的詳情(章 13-20)
第四部分關(guān)注面向應(yīng)用的 FPGA 設(shè)計(jì),討論范圍包括:如何最高效地利用器件的邏輯資源(章21-26)這部分可以認(rèn)為是 FPGA 開發(fā)者的最后一課了,因?yàn)閷W(xué)完的讀者應(yīng)該已經(jīng)完全掌握了 FPGA 開發(fā)與軟件編程、ASIC 設(shè)計(jì)之間的區(qū)別。
第五部分是一系列案例學(xué)習(xí),闡述了可編程器件在各領(lǐng)域的應(yīng)用(章27-35)
第六部分包括了一些進(jìn)階主題,比如可重構(gòu)計(jì)算的理論模型以及衡量標(biāo)準(zhǔn)。此外還包括了可重構(gòu)的缺陷、容錯(cuò)(fault tolerance)等主題以及可重構(gòu)計(jì)算與納米技術(shù)之間潛在的協(xié)同作用。(章36-38)
在完成了所有 38 個(gè)章節(jié)的閱讀后,讀者會(huì)發(fā)現(xiàn) FPGA 當(dāng)前存在一些重大挑戰(zhàn)。但更重要的是,可重構(gòu)器件為計(jì)算科學(xué)帶來(lái)的獨(dú)特機(jī)遇與收益將遠(yuǎn)超為了克服這些挑戰(zhàn)所付出的努力。
原文標(biāo)題:可重構(gòu)計(jì)算:基于FPGA可重構(gòu)計(jì)算的理論與實(shí)踐
文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21798瀏覽量
606059 -
計(jì)算
+關(guān)注
關(guān)注
2文章
451瀏覽量
38866 -
可編程邏輯
+關(guān)注
關(guān)注
7文章
517瀏覽量
44184
原文標(biāo)題:可重構(gòu)計(jì)算:基于FPGA可重構(gòu)計(jì)算的理論與實(shí)踐
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論