專利名稱:減輕片上系統(tǒng)軟件負(fù)載的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及的是一種計(jì)算機(jī)技術(shù)領(lǐng)域的方法,具體地說是一種減輕片上系統(tǒng)軟件負(fù)載的方法。
背景技術(shù):
一個(gè)片上系統(tǒng)(SoC)通常由系統(tǒng)框架(包括CPU、總線、存儲(chǔ)單元等)和多個(gè)輸入/輸出(I/O)功能模塊組成。其中,CPU負(fù)責(zé)各I/O功能模塊(例如音頻模塊、視頻解碼模塊、視頻處理模塊、圖形系統(tǒng)模塊等)的控制,這種控制一般通過配置各I/O功能模塊的寄存器完成。這些寄存器通常位于主控接口模塊(HostIF)中,與系統(tǒng)存儲(chǔ)器統(tǒng)一編址,一般包括控制寄存器、指令寄存器和參數(shù)寄存器??刂萍拇嫫魍瓿蒊/O功能模塊的復(fù)位和啟動(dòng)控制。指令寄存器指示I/O功能模塊需完成的操作。參數(shù)寄存器提供I/O功能模塊工作所需的參數(shù)。實(shí)時(shí)性是大多數(shù)SoC所要求的,為使CPU對各I/O功能模塊進(jìn)行及時(shí)響應(yīng),可以采取多種方法進(jìn)行控制。
經(jīng)對現(xiàn)有技術(shù)的文獻(xiàn)檢索發(fā)現(xiàn),William Stallings所著的《計(jì)算機(jī)組織與結(jié)構(gòu)—性能設(shè)計(jì)(第五版)》(2001.8高等教育出版社)第182頁至第209頁介紹,主要有三種I/O控制方法程序控制I/O、中斷驅(qū)動(dòng)I/O、直接存儲(chǔ)器訪問(DMA)。這三種方法依次減輕了CPU的負(fù)載。其中后兩種方法都需要采用中斷進(jìn)行控制。但是,通常SoC中CPU的能力相當(dāng)有限,過度頻繁的中斷會(huì)使CPU的開銷加大,效率降低,嚴(yán)重影響系統(tǒng)性能,甚至使系統(tǒng)無法正常運(yùn)行。該書的第207頁至209頁提出了I/O通道(I/O channel)的概念,這種技術(shù)理論上可進(jìn)一步減輕CPU的負(fù)載。但具體的I/O通道實(shí)現(xiàn)方法,書中并未提及。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有技術(shù)中的不足,提供一種減輕片上系統(tǒng)軟件負(fù)載的方法,使其將多個(gè)操作指令組織成指令鏈表,整個(gè)指令鏈表執(zhí)行完畢后,發(fā)送一個(gè)中斷信號,這樣,原來需要多次中斷現(xiàn)在只需要1次中斷。對于需要連續(xù)多次進(jìn)行操作的模塊可以明顯減少CPU中斷次數(shù),從而減輕CPU負(fù)載。
本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的,本發(fā)明采用鏈表原理,將多個(gè)操作指令組織成指令鏈表,對軟硬件進(jìn)行協(xié)同設(shè)計(jì),軟件負(fù)責(zé)將指令組織成鏈表,并控制硬件的啟動(dòng)和復(fù)位,硬件啟動(dòng)后自動(dòng)讀入鏈表的每個(gè)節(jié)點(diǎn),完成相應(yīng)數(shù)據(jù)的操作,整個(gè)指令鏈表執(zhí)行完畢后,發(fā)送一個(gè)中斷信號。
所述的將多個(gè)操作指令組織成指令鏈表,是指將指令字和所有參數(shù)組成一個(gè)指令節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)對應(yīng)一個(gè)操作。最后一項(xiàng)NIP是指向下一個(gè)節(jié)點(diǎn)的指針,存放下一個(gè)節(jié)點(diǎn)的起始內(nèi)存地址,并約定如果此單元值為0表示該節(jié)點(diǎn)為鏈表的最后一個(gè)節(jié)點(diǎn)。多個(gè)節(jié)點(diǎn)組成一個(gè)指令鏈表。
所述的軟件控制硬件的啟動(dòng)和復(fù)位,是指在HostIF中設(shè)置控制寄存器和寄存器HIP,控制寄存器用于控制I/O功能模塊的啟動(dòng)和復(fù)位,HIP用于存放鏈表的頭節(jié)點(diǎn)的指針。
所述的I/O功能模塊的硬件主要由三部分組成取指單元、執(zhí)行單元和控制單元,取指單元負(fù)責(zé)從系統(tǒng)存貯器中取出指令節(jié)點(diǎn),存放到片內(nèi)的寄存器中。執(zhí)行單元根據(jù)取出節(jié)點(diǎn)的內(nèi)容執(zhí)行相應(yīng)的操作。控制單元控制取指單元和執(zhí)行單元的動(dòng)作。
取指和執(zhí)行順序進(jìn)行,即取出一個(gè)節(jié)點(diǎn),執(zhí)行,再取下一個(gè)節(jié)點(diǎn),再執(zhí)行,直到所有節(jié)點(diǎn)執(zhí)行完畢。需要在片內(nèi)設(shè)置一組寄存器,用于存放取出的節(jié)點(diǎn)內(nèi)容??刂茊卧脿顟B(tài)機(jī)實(shí)現(xiàn)。該狀態(tài)機(jī)共有三個(gè)狀態(tài)空閑、取指和執(zhí)行。系統(tǒng)上電后處于空閑狀態(tài),當(dāng)模塊收到啟動(dòng)信號后轉(zhuǎn)到取指狀態(tài),否則保持空閑狀態(tài);在取指狀態(tài)下,取指完畢后進(jìn)入執(zhí)行狀態(tài),否則保持取指狀態(tài);在執(zhí)行狀態(tài)下,當(dāng)前節(jié)點(diǎn)指令執(zhí)行完后檢查NIP的值,如果NIP非0則又進(jìn)入取指狀態(tài),否則進(jìn)入空閑狀態(tài);在任何狀態(tài)下復(fù)位信號有效后,都進(jìn)入空閑狀態(tài)。在取指狀態(tài)下,取指電路工作,從系統(tǒng)存儲(chǔ)器中取出一個(gè)節(jié)點(diǎn)的內(nèi)容,并賦值給相應(yīng)的寄存器。在執(zhí)行狀態(tài)下,執(zhí)行電路根據(jù)剛才更新的寄存器的值進(jìn)行相應(yīng)操作。在空閑狀態(tài)下,所有電路處于復(fù)位狀態(tài)。
所述的I/O功能模塊啟動(dòng)后,首先根據(jù)HIP的值,從系統(tǒng)RAM中取出第一個(gè)節(jié)點(diǎn)的數(shù)據(jù),進(jìn)行第一個(gè)操作。操作完成后,根據(jù)NIP的值從系統(tǒng)RAM中取出下一個(gè)節(jié)點(diǎn)的數(shù)據(jù),進(jìn)行下一個(gè)操作,直到NIP為0。整個(gè)指令鏈表都執(zhí)行完后,發(fā)出中斷信號。CPU在收到中斷信號后,進(jìn)行中斷處理,發(fā)送下一個(gè)操作指令鏈表。
所述的硬件啟動(dòng)后自動(dòng)讀入鏈表的每個(gè)節(jié)點(diǎn),完成相應(yīng)數(shù)據(jù)的操作,具體為在取指單元中設(shè)置取指計(jì)數(shù)器,取指單元每讀進(jìn)一個(gè)數(shù)據(jù)取指計(jì)數(shù)器自動(dòng)加一,在執(zhí)行狀態(tài)時(shí),計(jì)數(shù)器清零。所以取指計(jì)數(shù)器的值對應(yīng)當(dāng)前數(shù)據(jù)在節(jié)點(diǎn)中的位置,可以指導(dǎo)數(shù)據(jù)進(jìn)入相應(yīng)寄存器,并且當(dāng)計(jì)數(shù)器的值等于節(jié)點(diǎn)的長度時(shí),表明當(dāng)前節(jié)點(diǎn)取指完畢,可以指導(dǎo)控制狀態(tài)機(jī)跳轉(zhuǎn)。執(zhí)行單元在控制狀態(tài)機(jī)的控制下執(zhí)行指令,當(dāng)執(zhí)行完畢時(shí)向控制狀態(tài)機(jī)發(fā)送“執(zhí)行完畢”信號。由于系統(tǒng)中數(shù)據(jù)和指令共用一個(gè)片外存儲(chǔ)器,因此需要一個(gè)選擇器,在狀態(tài)機(jī)的控制下選擇相應(yīng)的信號送到存儲(chǔ)控制器(MC)。
本發(fā)明具有突出的實(shí)質(zhì)性特點(diǎn)和顯著進(jìn)步,本發(fā)明將多個(gè)操作打包成指令鏈表,由硬件自動(dòng)執(zhí)行指令鏈表中的所有操作,對應(yīng)多個(gè)操作只有一個(gè)中斷,極大地減少了中斷次數(shù),從而減輕了CPU的負(fù)載,對于保證SoC的實(shí)時(shí)性意義重大。另外,由于大量寄存器被移出HostIF,以鏈表節(jié)點(diǎn)的方式組織,而鏈表是由軟件生成,放在片外RAM中,這樣整個(gè)SoC芯片面積可減少,片內(nèi)連線也可減少。本發(fā)明從根本上解決了中斷次數(shù)過多引起軟件負(fù)載加重的問題,具有實(shí)現(xiàn)方法簡單,通用性強(qiáng)的特點(diǎn)。
圖1本發(fā)明鏈表結(jié)構(gòu)2本發(fā)明硬件結(jié)構(gòu)框3本發(fā)明控制狀態(tài)轉(zhuǎn)換圖具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明作進(jìn)一步的說明本發(fā)明由軟件和硬件共同完成。軟件負(fù)責(zé)將指令組織成鏈表,并控制硬件的啟動(dòng)和復(fù)位。
如圖1所示,指令鏈表組織如下一個(gè)指令節(jié)點(diǎn)由指令字、所有參數(shù)和NIP(用于存放下一個(gè)節(jié)點(diǎn)的起始內(nèi)存地址)組成,他們在內(nèi)存中的連續(xù)存放,假設(shè)指令字的地址為X,共有N個(gè)參數(shù),則他們的地址依次為X、X+1、X+2…X+N+1。最后一項(xiàng)NIP是指向下一個(gè)節(jié)點(diǎn)的指針,并約定如果此單元值為0表示該節(jié)點(diǎn)為鏈表的最后一個(gè)節(jié)點(diǎn)。一個(gè)節(jié)點(diǎn)對應(yīng)一個(gè)操作,多個(gè)節(jié)點(diǎn)組成一個(gè)指令鏈表,鏈表最后一個(gè)節(jié)點(diǎn)的NIP值設(shè)為0。
在HostIF中設(shè)置寄存器HIP和控制寄存器,用HIP存放鏈表的頭節(jié)點(diǎn)的指針,即第一個(gè)節(jié)點(diǎn)指令字的地址,控制寄存器設(shè)置啟動(dòng)位和復(fù)位,用于控制I/O功能模塊的啟動(dòng)和復(fù)位。CPU執(zhí)行的步驟如下1)準(zhǔn)備指令鏈表,送入系統(tǒng)RAM中;2)設(shè)置好HIP;3)在I/O功能模塊就緒的情況下,設(shè)置控制寄存器,啟動(dòng)I/O功能模塊。
硬件啟動(dòng)后自動(dòng)讀入鏈表的每個(gè)節(jié)點(diǎn),完成相應(yīng)數(shù)據(jù)的操作,整個(gè)指令鏈表執(zhí)行完畢后,發(fā)送一個(gè)中斷信號。
如圖2所示,本發(fā)明硬件部分有取指單元、執(zhí)行單元、控制單元、指令寄存器組和選擇器。取指單元負(fù)責(zé)從系統(tǒng)存貯器中取出指令節(jié)點(diǎn),存放到片內(nèi)的指令寄存器組。執(zhí)行單元根據(jù)指令寄存器組的內(nèi)容執(zhí)行相應(yīng)的操作。因而指令寄存器組成為取指單元和執(zhí)行單元的橋梁。所有單元都在控制單元的控制下工作。該控制單元由控制狀態(tài)機(jī)實(shí)現(xiàn)。
如圖3所示,控制狀態(tài)機(jī)共有三個(gè)狀態(tài)空閑、取指和執(zhí)行。系統(tǒng)上電后處于空閑狀態(tài),當(dāng)模塊收到啟動(dòng)信號后轉(zhuǎn)到取指狀態(tài),否則保持空閑狀態(tài);在取指狀態(tài)下,取指完畢后進(jìn)入執(zhí)行狀態(tài),否則保持取指狀態(tài);在執(zhí)行狀態(tài)下,當(dāng)前節(jié)點(diǎn)指令執(zhí)行完后檢查NIP的值,如果NIP非0則又進(jìn)入取指狀態(tài),否則進(jìn)入空閑狀態(tài);在任何狀態(tài)下復(fù)位信號有效后,都進(jìn)入空閑狀態(tài)。
模塊啟動(dòng)后進(jìn)入取指狀態(tài),取指單元向存儲(chǔ)控制器(MC)發(fā)送發(fā)出讀請求,請求的地址為HIP,讀取個(gè)數(shù)為鏈表節(jié)點(diǎn)的大小。MC響應(yīng)請求后,發(fā)送數(shù)據(jù)到取指單元,由數(shù)據(jù)有效信號指示數(shù)據(jù)的到來。在取指單元中設(shè)置取指計(jì)數(shù)器,取指單元每讀進(jìn)一個(gè)數(shù)據(jù)(即數(shù)據(jù)有效信號為高)取指計(jì)數(shù)器自動(dòng)加一。根據(jù)取指計(jì)數(shù)器的值,把讀進(jìn)的數(shù)據(jù)送到指令寄存器組中相應(yīng)的寄存器中。當(dāng)取指計(jì)數(shù)器的值等于鏈表節(jié)點(diǎn)的大小時(shí),表明取指完畢,進(jìn)入執(zhí)行狀態(tài),取指計(jì)數(shù)器清零,執(zhí)行單元根據(jù)指令寄存器組的值執(zhí)行相應(yīng)操作,操作完成后發(fā)出執(zhí)行完畢信號。同時(shí)檢查指令寄存器組中NIP的值,如果非0,表明還有指令要執(zhí)行,將NIP的值賦給取指單元,作為下一次取指的地址,進(jìn)入取指狀態(tài),取下一個(gè)指令節(jié)點(diǎn),如果NIP為0,表明整個(gè)指令鏈表執(zhí)行完畢,發(fā)出中斷信號,進(jìn)入空閑狀態(tài)。由于系統(tǒng)中數(shù)據(jù)和指令共用一個(gè)片外存儲(chǔ)器,因此需要一個(gè)選擇器,選擇器由狀態(tài)機(jī)控制,在取指狀態(tài)下,將取指單元的信號送MC,在執(zhí)行狀態(tài)下,將執(zhí)行單元的信號送MC。
本發(fā)明將多個(gè)操作打包成指令鏈表,由硬件自動(dòng)執(zhí)行指令鏈表中的所有操作,對應(yīng)多個(gè)操作只有一個(gè)中斷,從根本上解決了中斷次數(shù)過多引起軟件負(fù)載加重的問題,方法實(shí)現(xiàn)簡單,通用性強(qiáng)。
權(quán)利要求
1.一種減輕片上系統(tǒng)軟件負(fù)載的方法,其特征在于,采用鏈表原理,軟件負(fù)責(zé)將多個(gè)操作指令組織成鏈表,并控制硬件的啟動(dòng)和復(fù)位,硬件啟動(dòng)后自動(dòng)讀入鏈表的每個(gè)節(jié)點(diǎn),完成相應(yīng)數(shù)據(jù)的操作,整個(gè)指令鏈表執(zhí)行完畢后,發(fā)送一個(gè)中斷信號。
2.根據(jù)權(quán)利要求1所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的將多個(gè)操作指令組織成鏈表,是指將指令字和所有參數(shù)組成一個(gè)指令節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)對應(yīng)一個(gè)操作,最后一項(xiàng)NIP是指向下一個(gè)節(jié)點(diǎn)的指針,存放下一個(gè)節(jié)點(diǎn)的起始內(nèi)存地址,并約定如果此單元值為0表示該節(jié)點(diǎn)為鏈表的最后一個(gè)節(jié)點(diǎn),多個(gè)節(jié)點(diǎn)組成一個(gè)指令鏈表。
3.根據(jù)權(quán)利要求1所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的軟件控制硬件的啟動(dòng)和復(fù)位,是指在HostIF中設(shè)置控制寄存器和寄存器HIP,控制寄存器用于控制I/O功能模塊的啟動(dòng)和復(fù)位,HIP用于存放鏈表的頭節(jié)點(diǎn)的指針。
4.根據(jù)權(quán)利要求1或者3所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的軟件控制硬件的啟動(dòng)和復(fù)位,CPU執(zhí)行的步驟如下1)準(zhǔn)備指令鏈表,送入系統(tǒng)RAM中;2)設(shè)置好HIP;3)在I/O功能模塊就緒的情況下,設(shè)置控制寄存器,啟動(dòng)I/O功能模塊。
5.根據(jù)權(quán)利要求3所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的I/O功能模塊,其硬件主要由三部分組成取指單元、執(zhí)行單元和控制單元,取指單元負(fù)責(zé)從系統(tǒng)存貯器中取出指令節(jié)點(diǎn),存放到片內(nèi)的寄存器中;執(zhí)行單元根據(jù)取出節(jié)點(diǎn)的內(nèi)容執(zhí)行相應(yīng)的操作;控制單元控制取指單元和執(zhí)行單元的動(dòng)作。
6.根據(jù)權(quán)利要求5所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的控制單元用狀態(tài)機(jī)實(shí)現(xiàn),該狀態(tài)機(jī)共有三個(gè)狀態(tài)空閑、取指和執(zhí)行,系統(tǒng)上電后處于空閑狀態(tài),當(dāng)模塊收到啟動(dòng)信號后轉(zhuǎn)到取指狀態(tài),否則保持空閑狀態(tài);在取指狀態(tài)下,取指完畢后進(jìn)入執(zhí)行狀態(tài),否則保持取指狀態(tài);在執(zhí)行狀態(tài)下,當(dāng)前節(jié)點(diǎn)指令執(zhí)行完后檢查NIP的值,如果NIP非0則又進(jìn)入取指狀態(tài),否則進(jìn)入空閑狀態(tài);在任何狀態(tài)下復(fù)位信號有效后,都進(jìn)入空閑狀態(tài)。
7.根據(jù)權(quán)利要求6所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的狀態(tài)機(jī),在取指狀態(tài)下,取指電路工作,從系統(tǒng)存儲(chǔ)器中取出一個(gè)節(jié)點(diǎn)的內(nèi)容,并賦值給相應(yīng)的寄存器;在執(zhí)行狀態(tài)下,執(zhí)行電路根據(jù)剛才更新的寄存器的值進(jìn)行相應(yīng)操作;在空閑狀態(tài)下,所有電路處于復(fù)位狀態(tài)。
8.根據(jù)權(quán)利要求3或者5所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的I/O功能模塊啟動(dòng)后,首先根據(jù)HIP的值,從系統(tǒng)RAM中取出第一個(gè)節(jié)點(diǎn)的數(shù)據(jù),進(jìn)行第一個(gè)操作,操作完成后,根據(jù)NIP的值從系統(tǒng)RAM中取出下一個(gè)節(jié)點(diǎn)的數(shù)據(jù),進(jìn)行下一個(gè)操作,直到NIP為0,整個(gè)指令鏈表都執(zhí)行完后,發(fā)出中斷信號,CPU在收到中斷信號后,進(jìn)行中斷處理,發(fā)送下一個(gè)操作指令鏈表。
9.根據(jù)權(quán)利要求1所述的減輕片上系統(tǒng)軟件負(fù)載的方法,其特征是,所述的硬件啟動(dòng)后自動(dòng)讀入鏈表的每個(gè)節(jié)點(diǎn),完成相應(yīng)數(shù)據(jù)的操作,具體為在取指單元中設(shè)置取指計(jì)數(shù)器,取指單元每讀進(jìn)一個(gè)數(shù)據(jù)取指計(jì)數(shù)器自動(dòng)加一,在執(zhí)行狀態(tài)時(shí),計(jì)數(shù)器清零,所以取指計(jì)數(shù)器的值對應(yīng)當(dāng)前數(shù)據(jù)在節(jié)點(diǎn)中的位置,能指導(dǎo)數(shù)據(jù)進(jìn)入相應(yīng)寄存器,并且當(dāng)計(jì)數(shù)器的值等于節(jié)點(diǎn)的長度時(shí),表明當(dāng)前節(jié)點(diǎn)取指完畢,指導(dǎo)控制狀態(tài)機(jī)跳轉(zhuǎn);執(zhí)行單元在控制狀態(tài)機(jī)的控制下執(zhí)行指令,當(dāng)執(zhí)行完畢時(shí)向控制狀態(tài)機(jī)發(fā)送“執(zhí)行完畢”信號,由于系統(tǒng)中數(shù)據(jù)和指令共用一個(gè)片外存儲(chǔ)器,因此需要一個(gè)選擇器,在狀態(tài)機(jī)的控制下選擇相應(yīng)的信號送到存儲(chǔ)控制器。
全文摘要
一種計(jì)算機(jī)技術(shù)的減輕片上系統(tǒng)軟件負(fù)載的方法。本發(fā)明采用鏈表原理,軟件負(fù)責(zé)將多個(gè)操作指令組織成鏈表,并控制硬件的啟動(dòng)和復(fù)位,硬件啟動(dòng)后自動(dòng)讀入鏈表的每個(gè)節(jié)點(diǎn),完成相應(yīng)數(shù)據(jù)的操作,整個(gè)指令鏈表執(zhí)行完畢后,發(fā)送一個(gè)中斷信號。將指令字和所有參數(shù)組成一個(gè)指令節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)對應(yīng)一個(gè)操作,最后一項(xiàng)NIP是指向下一個(gè)節(jié)點(diǎn)的指針,存放下一個(gè)節(jié)點(diǎn)的起始內(nèi)存地址,并約定如果此單元值為0表示該節(jié)點(diǎn)為鏈表的最后一個(gè)節(jié)點(diǎn),多個(gè)節(jié)點(diǎn)組成一個(gè)指令鏈表。本發(fā)明將多個(gè)操作打包成指令鏈表,由硬件自動(dòng)執(zhí)行鏈表中的所有操作,對應(yīng)多個(gè)操作只有一個(gè)中斷,從根本上解決了中斷次數(shù)過多引起軟件負(fù)載加重的問題,同時(shí)實(shí)現(xiàn)方法簡單,通用性強(qiáng)。
文檔編號G06F9/44GK1731358SQ200510028888
公開日2006年2月8日 申請日期2005年8月18日 優(yōu)先權(quán)日2005年8月18日
發(fā)明者朱建清, 鄭世寶, 顧亮, 王峰, 張文軍 申請人:上海交通大學(xué)