chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

易靈思官微 ? 來(lái)源:易靈思官微 ? 2025-11-08 09:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

隨著 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)流。

50ec4ce0-b9ee-11f0-8c8f-92fbcf53809c.png

圖 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é)任矩陣

5150bf90-b9ee-11f0-8c8f-92fbcf53809c.jpg

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)存映射表

51c9c58e-b9ee-11f0-8c8f-92fbcf53809c.jpg

注: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ō)明:

522be7b4-b9ee-11f0-8c8f-92fbcf53809c.png

關(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)品

5352671c-b9ee-11f0-8c8f-92fbcf53809c.png

鈦金系列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)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(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)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RISC-V內(nèi)核的32位通用微控制器 GD32VF103芯片簡(jiǎn)介

    RISC-V指令集架構(gòu),支持RV32IMAC指令子集的組合 2級(jí)變長(zhǎng)流水線微架構(gòu),配備精簡(jiǎn)的指令預(yù)取單元和動(dòng)態(tài)分支預(yù)測(cè)單元 增強(qiáng)的內(nèi)核中斷控制器(ECLIC) 支持標(biāo)準(zhǔn)JTAG接口和RISC
    發(fā)表于 10-23 06:46

    學(xué)習(xí)RISC-V入門(mén) 基于RISC-V架構(gòu)的開(kāi)源處理SoC研究

    大量的IP核,采用類(lèi)似LEON3的GRLIB庫(kù)的方式,所有的IP核都是即插即用,RISC-V VHDL提供了一個(gè)AXI總線,IP核都掛載在該總線上。IP核包括:UART、GPIO、中斷控制器、以太網(wǎng)
    發(fā)表于 07-27 18:09

    基于 RISC-V 的微控制器入門(mén)指南

    的許多微控制器平臺(tái)相對(duì)貧乏,因此開(kāi)發(fā)人員選擇深入探索 RISC-V 后,就會(huì)發(fā)現(xiàn)可用的選擇和資源很少。權(quán)衡取舍不失為良策,具體取決于最終應(yīng)用以及開(kāi)發(fā)人員的偏好和資源。
    發(fā)表于 08-21 18:35

    ARM的中斷控制器

    6、決定處理的掛起的最高優(yōu)先級(jí) 當(dāng)使能時(shí),每一個(gè)CPU interface會(huì)獲取掛起pending列表優(yōu)先級(jí)最高的中斷,然后決定是否需
    發(fā)表于 08-29 08:39

    RISC-V應(yīng)用領(lǐng)域的拓展

    公開(kāi)了其在RISC-V方面的研究,指出了在深度神經(jīng)網(wǎng)絡(luò)應(yīng)用RISC-V指令集的可能性;三星也披露了將推出多款采用RISC-V內(nèi)核架構(gòu)的芯片
    發(fā)表于 06-18 20:57

    RISC-V SoC 新開(kāi)源平臺(tái)發(fā)布 zqh_riscv

    介紹zqh_riscv是一套開(kāi)源SoC開(kāi)發(fā)平臺(tái),核心部分包含處理core、cache、片內(nèi)互聯(lián)總線、中斷控制器、memory控制器、片內(nèi)總
    發(fā)表于 03-24 16:07

    有沒(méi)有深度解析RISC-V的文章

    接觸了很多RISC-V的芯片,一直在應(yīng)用層使用,沒(méi)有對(duì)底層進(jìn)行了解,有沒(méi)有RISC-V底層的解析?
    發(fā)表于 03-22 22:59

    RISC-V的異常處理機(jī)制復(fù)雜嗎?

    RISC-V對(duì)于異常處理的實(shí)現(xiàn)復(fù)雜嗎?應(yīng)該沒(méi)有ARM Cortex系列的那樣復(fù)雜,有NVIC或GIC中斷控制器吧。那么它執(zhí)行異常處理的流程是怎樣的?
    發(fā)表于 04-21 15:00

    RISC-V核、平臺(tái)和芯片該如何選擇?

    (1)、芯片設(shè)計(jì)者可選擇RISC-V 核 和SoC 平臺(tái) 構(gòu)建自己的芯片。比如,使用 PULPino 平臺(tái)開(kāi)發(fā) SoC 芯片,內(nèi)核使用 RI
    發(fā)表于 06-21 20:34

    256核!賽昉發(fā)布全新RISC-V眾核子系統(tǒng)IP平臺(tái)

    、低延遲的RISC-V眾核子系統(tǒng)IP平臺(tái) ,該平臺(tái)還包括:RISC-V Debug Module調(diào)試接口,RISC-V
    發(fā)表于 11-29 13:37

    三種RISC-V SoC系統(tǒng)芯片將提供各種計(jì)算和 I/O 功能

    RISC-V 是多功能高效嵌入式計(jì)算解決方案,” (中國(guó))總經(jīng)理,銷(xiāo)售兼市場(chǎng)副總裁郭晶表示,“我們的 Trion?系列 SoC 系統(tǒng)
    發(fā)表于 07-02 17:20 ?1965次閱讀

    中斷控制器的驅(qū)動(dòng)解析(上)

    這里主要分析 linux kernel GIC v3 中斷控制器的代碼(drivers/irqchip/irq-gic-v3.c)。設(shè)備樹(shù)先來(lái)看下一個(gè)
    發(fā)表于 12-04 16:36 ?10次下載
    <b class='flag-5'>中斷控制器</b>的驅(qū)動(dòng)<b class='flag-5'>解析</b>(上)

    STM32外部中斷控制器EXTI詳解

    什么是外部中斷控制器,外部中斷控制器在STM32芯片中處于什么位置,它的作用是什么,EXTI與GPIO的映射關(guān)系?
    的頭像 發(fā)表于 04-20 11:44 ?3628次閱讀
    STM32外部<b class='flag-5'>中斷控制器</b>EXTI詳解

    中斷控制器級(jí)聯(lián)的類(lèi)型有哪幾種

    有兩種類(lèi)型: 機(jī)器級(jí)別的級(jí)聯(lián),級(jí)聯(lián)的初始化代碼理所當(dāng)然地位于板子的初始化代碼(arch/xxx/mach-xxx),因?yàn)橹灰鞘褂眠@個(gè)板子或SOC的設(shè)備,必然要使用這個(gè)子控制器。 設(shè)備級(jí)別的級(jí)聯(lián),因?yàn)樵撛O(shè)備并不一定是系統(tǒng)的標(biāo)配
    的頭像 發(fā)表于 09-28 14:15 ?1233次閱讀
    <b class='flag-5'>中斷控制器</b>級(jí)聯(lián)的類(lèi)型有哪幾種

    PLIC平臺(tái)級(jí)中斷控制器介紹

    平臺(tái)級(jí)中斷控制器(PLIC) PLIC:Platform-Level Interrupt Controller. 實(shí)際上,除了CLINT管理的軟件中斷和定時(shí)
    的頭像 發(fā)表于 10-07 17:53 ?2111次閱讀
    PLIC<b class='flag-5'>平臺(tái)</b><b class='flag-5'>級(jí)</b><b class='flag-5'>中斷控制器</b>介紹