fbpx
维基百科

RISC-V

RISC-V(发音为“risk-five”)是一個基于精简指令集(RISC)原则的开源指令集架構(ISA),簡易解釋為開源軟體運動相對應的一種「開源硬體」。该项目2010年始于加州大學柏克萊分校,但许多贡献者是该大学以外的志愿者和行业工作者。

RISC-V
推出年份2010年,​12年前​(2010
設計公司加州大學柏克萊分校
最新架構版本2.2
是否開放架構?
體系結構類型載入-儲存架構
字長/暫存器資料寬度32、64、128
位元組序小端序
指令編碼長度不定長度
指令集架構設計策略RISC
擴展指令集M、A、F、D、Q、C、P
分支預測結構比較和分支
通用暫存器16、32(包括一个始终为零的寄存器)
浮點寄存器32、64、128
RISC-V处理器原型,2013年1月

与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片软件而不必支付給任何公司專利費。虽然这不是第一个开源指令集[1],但它具有重要意义,因为其设计使其适用于现代计算设备(如仓库规模云计算机、高端移动电话和微小嵌入式系统)。设计者考虑到了这些用途中的性能与功率效率。该指令集还具有众多支持的软件,这解决了新指令集通常的弱点。[2]

RISC-V指令集的设计考虑了小型、快速、低功耗的现实情況來實做,但並没有对特定的微架構做过度的設計。[3][4]截至2017年5月RISC-V已經確立了版本2.22的用户空间的指令集(userspace ISA),而特权指令集(privileged ISA)也处在草案版本1.10。

意义

RISC-V的作者们旨在提供数种可以在BSD许可证之下自由使用的CPU设计。该许可证允許像是RISC-V芯片设计等衍生作品可以像RISC-V本身一样是公开且自由发行,也可以是闭源或者是专有財產。

相比而言,ARM控股MIPS科技等商业芯片供应商会对使用其专利者收取高額的许可费用。[5]他們也要求在接收其描述设计优点的文件和指令集前,还需要签署保密协议。许多设计优点为完全专有,從來不会披露给客户。这种保密制度阻碍了公共教育用途和安全審核,以及开发公共、低成本的自由及开放源代码软件編譯器操作系统[來源請求]

开发一个CPU需要多种专业的设计知识,包括电子逻辑、编译器和操作系统。这种资源在专业工程团队之外很难见到。所以现代且高质量的通用计算机指令集近年来除了学术环境以外並沒有在任何地方被广泛使用,甚至没有被阐述。正因如此,许多RISC-V贡献者将此视为整個社群付出的成果,而这也是RISC-V有很多工程上的應用的一项原因。

RISC-V的作者们还有大量研究和使用者經驗來验证他们在硅片和仿真中的设计。RISC-V指令集是从一系列的学术计算机设计项目直接发展而来的。它一開始的目的有一部分是為了帮助这些项目。

历史

前身

RISC的歷史可追溯到1980年左右。[6]在此之前,人們覺得簡單的計算機可能會有用,但是沒有很多人去闡述其設計原則。這種簡單而有效的計算機一直都是學術界的興趣。

學術界的學者們為了出版第一版的《計算機體系結構:量化研究方法》(Computer Architecture: A Quantitative ApproachISBN 978-1558600690 ,所以於1990年訂立了RISC指令集DLX。大衛·帕特森(David Patterson)是其中一位作者,後來協助RISC-V的開發。但是DLX只用於教育用途,學術界和業餘愛好者使用FPGA(現場可編程門陣列)來實做它,但並沒有取得商業運用。版本2及更早版本的ARM CPU具有公共域指令集,並且仍有GCC的支持,而GCC是一個受歡迎且免費的軟件編譯器。該ISA有三個開源內核,但尚未製造。

OpenRISC是一款基於DLX的開源ISA,並且具有相關的RISC設計。它完全支持GCC並且有實做在Linux上。但是它很少有商業上的實做,直到2018年10月SiFive公司推出一系列全新 CPU,產品線應用涵蓋5G、網通、存儲、擴增實境(AR)、虛擬實境(VR)等,其 E 系列與 U 系列的 CPU 方案已經威脅到ARM公司的收費產品並且擁有後者缺乏的64位元架構產品。[7]

ARM公司受到威脅後上线了一个网站riscv-basics.com,列举了对RISC-V的批判,包括:成本、生态系统、碎片化风险、安全性问题、设计验证。但最终迫于業界舆论惡評,ARM关闭了该网站。[2]

基金会

加州柏克萊分校的Krste Asanović教授,發現開放原始碼的電腦系統有很多用途。在2010年他決定用三個月的時間來開發並發表一個開放原始碼的電腦系統。這個計畫是用來幫助包括學術以及工業的使用者。柏克萊分校的大衛·帕特森教授也參加了這個計畫。帕特森也是原來伯克利分校RISC的設計者,RISC-V只是他眾多RISC CPU研究計畫的一個.RISC-V計畫早期一些經費來自DARPA

有參與支援RISC-V基金會的公司以及機構包括了超微半導體晶心科技英國航太系統、加州大学伯克利分校、Bluespec英语Bluespec、Cortus、Google、GreenWaves Technology、慧與科技華為IBM、Imperas Software、中国科学院北京清華大學印度理工學院、萊迪思半導體、邁倫科技、美高森美、美光科技輝達恩智浦半導體甲骨文公司高通Rambus威騰電子SiFive英语SiFive阿里巴巴集团紅帽公司、成为资本[8]

2019年6月,图灵奖得主、RISC-V基金会创始人之一大卫·帕特森(David Patterson)在瑞士宣布,将依托清华-伯克利深圳学院(TBSI),在內部建设RISC-V国际开源实验室(RISC-V International Open Source Laboratory),又称大卫帕特森RIOS图灵实验室。清华大学称实验室将瞄准世界CPU产业战略发展新方向和粤港澳大湾区产业创新需求,[2]聚焦于开源指令集CPU研究,建设以深圳为根节点的RISC-V全球创新网络和以技术成果转移为主要使命的非营利组织,全面提升RISC-V生态系至最先进可商用水平。預判屆時將面對國際大廠法律层面發起挑戰问题上,伯克利加州大学和清华大学的法学院將與之建立联系。[2]

2020年3月,RISC-V基金会為規避美國對中國的贸易限制而将總部搬迁至瑞士[9],並更名为RISC-V国际(英語:RISC-V International),以非盈利商业协会的身份在瑞士注册[10]

奖项

  • 2017:The Linley Group's Analyst's Choice Award for Best Technology(页面存档备份,存于互联网档案馆)(对其指令集)
 
IGLOO2開發者用單片機,RISC-V指令集。

激勵要求

RISC設計者們認為指令集因為位於硬體和軟體之間,所以是電腦主要的溝通橋樑,因此如果有一個設計良好的指令集是開源而且可以被任何人使用的,就可以讓更多的資源能夠重複利用,而大大的減少軟體的成本。而這樣的指令集也會增加硬體供應商市場的競爭力,因為硬體供應商們可以挪用更多資源來進行設計,減少處理軟體支援的事務。[11]

設計者聲稱在指令集設計領域裡,新的設計準則漸漸變得罕見,而近四十年中,大多數成功的設計變得越來越相似。至於那些失敗的指令集,大多數是因為他們的贊助商賺不了錢,而不是因為其指令集在技術上有多差。所以,一個在成熟的設計準則之下開發且設計良好的開源指令集想必能吸引許多供應商長期的支援。[11]

許多先前的開源指令集架構使用GNU通用公共授權條款來鼓勵使用者們允許他們的實作方法被其他人複製或是使用。

設計者們表示,RISC-V指令集是給實際上的電腦使用的,它不像其他學術上的指令集設計,只有為了比較好闡述理念而做最佳化。而RISC-V指令集有一些功能是可以增加電腦速度又可以減少成本和電源使用。這些特色包含,Load/store架構,在CPU裡面的位元表示方法來簡化數據多工器(MUX),以標準為基礎來簡化的浮點數,架構中立的設計和把最高有效位(Most significant bit,MSB)放到固定位置來加速符号扩充(Sign extension)。而sign extension常常就是靜態時序分析裡面的關鍵路徑(Critical timing path)[12]

RISC-V 指令集是設計來給各式各樣的用途使用的,而它支援三個不同的字組大小,分別是32位元、64位元、128位元以及與這三種字組大小有關的各式各樣的指令子集。而這些指令子集的定義會按照那三個字組大小來做些微的改動。透過這些指令子集的向量處理器與資料中心等級的機櫃式平行電腦/平行運算來幫助嵌入式系统個人電腦超級電腦

該指令集採取不固定的編碼長度而且還可以再擴充,因此在未來,還可以一直加入更多位元的編碼方式。該指令集有特別留空間給128位元的延伸版本,因為60年的產業界經驗顯示在指令集設計領域裡,最無法復原的錯誤就是缺少記憶體定址空間。截至2016年,128位元的指令集仍然刻意地維持在沒有定義的狀態,這是因為到現在為止,人們很少有實際上操作這麼大記憶體的系統的經驗。[12]

然而,RISC-V也可以拿來做學術上的使用。它擁有簡化的整數指令子集允許學生拿來做基本的練習,而整數指令子集就是一個簡單的指令集架構(ISA)讓軟體可以控制研究上的機器。而不定長度的指令集架構也允許擴充功能來滿足研究或是學生練習上的需求。[12]分割出來的特權指令集可以支援在不重新設計編譯器的情況下,進行作業系統方面的研究。[13]RISC-V的開放的智慧財產權允許相關的設計被發布、使用和修改。[12]

软件

一個新的CPU指令集通常的問題是缺少CPU的硬體設計跟軟體的支援。在RISC-V的網站有一個user mode指令集的規格,還有一個用來支援作業系統模式的優先指令集的初步規格。

市面上已經有好幾個使用RISC-V開源架構的CPU設計可以供參考,包括64-bit Berkeley Out of Order Machine(BOOM)[14]、64-bit Rocket[15]、柏克萊設計的五個32-bit Sodor CPU[3]、Clifford Wolf 的 picorv32、Syntacore 的 scr1、蘇黎世聯邦理工學院/波隆納大學的 PULPino (Riscy and Zero-Riscy)[16],以及很多其他的設計。使用三層指令分段的 Sodor CPU 是一個適合嵌入式設計的小型CPU。Rocket可能適用在小型低功耗的個人電腦或其他個人裝置。BOOM 使用了大部分Rocket的架構,但是功能更加強大,適合個人電腦、伺服器或超級電腦。picorv 跟 scr1 都是使用Verilog 設計的 32位元 MCU 等級的 RV32IMC。PULPino的核心使用了一個適合微控制器的簡單的 RV32IMC ISA架構(Zero-Riscy),以及另外一個更強大的DSP版本 RV32IMFC ISA 可以支援一些嵌入式信號處理的特別 DSP 指令集。

設計軟體包括了一個設計編譯器 Chisel,它可把設計編譯成Verilog代碼。網站上還有測試用的參考資料可以用來驗證設計的正確性。

RISC-V目前提供的軟體有 GNU Compiler Collection (GCC) toolchain (具有偵錯器 GDB)、一套 LLVM toolchain、OVPsim模擬器(以及RISC-V快速處理器模式的軟體參考庫)、Spike 模擬器,以及一套在QEMU上運行的模擬器。

作業系統的支援包括 Linux 核心、FreeBSD, 以及 NetBSD,但是監督模式的指令在2016年11月10日還沒有標準化[13],所以這方面的支援還不是正式的。有一個早期的 RISC-V 的FreeBSD 作業系統已經在2016年2月上傳到開放原始碼社群,而且包含在 FreeBSD 11.0[17][18]Debian[19]Fedora[20]的版本也有人在移植,並且在逐漸穩定中。已經有人做了1個 U-Boot 的移植版本。[21]UEFI Spec v2.7 定義了RISC-V UFEI 的規格,而且惠普公司的工程師已經做好一個 TianoCore的移植版本,並且將會上傳到開放原始碼社群。已經有人做好了一個 L4 microkernel family 的移植[22]。還有一個在網頁上用JavaScript寫的 RISC-V Linux 系統模擬器[23]

设计

指令子集

RISC-V 指令使用模塊化的設計,包括幾個可以互相替換的基本指令集,以及額外可以選擇的擴充指令集。所有基本跟擴充的指令集都是由科技產業、研究機構跟學術界合作開發的。基本指令集規範了指令跟他們的編碼、控制流程、暫存器數目(以及它們的長度)、記憶體跟定址方式、邏輯(整數)運算以及其他。只要有軟體以及一個通用的編譯器的支援,只用基本指令集就可以製作一個簡單的通用型的電腦。

標準的擴充指令集可以搭配所有的基本指令集以及其他擴充指令集,而不會發生衝突。

很多 RISC-V 電腦可能使用精簡擴充指令集來降低電力消耗、程式的大小以及記憶體的使用。未來也有計畫支援hypervisor虛擬化[13]

只要再加上一個監督指令集 (S) 的擴充,以及以下 RVGC 指令集,我們就有足夠的指令可以支援一個 Unix-style 作業系統

指令集名稱 描述 版本 狀態[a]
基本指令集
RVWMO RISC-V 弱內存模型 2.0 已批准
RV32I 基本整數指令集, 32位元 2.1 已批准
RV32E 基本整數指令集(嵌入式系統), 32位元, 16 個暫存器 2.0 已批准
RV64I 基本整數指令集, 64位元 2.1 已批准
RV64E 基本整數指令集(嵌入式系統), 64位元, 16 個暫存器 2.0 已批准
RV128I 基本整數指令集, 128位元 1.7 開放
標準擴充指令集
M 整數乘除法標準擴充 2.0 已批准
A 不可中斷指令(Atomic)標準擴充 2.1 已批准
F 單精度浮點標準擴充 2.2 已批准
D 雙精度浮點標準擴充 2.2 已批准
Zicsr 控制與狀態暫存器 2.0 已批准
Zifencei 指令抓取屏障 2.0 已批准
G 所有以上的擴充指令集以及基本指令集的總和的簡稱 不適用 不適用
Q 四精度浮點標準擴充 2.2 已批准
L 十進位浮點標準擴充 0.0 開放
C 壓縮指令標準擴充     2.0 已批准
B 位元運算標準擴充 1.0 已批准
J 動態指令翻譯標準擴充 0.0 開放
T 順序記憶體存取標準擴充 0.0 開放
P 單指令多資料流(SIMD)運算標準擴充 0.9.10 開放
V 向量運算標準擴充 1.0 凍結
Zk 標量加密標準擴充 1.0.1 已批准
H Hypervisor 標準擴充 1.0 已批准
S Supervisor 標準擴充 1.12 已批准
Zam 非對齊不可中斷指令標準擴充 0.1 開放
Zihintpause 暫停提示 2.0 已批准
Zihintntl 非時間局部性提示 0.2 開放
Zfa 額外浮點運算指令標準擴充 0.1 開放
Zfh 半精度浮點標準擴充 1.0 已批准
Zfhmin 半精度浮點最小集標準擴充 1.0 已批准
Zfinx 整數寄存器單精度浮點標準擴充 1.0 已批准
Zdinx 整數寄存器雙精度浮點標準擴充 1.0 已批准
Zhinx 整數寄存器半精度浮點標準擴充 1.0 已批准
Zhinxmin 整數寄存器半精度浮點最小集標準擴充 1.0 已批准
Zmmul 整數純乘法標準擴充 1.0 已批准
Ztso 全存儲排序標準擴充 1.0 已批准
  1. ^ 凍結狀態代表著他們已經有最終版本的指令集而且在正式發布前只會對原先的內容做澄清

為了分辨各種不同的指令組合,非特權指令集標準中訂定了一些專有名詞。首先先指明基本指令集的種類,包括表示 RISC-V 的代號 RV,然後是暫存器的寬度跟其他變化,例如 RV64I 或 RV32E。然後用上表的字母(以及表列的順序)表示用了哪種擴充指令,例如 RV64IMAFD。

基本指令集、擴充整數或浮點運算、多CPU系統使用的同步指令擴充,標準擴充指令MAFD被認為是大部分的一般運算都需要的,所以有一個字母的簡稱 G 用來表示 IMAFDZicsr_Zifencei。

使用嵌入式系統的一個小的32位元電腦可能用 RV32EC,而大型的64位元電腦可以用 RV64GC,即 RV64IMAFDCZicsr_Zifencei 的簡稱。

隨著擴充指令集數量的增加,指令集標準提供了另外一種命名方式,用 Z 字首緊接著字母名稱表示標準擴充,例如 Zifencei 表示指令抓取屏障擴充。

寄存器集

RISC-V 有 32 個整數暫存器(在嵌入式版本則是 16 個)。當浮點延伸集被實作的時候,還有 32 個浮點暫存器。除了「記憶體存取指令」之外,一般指令「只能」定址暫存器而無法存取記憶體。

如同有些 RISC 指令集(MIPS, SPARC, DEC Alpha),其中一個暫存器為「零暫存器」(zero register,註:其值永遠為零),剩下的暫存器為通用暫存器。在 RISC 當中,第一個整數暫存器是零暫存器。儲存數值到零暫存器是沒有作用的。使用零暫存器可以讓指令集設計更簡單。比方說,把「暫存器 X 複製到暫存器 Y」 (MOV Y, X),可以使用「將暫存器 X 與 0 相加後,複製到暫存器 Y」 (ADD Y, X, r0) 實作。

RISC-V 有提供「控制暫存器」及「狀態暫存器」,但是 user-mode 程式只能存取用來「量測效能」及「浮點管理」的部分。

RISC-V 並沒有指令可以儲存和回復(save and restore。註:通常用於 context-switch,中斷處理,或是函數呼叫)多個暫存器。這些設計在 RISC-V 當中,被認為是不必要的,過於複雜的,可能過慢的設計。

記憶體存取

就像許多的 RISC 一樣, RISC-V 屬於載入-儲存架構,只有 load 與 store 指令可以存取記憶體。

Load 和 Store 指令可以直接使用程式碼中的常數、在堆疊中的本地變數、或是資料結構中的內容。定址的方式是使用基底暫存器與 12-bit 的 signed 相對地址 (± 2KB)。如果基底暫存器是 0,則資料或是常數可以在低位址,或是高位址(負的相對地址,導致繞回到高的記憶體地址。比方說 ROM 的記憶體地址)。

記憶體的定址單位是 8-bit 的 byte,以 little-endian 存放在記憶體。Load 與 Store 支援的資料長度從 8-bit 到電腦的 word 大小。記憶體存取並不需要對齊到 word 的大小,不過如果有對齊的話,可以增加效能。這項功能可以減小程式碼大小,而且透過軟體的模擬,還可以簡化硬體的設計(會觸發一個「對齊失敗」的中斷)。

和其他類似成功的電腦一樣,RISC-V 也是 little-endian。這稍稍降低了複雜度與成本,因為所有大小的讀取,都遵循一樣的順序(注:例如 64-bit 與 128-bit 的讀取,都是從最小的 word 開始讀進來,只要一直 shift 就可以了)。舉例來說,RISC-V 的指令集都是從最低的那個 byte 開始解碼(注:opcode)。RISC-V 的規格書保留了實作 big-endian 的可能性。

如同許多的 RISC 指令集一樣,RISC-V 並沒有可以「寫入多個暫存器」的定址模式。比方說:不支援 auto-incrementing(像是 *ptr++ 就無法使用一個指令完成,而必須拆解成「一個 load 指令」及「一個 addi 指令」。)

RISC-V 管理 CPU 與 thread 之間的共用記憶體的方式是確保在單一的 thread 當中,記憶體存取指令的執行順序永遠是遵照原本的編譯順序。不過在不同的 thread 以及在 I/O 裝置之間,RISC-V 不保證存取的順序──除非有像 FENCE 這樣的指令出現。

FENCE 保證在其之前的執行結果,一定會被其後的 thread 或 I/O 裝置看到。FENCE 有 8-bit 可以分別指定 memory read/write 與 I/O read/write 的各種組合順序。透過這些組合,FENCE 可以保證記憶體與 memory-mapped I/O 之間的執行順序。比方說:其中一個組合是可以在不影響 I/O 運算的情況下,只保證記憶體的讀取和寫入順序。也就是說,如果 I/O 運算可以和記憶體同時執行的話,FENCE 不會強迫他們之間要互相等待。單一 CPU 上面跑單一 thread 的情況下,可以把 FENCE 視作 NOP 指令。

有些 RISC CPUs(例如:MIPS, PowerPC, DLX, and Berkeley's RISC-I)在 Load/Save 指令當中使用 16-bit 位移。使用 load upper word 指令來設定最高的 16-bit。這讓最高的 16-bit 資料可以很容易被設定,而不需要位移指令。然而,大部分使用 load upper word 的時機都是為了要載入一個常數(比如:地址)。RISC-V 則是使用類似 SPARC 12-bit 與 20-bit 的設計。而 RISC-V 所採用的 12-bit 設計,可以讓指令更小。也就是說,這使得 32-bit 的 load/store 指令,就算需要在 32 個暫存器(需要 5-bit 定址)當中選兩個來用(一共 10-bit),還是有足夠的 bit 數目來支援 RISC-V 的可變長度指令編碼 (variable-length instruction coding)。

注:請參考 32-bit 的 I-type 指令格式,就會發現這個 12-bit 位移比 16-bit 來得優異的地方。這使得 32-bit 的空間當中,扣掉 12-bit 的常數值,以及最低的兩個 bit 為 11(表示這是一個 32-bit 長的指令),再扣掉兩個 5-bit 的暫存器位址,還有將近 8-bit 的空間可以留給 opcode 及 func3 。如果是使用 16-bit immediate 的話,會使得空間不夠放下兩個 5-bit 的暫存器位址。舉例來說,SLLI Rd, Rs, immediate (Shift Left Logical Immediate) 將會被迫拆解成兩個指令來完成:LDR Ri, immediate; SLLI Rd, Rs, Ri 。

立即數

RISC-V 讀取 32-bit 常數與位址是透過設定 upper 20-bit 的指令達到的。LUI 指令 (Load Upper Immediate) 把(指令中的)20-bit 讀取到暫存器的 31~12 bits 當中。另一個 AUIPC 指令,也是一樣讀取 upper 20-bit,同時又加上 PC (Program Counter) 之後,存放到某個基底暫存器。這個指令讓 PIC 程式(Position-Independent Code)能夠支援「相對於程式碼位置的 32-bit 地址」。這個基底暫存器可以再搭配 12-bit 位移,使用在 Load 與 Store 指令當中(注:存取本地的 static 變數?)。如果需要的話,也可以使用 addi 指令,將 lower 12-bit 的常數加到一個暫存器中(注:這樣就完成一個完整的 32-bit 常數讀取)。在 64-bit 架構下,LUI 與 AUIPC 執行的結果會被位元擴充至 64-bit (sign-extent)。

有些高速的 CPU 會把一些指令「融合」成一個指令。比如說:上述的 LUI 與 AUIPC 就很適合和 Load/Save 指令一起融合。

函數呼叫、跳躍和分支

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 的絕對位址)

透過使用零暫存器,底下兩種無條件跳躍(其他組語中的 JUMP 或 JMP):「20-bit PC 相對位址」以及「暫存器為底的 12-bit」,分別使用 JAL 與 JALR 兩個指令來實作。在這個情況下,因為目的地暫存器是零存器,所以回傳位址會被丟棄。

如同許多的 RISC 系統,在一個函數呼叫當中,RISC-V 編譯器必須使用多個指令將暫存器一個一個地存到堆疊當中,然後在函數結束的時候,一個一個地將暫存器自堆疊中還原。RISC-V 沒有「儲存多個」或是「還原多個」暫存器的指令。因為這些指令被認為會讓 CPU 變得複雜,而且可能更慢[51]。 然而 RISC-V 的這種設計,會增加程式大小。而設計者原本是希望透過一種特別的 routine 來減小程式(注:可以參考 這份文件(页面存档备份,存于互联网档案馆) 的 1.7 Optimizing Register Save/Restore Code Size)。

RISC-V 沒有旗標暫存器(注:原文是 conditional code register,就是指傳統的旗標暫存器 flag register,用以存放計算結果,給接下來的指令使用,例如:進位旗標 carry flag)。設計者相信旗標暫存器會讓 CPU 設計更加複雜,因為它必須強迫了指令們在不同的執行階段之間的交互作用。這樣的設計,會使得高精度計算變得更複雜,有些數值計算需要更多的能量。

相反地,RISC-V 直接比較兩個暫存器,運算元包括:相等、不相等、小於、無號數小於、大於、無號數大於。十個「比較跳躍」運算元,可以透過翻轉順序的方式,可以只用上述六個運算元實作出來。舉例來說:「如果大於時跳躍」可以用「小於或等於時跳躍」來實作。

這六個比較跳躍有 12-bit 的有號位移,可以跳到 PC±4KB 的範圍內。

RISC-V 要求 CPU 實作「預設分支預測」 (default branch prediction)。如果是往回跳躍 (例如: do {...} while (expr) 中的 expr 判斷式),CPU 要預測跳躍會發生,也就是預測 expr 「會」成立。如果是向前跳躍(例如:if (expr) {...} else {...} 中的 else 部分),CPU 預測這個跳躍會發生,也就是預測 expr 「不會」成立。CPU 判斷往回或向前的方法,是看指令中相對位址的最高位元,也就是有號數的部分 (signed bit):如果是 1,表示是負數,要往回跳躍。如果是 0,表示是正數,要向前跳躍。當然,複雜的 CPU 實作也可以加入更多的分支預測。

RISC-V 手冊也建議軟體(如:編譯器)利用預設分支預測的特性,來避免分支造成 pipeline 被停滯。方法就是利用上一段提到的 signed bit 來讓「暗示」 CPU 這個分支會不會發生。所以,就是算是簡單又便宜的 CPU ,也可以透過編譯器來優化效能。如果有需要,編譯器也可以透過統計等方式來優化效能。

所以,為了避免不必要的分支預測電路(以及不必要的 pipeline 停滯),無條件跳躍不要用「比較分支」來實作。

RISC-V 並不支援「條件執行」指令(condition execution,註:當某個條件成立的時候,才執行該指令)。設計者宣稱沒有這種設計的 CPU 比較容易設計,而且編譯器在進行優化的時候,也比較不容易假設錯誤。設計者宣稱高速又不照順序執行的 CPU 反正都會同時執行正反兩種結果,之後再丟棄其中一個。他們也宣稱,即使在簡單的 CPU 當中,條件執行其實是比較沒有價值的,不如跳躍預測來的有用。不使用條件執行的程式碼會比較大,但是他們宣稱壓縮指令集在大部分的情況下,可以解決這樣的問題。

許多的 RISC 設計都有「分支延遲槽」(branch delay slot),用來充份使用跳躍指令的下一個記憶體位址,這可以略略增加整體的 CPU 效能。RISC-V 並不支援這個功能,因為他會讓多時序,超純量,以及 long pipeline 變得很複雜。而動態分支預測其實已經做得很好,可以不需要這個功能了。

算术和逻辑集

RISC-V 把數學運算指令歸類到一個很小的 I 子集當中,包括:加法,減法,位移,位元運算,及比較跳躍。這些可以使用軟體的方式去模擬其他大部分的 RISC-V 指令(atomic 運算是值得一提的例外)。RISC-V 目前沒有「數開頭有幾個零」以及一些用來加速軟體浮點運算的位元運算。

整數乘法子集(M 子集)包括:有號數與無號數的乘法與除法。

浮點子集包括單精度運算,以及類似於整數的「比較跳躍」。它需要額外的 32 個浮點暫存器,這些是與整數暫存器分開的。雙精度浮點子集一般假設浮點暫存器是 64 位元,而且會與 F 子集一起協作。RISC-V 亦有定義四精度 128-bit 浮點指令。沒有支援硬體浮點指令的 CPU,依舊可以使用軟體的浮點程式庫。

RISC-V 在遇到運算錯誤的時候,並不會抛出异常,包括:overflow, underflow, subnormal 及 divide by zero。相反的,整數運算和浮點運算都會產生合理的預設數值,然後設定狀態位元。Divide-by-zero 可以用一個跳躍指令來處理。這些狀態位元可以也可以被作業系統或是定期的中斷檢查到。

原子内存操作

RISC-V 支援多個 CPU 與 thread。其標準記憶體同步模式是「釋放一致」原則。也就是說,讀取和寫入順序可以重排,但是有些讀取可以被設定成「獲取」運算,會在其後的存取之前被執行,有些寫入可以被當作「釋放」運算,必須在其之前的存取的後面執行。

基本指令當中包含了最少的支援,使用 fence 指令來保證記憶體存取順序。儘管這很簡單(fence r/rw 提供「獲取」,fence rw/w 提供「釋放」),組合起來還是可以很有效率。

RISC-V处理器

商業實現

阿里巴巴玄铁910

 
玄铁 C910 微架構

阿里巴巴旗下半导体公司平头哥发布了它的首款 RISC-V 处理器「玄铁 910」(XuanTie910),名字取自金庸小说《神雕侠侣》。阿里巴巴称它是目前性能最强的 RISC-V 处理器,支持16核,主频 2.5GHz,单核性能达到 7.1 Coremark/MHz。阿里巴巴称其性能突破源自两大创新:一是它采用3发射8执行的复杂乱序执行架构,是业界首个实现每周期 2 条内存访问的 RISC-V 处理器;二是它基于 RISC-V 扩展了 50 余条指令,系统性增强了 RISC-V 的计算、存储和多核等方面能力。[24]

2021年平头哥半导体釋出玄铁C910處理器開源項目[25],同時還發布出C910的LLVM编译器源代碼。[26]

SiFive公司的RISC-V半導體IP核系列

RISC-V創始人所創辦的SiFive公司提供一系列RISC-V半導體IP核,包含高性能、高效能、低功耗及嵌入式RISC-V处理器。[27]

開源實現

中國科學院「香山」

中國科學院計算所在2020年釋出「香山」高性能RISC-V處理器開源項目,香山以Chisel硬件描述语言開發。[28] [29] 第一版「雁栖湖架構」使用台積電的28nm製程,工作頻率為1.3GHz。[30]

威騰電子「SweRV」

威騰電子在2018年釋出SweRV RISC-V處理器開源項目[31],SweRV 目標應用環境為储存装置控制器,從開源以來已有多家廠商采用。[32]

参见

  • 精簡指令集 (RISC)
  • OpenRISC,以GNU General Public License授权
  • OVPsim,RISC-V处理器指令子集、内核和系统的指令精确模拟器。免费为非商业用途提供。
  • ARM架構
  • 开源运算硬件列表英语List of open-source computing hardware

参考资料

  1. ^ RISC-V讀卡器:開放式架構地圖集第1期 1st. Strawberry Canyon. ISBN 978-0999249109. )
  2. ^ 2.0 2.1 2.2 2.3 新浪-图灵奖得主加入清華,牵头推动芯片开源
  3. ^ 3.0 3.1 Celio, Christopher. ucb-bar/riscv-sodor. Regents of the University of California. [12 February 2015]. (原始内容于2018-06-11). 
  4. ^ Celio, Christopher. (PDF). Regents of the University of California. [12 February 2015]. (原始内容 (PDF)存档于2016-06-23). 
  5. ^ . SemiAccurate. 2013 [2017-08-28]. (原始内容存档于2017-08-24). 
  6. ^ 精簡指令集計算機的案例. ACM SIGARCH計算機體系結構新聞. 1980年10月, 8 (6): 25. doi:10.1145/641914.641917. 
  7. ^ RSIC-V開源CPU殺出. [2019-06-15]. (原始内容于2018-11-21). 
  8. ^ https://riscv.org/members/. [2021-05-01]. (原始内容于2021-04-26).  缺少或|title=为空 (帮助)
  9. ^ . Reuters. 2019-11-26 [2019-11-26]. (原始内容存档于2022-04-28) (英语). 
  10. ^ . RISC-V International. [2020-05-14]. (原始内容存档于2020-04-15). 
  11. ^ 11.0 11.1 Krste Asanović, David A. Patterson. Instruction Sets Should Be Free: The Case For RISC-V (PDF). U.C. Berkeley Technical Reports. [2018-10-31]. (原始内容 (PDF)于2019-04-23). 
  12. ^ 12.0 12.1 12.2 12.3 Waterman, Andrew; Asanović, Krste. The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA version 2.2. University of California, Berkeley. [25 May 2017]. EECS-2016-118. (原始内容于2017-08-28). 
  13. ^ 13.0 13.1 13.2 Waterman, Andrew; Lee, Yunsup; Avizienas, Rimas; Patterson, David; Asanovic, Krste. . RISC-V. RISC-V Foundation. [30 August 2016]. (原始内容存档于2018-08-26). 
  14. ^ Celio, Christopher. riscv-boom. GitHub. Regents of the University of California. [11 November 2016]. (原始内容于2018-06-11). 
  15. ^ Asanovic, Krste; et al. rocket-chip. GitHub. The RISC-V Foundation. [11 November 2016]. (原始内容于2015-04-03). 
  16. ^ Traber, Andreas; et al. PULP:Parallel Ultra Low Power. ETH Zurich, University of Bologna. [5 August 2016]. (原始内容于2023-01-21). 
  17. ^ FreeBSD Wiki: RISC-V. [2018-11-11]. (原始内容于2018-08-25). 
  18. ^ FreeBSD Foundation: Initial FreeBSD RISC-V Architecture Port Committed. [2018-11-11]. (原始内容于2018-04-04). 
  19. ^ Montezelo, Manuel. Debian GNU/Linux port for RISC-V 64. Google Groups. Google. [19 July 2018]. (原始内容于2018-11-12). 
  20. ^ Architectures/RISC-V. Fedora WIKI. Red Hat. [26 September 2016]. (原始内容于2021-01-24). 
  21. ^ Begari, Padmarao. U-Boot port on RISC-V 32-bit is available. Google Groups. Microsemi. [15 February 2017]. (原始内容于2018-11-12). 
  22. ^ Almatary, Hesham. RISC-V, seL4. seL4 Documentation. CSIRO. [13 July 2018]. (原始内容于2023-01-18). 
  23. ^ . The RISC-V Foundation. [2018-11-11]. (原始内容存档于2018-11-11). 
  24. ^ 阿里巴巴发布首款 RISC-V 处理器. 科技行者. [2019-07-25]. (原始内容于2019-07-25). 
  25. ^ openc910. Github. [2023-01-10]. (原始内容于2023-01-10). 
  26. ^ c910-llvm. Github. [2023-01-10]. (原始内容于2023-01-10). 
  27. ^ RISC-V Portfolio: SiFive Processors. SiFive. [2023-01-04]. (原始内容于2023-01-08). 
  28. ^ . [2021-07-06]. (原始内容存档于2021-07-24). 
  29. ^ . [2021-07-06]. (原始内容存档于2021-07-23). 
  30. ^ (PDF). [2022-05-16]. (原始内容 (PDF)存档于2021-07-06). 
  31. ^ . [2021-09-25]. (原始内容存档于2022-05-07). 
  32. ^ . [2021-09-25]. (原始内容存档于2021-09-25). 

拓展阅读

  • The RISC-V Instruction Set Manual(页面存档备份,存于互联网档案馆
  • Instruction Sets Should Be Free: The Case For RISC-V(页面存档备份,存于互联网档案馆) Whitepaper by Krste Asanović and David A. Patterson
  • The RISC-V Instruction Set(页面存档备份,存于互联网档案馆) HotChips 25 (2013)
  • The RISC-V Software Ecosystem(页面存档备份,存于互联网档案馆) HPCA 2015, Tutorial
  • Rocket Chip(页面存档备份,存于互联网档案馆) HPCA 2015, Tutorial
  • The RISC-V Compressed Instruction Set Manual Version 1.9 (draft)(页面存档备份,存于互联网档案馆

外部链接

  • 官方网站  
  • GitHub上的UCB's site for RISC-V
  • . EETimes. 8 July 2014 [2017-08-28]. (原始内容存档于2017-08-24). 
  • : A developed, open-source system-on-chip based on RISC-V, 4 August 2016
  • Hruska, Joel. . ExtremeTech. 21 August 2014 [2017-08-28]. (原始内容存档于2017-08-24). 
  • . Adapteva. 11 August 2014 [2017-08-28]. (原始内容存档于2017-08-04). 
  • YouTube上的RISC-V頻道
  • search: RISC-V since 2013. Google Scholar. [失效連結]

risc, 本條目存在以下問題, 請協助改善本條目或在討論頁針對議題發表看法, 此條目的语调或风格可能不適合百科全書的寫作方式, 2019年8月29日, 請根據指南協助改善这篇条目, 請在讨论页討論問題所在及加以改善, 此條目包含過多僅特定讀者會感興趣的過度細節內容, 2019年8月29日, 請重新整理本條目以切合主題, 並移除与維基百科內容方針相悖的過度細節內容, 詳細信息請參見討論頁, 此條目需要精通或熟悉相关主题的编者参与及协助编辑, 請邀請適合的人士改善本条目, 更多的細節與詳情請參见討論頁, 此條目目前正. 本條目存在以下問題 請協助改善本條目或在討論頁針對議題發表看法 此條目的语调或风格可能不適合百科全書的寫作方式 2019年8月29日 請根據指南協助改善这篇条目 請在讨论页討論問題所在及加以改善 此條目包含過多僅特定讀者會感興趣的過度細節內容 2019年8月29日 請重新整理本條目以切合主題 並移除与維基百科內容方針相悖的過度細節內容 詳細信息請參見討論頁 此條目需要精通或熟悉相关主题的编者参与及协助编辑 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 此條目目前正依照en RISC V上的内容进行翻译 2018年12月19日 如果您擅长翻译 並清楚本條目的領域 欢迎协助翻譯 改善或校对本條目 此外 长期闲置 未翻譯或影響閱讀的内容可能会被移除 RISC V 发音为 risk five 是一個基于精简指令集 RISC 原则的开源指令集架構 ISA 簡易解釋為開源軟體運動相對應的一種 開源硬體 该项目2010年始于加州大學柏克萊分校 但许多贡献者是该大学以外的志愿者和行业工作者 RISC V推出年份2010年 12年前 2010 設計公司加州大學柏克萊分校最新架構版本2 2是否開放架構 是體系結構類型載入 儲存架構字長 暫存器資料寬度32 64 128位元組序小端序指令編碼長度不定長度指令集架構設計策略RISC擴展指令集M A F D Q C P分支預測結構比較和分支通用暫存器16 32 包括一个始终为零的寄存器 浮點寄存器32 64 128RISC V处理器原型 2013年1月 与大多数指令集相比 RISC V指令集可以自由地用于任何目的 允许任何人设计 制造和销售RISC V芯片和软件而不必支付給任何公司專利費 虽然这不是第一个开源指令集 1 但它具有重要意义 因为其设计使其适用于现代计算设备 如仓库规模云计算机 高端移动电话和微小嵌入式系统 设计者考虑到了这些用途中的性能与功率效率 该指令集还具有众多支持的软件 这解决了新指令集通常的弱点 2 RISC V指令集的设计考虑了小型 快速 低功耗的现实情況來實做 但並没有对特定的微架構做过度的設計 3 4 截至2017年5月RISC V已經確立了版本2 22的用户空间的指令集 userspace ISA 而特权指令集 privileged ISA 也处在草案版本1 10 目录 1 意义 2 历史 2 1 前身 2 2 基金会 2 3 奖项 3 激勵要求 4 软件 5 设计 5 1 指令子集 5 2 寄存器集 5 3 記憶體存取 5 4 立即數 5 5 函數呼叫 跳躍和分支 5 6 算术和逻辑集 5 7 原子内存操作 6 RISC V处理器 6 1 商業實現 6 1 1 阿里巴巴玄铁910 6 1 2 SiFive公司的RISC V半導體IP核系列 6 2 開源實現 6 2 1 中國科學院 香山 6 2 2 威騰電子 SweRV 7 参见 8 参考资料 9 拓展阅读 10 外部链接意义 编辑RISC V的作者们旨在提供数种可以在BSD许可证之下自由使用的CPU设计 该许可证允許像是RISC V芯片设计等衍生作品可以像RISC V本身一样是公开且自由发行 也可以是闭源或者是专有財產 相比而言 ARM控股和MIPS科技等商业芯片供应商会对使用其专利者收取高額的许可费用 5 他們也要求在接收其描述设计优点的文件和指令集前 还需要签署保密协议 许多设计优点为完全专有 從來不会披露给客户 这种保密制度阻碍了公共教育用途和安全審核 以及开发公共 低成本的自由及开放源代码软件編譯器和操作系统 來源請求 开发一个CPU需要多种专业的设计知识 包括电子逻辑 编译器和操作系统 这种资源在专业工程团队之外很难见到 所以现代且高质量的通用计算机指令集近年来除了学术环境以外並沒有在任何地方被广泛使用 甚至没有被阐述 正因如此 许多RISC V贡献者将此视为整個社群付出的成果 而这也是RISC V有很多工程上的應用的一项原因 RISC V的作者们还有大量研究和使用者經驗來验证他们在硅片和仿真中的设计 RISC V指令集是从一系列的学术计算机设计项目直接发展而来的 它一開始的目的有一部分是為了帮助这些项目 历史 编辑前身 编辑 RISC的歷史可追溯到1980年左右 6 在此之前 人們覺得簡單的計算機可能會有用 但是沒有很多人去闡述其設計原則 這種簡單而有效的計算機一直都是學術界的興趣 學術界的學者們為了出版第一版的 計算機體系結構 量化研究方法 Computer Architecture A Quantitative Approach ISBN 978 1558600690 所以於1990年訂立了RISC指令集DLX 大衛 帕特森 David Patterson 是其中一位作者 後來協助RISC V的開發 但是DLX只用於教育用途 學術界和業餘愛好者使用FPGA 現場可編程門陣列 來實做它 但並沒有取得商業運用 版本2及更早版本的ARM CPU具有公共域指令集 並且仍有GCC的支持 而GCC是一個受歡迎且免費的軟件編譯器 該ISA有三個開源內核 但尚未製造 OpenRISC是一款基於DLX的開源ISA 並且具有相關的RISC設計 它完全支持GCC並且有實做在Linux上 但是它很少有商業上的實做 直到2018年10月SiFive公司推出一系列全新 CPU 產品線應用涵蓋5G 網通 存儲 擴增實境 AR 虛擬實境 VR 等 其 E 系列與 U 系列的 CPU 方案已經威脅到ARM公司的收費產品並且擁有後者缺乏的64位元架構產品 7 ARM公司受到威脅後上线了一个网站riscv basics com 列举了对RISC V的批判 包括 成本 生态系统 碎片化风险 安全性问题 设计验证 但最终迫于業界舆论惡評 ARM关闭了该网站 2 基金会 编辑 加州柏克萊分校的Krste Asanovic教授 發現開放原始碼的電腦系統有很多用途 在2010年他決定用三個月的時間來開發並發表一個開放原始碼的電腦系統 這個計畫是用來幫助包括學術以及工業的使用者 柏克萊分校的大衛 帕特森教授也參加了這個計畫 帕特森也是原來伯克利分校RISC的設計者 RISC V只是他眾多RISC CPU研究計畫的一個 RISC V計畫早期一些經費來自DARPA 有參與支援RISC V基金會的公司以及機構包括了超微半導體 晶心科技 英國航太系統 加州大学伯克利分校 Bluespec 英语 Bluespec Cortus Google GreenWaves Technology 慧與科技 華為 IBM Imperas Software 中国科学院 北京清華大學 印度理工學院 萊迪思半導體 邁倫科技 美高森美 美光科技 輝達 恩智浦半導體 甲骨文公司 高通 Rambus 威騰電子 SiFive 英语 SiFive 阿里巴巴集团 紅帽公司 成为资本 8 2019年6月 图灵奖得主 RISC V基金会创始人之一大卫 帕特森 David Patterson 在瑞士宣布 将依托清华 伯克利深圳学院 TBSI 在內部建设RISC V国际开源实验室 RISC V International Open Source Laboratory 又称大卫帕特森RIOS图灵实验室 清华大学称实验室将瞄准世界CPU产业战略发展新方向和粤港澳大湾区产业创新需求 2 聚焦于开源指令集CPU研究 建设以深圳为根节点的RISC V全球创新网络和以技术成果转移为主要使命的非营利组织 全面提升RISC V生态系至最先进可商用水平 預判屆時將面對國際大廠法律层面發起挑戰问题上 伯克利加州大学和清华大学的法学院將與之建立联系 2 2020年3月 RISC V基金会為規避美國對中國的贸易限制而将總部搬迁至瑞士 9 並更名为RISC V国际 英語 RISC V International 以非盈利商业协会的身份在瑞士注册 10 奖项 编辑 2017 The Linley Group s Analyst s Choice Award for Best Technology 页面存档备份 存于互联网档案馆 对其指令集 IGLOO2開發者用單片機 RISC V指令集 激勵要求 编辑RISC設計者們認為指令集因為位於硬體和軟體之間 所以是電腦主要的溝通橋樑 因此如果有一個設計良好的指令集是開源而且可以被任何人使用的 就可以讓更多的資源能夠重複利用 而大大的減少軟體的成本 而這樣的指令集也會增加硬體供應商市場的競爭力 因為硬體供應商們可以挪用更多資源來進行設計 減少處理軟體支援的事務 11 設計者聲稱在指令集設計領域裡 新的設計準則漸漸變得罕見 而近四十年中 大多數成功的設計變得越來越相似 至於那些失敗的指令集 大多數是因為他們的贊助商賺不了錢 而不是因為其指令集在技術上有多差 所以 一個在成熟的設計準則之下開發且設計良好的開源指令集想必能吸引許多供應商長期的支援 11 許多先前的開源指令集架構使用GNU通用公共授權條款來鼓勵使用者們允許他們的實作方法被其他人複製或是使用 設計者們表示 RISC V指令集是給實際上的電腦使用的 它不像其他學術上的指令集設計 只有為了比較好闡述理念而做最佳化 而RISC V指令集有一些功能是可以增加電腦速度又可以減少成本和電源使用 這些特色包含 Load store架構 在CPU裡面的位元表示方法來簡化數據多工器 MUX 以標準為基礎來簡化的浮點數 架構中立的設計和把最高有效位 Most significant bit MSB 放到固定位置來加速符号扩充 Sign extension 而sign extension常常就是靜態時序分析裡面的關鍵路徑 Critical timing path 12 RISC V 指令集是設計來給各式各樣的用途使用的 而它支援三個不同的字組大小 分別是32位元 64位元 128位元以及與這三種字組大小有關的各式各樣的指令子集 而這些指令子集的定義會按照那三個字組大小來做些微的改動 透過這些指令子集的向量處理器與資料中心等級的機櫃式平行電腦 平行運算來幫助嵌入式系统 個人電腦和超級電腦 該指令集採取不固定的編碼長度而且還可以再擴充 因此在未來 還可以一直加入更多位元的編碼方式 該指令集有特別留空間給128位元的延伸版本 因為60年的產業界經驗顯示在指令集設計領域裡 最無法復原的錯誤就是缺少記憶體定址空間 截至2016年 128位元的指令集仍然刻意地維持在沒有定義的狀態 這是因為到現在為止 人們很少有實際上操作這麼大記憶體的系統的經驗 12 然而 RISC V也可以拿來做學術上的使用 它擁有簡化的整數指令子集允許學生拿來做基本的練習 而整數指令子集就是一個簡單的指令集架構 ISA 讓軟體可以控制研究上的機器 而不定長度的指令集架構也允許擴充功能來滿足研究或是學生練習上的需求 12 分割出來的特權指令集可以支援在不重新設計編譯器的情況下 進行作業系統方面的研究 13 RISC V的開放的智慧財產權允許相關的設計被發布 使用和修改 12 软件 编辑一個新的CPU指令集通常的問題是缺少CPU的硬體設計跟軟體的支援 在RISC V的網站有一個user mode指令集的規格 還有一個用來支援作業系統模式的優先指令集的初步規格 市面上已經有好幾個使用RISC V開源架構的CPU設計可以供參考 包括64 bit Berkeley Out of Order Machine BOOM 14 64 bit Rocket 15 柏克萊設計的五個32 bit Sodor CPU 3 Clifford Wolf 的 picorv32 Syntacore 的 scr1 蘇黎世聯邦理工學院 波隆納大學的 PULPino Riscy and Zero Riscy 16 以及很多其他的設計 使用三層指令分段的 Sodor CPU 是一個適合嵌入式設計的小型CPU Rocket可能適用在小型低功耗的個人電腦或其他個人裝置 BOOM 使用了大部分Rocket的架構 但是功能更加強大 適合個人電腦 伺服器或超級電腦 picorv 跟 scr1 都是使用Verilog 設計的 32位元 MCU 等級的 RV32IMC PULPino的核心使用了一個適合微控制器的簡單的 RV32IMC ISA架構 Zero Riscy 以及另外一個更強大的DSP版本 RV32IMFC ISA 可以支援一些嵌入式信號處理的特別 DSP 指令集 設計軟體包括了一個設計編譯器 Chisel 它可把設計編譯成Verilog代碼 網站上還有測試用的參考資料可以用來驗證設計的正確性 RISC V目前提供的軟體有 GNU Compiler Collection GCC toolchain 具有偵錯器 GDB 一套 LLVM toolchain OVPsim模擬器 以及RISC V快速處理器模式的軟體參考庫 Spike 模擬器 以及一套在QEMU上運行的模擬器 作業系統的支援包括 Linux 核心 FreeBSD 以及 NetBSD 但是監督模式的指令在2016年11月10日還沒有標準化 13 所以這方面的支援還不是正式的 有一個早期的 RISC V 的FreeBSD 作業系統已經在2016年2月上傳到開放原始碼社群 而且包含在 FreeBSD 11 0 17 18 Debian 19 跟Fedora 20 的版本也有人在移植 並且在逐漸穩定中 已經有人做了1個 U Boot 的移植版本 21 UEFI Spec v2 7 定義了RISC V UFEI 的規格 而且惠普公司的工程師已經做好一個 TianoCore的移植版本 並且將會上傳到開放原始碼社群 已經有人做好了一個 L4 microkernel family 的移植 22 還有一個在網頁上用JavaScript寫的 RISC V Linux 系統模擬器 23 设计 编辑指令子集 编辑 RISC V 指令使用模塊化的設計 包括幾個可以互相替換的基本指令集 以及額外可以選擇的擴充指令集 所有基本跟擴充的指令集都是由科技產業 研究機構跟學術界合作開發的 基本指令集規範了指令跟他們的編碼 控制流程 暫存器數目 以及它們的長度 記憶體跟定址方式 邏輯 整數 運算以及其他 只要有軟體以及一個通用的編譯器的支援 只用基本指令集就可以製作一個簡單的通用型的電腦 標準的擴充指令集可以搭配所有的基本指令集以及其他擴充指令集 而不會發生衝突 很多 RISC V 電腦可能使用精簡擴充指令集來降低電力消耗 程式的大小以及記憶體的使用 未來也有計畫支援hypervisor和虛擬化 13 只要再加上一個監督指令集 S 的擴充 以及以下 RVGC 指令集 我們就有足夠的指令可以支援一個 Unix style 作業系統 指令集名稱 描述 版本 狀態 a 基本指令集RVWMO RISC V 弱內存模型 2 0 已批准RV32I 基本整數指令集 32位元 2 1 已批准RV32E 基本整數指令集 嵌入式系統 32位元 16 個暫存器 2 0 已批准RV64I 基本整數指令集 64位元 2 1 已批准RV64E 基本整數指令集 嵌入式系統 64位元 16 個暫存器 2 0 已批准RV128I 基本整數指令集 128位元 1 7 開放標準擴充指令集M 整數乘除法標準擴充 2 0 已批准A 不可中斷指令 Atomic 標準擴充 2 1 已批准F 單精度浮點標準擴充 2 2 已批准D 雙精度浮點標準擴充 2 2 已批准Zicsr 控制與狀態暫存器 2 0 已批准Zifencei 指令抓取屏障 2 0 已批准G 所有以上的擴充指令集以及基本指令集的總和的簡稱 不適用 不適用Q 四精度浮點標準擴充 2 2 已批准L 十進位浮點標準擴充 0 0 開放C 壓縮指令標準擴充 2 0 已批准B 位元運算標準擴充 1 0 已批准J 動態指令翻譯標準擴充 0 0 開放T 順序記憶體存取標準擴充 0 0 開放P 單指令多資料流 SIMD 運算標準擴充 0 9 10 開放V 向量運算標準擴充 1 0 凍結Zk 標量加密標準擴充 1 0 1 已批准H Hypervisor 標準擴充 1 0 已批准S Supervisor 標準擴充 1 12 已批准Zam 非對齊不可中斷指令標準擴充 0 1 開放Zihintpause 暫停提示 2 0 已批准Zihintntl 非時間局部性提示 0 2 開放Zfa 額外浮點運算指令標準擴充 0 1 開放Zfh 半精度浮點標準擴充 1 0 已批准Zfhmin 半精度浮點最小集標準擴充 1 0 已批准Zfinx 整數寄存器單精度浮點標準擴充 1 0 已批准Zdinx 整數寄存器雙精度浮點標準擴充 1 0 已批准Zhinx 整數寄存器半精度浮點標準擴充 1 0 已批准Zhinxmin 整數寄存器半精度浮點最小集標準擴充 1 0 已批准Zmmul 整數純乘法標準擴充 1 0 已批准Ztso 全存儲排序標準擴充 1 0 已批准 凍結狀態代表著他們已經有最終版本的指令集而且在正式發布前只會對原先的內容做澄清 為了分辨各種不同的指令組合 非特權指令集標準中訂定了一些專有名詞 首先先指明基本指令集的種類 包括表示 RISC V 的代號 RV 然後是暫存器的寬度跟其他變化 例如 RV64I 或 RV32E 然後用上表的字母 以及表列的順序 表示用了哪種擴充指令 例如 RV64IMAFD 基本指令集 擴充整數或浮點運算 多CPU系統使用的同步指令擴充 標準擴充指令MAFD被認為是大部分的一般運算都需要的 所以有一個字母的簡稱 G 用來表示 IMAFDZicsr Zifencei 使用嵌入式系統的一個小的32位元電腦可能用 RV32EC 而大型的64位元電腦可以用 RV64GC 即 RV64IMAFDCZicsr Zifencei 的簡稱 隨著擴充指令集數量的增加 指令集標準提供了另外一種命名方式 用 Z 字首緊接著字母名稱表示標準擴充 例如 Zifencei 表示指令抓取屏障擴充 寄存器集 编辑 RISC V 有 32 個整數暫存器 在嵌入式版本則是 16 個 當浮點延伸集被實作的時候 還有 32 個浮點暫存器 除了 記憶體存取指令 之外 一般指令 只能 定址暫存器而無法存取記憶體 如同有些 RISC 指令集 MIPS SPARC DEC Alpha 其中一個暫存器為 零暫存器 zero register 註 其值永遠為零 剩下的暫存器為通用暫存器 在 RISC 當中 第一個整數暫存器是零暫存器 儲存數值到零暫存器是沒有作用的 使用零暫存器可以讓指令集設計更簡單 比方說 把 暫存器 X 複製到暫存器 Y MOV Y X 可以使用 將暫存器 X 與 0 相加後 複製到暫存器 Y ADD Y X r0 實作 RISC V 有提供 控制暫存器 及 狀態暫存器 但是 user mode 程式只能存取用來 量測效能 及 浮點管理 的部分 RISC V 並沒有指令可以儲存和回復 save and restore 註 通常用於 context switch 中斷處理 或是函數呼叫 多個暫存器 這些設計在 RISC V 當中 被認為是不必要的 過於複雜的 可能過慢的設計 記憶體存取 编辑 就像許多的 RISC 一樣 RISC V 屬於載入 儲存架構 只有 load 與 store 指令可以存取記憶體 Load 和 Store 指令可以直接使用程式碼中的常數 在堆疊中的本地變數 或是資料結構中的內容 定址的方式是使用基底暫存器與 12 bit 的 signed 相對地址 2KB 如果基底暫存器是 0 則資料或是常數可以在低位址 或是高位址 負的相對地址 導致繞回到高的記憶體地址 比方說 ROM 的記憶體地址 記憶體的定址單位是 8 bit 的 byte 以 little endian 存放在記憶體 Load 與 Store 支援的資料長度從 8 bit 到電腦的 word 大小 記憶體存取並不需要對齊到 word 的大小 不過如果有對齊的話 可以增加效能 這項功能可以減小程式碼大小 而且透過軟體的模擬 還可以簡化硬體的設計 會觸發一個 對齊失敗 的中斷 和其他類似成功的電腦一樣 RISC V 也是 little endian 這稍稍降低了複雜度與成本 因為所有大小的讀取 都遵循一樣的順序 注 例如 64 bit 與 128 bit 的讀取 都是從最小的 word 開始讀進來 只要一直 shift 就可以了 舉例來說 RISC V 的指令集都是從最低的那個 byte 開始解碼 注 opcode RISC V 的規格書保留了實作 big endian 的可能性 如同許多的 RISC 指令集一樣 RISC V 並沒有可以 寫入多個暫存器 的定址模式 比方說 不支援 auto incrementing 像是 ptr 就無法使用一個指令完成 而必須拆解成 一個 load 指令 及 一個 addi 指令 RISC V 管理 CPU 與 thread 之間的共用記憶體的方式是確保在單一的 thread 當中 記憶體存取指令的執行順序永遠是遵照原本的編譯順序 不過在不同的 thread 以及在 I O 裝置之間 RISC V 不保證存取的順序 除非有像 FENCE 這樣的指令出現 FENCE 保證在其之前的執行結果 一定會被其後的 thread 或 I O 裝置看到 FENCE 有 8 bit 可以分別指定 memory read write 與 I O read write 的各種組合順序 透過這些組合 FENCE 可以保證記憶體與 memory mapped I O 之間的執行順序 比方說 其中一個組合是可以在不影響 I O 運算的情況下 只保證記憶體的讀取和寫入順序 也就是說 如果 I O 運算可以和記憶體同時執行的話 FENCE 不會強迫他們之間要互相等待 單一 CPU 上面跑單一 thread 的情況下 可以把 FENCE 視作 NOP 指令 有些 RISC CPUs 例如 MIPS PowerPC DLX and Berkeley s RISC I 在 Load Save 指令當中使用 16 bit 位移 使用 load upper word 指令來設定最高的 16 bit 這讓最高的 16 bit 資料可以很容易被設定 而不需要位移指令 然而 大部分使用 load upper word 的時機都是為了要載入一個常數 比如 地址 RISC V 則是使用類似 SPARC 12 bit 與 20 bit 的設計 而 RISC V 所採用的 12 bit 設計 可以讓指令更小 也就是說 這使得 32 bit 的 load store 指令 就算需要在 32 個暫存器 需要 5 bit 定址 當中選兩個來用 一共 10 bit 還是有足夠的 bit 數目來支援 RISC V 的可變長度指令編碼 variable length instruction coding 注 請參考 32 bit 的 I type 指令格式 就會發現這個 12 bit 位移比 16 bit 來得優異的地方 這使得 32 bit 的空間當中 扣掉 12 bit 的常數值 以及最低的兩個 bit 為 11 表示這是一個 32 bit 長的指令 再扣掉兩個 5 bit 的暫存器位址 還有將近 8 bit 的空間可以留給 opcode 及 func3 如果是使用 16 bit immediate 的話 會使得空間不夠放下兩個 5 bit 的暫存器位址 舉例來說 SLLI Rd Rs immediate Shift Left Logical Immediate 將會被迫拆解成兩個指令來完成 LDR Ri immediate SLLI Rd Rs Ri 立即數 编辑 RISC V 讀取 32 bit 常數與位址是透過設定 upper 20 bit 的指令達到的 LUI 指令 Load Upper Immediate 把 指令中的 20 bit 讀取到暫存器的 31 12 bits 當中 另一個 AUIPC 指令 也是一樣讀取 upper 20 bit 同時又加上 PC Program Counter 之後 存放到某個基底暫存器 這個指令讓 PIC 程式 Position Independent Code 能夠支援 相對於程式碼位置的 32 bit 地址 這個基底暫存器可以再搭配 12 bit 位移 使用在 Load 與 Store 指令當中 注 存取本地的 static 變數 如果需要的話 也可以使用 addi 指令 將 lower 12 bit 的常數加到一個暫存器中 注 這樣就完成一個完整的 32 bit 常數讀取 在 64 bit 架構下 LUI 與 AUIPC 執行的結果會被位元擴充至 64 bit sign extent 有些高速的 CPU 會把一些指令 融合 成一個指令 比如說 上述的 LUI 與 AUIPC 就很適合和 Load Save 指令一起融合 函數呼叫 跳躍和分支 编辑 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 的絕對位址 透過使用零暫存器 底下兩種無條件跳躍 其他組語中的 JUMP 或 JMP 20 bit PC 相對位址 以及 暫存器為底的 12 bit 分別使用 JAL 與 JALR 兩個指令來實作 在這個情況下 因為目的地暫存器是零存器 所以回傳位址會被丟棄 如同許多的 RISC 系統 在一個函數呼叫當中 RISC V 編譯器必須使用多個指令將暫存器一個一個地存到堆疊當中 然後在函數結束的時候 一個一個地將暫存器自堆疊中還原 RISC V 沒有 儲存多個 或是 還原多個 暫存器的指令 因為這些指令被認為會讓 CPU 變得複雜 而且可能更慢 51 然而 RISC V 的這種設計 會增加程式大小 而設計者原本是希望透過一種特別的 routine 來減小程式 注 可以參考 這份文件 页面存档备份 存于互联网档案馆 的 1 7 Optimizing Register Save Restore Code Size RISC V 沒有旗標暫存器 注 原文是 conditional code register 就是指傳統的旗標暫存器 flag register 用以存放計算結果 給接下來的指令使用 例如 進位旗標 carry flag 設計者相信旗標暫存器會讓 CPU 設計更加複雜 因為它必須強迫了指令們在不同的執行階段之間的交互作用 這樣的設計 會使得高精度計算變得更複雜 有些數值計算需要更多的能量 相反地 RISC V 直接比較兩個暫存器 運算元包括 相等 不相等 小於 無號數小於 大於 無號數大於 十個 比較跳躍 運算元 可以透過翻轉順序的方式 可以只用上述六個運算元實作出來 舉例來說 如果大於時跳躍 可以用 小於或等於時跳躍 來實作 這六個比較跳躍有 12 bit 的有號位移 可以跳到 PC 4KB 的範圍內 RISC V 要求 CPU 實作 預設分支預測 default branch prediction 如果是往回跳躍 例如 do while expr 中的 expr 判斷式 CPU 要預測跳躍會發生 也就是預測 expr 會 成立 如果是向前跳躍 例如 if expr else 中的 else 部分 CPU 預測這個跳躍會發生 也就是預測 expr 不會 成立 CPU 判斷往回或向前的方法 是看指令中相對位址的最高位元 也就是有號數的部分 signed bit 如果是 1 表示是負數 要往回跳躍 如果是 0 表示是正數 要向前跳躍 當然 複雜的 CPU 實作也可以加入更多的分支預測 RISC V 手冊也建議軟體 如 編譯器 利用預設分支預測的特性 來避免分支造成 pipeline 被停滯 方法就是利用上一段提到的 signed bit 來讓 暗示 CPU 這個分支會不會發生 所以 就是算是簡單又便宜的 CPU 也可以透過編譯器來優化效能 如果有需要 編譯器也可以透過統計等方式來優化效能 所以 為了避免不必要的分支預測電路 以及不必要的 pipeline 停滯 無條件跳躍不要用 比較分支 來實作 RISC V 並不支援 條件執行 指令 condition execution 註 當某個條件成立的時候 才執行該指令 設計者宣稱沒有這種設計的 CPU 比較容易設計 而且編譯器在進行優化的時候 也比較不容易假設錯誤 設計者宣稱高速又不照順序執行的 CPU 反正都會同時執行正反兩種結果 之後再丟棄其中一個 他們也宣稱 即使在簡單的 CPU 當中 條件執行其實是比較沒有價值的 不如跳躍預測來的有用 不使用條件執行的程式碼會比較大 但是他們宣稱壓縮指令集在大部分的情況下 可以解決這樣的問題 許多的 RISC 設計都有 分支延遲槽 branch delay slot 用來充份使用跳躍指令的下一個記憶體位址 這可以略略增加整體的 CPU 效能 RISC V 並不支援這個功能 因為他會讓多時序 超純量 以及 long pipeline 變得很複雜 而動態分支預測其實已經做得很好 可以不需要這個功能了 算术和逻辑集 编辑 RISC V 把數學運算指令歸類到一個很小的 I 子集當中 包括 加法 減法 位移 位元運算 及比較跳躍 這些可以使用軟體的方式去模擬其他大部分的 RISC V 指令 atomic 運算是值得一提的例外 RISC V 目前沒有 數開頭有幾個零 以及一些用來加速軟體浮點運算的位元運算 整數乘法子集 M 子集 包括 有號數與無號數的乘法與除法 浮點子集包括單精度運算 以及類似於整數的 比較跳躍 它需要額外的 32 個浮點暫存器 這些是與整數暫存器分開的 雙精度浮點子集一般假設浮點暫存器是 64 位元 而且會與 F 子集一起協作 RISC V 亦有定義四精度 128 bit 浮點指令 沒有支援硬體浮點指令的 CPU 依舊可以使用軟體的浮點程式庫 RISC V 在遇到運算錯誤的時候 並不會抛出异常 包括 overflow underflow subnormal 及 divide by zero 相反的 整數運算和浮點運算都會產生合理的預設數值 然後設定狀態位元 Divide by zero 可以用一個跳躍指令來處理 這些狀態位元可以也可以被作業系統或是定期的中斷檢查到 原子内存操作 编辑 RISC V 支援多個 CPU 與 thread 其標準記憶體同步模式是 釋放一致 原則 也就是說 讀取和寫入順序可以重排 但是有些讀取可以被設定成 獲取 運算 會在其後的存取之前被執行 有些寫入可以被當作 釋放 運算 必須在其之前的存取的後面執行 基本指令當中包含了最少的支援 使用 fence 指令來保證記憶體存取順序 儘管這很簡單 fence r rw 提供 獲取 fence rw w 提供 釋放 組合起來還是可以很有效率 RISC V处理器 编辑商業實現 编辑 阿里巴巴玄铁910 编辑 玄铁 C910 微架構 阿里巴巴旗下半导体公司平头哥发布了它的首款 RISC V 处理器 玄铁 910 XuanTie910 名字取自金庸小说 神雕侠侣 阿里巴巴称它是目前性能最强的 RISC V 处理器 支持16核 主频 2 5GHz 单核性能达到 7 1 Coremark MHz 阿里巴巴称其性能突破源自两大创新 一是它采用3发射8执行的复杂乱序执行架构 是业界首个实现每周期 2 条内存访问的 RISC V 处理器 二是它基于 RISC V 扩展了 50 余条指令 系统性增强了 RISC V 的计算 存储和多核等方面能力 24 2021年平头哥半导体釋出玄铁C910處理器開源項目 25 同時還發布出C910的LLVM编译器源代碼 26 SiFive公司的RISC V半導體IP核系列 编辑 RISC V創始人所創辦的SiFive公司提供一系列RISC V半導體IP核 包含高性能 高效能 低功耗及嵌入式RISC V处理器 27 開源實現 编辑 中國科學院 香山 编辑 中國科學院計算所在2020年釋出 香山 高性能RISC V處理器開源項目 香山以Chisel硬件描述语言開發 28 29 第一版 雁栖湖架構 使用台積電的28nm製程 工作頻率為1 3GHz 30 威騰電子 SweRV 编辑 威騰電子在2018年釋出SweRV RISC V處理器開源項目 31 SweRV 目標應用環境為储存装置控制器 從開源以來已有多家廠商采用 32 参见 编辑精簡指令集 RISC OpenRISC 以GNU General Public License授权 OVPsim RISC V处理器指令子集 内核和系统的指令精确模拟器 免费为非商业用途提供 ARM架構 开源运算硬件列表 英语 List of open source computing hardware 参考资料 编辑 RISC V讀卡器 開放式架構地圖集第1期 1st Strawberry Canyon ISBN 978 0999249109 2 0 2 1 2 2 2 3 新浪 图灵奖得主加入清華 牵头推动芯片开源 3 0 3 1 Celio Christopher ucb bar riscv sodor Regents of the University of California 12 February 2015 原始内容存档于2018 06 11 Celio Christopher CS 152 Laboratory Exercise 3 PDF Regents of the University of California 12 February 2015 原始内容 PDF 存档于2016 06 23 詳細了解ARM許可芯片的方法 第1部分 SemiAccurate 2013 2017 08 28 原始内容存档于2017 08 24 精簡指令集計算機的案例 ACM SIGARCH計算機體系結構新聞 1980年10月 8 6 25 doi 10 1145 641914 641917 RSIC V開源CPU殺出 2019 06 15 原始内容存档于2018 11 21 https riscv org members 2021 05 01 原始内容存档于2021 04 26 缺少或 title 为空 帮助 U S based chip tech group moving to Switzerland over trade curb fears Reuters 2019 11 26 2019 11 26 原始内容存档于2022 04 28 英语 RISC V History RISC V International RISC V International 2020 05 14 原始内容存档于2020 04 15 11 0 11 1 Krste Asanovic David A Patterson Instruction Sets Should Be Free The Case For RISC V PDF U C Berkeley Technical Reports 2018 10 31 原始内容存档 PDF 于2019 04 23 12 0 12 1 12 2 12 3 Waterman Andrew Asanovic Krste The RISC V Instruction Set Manual Volume I Base User Level ISA version 2 2 University of California Berkeley 25 May 2017 EECS 2016 118 原始内容存档于2017 08 28 13 0 13 1 13 2 Waterman Andrew Lee Yunsup Avizienas Rimas Patterson David Asanovic Krste Draft Privileged ISA Specification 1 9 RISC V RISC V Foundation 30 August 2016 原始内容存档于2018 08 26 Celio Christopher riscv boom GitHub Regents of the University of California 11 November 2016 原始内容存档于2018 06 11 Asanovic Krste et al rocket chip GitHub The RISC V Foundation 11 November 2016 原始内容存档于2015 04 03 Traber Andreas et al PULP Parallel Ultra Low Power ETH Zurich University of Bologna 5 August 2016 原始内容存档于2023 01 21 FreeBSD Wiki RISC V 2018 11 11 原始内容存档于2018 08 25 FreeBSD Foundation Initial FreeBSD RISC V Architecture Port Committed 2018 11 11 原始内容存档于2018 04 04 Montezelo Manuel Debian GNU Linux port for RISC V 64 Google Groups Google 19 July 2018 原始内容存档于2018 11 12 Architectures RISC V Fedora WIKI Red Hat 26 September 2016 原始内容存档于2021 01 24 Begari Padmarao U Boot port on RISC V 32 bit is available Google Groups Microsemi 15 February 2017 原始内容存档于2018 11 12 Almatary Hesham RISC V seL4 seL4 Documentation CSIRO 13 July 2018 原始内容存档于2023 01 18 riscv angel The RISC V Foundation 2018 11 11 原始内容存档于2018 11 11 阿里巴巴发布首款 RISC V 处理器 科技行者 2019 07 25 原始内容存档于2019 07 25 openc910 Github 2023 01 10 原始内容存档于2023 01 10 c910 llvm Github 2023 01 10 原始内容存档于2023 01 10 RISC V Portfolio SiFive Processors SiFive 2023 01 04 原始内容存档于2023 01 08 香山開源項目 2021 07 06 原始内容存档于2021 07 24 Chinese chip designers hope to topple Arm s Cortex A76 with XiangShan RISC V design 2021 07 06 原始内容存档于2021 07 23 香山 开源高性能RISC V处理器 PDF 2022 05 16 原始内容 PDF 存档于2021 07 06 Cores SweRV 開源項目 2021 09 25 原始内容存档于2022 05 07 RISC V And Marvell Technologies Advances Enable Storage Solutions 2021 09 25 原始内容存档于2021 09 25 拓展阅读 编辑The RISC V Instruction Set Manual 页面存档备份 存于互联网档案馆 Instruction Sets Should Be Free The Case For RISC V 页面存档备份 存于互联网档案馆 Whitepaper by Krste Asanovic and David A Patterson The RISC V Instruction Set 页面存档备份 存于互联网档案馆 HotChips 25 2013 The RISC V Software Ecosystem 页面存档备份 存于互联网档案馆 HPCA 2015 Tutorial Rocket Chip 页面存档备份 存于互联网档案馆 HPCA 2015 Tutorial The RISC V Compressed Instruction Set Manual Version 1 9 draft 页面存档备份 存于互联网档案馆 外部链接 编辑官方网站 GitHub上的UCB s site for RISC V RISC V An Open Standard for SoCs The case for an open ISA EETimes 8 July 2014 2017 08 28 原始内容存档于2017 08 24 Pulpino A developed open source system on chip based on RISC V 4 August 2016 Hruska Joel RISC rides again New RISC V architecture hopes to battle ARM and x86 by being totally open source ExtremeTech 21 August 2014 2017 08 28 原始内容存档于2017 08 24 Analyzing the RISC V Instruction Set Architecture Adapteva 11 August 2014 2017 08 28 原始内容存档于2017 08 04 YouTube上的RISC V 頻道 search RISC V since 2013 Google Scholar 失效連結 取自 https zh wikipedia org w index php title RISC V amp oldid 76356700, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。