專利名稱:16/32位混合架構(gòu)指令預(yù)取緩沖器裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種指令預(yù)取緩沖器裝置,尤其涉及一種16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,通過一個(gè)表項(xiàng)緩存一條16位指令或者半條32位指令來簡化混合架構(gòu)指令取指,并提升取指性能。
背景技術(shù):
微處理器的設(shè)計(jì)中,指令取指是性能上重要的瓶頸,指令的取指影響流水線前級(jí)的指令供給,如果指令取指發(fā)生堵塞,則會(huì)影響下級(jí)流水線的執(zhí)行,流水線會(huì)出現(xiàn)氣泡,造成流水線下級(jí)空閑的狀況,這對(duì)資源和性能都是極大地浪費(fèi)。流水線緩沖器的出現(xiàn)緩解了這個(gè)問題,當(dāng)后級(jí)流水線發(fā)生堵塞,前級(jí)流水可以把信息暫存入緩沖器后繼續(xù)工作,降低了流水線停滯的概率。目前,為了滿足在低成本的要求下獲得最大化的性能,處理器的指令集開始出現(xiàn)了變長指令集結(jié)構(gòu)。這些指令集中,基本分為兩種指令長度,指令長度較長的指令具有更多的操作數(shù)個(gè)數(shù),更長的立即數(shù)位數(shù)等,可以提供更高的性能,而指令長度較小的指令具有較高的代碼密度,占據(jù)更小的存儲(chǔ)空間,可以降低開發(fā)的成本。因此采用兩種長度的指令混合編程的架構(gòu),可以在性能和成本之間達(dá)到很好的平衡。目前主流的技術(shù)就是16/32位混合架構(gòu)。但是由于指令的長度不一樣,因此取指會(huì)很復(fù)雜,需要在取得指令的同時(shí)判斷該指令是哪種長度的指令,然后才能確定下一次取指的地址。這樣,會(huì)大大增加取指邏輯的復(fù)雜性,增加設(shè)計(jì)的風(fēng)險(xiǎn)。
發(fā)明內(nèi)容
為了克服現(xiàn)有處理器的指令取指過程中流水線堵塞造成性能損失、對(duì)變長指令取指過程中邏輯過于復(fù)雜,設(shè)計(jì)風(fēng)險(xiǎn)性高的問題,本發(fā)明提供一種16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,可以實(shí)現(xiàn)流水線緩沖功能,同時(shí)簡化對(duì)變長指令取指的復(fù)雜度,提升性能同時(shí)降低成本。為了解決上述技術(shù)問題采用的技術(shù)方案一種16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,包括循環(huán)緩沖器,用于連接于指令存儲(chǔ)器的輸出端,將從指令存儲(chǔ)器中取出的數(shù)據(jù)作為指令緩存起來,指令有16位和32位兩種長度,緩存過程中新指令以循環(huán)的方式覆蓋緩沖器內(nèi)最舊的指令;數(shù)據(jù)選通器,用于連接于循環(huán)緩沖器輸出端,在循環(huán)緩沖器和指令存儲(chǔ)器之間選通一路獲得指令,發(fā)往下級(jí)流水線,在指令旁路時(shí)選通指令存儲(chǔ)器,否則選通循環(huán)緩沖器;控制模塊,用于檢測(cè)循環(huán)緩沖器狀態(tài),控制模塊連接循環(huán)緩沖器,維護(hù)循環(huán)緩沖器中指令的創(chuàng)建,控制模塊連接數(shù)據(jù)選通器,為數(shù)據(jù)選通器提供選通信號(hào),控制指令信息發(fā)送到下級(jí)流水線;當(dāng)控制模塊監(jiān)測(cè)循環(huán)緩沖器中沒有指令時(shí),控制模塊控制數(shù)據(jù)選通器選通指令存儲(chǔ)器通路,指令存儲(chǔ)器中的指令將繞過循環(huán)緩沖器直接被發(fā)射到流水線后級(jí);當(dāng)控制模塊監(jiān)測(cè)到循環(huán)緩沖器中存在指令時(shí),控制模塊控制數(shù)據(jù)選通器選通循環(huán)緩沖器輸出的指令。進(jìn)一步,每次從指令存儲(chǔ)器中取出數(shù)據(jù)的位寬與所訪問的指令存儲(chǔ)器的寬度相同,其中有效數(shù)據(jù)的位寬根據(jù)訪問地址的字對(duì)齊狀況不同而變化。再進(jìn)一步,所述循環(huán)緩沖器以16位指令長度為單位緩存指令,所述單位緩存指包含的表項(xiàng)數(shù)目是可配置的。更進(jìn)一步,循環(huán)緩沖器的每個(gè)表項(xiàng)容納一條16位指令或半條32位指令。作為優(yōu)選的一種方案控制模塊包括第一創(chuàng)建指針單元、第二創(chuàng)建指針單元、第一發(fā)射指針單元、第二發(fā)射指針單元和預(yù)解碼單元,所述第一創(chuàng)建指針單元和第二創(chuàng)建指針單元指示當(dāng)前從指令存儲(chǔ)器中獲取的數(shù)據(jù)在循環(huán)緩沖器中創(chuàng)建的位置,第二創(chuàng)建指針單元在第一創(chuàng)建指針單元基礎(chǔ)上偏移一個(gè)表項(xiàng);第一發(fā)射指針單元和第二發(fā)射指針單元為當(dāng)前從循環(huán)緩沖器中讀取的目標(biāo)指令的位置,第二發(fā)射指針單元在第一發(fā)射指針單元的基礎(chǔ)上偏移一個(gè)表項(xiàng)。進(jìn)一步,若向循環(huán)緩沖器中創(chuàng)建32位數(shù)據(jù)時(shí),在第一創(chuàng)建指針單元和第二創(chuàng)建指針單元指向的表項(xiàng)中各創(chuàng)建16位數(shù)據(jù),同時(shí)第一創(chuàng)建指針單元和第二創(chuàng)建指針單元分別向后移動(dòng)兩個(gè)表項(xiàng);若向循環(huán)緩沖器中創(chuàng)建16位數(shù)據(jù)時(shí),在第一創(chuàng)建指針單元指向的表項(xiàng)中創(chuàng)建16位數(shù)據(jù),第二創(chuàng)建指針單元對(duì)應(yīng)的表項(xiàng)不創(chuàng)建內(nèi)容,同時(shí)第一創(chuàng)建指針單元和第二創(chuàng)建指針單元分別向后移動(dòng)一個(gè)表項(xiàng)。再進(jìn)一步,當(dāng)數(shù)據(jù)選通器從循環(huán)緩沖器中選通32位指令時(shí),將第一發(fā)射指針單元和第二發(fā)射指針單元指向的表項(xiàng)中的數(shù)據(jù)組合成32位指令輸出,同時(shí)第一發(fā)射指針單元和第二發(fā)射指針單元分別向后移動(dòng)兩個(gè)表項(xiàng);當(dāng)數(shù)據(jù)選通器從循環(huán)緩沖器中選通16位指令時(shí),將第一發(fā)射指針單元指向的表項(xiàng)中的16位指令輸出,同時(shí)第一發(fā)射指針單元和第二發(fā)射指針單元分別向后移動(dòng)一個(gè)表項(xiàng)??刂坪诵耐ㄟ^預(yù)譯碼單元譯碼對(duì)從指令存儲(chǔ)器中取出的數(shù)據(jù)進(jìn)行預(yù)譯碼,判斷當(dāng)前指令為16位或者32位指令。作為優(yōu)選的另一種方案在循環(huán)緩沖器為空的情況下,若從指令存儲(chǔ)器中取出的數(shù)據(jù)中包括1條16位或者32位指令,該指令不進(jìn)入循環(huán)緩沖器,直接進(jìn)入后級(jí)流水線。或者是在循環(huán)緩沖器為空的情況下,若從指令存儲(chǔ)器中取出的數(shù)據(jù)中包含1條 16位指令及其他指令,16位指令不進(jìn)入循環(huán)緩沖器,直接進(jìn)入后級(jí)流水線,剩余指令進(jìn)入循環(huán)緩沖器。再或者是,在循環(huán)緩沖器為空的情況下,若從指令存儲(chǔ)器中取出的數(shù)據(jù)中包含半條32位指令,則半條32位指令先進(jìn)入循環(huán)緩沖器緩存,等待后續(xù)半條指令進(jìn)入循環(huán)緩沖器后一起發(fā)射到后級(jí)流水線。本發(fā)明和現(xiàn)有的流水線緩沖器技術(shù)和變長指令取指技術(shù)相比,具有以下有益效果1)節(jié)省資源,本發(fā)明中循環(huán)緩沖器中每個(gè)表項(xiàng)只緩存變長指令中指令長度較小的指令,指令長度較大的指令通過兩個(gè)表項(xiàng)分開緩存,和傳統(tǒng)的一個(gè)表項(xiàng)存儲(chǔ)一條指令的流水線緩沖器相比,對(duì)硬件資源的利用更加充分;2)提高性能,本發(fā)明通過指令的旁路,當(dāng)循環(huán)緩沖器中沒有指令的時(shí)候可以將指令直接發(fā)送到下級(jí)流水線,不需要經(jīng)過循環(huán)緩沖器,省去了在循環(huán)緩沖器中緩存的一個(gè)周期; 3)降低設(shè)計(jì)復(fù)雜度,本發(fā)明通過循環(huán)緩沖器將指令取指地址的計(jì)算和16位32位指令的判斷分隔開來,不需要在取得指令的同時(shí)馬上譯碼判斷指令的長度從而計(jì)算得到下一條指令的取指地址,而是只需要通過簡單的對(duì)循環(huán)緩沖器的維護(hù),便可判斷16位32位指令并且發(fā)往下級(jí)流水線。
圖1為本發(fā)明第圖2為本發(fā)明第圖3為本發(fā)明第圖4為本發(fā)明第圖5為本發(fā)明第圖6為本發(fā)明第圖7為本發(fā)明第符號(hào)說明循環(huán)緩沖器10控制模塊14第一創(chuàng)建指針單元18第一發(fā)射指針單元22指令存儲(chǔ)器沈
實(shí)施例的結(jié)構(gòu)圖。
實(shí)施例中循環(huán)緩沖器表項(xiàng)的結(jié)構(gòu)圖。 實(shí)施例對(duì)指令進(jìn)行旁路的第一種情況的示意圖。 實(shí)施例對(duì)指令進(jìn)行旁路的第二種情況的示意圖。 實(shí)施例對(duì)指令進(jìn)行旁路的第三種情況的示意圖。 實(shí)施例在不能旁路時(shí)對(duì)指令的處理情況的示意圖< 實(shí)施例在處理一段程序的情況的示意圖。
數(shù)據(jù)選通器12 指令預(yù)譯碼單元16 第二創(chuàng)建指針單元20 第二發(fā)射指針單元M 指令譯碼單元觀。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說明。參照?qǐng)D1 圖7,一種16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,包括循環(huán)緩沖器10,用于連接于指令存儲(chǔ)器沈的輸出端,將從指令存儲(chǔ)器沈中取出的數(shù)據(jù)作為指令緩存起來,指令有16位和32位兩種長度,緩存過程中新指令以循環(huán)的方式覆蓋緩沖器內(nèi)最舊的指令;數(shù)據(jù)選通器12,用于連接于循環(huán)緩沖器輸出端,在循環(huán)緩沖器和指令存儲(chǔ)器之間選通一路獲得指令,發(fā)往下級(jí)流水線,在指令旁路時(shí)選通指令存儲(chǔ)器,否則選通循環(huán)緩沖器;控制模塊14,用于檢測(cè)循環(huán)緩沖器狀態(tài),控制模塊連接循環(huán)緩沖器,維護(hù)循環(huán)緩沖器中指令的創(chuàng)建,控制模塊連接數(shù)據(jù)選通器,為數(shù)據(jù)選通器提供選通信號(hào),控制指令信息發(fā)送到下級(jí)流水線;當(dāng)控制模塊14監(jiān)測(cè)循環(huán)緩沖器10中沒有指令時(shí),控制模塊14控制數(shù)據(jù)選通器12 選通指令存儲(chǔ)器26通路,指令存儲(chǔ)器沈中的指令將繞過循環(huán)緩沖器10直接被發(fā)射到流水線后級(jí);當(dāng)控制模塊14監(jiān)測(cè)到循環(huán)緩沖器10中存在指令時(shí),控制模塊14控制數(shù)據(jù)選通器 12選通循環(huán)緩沖器10輸出的指令。每次從指令存儲(chǔ)器中取出數(shù)據(jù)的位寬與所訪問的指令存儲(chǔ)器的寬度相同,其中有
6效數(shù)據(jù)的位寬根據(jù)訪問地址的字對(duì)齊狀況不同而變化。所述循環(huán)緩沖器以16位指令長度為單位緩存指令,所述單位緩存指包含的表項(xiàng)數(shù)目是可配置的。循環(huán)緩沖器的每個(gè)表項(xiàng)容納一條16位指令或半條32位指令。請(qǐng)參照?qǐng)D1所示,為本發(fā)明第一實(shí)施例的結(jié)構(gòu)圖。本裝置在處理器流水線中位于指令存儲(chǔ)器26的出口端。本裝置將指令存儲(chǔ)器沈中取出的指令進(jìn)行緩存后發(fā)送至指令譯碼單元觀進(jìn)行譯碼,或者將指令存儲(chǔ)器沈中取出的指令不經(jīng)過緩存,直接旁路至指令譯碼單元觀進(jìn)行譯碼。指令存儲(chǔ)器26的寬度為32位,每次訪問指令存儲(chǔ)器沈都會(huì)得到32位數(shù)據(jù)。指令存儲(chǔ)器26中的指令有16位指令和32位指令兩種。訪問指令存儲(chǔ)器沈的地址有字對(duì)齊和半字對(duì)齊兩種,若訪問地址是字對(duì)齊的,則從指令存儲(chǔ)器26中取出32位數(shù)據(jù)都是有效數(shù)據(jù),數(shù)據(jù)的組織形式有四種一條32位指令、兩條16位指令、一條16位指令和半條32位指令、半條32位指令和另一個(gè)半條32位指令(分別屬于不同的32位指令);若訪問地址是半字對(duì)齊的,則從指令存儲(chǔ)器沈中取出32位數(shù)據(jù)中只有16位有效數(shù)據(jù),數(shù)據(jù)的組織形式有兩種一條16位指令、半條32位指令。本裝置包括一循環(huán)緩沖器10,一數(shù)據(jù)選通器12,一控制模塊14。循環(huán)緩沖器10以表項(xiàng)為基本單位,表項(xiàng)的數(shù)目是可配置的,本實(shí)施例中表項(xiàng)的數(shù)目為八,每個(gè)表項(xiàng)中可以存儲(chǔ)一條16位指令或者半條32位指令,以及伴隨指令的一些控制信息??刂颇K14通過第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20將從指令存儲(chǔ)器沈中取出的有效數(shù)據(jù)創(chuàng)建到循環(huán)緩沖器10中,第二創(chuàng)建指針單元20在第一創(chuàng)建指針單元18偏移一位的基礎(chǔ)上得到。 若往循環(huán)緩沖器10中創(chuàng)建32位數(shù)據(jù),則將32位數(shù)據(jù)拆分為兩個(gè)16位數(shù)據(jù),分別存儲(chǔ)到第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20所指的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)兩位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng);若往循環(huán)緩沖器 10中創(chuàng)建16位數(shù)據(jù),則將16位數(shù)據(jù)直接存儲(chǔ)到第一創(chuàng)建指針單元18所指的表項(xiàng)中,第二創(chuàng)建指針單元20對(duì)應(yīng)的表項(xiàng)不創(chuàng)建內(nèi)容,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元 20分別向后移動(dòng)一位,指向下一次將要存儲(chǔ)數(shù)據(jù)的表項(xiàng)??刂颇K14通過第一發(fā)射指針單元22和第二發(fā)射指針單元M從循環(huán)緩沖器10中選取數(shù)據(jù),拼裝出具體指令后輸出到數(shù)據(jù)選通器12的輸入端,第二發(fā)射指針單元M在第一發(fā)射指針單元22偏移一位的基礎(chǔ)上得到。若從循環(huán)緩沖器10中發(fā)射32位指令,則第一發(fā)射指針單元22和第二發(fā)射指針單元M 所指的表項(xiàng)中的數(shù)據(jù)組合成一條32位指令輸出到數(shù)據(jù)選通器12的輸入端,同時(shí)第一發(fā)射指針單元22和第二發(fā)射指針單元M分別向后移動(dòng)兩位,指向下一次將要發(fā)射數(shù)據(jù)的表項(xiàng); 若從循環(huán)緩沖器10中發(fā)射一條16位指令,則第一發(fā)射指針單元22所指的表項(xiàng)中的數(shù)據(jù)作為一條16位指輸出到數(shù)據(jù)選通器12的輸入端,同時(shí)第一發(fā)射指針單元22和第二發(fā)射指針單元M分別向后移動(dòng)一位,指向下一次將要發(fā)射數(shù)據(jù)的表項(xiàng)。另外,控制模塊14通過第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10的狀態(tài),因?yàn)榈谝话l(fā)射指針單元22所指向的表項(xiàng)中的數(shù)據(jù)是循環(huán)緩沖器10中最老的數(shù)據(jù),所以當(dāng)?shù)谝话l(fā)射指針單元22所指向的表項(xiàng)中的數(shù)據(jù)無效時(shí),表示循環(huán)緩沖器10中沒有指令。循環(huán)緩沖器10中數(shù)據(jù)的創(chuàng)建和發(fā)射都采用循環(huán)的方式,從循環(huán)緩沖器10的一端開始創(chuàng)建和發(fā)射,隨著數(shù)據(jù)的創(chuàng)建和發(fā)射,第一創(chuàng)建指針單元18、第二創(chuàng)建指針單元20、第一發(fā)射指針單元22、第二發(fā)射指針單元M向循環(huán)緩沖器 10的另一端移動(dòng),直至移動(dòng)到循環(huán)緩沖器10到另一端端口之后,第一創(chuàng)建指針單元18、第二創(chuàng)建指針單元20、第一發(fā)射指針單元22、第二發(fā)射指針單元M重新回到循環(huán)緩沖器10 的起始端開始創(chuàng)建和發(fā)射數(shù)據(jù),創(chuàng)建的新數(shù)據(jù)依次覆蓋之前的舊數(shù)據(jù),如此循環(huán)往復(fù)。運(yùn)行過程中,第一發(fā)射指針單元22、第二發(fā)射指針單元M不能超過第一創(chuàng)建指針單元18、第二創(chuàng)建指針單元20,因?yàn)閿?shù)據(jù)需要先創(chuàng)建到循環(huán)緩沖器10中才能被發(fā)射,最極端的情況是第一發(fā)射指針單元22、第二發(fā)射指針單元M和第一創(chuàng)建指針單元18、第二創(chuàng)建指針單元20 重合,表示循環(huán)緩沖器中沒有指令可以被發(fā)射??刂颇K14通過指令預(yù)譯碼單元16對(duì)指令存儲(chǔ)器26中取出的數(shù)據(jù)進(jìn)行預(yù)譯碼,得出數(shù)據(jù)中是否至少包括一條完整的16位或者32 位指令??刂颇K14通過數(shù)據(jù)選通器12從指令存儲(chǔ)器沈和循環(huán)緩沖器10中選通一路獲得具體指令,發(fā)往指令譯碼單元觀進(jìn)行譯碼??刂颇K14判斷下屬條件一、譯碼得出從指令存儲(chǔ)器26中取出的數(shù)據(jù)中至少包括一條指令;二、此時(shí)循環(huán)緩沖器10中沒有指令。若同時(shí)滿足上述兩個(gè)條件,則對(duì)指令進(jìn)行旁路,控制模塊14控制數(shù)據(jù)選通器12選通指令存儲(chǔ)器26輸出的指令,將指令直接旁路到下級(jí)流水線,若此時(shí)從指令存儲(chǔ)器沈中取出的數(shù)據(jù)包含多于一條指令,則控制模塊14將剩余的數(shù)據(jù)通過創(chuàng)建指針創(chuàng)建到循環(huán)緩沖器10中。若上述兩個(gè)條件中至少有一個(gè)不滿足,則不能對(duì)指令進(jìn)行旁路,控制模塊14通過第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20將從指令存儲(chǔ)器沈中取出的數(shù)據(jù)創(chuàng)建到循環(huán)緩沖器10 中。請(qǐng)參照?qǐng)D2所示,為本發(fā)明第一實(shí)施例中循環(huán)緩沖器10中一個(gè)表項(xiàng)的結(jié)構(gòu)圖。本實(shí)施例中一個(gè)表項(xiàng)包含18比特信息。其中16比特為從指令存儲(chǔ)器沈中取出的指令數(shù)據(jù), 有可能是一條16位指令,或者半條32位指令。表項(xiàng)中包含一比特異常信息,用來表示在訪問指令存儲(chǔ)器26時(shí)發(fā)生的異常信息,本實(shí)施例中表示發(fā)生訪問錯(cuò)誤異常。表項(xiàng)中包含一比特的有效位信息,用來表示該表項(xiàng)中的數(shù)據(jù)是有效的,否則不管表項(xiàng)中其他比特為什么值, 均是無效的,該有效位在控制模塊14通過第一創(chuàng)建指針單元18或者第二創(chuàng)建指針單元20 將數(shù)據(jù)創(chuàng)建到表項(xiàng)中時(shí)被置位,在控制模塊14通過第一發(fā)射指針單元22或者第二發(fā)射指針單元M將數(shù)據(jù)從表項(xiàng)中發(fā)射出去時(shí)被清零。請(qǐng)參照?qǐng)D3所示,為本發(fā)明第一實(shí)施例在跳轉(zhuǎn)到字對(duì)齊地址時(shí)對(duì)一條16位指令進(jìn)行旁路時(shí)的一種情況。圖3(A)為一段程序,當(dāng)程序發(fā)生跳轉(zhuǎn),轉(zhuǎn)移到該程序段時(shí),因?yàn)槌绦蚨蔚娜肟诘刂肥亲謱?duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖3(A)中所示的程序段指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為一條16位指令(指令1)和半條32位指令(指令i)??刂颇K14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中沒有有效數(shù)據(jù),表示循環(huán)緩沖器10中沒有指令。因此,滿足指令旁路的兩個(gè)條件。如圖3(B)所示,控制模塊14控制數(shù)據(jù)選通器12選通指令內(nèi)存的數(shù)據(jù),將其中的一條完整指令,即指令1發(fā)往指令譯碼單元觀。因?yàn)閺闹噶畲鎯?chǔ)器26取出的數(shù)據(jù)中除了被旁路的指令外,還包含其他數(shù)據(jù),這里具體為半條指令2,控制模塊14將這半條指令2創(chuàng)建到第一創(chuàng)建指針單元18所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)一位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。請(qǐng)參照?qǐng)D4所示,為本發(fā)明第一實(shí)施例在跳轉(zhuǎn)到字對(duì)齊地址時(shí)對(duì)一條32位指令進(jìn)行旁路時(shí)的一種情況。圖4(A)為一段程序,當(dāng)程序發(fā)生跳轉(zhuǎn),轉(zhuǎn)移到該程序段時(shí),因?yàn)槌绦蚨蔚娜肟诘刂肥亲謱?duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖3 (A)中所示的程序段指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為一條32位指令(指令1)??刂颇K14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中沒有有效數(shù)據(jù),表示循環(huán)緩沖器10中沒有指令。因此,滿足指令旁路的兩個(gè)條件。如圖4(B)所示,控制模塊14控制數(shù)據(jù)選通器12選通指令內(nèi)存的數(shù)據(jù),將其中的一條完整指令,即指令1發(fā)往指令譯碼單元觀。因?yàn)閺闹噶畲鎯?chǔ)器沈取出的數(shù)據(jù)中除了被旁路的指令外,不包含其他數(shù)據(jù),所以沒有數(shù)據(jù)創(chuàng)建到循環(huán)緩沖器10中。請(qǐng)參照?qǐng)D5所示,為本發(fā)明第一實(shí)施例在跳轉(zhuǎn)到非字對(duì)齊地址時(shí)對(duì)一條16位指令進(jìn)行旁路時(shí)的一種情況。圖5(A)為一段程序,當(dāng)程序發(fā)生跳轉(zhuǎn),轉(zhuǎn)移到該程序段時(shí),因?yàn)槌绦蚨蔚娜肟诘刂肥欠亲謱?duì)齊的,所以從指令存儲(chǔ)器26中取出16位有效數(shù)據(jù),控制模塊14 通過指令預(yù)譯碼單元16對(duì)取出的16位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖5(A)中所示的程序段指令排布情況,通過預(yù)譯碼得出此16位數(shù)據(jù)的組織形式為一條16位指令(指令1)??刂颇K 14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中沒有有效數(shù)據(jù),表示循環(huán)緩沖器10中沒有指令。因此,滿足指令旁路的兩個(gè)條件。 如圖5(B)所示,控制模塊14控制數(shù)據(jù)選通器12選通指令內(nèi)存的數(shù)據(jù),將其中的一條完整指令,即指令1發(fā)往指令譯碼單元觀。因?yàn)閺闹噶畲鎯?chǔ)器沈取出的數(shù)據(jù)中除了被旁路的指令外,不包含其他數(shù)據(jù),所以沒有數(shù)據(jù)創(chuàng)建到循環(huán)緩沖器10中。請(qǐng)參照?qǐng)D6所示,為本發(fā)明第一實(shí)施例在跳轉(zhuǎn)到非字對(duì)齊地址時(shí)不能對(duì)一條32位指令進(jìn)行旁路時(shí)的一種情況。圖6(A)為一段程序,當(dāng)程序發(fā)生跳轉(zhuǎn),轉(zhuǎn)移到該程序段時(shí),因?yàn)槌绦蚨蔚娜肟诘刂肥欠亲謱?duì)齊的,所以從指令存儲(chǔ)器沈中取出16位有效數(shù)據(jù),控制模塊 14通過指令預(yù)譯碼單元16對(duì)取出的16位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖6 (A)中所示的程序段指令排布情況,通過預(yù)譯碼得出此16位數(shù)據(jù)的組織形式為半條32位指令(指令1)。取出的數(shù)據(jù)沒有包含一條完整的指令,因此,不滿足指令旁路條件。如圖6 (B)所示,控制模塊14將這半條指令1創(chuàng)建到第一創(chuàng)建指針單元18所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)一位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。請(qǐng)參照?qǐng)D7所示,為本發(fā)明第一實(shí)施例在處理一段程序的情況。如圖7㈧所示, 該段程序分為兩個(gè)小段,第一段的入口地址是字對(duì)齊的,第二段的入口地址是非字對(duì)齊的。當(dāng)程序跳轉(zhuǎn)到第一段程序時(shí),因?yàn)槿肟诘刂肥亲謱?duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼, 根據(jù)圖7(A)中所示的程序段指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為一條16位指令(指令1)和半條32位指令(指令i)。控制模塊14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中沒有有效數(shù)據(jù),表示循環(huán)緩沖器10中沒有指令。因此,滿足指令旁路的兩個(gè)條件??刂颇K14控制數(shù)據(jù)選通器12選通指令內(nèi)存的數(shù)據(jù),將其中的一條完整指令,即指令1發(fā)往指令譯碼單元觀。因?yàn)閺闹噶畲鎯?chǔ)器26取出的數(shù)據(jù)中除了被旁路的指令外,還包含其他數(shù)據(jù),這里具體為半條指令2,如圖7(B)所示,控制模塊14將這半條指令2創(chuàng)建到第一創(chuàng)建指針單元18所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)一位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。下一周期,因?yàn)樵L問地址是字對(duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖7 (A)中所示的程序指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為半條32位指令(指令 2)和另外半條32位指令(指令幻??刂颇K14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中有有效數(shù)據(jù),表示循環(huán)緩沖器10 中有指令。所以不能對(duì)指令進(jìn)行旁路。這時(shí)第二發(fā)射指針單元M所指向的表項(xiàng)中沒有有效的數(shù)據(jù),因此整個(gè)循環(huán)緩沖器10中只有半條指令(指令2、,因此也不能從循環(huán)緩沖器10 中選取指令發(fā)射??刂颇K14控制數(shù)據(jù)選通器12不選通循環(huán)緩沖器10以及指令存儲(chǔ)器沈中的任何一路,即沒有指令發(fā)射到指令譯碼單元觀。如圖7(C)所示,控制模塊14將半條指令2和半條指令3創(chuàng)建到第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)兩位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。當(dāng)程序跳轉(zhuǎn)到第二段程序時(shí),因?yàn)槿肟诘刂肥欠亲謱?duì)齊的,所以從指令存儲(chǔ)器沈中取出16位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的16位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖7(A)中所示的程序指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為半條32位指令(指令16)。取出的數(shù)據(jù)沒有包含一條完整的指令,所以不能對(duì)指令進(jìn)行旁路。 如圖7(D)所示,控制模塊14將半條指令16創(chuàng)建到第一創(chuàng)建指針單元18所指向的表項(xiàng)中, 同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)一位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。下一周期,因?yàn)樵L問地址是字對(duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖7 (A)中所示的程序指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為半條32位指令(指令 16)和一條16位指令(指令17)。控制模塊14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中有有效數(shù)據(jù),表示循環(huán)緩沖器10中有指令。所以不能對(duì)指令進(jìn)行旁路。這時(shí)第二發(fā)射指針單元M所指向的表項(xiàng)中沒有有效的數(shù)據(jù),因此整個(gè)循環(huán)緩沖器10中只有半條指令(指令16),因此也不能從循環(huán)緩沖器10 中選取指令發(fā)射??刂颇K14控制數(shù)據(jù)選通器12不選通循環(huán)緩沖器10以及指令存儲(chǔ)器 26中的任何一路,即沒有指令發(fā)射到指令譯碼單元觀。如圖7(E)所示,控制模塊14將半條指令16和一條指令17創(chuàng)建到第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)兩位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。下一周期,因?yàn)樵L問地址是字對(duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖7 (A)中所示的程序指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為一條32位指令(指令 18)。控制模塊14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中有有效數(shù)據(jù),表示循環(huán)緩沖器10中有指令。所以不能對(duì)指令進(jìn)行旁路。如圖7(F)所示,控制模塊14控制數(shù)據(jù)選通器12從循環(huán)緩沖器10中選取指令發(fā)射到指令譯碼單元28,因?yàn)榇藭r(shí)第一發(fā)射指針單元22和第二發(fā)射指針單元M所指向的表項(xiàng)中的數(shù)據(jù)可以合成一條完整的32位指令,即指令16,所以從循環(huán)緩沖器10中發(fā)射一條 32位指令,同時(shí)第一發(fā)射指針單元22和第二發(fā)射指針單元M分出向后偏移兩位,指向下一次將要發(fā)射數(shù)據(jù)的表項(xiàng)。控制模塊14將一條指令18創(chuàng)建到第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20分別向后移動(dòng)兩位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。 經(jīng)過兩個(gè)周期,第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元20已經(jīng)在移動(dòng)到循環(huán)緩沖器10的一端端口之后又重新回到起始端口開始創(chuàng)建數(shù)據(jù),一次覆蓋已經(jīng)被發(fā)射的舊數(shù)據(jù),如圖7(G)所示。此時(shí)因?yàn)樵L問地址是字對(duì)齊的,所以從指令存儲(chǔ)器沈中取出32位有效數(shù)據(jù),控制模塊14通過指令預(yù)譯碼單元16對(duì)取出的32位數(shù)據(jù)進(jìn)行預(yù)譯碼,根據(jù)圖 7(A)中所示的程序指令排布情況,通過預(yù)譯碼得出此32位數(shù)據(jù)的組織形式為一條32位指令(指令20)??刂颇K14通過指令第一發(fā)射指針單元22檢測(cè)循環(huán)緩沖器10狀態(tài),此時(shí)第一發(fā)射指針單元22指向的表項(xiàng)中有有效數(shù)據(jù),表示循環(huán)緩沖器10中有指令。所以不能對(duì)指令進(jìn)行旁路。如圖7(G)所示,控制模塊14控制數(shù)據(jù)選通器12從循環(huán)緩沖器10中選取指令發(fā)射到指令譯碼單元28,因?yàn)榇藭r(shí)第一發(fā)射指針單元22和第二發(fā)射指針單元M所指向的表項(xiàng)中的數(shù)據(jù)可以合成一條完整的32位指令,即指令18,所以從循環(huán)緩沖器10中發(fā)射一條32位指令,同時(shí)第一發(fā)射指針單元22和第二發(fā)射指針單元M分別向后移動(dòng)兩位, 指向下一次將要發(fā)射數(shù)據(jù)的表項(xiàng)??刂颇K14將一條指令20創(chuàng)建到第一創(chuàng)建指針單元18 和第二創(chuàng)建指針單元20所指向的表項(xiàng)中,同時(shí)第一創(chuàng)建指針單元18和第二創(chuàng)建指針單元 20分別向后移動(dòng)兩位,指向下一次將要?jiǎng)?chuàng)建數(shù)據(jù)的表項(xiàng)。
1權(quán)利要求
1.一種16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于所述指令預(yù)取緩沖器裝置包括循環(huán)緩沖器,用于連接于指令存儲(chǔ)器的輸出端,將從指令存儲(chǔ)器中取出的數(shù)據(jù)作為指令緩存起來,指令有16位和32位兩種長度,緩存過程中新指令以循環(huán)的方式覆蓋緩沖器內(nèi)最舊的指令;數(shù)據(jù)選通器,用于連接于循環(huán)緩沖器輸出端,在循環(huán)緩沖器和指令存儲(chǔ)器之間選通一路獲得指令,發(fā)往下級(jí)流水線,在指令旁路時(shí)選通指令存儲(chǔ)器,否則選通循環(huán)緩沖器;控制模塊,用于檢測(cè)循環(huán)緩沖器狀態(tài),控制模塊連接循環(huán)緩沖器,維護(hù)循環(huán)緩沖器中指令的創(chuàng)建,控制模塊連接數(shù)據(jù)選通器,為數(shù)據(jù)選通器提供選通信號(hào),控制指令信息發(fā)送到下級(jí)流水線;當(dāng)控制模塊監(jiān)測(cè)循環(huán)緩沖器中沒有指令時(shí),控制模塊控制數(shù)據(jù)選通器選通指令存儲(chǔ)器通路,指令存儲(chǔ)器中的指令將繞過循環(huán)緩沖器直接被發(fā)射到流水線后級(jí);當(dāng)控制模塊監(jiān)測(cè)到循環(huán)緩沖器中存在指令時(shí),控制模塊控制數(shù)據(jù)選通器選通循環(huán)緩沖器輸出的指令。
2.如權(quán)利要求1所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于每次從指令存儲(chǔ)器中取出數(shù)據(jù)的位寬與所訪問的指令存儲(chǔ)器的寬度相同,其中有效數(shù)據(jù)的位寬根據(jù)訪問地址的字對(duì)齊狀況不同而變化。
3.如權(quán)利要求1所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于所述循環(huán)緩沖器以16位指令長度為單位緩存指令,所述單位緩存指包含的表項(xiàng)數(shù)目是可配置的。
4.如權(quán)利要求1所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于循環(huán)緩沖器的每個(gè)表項(xiàng)容納一條16位指令或半條32位指令。
5.如權(quán)利要求1 4之一所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于 所述控制模塊包括第一創(chuàng)建指針單元、第二創(chuàng)建指針單元、第一發(fā)射指針單元、第二發(fā)射指針單元和預(yù)解碼單元,所述第一創(chuàng)建指針單元和第二創(chuàng)建指針單元指示當(dāng)前從指令存儲(chǔ)器中獲取的數(shù)據(jù)在循環(huán)緩沖器中創(chuàng)建的位置,第二創(chuàng)建指針單元在第一創(chuàng)建指針單元基礎(chǔ)上偏移一個(gè)表項(xiàng);第一發(fā)射指針單元和第二發(fā)射指針單元為當(dāng)前從循環(huán)緩沖器中讀取的目標(biāo)指令的位置,第二發(fā)射指針單元在第一發(fā)射指針單元的基礎(chǔ)上偏移一個(gè)表項(xiàng)。
6.如權(quán)利要求5所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于若向循環(huán)緩沖器中創(chuàng)建32位數(shù)據(jù)時(shí),在第一創(chuàng)建指針單元和第二創(chuàng)建指針單元指向的表項(xiàng)中各創(chuàng)建16位數(shù)據(jù),同時(shí)第一創(chuàng)建指針單元和第二創(chuàng)建指針單元分別向后移動(dòng)兩個(gè)表項(xiàng);若向循環(huán)緩沖器中創(chuàng)建16位數(shù)據(jù)時(shí),在第一創(chuàng)建指針單元指向的表項(xiàng)中創(chuàng)建16位數(shù)據(jù),第二創(chuàng)建指針單元對(duì)應(yīng)的表項(xiàng)不創(chuàng)建內(nèi)容,同時(shí)第一創(chuàng)建指針單元和第二創(chuàng)建指針單元分別向后移動(dòng)一個(gè)表項(xiàng)。
7.如權(quán)利要求5所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于當(dāng)數(shù)據(jù)選通器從循環(huán)緩沖器中選通32位指令時(shí),將第一發(fā)射指針單元和第二發(fā)射指針單元指向的表項(xiàng)中的數(shù)據(jù)組合成32位指令輸出,同時(shí)第一發(fā)射指針單元和第二發(fā)射指針單元分別向后移動(dòng)兩個(gè)表項(xiàng);當(dāng)數(shù)據(jù)選通器從循環(huán)緩沖器中選通16位指令時(shí),將第一發(fā)射指針單元指向的表項(xiàng)中的16位指令輸出,同時(shí)第一發(fā)射指針單元和第二發(fā)射指針單元分別向后移動(dòng)一個(gè)表項(xiàng)。
8.如權(quán)利要求1 4之一所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于在循環(huán)緩沖器為空的情況下,若從指令存儲(chǔ)器中取出的數(shù)據(jù)中包括1條16位或者32位指令,該指令不進(jìn)入循環(huán)緩沖器,直接進(jìn)入后級(jí)流水線。
9.如權(quán)利要求1 4之一所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于 在循環(huán)緩沖器為空的情況下,若從指令存儲(chǔ)器中取出的數(shù)據(jù)中包含1條16位指令及其他指令,16位指令不進(jìn)入循環(huán)緩沖器,直接進(jìn)入后級(jí)流水線,剩余指令進(jìn)入循環(huán)緩沖器。
10.如權(quán)利要求1 4之一所述的16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,其特征在于在循環(huán)緩沖器為空的情況下,若從指令存儲(chǔ)器中取出的數(shù)據(jù)中包含半條32位指令,則半條32位指令先進(jìn)入循環(huán)緩沖器緩存,等待后續(xù)半條指令進(jìn)入循環(huán)緩沖器后一起發(fā)射到后級(jí)流水線。
全文摘要
一種16/32位混合架構(gòu)指令預(yù)取緩沖器裝置,包括循環(huán)緩沖器,用于將從指令存儲(chǔ)器中取出的數(shù)據(jù)作為指令緩存起來,指令有16位和32位兩種長度,緩存過程中新指令以循環(huán)的方式覆蓋緩沖器內(nèi)最舊的指令;數(shù)據(jù)選通器,用于在循環(huán)緩沖器和指令存儲(chǔ)器之間選通一路獲得指令,發(fā)往下級(jí)流水線,在指令旁路時(shí)選通指令存儲(chǔ)器,否則選通循環(huán)緩沖器;當(dāng)控制模塊監(jiān)測(cè)循環(huán)緩沖器中沒有指令時(shí),控制數(shù)據(jù)選通器選通指令存儲(chǔ)器通路,指令存儲(chǔ)器中的指令將繞過循環(huán)緩沖器直接被發(fā)射到流水線后級(jí);當(dāng)監(jiān)測(cè)到循環(huán)緩沖器中存在指令時(shí),控制數(shù)據(jù)選通器選通循環(huán)緩沖器輸出的指令。本發(fā)明實(shí)現(xiàn)流水線緩沖功能,同時(shí)簡化對(duì)變長指令取指的復(fù)雜度,提升性能同時(shí)降低成本。
文檔編號(hào)G06F9/38GK102436367SQ20111028770
公開日2012年5月2日 申請(qǐng)日期2011年9月26日 優(yōu)先權(quán)日2011年9月26日
發(fā)明者孟建熠, 李春強(qiáng), 郭宇波, 陳晨 申請(qǐng)人:杭州中天微系統(tǒng)有限公司