大家好,我是華維林北。
上一期說了MCU四大平台的微控制器和DSP,下面來了解一下ARM和FPGA。
首先總結一下ARM。
ARM的優點
第1,就是它能裝OS就能裝一個作業系統,那麽裝上一個作業系統之後,就可以實作一個並行的一個現象,也就是說我可以實作多個任務,甚至說多個執行緒了,它可以排程執行緒,那這樣的話就可以實作多個任務同時執行的一個效果。
第2,ARM的介面是非常豐富的,我們剛才說的這些高速介面,包括乙太網路,usb,MIPI,SATA,這些介面是需要協定棧支持的,我們使用微控制器是很難把它們實作的。當OS支持了這些協定棧之後,裝了作業系統,只要物理上有這個介面,這些介面都可以在ARM上出現且都可以使用。
第3,arm配置非常的靈活,這個配置靈活不是說我們使用者配置非常靈活,而是說芯片的設計商可以非常靈活地配置ARM形成什麽樣的芯片。所以ARM套用非常的廣泛,它可以實作一個cpu,各位童鞋們手機裏頭的那個cpu一般都是ARM的。然後如果說進行trim就把它剪做減法,把不用的東西都給削掉的話,它可以實作一個微控制器,比方說STM32啊,還有這個ESP32啊,它們都是基於arm核的。
另外介於它倆之間還有一種專用的一些處理器,比方說像影片解決方案也可以用APP來實作什麽事,影片解決方案就是我們的運動相機,或者說行車記錄儀,或者說水滴網絡攝影機之類,那裏頭的中央的處理器實際上就是一個影片解決方案,它裏面有一個arm核,還有一堆硬件處理電路,比方說有影片輸入電路啊,降噪電路,顏色合成電路,傳感器控制電路等等,之後它會進入到一個影片壓縮電路裏,出來MPEG4的一個影片流,H.264的流或者H.265的流,之後這個arm還會有這些介面,例如乙太網路介面,Usb介面等等,乙太網路介面可以直接推流推到網上,usb介面可以把它存在U槽裏,當然還可以有TF卡介面把這東西就保存到本地。
所以說ARM的硬件是可以配置的非常靈活的。
ARM的缺點
第1,ARM的軟件開發門檻更高。當然我不是說微控制器套用,我說的是cpu,影片解決方案這些用它的軟件開發門檻是要比之前的都高的,因為它絕大多數是沒有一個整合的IDE開發環境的。
比方說我做過海思的HR3519的影片解決方案的開發,首先要裝一個虛擬機器,在虛擬機器上裝一個Linux的作業系統,之後在Linux的作業系統上配置開發工具鏈,之後需要把開發板透過網口和虛擬機器接在一起,開啟NFS服務,擁有共享的空間,然後需要在Windows下使用source insight或者Vs code這樣程式碼的編輯軟件來編輯程式碼,編輯完了程式碼之後需要返回到虛擬機器的狀態下來編譯的程式碼生成一個可執行的檔,把這個可執行的檔放到NFS的共享區裏,再用開發板敲命令執行這個可執行程式,這個開發過程是比較繁瑣的,軟件開發門檻而是要更高的,你需要掌握的東西也更多。另外它的器件也更加的復雜,體積會更大一些,整合的東西也更多了。它的價格也會更高,跟微控制器比是要高不少的,另外它的功耗比微控制器也是高很多的,當然基於arm核微控制器除外,我們就說普通的arm。
所以說ARM適合做什麽呢?ARM特別適合做數據處理,數據傳輸啊,以及當成一個cpu都是非常適合的。
下面說一下FPGA
FPGA是絕大多數學生最頭疼的一個部份。
首先看看FPGA是什麽東西?說人話FPGA是什麽東西,不說人話說機器語言就是FPGA它是一種現場可編程門陣列,全稱叫field programmable gate arry,一句話總結FPGA就是一個整合元件庫,它是一大堆的離散的硬件的原器件整合按照一定規律的放到矽片上的器件,也就是一堆散件放矽片上。
可以整合什麽元件,圖上有詳細解說
FPGA開發方法
FPGA使用的語言不是C語言,它使用的語言是非常特殊的一種語言,叫作硬件描述語言。縮寫叫HDL,全稱叫hardware description language。
這個語言和C語言表面上形式上看是有一定類似的地方的,但是它們的本質是極其不同的。FPGA開發的過程實際上跟C語言也不一樣,C語言是把高級語言呢進行編譯,編譯之後變成了一個二進制的機器語言,但是FPGA本質上是根據你的描述語言,在開發套件的環境下,也就是整合式開發環境下畫一個電路,當然這個電路不用你自己畫,是它的軟件畫的。
所以說FPGA在開發過程大體上來講可以包含兩個部份。
第一個部份叫做綜合,就是把你寫的這個硬件描述語言轉成一張原理圖。
第二個部份叫做實作,就是把系統生成這個這個原理圖把它變成一個電路圖,變成電路圖之後形成了一個bit檔,然後下載到芯片上就相當於可以使用了。
所以說我們的FPGA開發實際上是用硬件描述語言來畫一個電路,只有把這個問題認識清楚了之後,你才能夠真正理解FPGA的開發方式到底是怎麽回事。
FPGA的使用是非常靈活的,主要來講它可以套用在三大方向上。
第一大方向,邏輯開發,它的核心就是要產生一個復雜的時序,FPGA作為邏輯開發,大量用在相機開發商,尤其是需要你自己產生驅動型號的高端相機。
第二大方向,FPGA可以進行DSP開發,比方說雷達,一般來講它會有非常多的這個單元,比方說100-200多個接收單元,這些單元它會並列的產生訊號,要處理這些訊號如果用DSP芯片的話會非常的復雜,需要用幾十片DSP芯片,這樣做起來系統會非常的龐大。
但是如果我們用FPGA的話呢,那就簡單多了,因為FPGA裏頭有大量的乘法器資源,我們可以把它做成一個一個小的DSP來處理每一路訊號。
第三大方向,FPGA還可以進行嵌入式開發,FPGA裏頭可以整合cpu,整合cpu之後可以用它的這個邏輯資源來做一個專門的處理電路,加上一個ARM之後就可以實作一個帶有自己設計的專用電路ARM處理器。
比如說100多個乘法器資源,然後做一個什麽呢?一個100路乘法並列的外部處理電路,ARM在進行乘法的時候,100個數扔出去,再扔出100個數,兩個數相乘之後直接往裏讀結果就可以了。
這樣的話運算速度大大的加快了很多。比方說像挖礦這樣的運算就可以用arm進行排程。
FPGA的缺點
第一個缺點就是價格高,最次的FPGA呢,也得幾十塊將近100塊錢一片,那麽貴的FPGA就沒有上線了。主流的FPGA例如A7的35T,一般來說,現在的價格一片是500多,便宜的時候也是300多,我曾經用過最貴的FPGA是v5的一款DSP系列的FPGA,這個芯片把我的積蓄給掏光了哈哈。
第二個缺點,FPGA介面不豐富,除非生成軟核或者硬件整合的介面以外,如果進行邏輯開發的時候幾乎就是沒有介面,需要串口就需要自己編一個串口。
另外呢,FPGA開發門檻高,因為開發FPGA就等於重新學一門語言,這門語言不是像C語言,Java,python,這些語言都是一個套路一條執行完之後執行下一條。
可是FPGA完全不是這樣,如果把電腦語言分成兩種,所有的C語言之類的Java,python都是記敘文。FPGA的硬件描述語言是一個說明文,學習它時間就比較長,另外FPGA開發的周期也是特別長。
我們一般的C語言再大的工程呢,編一下就完事了。普通人做的再復雜的專案,一個編譯之後也就是十幾秒就差不多也就能編完了。FPGA做一個稍微大一點的一個工程,它只要編一次,隨隨便便20分鐘半個小時就過去了,所以它的叠代的時間非常的長,這就造成了不管是學習開發都是很慢的,這些都是FPGA的缺點。
另外FPGA它的外圍器件是比較多的,主流的FPGA如果斷電,FPGA裏頭的配置,配置內容就消失了,再上電,它就是一塊不能用的一個片子。那怎麽辦呢?它必須得外掛一個非玉石記憶體,加外掛一個flash,每次上電的時候需要把這個電路圖從flash裏頭給它load進來之後配置一遍FPGA才能在進行工作。
另外FPGA它的PCB設計也比較的復雜,因為整合了大量的原件之後,它的引腳就非常的多,而且它的供電又比較的復雜,比方說我們說七系列,它的核心電壓1.0,Ad供電還有個1.2,之後還有個附屬供電2.5,如果說你接的芯片是1.8的話,那你還必須得給個1.8等等,你以為就這些電壓就完了嗎?很多電壓到底能耗多少電流是沒有準數的,FPGA,尤其是核心電壓消耗的電流是和什麽相關呢?適合你的FPGA用了多少的資源相關。剛才說了FPGA裏頭一大堆的器件,這些器件你用得越多,你消耗的電流就越多。所以說在硬件設計的時候,你還得提前估算軟件兒要消耗多少的資源,用這些資源之後,根據FPGA廠家的工具估算它需要的靜態和動態的電流大概是多少之後你才能進行電源的設計。
這一點就和微控制器、DSP和arm是完全不一樣的,它們的消耗電流是固定的,告訴你上限之後只要比上限大就可以了。
但是FPGA完全不是這個樣子的,設計的時候完全不是這個套路。
另外就是FPGA的體積大,它的功耗高。
FPGA的優點
它的優點只有一條叫one trip to rule them all,你可以用一個FPGA實作所有芯片的功能,可以用它實作一個微控制器,可以用它實作一個DSP,可以用它實作一個ARM,甚至實作一個具有專用電路的ARM都是可以的。
FPGA的套用不是一個能隨隨便便拿過來就用的,它價格高,它開發的周期又長,所以FPGA呢,它不常見在我們普通的器材裏。
我們對FPGA進行個總結啊,我們看它適合幹嘛?FPGA特別適合處理並列的高速訊號。因為它本質上呢就是一塊兒電路,那麽你可以把這塊電路呢分成N個並列的電路板,它就可以處理並列的訊號,另外它特別適合進行芯片前期的驗證,尤其是數碼芯片和嵌入式芯片的前期驗證。
學習微控制器,我華維林北是認真的,童鞋們有什麽疑問都可以來找我,及時回復林北能得到非常實用的幹貨,能幫助你們成長我會得到很大的滿足感!好了,這期就說到這,我們下期見!
華維林北