RISC-V基本介绍
文章目錄
- 前言
- 一、命名規范
- 二、模塊化ISA
- 三、一些概念
- 1. 指令格式
- 2. 寄存器
- 3. 特權級別
- 4. CSR(控制和狀態寄存器)
- 四、學習資料
- 1. 官方資料
- 2. 開發參考
- 總結
前言
RISC-V作為目前大火的開源指令集架構有著自己的獨特魅力,本文將對其基本情況進行介紹,給大家留一個初步印象。
關于指令集的概念大家可以參看:什么是指令集架構ISA【從處理器談起】
RISC-V念作 “risk-five”,代表著 Berkeley 所研發的第五代精簡指令集。它是一款高質量、免許可證、開放的RISC ISA(指令集架構),是一套由RISC-V基金會維護的標準,適用于所有類型的計算系統。開源的RISC-V打破了ARM、x86架構的技術壁壘,便于開發者進行開發,目前國內外都在流行該架構。
一、命名規范
我們在實現基于RISCV架構的處理器時,根據應用場景的需要我們可以選擇只實現架構中的部分指令,或者對于處理器的位寬有不同的選擇。我們需要根據一些命名規范來對選擇的RISCV子架構進行命名。以方便讓用戶馬上了解這款處理器是基于怎樣的子架構開發的。
RISCV ISA 命名格式:RV[###][abc……xyz]
- RV:用于標識 RISC-V 體系架構的前綴,即 RISC-V的縮寫。
- [###]:{32, 64, 128} 用于標識處理器的位寬,也就是處理器的寄存器的寬度(單位為 bit)
- [abc…xyz]:標識該處理器支持的指令集模塊集合。(指令模塊的含義在下面會介紹)
如RV32IMA,RV64GC。
二、模塊化ISA
RISC-V采用模塊化的指令集,易于擴展、組裝。
RISCV ISA = 1 個基本整數指令集(I) + 多個可選的擴展指令集
其中唯一強制要求實現的基礎指令集,其他指令集都是可選的擴展模塊。RISC-V 允許在實現中以可選的形式實現其他標準化和非標準化的指令集擴展。
RISC-V指令集模塊包括
【注:特定組合“IMAFD”被稱為 “通用(General)”組合,用英文字母 G 表示】
其他的擴展指令集還包括“B”標準擴展:位操作、“E”標準擴展:嵌入式、“H”特權態架構擴展:支持管理程序(Hypervisor)、“J”標準擴展:動態翻譯語言、“L”標準擴展:十進制浮點、“N”標準擴展:用戶態中斷、“P”標準擴展:封裝的單指令多數據(Packed-SIMD)指令、“Q”標準擴展:四精度浮點。
RV32I指令集有47條指令,能夠滿足現代操作系統運行的基本要求,47條指令按照功能可以分為如下幾類。
- 整數運算指令:實現算術、邏輯、比較等運算。
- 分支轉移指令:實現條件轉移、無條件轉移等運算,并且沒有延遲槽。
- 加載存儲指令:實現字節、半字、字的加載、存儲操作,采用的都是寄存器相對尋址方式。
- 控制與狀態寄存器訪問指令:實現對系統控制與狀態寄存器的原子讀-寫、原子讀-修改、原子讀-清零等操作。
- 系統調用指令:實現系統調用、調試等功能。
三、一些概念
1. 指令格式
RISC-V具有非常工整的指令格式,所有基礎指令的格式可以分為以下四種,指令長度為32位,在“C”標準擴展中,指令長度被壓縮到16位:
規整的指令格式有利于處理器中的控制器對于二進制指令的解碼。符合“越規整,越簡單”的設計理念。
還有兩種特殊的指令格式:SB型和UJ型,兩種格式都只包含一條指令。
具體基本的RISCV的匯編語言和機器語言的對應表如下所示:
2. 寄存器
RISC-V 的 Unprivileged Specification 定義了 32 個通用寄存器以及一個 PC
-
對RV32I/RV64I/RV128I都一樣
-
如果實現支持 F/D 擴展則需要額外支持 32個浮點(Float
Point)寄存器。 -
RV32E(E表示嵌入式系統)將32個通用寄存器縮減為16個。
每個寄存器具體編程時有特定的用途以及各自的別名,如下表:
3. 特權級別
RISC-V 的 Privileged Specification 定義了四個特權級別(privilege level),以下特權等級由高到低排列。
機器級別(M):RISC-V中hart(hardware thread,硬件線程,hart相當于核)可以執行的最高權限模式。在M模式下運行的hart對內存,I/O和一些對于啟動和配置系統來說必要的底層功能有著完全的使用權。因此它是唯一所有標準RISC-V
處理器都必須實現的權限模式。實際上普通的RISC-V微控制器僅支持M模式。
超級監管者級別(H):為了支持虛擬機監視器。
監管者級別(S):旨在支持現代類Unix操作系統,如Linux,FreeBSD和Windows。
用戶級別(U):用于運行應用程序,適用于安全嵌入式系統。
任何時候,一個RISC-V硬件線程(hart)是運行在某個特權級上的,這個特權級由CSR(control and status register,控制和狀態寄存器)配置。
4. CSR(控制和狀態寄存器)
不同的特權級別下時分別對應各自的一套Registers(CSR),用于控制和獲取相應特權級別下的處理器工作狀態。在高級別的特權級別下,可以訪問低級別的CSR,譬如Machine Level下可以訪問Supervisor/User Level的CSR;但反之不可以。
標準RISC-V ISA設置了一個12位的編碼空間(csr[11:0])作為CSR地址,可用于4096個CSR。根據約定,CSR地址的高4位(csr[11:8])用于編碼CSR根據特權級讀寫的可訪問性。其中最高2位(csr[11:10])指示這個寄存器是否是可以讀/寫(如只讀是11)。后面2位(csr[9:8])指示了能夠訪問這個CSR所需要的最低特權級(如上表中,監管者模式是01)。
RISC-V定義了專門用于操作CSR的指令,且定義了特定的指令可以用于在不同特權級別之間進行切換(稱為trap)。
一個hart(硬件線程)通常在U-mode下運行應用程序,直到某些自陷(trap,例如一個管理員調用或者一個定時器中斷)強制切換到一個自陷處理函數(trap handler)。提升特權級別的自陷稱為垂直自陷(vertical trap),而保持在同樣特權級別的自陷稱為水平自陷(horizontal trap)。
例如,下表是已被分配的用戶級別(U)的CSR地址:
特權級別的切換對應于操作系統中用戶態到內核態的切換,在內核態中才可以進行系統調用。
四、學習資料
1. 官方資料
在RISC-V官網上可以下載基礎的ISA手冊及特權手冊:https://riscv.org/technical/specifications/
開發者在開發前需要閱讀架構規范。官方的github主頁是:https://github.com/riscv。
2. 開發參考
RISC-V只是定義了一套指令集架構規范,沒有具體實現的代碼,需要開發者根據該架構手冊,通過使用硬件描述語言如VHDL編程來具體實現基于RISC-V的處理器,再移植到滿足RISC-V需求的硬件平臺(處理器芯片或開發板)上去。
使用RISC-V架構的同時,還要配套開發相應的編譯器gcc以及調試器如openOCD。
同時RISC-V官方提供了兼容性測試代碼,可以測試每一條指令的運行結果,驗證開發者的核是否實現了RISC-V規范。
目前基于RISC-V架構的開源處理器有很多,既有標量處理器Rocket,也有超標量處理器BOOM,還有面向嵌入式領域的Z-scale、PicoRV32等。具體有哪些開源處理器項目可以參見:RISC-V架構總結1,開源代碼在github上也有很多。
可供學習的一個簡單RISC-V核是tinyrisc。該項目實現的是一個單核32位的小型RISC-V處理器核,采用verilog語言編寫
總結
RISCV由于其開源性,被大家廣泛使用,我們在需要特定的處理器時也可以采用RISCV架構自行開發。同時RISCV具有低功耗的特點,適合嵌入式開發。
總結
以上是生活随笔為你收集整理的RISC-V基本介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python pi表示_python 算
- 下一篇: 数字滤波器matlab仿真_模拟IC笔记