在2015年12月的Nature網站上,由U.C. Berkeley等幾個大學的研究人員主導的一個開發團隊發表了一篇文章。文章中研究人員用標準的CMOS工藝制造了同時集成了RISC-V指令集的CPU和片上光通信器件的微芯片。這或許標志著不久的未來微電子芯片的接口速率將會大幅的提高,不再受到原先電接口IO的速率限制。不過本篇文章要關注的,則是在這顆實驗性的芯片上集成的另外一個主角,"RISC-V"(發音risk-five)。
1、CPU指令集 (ISA)軟件和硬件之間溝通的橋梁
指令集(ISA)通俗地講可以理解為一臺機器(計算機中的CPU)可以執行的“指令”集合,通過這些“指令”能夠實現諸如加減乘除這樣的運算,以及接收外部輸入(比如鍵盤)和控制外部輸出(如顯示器)這樣的功能。
指令集也可以理解為軟件和硬件之間溝通的橋梁,不同的廠家可能會用不同的方法來實現相同的指令集,從而讓遵循相同指令集的軟件可以無需修改即可運行。比如我們熟知的Intel和AMD都實現了x86指令集,這基本上統治了PC的市場。而出現較晚的ARM指令集則基本占領了移動端處理器的大部分市場。
2、RISC指令集的發展歷史 1980年Berkeley主導了RISC
了解了什么是指令集接下來還是讓我們來聊聊RISC的發展歷史。早期的微處理器大部分為復雜指令集(CISC)架構,即設計盡可能復雜的指令來完成任務 ,原因之一是當時的編譯技術并不發達。而隨著編譯器技術以及其他技術的發展,研究人員漸漸發現多數的復雜指令只在很少的時候被用到,而且復雜的指令限制了處理器速度的進一步提高。精簡指令集(RISC)技術應運而生,IBM 801可能是第一個用精簡指令集的理念來設計的系統,并發展成為了今天的Power架構。1980年左右Berkeley的Dave Patterson主導了Berkeley RISC項目并設計了其第一代的處理器RISC I,這就是RISC這個名稱的由來。Sun Microsystem(現在的Oracle)的SPARC處理器架構也有很多Berkeley RISC影子在里面。差不多同時,斯坦福的教授John Hennessy(現在已經是斯坦福校長)和他的團隊也從課程設計出發設計了MIPS處理器的早期雛形,并最終孵化為MIPS Technologies. Inc公司,后來被 Imagination Technologies收購。我們能在很多家用路由器里見到他的影子。而ARM,迄今為止發展的最好的RISC指令集,已經無處不在。
時間到了2010年,當Berkeley的Krste Asanovic教授想要為接下來的一系列項目選擇一個微處理器指令集時,他找不到一個合適的。Intel的X86是CISC指令集,過于復雜和龐大,而且存在專利問題。而ARM除了專利問題外,若想自行設計基于ARM指令集的處理器,需要非常昂貴的License。OpenRISC作為一個開源的指令集架構,其許可證為GPL,這意味著所有的指令集改動都必須開源。而且,OpenRISC發展緩慢,設計過于老舊,64位架構也不成熟。
Krste Asanovic教授
3、RISC-V指令集的誕生 “V”也表示變化(variation)和向量(vectors)
這一切都與Berkeley追求“開放“的精神格格不入,要知道從Unix/BSD操作系統到現今在大數據領域流行的Spark框架,他們都是用一個非常寬松的名為BSD License的許可證的發布的。這個License簡言之就是我發布的代碼你想怎么用怎么用,不用交錢,改了也不用開源,只要最終致謝作者即可。蘋果的OSX是基于BSD Unix的,而微軟 Windows中也包含修改過的BSD Unix代碼。
所以Krste教授決定帶領團隊重新開發一個完全開放的、標準的、能夠支持各種應用的新指令集,他也得到了RISC的發明者之一,Dave Patterson教授的大力支持。從2010年夏天開始,大約花了四年的時間,這個團隊設計和開發了一套完整的新的指令集,同時也包含了移植好的編譯器、工具鏈、仿真器,并經過數次流片驗證。為了能夠加快開發的效率,以便能夠快速的評估和修改設計以及提高可復用性,Chisel作為一種新的硬件構建語言也被開發了出來。簡言之,你可以用scala這種函數式編程語言去設計硬件,并最終能夠生成傳統的Verilog HDL用于ASIC/FPGA,或者生成C++用于仿真。
這個新的指令集叫做RISC-V,“V”包含兩層意思,一是這是Berkeley從RISC I開始設計的第五代指令集架構,二是它代表了變化(variation)和向量(vectors)。
4、RISC-V指令集的發展 獲Google、HP、Oracle、WD支持
RISC-V包含一個非常小的基礎指令集和一系列可選的擴展指令集。最基礎的指令集只包含40條指令,通過擴展還支持64位和128位的運算以及變長指令,其他以完成的擴展包括了乘除運算、原子操作、浮點運算等,正在開發中的指令集還包括壓縮指令、位運算、事務存儲、矢量計算等。 指令集的開發也遵循開源軟件的開發方式,即由核心開發人員和開源社區共同完成。
通過這一系列的指令集擴展,你幾乎可以構建適用于任何一個領域的微處理器,比如云計算、存儲、并行計算、虛擬化/容器、MCU、應用處理器、DSP處理器等等。從2015年開始,每半年一次Workshop上已經能夠看到很多有意義的項目。Berkeley自己開發了多款開源的處理器,可以覆蓋從高性能計算到嵌入式等應用領域,并孵化出了初創公司SiFive并獲得了風投。lowRISC是一個非營利性組織,主導者是風靡世界的開源硬件樹莓派(Raspberry Pi)的創始人之一,lowRISC正在基于RISC-V開發一款真正的開源處理器芯片,希望以其來代替目前樹莓派上的由博通開發的非開源處理器。Gary Research在FPGA中放入了400個定制的RISC-V處理器并用片上網絡(NOC)連接在一起用來實現并行計算,未來有可能會被用到微軟的云計算平臺中,例如給Bing這樣的搜索引擎加速。
2016年初的Workshop上,RISC-V基金會成立,成員中包括了Google、惠普、Oracle、西部數據等硅谷巨頭,未來這些大公司非常有可能會將RISC-V運用到他們自己的云計算設施或者智能手機芯片 中,以擺脫對X86的依賴或是減少昂貴的ARM指令集授權費用。
5、RISC-V指令集的優勢 開放源代碼是不可以逆轉的趨勢
可以說,RISC-V指令集是一個“活”的、現代的、沒有專利問題和沒有歷史包袱的全新指令集,并且以BSD許可證發布。任何公司都可以在自己的產品中免費使用,而修改也無需再開源。和成就了ARM的授權模式相比,RISC-V不僅能讓公司收益,也能夠讓大學和研究機構更好地研究新的處理器技術和架構。要知道,一個ARM指令集架構的許可證可能要上千萬美元。
RISC-V能夠發展至今筆者認為并非偶然。首先,指令集的開發需要非常專業的團隊和數年的時間,這對于商業公司來說是很困難的,而一流大學的一流團隊恰恰能滿足這樣的條件。其次,編譯器和FPGA等相關的技術在近十年來的蓬勃發展顯著地降低了新指令集開發和驗證的難度。再次,指令集通過幾十年的發展,不論是工業界還是學術界都已經研究的非常透徹,很多設計上的技術選擇已經有了現成的答案。最后,OpenRISC作為一個較為成功的開源指令集項目也有很多可以學習的經驗,使得專業團隊+技術社區這樣的開發模式能夠運作的更好。
從過去的十幾年我們能夠看到的改變是,開放源代碼作為一個不可以逆轉的趨勢,創造了新的商業模式,提高了效率也降低了成本。我們能夠看到,很多個成功的商業產品都能夠找到與之相匹敵的開源替代,而幾乎所有的技術變革中我們都能夠看到開放源代碼的影子。從云計算、大數據到近幾年很火的容器技術,開源已經無處不在。再看看硬件領域,像樹莓派和Arduino這樣在“板級層面”的開源硬件已經顯著降低了開發者的門檻并讓越來越多的人參與其中。而在集成電路行業,摩爾定律的終結和人們需求的更加多元化也會使FPGA和ASIC在很多領域 在成本曲線上出現交叉點,而這也將極大的推動開源硬件在芯片領域的蓬勃發展。
6、RISC-V指令集的未來 物聯網、移動計算、人工智能
當面對一個新的指令集時,一個最常見的顧慮是現有的優質軟件在新指令集的平臺上的移植問題。Wintel聯盟在過去十多年來正是靠著“向后兼容”而成功。每一代的Intel X86處理器都兼容過去所有的指令,而每一代的新Windows操作系統都基本上兼容過去版本的軟件。但現在,用戶并不需要過于擔心可移植問題。首先,開源軟件在這十幾年的飛速發展,已經能夠讓我們在很多領域無需過多擔心軟件移植的問題。比如在服務器領域,大部分軟件完全開源,而應用多用腳本語言寫成,可移植性非常好。其次,很多人或許并不知道,ARM也并不是一個完全向后兼容的指令集,為了能讓ARM CPU運行在不同行業的應用中 ,向后兼容帶來的包袱遠大于其優勢,這對RISC-V來說也是一樣。最后,總的發展的趨勢是,不論是物聯網、移動計算、網絡服務還是人工智能,我們都需要成本更低、靈活性更高和可定制性更強的處理器。而“向后兼容”的重要性會越來越小,并將最終成為過去。
最近全球半導體聯盟(GSA)在一篇報告中大膽的提出這樣的問題:“RISC-V會是開源領域的下一個Linux嗎?”,“半導體行業是開放源代碼最后一塊沒有攻克的陣地嗎?”。相比十幾年前開源軟件發展的初期階段,如今開源硬件的發展和當時是如此相像。筆者相信,隨著RISC-V的成熟和更多的大公司加入,它非常有希望去挑戰Intel x86和ARM對市場的統治,從云計算到物聯網,成為當今這個互聯網世界的最基本的和不可或缺的“輪子”之一。