題:
什麼是FPGA?
zklapow
2009-12-16 07:11:45 UTC
view on stackexchange narkive permalink

我以前見過很多人談論FPGA,我知道它代表現場可編程門陣列,但是它如何工作以及使用FPGA的目的是什麼?

五 答案:
Maciek Sawicki
2009-12-16 07:37:52 UTC
view on stackexchange narkive permalink

它們是為您的電路添加邏輯的電子組件(因此它們類似於微控制器)。但是設計方法與uC(微控制器)完全不同。在uC中,您無法更改內部uC設計。您只能在其上運行“經典”程序。對FPGA進行編程更像是創建新硬件。您可以在邏輯門之間創建新的連接,並創建一個新的專用處理器。您可以在家裡,辦公桌和PC上完成所有操作。

聽起來很棒嗎?是的,但是有一些缺點。例如,價格(但我覺得很難比較),更高的功耗和更低的時鐘速度(但是您可以以一種智能的方式設計應用程序,並在一個時鐘週期內執行更多操作)。

有用的鏈接:

示例用法: http://nsa.unaligned.org/

我將注意到,許多FPGA足夠大,足以包含多個CPU內核,因此,FPGA本身就是一台完整的計算機。
需要注意的是,我認為較低的時鐘速度可能會引起誤解。與PC相比,是的。與pic16相比,它們可以更快,但這取決於成本。我用過的大多數便宜的產品都可以在40MHz的頻率上運行,但還是會因產品而異。
SiliconFarmer
2009-12-19 02:10:37 UTC
view on stackexchange narkive permalink

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?

“很抱歉,我可以以大約5美元的價格購買到一種可以實現我見過的幾乎任何Arduino設計的FPGA”。哪裡?
ppvi
2009-12-16 14:19:26 UTC
view on stackexchange narkive permalink

如果您熟悉基本邏輯門,則應該知道它們實際上是瞬時的。當A,B或C改變時,操作A和B或C會立即改變。

FPGA是可編程邏輯門的矩陣(在某種程度上)。您可以定義輸入和輸出(作為輸入的組合)。

在uC中,A + B / C * sqrt(D)將花費幾個時鐘週期和一些內存。在FPGA中,結果幾乎是即時的。

它們非常適合視頻,DSP,加密...

這是主要優勢。現代FPGA現在適合內存,並且有uC / FPGA混合。

我知道許多具有多年實踐經驗的EE,通常都是通過FPGA進入設計而不是以前使用uC的uC。我真的認為它們非常適合接口處理。
是的,我認為這是一個很好的示例:http://www.armadeus.com/english/index.html。對我來說特別有趣的是伺服控制示例:http://marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/MotionSystem_05a0.html
還要注意的是,有越來越多的“ C到VHDL”或“ C到Verilog”轉換器。它們不是最有效的方法,但是您可以將已經編寫的代碼轉換為可用於提高速度的硬件。如果您問我(以及您是否準備好麵團),那就太酷了。
endolith
2009-12-18 00:26:06 UTC
view on stackexchange narkive permalink

它們用於破解加密密鑰的速度比通用計算機快得多。 :D

哈哈,我很喜歡您的實用說明。它們在並行處理方面絕對令人讚嘆。
一個代碼破解項目:http://www.copacobana.org/
Brian Carlton
2010-02-23 03:03:15 UTC
view on stackexchange narkive permalink

與ASIC相比,可以節省金錢和風險。除非您

  1. 深深地關心電源,或者
  2. 正在建造一堆(例如1萬個單位)
  3. ol>

    固定的(由於使用ASIC的成本很高,因此成本過高。

    由於您可以輕鬆地更換FPGA,因此可以減少設計仿真的速度並更快地進入實驗室。您也可以像在軟件中一樣進行部分設計並在其​​上進行構建。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...