iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1
Software Development

RISC-V: 深入淺出從入門到放棄系列 第 6

DAY6: RISC-V: 三分鐘學會 PLIC 流程之外部中斷

  • 分享至 

  • xImage
  •  
tags: 鐵人賽

0. 前言

前幾日已經介紹完,基本 risc-v 的知識了,還沒觀賞的朋友請先行觀看前幾日的文章,會較恰當喔
特權模式
CSR 介紹(一)
CSR 介紹(二)
CSR 使用用法與說明
sbi_ecall 流程與用法
今天來介紹 PLIC GO!GO!

1. PLIC 簡介

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 的關係如下圖。

相關名詞

  • 中斷閘道(Gateway)
    • 轉換 external interrupt signal 為 PLIC 內部的 interrupt request,一個位元的 interrupt signal 如上述分成邊緣/條件觸發,此外訊號也可以是多位元的編碼的訊息閘道(Message-signal gateway),閘道可以佇列化多個 interrupt request。
  • 中斷 ID 與 優先級
    • 每個 interrupt 會有自己的 ID 與優先級,ID 通常從 1 到 N, 0 表示無 interrupt ,重要的 interrupt 通常 ID 越小並且所對應的優先級越大。
  • 中斷標的(Target)資訊
    • 前面提到每個標的表示某個 Hart 的某個特權模式,因此每個標的會有自己的 mie.xEIE 決定哪個特權模式的 interrupt 是要啟用的,以及處理的門檻(Threshold),忽略低於它的 interrutp 優先級,該值設為最高的優先級表示屏蔽所有 external interrupt 。
  • 中斷處理的起始與結束
    • 當一個 interrupt 通知送給 interrupt 標的,準備開始處理該 interrupt 時標的會向 PLIC claim,PLIC 則會仲裁出哪個 Hart 適合處理該 interrupt ,並且回應給該 Hart 正式執行中斷處理函式,完成後發出 completion 給 gateway。
  • 中斷搶佔與巢狀中斷
    • 每個特權模式都能提供一層的搶佔與巢狀 interrupt ,例如 M-mode interrupt 可以打斷 S-mode 處理函式的執行,屬於 hart 功能,並非 PLIC 可以控制的行為。這也是 RISC-V interrupt 的缺點之一,一個實作 M/S/U-mode 的系統,只能有 2 層搶佔發生。
  • PLIC 的存取控制
    • PLIC 的暫存器都是以記憶體映射的方式存取,由各平台自行實作,且只有 M-mode 可以修改 interrupt 啟用位元(mie.{M|S|U}{E|T|S}IE ), M-mode 更低的特權模式都只能修改 claim/completion/threshold 暫存器(同樣是用記憶體映射的方式)

PLIC

PLIC 概念圖如下,該圖與硬體實作無關,但可幫助我們理解 PLIC 與相關 CSR 欄位的影響。

下圖為 interrupt singal 的完整流程時間軸

根據上方兩張圖,因此整個流程會如下所示:

  • global interrupt 發送 interrupt signal 給 interrupt gateway,由 gateway 決定何種 interrupt trigger (edge trigger 或是 level trigger)負責產生 interrupt request 發送給 PLIC
  • PLIC 會將每個 interrupt request 的 interrupt pending bit 以及 priority register 儲存在內部當中
  • 接著 PLIC 會將 interrupt notification 發送給 target hart,此時若 interrupt enabled 以及 pending bit 被舉起(set bit=1)時且判斷 priority 最大者,以及該 priority 大於 theshold 時
  • target hart 將接受該 interrupt request 並發送 interrupt claim 給 PLIC,PLIC 會將相對應的 pending bit 放下並執行該 ISR (interrupt service routine)
  • 當 target 結束 ISR 時,會再發送 interrupt complete 給 gateway 以表示該 interrupt 順利完成,使接下來的 interrupt gateway 可以發送另一 interrupt request 給 target hart。

CLINT/PLIC 與 ACLINT/AIA 比較

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 架構囉~


上一篇
DAY5: RISC-V sbi_ecall 流程與用法
下一篇
DAY7: RISC-V: 阿鬼你還是說中文吧之 AIA 介紹
系列文
RISC-V: 深入淺出從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言