FPGA是什麼呢,通透講解單片機和FPGA的區別
///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比賽///
一.單片機和FPGA的區別
單片機又稱單片微控制器(Single-chip MCU),它其實就是集成在1個矽片上的計算機系統。現在市場上主流的單片機基本都使用的是ARM核,51單片機基本上已經退出歷史舞台了,只有在一些特定場合還有使用。嚴格來說,單片機是沒有I/O設備的,這也是它和計算機最大的區別。然而,我們常說的單片機往往指的是單片機開發板,這種開發板不僅包含單片機,還包含廠商開發設計的外圍電路和各種外設。最常見的ARM單片機是STM32系列,它的內核是Cortex-M3/M4,外設則包含LED燈、蜂鳴器、LCD顯示屏、攝像頭、片上內存和各種IO口等。圖1給出的是正點原子的STM32F1開發板,最中間的那個黑色的、上面寫著ARM三個字母的晶片就是STM32F1晶片(即單片機),只占板子的很小一部分,晶片周圍則是外圍電路和外設。一般來說,我們買到的STM32開發板往往就自帶有LED燈、蜂鳴器等外設,而攝像頭、LCD顯示屏則需要額外購買,廠商只在開發板上預留相應的接口。
圖1正點原子STM32F1開發板
那麼,FPGA又是什麼呢?FPGA英文全稱為Field Programmable Gate Array,它的中文名是現場可編程邏輯門陣列。FPGA主要是由可編程邏輯陣列和各種外設組成的,它是一種半定製電路。通過使用quartus或vivado這些開發軟體編寫verilog或VHDL程序,我們可以實現並綜合出各式各樣的數字電路,並可以把電路「燒」進FPGA器件,完成電路在物理層面上的實現。FPGA是可以進行無限次「擦寫」的,只有邏輯資源足夠,FPGA理論上可以實現所有的數字電路,哪怕是CPU這樣複雜的超大型電路。然而,FPGA的邏輯資源往往是很匱乏的,哪怕是在今天,也難以完成大規模的浮點運算。而且,由於FPGA的基本單元使用的是可配置邏輯單元,工藝製程往往會受到限制,總會比ASIC落後好幾代,並且工作頻率也一直達不到CPU早已標配的GHz。
圖2 Altera DE2-115開發板
FPGA最大的優點是它的並行度高,我們可以在FPGA上設計並實現N維的並行流水線,在時鐘的驅動下,這些流水線可以同時進行工作,能極大地減小運算時間和提高運算效率。對於單片機而言,單片機的主體其實就是CPU,而CPU執行運算是串行的。在進行一次運算時,一般是先由CPU向運算單元發送指令,然後運算器進行運算並給出結果,接著CPU接收到計算結果並進行暫存,再進行下一次運算。此外,對於CPU而言,晶片大部分面積是控制邏輯單元,只有很少一部分是運算單元。因此,在執行高密集度運算時,CPU是難以勝任的。但是,CPU所擅長的邏輯控制,卻正是FPGA所欠缺的。由於FPGA所有功能均依靠硬體實現(這裡指傳統的FPGA),完全不使用軟體,甚至無法實現分支條件跳轉等操作。
二.CPU和FPGA的結合
從上面的分析可以看到,CPU長於控制,而FPGA則擅長運算。因此,很快就有人想到了在FPGA開發里引入CPU來進行邏輯控制,以彌補FPGA的缺陷。最開始,這種「聯姻」是由FPGA開發商主導的,Altera最早提出了SOPC(System On a Programmable Chip,可編程片上系統)技術,這種技術使用FPGA的邏輯和資源搭建的一個軟核CPU系統,後來Xilinx也進行了跟進。Altera主推的軟核是Nios-II,而Xilinx主推的軟核則是MicroBlaze。老實說,這些軟核的效率並不高,而且它們都有自己的一套開發環境和開發流程,實際使用起來其實非常麻煩,而且應用場景也不多。因此,這些軟核並沒有在FPGA開發中引起什麼變革,長期處於廠商力推,而市場卻不溫不火的狀態。
然而,時代總是在前進的,隨著無人駕駛、大數據分析、物聯網、人工智慧等行業的發展,嵌入式平台的應用範圍得到了極大的擴展,但這些應用場景對算力提出了新的要求,單片機這種傳統的嵌入式平台的算力就顯得捉襟見肘。Xilinx開始意識到,與其自己開發軟核,來為FPGA打輔助;不如反過來讓FPGA給CPU打輔助,直接在FPGA集成ARM的Cortex-A系列處理器。這樣,FPGA就實際意義上成了CPU的外設,專門用於計算,除此之外的所有事,都由強大的Cortex-A系列處理器來完成。在2010年4月矽谷舉行的嵌入式系統大會上,Xilinx發布了ZYNQ 7000系列FPGA,它由雙核A9+Xilinx 7系列FPGA組成。嚴格意義上,它其實不算是FPGA,更像是嵌入式開發平台。然而,它又和傳統的嵌入式開發平台不一樣,它又需要使用FPGA搭建定製電路,這就需要開發者掌握較高的硬體開發能力。這款產品推出時,受到了很大的質疑,很多人都覺得它實用性並不會太高,只是Xilinx推出的一個實驗性產品。
圖3 ZYNQ7000開發板
但是,ZYNQ卻取得了巨大的成功,成為了Xilinx最著名的FPGA開發板系列之一。Xilinx的判斷是正確的,在隨後的10年內,解決嵌入式平台的算力瓶頸成為了行業發展的主流方向。就拿人工智慧來說,在ZYNQ推出後,很多大學研究小組用它完成了卷積神經網絡在FPGA平台上的部署,實現了對卷積神經網絡的硬體加速。FPGA平台相對於GPU有更低的功耗,相比於ASIC有可編程性,使得對FPGA加速器的研究一度成為人工智慧領域的熱門方向。當然,這時的FPGA不是傳統的FPGA了,而是CPU+FPGA。這種模式也被Altera迅速跟進,它們也推出了雙核A9+Altera FPGA的開發平台,比如DE1-SoC等。嚴格來說,Cortex-A9處理器不是單片機(即微控制器,MCU),而是微處理器(MPU),但是它們都是CPU。因此,在上文中,我們並沒有說單片機和FPGA進行「聯姻」,而是直接說的是CPU和FPGA進行聯姻,這主要是為了保證文章的「嚴謹性」。在這一時期,雖然兩者的「聯姻」主要還是由FPGA開發商推動的,但FPGA卻成為了CPU的一個大型外設,由主角變為了配角。
三.ARM DesignStart計劃的推出
在PC時代,英特爾+Windows組成的「Wintel聯盟」長期處於絕對的統治地位,在這一時期ARM的存在感其實很低。但是,隨著智慧型手機、智能導航儀等移動端平台的發展,ARM開始成長為移動市場的行業巨頭。關於ARM為何能在移動端擊敗英特爾,有很多種不同的說法,但主要原因總結起來有3點。第一,英特爾低估了移動端的發展潛力,沒有及時進場。第二,ARM處理器採用的是RSIC指令集,而英特爾採用的是CSIC指令集,雖然CSIC指令集性能更占優,但功耗往往會非常高,因此不適用於移動端產品;而RSIC指令能做到低功耗,這在移動端是絕對的優勢。第三,ARM采用IP授權的商業模式,和谷歌、蘋果、高通、三星等公司形成了聯盟,組建起了以ARM為核心的生態圈。總的來說,ARM的崛起主要還是由於移動端市場的發展,因此ARM註定不會漠視在物聯網時代會大放異彩的嵌入式平台。
在2010年,ARM正式推出ARM DesignStart計劃,開源了1000多個物理IP,為用戶提供了快速獲得ARM IP的方式。客觀來說,這一時期的DesignStart計劃實際上沒有產生多大的行業影響,因為它開源得還不夠。在2015年10月15日,ARM終於決定開源自己的Cortex-M0核。講道理,這是一枚行業的重磅炸彈,Cortex-M系列處理器早就在MCU領域實現了絕對統治。ARM此舉非常明確,就是希望大家使用Cortex-M0核自主搭建SoC,實現定製化的物聯網終端晶片的設計,讓Cortex-M系列處理器在物聯網領域得到更多的應用。這次開源引起了巨大的行業反響,掀起了一波超高能效定製化SoC的開發熱潮。隨後,ARM又在2017年6月20日開源了Cortex-M3核,並在2018年10月22日開源了Cortex-A5核。DesignStart計劃的不斷推進,使得ARM在物聯網領域也逐漸建立起優勢。
圖4 ARM DesignStart計劃
雖然近幾年,RISC-V處理器的開發非常熱門,很多人預言這種RISC指令集處理器會在物聯網領域取代ARM。但是,我卻並不看好RISC-V,ARM有著更加先進的技術和更為完善的開發環境,這都不是RISC-V可比的。和ARM相比,RISC-V更像是高校的「玩具」,而ARM早就是工業的產品。可能會有人會說,RISC-V至少是中國晶片自主的希望,繼續依靠ARM,只會在物聯網時代繼續被「卡脖子」。但這種說法是站不住腳的,RISC-V的發明者和主導者依舊是美國,中國依舊只是跟班。其次,對於一家公司而言,出於趨利避害的考慮,都更願意採用性能更為強大、開發流程更為簡單、開發環境更為成熟的ARM核,畢竟公司不像個人,可以空談「情懷」。只要ARM繼續加大開源的力度,為開發者提高更為友好的開發環境,物聯網企業就會集體擁抱ARM。
最後,有一個很現實的問題,那就是雖然國家一直在說「晶片自主」,但是對於這個行業投入一直是不夠的。計算機的從業者薪水要比微電子的從業者高很多,這只會把行業人才往計算機趕,畢竟微電子轉計算機是很容易的。晶片企業實際上也基本沒從國家那裡拿到什麼政策補貼,大家沒有研發經費,更沒有自主研發的動力,也就只能「能買就買」。所以,我覺得「晶片自主」很長一段時間也就是個口號,中國晶片產業落後國外十幾年,想要追趕是需要非常大的投入的。在國家真正下定決心發展晶片產業之前,企業只會拿腳投票,ARM開發無疑是更好的選擇。個人也只會拿腳投票,晶片行業的人才流失只會繼續發生。
當然,關於RISC-V處理器的討論就有點偏題了(PS:來自微電子學生的吐槽),我這裡要討論的是DesignStart計劃對FPGA開發的影響才對。Cortex-M0/M4核的開源,使得ARM從FPGA開發商手裡接過了SOPC的接力棒,Nios-II和MicroBlaze也完成了它們的歷史使命,逐漸淡出人們的視野。傳統的FPGA開發時代也徹底終結了,新時代的FPGA開發主要可分為兩種:一種是開發板上本來就有硬核CPU,提供CPU+FPGA的開發環境;另一種是開發板上沒有硬核,但我們可以通過使用ARM開源出來的verilog文件,用FPGA的邏輯和資源搭建出一個軟核CPU,也能構建起CPU+FPGA的開發環境。如果說,ZYNQ橫空出世的時代,由於軟核+FPGA的開發模式還不夠完善,還存在「純粹"的FPGA開發。那麼,到這時,FPGA徹底「邊緣化」了,它徹底成為了ARM CPU的大型外設,只是默默地做著自己擅長的計算工作,整個開發流程完全由CPU主導。
但是,也正是這樣,FPGA走出了微電子這個小圈子,引起了越來越多的人的注意。為了方便軟體開發者使用,Xinlinx和Altera先後推出了HLS(High-Level Synthesis),使得由軟體代碼綜合出數字電路成為門檻,大大地降低了FPGA開發的門檻。雖然HLS的效率還遠比不上直接使用verilog或VHDL進行RTL級設計,但它至少提供了一種可能。與此同時,由於ARM開源了Cortex-M3/4處理器,極大地降低了開發超高能效SoC的門檻,計算機和微電子交叉的SoC設計也逐漸在高校和行業內成為新的熱門研究方向。DesignStart計劃的故事結束了嗎?當然還沒有,我們有理由相信ARM會進一步開源,繼續降低開發門檻和減小開發成本。如果說,PC時代屬於英特爾,移動時代屬於ARM,那麼物聯網時代也仍將屬於ARM。
四.寫在最後
今天是本人生日,我還在這裡碼字寫文章,真的是太慘了(PS:工科狗他只配和實驗室在一起,狗頭保命)!作為1個微電子的研究生,面對行業的發展,我不可能不關心,我也有很多自己的看法,這也是我寫這篇文章的原因。數位訊號處理……這些是沒法交給ARM核去做的。還有考慮到成本問題,不搭載ARM核的FPGA也是有市場存在價值的,但是走量的話又導向ASIC。還有就是考慮電路性能的話,HDL還是比較好的。這就導致FPGA工程師的存在比較尷尬,方向和崗位少,開發難度高。這種搭載硬核的FPGA的應用方向還是比較少的,一般是高端方向,比如雷達、高速信號處理……。大學上選修課的時候應該是用過zynq晶片,那時用的實驗箱,只記得要做Linux裁剪,課程名還叫SOPC來著,不過這麼重要的課程竟然被當做選修課來教,當時也沒當回事,甚至不知道那是用來幹什麼的,就驅動驅動電機……