李 巖 ,賈小梨 ,遲歡歡
(1.哈爾濱理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱150080;2.黑龍江省衛(wèi)生學(xué)校,黑龍江 哈爾濱150086)
航空航天、工業(yè)控制和核電站建設(shè)等領(lǐng)域的發(fā)展,對(duì)嵌入式操作系統(tǒng)的實(shí)時(shí)性要求越來(lái)越高。隨著FPGA的集成度和速度的不斷提高,嵌入式操作系統(tǒng)由硬件實(shí)現(xiàn)成為可能。傳統(tǒng)的中斷過(guò)程包括中斷請(qǐng)求、中斷響應(yīng)、現(xiàn)場(chǎng)保護(hù)、中斷服務(wù)程序執(zhí)行、現(xiàn)場(chǎng)恢復(fù)及中斷返回。對(duì)于用戶中斷,僅中斷服務(wù)程序執(zhí)行部分由CPU執(zhí)行,其他部分均由FPGA硬件實(shí)現(xiàn);而對(duì)于系統(tǒng)中斷,中斷過(guò)程全部由硬件實(shí)現(xiàn)。例如軟操作系統(tǒng)內(nèi)核的時(shí)鐘節(jié)拍中斷,其頻率越高,加載CPU也就越頻繁。若將其全部由硬件實(shí)現(xiàn),與CPU并行處理,就可以提高CPU的使用效率,滿足系統(tǒng)的實(shí)時(shí)性需要。
本文提出了一種基于PowerPC體系結(jié)構(gòu)的中斷管理方法,并將中斷管理模塊在FPGA系統(tǒng)上實(shí)現(xiàn)。
中斷管理總體結(jié)構(gòu)模型如圖1所示。中斷系統(tǒng)除負(fù)責(zé)通知系統(tǒng)中斷以外的所有外部中斷,還將發(fā)送中斷使能信號(hào)到硬核并識(shí)別中斷源[1]。在硬核中,中斷服務(wù)程序被稱為“中斷任務(wù)”,與普通任務(wù)一樣被硬核調(diào)度。當(dāng)外部中斷到來(lái)時(shí),觸發(fā)硬核的調(diào)度機(jī)制,使中斷任務(wù)實(shí)時(shí)執(zhí)行。而此時(shí),硬件實(shí)時(shí)操作系統(tǒng)已經(jīng)從處理器中的任務(wù)中使高優(yōu)先級(jí)的中斷任務(wù)搶占低優(yōu)先級(jí)的中斷任務(wù)[2]。
針對(duì)中斷請(qǐng)求和響應(yīng)方式的不同特點(diǎn),基于Power-PC體系結(jié)構(gòu)的中斷管理包括系統(tǒng)中斷管理和用戶中斷管理[3]。
(1)系統(tǒng)中斷:在 PowerPC體系結(jié)構(gòu)中,除了把外部引腳中斷和可屏蔽片內(nèi)模塊中斷稱為系統(tǒng)中斷外,其中外部引腳中斷由FPGA引腳觸發(fā):每個(gè)引腳對(duì)應(yīng)一個(gè)外部引腳中斷,多個(gè)外部引腳中斷對(duì)應(yīng)一個(gè)中斷處理任務(wù)??善帘纹瑑?nèi)模塊中斷由片內(nèi)模塊觸發(fā)[4]。系統(tǒng)中斷發(fā)生時(shí),將進(jìn)入統(tǒng)一的系統(tǒng)中斷服務(wù)程序入口,在執(zhí)行前只保存少量的必要寄存器數(shù)據(jù)即可。系統(tǒng)中斷處理過(guò)程如圖2所示。
系統(tǒng)中斷處理過(guò)程如下:
①中斷發(fā)生,硬件從中斷向量模塊找到統(tǒng)一的系統(tǒng)中斷入口地址,中斷任務(wù)從入口地址開始執(zhí)行。
②保存中斷控制器的值。
③同時(shí)從中斷源管理模塊中獲取中斷號(hào)以及從中斷向量管理模塊中獲取中斷向量地址。
④根據(jù)中斷向量入口地址執(zhí)行相應(yīng)的中斷任務(wù)。
⑤中斷處理結(jié)束,恢復(fù)保存寄存器的數(shù)值。
⑥中斷返回,從斷點(diǎn)處繼續(xù)運(yùn)行。
(2)用戶中斷:外部引腳中斷和可屏蔽片內(nèi)模塊中斷稱為用戶中斷[5]。如圖3所示。用戶中斷處理過(guò)程如下:
①中斷發(fā)生,硬件從中斷向量寄存器找到統(tǒng)一的系統(tǒng)中斷入口地址,中斷任務(wù)從入口地址開始執(zhí)行[6]。
②保存中斷控制器中寄存器和CPU寄存器的值,把寄存器的值寫入到相應(yīng)的棧空間管理器。如果是從任務(wù)進(jìn)入中斷,則需要從任務(wù)堆棧切換到中斷嵌套棧;如果是嵌套中斷,則不需要進(jìn)行堆棧切換。同時(shí)屏蔽比該中斷優(yōu)先級(jí)低的中斷。
③開中斷,獲得中斷源,然后根據(jù)該數(shù)據(jù)值,從中斷向量模塊中輸出該類中斷源的入口地址,找到中斷服務(wù)程序并執(zhí)行。
④中斷處理結(jié)束,切換堆棧指針。首先判斷中斷是從何處退出,如果是從中斷中退出任務(wù),則需要從中斷嵌套棧切換到任務(wù)堆棧;如果是從嵌套棧中退出任務(wù),則不需要進(jìn)行堆棧切換。
⑤恢復(fù)在第②步驟中保存的寄存器數(shù)值。
⑥退出中斷,繼續(xù)執(zhí)行被中斷的程序。
中斷管理模塊的內(nèi)部結(jié)構(gòu)如圖4所示,由中斷源管理邏輯、中斷向量管理邏輯、中斷嵌套邏輯和時(shí)鐘節(jié)拍中斷管理邏輯組成。其中,中斷源管理邏輯生成中斷源Id;中斷向量管理邏輯提供統(tǒng)一的入口地址;中斷嵌套邏輯判斷用戶中斷是否存在中斷嵌套,如果存在嵌套則不需要切換中斷嵌套棧,否則需要切換到任務(wù)棧中執(zhí)行;時(shí)鐘節(jié)拍中斷管理邏輯屬于系統(tǒng)中斷,該模塊包含一個(gè)時(shí)鐘計(jì)數(shù)器寄存器,當(dāng)時(shí)鐘節(jié)拍到達(dá)時(shí),執(zhí)行中斷任務(wù)。
硬件中斷管理同中斷控制器有很大的區(qū)別,當(dāng)中斷控制器的中斷使能有效時(shí),只有INTA_en為1,并且外部中斷到達(dá)時(shí),才執(zhí)行中斷處理,此時(shí)由操作系統(tǒng)的硬件中斷任務(wù)調(diào)度器統(tǒng)一調(diào)度,完成中斷任務(wù)的管理。大部分的操作不需要CPU參與管理,節(jié)約了CPU的資源。
在該中斷管理邏輯中定義了五類中斷源:外部設(shè)備請(qǐng)求中斷、故障強(qiáng)迫中斷、時(shí)鐘節(jié)拍請(qǐng)求中斷、數(shù)據(jù)通道中斷以及程序自陷中斷。其中,把外部設(shè)備請(qǐng)求中斷定義為用戶中斷,故障強(qiáng)迫中斷、時(shí)鐘節(jié)拍請(qǐng)求中斷、數(shù)據(jù)通道中斷以及程序自陷中斷定義為系統(tǒng)中斷。系統(tǒng)中斷直接進(jìn)行任務(wù)調(diào)度,用戶中斷則需要中斷響應(yīng)、任務(wù)調(diào)度及中斷現(xiàn)場(chǎng)恢復(fù)過(guò)程。一個(gè)FPGA引腳對(duì)應(yīng)一類中斷,一類中斷就有可能有不同的中斷類型,這樣設(shè)計(jì)可以很好地節(jié)約硬件資源。中斷控制器接收一類中斷,發(fā)出中斷使能,中斷源管理邏輯接收中斷使能信號(hào),識(shí)別該中斷源。中斷源管理邏輯主要任務(wù)是識(shí)別中斷源,采用圖5所示的邏輯電路確定該中斷屬于哪類中斷源。如果是同一類中斷源請(qǐng)求中斷,則生成觸發(fā)信號(hào),啟動(dòng)該邏輯,分配一個(gè)合適的中斷源Id;否則直接分配中斷源Id。
在設(shè)計(jì)前定義了五類中斷源,分別為ISR0、ISR1、ISR2、ISR3、ISR4。 其中,ISR0~I(xiàn)SR3 為系統(tǒng)中斷,即定義為B信號(hào);ISR4為用戶中斷,即定義為A信號(hào)。中斷源的類型號(hào)定義在 Idreg0~I(xiàn)dreg4寄存器中,定義的中斷類型號(hào)如表1所示。
中斷類型號(hào)的大小與中斷任務(wù)的優(yōu)先級(jí)有關(guān),中斷號(hào)越小,中斷任務(wù)優(yōu)先級(jí)越高。該邏輯的工作過(guò)程為:首先判斷中斷源為系統(tǒng)中斷還是用戶中斷,如果輸出A信號(hào)有效,則中斷源為用戶中斷;如果輸出B信號(hào)有效,則中斷源為系統(tǒng)中斷。如果是用戶中斷,則在中斷控制器給出中斷使能有效的情況下,經(jīng)過(guò)一個(gè)觸發(fā)器,生成一個(gè)觸發(fā)信號(hào),此時(shí)累加器接收該信號(hào),累加器加1,Idreg4與累加器相“或”,生成一個(gè)新的 Id,輸出該 Id,該用戶中斷在此最多支持15個(gè)外部中斷;如果為系統(tǒng)中斷,則選擇器從中斷類型號(hào)寄存器中選擇,直接輸出中斷類型號(hào)Id。
表1 中斷類型號(hào)寄存器表
在中斷向量管理邏輯中,主要任務(wù)是接收中斷控制器的中斷向量寄存器(IVR[x])的值,構(gòu)造一個(gè)中斷向量寄存器組,保存中斷向量值,通過(guò)選擇器,選擇中斷向量地址,指向特定中斷服務(wù)子程序IP核的入口地址。
在邏輯內(nèi)部建立一個(gè)中斷向量寄存器組IVRreg,在IVRreg0~3分別存放ISR0~3的中斷向量值,對(duì)應(yīng)的是系統(tǒng)中斷的中斷向量。用戶中斷的中斷向量地址,從IVRreg4開始,當(dāng)有用戶中斷發(fā)生時(shí),依次存入到該中斷向量寄存器中。
在中斷嵌套邏輯中,判斷中斷是否存在中斷嵌套,即IntNesting字段的值是否為0。如果為0,則中斷管理中不存在嵌套的情況,中斷直接返回,指針SP從中斷嵌套棧跳轉(zhuǎn)到任務(wù)棧;如果不為0,則表明在中斷管理中,存在中斷嵌套,中斷執(zhí)行完畢后,指針SP讀取中斷嵌套棧中的保存在中斷任務(wù)中的信息,響應(yīng)嵌套中斷。直到IntNesting為0,指針從中斷嵌套棧跳轉(zhuǎn)到任務(wù)棧。
時(shí)鐘節(jié)拍管理硬件化的方案如下:
(1)接收時(shí)鐘節(jié)拍中斷源,保存中斷任務(wù)的延時(shí)時(shí)間、任務(wù)ID及任務(wù)的優(yōu)先級(jí)。把這些信息保存在輸入寄存器TTDelayreg寄存器組中。TTDelayreg寄存器結(jié)構(gòu)如圖6所示。
(2)定時(shí)器產(chǎn)生時(shí)鐘節(jié)拍。對(duì)每一個(gè)時(shí)鐘節(jié)拍,掃描TTDelayreg寄存器,判斷是否有延時(shí)時(shí)間已滿。如果有,則將時(shí)鐘請(qǐng)求節(jié)拍中斷響應(yīng)信號(hào)置“1”,按高優(yōu)先級(jí)任務(wù)置任務(wù)就緒,執(zhí)行;如果沒(méi)有,則在任務(wù)的延時(shí)時(shí)間字段中,統(tǒng)一減去一個(gè)時(shí)鐘節(jié)拍。如此重復(fù)步驟(1)、(2),直到所有任務(wù)都結(jié)束,如果寄存器中的值為空,該時(shí)鐘節(jié)拍管理邏輯進(jìn)行休眠態(tài),直到有時(shí)鐘節(jié)拍中斷任務(wù)。
(3)時(shí)鐘節(jié)拍管理邏輯接收任務(wù)的恢復(fù)延時(shí)任務(wù)信號(hào),當(dāng)接收到該信號(hào)時(shí),時(shí)鐘請(qǐng)求節(jié)拍中斷響應(yīng)信號(hào)置“1”,任務(wù)的延時(shí)取消,置任務(wù)為就緒。
中斷源管理時(shí)序仿真波形圖如圖7所示。由圖7(仿真圖采用十進(jìn)制的方式)可知,在中斷源管理模塊中,定義了五類中斷源,每類中斷源對(duì)應(yīng)的是ISR寄存器中的相應(yīng)位,即當(dāng)中斷源ISR0有效時(shí),Idreg寄存器的值置00000001;當(dāng)中斷源ISR1有效時(shí),Idreg寄存器的值置00000010;當(dāng)中斷源ISR2有效時(shí),Idreg寄存器的值置00000100,詳細(xì)的Idreg寄存器的值如表 1所示。在中斷使能有效的情況下,ISR0有效,輸出 Id號(hào)為 1;ISR1有效,輸出 Id號(hào)為 2;ISR2有效,輸出 Id為 4,ISR3有效,輸出Id為 8;ISR4比較特殊,是用戶中斷,是通過(guò)一個(gè)觸發(fā)機(jī)制分配ID,響應(yīng)了三個(gè)用戶中斷,輸出Id分別為16~18。實(shí)驗(yàn)數(shù)據(jù)表明,同一的用戶中斷,獲得的 Id不同,說(shuō)明了設(shè)計(jì)的可行性和正確性。
仿真模擬管理為4個(gè)任務(wù)的延時(shí)任務(wù),初始化輸出寄存器為delayreg寄存器組,接收需要延時(shí)任務(wù)的prio,任務(wù)為ID,延時(shí)時(shí)間為delay_time,接收到的數(shù)據(jù)存儲(chǔ)在輸入寄存器TTDelayreg寄存器組中,啟動(dòng)定時(shí)器;接著掃描cancel、time_en控制信號(hào)。時(shí)鐘周期設(shè)為5個(gè)時(shí)鐘,每5個(gè)時(shí)鐘產(chǎn)生一次時(shí)鐘節(jié)拍,進(jìn)行一次所有延時(shí)任務(wù)的掃描。一旦掃描到規(guī)定的時(shí)間期滿或某個(gè)任務(wù)調(diào)用了cancel控制信號(hào),則取消任務(wù)延時(shí),此時(shí)任務(wù)需要調(diào)度,置tick_en為1,進(jìn)行中斷任務(wù)調(diào)度,否則延時(shí)任務(wù)的時(shí)間減 1。
時(shí)鐘節(jié)拍管理邏輯的仿真波形如圖8所示,優(yōu)先級(jí)為1的任務(wù),開始delayreg1的值為53(即二進(jìn)制為00110101),在經(jīng)過(guò)一個(gè)時(shí)鐘節(jié)拍后,delayreg2的值為37(即二進(jìn)制為 00100101),延時(shí)任務(wù)時(shí)間減 1。
該仿真實(shí)驗(yàn)結(jié)果表明,CPU只有在接收到tick_en信號(hào)后,才進(jìn)行延時(shí)任務(wù)處理,分配CPU資源,進(jìn)行任務(wù)調(diào)度,CPU不再需要不斷地掃描時(shí)鐘節(jié)拍中斷服務(wù)程序。從而提高了CPU的利用效率,提高了系統(tǒng)的執(zhí)行效率。
本文提出了基于PowerPC體系結(jié)構(gòu)的中斷管理設(shè)計(jì)思想,通過(guò)實(shí)驗(yàn)數(shù)據(jù)表明了該中斷管理的可行性和穩(wěn)定性。中斷管理的硬件化實(shí)現(xiàn),不僅有效減少了CPU掃描時(shí)鐘節(jié)拍中斷服務(wù)程序的頻率,有效提高了CPU的使用率,而且提高了系統(tǒng)的實(shí)時(shí)性。在硬件角上簡(jiǎn)化了設(shè)計(jì)、降低了成本,具有一定的使用價(jià)值。目前只在實(shí)驗(yàn)平臺(tái)上對(duì)各個(gè)模塊進(jìn)行了仿真,下一步將中斷管理進(jìn)行綜合,將中斷管理綜合的IP核應(yīng)用于硬實(shí)時(shí)操作系統(tǒng),以提高操作系統(tǒng)的運(yùn)行效率。
[1]KESSAL L,ABEL N,KARABERNOI S M,et al.Reconfigurable computingdesign methodology and hardware tasks scheduling for real-time image processing[J].Real-Time Image Processing,2008(3):131-147.
[2]浦漢來(lái),劉昊,凌明.小型嵌入式操作系統(tǒng)中斷管理的實(shí)現(xiàn)[J].電子器件,2003,26(2):218-221.
[3]雷紅衛(wèi),桑楠,熊光澤.嵌入式實(shí)時(shí)系統(tǒng)中斷管理技術(shù)研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004(5):16-19.
[4]趙民德,姜旭峰.基于PowerPC體系結(jié)構(gòu)的嵌入式操作系統(tǒng)的中斷管理方法:中國(guó),200510060734.X[P].2006-06-07[2010-01-02].
[5]Lin Chengmin.Nested interrupt analysis of low cost and high performance embedded systems using GSPN framework[M].Maruzen Co.,Ltd.,Nihonbashi,Tokyo,103-8691,Japan.2010:2509-2519.
[6]胡威,陳天洲,謝斌,等.一種構(gòu)件化嵌入式操作系統(tǒng)中斷的實(shí)現(xiàn)方法:中國(guó),200610154795.7[P].2007-05-16[2010-01-02].