對當今的硬體工程師來講,FPGA的應用是同PCB設計一樣必須掌握的技能,因此在過去三年裡我們硬禾實戰營最重要的技能培訓就是融合了PCB設計的FPGA程式設計和系統應用,因為在數字化邏輯支撐整個現代科技的今天,不會用FPGA也就意味著無法用數字邏輯的思維方式來解決問題,也就很難成為一個優秀的系統工程師,也會錯失掉蓬勃發展的物聯網、工業4.0、人工智慧等浪潮。
我們先來看看FPGA的重要性:
FPGA的技術已經已經發展了30多年了,到了今天它和CPU架構一樣,玩家越來越少、技術越來越高階,應用越來越深入到各個領域,成了支撐當今各項高科技領域(物聯網、大資料、雲計算、無人駕駛、智慧製造、人工智慧)的基礎。
這張圖看得出FPGA和CPU並駕齊驅,不斷重新整理效能指標,由於FPGA的可並行利用資源的特點,其計算能力要遠超已經採用多核技術的CPU架構。
經過30年的發展,FPGA已經不再是當初簡單的“可程式設計邏輯器件(PLD)”了,在器件內部集成了更多需要靈活配置的可半定製化的功能,在兩個大佬Xilinx和Altera/Intel內部集成了硬核化的CPU之後,現在的FPGA更像是晶片領域的“變形金剛” - 五臟俱全並可變化萬千。
CPU屆的老大Intel嗅覺靈敏,3年前果斷出手將FPGA的兩巨頭之一的Altera收入囊中,高度整合CPU/FPGA,為大資料、雲計算以及人工智慧大時代做足了準備。
一路高歌猛進的Xilinx,在兄弟Altera被招安以後,獨步江湖成為了數字世界的“擎天柱”。
如果是說Xilinx和Altera是飛機、高鐵的話,還有兩位低調的小兄弟“Lattice”和“Actel”(先被Microsemi收編,又到了MCU大佬Microchip的麾下),他們不放棄、不拋棄,就像滴滴、摩拜一樣用自己精雕細琢的服務支撐著從簡單的邏輯變換、協議介面到影象處理、深度學習等幾乎所有的領域。
FPGA無處不在 - 這張圖可以看出來,幾乎你能想象到的所有技術領域都會用到FPGA。
最簡單的是做介面/協議連線的功能,透過各種邏輯組合,以靈活、高速、資源豐富的優勢幫助ASIC(專用積體電路)實現系統所需要的一切功能,也就是說在數字域,凡是你選用的ASIC不能實現的功能,都可以用FPGA來協助。
在人工智慧時代,雖然GPU炙手可熱,但在靈活性和高效能之間最佳的平衡絕對離不開FPGA。這就是為什麼Xilinx的股票持續上漲、美國總統親自否決中國對Lattice的收購的原因,因為這玩意兒太重要了,未來會越來越重要 - 具有高度殺傷力的核心技術。
這張圖簡單地展示了FPGA在人工智慧領域應用的優勢所在。
微軟的雲服務當然缺少不了FPGA了,無數顆的CPU、GPU,仍舊離不開FPGA,從這個圖上隱約覺得FPGA就是雲中的帶頭大哥“擎天柱”。
是不是“不明覺歷”?我們不能只是停留在“不明”的階段,對這麼厲害的技術一定要“明”,一定要知道它是什麼?它應該怎麼用?先透過一張圖簡單看一下FPGA是如何構成的。
FPGA是一種可程式設計的數字邏輯晶片,我們可以透過對其程式設計實現幾乎任何的數字功能,最簡單的如:
- 豐富的可程式設計邏輯資源(CLB) - 各種組合邏輯、時序邏輯,門“陣列”
- 豐富的內部儲存資源(Block RAM) - 可以組成ROM、雙口RAM、FIFO等等各種需要的儲存結構
- 可程式設計的IO - 每一個輸入輸出管腳都可以單獨定義、配置,支援同其它器件的靈活連線
看到這裡是不是就覺得它很強大了?這只是FPGA冰山的一個小角而已,即便掌握了這些基本功能的使用,就足以讓我們硬體工程師的技能得到大大的提升,在產品設計中上一個大的臺階,哪些提升呢?
- FPGA在數字世界裡它無所不能,就像樂高的積木一樣可以搭建各種不同的功能模組,實現你所希望的各種功能,這是你產品中非常重要的一塊,可以大大加速你產品的開發時間,可以大大降低系統的成本及設計風險,可以為你產品的升級、調整帶來大大的靈活性;
- 數字邏輯的思想 - 首先你必須掌握最基本的數字邏輯知識,學會一種用來構建各種功能的工具語言(在這裡我們推薦廣受歡迎的Verilog),再次你要動腦(考驗的是你的邏輯思維是否清晰),一個優秀的建築師的作品是在腦子裡勾畫出來的,而不是拿積木碰運氣拼湊出來的;
- 並行設計的理念 - 同CPU不同的是FPGA是並行處理的,如果要處理並行的多個任務,CPU必須經過非常複雜的任務排程,有時候不得不聯合多核一起,而多數情況下一顆小小的FPGA就能搞定所有的任務,從設計理念上這是孑然不同的;
- 資源的合理利用 - 各個廠商的各種型號的FPGA可供你選用,有啥呢?就像你出行是選擇乘飛機、高鐵、出租還是騎腳踏車一樣,每種方式都要付出不同的成本,而根據需要選擇最適合的資源配置在使用FPGA的過程中能夠得到最充分的體驗;
- 哪怕你做一個小小的專案,你會驚奇地發現它很有趣,你任何天馬行空的想法都可以透過FPGA來快速實現,在樂趣中找到爆棚的自信感
所以,你有必要像對待PCB設計一樣也來學習FPGA,甚至投入更高的熱情。