在閱讀關於FPGA的文章時,如果我理解正確的話,它們基本上是完全可配置的邏輯門電路。因此,可以與他們一起設計任何東西。可以以最定制的方式設計一切,因此可以以微控制器更高效的方式達到相同的目的。有了它,看起來FPGA可以隨時隨地擊敗微控制器。所以我的問題是,如果FPGA確實如此出色,是什麼使它們無法比微控制器流行得多?從這個角度來看,在我看來,FPGA應該早就淘汰了微控制器。那麼為什麼不這樣呢?是成本,編寫FPGA的困難還是完全其他?
在閱讀關於FPGA的文章時,如果我理解正確的話,它們基本上是完全可配置的邏輯門電路。因此,可以與他們一起設計任何東西。可以以最定制的方式設計一切,因此可以以微控制器更高效的方式達到相同的目的。有了它,看起來FPGA可以隨時隨地擊敗微控制器。所以我的問題是,如果FPGA確實如此出色,是什麼使它們無法比微控制器流行得多?從這個角度來看,在我看來,FPGA應該早就淘汰了微控制器。那麼為什麼不這樣呢?是成本,編寫FPGA的困難還是完全其他?
您忽略了許多設計選擇因素:
ol>
與micros相比,FPGA的主要優勢在於它們速度更快並且可以並行執行更多操作。除此之外,您寧願使用微型。因此,在設計過程中,通常是從微型芯片開始,然後在確實需要速度和/或併發高速運行時勉強使用FPGA。即使這樣,您也只能在FPGA中實現對速度至關重要的部分,而將較低的速度控制功能等保留在微控制器中。
我在這裡尚未詳細說明的一個區別是,FPGA以與處理器完全不同的方式使用並表現為FPGA。
FPGA確實很好一遍又一遍地做完全相同的任務。例如,處理視頻,音頻或RF信號。或路由以太網數據包。或模擬流體流動。在任何情況下,您都會非常快速地拋出大量相同類型的數據,並且您希望以相同的方式處理所有這些數據。或者您想重複運行相同的算法。 FPGA實際上並沒有啟動和停止的“任務” [1],它的全部工作是對打開的所有數據執行相同的操作。它不會改變齒輪,也不會做其他任何事情。它是最終的生產線工人。它將永久地重複做同樣的事情,直到永遠。
CPU是靈活性的縮影。可以對它們進行編程以完全執行任何操作,並且可以對它們進行編程以同時執行多種不同的操作。它們具有啟動和停止的任務,變速,多任務,不斷切換和改變功能的功能。
FPGA和CPU完全相反。 CPU的商品是時間-它必須更快地完成工作。應用程序運行得越快越好。
FPGA的商品是空間。您的FPGA只有這麼大,並且只有太多可用的門來執行您想要的任務。在大多數情況下,問題是速度大於速度[2]。
可以使FPGA像CPU一樣工作。您可以將CPU IP內核放入FPGA中,但是由於其他人已經描述的原因,很難證明其合理性[3]。 FPGA和CPU是對立的,兩者都有各自的優缺點,因此都有各自的位置。
注意:
1)FPGA可以是可以執行不同的任務,但是即使那樣,它還是一個預先設計的特定數字。
2)速度也是FPGA設計規範。
3。將CPU放入FPGA的操作相對來說比較頻繁,但是要根據具體應用情況而定。例如,如果您需要一個非常小的微控制器並具有額外的FPGA空間。
最後:這個答案是一個很大的簡化-FPGA的使用非常多樣且非常複雜,這是對通常使用它們的方式。
正如Olin所說,諸如Micro之類的東西在許多任務上效率更高,而且幾乎總是可以找到FPGA出現在任何地方使用的Micro。所用矽的面積(以非線性方式轉化為成本)和功耗要小得多。因此,在FPGA上實現“軟” MCU並不少見,但是這種微控制器的成本和性能卻難以承受。
一些現代的FPGA包含一個或多個“硬”核,例如無處不在的ARM系列。而且,它們可能包含專用的內存塊,因為從門外製作內存確實效率很低。在典型的FPGA中,32位微核僅佔矽片面積的一小部分,這使您可以了解相對成本。
開發要困難得多,而IP往往不那麼容易。免費提供Micros和專用SOC解決方案-例如LCD控制器,PCI接口,以太網MAC。部分原因是通過公開HDL邏輯描述,他們轉移了設計,而不僅僅是設計的實例。另一個原因是性能取決於FPGA中邏輯的佈局,這在開發過程中需要付出很多努力。
進一步的複雜性是,大多數複雜的FPGA基於RAM進行配置,而過程成本卻很高。這樣就需要外部非易失性存儲器來存儲板上任何MCU的配置和程序存儲器。上電時必須將該內存加載到RAM中。
FPGA是工具箱中非常有用的工具,但是它們不會在短期內普遍取代MCU或ASIC。
工作中矽的最佳用途是ASIC,沒有浪費,但是它們具有巨大的學習曲線,NRE和不靈活性。
有兩種方法可以在芯片中構建靈活性。 a)具有空間優化的ALU,並在存儲的數據上反複使用它。這就是所謂的MCU,需要“不做任何事情”的大面積矽片,程序存儲器,從單元到單元運行的寬總線以及總線訪問開關。 b)具有細粒度的邏輯,並具有一些可選的空間優化部件,例如乘法器,小型RAM和簡單CPU。這就是所謂的FPGA,它需要大面積的“無所事事”的芯片,可編程的開關和連接線。分成串行塊,FPGA最適合需要高速並行操作的任務。當應用程序很繁重,而成本主要由矽成本決定時,這就是自然使用這兩種類型的方法。比矽更合適。 Altera有一些很小的非常低功耗的FPGA可以與極少數的MCU競爭。
就功耗和芯片利用率而言,FPGA與微處理器相比非常差。
FPGA在邏輯配置電路中消耗了大部分芯片面積,這不適用於微控制器。與微處理器的專用實現相比,可用的互連要多得多。
由於邏輯效率不高,FPGA比諸如微處理器的專用ASIC消耗的功率更多。 / p>
在專用ASIC中,可以在FPGA中實現的任何功能可以更高效,更便宜,功耗更低,電路板空間更小等方式完成。假設卷的大小足以抵消NRE。
遊戲Tank允許兩名玩家在屏幕上駕駛坦克並互相射擊。它具有用於每個戰車X和Y位置的“滑動”計數器,用於每個玩家射擊的X和Y位置,用於每個玩家角度和射擊角度的向上/向下計數器,用於每個玩家得分的計數器,X和Y光柵光束位計數器,以及在這些東西之上的許多控制電路。它具有從ROM提取並顯示比賽場數據的硬件,還具有從兩個ROM提取兩個玩家的戰車形狀和比分並顯示這些得分的硬件。
Atari 2600擁有一個滑動計數器,用於兩個玩家物體,兩個導彈物體中的每個物體以及一個稱為“球”的物體的水平位置,該物體在戰鬥中不使用,但在其他一些遊戲中使用。對於每個播放器對象,它都有硬件輸出存儲在8位鎖存器中的模式以及每個播放器的“延遲”八位鎖存器,只要其他播放器的播放器被複製到主8位鎖存器中形狀已更新。它還具有一個水平光束位置計數器和一個20位運動場形狀的鎖存器,該鎖存器每條掃描線輸出到屏幕兩次,右側副本顯示為左側的重複或反射。它具有檢測衝突的硬件,但不會檢測到任何後果。它沒有具有任何對象的垂直位置的硬件,也沒有光柵光束的垂直位置(!),也沒有與得分保持,得分顯示,遊戲時間等相關的任何硬件。
盒式磁帶中的軟件可以處理2600省略的所有硬件功能。每條掃描線只需要對照光柵的位置檢查每個對象的垂直位置一次,每幀最多更新一次玩家的得分和剩餘遊戲時間即可,玩家的得分存儲在遊戲場上方的掃描線上因此可能會共享用於運動場等的相同硬件。
在FPGA中實現類似“坦克”這樣的遊戲的通常方法是使用單獨的電路來實現不同的功能,這與1976年的街機遊戲機幾乎相同。這種方法可行,但要使用大量的硬件。基於微處理器的方法可以消除一半以上的硬件,而增加一個微處理器,這可能包含比其替換的硬件更少的電路(2600可以實現比Tank更複雜的遊戲,而Tank需要更多的硬件
FPGA非常適合需要一個可以同時執行許多簡單任務的設備的情況。但是,在需要執行許多任務但不需要同時處理它們的情況下,基於微處理器(或基於微控制器)的系統通常會更好一些,因為它們使少量使用變得容易完成大量不同目的的電路。
這完全是成本。當微型器件的價格低至30美分時,便宜的FPGA的價格就在5美元左右。成本似乎並不高,但是當您製作一百萬個放屁的新穎玩具以10美元的價格出售時,FPGA的價格將扼殺您的底線。
除了添加其他非常好的答案外,我認為FPGA的採用也屬於領域問題:例如,對於神經形態設備,FPGA板變得無處不在,因為對並行性的需求非常大,這就是
如果您推斷神經形態設備的趨勢,您可以想像並行化基於或迫切需要的其他領域可能會更多地採用FPGA。因此,也許FPGA不會在消費級產品中變得無處不在,但它可能適用於特定領域,因為它似乎正在出現在神經形態設備中。