1.?FPGA的本質(zhì)定位——硬件平臺,不是常規(guī)“計算機”
FPGA的最大優(yōu)勢是硬件級的靈活定制。它非常適合實現(xiàn)特定用途的高速并行電路、定制接口、時序控制等。但算法處理——很多時候其實更需要靈活的數(shù)據(jù)訪問、復(fù)雜控制、海量算術(shù)運算和程序流轉(zhuǎn),這個正好是“通用處理器”(比如CPU、DSP、ARM)擅長的領(lǐng)域。
2.?軟件算法和FPGA之間的“思維鴻溝”
軟件算法開發(fā),本質(zhì)上就是不斷寫代碼、修改、測試,這個流程對于CPU/DSP來說是再自然不過的事情,甚至支持浮點運算、復(fù)雜控制流程、遞歸調(diào)用等各種功能,極為高效。
FPGA做算法則完全不同,所有的步驟要“硬寫”在硬件里。比如一個加法不是“寫一句代碼就跑”,而是得“造出加法器的電路”,每個數(shù)據(jù)操作都需要具體的邏輯電路支持。所以設(shè)計起來工程量巨大、維護(hù)困難,也很難靈活調(diào)整。
3.?開發(fā)難度和周期對比——“同樣造車,CPU是拼積木,F(xiàn)PGA是鍛鐵造零件”
在CPU或DSP平臺,算法就像用樂高快速拼裝、可以靈活改裝。
在FPGA上,等于是要自己“熔煉鋼鐵—鍛造成零件—再組成模型”,周期長,調(diào)試難。
代碼級別的小改動,在FPGA上可能就要大幅度重做硬件邏輯。
4.?開發(fā)工具鏈和生態(tài)不友好
FPGA的工程開發(fā)主要靠硬件描述語言(如Verilog、VHDL),不支持大多數(shù)算法工程師擅長的高級語言開發(fā)和調(diào)試。很多算法實現(xiàn)起來需要數(shù)學(xué)庫或者現(xiàn)成的算法支持,在FPGA開發(fā)環(huán)境里往往都得從底層自建,門檻高,靈活性差,效率低。
5.?資源結(jié)構(gòu)受限導(dǎo)致的效率問題
FPGA中大部分資源用于構(gòu)建各種基礎(chǔ)邏輯單元和少量乘法器、存儲單元,而不是為大批量的數(shù)據(jù)算法處理而生。
算法涉及到的數(shù)據(jù)交互、復(fù)雜數(shù)組、特殊數(shù)據(jù)結(jié)構(gòu)、頻繁的讀寫操作,在FPGA中想要實現(xiàn)往往需要極大的硬件資源,造成芯片資源浪費甚至“做不下”。
6.?數(shù)據(jù)流和程序流的架構(gòu)差異
CPU/DSP結(jié)構(gòu)適合做復(fù)雜程序流——如判斷、循環(huán)、函數(shù)調(diào)用等。
FPGA天然適合數(shù)據(jù)流并行處理——一次流水線“刷”一大波數(shù)據(jù),高吞吐、低延遲(比如圖像采集、信號協(xié)議處理等)。
很多算法本質(zhì)上是“串行思維”,F(xiàn)PGA則更像“裝配線思維”,兩者不兼容。
7.?維護(hù)和升級的靈活性不足
軟件算法更新,CPU平臺只要重刷程序。
FPGA算法“寫死”在電路里,每次調(diào)整都要全過程重新綜合、布局、時序分析,開發(fā)效率極低。
一句話概括:FPGA適合用來做“專用硬件加速器”(如高并行、確定時延的數(shù)據(jù)通路和功能模塊),而如果要做靈活復(fù)雜的算法處理,就像讓一條生產(chǎn)線去學(xué)會變魔術(shù),不僅不高效,還特別難維護(hù)。FPGA做算法,就像用積木蓋大樓必須每塊磚都特制一樣;而CPU做算法,則像有一支經(jīng)驗豐富的裝修隊,省時省力,換風(fēng)格非常隨意。
工程建議:算法開發(fā)優(yōu)先選用CPU/DSP等通用平臺
如您有問題,請聯(lián)系老虎說芯,備注姓名+公司+崗位。