RISC-V架构学习
RISC-V架構
- RISC-V簡介
- RISC-V起源
- RISC-V大事件
- RISC-V 指令特點
- 設計哲學-簡單就是美
- 無病一身輕——架構的篇幅
- 能屈能伸——模塊化的指令集
- 濃縮的都是精華——指令的數量
- RISC-V指令集簡介
- 模塊化的指令子集
- 規整的指令編碼
- 優雅的壓縮指令子集
- 特權模式
- 自定制指令擴展
- 總結
- RISC-V開源處理器研究現狀
- 標量處理器——Rocket
- 超標量亂序執行處理器——BOOM
- SHAKTI
- 引用
RISC-V簡介
在芯片領域,應用范圍最廣的指令集都是收費的(X86基本不對外授權,ARM費用相當不菲。所以芯片設計領域迫切需要一個行業認可的,高品質的指令集,它應該是OPEN的,免費的,一個世界范圍可以參考使用的芯片指令標準。這時候就要求出現一個新的指令集。RISC-V是個開源的指令集架構,類似于INTEL的X86 ,ARM指令集,是一個被CPU讀取到內存后,指導計算機運行的指令集合。實現了該指令集的CPU,能執行指令集中規定的所有基本指令,使按該套指令集編譯的程序能夠無障礙運行,且具有同系列CPU可移植和兼容性。
RISC-V起源
伯克利實驗室于2010年5月啟動RISC-V指令集,該指令集是UC Berkeley并行計算實驗室(Par Lab)的一部分。RISC-V發明之后,許多項目都在使用它,包括由美國國防高級研究計劃局(DARPA)資助的研究計劃,遍及許多地方和許多公司。加州大學伯克利分校ASPIRE實驗室接班,持續了2013年至2018年,并導致構建了多個RISC-V兼容微處理器。RISC-V基金會成立于2015年,旨在基于RISC-V ISA建立一個開放的軟件和硬件創新者協作社區。基金會是一個由其成員控制的非營利性公司,它指導開發以推動RISC-V ISA的最初采用。
RISC-V大事件
- 全球第一大硬盤產商西部數據(Western Digital)將以每年10億到20億顆的預期來推動RISC-V,逐步完成全線產品遷移到RISC-V定制架構;
- MicroSemi提供基于Risc-V+Linux+CNN加速器的AI解決方案;
- 印度政府則大力資助基于RISC-V的處理器項目,使RISC-V成為了印度的事實國家指令集;
- RISC-V基金會的會員已經增加到150多個,大學、科研院所和企業大量使用或評估基于RISC-V的應用,參與度之高,覆蓋面之廣,盛況空前;指令集架構的生態鏈正在成長和完善,工具鏈、RTOS/Linux操作系統的移植等工作都取得關鍵突破;
- 2018年11月,RISC-V基金會宣布了與Linux基金會的聯合合作。作為合作的一部分,Linux基金會還將為RISC-V生態系統提供大量資源,如培訓項目、基礎設施工具、社區推廣、市場營銷和法律專業知識;
- 2019年6月,Debian 移植 RISC-V 64 架構已完成 90%,LLVM 成阻礙,不過開發者預計今年將會完成對 LLVM for RISC-V 64 的支持。
RISC-V 指令特點
設計哲學-簡單就是美
大道至簡,在IC設計的實際工作中,最簡潔的設計往往是最可靠的,在大多數的項目實踐中一次次的得到檢驗。
IC設計的工作性質非常特殊,其最終的產出是芯片,而一款芯片的設計和制造周期均很長,無法像軟件代碼那樣輕易的升級和打補丁,每一次芯片的改版到交付都需要幾個月的周期。不僅如此,芯片的一次制造成本費用高昂,從幾十萬美金到百千萬美金不等。這些特性都決定了IC設計的試錯成本極為高昂,因此能夠有效的降低錯誤的發生就顯得非常的重要。
無病一身輕——架構的篇幅
后發優勢,RISC-V設計汲取X86和ARM架構中的經驗,前人踩過的坑不用再犯,同時無需向下兼容老舊的設計和已經過時的指令。想想去看一本架構文檔,里面一大半的篇幅都在講過時的指令和設計,是不是感覺寶貴的時間都被浪費了。
在處理器領域,目前主流的架構為x86與ARM架構。經過幾十年的發展,現代的x86與ARM架構的架構文檔長達幾百數千頁。打印出來能有半個桌子高,可真是“著作等身”。之所以現代x86與ARM架構的文檔長達數千頁,且版本眾多,一個主要的原因是因為其架構的發展的過程也伴隨了現代處理器架構技術的不斷發展成熟。并且作為商用的架構,為了能夠保持架構的向后兼容性,其不得不保留許多過時的定義,或者在定義新的架構部分時為了能夠將就已經存在的技術部分而顯得非常的別扭。久而久之就變得極為冗長。
而現在才推出的RISC-V架構,則具備了后發優勢,由于計算機體系結構經過多年的發展已經成為比較成熟的技術,多年來在不斷成熟的過程中暴露的問題都已經被研究透徹,因此新的RISC-V架構能夠加以規避,并且沒有背負向后兼容的歷史包袱,可以說是無病一身輕。
目前的“RISC-V架構文檔”分為“指令集文檔”(riscv-spec-v2.2.pdf)和“特權架構文檔”(riscv-privileged-v1.10.pdf)。“指令集文檔”的篇幅為145頁,而“特權架構文檔”的篇幅也僅為91頁。熟悉體系結構的工程師僅需一至兩天便可將其通讀,雖然“RISC-V的架構文檔”還在不斷地豐富,但是相比“x86的架構文檔”與“ARM的架構文檔”,RISC-V的篇幅可以說是極其短小精悍。
能屈能伸——模塊化的指令集
RISC-V架構相比其他成熟的商業架構的最大一個不同還在于它是一個模塊化的架構。因此,RISC-V架構不僅短小精悍,而且其不同的部分還能以模塊化的方式組織在一起,從而試圖通過一套統一的架構滿足各種不同的應用。
這種模塊化是x86與ARM架構所不具備的。以ARM的架構為例,ARM的架構分為A、R和M三個系列,分別針對于Application(應用操作系統)、Real-Time(實時)和Embedded(嵌入式)三個領域,彼此之間并不兼容。
但是模塊化的RISC-V架構能夠使得用戶能夠靈活選擇不同的模塊組合,以滿足不同的應用場景,可以說是“老少咸宜”。譬如針對于小面積低功耗嵌入式場景,用戶可以選擇RV32IC組合的指令集,僅使用Machine Mode(機器模式);而高性能應用操作系統場景則可以選擇譬如RV32IMFDC的指令集,使用Machine Mode(機器模式)與User Mode(用戶模式)兩種模式。而他們共同的部分則可以相互兼容。
濃縮的都是精華——指令的數量
短小精悍的架構以及模塊化的哲學,使得RISC-V架構的指令數目非常的簡潔。基本的RISC-V指令數目僅有40多條,加上其他的模塊化擴展指令總共幾十條指令。
RISC-V指令集簡介
模塊化的指令子集
RISC-V的指令集使用模塊化的方式進行組織,每一個模塊使用一個英文字母來表示。RISC-V是一個典型三操作數、加載-存儲形式的RISC架構,包括三個基本指令集和6個擴展指令集。RISC-V最基本也是唯一強制要求實現的指令集部分是由I字母表示的基本整數指令子集,使用該整數指令子集,便能夠實現完整的軟件編譯器。其他的指令子集部分均為可選的模塊,具有代表性的模塊包括M/A/F/D/C。
基本指令集的名稱后綴都是I,表示Integer,任何一款采用RISC-V架構的處理器都要實現一個基本指令集,根據需要,可以實現多種擴展指令集,例如:如果實現了RV32IM,表示實現了32位基本指令集和乘法除法擴展指令集。如果實現了RV32IMAFD,那么可以使用RV32G來表示,表示實現了通用標量處理器指令集。本文只介紹RV32I的基本情況。RV32I指令集有47條指令,能夠滿足現代操作系統運行的基本要求,47條指令按照功能可以分為如下幾類。
規整的指令編碼
在流水線中能夠盡早盡快的讀取通用寄存器組,往往是處理器流水線設計的期望之一,這樣可以提高處理器性能和優化時序。這個看似簡單的道理在很多現存的商用RISC架構中都難以實現,因為經過多年反復修改不斷添加新指令后,其指令編碼中的寄存器索引位置變得非常的凌亂,給譯碼器造成了負擔。
得益于后發優勢和總結了多年來處理器發展的教訓,RISC-V的指令集編碼非常的規整,指令所需的通用寄存器的索引(Index)都被放在固定的位置,如圖2所示。因此指令譯碼器(Instruction Decoder)可以非常便捷的譯碼出寄存器索引然后讀取通用寄存器組(Register File,Regfile)。
優雅的壓縮指令子集
基本的RISC-V基本整數指令子集(字母I表示 )規定的指令長度均為等長的32位,這種等長指令定義使得僅支持整數指令子集的基本RISC-V CPU非常容易設計。但是等長的32位編碼指令也會造成代碼體積(Code Size)相對較大的問題。
為了滿足某些對于代碼體積要求較高的場景(譬如嵌入式領域),RISC-V定義了一種可選的壓縮(Compressed)指令子集,由字母C表示,也可以由RVC表示。RISC-V具有后發優勢,從一開始便規劃了壓縮指令,預留了足夠的編碼空間,16位長指令與普通的32位長指令可以無縫自由地交織在一起,處理器也沒有定義額外的狀態。
特權模式
RISC-V架構定義了三種工作模式,又稱特權模式(Privileged Mode):
- Machine Mode:機器模式,簡稱M Mode。
- Supervisor Mode:監督模式,簡稱S Mode。
- User Mode:用戶模式,簡稱U Mode。
RISC-V架構定義M Mode為必選模式,另外兩種為可選模式。通過不同的模式組合可以實現不同的系統
自定制指令擴展
除了上述闡述的模塊化指令子集的可擴展、可選擇,RISC-V架構還有一個非常重要的特性,那就是支持第三方的擴展。用戶可以擴展自己的指令子集,RISC-V預留了大量的指令編碼空間用于用戶的自定義擴展,同時,還定義了四條Custom指令可供用戶直接使用,每條Custom指令都有幾個比特位的子編碼空間預留,因此,用戶可以直接使用四條Custom指令擴展出幾十條自定義的指令。
總結
RISC-V開源處理器研究現狀
目前基于RISC-V架構的開源處理器有很多,既有標量處理器Rocket,也有超標量處理器BOOM,還有面向嵌入式領域的Z-scale、PicoRV32等。
標量處理器——Rocket
Rocket是UCB設計的一款64位、5級流水線、單發射順序執行處理器,主要特點有:
支持MMU,支持分頁虛擬內存,所以可以移植Linux操作系統
具有兼容IEEE 754-2008標準的FPU
具有分支預測功能,具有BTB(Branch Prediction Buff)、BHT(Branch History Table)、RAS(Return Address Stack)
Rocket是采用Chisel(Constructing Hardware in an Scala Embedded Language)編寫的,這也是UCB設計的一種開源的硬件編程語言,是Scala語言的領域特定應用,可以充分利用Scala的優勢,將面向對象(object orientation)、函數式編程(functional programming)、類型參數化(parameterized types)、類型推斷(type inference)等概念引入硬件編程語言,從而提供更加強大的硬件開發能力。Chisel除了開源之外,還有一個優勢就是使用Chisel編寫的硬件電路,可以通過編譯得到對應的Verilog設計,還可以得到對應的C++模擬器。Rocket使用Chisel編寫,就可以很容易得到對應的軟件模擬器。同時,因為Chisel是面向對象的,所以Rocket的很多類可以被其他開源處理器、開源SoC直接使用。
超標量亂序執行處理器——BOOM
BOOM(Berkeley Out-of-Order Machine)是UCB設計的一款64位超標量、亂序執行處理器,支持RV64G,也是采用Chisel編寫,利用Chisel的優勢,只使用了9000行代碼,流水線可以劃分為六個階段:取指、譯碼/重命名/指令分配、發射/讀寄存器、執行、訪存、回寫。
借助于Chisel,BOOM是可參數化配置的超標量處理器,可配置的參數包括:
取指、譯碼、提交、指令發射的寬度
重排序緩存ROB(Re-Order Buffer)、物理寄存器的大小
取指令緩存、RAS、BTB、加載、存儲隊列的深度
有序發射還是無序發射
L1 cache的路數
MSHRs(Miss Status Handling Registers)的大小
是否使能L2 Cache
UCB已經在40nm工藝上對BOOM進行了流片,測試結果如表4所示。可見BOOM與商業產品ARM Cortex-A9的性能要略優,體現在面積小、功耗低。
SHAKTI
SHAKTI是印度理工學院的一個計劃,目標是設計一系列適合不同應用環境的、基于RISC-V的開源處理器,以及一些IP核,以便搭建SoC。這些處理器是E-Class、C-Class、I-Class、M-Class、S-Class、H-Class、T-Class、N-Class,目前已經開源的是前三個,使用Bluespec System Verilog編寫。
引用
RISC-V官網
終于有人把RISC-V講明白了
RISC-V生態架構淺析(認識RISC-V)
總結
以上是生活随笔為你收集整理的RISC-V架构学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用会声会影在局部,打马赛克
- 下一篇: 网络测试仪的用法