FPGA基礎(chǔ)知識
一、FPGA是什么?
FPGA的全稱為Field-Programmable Gate Array,即現(xiàn)場可編程門陣列。FPGA是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物,是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。
簡而言之,FPGA就是一個可以通過編程來改變內(nèi)部結(jié)構(gòu)的芯片。
二、FPGA的結(jié)構(gòu)
目前主流的FPGA芯片是基于SRAM工藝的查找表結(jié)構(gòu)。在最底層的可配置邏輯模塊(如片上的邏輯單元)上,存在著基本的兩種部件:觸發(fā)器和查找表(LUT),而觸發(fā)? ? 器和查找表的組合方式不同,是各個FPGA家族之間區(qū)別的重要依據(jù),并且查找表本身的結(jié)構(gòu)也可能各不相同(有4輸入或6輸入或其他)。
查找表(Look-Up-Table)簡稱為LUT,其本質(zhì)上就是一個RAM。目前FPGA內(nèi)部中多使用4輸入的LUT,每一個LUT可以看成一個有4位地址線的RAM。
當用戶在EDA工具上通過原理圖或硬件描述語言設(shè)計了一個邏輯電路以后,F(xiàn)PGA開發(fā)軟件會自動計算邏輯電路的所有可能結(jié)果,并把真值表(即結(jié)果)事先寫入RAM中。這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查找表操作,通過地址找到對應(yīng)的RAM中的結(jié)果,最后將其輸出。
以實現(xiàn)數(shù)字邏輯Y=A&B&C的功能為例。如果是在專用ASIC中,為了實現(xiàn)該邏輯,邏輯門都已經(jīng)事先確定好,Y的輸出值為兩個邏輯與運算后的結(jié)果,其基本的實現(xiàn)結(jié)構(gòu)如下圖所示:

而在FPGA的結(jié)構(gòu)中若要實現(xiàn)同樣的邏輯功能,用戶首先在EDA工具中使用硬件描述語言設(shè)計出“Y=A&B&C”邏輯代碼,EDA工具(QUARTUS或其他開發(fā)工具)分析這一行代碼,得到其真值表。
1985,賽靈思公司推出了第一塊FPGA芯片—XC2064,最初的FPGA包含了8×8=64的邏輯塊陣列和85000個晶體管,其門電路不超過1000個,且每個邏輯塊由一個四輸入的查找表和其它一些簡單功能模塊構(gòu)成。FPGA誕生之初由于其容量非常有限,因此只能用來執(zhí)行一些相對簡單的任務(wù),如用來集中一些膠合邏輯或?qū)崿F(xiàn)基本的狀態(tài)機。
隨著技術(shù)的發(fā)展和工藝節(jié)點的進步,F(xiàn)PGA的容量和性能在不斷提高的同時,其功耗卻不斷的優(yōu)化減少。2006年以前四輸入查找表一直被廣泛使用,在一些高端器件可能會用上六輸入、八輸入或更多輸入端口的查找表。而一個多輸入的查找表又可以分解成較小輸入的查找表,即能夠分裂成許多更小的功能。
例如一個八輸入的查找表可以分解成兩個四輸入的查找表或分解成一個三輸入加一個五輸入的查找表。在實際的高端器件中,這種可編程構(gòu)造可以描述相當于百萬級(有時甚至千萬級)的原始邏輯門。
在FPGA內(nèi)部,有著 “軟內(nèi)核” 與 “硬內(nèi)核” 之分。如利用FPGA的可編程性在芯片內(nèi)部構(gòu)造實現(xiàn)了一個計數(shù)器邏輯,那么在構(gòu)造計數(shù)器邏輯過程中使用到的功能便可以被稱為“軟功能”,又稱之為軟內(nèi)核。而如果某個功能若是直接利用芯片實現(xiàn)的,則是利用了芯片內(nèi)部的“硬功能”,一般又稱之為硬內(nèi)核。
軟內(nèi)核與硬內(nèi)核之間優(yōu)勢互補:
軟內(nèi)核的優(yōu)勢在于可以在利用芯片資源的基礎(chǔ)上利用編程設(shè)計讓其完成需要實現(xiàn)的任何功能(注意是數(shù)字功能,不包括模擬功能)。
而硬內(nèi)核由于是實現(xiàn)固定功能的器件,因此其優(yōu)勢在于資源利用率高且功耗較低,占用硅片的面積也較小,并具有較高的性能。而兩者最重要的區(qū)別在于:與軟內(nèi)核相比硬內(nèi)核可用于實現(xiàn)模擬功能,例如鎖相環(huán)的倍頻功能,這個功能需要在模擬電路下實現(xiàn),所以這一部分是在FPGA內(nèi)部用硬件來實現(xiàn)的。
三、帶嵌入式處理器的FPGA
在上文中提到“軟內(nèi)核”與“硬內(nèi)核”的概念,而利用FPGA的可編程構(gòu)造實現(xiàn)的事情之一即為使用其中的一部分數(shù)字邏輯資源制作一個或多個軟處理器內(nèi)核,當然,也可以實現(xiàn)不同規(guī)模的處理器。舉例來說,可以創(chuàng)建一個或多個8位的處理器加上一個或多個16位或32位的軟處理器,而所有處理器都在同一器件中。
如果FPGA供應(yīng)商希望提供一個占用較少硅片面積、消耗較低功率但性能更高的處理器,解決方案是將其實現(xiàn)為硬內(nèi)核。如果需要高速、高性能的處理器,并且需要實現(xiàn)邏輯編程時,傳統(tǒng)的方法是在電路板上放置處理器(如ARM、DSP等)和FPGA,ARM或者DSP工程師實現(xiàn)軟件部分,F(xiàn)PGA工程師實現(xiàn)可編程邏輯部分,兩者協(xié)同合作。
現(xiàn)在最新的方案是使用ZYNQ一個芯片以更低的功耗、更高的速度實現(xiàn)以上功能。在2010年4月硅谷舉行的嵌入式系統(tǒng)大會上,賽靈思發(fā)布了可擴展處理平臺的架構(gòu)詳情,這款基于無處不在的ARM處理器的SoC可滿足復(fù)雜嵌入式系統(tǒng)的高性能、低功耗和多核處理能力要求。賽靈思可擴展處理平臺芯片硬件的核心本質(zhì)就是將通用基礎(chǔ)雙ARM Cortex-A9MP Core處理器系統(tǒng)作為“主系統(tǒng)”,結(jié)合低功耗28nm工藝技術(shù),以實現(xiàn)高度的靈活性、強大的配置功能和高性能。
四、數(shù)據(jù)存儲以及配置方式
在FPGA內(nèi)部存在著存儲單元片內(nèi)RAM塊,數(shù)據(jù)是存放在RAM中并由其來設(shè)置工作狀態(tài)的,若想要FPGA進行工作,就需要對片內(nèi)RAM進行編程。
而如果外部有大量數(shù)據(jù)交互時,就要通過增加外設(shè)來對數(shù)據(jù)進行暫時性的存儲,如SDRAM存儲器或者DDR3存儲器,暫存在外設(shè)中的數(shù)據(jù)最終也是要通過FPGA內(nèi)部的RAM進行存儲與處理。
當在EDA工具上將程序設(shè)計完成之后,便需要將軟件上的程序燒錄進FPGA內(nèi)部。通過不同的配置模式,F(xiàn)PGA便會有不同的編程方式。以下為常用的幾種配置模式:
1、并行模式:通過并行PROM、Flash配置FPGA;
2、主從模式:使用一片PROM配置多片F(xiàn)PGA;
3、串行模式:串行PROM配置FPGA;
4、外設(shè)模式:將FPGA作為微處理器的外設(shè),由微處理器對其編程。
目前,主流的FPGA都是基于SRAM工藝的,在大部分的FPGA開發(fā)板上,使用的都是串行配置模式。由于SRAM掉電就會丟失內(nèi)部數(shù)據(jù),因此往往都會外接一個能夠掉電保存數(shù)據(jù)的片外存儲器以保存程序。
這樣一來,上電時FPGA便將外部存儲器中的數(shù)據(jù)讀入片內(nèi)RAM以完成配置,對FPGA編程完成后便進入工作狀態(tài);
掉電后FPGA內(nèi)部SRAM中存儲的數(shù)據(jù)丟失,邏輯清零。以這種方式配置FPGA不僅能反復(fù)使用,還無需重復(fù)的手動配置。完成一次主動配置之后每次上電便會自動的實現(xiàn)FPGA的內(nèi)部編程。

版權(quán)聲明:本文為CSDN博主「KKKKK_CSDN」的原創(chuàng)文章。版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
原文鏈接:FPGA基礎(chǔ)知識_KKKKK_CSDN的博客-CSDN博客_fpga基礎(chǔ)知識
硬件訓練營高能來襲?。?!有啥不會皆可群內(nèi)詢問~ 信盈達——全力打造一個獨屬于硬件工程師們交流學習訓練營
況且現(xiàn)如今可是——技能走天下?。?! 想要往硬件發(fā)展的朋友萌,趕緊掃描下方二維碼加入大佬的訓練營吧 (內(nèi)有行業(yè)專業(yè)大佬,入坑不虧)
