【關鍵詞】中斷系統;RISC-V;APLIC
RISC-V作為RISC系列指令集的第五代產品,因其模塊化,可擴展,免費開源,適應新時代智能互聯的要求等原因,在近10年里不斷成為芯片指令集架構的第三極,與x86,ARM共同組成當今世界主流的指令集系統[1]。
當前RISC-V的中斷系統會在核外存在一個PLIC或IMSIC(Incoming MSI Controller)模塊對中斷進行預處理[2-3]。但PLIC無法對MSI中斷做出處理,IMSIC也僅能夠處理MSI中斷。APLIC中將線中斷轉化為MSI的功能使得IMSIC僅需接收MSI中斷就可以額外處理線中斷。當系統中無需處理MSI中斷時,僅靠APLIC也可以處理線中斷。對于操作系統來說,這種切換僅需使用軟件改變對寄存器的配置便可以實現,這將極大提高系統的靈活性[4]。
由于APLIC的中斷域的存在,在滿足了大型系統所需求的SMP(Symmetric Multiprocessing)的基礎上,S級中斷域允許多個HART以S模式運行操作系統直接控制它接收到的中斷,從而避免了調用M模式來執行,這極大提高了CPU的工作效率[5]。同時因為對每個HART都劃分在不同級別的中斷域里,也能更好配合對相應中斷域的PMP(Physical MemoryProtection)物理內存保護。因此APLIC的設計將極大提高整個RISC-V系統的性能和穩定性。
此外APLIC相比現在使用的PLIC,具有更多的可配置性,比如寄存器的大端小端,中斷源的觸發方式,提供用于軟件測試中斷傳輸延遲的IFORCE和GENMSI寄存器等。
SOC的外設通過外部中斷線wire將中斷發送給APLIC。APLIC內的內存映射寄存器都可以通過對SOC內存特定地址的寫入來實現配置。

在配置完成后,如果是直接傳送模式,APLIC將判斷外設輸入的中斷線上是否有中斷信號,中斷信號應該發送給哪一個RISC-V的HART,然后將對應HART的線中斷拉高,通知HART來特定內存映射寄存器讀取相應的中斷ID和中斷優先級。
如果是MSI模式,在收到外設的線中斷后會將該信號轉換成一次寫操作,寫在對應的內存空間中。對該內存空間的寫會產生一個信號通知IMSIC有中斷傳入。
對于一個APLIC來說,一般包含多個域,對于APLIC支持的每個中斷域,都有一個專用的內存映射控制區域。中斷域的控制區域由一組32位寄存器填充,用來控制APLIC的功能。每個中斷域的內存映射控制區域有自己獨立的物理控制接口,HART可以通過基于頁表的地址轉換輕松地調節對每個域的訪問。該接口在系統的地址空間中進行內存映射,這樣就方便PMP對每個中斷域進行保護。
因此本文設計了如圖1所示的三個域,兩個M域和一個S域。每個域根據軟件的控制可以對應一些特定的HART。在根域中的管理HART 0是僅限根域的HART,它基本上控制著根域所有中斷源的委托情況。
APLIC的每個中斷域劃分成5個組成部分:APLIC_REGS,IP_IE, MSI_CTRL, DIRECT_CTRL, DELEG_CTRL。
(一)REG_CTRL模塊
該模塊確定了每個中斷源的中斷觸發模式(邊沿觸發還是電平觸發還是分離模式還是不活躍模式),中斷源的委托情況及委托子域的Idex,域的全局中斷,寄存器的大端小端,域的工作模式,中斷源的優先級,中斷源的EIID,目標HART的HART_IDEX,軟件控制掛起使能,MSI地址配置,強制MSI產生,IDC(interrupt delivery control)功能的實現包括每個源的中斷傳遞使能,中斷閾值,強制中斷,最高優先級寄存器的賦值和清除等。
(二)IP_IE模塊
該模塊主要是對中斷源和軟件配置的掛起和使能進行管理。該模塊包含以下幾種模式:
1.分離模式
僅通過對setip或setipnum寄存器的相關寫入將掛起位設置為1。
當在APLIC處claim中斷或由MSI轉發中斷,或通過對in_clrip寄存器或clripnum的相關寫入則會清除掛起位。
2.邊沿觸發模式
通過整流輸入值的低到高轉換,或通過對seti p或setipnum寄存器的相關寫入,將掛起位設置為1。
當在APLIC處claim中斷或由MSI轉發中斷,或通過對in_clrip寄存器或clripnum的相關寫入則會清除掛起位。
3.電平觸發模式,工作在直傳模式
每當整流輸入值為高時,掛起位被設置為1。無法通過寫入setip或setipnum寄存器來設置掛起位。
每當整流輸入值為低時,將清除掛起位。掛起位不能通過APLIC處的中斷claim清除,也不能通過寫入in_clrip寄存器或clripnum清除。
4.電平觸發模式,工作在MSI模式
通過整流輸入值中的低到高轉變將掛起位設置為1。當整流輸入值為高時,掛起位也可以通過對setip或setipnum寄存器的相關寫入來設置,但當整流輸入數值為低時則不設置。
整流輸入值為低,或者發送了MSI,或者對in_clrip,clripnum寫入時都會清除對應的掛起位。
5.不活躍模式
對于中斷源的掛起位一直為低電平不會發生變化。
上述的寄存器皆是內存映射寄存器,在REG_CTRL模塊中進行賦值,整流輸入值 = (輸入線中斷的值) XOR (源是否反轉)。當源的觸發條件為下降沿觸發或者低電平觸發時,該源被稱為反轉源。
(三)DIRECT_CTRL模塊
本文采用二叉樹法實現優先級比較的模塊priority_arb。按照從上到下的順序,中斷標識從大到小排序,輸入中斷源的優先級編號。中斷源的輸入數量最大為1023個,因此一級采用512個比較器進行兩兩比較,二級采用256個比較器,以此類推一共分十級。第一級比較器的輸入前還會有一個0值比較器,與輸入的中斷源優先級編號相比,如果相等輸出優先級編號1,如果不同,輸出原優先級編號。
比較器的上端輸入如果大于等于下端輸入,則比較器的輸出max_prio為下端輸入的優先級編號,flag輸出0;反之,如果上端輸入小于下端輸入,則比較器的max_prio為上端輸入的優先級編號,flag輸出為1。flag是用來最終確定最大優先級的源在哪個端口輸入的。后續用每一級的flag最終確定中斷源ID。
如果寫入的 IPRIO為0,則優先級為1。優先級號越小,優先級越高。當中斷源具有相同的優先級時,標識號較低的源具有最高的優先級。
排序完成后要將最大優先級編號和中斷標識回寫給在REG_CTRL的IDC.topi寄存器,拉高irq,方便hart后續讀取IDC.claimi寄存器。當Hart讀取完成后清除該源的中斷掛起位然后繼續排序,開始新的一輪循環。
(四)MSI_CTRL模塊
模塊內,最重要的功能分為兩塊,分別為計算不同級中斷域的MSI地址和發送MSI兩個功能。
因為APLIC發送的MSI是發送給IMSIC的中斷文件的,因此地址的計算應該滿足IMSIC的設計要求。由于S級的地址比M級域僅僅多出了Guest Idex的影響, M級的過程只需省略Guest Idex即可。
為滿足實際的應用需求,默認發送順序是根域先于其他M級域先于S域。對于M級域,計算完該域的地址后,需要按中斷標識號最低源優先發送MSI的規則,選擇出該源的MSI地址。
(五)DELEG_CTRL模塊
根域的M級REG_CTRL可以委托給子域,子域可以是M級,也可以是S級的中斷域。非根域的M級域也可以委托給不同的S級域,但S級域不能繼續委托給S級域。
其中包含的譯碼模塊類似于加了使能位的譯碼器。當譯碼器選擇一個中斷域后,被選中的域才將對應的輸入源實現,否則將該域的該源設置為Inactive模式。
(一)MSI傳遞仿真
測試了地址計算的正確性及不同中斷域從APB接口將中斷發送的過程。
由于仿真中,將源1設置根域,源2,3在S域因此會先發送根域的中斷,圖2表示的是經過計算后的發送地址。由發送結果可知,最終滿足APB的時序規范,也能正確地計算出MSI的地址。

(二)直接傳遞仿真
驗證了對掛起位的影響,優先級排序是否正確,以及HART能否正確讀到最高優先級的優先級編號和中斷ID。
圖3表示將源2,3委托到S域,并且兩個源同時被外部中斷現拉高發給同一個HART 1,這時會根據優先級仲裁,將優先級標識號小的中斷源先處理,然后清除該源的掛起位,之后再處理剩余的中斷源。這里源2的優先級為2,源3的優先級編號為3,因此拉高irq后優先清除源2的掛起位。

在計算優先級的同時,會返回中斷的最大優先級和中斷源ID用來賦值topi寄存器,方便HART快速獲取中斷的信息并進入中斷處理程序。
本文首次根據AIA規范,完整地設計了一款用于RISC-V處理器核的APLIC,可直接接收處理外部線中斷,也可將外部線中斷轉化成MSI,配合IMSIC讓系統能同時處理線中斷和MSI中斷。相比現在使用的PLIC增加了供軟件測試中斷延遲的寄存器,使APLIC的功能更加豐富;通過劃分中斷域,免去HART切換特權級的步驟,有效提高CPU處理中斷的速度;通過直接對寄存器寫入,確定需要路由的目標HART,降低了軟件的復雜度;配合HART的PMP提高系統穩定性。設計符合AIA高級中斷架構的要求。
參考文獻:
[1] 倪光南. 聚焦開源RISC-V 發展中國芯片產業[J]. 前瞻科技,2022,1(3):84-89.
[2] 任強. 基于RISC--V 處理器的虛擬內存管理的研究與實現[D]. 中國科學院大學,2022.
[3] 徐可凡. 基于RISC-V 的中斷系統的研究與設計[D]. 西安電子科技大學,2020.
[4] 馮建文. 基于RISC-V 架構的中斷實驗設計[J]. 實驗室研究與探索,2022,41(12):34-38.
[5] 任宇浩, 喬東海. 基于FPGA 的PLIC 中斷控制器設計[C]// 四川省聲學學會, 上海聲學學會, 山東聲學學會, 北京聲學學會, 西安聲學學會.2022’年中國西部聲學學術交流會論文集. 蘇州大學電子信息學院;,2022:4.