明德揚FPGA連載課程 第一階段設計基礎 一.FPGA簡介 第一節:什么是FPGA FPGA的官方解釋是 : Field-Programmable Gate Array,即現場可編程門陣列,它是在PAL、GAL、CPLD(不用讀系列)等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。 可以將FPGA理解為大量的邏輯門陣列,用戶可以自由組合以實現不同的電路功能,即FPGA的可編程特性。相比于馮諾依曼結構的CPU、GPU等通用處理器,FPGA具有效率更高速度更快的優點;相比于專職專用的ASIC,FPGA則具有開發難度小,開發周期更短的優勢,更適用于復雜多變的數據中心等應 但是FPGA也不是萬能的,優勢有時候也是劣勢。雖然FPGA相比于CPU效率更高、功耗更低的特點,但是易于開發程度遠遠不如CPU;雖然相比ASIC開發周期更短,但是也存在著資源浪費,成本過高、性能較差的問題,不能真正的替代ASIC 第二節:FPGA的工作原理 由于FPGA需要反復燒寫,所以他實現組合邏輯的結構不能像ASIC那樣通過固定的與非門來完成,而只能采用一種抑郁反復配置的結構。查找表(LUT)可以很好地滿足這一要求,目前主流FPGA都采用了基于SRAM工藝的查找表結構。通過燒寫文件改變查找表內容的方法來實現對FPGA的重復配置。 根據數字電路的基本知識可以知道,對于一個n輸入的邏輯運算,不管是與或非運算還是異或運算等等,最多只可能存在2n種結果。所以如果事先將相應的結果存放在一個存儲單元,就相當于實現了與非門電路的功能。FPGA的原理就是如此,他通過燒寫文件去配置查找表的內容,從而在相同的電路情況下實現了不同的邏輯功能。 查找表(Look-Up-Table)簡稱為LUT,LUT本質上就是一個RAM。目前FPGA中多實用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的RAM。當用戶通過原理圖或HDL語言描述了一個邏輯電路以后,FPGA開發軟件會自動計算邏輯電路的所有可能結果,并把真值表(即結果)事先寫入RAM,這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查找表,找出相應的內容,然后輸出即可。以實現y=(a&b)|c的功能為例。如果是ASIC,下面就是基本的實現結構: 而在FPGA,用戶首先寫出“y=(a&b)|c”代碼,軟件工具(QUARTUS、ISE或VIVADO)分析這一行代碼,得出a、b、c不同值下(共8種不同值),y的值分別是多少。 a b c y 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 然后軟件工具將結果寫到LUT上,從而實現了該代碼的功能。下圖就是FPGA的實現基本結構。LUT就像一個RAM,abc則相當于地址,通過abc的地址就得讀到值賦給y。 第三節:更為復雜的FPGA架構 正如我們在前面說的那樣,賽靈思公司在1985年推出的第一塊FPGA—XC2064包含8×8=64的邏輯塊陣列,每個邏輯塊包含一個四輸入查找表及其它一些簡單功能。由于它們的容量非常有限,因此早期的FPGA只用來執行一些相對簡單的任務,比如集中一些膠合邏輯,或實現基本的狀態機。然而隨著時間的推移,事情開始改變…… 隨著時間的推移和工藝節點的進步,FPGA的容量和性能不斷得到提高,功耗卻不斷的下降。直到大約2006年以前廣泛使用的一直是四輸入查找表。事實上,在寫這篇文章之時,較小的FPGA系列器件仍在使用四輸入的查找表,但一些高端器件可能使用六、七或八輸入的查找表。這些大家伙可能被用作一個大的查找表,或分裂成許多更小的功能,比如兩個四輸入的查找表或一個三輸入一個五輸入的查找表。在實際的高端器件中,這種可編程構造可以描述相當于百萬級(有時甚至千萬級)的原始邏輯門。 如果某個邏輯功能(比方說計數器)是用FPGA的可編程構造實現的,那么這個功能可以被說成“軟功能”。相比之下,如果某個功能是直接用芯片實現的,則被說成“硬功能”。(隨著這些功能變得越來越大越來越復雜,我們一般稱它們為內核)。軟內核的優勢在于,你可以讓它們做你想讓它們做的任何事。硬內核的優勢是它們占用較少的硅片面積,具有較高的性能,并且功耗較低。最優的解決方案是混合使用軟內核(用可編程構造實現)和硬內核(直接用硅片實現)。這樣,除了基于查找表的可編程構造外,今天的FPGA可以利用以下介紹的各種硬內核進行性能增強: 第四節:帶嵌入式處理器的FPGA 這是真正讓人興奮的事情……你可以用FPGA中的普通可編程構造做的事情之一是,使用其中的一部分實現一個或多個軟處理器內核。當然,你可以實現不同規模的處理器。舉例來說,你可以創建一個或多個8位的處理器,加上一個或多個16位或32位的軟處理器—所有處理器都在同一器件中。 如果FPGA供應商希望提供一個占用較少硅片面積、消耗較低功率但性能更高的處理器,解決方案是將它實現為硬內核。一個非常令人興奮的開發成果是Altera和賽靈思等公司最近推出的SoC FPGA。考慮下面所示這個例子: 圖4:一種新的SoC FPGA 這個漂亮的小東西整合了一個完全以硬內核方式實現的雙路ARM Cortex-A9微控制器子系統(運行時鐘高達1GHz,包含浮點引擎,片上緩存,計數器,定時器等),以及種類廣泛的硬內核接口功能(SPI,I2C,CAN等),還有一個硬內核的動態內存控制器,所有這些組件都利用大量傳統的可編程構造和大量的通用輸入輸出(GPIO)引腳進行了性能增強。(即將在16nm節點推出的一款SoC FPGA據稱包含四內核的64位ARM Cortex-A53處理器,雙內核32位ARM Cortex-R5實時處理器,以及一個ARM Mali-400MP圖形處理器。這些可不是你祖母時候的FPGA哦!) 傳統的嵌入式系統架構師可能將其中一個器件放置在電路板上,并將它用作傳統的高性能雙內核ARM Cortex-A9微控制器。當電路板上電時,硬微控制器內核立即啟動,并在任何可編程構造完成配置之前就可用了。這樣可以節省時間和精力,并讓軟件開發人員和硬件設計師同時開始開發。 一種情形是軟件開發人員捕獲他們的代碼,在SoC FPGA的Cortex-A9處理器上運行這些代碼,然后通過分析識別任何可能嚴重影響性能并成為瓶頸的功能。這些功能隨后可能就轉交給硬件設計工程師用可編程構造來實現,它們(這些功能,不是設計工程師)將使用較低的時鐘頻率提供明顯更高的性能,而且功耗更低。 前面我們說過,硬內核實現的功能(圖4所示的ARM Cortex-A9就是一種硬內核)與等效的軟內核相比具有更高的性能和更低的功耗。但現在我們又說如果在硬內核處理器上運行的軟件功能是個瓶頸,我們可以用可編程構造來實現,這樣它就能……你理解的沒錯,提供更高的性能和更低的功耗。 第五節:編程方式 FPGA是由存放在片內的RAM來設置其工作狀態的,因此工作室需要對片內RAM進行編程。用戶可根據不同的配置模式,采用不同的編程方式。FPGA有如下幾種配置模式: 1、并行模式:并行PROM、Flash配置FPGA; 2、主從模式:一片PROM配置多片FPGA; 3、串行模式:串行PROM配置FPGA; 4、外設模式:將FPGA作為微處理器的外設,由微處理器對其編程。 目前,FPGA市場占有率最高的兩大公司Xlinx和Altera生產的FPGA都是基于SRAM工藝的,需要在使用時外接一個片外存儲器以保存程序。上電時,FPGA將外部存儲其中的數據讀入片內RAM,完成配置后,進入工作狀態;掉電后FPGA恢復為白片,內部邏輯消失。這樣FPGA不僅能反復使用,還無需專門的FPGA編程器,只需通用的EPROM、PROM編程器即可。 |