RISC-V学习整理
生活随笔
收集整理的這篇文章主要介紹了
RISC-V学习整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
RISC-V學習整理
目前網上關于risc-v架構概念介紹的文章比較多,本文從開發角度把學習中的記錄整理出來。
以下為作者為自學記錄內容,文章僅拋磚引玉,有學習需要的同學還需以官網及risc-v專家的書籍為準。
有錯誤歡迎指出,共同學習進步。
RISC-V:
RV32G表示RV32IMAFD
I – 32位地址空間,32個通用寄存器
M – 整數乘,整數除
A – 原子操作指令
F – 單精度浮點
D – 雙精度浮點
C – 壓縮指令,長度16
RISC-V不支持地址自增自減
RISC-V有2條無條件跳轉指令,6條條件跳轉指令
匯編部分:
1.偽操作,匯編結束偽操作就結束
2. .option rvc 表示接下來的匯編程序可以被匯編生成16位寬的壓縮指令
??.option norvc 表示接下來的匯編程序不可以被匯編生成16位寬的壓縮指令
3. li 賦值
??la 標簽地址賦值
中斷和異常:
同步:非法地址空間,訪問地址屬性,取指非對齊,非法指令,斷點
異步:外部中斷(精確),讀寫存儲器(非精確)
系統會讀取mcause寄存器判斷何種異常從而跳轉異常處理
RISC-V硬件不會保存上下文,需要軟件保存和恢復
mtvec
異常入口地址寄存器,指定異常處理的pc地址,軟件可以更改其值
高30為是BASE
低2位是mode模式 —| mode=0 所有異常響應 BASE 為 PC
| mode =1 —| 狹義異常響應 BASE 為 PC
| 狹義中斷響應 BASE+4×casue(中斷異常編號) 為 PC
mcause
軟件可讀取寄存器,查看異常原因
高1位 interropt域
低31位 異常編號域 --> 定義了12種中斷類型和10種異常類型
mepc
保存原PC,用于異常返回,可讀寫,軟件可以更改
中斷時,mepc為下一條指令
異常時,mepc為發生異常時當前的PC
mtral
異常值
如果存儲器訪問,mtral為存儲器地址
如果非法指令,mtral為非法指令編碼
mstatus
機器模式狀態
MIE=1,該模式下中斷全局打開,為0關閉
進入異常和退出時都會更改此寄存器
狹義的中斷可以被屏蔽,通過中斷使能寄存器mie控制
進入異常后,mstatus中mie會被硬件該為0,則中斷全局關閉,不支持硬件中斷嵌套
中斷嵌套需要有軟件實現:
a.讀取mcause確認是中斷
b.軟件強寫mie為1
??打開mie前需要注意 —| 屏蔽優先級低的中斷可以修改mie中幾個域
??????????????????????| 也可以通過修改PLIC屏蔽低優先級中斷
??????????????????????| 軟件注意保存中斷上下文
??????????????????????| 軟件注意修改mepc值,恢復使用
PLIC 平臺級別中斷控制器:
支持0~7共8個中斷目標
中斷編號0 做為保留,實際中斷源為(支持個數-1)個
優先級為0~7,數字越大,優先級越高。優先級0可以認為屏蔽中斷
另一種屏蔽中斷方法是設置中斷使能寄存器 IE為0
中斷處理流程
a 中斷使能IE為1,中斷源優先級大于0
b 外部中斷經過gateway 寄存器IP(只讀)被置1。
c 仲裁,優先選擇高優先級中斷,優先級一樣則選編號小的中斷,仲裁結果必須大于中斷目標優先級閾值
d 產生中斷。
e 中斷目標讀取存儲器地址映射的中斷響應寄存器(可讀)進行響應,且返回id ,通過此id進行中斷處理
f 將id寫入中斷完成寄存器(可寫)表示中斷結束,硬件自動將IP置0, 解除gateway屏蔽,以便其他中斷產生
總結
以上是生活随笔為你收集整理的RISC-V学习整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 布隆过滤器
- 下一篇: #9733;一名“标题党”自我修炼的10