RSIC-V指令集——spec閱讀記錄

KGback發表於2020-07-01

1. 指令編碼型別

  • RISC-V本身就是模組化的指令集,可以靈活的進行組合,具有相當多的可配置型。

例如某處理器核支援 RV32GC(RV64IMAFDC) 模組化指令集:

32位:32位地址空間,即通用暫存器寬度為32位
I:基本整數指令子集,支援32個通用整數暫存器
M:支援整數乘法與除法指令
A:支援儲存器原子操作指令和Load-Reserved / Store-Conditional指令
F:支援單精度浮點指令
D:支援雙精度浮點指令
C:支援編碼長度為16位的壓縮指令,提高程式碼密度
Machine Mode Only:只支援機器模式

RISCV架構推薦使用地址對齊的儲存器讀寫操作,但也支援地址非對齊的操作。

RISCV僅支援小端模式的memory讀寫

RISCV讀寫儲存器不支援自增或自減模式。

  • 指令格式
    在RSIC-V中,所有指令都是32位的,並且在儲存器中必須在4位元組邊界對齊。由於是RSIC架構,指令關於原暫存器和目的暫存器的編碼格式固定。

在基本ISA中,分別有一下四種指令格式,當然在此基礎上有幾種變種。


rs1,rs2是源暫存器地址,rd是目的暫存器地址,opcode是指令操作碼,funct是功能碼(操作碼的資料寬度)
例如sw rs2, imm(rs1)

2. 指令型別

有關指令執行參考連結:https://blog.csdn.net/qq_39815222/article/details/106969845

  • 儲存器訪問指令

資料傳送指令只能完成讀一個運算元或寫一個運算元,並不能進行運算。

見連結:https://blog.csdn.net/qq_39815222/article/details/107224255

  • 邏輯算術指令

算術指令能完成讀兩個暫存器、對它們進行運算和寫回運算的操作。

  • 控制轉移指令
    轉移指令的呼叫可分為儲存現場和恢復現場,RISCV呼叫則較為簡潔,它使用公用的程式庫(專門用來儲存和恢復現場),省去了儲存和恢復的諸多指令。

儲存現場:進入子程式後要用store指令,將當前上下文(通用暫存器等的值)儲存到系統儲存器的堆疊區(後入先出)

恢復現場:退出子程式時,用load指令將之前儲存的上下文從系統儲存器的堆疊區讀出來

3. RISC-V定址空間劃分

  1. 資料和指令定址空間
    例如64位的RISC-V架構,指令和資料定址空間為2的32次方。
  2. CSR定址空間
    專用的12為地址編碼空間。

4. RISC-V暫存器檔案

暫存器檔案又稱為暫存器堆,是CPU中多個暫存器組成的陣列,RSIC-V暫存器檔案主要包含通用暫存器組、控制狀態暫存器和一些特殊暫存器

  1. 通用暫存器組
    如果指令集定義為I,則包含32個通用暫存器,分別用x0-x31表示
    若定義為E(嵌入式架構),則包含16個通用整數暫存器,僅支援32位,,分別用x0-x15表示
    若定義為F/D(單精度/雙精度),則另外增加32個獨立的通用浮點暫存器,分別用f0-f31表示
  2. 控制狀態暫存器(CSR)
    用於配置和記錄一些執行的狀態,CSR是Core內的暫存器,使用專門的12位地址編碼空間。
  3. 程式計數器(PC)
    PC是指令存放在儲存器中的地址位置。可以反映在某些通用暫存器或特殊暫存器中。但在RSIC-V架構中,程式要讀取PC值,只能通過某些指令間接獲得,如AUIPC指令。

5. RSIC-V工作模式

  1. 機器模式
    必選項,另外兩種可選,通常為簡單的嵌入式系統
  2. 監督模式
    若支援該模式,另外兩種須均支援,該模式下可以實現類似Unix的作業系統
  3. 使用者模式
    此類系統實現使用者和機器模式的區分,從而實現資源保護

相關文章