PMP 配置
PMP 寄存器只能在機器模式下編程。pmpaddrX 寄存器應首先用受保護區域的基地址編程,右移兩位。然后,應該使用正確配置的 64 位值對pmpcfgY 寄存器進行編程,其中包含每個正確對齊的 8 位 pmpXcfg 字段。未使用的字段可以簡單地寫入 0,標記它們未使用。
PMP 配置例子
以下示例顯示了僅機器模式的配置,其中 PMP 權限應用于三個感興趣的區域,第四個區域覆蓋剩余的內存映射。回想一下,較低編號的 pmpXcfg 和pmpaddrX 寄存器優先于較高編號的區域。該規則允許更高編號的 PMP寄存器全面覆蓋整個內存映射,同時允許編號較低的區域將權限應用于特定的感興趣區域。以下示例顯示基地址 0x0 處的 64 KB 閃存區域、基地址0x2000_0000 處的 32 KB RAM 區域以及基地址 base 0x3000_0000 處的 4 KB外設區域。內存映射的其余部分是保留空間。
PMP 訪問場景
L、R、W 和 X 位僅在訪問的所有字節都被該 PMP 條目覆蓋時確定訪問是否成功。例如,如果 PMP 條目配置為匹配四字節范圍0xC–0xF,那么對 0x8–0xF 范圍的 8 字節訪問將失敗,假設 PMP 條目是與這些地址匹配的最高優先級條目。
在鎖定位清零 (L=0) 的機器模式下運行時,如果 PMP 條目與訪問的所有字節匹配,則訪問成功。如果在機器模式下設置了鎖定位(L=1),則訪問取決于為該區域設置的權限。同樣,在管理員模式或用戶模式下,訪問權限取決于為該區域設置的權限。
失敗的讀取或寫入訪問會生成加載或存儲訪問異常,并且指令訪問錯誤會在失敗的指令獲取時發生。當嘗試從沒有執行權限的區域執行時發生異常時,錯誤發生在獲取而不是分支上,因此mepc CSR 將反映目標保護區的值,而不是分支的地址。
一條指令可能產生多個訪問,這可能不是相互原子的。如果一條指令產生的至少一次訪問失敗,則將發生異常。一條指令的其他訪問可能會成功,但會產生明顯的副作用。例如,對虛擬內存的引用可以分解為多個訪問。
在某些實現中,未對齊的加載、存儲和指令提取也可能被分解為多個訪問,其中一些可能在訪問異常發生之前成功。特別是,通過 PMP檢查的未對齊存儲的一部分可能變得可見,即使另一部分未通過 PMP 檢查。對于比 XLEN 位寬的浮點存儲(例如,RV32D 中的 FSD指令),即使存儲地址自然對齊。
-
內核
+關注
關注
3文章
1372瀏覽量
40282 -
PMP
+關注
關注
0文章
45瀏覽量
18164 -
RISC
+關注
關注
6文章
462瀏覽量
83715 -
配置
+關注
關注
1文章
188瀏覽量
18375 -
sifive
+關注
關注
0文章
36瀏覽量
9458
發布評論請先 登錄
相關推薦
評論