1、RISC-V架構異軍突起
CPU是計算機系統(包含PC、手機與各種智能裝置等)的核心,而處理器架構是 CPU 的基石。縱觀CPU架構發展曆史,技術、生态、産業共同影的一個架構成敗。
強如巅峰Intel也能在最初的64位之争中敗在IA-64上,弱如Acorn公司(ARM前身)也能趕上嵌入式裝置爆發的大潮,依靠低成本、低功耗的技術特點得以生存,最終發展建立起每年出貨200多億片的ARM帝國。
在依靠各大廠商支援的處理器架構之外,還存在一類從學校或者研究機構走出來的學院派開源處理器,它們中的先驅包含SPARC等大多已銷聲匿迹。直到最近幾年的RISC-V,結合了各家RSIC架構前輩所長,又趕上了業界對開源硬體的期盼,才使得開源這個詞在處理器架構方面有了巨大的聲量。
RISC-V具有架構永久開源、指令集精簡且高效、CPU微架構子產品化、架構擴充性強等若幹特征,這些特性完全契合物聯網領域裝置多元化、碎片化的場景。
是以RISC-V有能力提供更高成本效益、更貼合具體應用的各種類型的CPU,有望成為未來物聯網市場的首選。
本文結合各種行業趨勢,深入闡述RSIC-V的技術特點,分析RISC-V在物聯網行業的前景。

2、RISC-V技術特色
2.1、曆史與影響
CPU架構指的是用于定義同一系列CPU産品的技術規範,規範包含指令集、記憶體模型、異常體系等CPU對軟體展現的方方面面,是區分不同類型CPU的重要标示。CPU架構分成兩大技術陣營,一個是intel、AMD為首的複雜指令集CPU(即CISC),另一個是以ARM、MIPS、RISC-V等為首的精簡指令集CPU(即RISC)。目前市面上ARM架構和英特爾x86架構分别在移動端和桌面端占據了絕大部分市場佔有率。技術之外,ARM架構的收費授權模式與x86架構的封閉授權模式也成了鮮明的對比。但無論IP收費還是IP封閉都存在較高的門檻,這使得越來越多的晶片研發企業轉向了開源架構RISC-V,其開源性和易用性為晶片市場打開了另一扇大門。
RISC-V 指令集是基于精簡指令集計算(RISC)原理建立的開放指令集架構(ISA),該項目在 2010 年始于加州大學伯克利分校。當時,創始者 Krste Asanovic 教授需要使用一個微處理器指令集,然而 Intel 的 X86 架構指令集存在專利問題,ARM 架構指令集的授權又十分昂貴。在此背景之下,該研究團隊決定從零開始設計一套全新的指令集, RISC-V 就此誕生。這裡的“V”包含兩層意思,一是這是伯克利從 RISC I 開始設計的第五代指令集架構,二是它代表了變化(variation)和向量(vectors)。在此之前,伯克利研究團隊已研制了四代精簡指令處理器晶片,第一代處理器 RISC I 是于 1980 年在伯克利 Dave Patterson 教授主導的 Berkeley RISC 項目中設計而成,也是 RISC 名稱的由來。
獲巨頭産業聯盟支援,RISC-V 産業生态正進入快速發展期。2015 年,RISC-V 基金會成立,旨在聚合全球創新力量共同建構開放、合作的軟硬體社群,打造 RISC-V 生态系統,推動RISC-V 指令集被更大範圍的采用以及未來指令集體系結構的進一步演進。自 2015 年成立至今,RISC-V 基金會已擁有超過 327 家成員,成員中涵蓋了半導體設計制造公司、系統內建商、裝置制造商、軍工企業、科研機構、高校等各類組織。其中,白金會員包括谷歌、微芯科技、美光、英偉達、恩智浦、高通、三星、西部資料等全球知名科技、半導體企業,金、銀和審計員隊列中亦有台積電、英飛淩、意法半導體、聯發科等一衆知名半導體企業。如今,RISC-V 已獲得多家半導體巨頭的支援,擁有大量開源實作和流片案例,覆寫從高性能計算到嵌入式等多種應用領域。并且,除了企業、機構等機關之外,多個國家亦對 RISC-V 做出了戰略規劃與部署。 下圖可以看到RISC-V基金會為數衆多的夥伴們。
2.2、架構特色
下面列出一些RISC-V的架構特色,這些特色或來源于其他RISC架構的優秀實踐,或來自于RISC-V自身的創造性設計。用RISC-V設計者David Patterson的話說就是——“ 在過去 40 年的指令集的基礎上取其精華,去其糟粕”。
2.2.1、指令集
RISC-V 指令使用子產品化的設計,包括幾個可以互相替換的基本指令集,以及額外可以選擇的擴充指令集。基本指令集規範了指令跟他們的編碼,控制流程,寄存器數目(以及它們的長度),存儲器跟尋址方式,邏輯(整數)運算以及其他。隻要有軟體以及一個通用的編譯器的支援,隻用基本指令集就可以用來制作一個簡單的通用型的電腦。
标準的擴充指令集可以搭配所有的基本指令集,以及其他擴充指令集,而不會沖突。很多RISC-V 電腦可能使用精簡擴充指令集來降低電力消耗,程式的大小以及存儲器的使用。
2.2.2、寄存器集
RISC-V 有 32 個整數寄存器 (在嵌入式版本則是 16 個)。當浮點延伸集被實作的時候,還有 32 個浮點寄存器。除了“存儲器通路指令”之外,一般指令“隻能”尋址寄存器。
RISC-V 的通用寄存器中包含一個“零寄存器”(其值寫入無效、讀為零)。使用零寄存器可以讓指令集設計更簡單,減少硬體的指令形式。比方說,把“寄存器 X 複制到寄存器 Y” (MOV Y, X),可以使用“将寄存器 X 與 0 相加後,複制到寄存器 Y” (ADD Y, X, r0) 實作。
RISC-V 有提供“控制寄存器”及“狀态寄存器”,但是 user-mode 程式隻能通路用來“量測性能”及“浮點管理”的部分。
RISC-V 并沒有指令可以存儲和恢複多個寄存器。這些設計在 RISC-V 當中,被認為是不必要的,過于複雜的,可能過慢的設計(核心原因是這種設計會增加流水線的複雜度)。
2.2.3、存儲器通路
RISC-V 隻有 load 與 store 指令可以通路存儲器。Load 與 Store 支援的資料長度從 8-bit 到架構的位寬(比如32bit或64bit)。通路并不需要對齊,不過如果有對齊的話可以增加性能。
Load 和 Store 指令可以直接通路常量、堆棧中的本地變量或是資料結構中的内容。尋址的方式是使用基底寄存器與 12-bit 的 signed 相對位址 (+- 2KB)。
記憶體順序方面(Memory Order)RISC-V 不保證通路的順序 --- 除非有像 FENCE 這樣的指令出現。這意味着底層軟體人員編寫多核相關代碼時需要十分小心。
RISC-V 固定是 little-endian。這稍稍降低了硬體的複雜度與成本,因為所有位寬的資料讀取,都遵循一樣的順序。舉例來說,RISC-V 的指令集都是從最低的那個 byte 開始解碼(所有RISC-V指令的編碼格式都将opcode放在了最低7個bit,是以硬體取指時總是先擷取到opcode,友善流水線設計)。
2.2.4、立即數
RISC-V 讀取 32-bit 常量與位址是透過設定 upper 20-bit 的指令達到的。LUI 指令 (Load Upper Immediate) 把(指令中的)20-bit 讀取到寄存器的 31~12 bits 當中。與LUI搭配一條包含 12-bit 位移的 Load 與 Store 指令或是ADDI指令,便可以完成一個32bit立即數的擷取。
另一個 AUIPC 指令,讀取 upper 20-bit并加上 PC (Program Counter) ,之後存放到指定寄存器。同樣搭配ADDI指令,可以友善的讓 PIC 程式(Position-Independent Code)能夠支援“相對于代碼位置的 32-bit 位址”。
在 64-bit 架構下,LUI 與 AUIPC 運作的結果會被比特擴充至 64-bit (sign-extent)。
有些高速的 CPU 會把一些指令“融合”成一個指令。比如說:上述的 LUI 與 AUIPC 就很适合和 Load/Save 指令一起融合。
2.2.5、函數調用
RISC-V 的函數調用 JAL (Jump and Link) 把回傳位址放在一個寄存器當中。它省下了一次通路推疊存儲器,是以對性能友好。JAL 伴随一個 20-bit signed 位移。這個位移會被乘上 2 之後,加到 PC 當中。如果沒有對齊到 32-bit 位址,CPU 會觸發一個例外。
RISC-V 的 JALR (Jump and Link Register) 指令和 JAL 很像,但是他是把一個 12-bit 的相對位移,和某一個寄存器相加。(而 JAL 是用 20-bit 相加)
JALR 的指令格式有點像使用寄存器的 load/store 指令。搭配另一個設定高 20-bit 的基底寄存器,可以組成一個 32-bit 的位址(可以是絕對位址,例如 LUI; 或是相對于 PC 的位址,例如 AUIPC)。(使用零寄存器當基底寄存器,則是可以跳到 0 +- 2KB 的絕對位址)
2.2.6、分支預測
RISC-V 要求 CPU 實作“預設分支預測” (default branch prediction)。如果是往回跳躍 (例如: do {...} while (expr) 中的 expr 判斷式),CPU 要預測跳躍會發生,也就是預測 expr “會”成立。如果是向前跳躍(例如:if (expr) {...} else {...} 中的 else 部分),CPU 預測這個跳躍會發生,也就是預測 expr “不會”成立。CPU 判斷往回或向前的方法,是看指令中相對位址的最高比特,也就是有号數的部分 (signed bit):如果是 1,表示是負數,要往回跳躍。如果是 0,表示是正數,要向前跳躍。當然,複雜的 CPU 實作也可以加入更多的分支預測。
2.2.7、運算與邏輯
RISC-V 把數學運算指令歸類到一個很小的 I 子集當中,包括:加法,減法,位移,位操作,及比較跳躍。這些可以使用軟體的方式去模拟其他大部分的 RISC-V 指令(atomic 運算是值得一提的例外)。RISC-V 目前沒有“數開頭有幾個零”以及一些用來加速軟體浮點運算的位操作。
整數乘法子集(M 子集)包括:有号數與無号數的乘法與除法。浮點子集包括單精度運算,以及類似于整數的“比較跳躍”。
2.2.8、原子記憶體操作
RISC-V 支援多個 CPU 與 thread。其标準存儲器同步模式是“釋放一緻”原則。也就是說,讀取和寫入順序可以重排,但是有些讀取可以被設定成“擷取”運算,會在其後的通路之前被運作,有些寫入可以被當作“釋放”運算,必須在其之前的通路的後面運作。
基本指令當中包含了最少的支援,使用 fence 指令來保證存儲器通路順序。盡管這很簡單(fence r/rw 提供“擷取”,fence rw/w 提供“釋放”),組合起來還是可以很有效率。
3、RISC-V架構在物聯網領域有哪些優勢?
3.1、技術層面
結合物聯網碎片化的特點,會發現RISC-V的很多設計思想十分貼合物聯網靈活的需求。下面展開說明為什麼說RSIC-V是非常适合物聯網的CPU架構。
3.1.1、成本與簡潔性
從前文的"架構特色"章節中可以看到大量的簡潔化設計,比如沒有複雜的多寄存器讀寫指令、合理的12+20bit立即數設計、去除條件執行指令、數學運算歸類到極小集等等。這些簡化設計最終展現在晶片生産過程中,縮小了實作 RISC-V架構處理器的尺寸,進而壓縮了成本。即使晶粒的大小隻縮小 10%,成本也将以 1.2(1.1 2)倍的比例縮小。
鑒于成本對于複雜度的敏感性,RISC-V間接性帶來更小的晶片面積之外,還能縮短晶片的設計和驗證時間,而它們可能構成了晶片開發的大部分成本。這些成本必須算到晶片的成本當中。簡潔性還能降低文檔成本,讓客戶更容易了解如何使用RISC-V架構。
3.1.2、性能
評估一個CPU架構的性能,需要看做同樣的事需要多少條指令以及CPU的頻率。即使一個簡單的CPU架構可能在每個程式執行的指令數方面多于複雜的CPU架構,但它可以通過 更快的時鐘頻率或更低的平均單條指令周期數(CPI)來彌補。
RISC-V從一開始就考慮到友善硬體實作更加高效的流水線,同時指令集的選擇也更加高效。舉例說明,運作 CoreMark 測試程式[Gal-On, Levy 2012](100000 次疊代)後,得到 ARM-32 Cortex-A9 的性能為18.15秒,相對應RISC-V的晶片則為14.26秒。
展現RISC-V性能優勢的另一點是其支援32個通用寄存器,ARM-32 有 16 個寄存器,而 x86-32 隻有 8 個。CPU架構領域寄存器可以被了解為第0級Cache,有了更多的寄存器可供選擇,編譯器編譯出的指令會較少很多記憶體操作。
綜合性能與成本可以發現,簡潔如RISC-V這樣的架構能催生出更小的晶片,使其具備很高的成本效益。
3.1.3、可擴充性
随着摩爾定律(Moore’s law)的終結,對CPU性能進行重大改進的唯一途徑是為特 定領域(例如深度學習,增強現實,組合優化,圖形等)添加自定義指令。而RISC-V架構原生保留了大量的操作碼空間,為廠商實作自定義的指令集留出了空間。
與之相對,ARM或者X86由于曆史悠久,都需要相容大量的曆史遺留指令,導緻指令碼空間是否有限。x86由于指令長度可變,是以增加了很多很長的指令,為處理器的指令解析、cache、分支預測等帶來沉重的負擔。而ARM采用了同一個架構支援多個指令模式的做法(Thumb、Thumb-2、ARM),帶來架構設計的複雜性。
3.1.4、程式體積
嵌入式領域,程式大小直接影響存儲空間的消耗進而嚴重影響成本。此外更小的程式還能減少指令緩存的未命中問題,進而節省了功耗(因為片外 DRAM 通路比片上 SRAM 通路耗能更多),也提高了性能。
物聯網領域,裝置對于成本與功耗都是非常敏感。是以CPU架構的代碼長度是一個關鍵名額。在這方面RISC-V表現的十分優異。下圖展現了RV32G,ARM-32,x86-32,RV32C和Thumb-2程式的相對大小。最後兩個ISA是以短代碼長度為 目标的。這些程式是使用GCC編譯器的SPEC CPU2006基準測試。
可以看到:
Thumb2對比ARM節省1/3空間。16/32位的RISC-V與16/32位混合的Thumb2指令基本持平(由于RISC-V不存在模式切換、多資料存取等複雜性設計,能夠持平已經是表現很出色了)
X86在指令密度上并沒什麼優勢。雖然其使用了變長指令,但曆史包袱導緻其指令編碼十分不合理,浪費了變長的優勢。 (理論上變長指令集更适合縮短程式體積)
3.2、産業層面
跳出純技術分析,會發現RISC-V的一些特性也非常适合物聯網領域:
開源——随着國際貿易摩擦的加劇,自主可控的重要性不斷凸顯,RISC-V 開源免費,優勢顯著。
中立——RISC-V 已獲得衆多企業支援,而中國企業則是 RISC-V 指令集陣營的中堅力量。下圖可以看到,RISC-V最核心的白金會
子產品化——通過一套統一的架構來滿足各種不同的應用場景,覆寫物聯網裝置的多樣性。
4、總結
盡管RSIC-V設計之初并非隻針對物聯網與嵌入式領域,但其輕量化、子產品化、可擴充性、開源、高能耗比等技術特點都十分契合蓬勃發展的物聯網行業需求。
如果能克服尚不夠成熟的生态與晶片本身碎片化的風險(需要強力的基金會組織),依托産業聯盟,建構完善生态,RISC-V 将會大有可為。
如今複雜形勢使未來我國晶片的研發制造仍然存在變數。RISC-V有希望在未來的CPU市場發揮重大的作用,中國的新一代資訊技術、設計公司向RISC-V的轉型,在大資料、5G、物聯網、VR、邊緣計算等領域應用RISC-V,或許可以使基于RISC-V的CPU在世界範圍内成為主流。