鐵人賽
前幾日已經介紹完,基本 risc-v 的知識了,還沒觀賞的朋友請先行觀看前幾日的文章,會較恰當喔
特權模式
CSR 介紹(一)
CSR 介紹(二)
CSR 使用用法與說明
sbi_ecall 流程與用法
今天來介紹 PLIC GO!GO!
PLIC 全名為 platform level interrupt controller,在 x86上又名為 PIC (Programmable Interrupt Controller),但我們的重點不是 x86,因此不在這邊作過多的討論。
RISC-V 有三種 interrupt ,分別為軟體, 計時器與外部中斷(external interrupt),以 QEMU 所模擬的硬體為例,external interrupt 來自 PLIC (Platform level interrupt controller),且為所有 Hart 共用的全域中斷(global interrupt), 軟體與計時器 interrupt 來自 CLINT (Core Local Interrupt Controller),每個 Hart 都有一個,為本地中斷(local interrupt), interrupt source 與 Hart 的關係如下圖。
mie.xEIE
決定哪個特權模式的 interrupt 是要啟用的,以及處理的門檻(Threshold),忽略低於它的 interrutp 優先級,該值設為最高的優先級表示屏蔽所有 external interrupt 。mie.{M|S|U}{E|T|S}IE
), M-mode 更低的特權模式都只能修改 claim/completion/threshold 暫存器(同樣是用記憶體映射的方式)PLIC 概念圖如下,該圖與硬體實作無關,但可幫助我們理解 PLIC 與相關 CSR 欄位的影響。
下圖為 interrupt singal 的完整流程時間軸
根據上方兩張圖,因此整個流程會如下所示:
CLINT/PLIC 的 interrupt 機制目前有一些限制,不支援 MSI, interrupt 只能對 M-mode 作用(再透過 mideleg
導向下一級特權模式) , 因此期望新的 ACLINT/AIA 能給 RISC-V interrupt 機制提供更多功能。
CLINT/PLIC | ACLINT/AIA | |
---|---|---|
有 MSI (Message Signal Interrupt) 可支援 PCIe | X | O |
可對特定特權模式設定 interrupt | X | O |
支援虛擬化 | X | O |
今日我們介紹了關於 PLIC 的流程,過去的這幾天其實就是為了鋪墊我們明日的 AIA 架構阿,AIA 本身算是較新穎的架構,但許多新增的項目都是基於過去進行延伸,因此先介紹諸如 CSR 特權模式 PLIC 之類的,介紹完相關基礎之後,再介紹 AIA 會比較清楚,那我們明日開始將介紹一系列的 AIA 架構囉~