RISC-V特權架構 - CSR寄存器

RV32/64 特權架構 - CSR寄存器

  • 1 CSR地址空間
  • 2 CSR定義
    • 2.1 用戶級
    • 2.2 監管級
    • 2.3 超級監管級
    • 2.4 機器級
  • 3 CSR訪問
    • 3.1 CSRRW
    • 3.2 CSRRS
    • 3.3 CSRRC
    • 3.4 CSRRWI
    • 3.5 CSRRSI
    • 3.6 CSRRCI

本文屬于《 RISC-V指令集基礎系列教程》之一,歡迎查看其它文章。

1 CSR地址空間

RISC-V架構中定義了一些控制和狀態寄存器(control and status register),簡稱CSR,與32個物理寄存器不同(物理寄存器可以認為是5位地址尋址的),這些CSR是用12位地址進行尋址的,因此理論上最多可以有4096個CSR寄存器,并且地址空間是私有獨立的,不同于全局地址空間。

CSR地址空間,定義如下:
在這里插入圖片描述
CSR地址的高4bits,用于編碼CSR在各個權級上的可讀寫性:

  • [11:10],表示該寄存器是可讀寫(00,01或10),還是只讀(11)。
  • [9:8],表示允許訪問該寄存器的最低權級。
    00:用戶級,用戶模式及以上權級(用戶、監管、機器)可訪問。
    01:監管級,監管模式及以上權級(監管、機器)可訪問。
    10:超級監管級(擴展模式),僅在虛擬化時使用,用于訪問虛擬化專用的CSR。
    11:機器級,僅機器模式可訪問。
    從上圖也可以看到,根據[9:8]的值,整個CSR地址空間被分為了4個部分。

除此之外,上圖還指定了哪些CSR地址是標準用途,而哪些是自定義用途。
用于自定義的CSR地址,不會在未來標準擴展中被重新定義。

2 CSR定義

我們知道,CSR寄存器被劃分為4個級別:用戶級、監管級、超級監管級、機器級。
接下來,我們看看各個權級,具體定義了哪些寄存器。

2.1 用戶級

用戶級CSR,定義了兩個部分的寄存器:

  • Unprivileged Floating-Point CSRs
  • Unprivileged Counter/Timers

在這里插入圖片描述
以上Number列,給出了該寄存器的12位地址。
具體寄存器含義見規范手冊。

2.2 監管級

監管級CSR,定義了五個部分的寄存器:

  • Supervisor Trap Setup
  • Supervisor Configuration
  • Supervisor Trap Handling
  • Supervisor Protection and Translation
  • Debug/Trace Registers

在這里插入圖片描述
具體寄存器含義見規范手冊。

2.3 超級監管級

超級監管級CSR,定義了七個部分的寄存器:

  • Hypervisor Trap Setup
  • Hypervisor Trap Handling
  • Hypervisor Configuration
  • Hypervisor Protection and Translation
  • Debug/Trace Registers
  • Hypervisor Counter/Timer Virtualization Registers
  • Virtual Supervisor Registers

在這里插入圖片描述
具體寄存器含義見規范手冊。

2.4 機器級

機器級CSR,定義了九個部分的寄存器:

  • Machine Information Registers
  • Machine Trap Setup
  • Machine Trap Handling
  • Machine Configuration
  • Machine Memory Protection
  • Machine Counter/Timers
  • Machine Counter Setup
  • Debug/Trace Registers (shared with Debug Mode)
  • Debug Mode Registers

在這里插入圖片描述
在這里插入圖片描述
具體寄存器含義見規范手冊。

3 CSR訪問

針對CSR寄存器的讀寫,有相應的特殊指令,這些特殊指令都被定義在RV32I中,如下所示:
在這里插入圖片描述
真正的指令只有CSRRW、CSRRS、CSRRC、CSRRWI、CSRRSI、CSRRCI這6條,其他資料中的CSR指令,均為偽指令。

CSR指令機器碼中共有12位(第20-31位)用來指示,被“讀改寫”的是哪一個CSR寄存器,這里通常填寫的就是前面講過的CSR地址,比如:mtvec寄存器那就是0x305。

注意事項:

  • 試圖訪問一個不存在的CSR將造成一個非法指令異常(illegal instruction exception);
  • 試圖在不當的權級下訪問CSR,或者嘗試寫入一個只讀寄存器也都將造成非法指令異常;
  • 可讀寫寄存器中也可能包含一些只讀位,此時忽略對只讀位的寫入。

3.1 CSRRW

在這里插入圖片描述
指令形式:csrrw rd, csr, rs1
指令功能:CSR寄存器讀后寫。記csr值為t,將rs1寫入csr,再將t寫入rd。

t = csr
csr = rs1
rd = t

例如:csrrw t0, mstatus, t0
將 mstatus 的值與 t0 的值交換。

3.2 CSRRS

在這里插入圖片描述
指令形式:csrrs rd, csr, rs1
指令功能:CSR寄存器讀后置位。記csr值為t,將t和rs1的按位或結果寫入csr,再將t 寫入rd。

t = csr
csr = t | rs1 
rd = t

3.3 CSRRC

在這里插入圖片描述
指令形式:csrrc rd, csr, rs1
指令功能:CSR寄存器讀后清位。記csr值為t,將rs1的反碼和t按位與,結果寫入csr,再將t寫入rd。

t = csr
csr = t & ~rs1
rd = t

3.4 CSRRWI

在這里插入圖片描述
指令形式:csrrwi rd, csr, zimm[4:0]
指令功能:CSR寄存器讀后寫立即數。將csr 的值復制到rd 中,再將5 位立即數zimm 的零擴展結果寫入csr。

rd = csr
csr = zimm

3.5 CSRRSI

在這里插入圖片描述
指令形式:csrrsi rd, csr, zimm[4:0]
指令功能:CSR寄存器讀后置位立即數。記csr 的值為t,將5 位立即數zimm 零擴展后,和t 按位或,結果寫入csr,再將t 寫入rd(csr 中的第5 及更高的位不變)。

t = csr
csr = t | zimm
rd = t

3.6 CSRRCI

在這里插入圖片描述
指令形式:csrrci rd, csr, zimm[4:0]
指令功能:CSR寄存器讀后清位立即數。記csr 的值為t,將5 位立即數zimm 零擴展后的反碼和t 按位與,結果寫入csr,再將t 寫入rd(csr 中的第5 及更高的位不變)。

t = csr
csr = t & ~zimm 
rd = t

此外,需要注意:

  • 若目的通用寄存器為x0,則不會執行讀取操作;
  • 若源通用寄存器為x0或立即數0,也不會進行寫入CSR操作。

基于以上6條指令和x0這樣的特性,衍生出若干CSR偽指令,比如:csrr、csrc、csrci、csrs、csrw等。


參考文檔:

  • 《riscv-spec-20191213》
  • 《riscv-privileged-20211203》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

房貸計算器微信小程序原生語言

微信小程序: 房貸計算器 效果: 輸入 300萬 結果 還款明細 一共有3個頁面 1、輸入頁面 2、結果頁面 3、詳情頁面 1 index頁面 index.wxml文件 <view class="text-black"><!--房屋總價--><view class="cu-bar bg-white solid-bottom"&…

TCP/IP狀態遷移

TCP&#xff08;傳輸控制協議&#xff09;是一種面向連接的流式控制協議&#xff0c;它定義了不同的狀態以管理通信過程中的連接。TCP 狀態遷移描述了 TCP 連接在不同狀態之間的轉換過程&#xff0c;常見的 TCP 狀態包括 CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、…

免費下載《金融行業數據安全交換解決方案白皮書》

金融行業包括商業銀行業務、證券業務、保險業務、基金業務、信托業務等&#xff0c;因此數據類型多種多樣&#xff0c;并且數據涉及主體眾多&#xff0c;應用場景上較為多樣復雜&#xff0c;在數據交換上存在安全、合規、可控、可靠、高效等需求。 金融行業會面臨哪些數據安全…

IIS發布PHP網站字體404解決辦法

最近在使用 IIS 發布 PHP 網站時&#xff0c;我遇到了一個前端問題&#xff0c;即字體庫文件 404 錯誤。這個問題的根本原因是 IIS 未能正確識別字體文件類型&#xff0c;導致瀏覽器在加載頁面時無法正確獲取所需字體資源&#xff0c;進而觸發了404錯誤。這樣的問題會導致網站頁…

npm install 報錯常見的解決方法

npm install 報錯的情況有很多種&#xff0c;每種錯誤的具體解決方案也有所不同。這里我將匯總一些常見的npm install報錯及其解決辦法&#xff1a; 1. 下載速度慢/網絡問題 解決辦法&#xff1a;更換npm包的鏡像源至國內鏡像&#xff0c;如淘寶npm鏡像&#xff1a;npm confi…

Javascript:輸入輸出

目錄 一.前言 二.正文 1.輸出 2.輸入 3.字面量 概念&#xff1a; 三.結語 一.前言 Javascript作為運行瀏覽器的語言&#xff0c;對于學習前端的同學來說十分重要&#xff0c;那么從現在開始我們將開始介紹有關 Javascript。 二.正文 1.輸出 document.write() : 向body內…

第十四篇【傳奇開心果系列】Python的文本和語音相互轉換庫技術點案例示例:深度解讀Azure Cognitive Services個性化推薦系統

傳奇開心果博文系列 系列博文目錄Python的文本和語音相互轉換庫技術點案例示例系列 博文目錄前言一、個性化推薦系統介紹和關鍵功能以及優勢解說二、雛形示例代碼三、個性化推薦示例代碼四、實時推薦示例代碼五、多種推薦算法示例代碼六、易于集成示例代碼七、數據安全和隱私保…

C# DLL實現泄露實驗

先說結論&#xff1a;如果應用程序項目中使用直接引用的形式調用動態鏈接庫&#xff0c;當動態鏈接庫是在調試模式生成的情況下&#xff0c;即使應用程序以發布模式生成&#xff0c;跟隨應用程序一同生成的動態鏈接庫仍為調試模式&#xff0c;會引發DLL實現泄露問題&#xff1b…

Google Genie:創意互動環境

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

cJSON讀寫數據例子

cJSON使用案例代碼。 #include <stdio.h> #include <stdlib.h> #include "../cJson/cJSON.h" int main() { FILE* jsonFile fopen("data.json", "r"); if (jsonFile) { fseek(jsonFile, 0, SEEK_END); i…

C++的一些細節技巧

列表和數組的區別 【C】list使用 1.C中怎么把字符串放到list&#xff1a; 在C中將字符串存入列表&#xff08;List&#xff09;可以使用標準庫的std::list<std::string>。下面是示例代碼&#xff1a; #include <iostream> #include <list> #include <st…

pt模型轉換為onnx的作用,直接用pt模型去檢測可以嗎

將PyTorch模型轉換為ONNX模型的作用主要在于提高模型的可移植性和兼容性&#xff0c;同時不能直接用PyTorch模型去檢測的原因可能涉及到環境配置、性能優化等方面。 首先&#xff0c;關于將PyTorch模型轉換為ONNX模型的作用&#xff0c;ONNX&#xff08;Open Neural Network E…

day57 集合 List Set Map

List實現類 List接口特點&#xff1a;元素有序 可重復 Arraylist 可變數組 jdk 8 以前Arraylist容量初始值10 jdk8 之后初始值為0&#xff0c;添加數據時&#xff0c;容量為10&#xff1b; ArrayList與Vector的區別&#xff1f; LinkList&#xff1a;雙向鏈表 優點&#xff1…

智慧工地物聯網云平臺APP源碼:監管端、工地端、危大工程、智慧大屏

目錄 技術說明 智慧工地 服務對象&#xff1a;項目現場 企業項目管理 服務對象&#xff1a;建設領域企業 政府工地監管 服務對象&#xff1a;全國各省建設領域政府機構 勞務實名制管理解決方案 綠色施工解決方案 視頻監控解決方案 塔機安全監控解決方案 施工升降機安…

Windows安裝Docker 容器教程(轉載)

Windows安裝Docker 容器教程 Docker Desktop - WSL distro terminated abruptlyA WSL distro Docker Desktop relies on has exited une Docker Desktop - Unexpected WSL error

【tableau學習筆記】tableau無法連接數據源

【tableau學習筆記】tableau無法連接數據源 背景&#xff1a; 學校講到Tableau&#xff0c;興奮下載Kaggle Excel&#xff0c;一看后綴CSV&#xff0c;導入Tableau發現報錯“tableau無法連接數據源”&#xff0c;自作聰明改為后綴XLSX&#xff0c;bug依舊。 省流&#xff1a…

【DIY】TA7376組成的耳機放大電路

用頭戴式耳機&#xff0c;尤其是小型耳機聽音樂&#xff0c;總感到音樂味不夠足&#xff0c;在低頻段的效果更差。因此用本機增強耳機的低頻特性&#xff0c;并采用立體聲反相合成的辦法&#xff0c;加上內藏簡易矩陣環繞聲電路&#xff0c;能獲得強勁的低音和在較寬的范圍內展…

構建一個基于Node.js的文件存儲服務

隨著現代web應用程序變得越來越復雜和功能強大&#xff0c;文件存儲服務成為了許多應用的重要組成部分。在本篇博客中&#xff0c;我們將探討如何構建一個基于Node.js的文件存儲服務&#xff0c;讓您可以輕松地上傳、下載和管理文件。我們將利用Node.js的強大功能和模塊來構建這…

美觀的404錯誤頁面源碼

超級簡單又美觀的404模板&#xff0c;css文件全部集成在index.html&#xff0c;源碼由HTMLCSSJS組成&#xff0c;記事本打開源碼文件可以進行內容文字之類的修改&#xff0c;雙擊html文件可以本地運行效果&#xff0c;也可以上傳到服務器里面&#xff0c;重定向這個界面 下載地…

蒼穹外賣知識點總結(一)

簡介 技術選型 展示項目中使用到的技術框架和中間件。 用戶層&#xff1a;node.js Vue.js ElementUI 微信小程序 apache echarts 網關層&#xff1a;nginx 應用層&#xff1a;Spring Boot Spring MVC Spring Task httpclie…