FPGA是一種以數字電路為主的集成芯片,屬于可編程邏輯器件(Programmable Logic Device,PLD)的一種;FPGA是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。
本教程操作環境:windows7系統、Dell G3電腦。
fpga是什么
FPGA(Field Programmable Gate Array)是在PAL (可編程陣列邏輯)、GAL(通用陣列邏輯)等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。
FPGA本質也是一種芯片,是一種以數字電路為主的集成芯片。
FPGA于 1985 年由 Xilinx 創始人之一 Ross Freeman 發明,屬于可編程邏輯器件(Programmable Logic Device,PLD)的一種。這個時間比著名的摩爾定律出現的時間晚 20 年左右,但是 FPGA 一經發明,后續的發展速度之快,超出大多數人的想象。
圖 1 中給出了 FPGA 芯片的實物圖:
圖 1 FPGA芯片實物圖
FPGA 發展歷程
在 PLD 未發明之前,工程師使用包含若干個邏輯門的離散邏輯芯片進行電路系統的搭建,復雜的邏輯功能實現起來較為困難。
為了解決這一問題,20 世紀 70 年代,可編程邏輯陣列(Programmable Logic Array,PLA)問世,PLA 中包含了一些固定數量的與門、非門,分別組成了“與平面”和“或平面”,即“與連接矩陣”和“或連接矩陣”,以及僅可編程一次的連接矩陣(因為此處編程是基于熔絲工藝的),因此可以實現一些相對復雜的與、或多項表達式的邏輯功能,PLA 內部結構如圖 2 所示:

圖 2 PLA內部結構
與 PLA 同時問世的還有可編程只讀存儲器(Programmable Read-Only Memory,PROM),其內部結構如圖 3 所示。與 PLA 相同,PROM 內部包含“與連接矩陣”和“或連接矩陣”,但是與門的連接矩陣是硬件固定的,只有或門的連接矩陣可編程。

圖 3 PROM內部結構
若只有與門的連接矩陣可編程,而或門的連接矩陣是硬件固定的,那么這種芯片叫作可編程陣列邏輯器件(Programmable Array Logic,PAL),根據輸出電路工作模式的不同,PAL 可分為三態輸出、寄存器輸出、互補輸出,但 PAL 仍使用熔絲工藝,只可編程一次。PAL 的結構圖如圖 4 所示。

圖 4 PAL結構圖
在 PAL 的基礎上,又發展出了通用陣列邏輯器件(Generic Array Logic,GAL),相比于 PAL,GAL 有兩點改進:
- 采用了電可擦除的 CMOS 工藝,可多次編譯,增強了器件的可重配置性和靈活性;
- 采用了可編程的輸出邏輯宏單元(Output Logic Macro Cell,OLMC),通過編程 OLMC 可將 GAL 的輸出設置成不同狀態,僅用一個型號的GAL就可以實現所有PAL器件輸出電路的工作模式,增強了器件的通用性。
GAL 的結構圖如圖 5 所示:

圖 5 GAL結構圖
早期的 PLD 主要由上述四種類型的芯片組成,即 PROM、PLA、PAL 和 GAL。它們的共同特點是可以實現速度特性較好的邏輯功能,但由于其結構過于簡單,所以只能實現規模較小的數字電路。
隨著科技的發展、社會的進步,人們對芯片的集成度要求越來越高。早期的 PLD 產品不能滿足人們的需求,復雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)誕生。可以把 CPLD 看作 PLA 器件結構的延續,一個 CPLD 器件也可以看作若干個 PLA 和一個可編程連接矩陣的集合。CPLD 的內部結構圖如圖 6 所示。

圖 6 CPLD結構圖
FPGA 比 CPLD 早幾年問世,與 CPLD 并稱為高密度可編程邏輯器件,但它們有著本質的區別。FPGA 芯片的內部架構并沒有沿用類似 PLA 的結構,而是采用了邏輯單元陣列(Logic Cell Array,LCA)這樣一個概念,改變了以往 PLD 器件大量使用與門、非門的思想,主要使用查找表和寄存器。
除此之外,FPGA 和 CPLD 在資源類型、速度等方面也存在差異,如下表所示。
器件種類/特性 | FPGA | CPLD |
---|---|---|
內部結構 | 查找表(Look Up Table) | 乘積項(Product Term) |
程序存儲 | 內部為 SRAM 結構,外掛 EEPROM 或 Flash 存儲程序 | 內部為 EEPROM 或 Flash |
資源類型 | 觸發器資源豐富 | 組合邏輯資源豐富 |
集成度 | 高 | 低 |
使用場合 | 完成比較復雜的算法 | 完成控制邏輯 |
速度 | 快 | 慢 |
其他資源 | RAM、PLL、DSP 等 | —— |
保密性 | 一般不能保密(可以使用加密核) | 可加密 |
FPGA 的類型從內部實現機理來講,可以分為基于 SRAM 技術、基于反熔絲技術、基于 EEPROM/Flash 技術。就電路結構來講,FPGA 可編程是指三個方面的可編程:可編程邏輯塊、可編程 I/O、可編程布線資源。可編程邏輯塊是 FPGA 可編程的核心,我們上面提到的三種技術也是針對可編程邏輯塊的技術。
FPGA 的結構圖如圖 7 所示。

圖 7 FPGA結構圖
FPGA 的技術優勢
許多讀者都知道 FPGA 功能強大,但它強大在哪兒?
以單片機舉例說明,我們都知道,單片機功能強大,幾乎無所不能,而 FPGA 與之相比只強不弱。因為只要單片機能實現的功能,FPGA 就一定能實現,當然這需要加一個大前提——在 FPGA 資源足夠多的情況下。但是 FPGA 能實現的功能,單片機卻不一定能夠輕松實現,這是不爭的事實,如果你不相信,那只能說明你還不了解 FPGA。
說到這里,讀者不禁要問,既然 FPGA 這么厲害,為什么單片機的使用范圍更廣?那是因為在商業中,價格往往是影響產品的重要因素之一。
單片機的價格要遠遠低于 FPGA,而且根據性能和資源的不同,FPGA 的價格也存在很大差異,單枚 FPGA 芯片的價格從幾十元到幾十萬元不等。與之相比,單片機的價格要便宜很多,同樣的功能我們如果可以用價格低廉的單片機實現,就不會選擇相對昂貴的 FPGA 了,除非單片機滿足不了功能需求。所以公司自己進行開發時,為了節約成本,可能會選擇更加便宜的單片機,而不會選擇相對昂貴的 FPGA,因為單片機、ARM 這種微處理器的需求量很大,所以價格上更有優勢。
但無論是單片機、ARM 還是 FPGA,它們都只是一種幫助我們實現功能的工具,具體如何選擇,需要根據具體問題具體分析。總之,沒有萬能的工具,只有符合生產需求的工具。我們不應對某種工具存在偏見,要綜合考慮。同樣,當你了解得