給MCU工程師詳解FPGA硬件屬性
我的許多朋友都是經(jīng)驗豐富的嵌入式設計工程師,但他們都是微控制器(MCU)背景,因此對于FPGA是什么以及FPGA能做什么只有一個模糊的概念。如果問急了,他們會說“你可以通過配置FPGA讓它做不同的事情”諸如此類的話,但他們真的不是很清楚FPGA里面有什么,或者如何在設計中使用FPGA。
本文引用地址:http://www.ex-cimer.com/article/201808/386541.htm事實上,MCU對有些任務來說是很適合的,但對其它一些任務來說可能做的并不好。舉例來說,當需要并行執(zhí)行大量計算任務時,F(xiàn)PGA可能會讓你喜出望外。在本文中我們將討論FPGA的硬件屬性。
簡單的FPGA構(gòu)造
在集成電路領(lǐng)域人們經(jīng)常會聽到構(gòu)造(fabric)這個術(shù)語,它指的是FPGA器件的底層基礎結(jié)構(gòu)。(作為一個興趣點,單詞“構(gòu)造”來自中世紀英語fabryke,意思是“建造的某些東西”)。下面讓我們從FPGA中的內(nèi)核可編程構(gòu)造開始吧……
如果我們仔細觀察FPGA封裝的內(nèi)部,我們將看到硅片(技術(shù)術(shù)語裸片)。可編程構(gòu)造表現(xiàn)為可編程邏輯塊陣列,如下圖所示。如果我們用放大鏡“放大查看”,我們可以看到這種構(gòu)造由沉浸于可編程互連“海洋”中的許多邏輯“島”(可編程邏輯塊)組成。
圖1:簡單的FPGA構(gòu)造。
基本FPGA可編程構(gòu)造的一般性表示。
是啊,我確實是用自己的雙手親自創(chuàng)作的這幅圖片,我因此感到非常自豪呢,非常感謝你加以關(guān)注。如果我們進一步放大,我們可以看到,每個可編程模塊都包含有許多數(shù)字功能。在這個例子中,我們可以見到一個三輸入的查找表(LUT)、一個復用器和一個觸發(fā)器,但重要的是我們要認識到,這些功能的數(shù)量和類型對不同系列的FPGA來說是會變化的。
觸發(fā)器可以被配置(編程)為寄存器或鎖存器;復用器可以被配置為選擇一個到邏輯塊的輸入或LUT的輸出;LUT可以被配置為代表任何所要求的邏輯功能。
更詳細地了解LUT
上面所示的簡單例子包含一個三輸入的查找表(LUT)。在實際應用中,即使最簡單的FPGA都會使用四輸入LUT,而一些更大更復雜的器件甚至會宣稱使用六、七或八輸入的LUT,但為了簡單起見,我們還是討論三輸入版本。
我們會在以后的文章中討論各種類型的FPGA實現(xiàn)技術(shù)?,F(xiàn)在我們只需要知道,F(xiàn)PGA內(nèi)部的可編程單元可以用反熔絲、閃存單元或SRAM內(nèi)存單元來實現(xiàn)。先讓我們看一個用反熔絲技術(shù)創(chuàng)建的FPGA吧。這是一種一次性可編程(OTP)技術(shù),這意味著一旦你編程了這個FPGA,它將永遠保持這個狀態(tài)而不再改變。
形象化介紹這種技術(shù)的最簡單方法是用下圖所示級聯(lián)的2:1復用器(MUX)。對基于反熔絲技術(shù)的FPGA來說,編程器件相當于通過“硬件連線”將第一組復用器的輸入連接到實現(xiàn)目標邏輯功能所需的正確0或1值。下圖中所示的值反映的實際結(jié)果是,我們使用這個LUT實現(xiàn)了前面那張圖隱含的公式y(tǒng)=(a b)|c。在實際應用中,復用器可以用場效應管的分支“樹”來實現(xiàn),但我們在這里真的不用擔心最底層的實現(xiàn)細節(jié)。
圖2:輸入值經(jīng)“硬件連接的”反熔絲型LUT(左),輸入從SRAM單元饋入的SRAM型LUT(右)。
另外一種非常常見的FPGA實現(xiàn)技術(shù)是使用SRAM配置單元。同樣,我們會在以后的文章中討論更多的細節(jié)。這里我們所要知道的僅是當電路板第一次上電時,基于SRAM的FPGA會加載配置信息(我們可以把這個過程想像為器件的編程)。作為這種配置的一部分,用作LUT復用器輸入的SRAM單元會被加載進上圖所示的目標0或1值。
我沒有顯示0和1被加載進SRAM單元的那種機制,因為我不想讓問題變得復雜。出于這次討論的目的,我們真的無需擔心這種“魔術(shù)”是如何發(fā)生的。我在這里唯一要提的事(給你考慮的空間)是—使用一種被稱為部分再配置的技術(shù)—FPGA的一部分可以發(fā)起對另一部分進行再配置(當然反過來也行)。對于具有微控制器和/或軟件背景的讀者來說,我們可以將這種技術(shù)想象為相當于自我修改代碼的硬件。這意味著這種技術(shù)是非常非常強大的,但也會帶來很難隔離和調(diào)試的問題。
通用的輸入和輸出
FPGA器件還包含有通用的輸入/輸出(GPIO)引腳和焊盤(圖1中沒有顯示)。通過配置單元,F(xiàn)PGA器件內(nèi)的互連部分可以被編程為這樣:將器件的主輸入連接到一個或多個可編程邏輯塊的輸入。任何邏輯塊的輸出也可以用來驅(qū)動任何其它邏輯塊的輸入和/或FPGA器件的主輸出。另外,GPIO引腳可以被配置為支持種類廣泛的I/O標準,包括電壓、終端阻抗、擺率等。
世界上第一塊FPGA與本文中討論的架構(gòu)非常類似。這塊FPGA就是賽靈思公司在1985年推出的XC2064(是用2um工藝節(jié)點制造的),它包含有8×8=64的邏輯塊陣列,每個邏輯塊包含一個四輸入LUT和其它一些簡單功能。從那以后,F(xiàn)PGA發(fā)展勢不可擋,正像我們看到的那樣……
更為復雜的FPGA架構(gòu)
正如我們在前面說的那樣,賽靈思公司在1985年推出的第一塊FPGA—XC2064包含8×8=64的邏輯塊陣列,每個邏輯塊包含一個四輸入查找表及其它一些簡單功能。由于它們的容量非常有限,因此早期的FPGA只用來執(zhí)行一些相對簡單的任務,比如集中一些膠合邏輯,或?qū)崿F(xiàn)基本的狀態(tài)機。然而隨著時間的推移,事情開始改變……
隨著時間的推移和工藝節(jié)點的進步,F(xiàn)PGA的容量和性能不斷得到提高,功耗卻不斷的下降。直到大約2006年以前廣泛使用的一直是四輸入查找表。事實上,在寫這篇文章之時,較小的FPGA系列器件仍在使用四輸入的查找表,但一些高端器件可能使用六、七或八輸入的查找表。這些大家伙可能被用作一個大的查找表,或分裂成許多更小的功能,比如兩個四輸入的查找表或一個三輸入一個五輸入的查找表。在實際的高端器件中,這種可編程構(gòu)造可以描述相當于百萬級(有時甚至千萬級)的原始邏輯門。
如果某個邏輯功能(比方說計數(shù)器)是用FPGA的可編程構(gòu)造實現(xiàn)的,那么這個功能可以被說成“軟功能”。相比之下,如果某個功能是直接用芯片實現(xiàn)的,則被說成“硬功能”。(隨著這些功能變得越來越大越來越復雜,我們一般稱它們?yōu)閮?nèi)核)。軟內(nèi)核的優(yōu)勢在于,你可以讓它們做你想讓它們做的任何事。硬內(nèi)核的優(yōu)勢是它們占用較少的硅片面積,具有較高的性能,并且功耗較低。最優(yōu)的解決方案是混合使用軟內(nèi)核(用可編程構(gòu)造實現(xiàn))和硬內(nèi)核(直接用硅片實現(xiàn))。這樣,除了基于查找表的可編程構(gòu)造外,今天的FPGA可以利用以下介紹的各種硬內(nèi)核進行性能增強:
圖3:更復雜的FPGA架構(gòu)。
舉例來說,該器件可能包含數(shù)千個加法器、乘法器和數(shù)字信號處理(DSP)功能;數(shù)兆位的片上內(nèi)存,大量的高速串行互連(SERDES)收發(fā)器模塊,以及眾多的其它功能。
帶嵌入式處理器的FPGA
這是真正讓人興奮的事情……你可以用FPGA中的普通可編程構(gòu)造做的事情之一是,使用其中的一部分實現(xiàn)一個或多個軟處理器內(nèi)核。當然,你可以實現(xiàn)不同規(guī)模的處理器。舉例來說,你可以創(chuàng)建一個或多個8位的處理器,加上一個或多個16位或32位的軟處理器—所有處理器都在同一器件中。
如果FPGA供應商希望提供一個占用較少硅片面積、消耗較低功率但性能更高的處理器,解決方案是將它實現(xiàn)為硬內(nèi)核。一個非常令人興奮的開發(fā)成果是Altera和賽靈思等公司最近推出的SoC FPGA??紤]下面所示這個例子:
圖4:一種新的SoC FPGA
這個漂亮的小東西整合了一個完全以硬內(nèi)核方式實現(xiàn)的雙路ARM Cortex-A9微控制器子系統(tǒng)(運行時鐘高達1GHz,包含浮點引擎,片上緩存,計數(shù)器,定時器等),以及種類廣泛的硬內(nèi)核接口功能(SPI,I2C,CAN等),還有一個硬內(nèi)核的動態(tài)內(nèi)存控制器,所有這些組件都利用大量傳統(tǒng)的可編程構(gòu)造和大量的通用輸入輸出(GPIO)引腳進行了性能增強。(即將在16nm節(jié)點推出的一款SoC FPGA據(jù)稱包含四內(nèi)核的64位ARM Cortex-A53處理器,雙內(nèi)核32位ARM Cortex-R5實時處理器,以及一個ARM Mali-400MP圖形處理器。這些可不是你祖母時候的FPGA哦!)
傳統(tǒng)的嵌入式系統(tǒng)架構(gòu)師可能將其中一個器件放置在電路板上,并將它用作傳統(tǒng)的高性能雙內(nèi)核ARM Cortex-A9微控制器。當電路板上電時,硬微控制器內(nèi)核立即啟動,并在任何可編程構(gòu)造完成配置之前就可用了。這樣可以節(jié)省時間和精力,并讓軟件開發(fā)人員和硬件設計師同時開始開發(fā)。
一種情形是軟件開發(fā)人員捕獲他們的代碼,在SoC FPGA的Cortex-A9處理器上運行這些代碼,然后通過分析識別任何可能嚴重影響性能并成為瓶頸的功能。這些功能隨后可能就轉(zhuǎn)交給硬件設計工程師用可編程構(gòu)造來實現(xiàn),它們(這些功能,不是設計工程師)將使用較低的時鐘頻率提供明顯更高的性能,而且功耗更低。
前面我們說過,硬內(nèi)核實現(xiàn)的功能(圖4所示的ARM Cortex-A9就是一種硬內(nèi)核)與等效的軟內(nèi)核相比具有更高的性能和更低的功耗。但現(xiàn)在我們又說如果在硬內(nèi)核處理器上運行的軟件功能是個瓶頸,我們可以用可編程構(gòu)造來實現(xiàn),這樣它就能……你理解的沒錯,提供更高的性能和更低的功耗。
評論