免費網(wǎng)站模板之家獨立站優(yōu)化
一、通用寄存器
32位RISC-V體系結構提供32個32位的整型通用寄存器
寄存器 | 別名 | 全稱 | 說明 |
---|---|---|---|
X0 | zero | 零寄存器 | 可做源寄存器(rs)或目標寄存器(rd) |
X1 | ra | 鏈接寄存器 | 保存函數(shù)返回地址 |
X2 | sp | 棧指針寄存器 | 指向棧的地址 |
X3 | gp | 全局寄存器 | 用于鏈接器松弛優(yōu)化 |
X4 | tp | 線程寄存器 | 常用于在OS中保存指向進程控制塊(task_struct)數(shù)據(jù)結構的指針 |
X5 ~ X7 X28 ~ X31 | t0 ~ t6 | 臨時寄存器 | |
X8 | s0/fp | 幀指針寄存器 | 用于函數(shù)調(diào)用,被調(diào)用函數(shù)需保存數(shù)據(jù) |
X9 | s1 | 用于函數(shù)調(diào)用 ,被調(diào)用函數(shù)需要保存的數(shù)據(jù) | |
X10 ~ X17 | a0 ~ a7 | 用于函數(shù)調(diào)用,傳遞參數(shù)和返回值 | |
X18 ~ X27 | s2 ~ s11 | 用于函數(shù)調(diào)用 ,被調(diào)用函數(shù)需要保存的數(shù)據(jù) |
二、系統(tǒng)寄存器
系統(tǒng)控制狀態(tài)寄存器(CSR)。
CSR地址空間映射:
地址范圍 | bit[11:10] | bit[9:8] | bit[7:4] | 訪問模式 | 訪問權限 |
---|---|---|---|---|---|
0x000 ~ 0x0FF | 00 | 00 | xxxx | U | RW |
0x400 ~ 0x4FF | 01 | 00 | xxxx | U | RW |
0x800 ~ 0x8FF | 10 | 00 | xxxx | U | RW(用戶自定義系統(tǒng)寄存器) |
0xC00 ~ 0xC7F | 11 | 00 | 0xxx | U | RO |
0xC80 ~ 0xCBF | 11 | 00 | 10xx | U | RO |
0xCC0 ~ 0xCFF | 11 | 00 | 11xx | U | RO |
0x100 ~ 0x1FF | 00 | 01 | xxxx | S | RW |
0x500 ~ 0x57F | 01 | 01 | 0xxx | S | RW |
0x580 ~ 0x5BF | 01 | 01 | 10xx | S | RW |
0x5C0 ~ 0x5FF | 01 | 01 | 11xx | S | RW(用戶自定義系統(tǒng)寄存器) |
0x900 ~ 0x97F | 10 | 01 | 0xxx | S | RW |
0x980 ~ 0x9BF | 10 | 01 | 10xx | S | RW |
0x9C0 ~ 0x9FF | 10 | 01 | 11xx | S | RW(用戶自定義系統(tǒng)寄存器) |
0xD00 ~ 0xD7F | 11 | 01 | 0xxx | S | RO |
0xD80 ~ 0xDBF | 11 | 01 | 10xx | S | RO |
0xDC0 ~ 0xDFF | 11 | 01 | 11xx | S | RO(用戶自定義系統(tǒng)寄存器) |
0x300 ~ 0x3FF | 00 | 11 | xxxx | M | RW |
0x700 ~ 0x77F | 01 | 11 | 0xxx | M | RW |
0x780 ~ 0x79F | 10 | 11 | 100x | M | RW |
0x7A0 ~ 0x7AF | 01 | 11 | 1010 | M | RW(用于調(diào)試寄存器) |
0x7B0 ~ 0x7BF | 01 | 11 | 1011 | M | RW(只能用于調(diào)試寄存器) |
0x7C0 ~ 0x7FF | 01 | 11 | 11xx | M | RW(用戶自定義系統(tǒng)寄存器) |
0xB00 ~ 0xB7F | 10 | 11 | 0xxx | M | RW |
0xB80 ~ 0xBBF | 10 | 11 | 10xx | M | RW |
0xBC0 ~ 0xBFF | 10 | 11 | 11xx | M | RW(用戶自定義系統(tǒng)寄存器) |
0xF00 ~ 0xF7F | 11 | 11 | 0xxx | M | RO |
0xF80 ~ 0xFBF | 11 | 11 | 10xx | M | RO |
0xFC0 ~ 0xFFF | 11 | 11 | 11xx | M | RO(用戶自定義系統(tǒng)寄存器) |
- 出發(fā)非法指令異常的行為:
- 訪問不存在或未實現(xiàn)的寄存器;
- 寫入RO的系統(tǒng)寄存器
- 低級別處理器模式下訪問高級別處理器模式的系統(tǒng)寄存器(模式級別:M > S > U)
2.1 U模式 系統(tǒng)寄存器
地址 | CSR名稱 | 屬性 | 說明 |
---|---|---|---|
0x001 | fflags | URW | 浮點數(shù)累積異常(accrued exception) |
0x002 | frm | URW | 浮點數(shù)動態(tài)舍入模式(dynamic rounding mode) |
0x003 | fcsr | URW | 浮點數(shù)控制和狀態(tài)寄存器 |
0xC00 | cycle | URO | 讀取時鐘周期,映射到RDCYCLE偽指令 |
0xC01 | time | URO | 讀取time系統(tǒng)寄存器的值,映射到RDTIME偽指令 |
0xC02 | instret | URO | 執(zhí)行指令數(shù)目,映射到RDINSTRET偽指令 |
0xC03 ~ 0xC1F | hpmcounter3 ~hpmcounter31 | 性能檢測寄存器 |
- 補充:
- RDCYCLE偽指令讀取cycle系統(tǒng)寄存器的值,返回物理處理器內(nèi)核的時鐘周期數(shù)(并非處理器硬件線程的始終周期數(shù))。主要用于性能監(jiān)控和調(diào)優(yōu);
- RDTIME偽指令讀取time系統(tǒng)寄存器的值,獲取系統(tǒng)實際時間。系統(tǒng)每次啟動時讀取CMOS上的RTC計數(shù)值,當時鐘中斷到來時,更新該計數(shù);
- RDINSTRET偽指令讀取instret系統(tǒng)寄存器的值,返回處理器執(zhí)行線程已經(jīng)執(zhí)行的指令數(shù)量;
- hpmcounter用于系統(tǒng)性能檢測的寄存器,這些計數(shù)器的計數(shù)記錄平臺的事件,并通過額外的特權寄存器進行配置。
2.2 S模式 系統(tǒng)寄存器
地址 | CSR名稱 | 屬性 | 說明 |
---|---|---|---|
0x100 | sstatus | SRW | S模式下的處理器狀態(tài)寄存器 |
0x104 | sie | SRW | S模式下的中斷使能寄存器 |
0x105 | stvec | SRW | S模式下的異常向量表入口地址寄存器 |
0x106 | scounteren | SRW | S模式下的計數(shù)使能寄存器 |
0x10A | senvcfg | SRW | S模式下的環(huán)境配置寄存器 |
0x140 | scratch | SRW | 用于異常處理的臨時寄存器 |
0x141 | sepc | SRW | S模式下的異常模式程序計數(shù)器(PC)寄存器 |
0x142 | scause | SRW | S模式下的異常原因寄存器 |
0x143 | stval | SRW | S模式下的異常向量寄存器(記錄發(fā)生異常的虛擬地址) |
0x144 | sip | SRW | S模式下的中斷待定寄存器 |
0x180 | satp | SRW | S模式下的地址轉換與保護寄存器 |
0x5A8 | scontext | SRW | S模式下的上下文寄存器(用于調(diào)試) |
- 說明:
- scounteren用于在S模式下,使能U模式下的硬件性能檢測和計數(shù)寄存器(cycle, time, instret, HPM3~31)
scratch在從S模式返回U模式時,保存S模式時的進程控制塊。
- scounteren用于在S模式下,使能U模式下的硬件性能檢測和計數(shù)寄存器(cycle, time, instret, HPM3~31)
2.3 M模式 系統(tǒng)寄存器
2.3.1 總覽表
地址 | CSR名稱 | 屬性 | 說明 |
---|---|---|---|
0xF11 | mvendorid | MRO | 機器廠商ID寄存器 |
0xF12 | marchid | MRO | 處理器體系結構ID寄存器 |
0xF13 | mimpid | MRO | 處理器實現(xiàn)版本編號寄存器 |
0xF14 | mhartid | MRO | 處理器硬件線程(hart)ID寄存器 |
0xF15 | mconfigptr | MRO | 配置數(shù)據(jù)結構寄存器 |
0x300 | mstatus | MRW | M模式下的處理器狀態(tài)寄存器 |
0x301 | misa | MRW | 指令集體系結構和擴展寄存器 |
0x302 | medeleg | MRW | M模式下的異常委托寄存器,把異常委托到S模式下處理 |
0x303 | mideleg | MRW | M模式下的中斷委托寄存器,把中斷委托到S模式下處理 |
0x304 | mie | MRW | M模式下的中斷使能寄存器 |
0x305 | mtvec | MRW | M模式下的異常向量入口地址寄存器 |
0x306 | mcounteren | MRW | M模式下的計數(shù)使能寄存器。用于使能S模式或U模式下的硬件性能檢測和計數(shù)寄存器。 |
0x340 | mscratch | MRW | 用于異常處理的臨時寄存器 |
0x341 | mepc | MRW | M模式下的異常模式PC寄存器。處理器陷入M模式時,保存中斷或遇到的異常的指令的虛擬地址 |
0x342 | mcause | MRW | M模式下的異常原因寄存器 |
0x343 | mtval | MRW | M模式下的異常向量寄存器。處理器陷入M模式時,mtval記錄發(fā)生異常的虛擬地址。 |
0x344 | mip | MRW | M模式下的中斷待定寄存器。表示哪些中斷處與待定狀態(tài)。 |
0x34A | mtinst | MRW | M模式下的陷入指令(用于虛擬化) |
0x34B | mtval2 | MRW | M模式下的異常向量寄存器(用于虛擬化) |
2.3.2 補充
2.3.2.1 misa寄存器
- misa:表示處理器支持的體系結構和擴展
- Extensions(bit[25:0]):表示處理器支持的擴展
- MXL(bit[63:62):表示M模式下寄存器長度
- 1:32位
- 2:64位
- 3:128位
位 | 名稱 | 說明 |
---|---|---|
0 | A | 原子操作擴展 |
1 | B | 位操作擴展 |
2 | C | 壓縮指令擴展 |
3 | D | 雙精度浮點數(shù)擴展 |
4 | E | RV32E指令集擴展 |
5 | F | 單精度浮點數(shù)擴展 |
6 | G | 保留 |
7 | H | 虛擬化擴展 |
8 | I | RV32I/RV64I/RV128I基礎指令集擴展 |
9 | J | 動態(tài)翻譯語言擴展 |
10 | K | 保留 |
11 | L | 保留 |
12 | M | 整數(shù)乘/除擴展 |
13 | N | 用戶中斷擴展 |
14 | O | 保留 |
15 | P | SIMD擴展 |
16 | Q | 4倍精度浮點數(shù)擴展 |
17 | R | 保留 |
18 | S | 支持S模式 |
19 | T | 保留 |
20 | U | 支持U模式 |
21 | V | 可伸縮矢量擴展 |
22 | W | 保留 |
23 | X | 非標準擴展 |
24 | Y | 保留 |
25 | Z | 保留 |
2.3.2.2 mstatus寄存器
字段 | 尾段 | 說明 |
---|---|---|
UIE | bit[0] | |
SIE | bit[1] | 中斷使能位,用于使能和關閉S模式下所有的中斷 |
MIE | bit[3] | 中斷使能位,用于使能和關閉M模式下所有的中斷 |
SPIE | bit[5] | 中斷使能保存位。當一個異常陷入S模式時,SIE的值保存到SPIE中,SIE設置為0。當調(diào)用SRET指令返回時,從SPIE中恢復SIE,然后SPIE設置為1 |
UBE | bit[6] | 控制U模式下加載和存儲指令訪問內(nèi)存的大小端模式。 0:小端。 1:大端。 |
MPIE | bit[7] | 中斷使能保存位。當一個異常陷入M模式時,MIE的值保存到MPIE中,MIE設置為0。當調(diào)用MRET指令返回時,從MPIE中恢復MIE,然后MPIE設置為1 |
SPP | bit[8] | 陷入S模式之前的CPU處理模式。 0:從U模式陷入到S模式。 1:在S模式觸發(fā)的異常。 |
VS | bir[10:9] | 使能可伸縮矢量擴展 |
MPP | bit[12:11] | 陷入M模式之前CPU的處理模式。 0:從U模式陷入到M模式。 1:從S模式陷入到M模式 2:在M模式觸發(fā)的異常。 |
FS | bit[14:13] | 使能浮點數(shù)單元 |
XS | bit[16:15 | 使能U模式下擴展的其他狀態(tài) |
MPRV | bit[17] | 修改有效特權模式: 0:加載和存儲指令按照當前的處理器模式進行地址轉換和內(nèi)存保護。 加載和存儲指令按照MPP字段中存儲的處理器模式的權限進行內(nèi)存保護與檢查 |
SUM | bit[18] | 指定在S模式下是否允許訪問U模式的內(nèi)存。 0:在S模式下訪問U模式下的內(nèi)存是會觸發(fā)異常。 1:在S模式下可以訪問U模式下的內(nèi)存 |
MXR | bit[19] | 指定訪問內(nèi)存的權限。 0:可以加載只讀頁面。 1:可以加載可讀和可執(zhí)行的頁面 |
TVM | bit[20] 支持攔截S模式下的虛擬內(nèi)存管理操作 | |
TW | bit[21] | 支持攔截WFI指令。 0:WFI指令可以在低權限模式下執(zhí)行。 1: |
TSR | bit[22] | 支持攔截SRET指令。 0:在S模式下正常執(zhí)行SRET指令。 1:在S模式下執(zhí)行SRET指令會觸發(fā)非法指令異常。 |
UXL | bit[33:32] | U模式下寄存器長度 |
SXL | bit[35:34] | S模式下寄存器長度 |
SBE | bit[36] | 控制S模式下加載和內(nèi)存訪問的大小端模式。 0:小端。 1:大端。 |
MBE | bit[37] | 控制M模式下加載和內(nèi)存訪問的大小端模式。 0:小端。 1:大端。 |