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