李乾坤,張恕明,尹達(dá)一
(中國(guó)科學(xué)院上海技術(shù)物理研究所,上海200083)
Xilinx公司 Virtex-ii Pro系列的 XC2VP40 FPGA內(nèi)嵌有PowerPC405核。開(kāi)發(fā)者可以使用開(kāi)發(fā)工具XPS在芯片內(nèi)部構(gòu)建以PowerPC為核心的片上系統(tǒng)。除內(nèi)核外,時(shí)鐘、JTAG、定時(shí)器等模塊均可由FPGA內(nèi)的邏輯資源定制而成。
PowerPC內(nèi)核支持外部中斷,并可通過(guò)中斷控制器進(jìn)行擴(kuò)展,XPS亦針對(duì)中斷控制部分提供了完整的驅(qū)動(dòng)程序。由于中斷系統(tǒng)可以提高處理器的利用率,增強(qiáng)處理器的實(shí)時(shí)性,是微處理器系統(tǒng)的重要組成部分。因此,深入研究PowerPC的中斷系統(tǒng)對(duì)于更合理高效地使用PowerPC有著十分重要的意義。
下面就針對(duì)PowerPC中斷系統(tǒng)展開(kāi)討論。
首先對(duì)兩個(gè)名詞進(jìn)行一下說(shuō)明:
異常:處理器檢測(cè)到的不可預(yù)測(cè)的錯(cuò)誤事件。
中斷:處理器檢測(cè)到異常時(shí)自動(dòng)啟動(dòng)的處理過(guò)程。
PowerPC支持16種異常處理,對(duì)應(yīng)16種中斷源。其中Critical Input與External兩種中斷源來(lái)自外部輸入,也稱(chēng)之為外部中斷。
Critical Input中斷優(yōu)先級(jí)要高于External中斷,當(dāng)兩個(gè)中斷同時(shí)發(fā)生時(shí),Critical Input中斷響應(yīng)先于External中斷執(zhí)行。另外,PowerPC支持中斷嵌套,這意味著Critical Input中斷可以終止正在執(zhí)行的External中斷響應(yīng)過(guò)程。
以Critical Input為例,PowerPC外部中斷響應(yīng)流程如下:
1)將中斷返回地址存入寄存器SRR2(External為SRR0)。
2)將機(jī)器狀態(tài)寄存器MSR中的內(nèi)容存入寄存器 SRR3(External為 SRR1)。
3)將新的機(jī)器狀態(tài)存入寄存器MSR。
4)同步處理器上下文。
5)轉(zhuǎn)入中斷服務(wù)程序。
6)中斷服務(wù)程序結(jié)束,恢復(fù)寄存器MSR的狀態(tài)。
7)處理器上下文同步。
8)跳到SRR2(External為SRR0)中存的返回地址。中斷響應(yīng)完畢。
那么,處理器是怎樣找到中斷服務(wù)程序的?
首先解釋一下中斷矢量表這個(gè)概念。為使異常得到相應(yīng)中斷服務(wù)程序的處理,需要首先建立中斷矢量表。中斷矢量表中每隔一段地址會(huì)存放一段代碼,分別對(duì)應(yīng)不同的異常。
當(dāng)發(fā)生異常時(shí),系統(tǒng)會(huì)通過(guò)中斷矢量表的基址以及相應(yīng)的偏移量找到對(duì)應(yīng)的代碼,進(jìn)而找到中斷服務(wù)程序。其中,中斷矢量表的基址存儲(chǔ)在寄存器EVPR中。由于中斷矢量表中各代碼段存儲(chǔ)容量的限制(大部分為256Byte),中斷矢量表往往不直接存儲(chǔ)中斷服務(wù)程序,而是存儲(chǔ)指向中斷服務(wù)程序的指針。PowerPC異常處理詳細(xì)流程如圖1所示。
圖1 PowerPC異常處理流程圖
Power PC提供了兩個(gè)外部中斷入口,這在有較多中斷輸入的情況下是不能滿足需求的。為了解決這個(gè)問(wèn)題,可以使用中斷控制器。
每個(gè)中斷控制器有32個(gè)中斷源輸入接口,1個(gè)中斷信號(hào)輸出接口。當(dāng)一個(gè)或多個(gè)輸入端有中斷輸入時(shí),輸出端輸出中斷信號(hào)。
中斷控制器中包含一個(gè)32位寄存器,其每一位對(duì)應(yīng)一個(gè)中斷輸入端。當(dāng)有中斷輸入時(shí),對(duì)應(yīng)的標(biāo)志位便被置1。中斷響應(yīng)過(guò)程中,從低位到高位對(duì)寄存器中的標(biāo)志位進(jìn)行查詢(xún),從而判斷中斷來(lái)源。因此,對(duì)應(yīng)標(biāo)志位的位置決定了中斷響應(yīng)優(yōu)先級(jí)。
使用XPS的BSB構(gòu)建系統(tǒng)時(shí),即使只有一個(gè)中斷源,一般也會(huì)包括中斷控制器,用以連接外設(shè)與處理器內(nèi)核。
一個(gè)Timer模塊包括兩個(gè)Timer,可以實(shí)現(xiàn)三種模式:Capture mode,Generate mode 及 PWM mode。
其中兩個(gè)Timer可以分別配置成Capture mode與Generate mode同時(shí)工作,對(duì)應(yīng)不同的脈沖輸出。兩個(gè)Timer合作可以實(shí)現(xiàn)PWM mode,對(duì)應(yīng)單一的PWM輸出。
Timer模塊支持中斷輸出,但兩個(gè)Timer共用一個(gè)中斷輸出端口。
為了對(duì)中斷響應(yīng)過(guò)程進(jìn)行分析,構(gòu)建如圖2所示系統(tǒng)。該系統(tǒng)主要由PowerPC內(nèi)核,中斷控制器,Timer,RS232模塊,時(shí)鐘模塊(該模塊未在圖中顯示)等組成。各模塊均連接PLB總線。其中時(shí)鐘模塊提供80MHz時(shí)鐘輸入,Timer與RS232的中斷輸出端接到中斷控制器的不同輸入端,中斷控制器的輸出接到處理器的External Input端。
圖2 中斷測(cè)試系統(tǒng)框圖(未包含時(shí)鐘模塊)
XPS為中斷系統(tǒng)提供了完整的中斷服務(wù)程序。
4.2.1 外設(shè)的信息結(jié)構(gòu)體
在介紹中斷服務(wù)程序之前,先解釋一下外設(shè)的信息結(jié)構(gòu)體。XPS提供的代碼為每個(gè)外設(shè)(包括中斷控制器)都建立了一個(gè)結(jié)構(gòu)體。結(jié)構(gòu)體中包含了該外設(shè)的ID,基址,狀態(tài),中斷服務(wù)程序入口,中斷服務(wù)參數(shù)等信息。當(dāng)需要對(duì)某個(gè)外設(shè)進(jìn)行操作時(shí),首先會(huì)找到其對(duì)應(yīng)的結(jié)構(gòu)體,然后讀取外設(shè)信息,進(jìn)而對(duì)其進(jìn)行操作。
而對(duì)于中斷控制器,其與一般外設(shè)又有一定的區(qū)別,其結(jié)構(gòu)體中不是包括單獨(dú)的中斷服務(wù)程序入口與參數(shù),而是包括一個(gè)中斷服務(wù)及參數(shù)的列表。列表的長(zhǎng)度為32,即每列對(duì)應(yīng)一個(gè)輸入端。
處理器通過(guò)中斷矢量表進(jìn)入中斷服務(wù)程序后,會(huì)首先根據(jù)系統(tǒng)自動(dòng)傳入的參數(shù)ID找到對(duì)應(yīng)中斷控制器的信息結(jié)構(gòu)體,然后查詢(xún)中斷控制器的輸入,通過(guò)結(jié)構(gòu)體內(nèi)的中斷服務(wù)列表找到對(duì)應(yīng)的中斷服務(wù)子程序。
在對(duì)Timer進(jìn)行操作前,亦需先找到其對(duì)應(yīng)的信息結(jié)構(gòu)體。每個(gè)Timer有一個(gè)中斷輸出,但一個(gè)Timer包括兩個(gè)計(jì)數(shù)器。因此,必須首先判斷中斷由哪個(gè)計(jì)數(shù)器引起,然后再調(diào)用相應(yīng)的子程序。
4.2.2 中斷服務(wù)流程
有了以上知識(shí),來(lái)看一下XPS提供的中斷服務(wù)程序流程是怎樣的。如圖3所示,在中斷服務(wù)函數(shù)中,程序首先找到中斷控制器的信息結(jié)構(gòu)體,然后判斷中斷來(lái)源(這里為 Timer)以調(diào)用對(duì)應(yīng)的函數(shù)(Timer中斷服務(wù)函數(shù)),然后清除中斷控制器輸出。在Timer中斷服務(wù)函數(shù)中,首先找到Timer模塊的信息結(jié)構(gòu)體,然后判斷中斷由哪個(gè)Timer引發(fā),將結(jié)果傳入子函數(shù),在子函數(shù)中實(shí)現(xiàn)相關(guān)操作。子函數(shù)返回后,清除timer中斷輸出。
圖3 XPS提供的中斷服務(wù)流程
下面對(duì)中斷響應(yīng)過(guò)程的時(shí)間參數(shù)進(jìn)行測(cè)量。
4.3.1 需要測(cè)量的參數(shù)
定義T1,T2,T3三個(gè)參數(shù),它們的意義如下:
T1:一次中斷響應(yīng)過(guò)程的總時(shí)間。即從外設(shè)發(fā)出中斷信號(hào)到中斷響應(yīng)結(jié)束的時(shí)間。
T2:由Timer模塊發(fā)出中斷申請(qǐng)到執(zhí)行自定義操作需要的時(shí)間。注意,這里的自定義操作為清Timer中斷,位于圖3所示的自定義函數(shù)中。這樣會(huì)導(dǎo)致響應(yīng)一次中斷響應(yīng)過(guò)程中兩次清Timer中斷,不過(guò)這并不影響測(cè)量結(jié)果。
T3:中斷控制器的延遲時(shí)間。即Timer模塊發(fā)出中斷申請(qǐng)到中斷控制器發(fā)出中斷申請(qǐng)的時(shí)間間隔。
4.3.2 測(cè)量方法
1)上位機(jī)通過(guò)RS232向PowerPC發(fā)出指令,啟動(dòng)Timer模塊(只使用其中一個(gè)Timer),Timer設(shè)定為generate mode,每?jī)蓚€(gè)時(shí)鐘周期產(chǎn)生一次中斷。這樣可以保證每次中斷響應(yīng)結(jié)束之前產(chǎn)生下次中斷的觸發(fā)脈沖,使系統(tǒng)每處理完一次中斷后立刻進(jìn)入下一次中斷的響應(yīng)。這時(shí)Timer模塊中斷信號(hào)的周期即等效于系統(tǒng)一次中斷響應(yīng)過(guò)程的周期T1。上面已經(jīng)提到,每一次中斷響應(yīng)過(guò)程中會(huì)有兩次清中斷的操作,因此一個(gè)周期中會(huì)產(chǎn)生兩次中斷信號(hào)的變化,但不會(huì)影響測(cè)量結(jié)果。
2)Timer保持generate mode不變,但調(diào)整其中斷發(fā)生周期,使其遠(yuǎn)大于中斷響應(yīng)過(guò)程的總時(shí)間(依據(jù)上一步測(cè)得的結(jié)果),以保證產(chǎn)生下次中斷信號(hào)時(shí),上次中斷服務(wù)已經(jīng)結(jié)束。測(cè)量Timer模塊中斷發(fā)生到被清除的時(shí)間,即為中斷發(fā)生到執(zhí)行自定義操作的時(shí)間T2。同時(shí)可測(cè)到T3。
4.3.3 測(cè)量工具
使用Tektronix公司TDS3014B示波器進(jìn)行測(cè)量。
4.3.4 測(cè)量結(jié)果
T1:24.40μs。約為1952個(gè)時(shí)鐘周期。
T2:10.36μs。約為829個(gè)時(shí)鐘周期。
T3:41.00 -41.50ns。約為 3.3 個(gè)時(shí)鐘周期。
通過(guò)分析PowerPC異常處理流程及中斷服務(wù)函數(shù)可以發(fā)現(xiàn),能夠進(jìn)行修改的過(guò)程只有中斷服務(wù)函數(shù)部分。根據(jù)之前的分析,執(zhí)行一次中斷服務(wù)函數(shù)會(huì)發(fā)生兩次函數(shù)調(diào)用以及數(shù)次對(duì)外設(shè)信息結(jié)構(gòu)體的查找與讀取。這樣的優(yōu)點(diǎn)是代碼移植性強(qiáng)且安全性好。但在對(duì)外設(shè)信息完全掌握的前提下,可以不通過(guò)信息結(jié)構(gòu)體而直接對(duì)外設(shè)進(jìn)行操作,亦可以不通過(guò)函數(shù)調(diào)用而是直接編寫(xiě)代碼。簡(jiǎn)化后的中斷服務(wù)函數(shù)流程如圖4所示。
此時(shí)測(cè)得的各參數(shù)如下:
T1:14.72 -14.73μs。約為1178 個(gè)時(shí)鐘周期。
T2:6.588μs。約為527個(gè)時(shí)鐘周期。
T3:41.00 -41.40ns。約為 3.3 個(gè)時(shí)鐘周期。
通過(guò)對(duì)比數(shù)據(jù)可以發(fā)現(xiàn),T1縮短為原來(lái)的60.35%,T2縮短為原來(lái)的 63.57%。
圖4 簡(jiǎn)化后的中斷服務(wù)函數(shù)流程圖
在以上的系統(tǒng)中,Timer中斷通過(guò)中斷控制器連接到PowerPC的External Input端口,這樣的結(jié)果是在中斷服務(wù)程序中需要增加對(duì)中斷控制器的操作代碼,而且使用中斷控制器會(huì)使External Input端口接收到中斷信號(hào)的時(shí)間有一定的延時(shí)(即T3)。在中斷數(shù)量不大于2的情況下,完全可以不使用中斷控制器,而是將外設(shè)的中斷信號(hào)直接接到PowerPC的兩個(gè)異常輸入端。
現(xiàn)在,對(duì)系統(tǒng)做如下修改,將中斷控制器從系統(tǒng)移除,將Timer模塊中斷輸出端接到PowerPC External Input端口,將RS232中斷輸出端接到PowerPC Critical端口。修改后的系統(tǒng)結(jié)構(gòu)如圖5所示。
此時(shí)只需要在中斷處理程序中執(zhí)行自定義操作(清Timer中斷)及清除Timer中斷輸出命令。中斷服務(wù)程序得到了進(jìn)一步簡(jiǎn)化。
測(cè)得各參數(shù)如下:
1)T1:11.59μs。約為927個(gè)時(shí)鐘周期。
2)T2:5.45μs。約為436個(gè)時(shí)鐘周期。
可以看出,中斷響應(yīng)效率進(jìn)一步提高。此時(shí)T1為原來(lái)的47.49%,T2為52.59%。
圖5 修改后的系統(tǒng)結(jié)構(gòu)框圖
本研究對(duì)FPGA內(nèi)嵌PowerPC中斷系統(tǒng)的原理進(jìn)行了深入的分析,對(duì)中斷響應(yīng)時(shí)間進(jìn)行了實(shí)測(cè),并通過(guò)簡(jiǎn)化設(shè)計(jì)提高了中斷響應(yīng)速度,可以作為需要設(shè)計(jì)快速響應(yīng)系統(tǒng)的參考。
[1]張春生,常青,肖山竹.基于PowerPC405的SOPC簡(jiǎn)單應(yīng)用[J].微處理機(jī),2007(6):117-120.
[2]買(mǎi)培培,蘇濤,張曉曦.基于PowerPC的控制器研究與設(shè)計(jì)[J].船舶電子對(duì)抗,2009,32(5):102-106.