隨著 RISC -V處理器在 FPGA 領(lǐng)域的廣泛應(yīng)用,易靈思 FPGA 的 Sapphire RISC-V 內(nèi)核憑借軟硬核的靈活支持,為開(kāi)發(fā)者提供多樣選擇。本文深入探討 Sapphire SoC 中 RISC - V 平臺(tái)級(jí)中斷控制器(PLIC),解析其架構(gòu)與操作機(jī)制,助力你深入了解與應(yīng)用。
Part 01 RISC-V中斷生態(tài)系統(tǒng)導(dǎo)論
1.1 中斷在現(xiàn)代計(jì)算系統(tǒng)中的角色
在現(xiàn)代計(jì)算系統(tǒng)中,中斷是實(shí)現(xiàn)異步事件處理的核心機(jī)制。它允許外部設(shè)備(如網(wǎng)絡(luò)控制器、磁盤(pán)驅(qū)動(dòng)器或用戶輸入設(shè)備)在需要處理器關(guān)注時(shí)主動(dòng)發(fā)送信號(hào),從而將處理器從低效的、持續(xù)性的輪詢(polling)模式中解放出來(lái)。通過(guò)中斷機(jī)制,系統(tǒng)能夠高效地管理多任務(wù)并行、處理I/O操作,并對(duì)外部事件做出快速響應(yīng),這對(duì)于構(gòu)建高性能、高能效的計(jì)算平臺(tái)至關(guān)重要。
1.2 中斷架構(gòu)的劃分:本地中斷與全局中斷
RISC-V的特權(quán)架構(gòu)對(duì)中斷進(jìn)行了明確的分類(lèi),這種設(shè)計(jì)策略性地分離了不同層級(jí)的關(guān)注點(diǎn),以同時(shí)優(yōu)化延遲和可擴(kuò)展性。中斷源被劃分為兩大類(lèi):本地中斷(Local Interrupts)和全局中斷(Global or External Interrupts)。
本地中斷
本地中斷源直接連接到特定的處理器核心(在RISC-V中稱為“Hart”),其處理不經(jīng)過(guò)平臺(tái)級(jí)中斷控制器(PLIC)。RISC-V標(biāo)準(zhǔn)定義了兩種核心的本地中斷:軟件中斷(Software Interrupts)和計(jì)時(shí)器中斷(Timer Interrupts)。這些中斷通常由一個(gè)名為核心本地中斷器(Core Local Interrupter, CLINT)或更高級(jí)的核心本地中斷控制器(Core Local Interrupt Controller, CLIC)的模塊管理 。本地中斷的關(guān)鍵特性是延遲極低,因?yàn)樗恍枰诙鄠€(gè)Hart之間進(jìn)行仲裁,并且服務(wù)Hart可以通過(guò)直接讀取mcause等控制與狀態(tài)寄存器(CSR)來(lái)快速確定中斷源 。這種設(shè)計(jì)確保了對(duì)時(shí)間敏感的核心級(jí)功能(如上下文切換調(diào)度、核間通信)的最高效處理。
全局(外部)中斷
全局中斷,也常被稱為外部中斷,源自處理器核心外部的平臺(tái)級(jí)設(shè)備,例如UART、GPIO、以太網(wǎng)控制器或DMA引擎 。在一個(gè)復(fù)雜的片上系統(tǒng)(SoC)中,這類(lèi)中斷源的數(shù)量可能非常龐大。為了有效管理這些中斷,RISC-V架構(gòu)引入了一個(gè)專用的、可擴(kuò)展的控制器,即平臺(tái)級(jí)中斷控制器(PLIC)。全局中斷需要一個(gè)集中的仲裁單元來(lái)處理來(lái)自眾多外設(shè)的請(qǐng)求,根據(jù)預(yù)設(shè)的優(yōu)先級(jí)進(jìn)行裁決,并將中斷信號(hào)路由到一個(gè)或多個(gè)目標(biāo)Hart 。
1.3 平臺(tái)級(jí)中斷控制器(PLIC)的目標(biāo)與重要性
PLIC是RISC-V針對(duì)全局中斷管理所提出的標(biāo)準(zhǔn)解決方案,其在SoC設(shè)計(jì)中扮演著基石的角色。它的核心目標(biāo)是解決在擁有豐富外設(shè)集的復(fù)雜系統(tǒng)中管理大量中斷源的挑戰(zhàn)。PLIC的主要功能可以概括為以下三點(diǎn):
多路復(fù)用(Multiplexing):將來(lái)自多達(dá)1023個(gè)不同外部設(shè)備的中斷信號(hào)匯集起來(lái)進(jìn)行統(tǒng)一管理。
優(yōu)先級(jí)仲裁(Prioritization):提供硬件支持的中斷優(yōu)先級(jí)機(jī)制,確保高優(yōu)先級(jí)的緊急事件能夠優(yōu)先得到處理。
路由(Routing):根據(jù)軟件的配置,將裁決后的中斷通知精確地分發(fā)到指定的一個(gè)或多個(gè)Hart上下文(Hart Context)。
通過(guò)將全局中斷的管理從核心中分離出來(lái),PLIC的設(shè)計(jì)體現(xiàn)了RISC-V架構(gòu)的模塊化和可擴(kuò)展性理念。它使得SoC設(shè)計(jì)者能夠根據(jù)平臺(tái)外設(shè)的復(fù)雜程度來(lái)調(diào)整PLIC的實(shí)現(xiàn)規(guī)模,而不會(huì)影響核心內(nèi)部計(jì)時(shí)器等基礎(chǔ)中斷機(jī)制的性能。對(duì)于旨在運(yùn)行如Linux等功能完備的操作系統(tǒng)的平臺(tái)而言,一個(gè)高效的PLIC是不可或缺的組成部分。
Part 02 PLIC架構(gòu)深度解析
PLIC的硬件架構(gòu)是一個(gè)精心設(shè)計(jì)的、可配置的硬件排序與過(guò)濾引擎。它將識(shí)別最高優(yōu)先級(jí)中斷的復(fù)雜任務(wù)從軟件層面轉(zhuǎn)移到硬件層面,從而顯著降低了中斷處理的延遲。若沒(méi)有PLIC,軟件在收到一個(gè)通用的“外部中斷”信號(hào)后,必須通過(guò)輪詢大量外設(shè)的狀態(tài)寄存器來(lái)確定中斷源,并依據(jù)軟件邏輯判斷其優(yōu)先級(jí),這一過(guò)程緩慢且效率低下。PLIC通過(guò)其硬件仲裁機(jī)制,將這一串行、低效的軟件輪詢循環(huán)轉(zhuǎn)變?yōu)椴⑿?、高速的硬件決策過(guò)程。
2.1 概念框圖與組件交互
下圖(圖1)展示了PLIC的架構(gòu),描繪了從中斷源到中斷目標(biāo)(Hart)的完整信號(hào)流。

圖 1: RISC-V PLIC 概念架構(gòu)框圖
該架構(gòu)主要由四個(gè)核心組件構(gòu)成:中斷源、中斷網(wǎng)關(guān)、PLIC核心以及中斷目標(biāo)。
2.2 中斷源與中斷網(wǎng)關(guān):信號(hào)接收的前線
中斷源(Interrupt Sources):指產(chǎn)生中斷信號(hào)的外部物理設(shè)備,如UART、I2C控制器等。PLIC規(guī)范支持多達(dá)1023個(gè)中斷源,其ID范圍為1至10。中斷ID 0被特殊保留,表示“無(wú)中斷”。
中斷網(wǎng)關(guān)(Interrupt Gateways):每個(gè)中斷源都連接到一個(gè)專用的中斷網(wǎng)關(guān)。網(wǎng)關(guān)的職責(zé)是處理來(lái)自設(shè)備的原始中斷信號(hào)(可以是電平觸發(fā)、邊沿觸發(fā)等),并將其轉(zhuǎn)換為標(biāo)準(zhǔn)化的中斷請(qǐng)求格式,然后轉(zhuǎn)發(fā)給PLIC核心。網(wǎng)關(guān)確保在任何時(shí)刻,每個(gè)中斷源在PLIC核心中最多只能有一個(gè)掛起的請(qǐng)求。只有在收到前一個(gè)中斷的完成消息后,網(wǎng)關(guān)才會(huì)轉(zhuǎn)發(fā)來(lái)自同一源的下一個(gè)新請(qǐng)求。
2.3 PLIC核心:仲裁與路由邏輯
PLIC核心是整個(gè)控制器的中樞,它接收來(lái)自所有網(wǎng)關(guān)的請(qǐng)求,并執(zhí)行關(guān)鍵的仲裁與路由邏輯。其內(nèi)部主要包含以下幾個(gè)關(guān)鍵部分:
中斷掛起(Interrupt Pending, IP)位:一個(gè)位數(shù)組,用于鎖存(latch)從網(wǎng)關(guān)傳入的中斷請(qǐng)求。當(dāng)某個(gè)中斷源的IP位被置位時(shí),表示該源有一個(gè)活躍的請(qǐng)求正在等待服務(wù)。
中斷優(yōu)先級(jí)(Interrupt Priority)寄存器:一個(gè)寄存器數(shù)組,每個(gè)中斷源對(duì)應(yīng)一個(gè)。軟件可以通過(guò)寫(xiě)這些寄存器來(lái)為每個(gè)中斷源分配一個(gè)數(shù)值化的優(yōu)先級(jí)。
中斷使能(Interrupt Enable, IE)矩陣:一個(gè)龐大的位矩陣,允許軟件為每一個(gè)中斷目標(biāo)獨(dú)立地使能或禁用每一個(gè)中斷源。
優(yōu)先級(jí)閾值(Priority Threshold)寄存器:每個(gè)中斷目標(biāo)都擁有一個(gè)獨(dú)立的閾值寄存器。PLIC只有在檢測(cè)到一個(gè)掛起且已使能的中斷,并且其優(yōu)先級(jí)嚴(yán)格大于目標(biāo)當(dāng)前的閾值時(shí),才會(huì)向該目標(biāo)發(fā)送中斷通知。
2.4 中斷目標(biāo):定義中斷傳遞的Hart上下文
中斷目標(biāo)是中斷通知的最終接收者。在RISC-V中,一個(gè)中斷目標(biāo)通常被定義為一個(gè)“Hart上下文”,即某個(gè)特定Hart上的特定特權(quán)模式(例如,Hart 0的機(jī)器模式,或Hart 1的監(jiān)管者模式)。PLIC規(guī)范理論上最多可支持15872個(gè)獨(dú)立的Hart上下文。
當(dāng)PLIC決定向一個(gè)Hart上下文發(fā)送中斷通知時(shí),它會(huì)通過(guò)置位該Hart的mip(機(jī)器中斷掛起)或sip(監(jiān)管者中斷掛起)CSR中的相應(yīng)位來(lái)實(shí)現(xiàn),具體來(lái)說(shuō)是MEIP(機(jī)器外部中斷掛起)或SEIP(監(jiān)管者外部中斷掛起)位。
一個(gè)至關(guān)重要的架構(gòu)特性是,PLIC獨(dú)立地對(duì)待每一個(gè)中斷目標(biāo),其本身不提供中斷搶占(preemption)或嵌套(nesting)的概念。這些復(fù)雜的行為必須由接收中斷的處理器核心自身通過(guò)軟件或硬件邏輯來(lái)處理。
Part 03 PLIC的核心運(yùn)行機(jī)制
PLIC的強(qiáng)大功能源于其優(yōu)先級(jí)、閾值和使能機(jī)制的協(xié)同工作。這套機(jī)制構(gòu)成了一個(gè)靈活的兩級(jí)過(guò)濾系統(tǒng),為操作系統(tǒng)設(shè)計(jì)者提供了巨大的便利。它成功地將設(shè)備的靜態(tài)重要性(通過(guò)優(yōu)先級(jí)設(shè)定)與運(yùn)行核心的動(dòng)態(tài)上下文(通過(guò)閾值調(diào)節(jié))分離開(kāi)來(lái)。
3.1 優(yōu)先級(jí)系統(tǒng):為中斷源賦予重要性
每個(gè)中斷源(ID 1-1023)都可以通過(guò)寫(xiě)入其專用的32位內(nèi)存映射優(yōu)先級(jí)寄存器來(lái)分配一個(gè)優(yōu)先級(jí)。
優(yōu)先級(jí)值為0是一個(gè)特殊值,表示“從不中斷”,這等同于在源頭禁用了該中斷。
優(yōu)先級(jí)1是最低的有效優(yōu)先級(jí)。最高優(yōu)先級(jí)級(jí)別由具體的PLIC實(shí)現(xiàn)來(lái)定義。
為了保證處理的確定性,當(dāng)多個(gè)中斷具有相同的優(yōu)先級(jí)時(shí),PLIC會(huì)采用中斷ID作為決勝規(guī)則:ID號(hào)較小的中斷擁有更高的有效優(yōu)先級(jí)。
3.2 基于閾值的過(guò)濾:每個(gè)目標(biāo)的動(dòng)態(tài)中斷屏蔽
每個(gè)中斷目標(biāo)(Hart上下文)都擁有自己的優(yōu)先級(jí)閾值寄存器。PLIC在向目標(biāo)發(fā)送中斷通知前,會(huì)進(jìn)行一次關(guān)鍵的比較:只有當(dāng)一個(gè)掛起中斷的優(yōu)先級(jí)嚴(yán)格大于該目標(biāo)閾值寄存器中的值時(shí),通知才會(huì)被發(fā)出。
將閾值設(shè)置為0,意味著允許所有優(yōu)先級(jí)大于0的中斷通過(guò)。
將閾值設(shè)置為實(shí)現(xiàn)所支持的最高優(yōu)先級(jí),則可以有效地屏蔽該目標(biāo)的所有全局中斷。
這種機(jī)制賦予了軟件(如操作系統(tǒng)內(nèi)核)強(qiáng)大的動(dòng)態(tài)控制能力。例如,當(dāng)一個(gè)核心進(jìn)入一個(gè)不希望被中等優(yōu)先級(jí)的網(wǎng)絡(luò)中斷打擾的臨界區(qū)時(shí),內(nèi)核可以臨時(shí)將其閾值提升到網(wǎng)絡(luò)中斷的優(yōu)先級(jí)之上。這僅僅屏蔽了該核心的中斷,而不會(huì)影響其他核心,也無(wú)需全局禁用中斷。
3.3 中斷使能矩陣:對(duì)每個(gè)目標(biāo)的精細(xì)化控制
PLIC內(nèi)部維護(hù)著一個(gè)龐大的中斷使能(IE)位數(shù)組,該數(shù)組按目標(biāo)進(jìn)行組織。對(duì)于每一個(gè)目標(biāo),都有一組與之對(duì)應(yīng)的使能位,每個(gè)中斷源占用其中一位。只有當(dāng)中斷源針對(duì)某個(gè)目標(biāo)的IE位被置位時(shí),該中斷才會(huì)被該目標(biāo)所考慮。
這種矩陣式的控制結(jié)構(gòu)支持非常靈活的路由策略。例如,一個(gè)調(diào)試用的UART中斷可以只為Hart 0使能(用于控制臺(tái)I/O),而對(duì)正在執(zhí)行實(shí)時(shí)控制任務(wù)的Hart 1禁用。
3.4 交互與優(yōu)先級(jí):兩階段過(guò)濾流程
綜合來(lái)看,PLIC決定是否向一個(gè)Hart發(fā)出中斷信號(hào)是一個(gè)嚴(yán)謹(jǐn)?shù)亩嚯A段過(guò)濾過(guò)程。對(duì)于一個(gè)中斷源N和一個(gè)中斷目標(biāo)T,必須同時(shí)滿足以下所有條件,中斷通知才會(huì)被發(fā)出:
中斷N必須處于掛起狀態(tài)(其IP位為1)。
中斷N必須為目標(biāo)T使能(其在IE矩陣中對(duì)應(yīng)T的位為1)。
中斷N的優(yōu)先級(jí)必須大于0。
中斷N的優(yōu)先級(jí)必須嚴(yán)格大于目標(biāo)T的當(dāng)前閾值。
在所有同樣滿足以上四個(gè)條件的中斷中,不存在任何其他中斷M的優(yōu)先級(jí)高于N。
Part 04 完整的中斷生命周期:從設(shè)備信號(hào)到軟件完成
理解PLIC的完整工作流程需要貫穿硬件和軟件兩個(gè)領(lǐng)域。整個(gè)過(guò)程可以劃分為四個(gè)主要階段,每個(gè)階段都有明確的責(zé)任實(shí)體。
4.1 階段一:中斷生成與PLIC裁決(硬件域)
信號(hào)生成:一個(gè)外部設(shè)備(如GPIO)因某個(gè)事件(如電平變化)而觸發(fā)并拉高其中斷線。
網(wǎng)關(guān)請(qǐng)求:與該設(shè)備連接的PLIC中斷網(wǎng)關(guān)接收到信號(hào),并向PLIC核心發(fā)送一個(gè)標(biāo)準(zhǔn)化的中斷請(qǐng)求。
請(qǐng)求鎖存:PLIC核心收到請(qǐng)求后,在其中斷掛起(IP)位數(shù)組中將對(duì)應(yīng)中斷ID的位設(shè)置為1。
持續(xù)評(píng)估:PLIC的硬件邏輯持續(xù)地、并行地評(píng)估所有掛起的IP位。對(duì)于每一個(gè)中斷目標(biāo),它都會(huì)檢查該中斷是否被使能,以及其優(yōu)先級(jí)是否高于該目標(biāo)的閾值。
發(fā)送通知:一旦某個(gè)掛起的中斷通過(guò)了針對(duì)某個(gè)目標(biāo)的所有檢查,PLIC就會(huì)向該目標(biāo)Hart發(fā)出外部中斷通知,通常是置位Hart的mip.MEIP或sip.SEIP位。
4.2 階段二:Hart通知與陷入機(jī)制(軟硬件接口)
信號(hào)檢測(cè):目標(biāo)Hart檢測(cè)到其外部中斷掛起位(如mip.MEIP)被置位,并且對(duì)應(yīng)的中斷使能位(mie.MEIE)也已置位。
陷入觸發(fā):在mstatus寄存器中的全局中斷使能位(MIE)為1的前提下,Hart會(huì)停止當(dāng)前指令的執(zhí)行,進(jìn)入一個(gè)“陷入”(trap)狀態(tài)。
硬件自動(dòng)操作:Hart的硬件會(huì)自動(dòng)執(zhí)行一系列上下文保存操作:將當(dāng)前的程序計(jì)數(shù)器(PC)值保存到mepc寄存器;在mcause寄存器中設(shè)置一個(gè)值以表明陷入原因是外部中斷(例如,機(jī)器模式外部中斷的原因?yàn)?1);保存當(dāng)前的全局中斷使能狀態(tài),然后禁用全局中斷以防嵌套;最后,跳轉(zhuǎn)到mtvec寄存器所指向的地址開(kāi)始執(zhí)行異常處理代碼。
4.3 階段三:關(guān)鍵的聲明/完成協(xié)議(軟件域)
聲明(Claim):此時(shí),軟件中斷處理程序開(kāi)始執(zhí)行。它的首要任務(wù)是向PLIC聲明中斷。這通過(guò)讀取其Hart上下文專用的claim/complete寄存器來(lái)完成。PLIC硬件在響應(yīng)這次讀操作時(shí),會(huì)返回當(dāng)前待處理的、優(yōu)先級(jí)最高的中斷ID。這次讀取操作是原子的,并且?guī)в幸粋€(gè)至關(guān)重要的副作用:PLIC會(huì)自動(dòng)清除該中斷ID對(duì)應(yīng)的IP位。
服務(wù)(Service):軟件通過(guò)上一步獲得的ID,知道了中斷源。它利用這個(gè)ID來(lái)調(diào)用相應(yīng)的設(shè)備驅(qū)動(dòng)程序中的中斷服務(wù)例程(Interrupt Service Routine, ISR)。ISR執(zhí)行具體的工作,例如從UART的FIFO中讀取數(shù)據(jù)。一個(gè)常被忽略但至關(guān)重要的步驟是:ISR必須清除設(shè)備本身的中斷狀態(tài)。
完成(Complete):ISR執(zhí)行完畢后,軟件必須向PLIC發(fā)送完成信號(hào)。這通過(guò)將之前聲明時(shí)獲得的同一個(gè)中斷ID寫(xiě)回到同一個(gè)claim/complete寄存器來(lái)完成。這個(gè)寫(xiě)操作通知了中斷網(wǎng)關(guān),該中斷已被完全處理,允許網(wǎng)關(guān)在需要時(shí)轉(zhuǎn)發(fā)來(lái)自同一源的新中斷。
4.4 階段四:上下文恢復(fù)與中斷重使能(軟硬件接口)
返回:主陷入處理程序執(zhí)行一條特權(quán)返回指令(如mret)。
硬件自動(dòng)恢復(fù):Hart硬件自動(dòng)將mepc中保存的地址恢復(fù)到PC,并恢復(fù)陷入前的全局中斷使能狀態(tài),從而重新允許中斷的發(fā)生,程序從被中斷處繼續(xù)執(zhí)行。
下表清晰地總結(jié)了在中斷生命周期的每個(gè)環(huán)節(jié)中,各個(gè)實(shí)體的責(zé)任。
表1:中斷生命周期責(zé)任矩陣

Part 05 PLIC寄存器接口與內(nèi)存映射
PLIC是一個(gè)內(nèi)存映射設(shè)備,這意味著CPU通過(guò)標(biāo)準(zhǔn)的加載(load)和存儲(chǔ)(store)指令來(lái)訪問(wèn)其內(nèi)部寄存器。RISC-V規(guī)范定義了PLIC各個(gè)寄存器塊的相對(duì)偏移量,但并未強(qiáng)制規(guī)定其基地址?;刂酚删唧w的SoC平臺(tái)定義,軟件需要從設(shè)備樹(shù)(Device Tree)等平臺(tái)信息中獲取。
下表整合了來(lái)自多個(gè)規(guī)范文檔的信息,提供了一個(gè)全面的PLIC寄存器內(nèi)存映射參考。
表2:PLIC綜合寄存器內(nèi)存映射表

注:Base指PLIC模塊的內(nèi)存映射基地址,C指上下文ID,N指中斷源ID。
Part 06 PLIC軟件編程實(shí)踐指南
PLIC的聲明/完成協(xié)議為軟件和硬件之間建立了一份嚴(yán)格且不可協(xié)商的契約。對(duì)同一個(gè)寄存器地址的讀(聲明)和寫(xiě)(完成)所附帶的副作用是這份契約的核心,是整個(gè)外部中斷系統(tǒng)正確運(yùn)行的基礎(chǔ)。任何對(duì)該協(xié)議的違反,例如聲明后忘記完成,或是不聲明而直接輪詢?cè)O(shè)備,都會(huì)導(dǎo)致系統(tǒng)中斷功能失常甚至崩潰。
6.1 系統(tǒng)初始化與PLIC配置序列
在系統(tǒng)啟動(dòng)階段,通常由引導(dǎo)加載程序(bootloader)或操作系統(tǒng)內(nèi)核對(duì)PLIC進(jìn)行初始化。一個(gè)標(biāo)準(zhǔn)的配置序列如下:
全局禁用中斷:通過(guò)清除mstatus.MIE位,確保在配置過(guò)程中不會(huì)有中斷發(fā)生。
禁用所有源:遍歷所有PLIC中斷源的優(yōu)先級(jí)寄存器,將其值全部設(shè)為0,以禁用所有中斷源。
清除所有使能:清除所有上下文的所有中斷使能位。
設(shè)置默認(rèn)閾值:為所有目標(biāo)的優(yōu)先級(jí)閾值寄存器設(shè)置一個(gè)安全的默認(rèn)值。通常設(shè)為0,表示允許所有已使能的中斷;或設(shè)為最大值,表示暫時(shí)屏蔽所有中斷。
配置特定中斷:對(duì)于需要使用的每個(gè)設(shè)備中斷:
在其中斷源優(yōu)先級(jí)寄存器中設(shè)置一個(gè)非零的優(yōu)先級(jí)值(例如1到7)。
在中斷使能矩陣中,為需要接收該中斷的目標(biāo)上下文設(shè)置相應(yīng)的使能位。
設(shè)置陷入向量:配置mtvec寄存器,使其指向主陷入處理程序的入口地址。
全局使能中斷:設(shè)置mstatus.MIE位,重新允許中斷。
6.2 實(shí)現(xiàn)健壯的中斷服務(wù)例程(ISR)
一個(gè)健壯的PLIC中斷處理程序必須嚴(yán)格遵循“聲明 -> 服務(wù) -> 完成”的序列。以下是偽代碼示例和關(guān)鍵點(diǎn)說(shuō)明:

關(guān)鍵點(diǎn):在設(shè)備ISR(如uart0_isr())內(nèi)部,必須通過(guò)訪問(wèn)設(shè)備自身的寄存器來(lái)清除引起中斷的條件。對(duì)于電平觸發(fā)的中斷,如果不這樣做,設(shè)備會(huì)持續(xù)斷言中斷信號(hào),導(dǎo)致PLIC在完成當(dāng)前中斷后立即再次觸發(fā)同一個(gè)中斷,形成“中斷風(fēng)暴” 。
6.3 高級(jí)考量:多核與中斷處理循環(huán)
多核仲裁:PLIC的claim操作是原子的,這為多核環(huán)境提供了天然的硬件鎖。即使一個(gè)中斷被同時(shí)路由到多個(gè)Hart,PLIC也確保只有一個(gè)Hart能夠成功聲明它。當(dāng)一個(gè)Hart讀取claim寄存器并獲得中斷ID時(shí),其他Hart在同一時(shí)刻讀取只會(huì)得到0(表示無(wú)中斷)。
處理多個(gè)掛起中斷:為了提高效率,一個(gè)設(shè)計(jì)良好的中斷處理程序應(yīng)該在一個(gè)循環(huán)中處理中斷。在完成一個(gè)中斷后,應(yīng)立即嘗試再次聲明。如果返回非零ID,則表示有另一個(gè)中斷正在等待處理,應(yīng)繼續(xù)服務(wù)。此循環(huán)應(yīng)持續(xù)進(jìn)行,直到claim操作返回0為止。這避免了為處理背靠背發(fā)生的多個(gè)中斷而反復(fù)進(jìn)入和退出陷入處理程序的巨大開(kāi)銷(xiāo)。
Part 07 結(jié)論:PLIC作為RISC-V可擴(kuò)展性的基石
7.1 關(guān)鍵架構(gòu)特性總結(jié)
PLIC的設(shè)計(jì)體現(xiàn)了RISC-V架構(gòu)的核心理念。其關(guān)鍵特性包括:集中的硬件仲裁機(jī)制、基于優(yōu)先級(jí)的硬件排序、通過(guò)使能矩陣實(shí)現(xiàn)的靈活路由,以及通過(guò)每個(gè)目標(biāo)的獨(dú)立閾值實(shí)現(xiàn)的動(dòng)態(tài)屏蔽。這些特性共同構(gòu)成了一個(gè)強(qiáng)大而高效的全局中斷管理框架。
7.2 PLIC在使能復(fù)雜多外設(shè)系統(tǒng)中的作用
PLIC的架構(gòu)使其能夠從容應(yīng)對(duì)從僅有少量外設(shè)的簡(jiǎn)單微控制器到擁有數(shù)十個(gè)中斷源和多個(gè)核心、能夠運(yùn)行Linux等復(fù)雜操作系統(tǒng)的應(yīng)用處理器的擴(kuò)展需求。它通過(guò)硬件加速中斷仲裁,為構(gòu)建高性能、高響應(yīng)性的RISC-V系統(tǒng)提供了堅(jiān)實(shí)的基礎(chǔ)。
7.3 未來(lái)方向與演進(jìn)中的RISC-V中斷格局
PLIC規(guī)范體現(xiàn)了RISC-V的一個(gè)核心哲學(xué):定義一個(gè)最小化的、功能性的基線以確?;ゲ僮餍?,同時(shí)為實(shí)現(xiàn)者保留優(yōu)化和差異化的空間。這是一個(gè)雙刃劍。規(guī)范定義了寄存器的偏移量和行為,為通用軟件驅(qū)動(dòng)程序提供了基礎(chǔ)。然而,它將基地址、源和目標(biāo)的最大數(shù)量、優(yōu)先級(jí)級(jí)別數(shù)以及中斷觸發(fā)類(lèi)型(電平/邊沿)的配置等細(xì)節(jié)留給了實(shí)現(xiàn)者。
這種靈活性允許SoC設(shè)計(jì)者根據(jù)成本和需求量體裁衣,但同時(shí)也給軟件帶來(lái)了挑戰(zhàn)。操作系統(tǒng)需要一種機(jī)制來(lái)發(fā)現(xiàn)其所運(yùn)行硬件的具體參數(shù)。因此,設(shè)備樹(shù)(DeviceTree)等平臺(tái)描述機(jī)制在RISC-V生態(tài)中至關(guān)重要,它為軟件提供了一種標(biāo)準(zhǔn)化的方式來(lái)了解硬件的具體實(shí)現(xiàn)。
同時(shí),RISC-V中斷生態(tài)系統(tǒng)也在不斷演進(jìn)。雖然PLIC是當(dāng)前管理全局中斷的標(biāo)準(zhǔn),但新的架構(gòu)如核心本地中斷控制器(CLIC)正在為需要更低延遲和向量化中斷支持的場(chǎng)景提供替代方案。這表明RISC-V社區(qū)在中斷處理領(lǐng)域持續(xù)創(chuàng)新,以滿足更多樣化的應(yīng)用需求??偠灾?,PLIC的設(shè)計(jì)完美地展示了規(guī)范的簡(jiǎn)潔性/靈活性與軟件的復(fù)雜性/可移植性之間的權(quán)衡,這也是整個(gè)RISC-V生態(tài)系統(tǒng)的一個(gè)顯著特征。
易靈思公司介紹
易靈思是一家國(guó)產(chǎn)FPGA公司,總部位于深圳前海。公司憑借自主可控的Quantum硬件架構(gòu),采用邏輯和路由可以互換的XLR結(jié)構(gòu),實(shí)現(xiàn)了創(chuàng)新的產(chǎn)品設(shè)計(jì)與軟件算法,使得FPGA產(chǎn)品具備低功耗、小體積、高密度、高性能等優(yōu)勢(shì)。已量產(chǎn)的40nm Trion系列及16nm鈦金系列 FPGA產(chǎn)品,廣泛應(yīng)用于機(jī)器視覺(jué)、顯示、工業(yè)控制、醫(yī)療、汽車(chē)、AI和通信等終端領(lǐng)域。
重要產(chǎn)品

鈦金系列FPGA具有增強(qiáng)的Quantum架構(gòu),16nm工藝,35K 至 1,000K 邏輯單元,超高性能 300-500MHz,封裝最小可至3.5mm*3.4mm@60K LE,功耗低至競(jìng)爭(zhēng)對(duì)手的1/4,硬核資源豐富,最新產(chǎn)品TJ375現(xiàn)已量產(chǎn)。
-
處理器
+關(guān)注
關(guān)注
68文章
20118瀏覽量
244908 -
中斷控制器
+關(guān)注
關(guān)注
0文章
62瀏覽量
9769 -
RISC-V
+關(guān)注
關(guān)注
48文章
2723瀏覽量
51430
原文標(biāo)題:RISC-V平臺(tái)級(jí)中斷控制器(PLIC):架構(gòu)與操作機(jī)制綜合分析
文章出處:【微信號(hào):易靈思官微,微信公眾號(hào):易靈思官微】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
RISC-V內(nèi)核的32位通用微控制器 GD32VF103芯片簡(jiǎn)介
學(xué)習(xí)RISC-V入門(mén) 基于RISC-V架構(gòu)的開(kāi)源處理器及SoC研究
基于 RISC-V 的微控制器入門(mén)指南
ARM的中斷控制器
RISC-V應(yīng)用領(lǐng)域的拓展
RISC-V SoC 新開(kāi)源平臺(tái)發(fā)布 zqh_riscv
有沒(méi)有深度解析RISC-V的文章
RISC-V的異常處理機(jī)制復(fù)雜嗎?
RISC-V核、平臺(tái)和芯片該如何選擇?
256核!賽昉發(fā)布全新RISC-V眾核子系統(tǒng)IP平臺(tái)
三種RISC-V SoC系統(tǒng)芯片將提供各種計(jì)算和 I/O 功能
中斷控制器的驅(qū)動(dòng)解析(上)
中斷控制器級(jí)聯(lián)的類(lèi)型有哪幾種
PLIC平臺(tái)級(jí)中斷控制器介紹

易靈思Sapphire SoC中RISC-V平臺(tái)級(jí)中斷控制器深度解析
評(píng)論