FPGA、單片機的區別?

想問下,FPGA、單片機(如STM32)在做控制方面哪個更好?目前使用的是STM32,但想做基於遺傳演算法的PID控制,我怕這個晶元速度不夠影響控制效果(因為同時還要跑嵌入式系統ucos以及其他功能)。還有就是想學FPGA,從什麼開始入門?學習板買那種比較好?


通常意義下,FPGA不是計算機,不是計算機,不是計算機,所以不要和單片機這種計算機放在一起比較,FPGA是沒有CPU的,但是有人為加強FPGA的性(逼)能(格),可以給FPGA嵌入一個CPU。。。。

所以,沒有CPU的FPGA採用數字電路模式的編程方式,因為程序沒法像有CPU的單片微型計算機那樣一條條執行機器碼。。。

而嵌有CPU的FPGA,其CPU上就可以用通常的彙編,C等真正計算機語言編程,,而沒有CPU的邏輯塊,還是用數字電路的方法。。。

可能大家通常意義上的編程都是用計算機編程,肯定是有CPU的,所以沒法理解沒有CPU是什麼概念,因為FPGA根本還不算一個計算機,但是它是可以編程設計的,所以你沒法完全用計算機編程語言去編程理解


FPGA主要用於通信、圖像處理和晶元驗證領域,兩者的晶元結構有很大不同,FPGA更偏向於硬體電路,而單片機更偏於軟體,無論是從成本上還是做控制肯定是單片機要好,兩者的應用領域和擅長點大有不同。


第一,FPGA是純硬體,所寫的『程序』也就不能稱之為程序,如果非要給它起一個名字,我感覺『代碼』也許是比較恰當的;其次,單片機和FPGA實現信息處理髮出控制信號的方式不同,單片機和嵌入式是通過主函數或者操作系統實現任務調度的途徑來響應各種外部條件觸發,並通過『軟體』輸出相應的狀態來實現電子系統的正常工作,然而FPGA是通過純硬體來實現各種激勵的相應的,與單片機實現控制的根本方法不同。最後,單片機和嵌入式的軟體設計會有盲點,再快的軟體相應在現實應用中也會有出現盲點的時候,簡單的說就是系統不能及時響應或者漏掉某些激勵的現象,然而硬體不會,它以強大的並行方式來響應所有的信號激勵,但硬體也不是萬能的,FPGA這類的純硬體最大的剋星就是亞穩態以及競爭冒險等等,通俗的講就是輸出及其短暫的不穩定現象,雖然不穩定狀態出現的時間及其短,甚至到了皮秒級別(1秒等於10的十二次方皮秒)但也就是這麼短暫的不穩定也可能會給設計帶來致命的危險。這是有硬體的特性決定的,是在設計中永遠無法避免的,對於冒險和亞穩態,我們只能想盡一切辦法去解決他們。一個信號處理邏輯機制優劣將決定一個項目的好壞。


並行和串列的區別,並行可以看做鐘錶齒輪,最小的齒輪是時鐘,其他的齒輪都是在小齒輪帶動下運轉,串列可以看成流水線,做完一件事後做下一件


在我看來,FPGA是一塊可以編程的電路板,比如我剛才用FPGA做了一個74HC595,用十六個D觸發器實現的,你如果跑演算法,也得用各種加法器乘法器一個個搭出來,如果演算法比較簡單,且並行程度比較高,可以用FPGA來實現,比如說圖像處理,你可以將圖像分割成許多小塊,然後同時進行運算。 遺傳演算法理論上也可以通過加法器乘法器實現染色體交叉,然後一個設計出來了就可以同時跑幾百個甚至幾萬個。不過設計出這樣的東西難度比較大,相當於你造了一個可以進行遺傳演算法計算的晶元,入門比較困難。

簡單一些的辦法就是,直接上GHz級別的CPU,比如樹莓派,底層仍然可以用STM32控制,複雜的演算法讓高速的CPU來做,然後串口傳回控制指令即可。


你要說不同,1:架構上面,FPGA一般由DCM、IOB、CLB等組成,現在的FPGA還包含各種IPCORE。MCU要麼是馮諾伊曼結構要麼是哈佛結構,從結構上來說差異巨大。

2. 應用上,差別更大。MCU最終所有的指令在一個MCU中都是順序執行的,而FPGA由於是邏輯單元,很容易做到並行執行。


簡單的說FPGA是硬體編程,單片機是軟體編程,FPGA可以並行執行,單片機是順序執行。


STM32不是常用於工控么

看來你是聽說FPGA速度快所以想用FPGA做控制么?FPGA價格高,費電,做控制也怪麻煩,不推薦。至於32夠不夠用,還是要看你控制的東西了,我以前做過平衡車,控制周期是10ms,用32完全夠了,跑系統也不虛。


首先結構上,單片機是基於CPU的馮·諾依曼器件,FPGA是基於並行邏輯單元的器件。

相應的,單片機的開發是對指令的編程,FPGA的開發是對邏輯單元的連接。FPGA要比單片機底層很多,而且開發工具也要簡陋很多。

兩者的主要應用場合也是不一樣的。單片機適合通用任務、通用運算、標準介面。FPGA適合一些極端任務,同時做100個串口收發器、用幾十個乘法器做演算法的終極改進等。

按照題主的需求——遺傳演算法PID控制——算是通用運算,顯然是用單片機比較合適。


同意樓上@Rex所說的「簡單的說FPGA是硬體編程,單片機是軟體編程」。這是本質。

FPGA可以做並行運算,但靈活性差,因此最適合用做高速但重複性強的工作,用它管理高速外設是很不錯的選擇。

PID控制稍微接觸過一點,貌似運算量很大,但STM32應該也夠用了,所以建議用STM32做主控晶元,FPGA管理外圍設備,兩者之間有數據交換即可。如果運算量很大,或者對實時性要求比較高,可以嘗試用運算能力更強的專用DSP晶元。


FPGA是用空間換時間,單片機是用時間換空間。


2017來回答已經好晚了,FPGA的性能是毋庸置疑的。如今也有了HLS這樣利用C,C++開發的工具,開發的難度大大的降低了。入門還是要理解基礎的Verilog,電路的時序,狀態機,真理值表等。推薦的學習路徑:

1:學習電路相關知識,主要是基本電路元器件,鎖存器,觸發器等。

2:學習Verilog語法。

3:學習HLS,資料在賽靈思的官網有,雖然是英文,但是是最詳細最全的。

板子可以買一個artix7的。淘寶有。

FPGA的門檻是很高的,但是最近的研究都撲向FPGA了,在於它強大的性能,低時延,深度邏輯可實現(GPU只能實現簡單計算),並行性,低功耗(對比GPU加速)。可參考微軟在數據中心部署FPGA加速(知乎可以搜到)。

日本政府大力支持FPGA的研究,本人所在的研究室幾年前專註於並行計算,Java安卓等,近幾年也全面轉向FPGA。FPGA相關的研究也更容易獲得經費支持。

不知道國內大學研究室情況怎麼樣,日本這邊研究室會提供高端的板子,配有PCIE可以和電腦主板相連做一些更強大的事情。下圖示的配置是做HLS(高層次綜合)研究的前輩的裝備,兩塊板子的教育價格是一萬多人民幣。

我在給本科學生做助教的時候發現計算機系的大一就開始學習FPGA,大一培養FPGA認知,就是告訴開發流程(HLS的),FPGA能做什麼而不關心語法,上來就給板子燒燒程序。後面的幾年循序漸進的教電路,Verilog等等。

國內本科院校很多還在學多年前的譚浩強,單片機等。主要是老師也未必好好教,考試導向而非實驗導向,還是挺著急的,希望跟上來,教育就盡量放在畢業前而不是畢業後等公司教。


FPGA的開發是用描述語言(VHDL中的後兩個字母是Description Language的縮寫)畫電路原理圖,然後由綜合、布局、布線軟體自動把你畫的原理圖生成電路PCB板,這個PCB板描述了元件(由LUT和觸發器構成的與門、或門、異或門、寄存器等)、元件的位置和元件間的連線,你把這個描述PCB的文件下載多FPGA裡面去就有了你設計的電路


說點能懂的吧:

FPGA的設計就是硬體編程:簡單來說就是用寫代碼來——畫電路圖。代碼就是電路圖!

單片機本身就是一種計算機,對於單片機的設計就是軟體編程,簡單來說就是用代碼來寫可執行程序!


感覺都沒有說到點子上,fpga是硬體實現邏輯,就是給你一堆與或非門,通過編寫程序,讓這一堆與或非門組合實現邏輯功能,而單片機,是內部已經被人寫好了寄存器,與或非門,外部通過彙編語言轉換成機器語言,送到機器內部的邏輯門進行運算,求得輸出值~換句話說,FPGA在層次上也相對更加底層~~


FPGA是現場可編程邏輯門陣列,單片機是微控制器,兩者各有千秋,FPGA速度快,單片機實現較為簡單。FPGA可以先從verilog語言學起,很容易入門,再繼續學習VHDL語言。開發板黑金的比較好,資料多。


對於單片機和FPGA的主要區別。單片機可以理解為跑程序的微型電腦,麻雀雖小五臟俱全,所以寫的代碼相當於程序,應該屬於軟體範疇。單片機寫出來程序,用編譯器編譯後實際上是一條條指令,控制單片機去控制它的外圍器件。

FPGA則應該理解為可編程的數字邏輯電路集成晶元,所以寫的代碼其實是在描繪一個數字邏輯電路。

兩者最大的區別應該是在速度上的區別,FPGA內部是並行的,所有的電路邏輯都是在同一個時鐘觸發下工作的,而單片機屬於單線程,內部屬於順序執行,一個執行完了再執行下一個。速度肯定要慢。

對於你問題的描述,要跑嵌入式系統,zynq豈不是很好的選擇,總之在速度上可以勝過32,答的很晚,就發表一下自己的意見,算是為後面的朋友看到給點幫助!

想學FPGA的朋友,建議先從altera學起,因為altera的大學計劃做的比較好,隨意這方面發資料比較多,基本上都是手把手教程,隨意入門可能會快一點,然後xilinx必須要會,總得來說我個人認為xilinx的文檔比較好,開發板也很高端,altera和xilinx都學一下比較好,畢竟軟體和開發板只是工具,FPGA設計思想才是最主要的!


FPGA為可編程電路 核心是電路 單片機本質上的RAM和ALU 相當於的固定的電路 有固定的運行方式


FPGA(現場可編程門陣列)主要是用於VLSI(超大規模集成電路)設計的,主要是數字系統,是一些邏輯電路的模塊,通過可編程的布線網路來連接這些邏輯模塊(可對硬體進行排列組合),從而實現不同的邏輯功能。

MCU(單片機)是一個微型的計算機,它的硬體電路是不能動的,主要是通過軟體來描述指令在硬體電路上的執行步驟,從而實現功能。主要應用在處理事件上,比如外部有個中斷信號,MCU檢測到後,軟體就指揮硬體進行某種處理。

MCU價格已經相當便宜了,而且做控制的話性能基本上都可以滿足的。


FPGA、單片機(如STM32)在做控制方面哪個更好?

這個要看控制什麼,以及要達到的控制效果。假如需要高速控制,快速反應(響應時間達到us, 甚至ns級別),fpga是首選。如果對這沒那麼高要求,用單片機足矣。

還有一個影響好壞的因素是開發時間。一般來說fpga的開發周期比單片機長,特別是複雜演算法,比單片機長得多。


推薦閱讀:

怎麼結合嵌入式,Linux,和FPGA三個方向達到一個均衡發展?
如何看待軟銀對 ARM 的收購,會帶來哪些影響?
nxp lpc11xx/13xx 在 deep sleep 模式下被中斷喚醒,需要延遲多久 CPU 才能全速工作?
為什麼專門研製ARM處理器的高通,其處理器性能卻比不過非專門化的蘋果?

TAG:ARM | 嵌入式系統 | 現場可編輯邏輯門陣列FPGA | 單片機 | 嵌入式開發 |