我以前見過很多人談論FPGA,我知道它代表現場可編程門陣列,但是它如何工作以及使用FPGA的目的是什麼?
我以前見過很多人談論FPGA,我知道它代表現場可編程門陣列,但是它如何工作以及使用FPGA的目的是什麼?
它們是為您的電路添加邏輯的電子組件(因此它們類似於微控制器)。但是設計方法與uC(微控制器)完全不同。在uC中,您無法更改內部uC設計。您只能在其上運行“經典”程序。對FPGA進行編程更像是創建新硬件。您可以在邏輯門之間創建新的連接,並創建一個新的專用處理器。您可以在家裡,辦公桌和PC上完成所有操作。
聽起來很棒嗎?是的,但是有一些缺點。例如,價格(但我覺得很難比較),更高的功耗和更低的時鐘速度(但是您可以以一種智能的方式設計應用程序,並在一個時鐘週期內執行更多操作)。
有用的鏈接:
FPGA實際上是可以在現場進行編程的邏輯門陣列。觸發器,多路復用器,4位查找表等可以使用類C語言(Verilog)以任意方式連接。
uC,例如AVR,也是由類似的邏輯門組成,但它們是在製造設備時配置的。當然,它具有RAM和Flash,因此您可以編寫軟件來讀取輸入和控制輸出,但不能更改門的實際佈置。閘門將始終排列在ALU,內存控制器,串行端口等中。
uC的優點是您可以在現場(在辦公桌上)輕鬆編程要使用熟悉的高級語言(例如C)。問題是軟件很慢。要使輸入控件具有輸出,在最簡單的情況下,您可以編寫:
void loop(){buttonState = digitalRead(buttonPin); if(buttonState == HIGH){
digitalWrite(ledPin,HIGH);
} else {digitalWrite(ledPin,LOW); }}
這將變成十二條彙編指令,因此循環將需要一微秒左右的時間來控制一個輸入中的一個輸出。而且,整個uC芯片需要如此快速地完成。當然,您可以做很多事情,但是隨著uC忙於做其他事情,您控制輸出的能力就會降低。
在FPGA中,我可以將門配置為具有輸入控制1個時鐘輸出。因此,輸出跟隨輸入的時間可能會延遲25納秒。使用相同的時鐘週期,速度快40倍。 FPGA中的其餘門可以用來做很多其他事情,而不會影響這個小功能的速度。
FPGA的代碼將是一個簡單的觸發器:
始終@(擺姿勢時鐘)ledPin < = buttonPin;
在FPGA的成千上萬個中,這只需要1個FPGA單元,大約40個門。
我可以對FPGA重新編程以執行其他操作,例如,仍然使用一個FPGA單元,仍然在一個時鐘中基於四個輸入的組合來控制led。或者在幾個FPGA單元中,基於輸入的串行流控制led,這將是100個門。因此,我可以基於串行數據(例如“ ON”或“ OFF”)控制LED,並以非常高的速率(輕鬆達到20MHz)使用串行流,而仍然只使用FPGA容量的一小部分。
因此,FPGA的優勢顯然是速度。它可以完成uC可以做的任何事情,並且可以並行完成所有事情,並且可以更快地完成它。 uC需要幾毫秒完成的複雜事情,FPGA可以完成幾毫秒或更短的時間。只要在FPGA中還剩下一些門,我就可以為其添加更多功能,而不會影響FPGA中先前功能的速度或操作。順便說一句,FPGA可以很容易地以20MHz的時鐘速率運行。
成本是無法與眾不同的。我可以花5美元買到一個FPGA,它幾乎可以實現我見過的幾乎所有Arduino設計,與Arduino AVR芯片差不多。還有一些免費的FPGA工具鏈(IDE,編譯器,調試器)。
電源不可或缺。由於我可以以低得多的時鐘頻率運行FPGA來獲得與uC相同的功能,並使用其門的一小部分(未使用的門僅使用洩漏功率),因此FPGA可以擊敗幾乎任何基於uC的功率設計。
FPGA的最大缺點是,與uC程序相比,定義,編寫代碼和調試非平凡的FPGA設計要復雜得多,而且耗時得多。一個晚上可能要完成的典型uC項目在FPGA上可能要花費幾天的時間。
其他可能解決的問題是,大多數人都接受過軟件編程方面的培訓,但很少有人了解硬件編程。您可以相當輕鬆地學習Verilog。但是您還需要考慮硬件設計而不是軟件設計。設計模式有很大的不同。它們往往採用100引腳或更大的表面貼裝封裝,因此要構建電路板就比較困難。
最後一個問題是,對於很多易於使用的項目,可以實現很多有趣的項目uC,那麼為什麼還要煩惱FPGA?
如果您熟悉基本邏輯門,則應該知道它們實際上是瞬時的。當A,B或C改變時,操作A和B或C會立即改變。
FPGA是可編程邏輯門的矩陣(在某種程度上)。您可以定義輸入和輸出(作為輸入的組合)。
在uC中,A + B / C * sqrt(D)將花費幾個時鐘週期和一些內存。在FPGA中,結果幾乎是即時的。
它們非常適合視頻,DSP,加密...
這是主要優勢。現代FPGA現在適合內存,並且有uC / FPGA混合。
它們用於破解加密密鑰的速度比通用計算機快得多。 :D
與ASIC相比,可以節省金錢和風險。除非您
固定的(由於使用ASIC的成本很高,因此成本過高。
由於您可以輕鬆地更換FPGA,因此可以減少設計仿真的速度並更快地進入實驗室。您也可以像在軟件中一樣進行部分設計並在其上進行構建。