Skip to content
guangbo1110105228 edited this page Jan 6, 2023 · 9 revisions

RISC-V

1. 簡介

RISC-V是一個基於精簡指令集(RISC)原則的開源指令集架構,簡易解釋為開源軟體運動相對應的一種「開源硬體」。 與大多數指令集相比,RISC-V指令集可以自由地用於任何目的,允許任何人設計、製造和銷售RISC-V晶片和軟體而不必支付給任何公司專利費。雖然這不是第一個開源指令集,但它具有重要意義,因為其設計使其適用於現代計算裝置(如倉庫規模雲端運算機、高階行動電話和微小嵌入式系統。設計者考慮到了這些用途中的效能與功率效率。該指令集還具有眾多支援的軟體,這解決了新指令集通常的弱點。RISC-V指令集的設計考慮了小型、快速、低功耗的現實情況來實做。

2. 軟體

一個新的CPU指令集通常的問題是缺少CPU的硬體設計跟軟體的支援。在RISC-V的網站有一個user mode指令集的規格,還有一個用來支援作業系統模式的優先指令集的初步規格。 RISC-V目前提供的軟體有(GCC)具有偵錯器 toolchain (具有偵錯器 GDB)、一套 LLVMtoolchain、OVPsim模擬器(以及RISC-V快速處理器模式的軟體參考庫)、Spike 模擬器,以及一套在QEMU上運行的模擬器。 作業系統的支援包括 [Linux] 核心、[FreeBSD], 以及 [NetBSD],但是監督模式的指令在2016年11月10日還沒有標準化,所以這方面的支援還不是正式的。

3. RISC-V 指令集

RISC-V 指令使用模組化的設計,包括幾個可以互相替換的基本指令集,以及額外可以選擇的擴充指令集,只要有軟體以及一個通用的編譯器的支援,只用基本指令集就可以製作一個簡單的通用型的電腦。標準的擴充指令集可以搭配所有的基本指令集以及其他擴充指令集,而不會發生衝突。 很多 RISC-V 電腦可能使用精簡擴充指令集來降低電力消耗、程式的大小以及記憶體的使用。 常見的 RISC-V 指令集: RV32I:基础整数指令集 (固定不變了) RV32M:乘法和除法 RV32F:單精度浮点操作(和 RV32D:雙精度浮點操作) RV32A:原子操作 RV32C:可选的压缩扩展 (對應 32 位元的 RV32G) RV32B:基本擴展。 RV32V:向量扩展(SIMD)指令 RV64G:RISC-V 的 64 位地址版本。 RV32I 是必備的指令集,其指令與格式如下所式:

計算1 RISC-V 的指令格式共有六種,如下圖所示:

5 RV32M 的乘除法指令格式如下,由於兩個 32 位元整數相乘可能會變成 64 位元整數,因此會有超過 32 位元的高半部,所以有號數的乘法也分為 MUL, MULH 這兩種,其中 MULH 的結果為高半部,放入 rd 暫存器中。 6 另外、無號數的乘除法指令,最後會以 U 結尾,其中的 REM 代表取餘數 (Remainder)。

4. 暫存器集

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

2

除了這些基本暫存器之外,RISC-V 還定義一群控制暫存器 CSR (Control Status Registers),以下是已經固定下來的 CSR 暫存器。

5. 壓縮指令集

讓 RISC-V 處理器具有商業競爭力,所以指令集支援了壓縮模式 RV32C,其中很多指令都可以被壓縮表達為 16 位元模式,只要最低的兩個位元 aa 不是 11,那麼就是壓縮的 16 位元指令。 7

6.浮點指令集

浮點指令分為單精度 float (32 位元浮點數) 與雙精度 double (64 位元浮點數) 指令。 以下是單精度浮點指令 RV32F 的格式表。 image 雙精度 RV32D 的格式類似,如下表所示。 image

7.原子指令集

作業系統為了讓 thread 或 process 能共享變數卻不會產生《競爭情況》,必須創造出同步鎖定 (lock) 之類的運算,此時需要 RV32A《原子指令集》的支援,其指令格式如下。 image

8. 64 位元指令集

image

9.假指令

由於 RISC-V 的指令集相當精簡,因此其他處理器上具備的指令,在 RISC-V 不見得有對應的指令。 不過我們可以透過某些技巧,創造出對應的《假指令》,讓 RISC-V 的組合語言裡也能寫出這些指令。 image image image

10. CPU 指令集可以被簡單分類在 RISC 和 CISC 中,像是 RISC-V、MIPS、Arm 架構屬於 RISC,x86 屬於CISC。RISC 指令集中的指令數量不多,功能也不多,所以需要較多指令才能相同的工作;CISC 則相反,他指令數量超多,功能超多,很多時候只要一行指令就可以完成需要的功能。詳細比較如下:

image 因為兩者各有優缺點,根據不同的應用我們會需要不同的 CPU 架構:CISC 功能強大,適合高性能但同時高功耗的 CPU 架構,像是 Intel x86 ;RISC 架構簡單,適合需要面積與功耗較小的行動裝置,所以像是手機裡的 Arm 晶片就是屬於 RISC 架構的一種。

RISC-V優點:

  1. RISC 架構簡單,因此面積小且功耗低。 因為硬體每個功能都需要事先寫好刻成一個電路,所以指令格式愈一致,需要的電路就愈簡單,面積也就愈小,功耗也會愈低,且資料從進去 CPU 到出來的時間也會較短,所以每秒可以做的運算也愈多。
  2. 容易取得資源,不像 x86 受制於所屬公司知識產權的控制,因此不需授權費用,成本較低。
  3. 這是 RISC-V 與 Arm 的最大差別,它預留了客製指令的擴充空間(custom instructions),可以根據不同需求做出相對應設計。這點在 x86 和 Arm 處理器中幾乎做不到,如果需要加強某些特定的功能,價格也會隨之上升。

參考網址: