FPGA全稱是Field-Programmable Gate Array,即現場可編程門陣列。
1、跟單片機相比
結構不同:
1.1、單片機的引腳、資源以及內部乘法器的數量是確定的,也就是說它的硬件是確定的。只要通過軟件編程就可以實現其功能。
1.2 、FPGA內部電路是不確定的,它可以通過編程來改變芯片的內部結構。內部乘法器、除法器和寄存器的數量都可以通過編程來改變。
小結:
A、單片機不改變硬件結構,而是通過改變它的指令執行的先后順序來實現我們所需要的功能。(指令包括讀、寫或跳轉指令)。
B、FPGA的編程和設計就是為了改變芯片內部的硬件電路結構來實現我們需要的功能。
考慮點不同:
1.3、在做單片機或電腦編程的時候,是不需要考慮時序的,只要有個函數,然后有個編程代碼實現就好了。寫一個函數,反復調用就可以實現很多的功能。
比如一個功能,單片機只需一個小時,但FPGA可能花一天甚至幾個月的時間。因為FPGA不僅要想到功能,還要想到電路和時序。它是需要一個一個時鐘慢慢去摳的細節化的一種設計方法。
所以,FPGA開發難度遠遠比單片機高。
FPGA是專做底層的開發和設計,專做底層優化的工作,FPGA非常難,這是它的一個特點。
2、FPGA應用場景
2.1、FPGA功能強大,試驗難度大,一般用在通信接口的設計以及數字信號處理等比較高端(數據量大、數據傳輸快、精度要求高)的場合。
日常應用中,要求不是特別高的場合廣泛使用單片機來實現。
2.2、FPGA還有一個特殊的應用場合,即ASIC的原型驗證。
怎么理解?集成電路開發流程長,風險高,當做一個集成電路開發的時候,從代碼編寫到仿真驗證,到PCB的布局布線,再到最后的生產都需要經過很長的時間周期。
為了保證成功率,希望一次通過,在生產之前可以在FPGA上跑一跑,驗證一下功能是否正常。
2.3、FPGA的非標場合(用量少的場合,常用于軍工領域)。
例如,USB等接口標準是固定的。但有一些特殊場合,它的市場需求本身不大,它本身也是某種特殊定義的接口,這種接口在市場上很難找到對應的芯片去實現這種接口,這時FPGA就可以派上用場,可以自己設計內部結構電路跟這種接口進行對接。
2.4、新科技的新型運用。
當一個新科技不明朗是否有市場前景的時候,肯定不會大批量的生產某一款芯片,可以先用FPGA來試驗,待市場需大量的需求時再大量的生產。
小結:
相較于專用的ASIC,FPGA工具在開發難度上降低了許多,并大大縮短了開發周期,而且由于FPGA是可重復編程的,其研發成本與風險要比ASIC減少許多,更適用于復雜多變的數據應用。
3、FPGA的缺點
FPGA的缺點是成本高,為什么這么說呢?專用的電路一定是把所有的電路都用上了,來實現我們所需要的功能。FPGA要同時滿足A、B、C的功能。但滿足A的某些功能在B或C上肯定是用不上的,所以它的利用率比較低,也可以理解為它的成本高。
所以,FPGA只能做一些高端的少批量的運用。當發現市場前景非常好,想要降成本的時候,可以把FPGA的代碼變成集成電路去生產。
4、FPGA的基本結構
FPGA不像專用的ASIC那樣通過固定的邏輯門電路來完成,而只能采用一種可重復配置的結構來實現,查找表(LUT)可以很好的滿足這一要求。
查找表(Look-Up-Table)是什么?其本質上是一個RAM存儲器。
舉例說明,以數字邏輯Y=A&B&C為例。在專用ASIC中,為實現該邏輯,邏輯門都已經事先確定好,如下圖所示:
Y=A&B&C的實現結構
在FPGA中就不一樣。A、B、C通過編程可以是任意關系。設計過程如下:
先用代碼寫出Y=A&B&C,然后用EDA工具(QUARTUS或其他開發工具)分析這一行代碼,得出A、B、C在不同輸入組合下(共8種),Y的值分別是多少,其真值表如下圖所示:
然后,軟件工具將所有結果寫到查找表(LUT)上,從而實現該代碼的功能。
Y=A&B&C的FPGA實現基本結構
這就是FPGA實現的原理。
5、知識補充
5.1、在FPGA內部有著軟內核和硬內核之分。
軟內核:可以通過門電路隨意搭起來實現某種功能的電路。比如在芯片內部實現了一個計數器邏輯,那么在構造計數器邏輯過程中使用到的功能可以被稱為“軟功能”。
硬內核:實現固定功能的芯片。電路是固定好的,通過硬件去實現的。比如:PLL時鐘單元,它的電路是固定的,因為時鐘通過外部晶振起振后,通過內部PLL時鐘倍頻,它不是數字電路可實現的,需要模擬電路倍頻實現。AD芯片和DA芯片也是模擬芯片,也是需要固定的資源在里面。
5.2、一種新的SOC FPGA(帶嵌入式處理器的FPGA)
在FPGA內部有存儲單元片內RAM塊,數據存放在RAM中,并由其設置工作狀態,若想要FPGA進行工作,就要對RAM進行編程,而如果外部有大量數據進行交互時,就要通過增加外設對數據進行暫時性的存儲,如SDRAM存儲器或DDR3存儲器,暫存在外設中的數據最終也是要通過FPGA內部的RAM進行存儲和處理。
目前,主流的FPGA都是基于SRAM工藝,在大部分開發板上都是串行配置模式。由于SRAM掉電就會丟失內部數據,因此往往都會外接一個能夠掉電保存數據的片外存儲器來保存程序。這樣一來,上電時FPGA便將外部存儲器種的數據讀入片內RAM以完成配置,對FPGA編程完成后便進入工作狀態。
目前FPGA內部已經有一些芯片電路,不僅僅有接口,門電路,還有ARM及其它CPU等等已經帶入嵌入式處理器的功能。
我們會發現電路板上功能有ARM+FPGA或DSP+FPGA協同合作,一個芯片上實現處理器+FPGA功能,這就是我們更強大的嵌入式處理器的功能。
優點:
1、更有利于PCB布局,面積更小,功能更強大。
2、ARM嵌入在芯片內部,ARM和FPGA之間有更多的總線和通信方式,速度可以更快。
5.3、數據的存儲及配置方式
當在EDA工具上將程序設計完成之后,便需要將軟件上的程序燒錄進FPGA內部。通過不同的配置模式,FPGA便有不同的編程方式,以下為幾種常見的配置模式:
1、并行模式:通過并行PROM、Flash配置FPGA。也就是說,把FPGA的程序先寫到PROM或Flash里面,上電的時候就會自動讀取里面的值,配置FPGA。
2、主從模式:使用一片PROM配置多片FPGA。
3、串行模式:串行PROM配置FPGA。
4、外設模式:將FPGA作為微處理器CPU的外設,由微處理器對其編程。
一個是FPGA,一個是CPU,CPU通過接口寫FPGA,然后再通過FPGA實現需要的功能。那么CPU配置FPGA參數的數據從哪里來?
可以增加一個RAM或FLASH,CPU讀取里面的內容,然后寫到FPGA內部,FPGA工作就能實現需要的功能。這是比較常見的一種方式。
這種方式跟CPU直接控制FPGA有什么不同嗎?也就是上電后FPGA直接讀取PROM的數據不就好了,為什么要多一個CPU呢?
其中一個原因是:FPGA的有些程序是加密的,CPU讀取數據并解密后再發給FPGA,FPGA再來實現功能。
審核編輯:湯梓紅
?
評論
查看更多