RISC-V

**RISC-V**（發音為「risk-five」）係一個開放標準嘅指令集架構（ISA），基於已建立嘅精簡指令集電腦（RISC）原則。唔同於大多數其他ISA設計，RISC-V係以免版稅嘅開源許可證提供。好多公司而家提供或已經宣布咗RISC-V硬件；有開源操作系統支援RISC-V，並且呢個指令集喺幾個受歡迎嘅軟件工具鏈中都得到支援。

呢個項目喺2010年喺加州大學柏克萊分校開始，依家已經有超過70個國家嘅成員參與同埋協作，定義RISC-V開放規範。管理RISC-V嘅非牟利機構RISC-V International，宜家總部喺瑞士。

佢嘅授權係根據BSD許可證。

## 概覽
作為一種 RISC 架構，RISC-V ISA 係一種 load–store 架構。佢嘅浮點指令使用 IEEE 754 浮點數。RISC-V ISA 嘅顯著特徵包括：指令位元欄位位置嘅選擇旨在簡化 CPU 中 多路選擇器 嘅使用， 一個建築上中立嘅設計， 同埋一個固定位置嘅符號位畀 immediate values 以加快 sign extension 嘅速度。

呢個指令集設計用於廣泛嘅用途。基礎指令集有一個固定長度嘅 32-bit 自然對齊指令，並且 ISA 支援變長擴展，每條指令可以係任意數量嘅 16-bit 分段長度。 擴展支援小型 embedded systems、personal computers、帶有向量處理器嘅 supercomputers 同埋倉庫規模嘅 平行電腦。

指令集規範定義咗 32-bit 同 64-bit address space 變體。規範包括一個 128-bit 扁平地址空間變體嘅描述，作為 32-bit 同 64-bit 變體嘅外推，但 128-bit ISA 仍然係「未凍結」嘅，因為 ，對於咁大記憶體系統仍然冇太多實際經驗。

唔似其他學術設計通常只係為咗簡化說明而優化，設計者希望 RISC-V 指令集可以用於實際電腦。截至 2019 年 6 月，用戶空間 ISA 嘅第 2.2 版 同埋特權 ISA 嘅第 1.11 版 係 凍結 住，允許軟件同硬件開發繼續進行。用戶空間 ISA，依家改名為 Unprivileged ISA，已經更新、批准同埋凍結為 20191213 版。 一個外部調試規範係草案版本 0.13.2。

## 沿革
「RISC」呢個詞大約係1980年出現嘅。 喺嗰陣之前，雖然有啲人知道（睇下John Cocke）簡單啲嘅電腦可以好有效，但係呢啲設計原則仲未被廣泛描述。簡單而有效嘅電腦一直都係學術界嘅興趣所在，亦導致咗1990年首次出版嘅《Computer Architecture: A Quantitative Approach》當中嘅RISC指令集DLX，而David Patterson就係呢本書嘅共同作者之一，佢後嚟仲參與咗RISC-V嘅創立。DLX係為教育用途設計嘅；學術界同業餘愛好者曾經用可程式化邏輯閘陣列（FPGA）嚟實現，但係佢唔係真係用嚟商業部署嘅。ARM嘅CPU，第二代及以前版本，有一套公開嘅指令集，而家仲受到GNU編譯器集合（GCC），一個受歡迎嘅自由軟件編譯器嘅支持。雖然有三個開源核心支持呢個ISA，但係佢哋從未被製造過。 OpenRISC係一個基於DLX嘅開源ISA，並且有相關嘅RISC設計，亦全面支持GCC同Linux實現，不過商業應用嘅情況亦唔多。

柏克萊加州大學嘅Krste Asanović有個研究需求，想要一個開源嘅電腦系統，於是佢喺2010年決定同幾個研究生喺暑假做一個「短短三個月嘅項目」，開發並公開呢個系統，目標係幫助學術界同工業用戶。 David Patterson亦有參與合作，因為佢係柏克萊RISC嘅創始人，而RISC-V就係佢一系列喺柏克萊加州大學進行嘅合作RISC項目嘅第五代研究（RISC-I同RISC-II係Patterson於1981年發表嘅，佢仲提到 1984年嘅SOAR架構係「RISC-III」，以及1988年嘅SPUR架構係「RISC-IV」）。呢個階段，學生提供咗初步嘅軟件、模擬同CPU設計。

RISC-V嘅作者同佢哋嘅機構最初將ISA文件同幾個CPU設計以BSD许可证發佈，呢啲許可證容許衍生作品（例如RISC-V嘅芯片設計）可以開放免費，或者閉源專有。ISA規範（即指令集嘅編碼）本身喺2011年以開源形式發佈，並且保留咗所有權利。後來，規範嘅技術報告（即規範嘅表達）被置於創作共用許可證下，咁樣容許外部貢獻者通過RISC-V Foundation進行改進，後嚟成為咗RISC-V International。

RISC-V嘅完整歷史已經喺RISC-V International嘅網站上發表。

### RISC-V Foundation同RISC-V International
商業用戶需要ISA穩定，先至可以喺產品中使用，因為呢啲產品可能會維持好多年。為咗解決呢個問題，RISC-V Foundation喺2015年成立，專門負責擁有、維護及發佈與RISC-V定義相關嘅知識產權。 原創作者同擁有者已經將佢哋嘅權利讓渡咗俾呢個基金會。 Calista Redmond係基金會嘅CEO，佢喺2019年加入呢個職位，之前曾經喺IBM領導過開放基礎設施項目。

RISC-V 嘅創辦成員包括：Andes、Antmicro、Bluespec、CEVA、Codasip、Cortus、Esperanto、Espressif、ETH Zurich、Google、IBM、ICT、IIT Madras、Lattice、lowRISC、Microchip、MIT（Csail）、Qualcomm、Rambus、Rumble、SiFive、Syntacore 同埋 Technolution。

喺2019年11月，RISC-V 基金會宣佈佢將會遷移到瑞士，原因係美國貿易法規嘅憂慮。 去到2020年3月，呢個組織改名為 RISC-V International，一間瑞士嘅非牟利商業協會。

到咗2019年，RISC-V International 自由出版 RISC-V 嘅定義文件，並且允許無限制地使用呢個指令集架構（ISA）嚟設計軟件同硬件。不過，只有 RISC-V International 嘅會員先至可以投票通過變更，而只有會員機構先可以用嗰個已註冊嘅兼容標誌。

### 獎項
* 2017年：The Linley Group 頒發嘅分析師選擇獎，獎項為最佳技術（針對呢個指令集）

## 原則

CPU 設計 需要喺幾個專業領域有設計專長：電子 數碼邏輯、compilers 同 operating systems。為咗支付呢啲團隊嘅成本，商業處理器知識產權 (IP) 嘅供應商，如 Arm Ltd. 同 MIPS Technologies，會收取 版稅 作為佢哋設計、patents 同 copyrights 嘅使用費。 佢哋通常都會要求 non-disclosure agreements 先至會發放描述佢哋設計詳細優勢嘅文件。好多時候，佢哋都唔會解釋佢哋設計選擇嘅原因。

RISC-V 嘅啟始目標係建立一個實用嘅 ISA，係開放源碼、可供學術用途，並且可以喺任何硬件或軟件設計中使用而無需版稅。 同時，項目中每個設計決策嘅理由都會解釋，至少係大致上。RISC-V 嘅作者係有豐富電腦設計經驗嘅學者，RISC-V ISA 係由一系列學術電腦設計項目直接發展出嚟，特別係 Berkeley RISC。RISC-V 部分係為咗協助所有呢啲項目。

為咗建立一個龐大且持續嘅用戶社區，從而積累設計同軟件，RISC-V ISA 設計者故意支援廣泛嘅實際應用場景：緊湊、性能同低功耗嘅實際實現 而唔會過度設計某個 microarchitecture。 大量貢獻者嘅要求係 RISC-V 被設計為解決多種可能用途嘅其中一個原因。

設計者嘅主要主張係指令集係電腦中嘅關鍵介面，因為佢位於硬件同軟件之間嘅介面。如果一個優秀嘅指令集係開放同可供所有人使用，咁就可以大幅度減少軟件成本，因為可以大大增加重用率。佢仲應該能夠促使硬件供應商之間嘅競爭，咁佢哋可以將更多資源投入設計，而唔係軟件支持。

設計者認為，新嘅原則喺指令集設計中變得越來越少，因為過去四十年中最成功嘅設計變得越來越相似。當中失敗嘅，大部分係因為贊助公司財政失敗，而唔係因為指令集技術差。因此，一個使用成熟原則設計嘅開放指令集應該能夠吸引長期支持。

RISC-V 亦鼓勵學術用途。整數子集嘅簡單性容許基本嘅學生練習，並且係一個簡單到可以讓軟件控制研究機械嘅 ISA。變長 ISA 提供咗擴展指令集嘅空間，畀學生練習同研究， 而分開嘅特權指令集允許研究操作系統支持而唔需要重新設計編譯器。 RISC-V 嘅開放知識產權模式允許衍生設計被發表、重用同修改。

## 設計
RISC-V 有一個模組化嘅設計，包含咗可選擇嘅基礎部分，並且可以加上可選擇嘅擴展功能。呢個 ISA 基礎同埋佢嘅擴展係由業界、研究界同教育機構集體努力開發出嚟嘅。基礎部分包含指令（同埋佢哋嘅編碼）、控制流程、寄存器（同埋佢哋嘅大小）、記憶體同埋地址、邏輯操作（即係整數操作）同其他附加功能。單係基礎部分已經可以實現一個簡化嘅通用計算機，連埋全套軟件支持，包括一個通用嘅編譯器。

標準擴展設計嚟同所有標準基礎兼容，並且相互之間冇衝突。

好多 RISC-V 計算機會實施壓縮指令嘅擴展，以減少電力消耗、代碼大小同埋記憶體使用。 同時未來亦都有計劃支持hypervisor同virtualization。

同 Supervisor 擴展（S）一齊，加埋一個包含 RV 基礎指令集嘅 RVGC 指令集，G 擴展集合（包括 "I"，意味著基礎部分係非嵌入式），同埋 C 擴展，呢個組合可以支持一個通用嘅操作系統所需嘅所有指令。

為咗控制可以實現嘅函數組合，喺目前已批準嘅非特權指令集架構規範嘅第27章定義咗一套命名法嚟指定呢啲組合。首先要指定指令集基礎，編碼表示 RISC-V、暫存器位寬同變體；例如， 或者 。然後跟住嘅字母表示已實現嘅擴展，順序同上面個表一致。每個字母後面可以跟住一個主版本號，再可以選擇加上 "p" 同次版本號。如果冇寫次版本號，默認係 0；如果完全冇寫版本號，就默認係 1.0。所以  可以寫成  或者更簡單啲寫成 。為咗方便閱讀，可以喺擴展之間加下劃線，例如 。

基礎、擴展整數同浮點運算，加上多核運算嘅同步原語，都係通用運算所需要嘅，所以我哋有個簡寫叫做 "G"。

一個細細嘅 32 位元嵌入式系統電腦可能係 。一部大型嘅 64 位元電腦可能係 ；即係 。

隨住擴展數量嘅增加，而家嘅標準容許用單個 "Z" 加上一個字母名稱同可選嘅版本號嚟命名擴展。例如， 係指令讀取擴展嘅名稱。 同  係同一擴展嘅 2.0 版本。按照慣例，"Z" 後面嘅第一個字母表示同佢最相關嘅字母擴展類別，即 。所以 Zam 擴展（用於非對齊原子操作）就同 "A" 標準擴展有關。同單字符擴展唔同，Z 擴展之間必須用下劃線分隔，先按類別分組，然後喺每個類別內按字母順序排列。例如，。

特定於監管者權限級別嘅擴展以同樣嘅方式命名，但係用 "S" 作為前綴。特定於虛擬機監控器級別嘅擴展用 "H" 作為前綴。機器級別嘅擴展用 "Zxm" 三個字母作為前綴。監管者、虛擬機監控器同機器級別嘅指令集擴展係喺較低權限嘅擴展之後命名。

RISC-V 開發者可以創建佢哋自己嘅非標準指令集擴展。呢啲擴展都遵循 "Z" 嘅命名慣例，但係用 "X" 作為前綴。佢哋應該喺所有標準擴展之後指定，如果列出多個非標準擴展，就應該按字母順序列出。

## 軟件
對於一個新嘅指令集，常見嘅問題係缺乏 CPU 設計同埋軟件——呢啲問題都限制咗佢嘅可用性同埋減少咗採用率。 RISC-V 擁有大量嘅 CPU 設計。RISC-V 軟件包括工具鏈、作業系統、middleware 同設計軟件。

可用嘅 RISC-V 軟件工具包括 GNU Compiler Collection (GCC) 工具鏈（包括 GDB 調試器）、LLVM 工具鏈、OVPsim 模擬器（同埋 RISC-V 快速處理器模型庫）、Spike 模擬器同埋 QEMU 嘅模擬器（RV32GC/RV64GC）。JEP 422: Linux/RISC-V Port 已經整合入主線 OpenJDK 倉庫。Java 21+ Temurin OpenJDK 嘅 RISC-V 版本可以喺 Adoptium 搵到。

作業系統支持包括 Linux 核心、FreeBSD、NetBSD 同 OpenBSD，但係喺特權模式指令喺版本 1.11 之前嘅 ISA 規範中未標準化， 所以呢啲支持係臨時嘅。FreeBSD 嘅 RISC-V 初步端口喺 2016 年 2 月 upstream，並且喺 FreeBSD 11.0 發行。 Debian 同 Fedora Linux 發行版 同 Haiku 嘅端口都喺穩定中（全部只支持 64 位 RISC-V，無計劃支持 32 位版本）。Das U-Boot 嘅端口亦存在。 UEFI Spec v2.7 已經定義咗 RISC-V 嘅綁定，TianoCore 嘅端口由 HPE 工程師完成 同預期會被 upstream。初步端口嘅 seL4 微內核 亦存在。 Hex Five 發佈咗首個支持 FreeRTOS 嘅安全 IoT 堆棧。 同時 xv6，一個用於教學目的嘅現代 第六版 Unix 重新實現，亦已經被端口化。Pharos RTOS 已經被端口化到 64 位 RISC-V（包括時間同記憶體保護）。*另見* Comparison of real-time operating systems。

有一個模擬器可以用 JavaScript 喺 web browser 上運行 RISC-V Linux 系統。

QEMU 支援運行（使用 binary translation）32 位同 64 位 RISC-V 系統（例如 Linux），並有多個模擬或虛擬設備（串行、並行、USB、網絡、存儲、實時時鐘、看門狗、音頻），以及運行 RISC-V Linux 二進制文件（將系統調用轉換到主機內核）。佢支援多核心模擬（SMP）。

Creator 模擬器係可攜式嘅，容許用戶學習唔同處理器嘅各種組合語言（Creator 有 RISC-V 同 MIPS32 指令嘅實例）。

可擴展嘅教育模擬器 WepSIM 實現咗 RISC-V 指令（RV32I+M）嘅（微程序化）子集，並允許執行 https://wepsim.github.io/wepsim/ws_dist/wepsim-classic.html?mode=ep&examples_set=Default-RISCV&example=9&simulator=assembly:registers&notify=false 嘅組合語言子程序。

幾種語言已經用來創建 RISC-V IP 核，包括基於 Scala 嘅硬件描述語言 Chisel，呢個語言可以將設計縮減為 Verilog 以用於設備，以及 CodAL 處理器描述語言，呢個語言已經用來描述 RISC-V 處理器核心同產生相應嘅 HDK（RTL、測試平台同 UVM）同 SDK。 RISC-V International Compliance Task Group 有一個 GitHub 倉庫用於 RV32IMC。

## 參考