第二篇-FPGA學習之RoadMap
古語雲:知己知彼,百戰不殆。那麽既然選擇了FPGA之路,欲練此功,必先……
必先了解清楚,FPGA的特點,FPGA善於/不善於解決什麽類型問題,以及FPGA應用的方向,FPGA學習的要素等等。
一、FPGA的特點
理論上,通用MCU/CPU和數字ASIC能夠做的事,FPGA都能做,甚至可以利用FPGA內部資源實現一個CPU,也即是通常所說“軟核”。但這幾個既然能夠共存,實際上都有各自適合和不適合的領域。CPU/MCU為通用任務設計,能夠勝任大量常規的控制、計算任務,但是對一些特殊的任務,比如高速信號處理、大規模並行計算卻是無能為力,這也是為什麽機器學習基本要靠GPU或者FPGA。ASIC為特定應用設計,性能和功耗都非FPGA能及,但是功能固定,流片費用極高,通常用於非常大批量的場合。和CPU大哥相比,FPGA的特點是,可以利用並行實現更高速的計算和更大的吞吐量,也可以利用其靈活性作為CPU的協處理單元或擴展接口。和二哥ASIC相比,FPGA的優點主要是其靈活性極高,重復編程,在批量不夠大或需重復修改的場合較ASIC更為優勢。
當然FPGA也有其相應的缺點以及不適合的工作。和MCU比價格相對高,和ASIC相比速度和功耗都望塵莫及(ASIC作為專用電路比通用電路更加高效)。另外FPGA不適合 1-大量順序控制,2-大量存儲要求的場合,這類工作通用MCU更為擅長也更經濟。
二、FPGA應用領域
一些傳統行業,比如電力、能源、醫療,有不少FPGA的需求,這主要是得益於FPGA靈活的特點。這些領域的設備通常 1-設備大,價格高昂(成本相對不敏感),2- 批量無法巨大(不適合定制ASIC),3-設備更新升級較快。這幾個特點決定了需要FPGA來實現粘合、接口擴展、通訊實現的需求,也會包括一些較高速的數據采集處理的應用。當然反過來說,這些通常不是重型應用,通常是作為CPU或DSP的擴展和輔助,用到的FPGA基本是中低端型號。
另一個FPGA廣泛應用的領域是ASIC的驗證。由於行業不同了解不深,僅從外行人的初步了解來看,這個領域 1-用到FPGA通常是邏輯量非常大的型號,2-因為不會產品化只是作為設計驗證工具,批量不會大。
相對上述兩個行業領域,無線通信行業中FPGA的使用相對更為廣泛。這主要因為FPGA的並行架構能夠滿足其高速信號處理的需求。
僅僅從這些傳統領域來看,FPGA的市場大小遠不如CPU和ASIC這兩位大哥,但目前高速發展的一些新興領域給了FPGA新的機會,比如工業以太網、機器視覺、機器學習的興起和實用化。一個典型的方向是機器視覺,圖像和視頻的底層處理本身需要及其龐大的重復性運算,如使用CPU會大大受制於內存讀取瓶頸的限制。而這恰恰是FPGA作為硬件計算本身擅長的工作。相信隨著越來越多需要高速信號處理、並行計算的新興技術領域的日漸步入實用化階段,FPGA會有更大的用武之地。
三、FPGA學習路線
前面這些算是對FPGA本身的介紹,下面這些就是FPGA學習路線方面的幹貨了。趁機會對目前我所了解的內容作個總結,也作為今後在FPGA之路上前進的路標參照。
FPGA的學習基礎是語言和各種工具的掌握,另外還需要最FPGA的架構和資源有必要的認識。亞穩態、跨時鐘域問題個人感覺是驗證一個人是否入門FPGA的試金石,也是能夠開發FPGA的一個必要前提。其它的比如硬件思想、速度-面積互換這些需要不斷在實際中運用體會。
但做這麽久FPGA,我的觀點是FPGA的難點,全在FPGA之外。使用FPGA本身不難,難的是能夠用FPGA做什麽事。比如做通訊接口擴展要求對常用的並行/串行通訊時序有深入理解,做高速信號采集則要求對ADC、硬件、信號完整性這些方面都有認識,做圖像處理、機器視覺這些更是要求對這些專業領域有比較深的建樹 ----可見,FPGA學習本部僅僅是學習FPGA本身,作為一種工具,其能夠實現多大的價值更要看對專業領域的認識。
當然了,每個方向都是一個深坑,甚至是一個獨立的專業,人生苦短,往往在其中一個方向有很深的建樹就已經了不起了。
(碼字不易,轉載請註明出處,謝謝!)
第二篇-FPGA學習之RoadMap