您好,登錄后才能下訂單哦!
這篇文章主要講解了“riscv中的plic與eclic的簡單介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“riscv中的plic與eclic的簡單介紹”吧!
1.PLIC中斷處理
2.sifive中斷的編程模型
3.關于eclic
4.關于jalmnxti
在RISC V體系架構中,對中斷有著一些定義,下面來分析一下這種定義的實現策略。
在riscv中一共定義了三種狀態中斷,對于hart層面,hart包含local中斷源和global中斷源。而local中斷只有Timer和Software中斷兩種,而global中斷則稱為external interrupts。只有global中斷源可以被PLIC core響應,通常為I/O device。
一般來說,timer和software是通過CLINT(CORE LOCAL INTERRUPT),而外部中斷通過PLIC處理。
可以看一下蜂鳥處理器的處理流程,另外sifive的E31的中斷也有如下的處理。
中斷處理過程有如下的流程
接下來就是處理中斷具體的函數實現
最后執行eret恢復到程序正常運行的狀態。
對于CLINT來說,有Software Interrupt和Timer Interrupt,可以直接在寄存器中控制。
而PLIC實際上可以理解為arm的中斷控制器,存在其map地址。
由于PLIC的使用是針對外部中斷的,所以可以單獨設置每個中斷。可以設置如下的值:
由于PLIC的實現是獨立于hart的IP設計,所以其設計和布局也不一定完全一致。
eclic的設計是芯來科技設計的一種中斷處理方式。
eclic目前也是眾多芯來科技core采用的中斷控制器,也包括gd32vf103系列的芯片。
3號中斷是內核TIMER單元生成的軟件中斷。
7號中斷是內核TIMER單元生成的計時器中斷。
而從19~4095中斷號都是外部中斷,其中斷的編號與中斷的優先級其實沒有關系。
而對于ECLIC的寄存器布局,可見上圖。
這個也是eclic為了減少中斷延時,加速中斷咬尾的自定義指令。
該指令是配合eclic處理機制設計的,其指令功能比較多
由于csrrw ra, CSR_JALMNXTI, ra
一條指令可以達到JAL(Jump and Link)的效果,同時硬件上更新Link寄存器作為該指令的PC作為函數調用的返回值,因此從中斷服務程序返回后,又會重新回到csrrw ra, CSR_JALMNXTI, ra
指令再次執行,可以重新判斷是否有中斷pending,如果有則跳轉到中斷處理函數,從而實現中斷的咬尾處理,如果沒有中斷等待,則jalmnxti
實際上并不會做任何事情。
感謝各位的閱讀,以上就是“riscv中的plic與eclic的簡單介紹”的內容了,經過本文的學習后,相信大家對riscv中的plic與eclic的簡單介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。