【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】
? ? ? ? 學習嵌入式的同學都知道,嵌入式一般分成這幾種chip,有51,有stm32 mcu,有soc,有dsp,有gpu,有npu,最后一種就是fpga。有的最后是單獨賣,有的需要一個上位機。前面幾種一般就是軟件編程為主,應用也比較廣,只有最后一種fpga,它的使用和前面幾種差異很大,聽說過的人多,用的人少。今天正好來聊一聊。
1、fpga的基礎是時鐘、復位和信號
? ? ? ? 如果是軟件開發,大部分都是c語言開發,少部分是c++開發。既然是軟件開發,那就是我們寫好軟件之后,由編譯器和鏈接器生成二進制代碼之后,送到flash里面,等著被cpu執行。不管這個cpu屬于51、arm、還是dsp,它都是一條一條去執行的。所以軟件執行的基礎是匯編指令。
? ? ? ? 但是fpga不同,它的基礎是一個、一個的數字信號。從顆粒度來說,它要比純軟件細很多。基本上每一個外設,每一個接口都需要去詳細設計,當然這個過程中也可以使用廠家提供的ip,或者是sample code。每一個fpga工程都有一個top module,這個top module中除了clk、rst,剩下來就是各種外設,包括gpio、sdram、lcd、camera、spi、iic等等。這里說的是,相比較純軟件的芯片,fpga本身更接近硬件一點。
2、fpga的并發問題
? ? ? ? 和軟件一條一條去執行不同,fpga天生就是并發的。當然,我們也可以說,多核cpu也可以并發執行。不過這種并發和fpga比起來,還是小巫見大巫。因為fpga,本身設計的時候,就是讓所有的register在一個clock下面,并發運行,這是它的基因決定的。
? ? ? ? 至于是不是所有的register,真的每一個時刻都要去變更,這個真不一定。首先,我們會切分成不同的module,每一個module都是獨立的狀態機。module里面,如果復雜程度比較高,還會繼續切分成子模塊。另外,對于每一個module而言,如果register之間相互依賴,那么即使是并發的fpga,也會變成順序執行的形式,這個時候就和mcu開發是一樣的了。
3、fpga的demo居然和mcu demo一致
? ? ? ? fpga具有天生的并發特性,不過大家在學習和開發買板子的時候,卻發現這樣一個事實。那就是fpga的demo例子居然和mcu是一樣的,也是從點燈、串口、定時器、spi、iic、ddr、屏幕這些開始,最后以一個小的工程收尾。這個時候大家就會很疑惑,既然fpga學的內容和mcu一致,而且fpga是并發思維,調試也不好調試,價格上也沒有優勢,為啥自己還要學習fpga?
4、價格問題
? ? ? ? fpga本身是很壟斷的行業,之前都是國外壟斷,尤其是xilinx、altera和lattice三家公司,基本占據了全部的市場。現在慢慢的國產fpga起來了,尤其是中低端領域,國產fpga也開始展露頭腳。不過和mcu相比較,fpga的整體價格還是偏貴,資源密集度也少。一般的mcu或者是soc板子,最便宜的十幾塊、二十幾塊就可以,fpga雖然說現在便宜一點了,最便宜的也要上百塊,更不要說動則上千、幾千的fpga了。
5、實際落地場景問題
? ? ? ? 從實際應用來看,fpga的應用還是在兩個領域比較多。一個是希望用fpga做多接口的電路。比如一個mcu、soc,它的某種接口,例如spi、iic都是數量有限的,但是fpga幾乎是全能的,做成什么接口都可以,數量沒有限制。還有一種就是算法加速,特別是那種高帶寬、低復雜度的算法。這種情況,特別適合cpu采樣、fpga做預處理、接著cpu完成算法的場景,很多cpu+fpga的soc就是這么做的,以前可能只有zynq,現在很多國產的fpga廠商也開始支持這種模式了。圖像就是fpga應用最合適的場景之一。
6、廠家的支持
? ? ? ? 大家使用fpga的時候,最好得到原廠的幫助,這樣會快很多。不光fpga可以用ide開發,做一些簡單的pll、fifo、ram、rom、乘法器、dma這些,還可以利用原廠的資源,獲取pcie軟核、mac軟核,以及數量不低的sample code,這些都可以改一改就可以用在自己的產品上的。我們學習的時候,是需要一行代碼一行代碼去寫,實際應用,最好還是建立在廠家的sample code基礎之上去開發、去應用。