一種數(shù)據(jù)緩存系統(tǒng)及方法
【專利摘要】本發(fā)明提供了一種數(shù)據(jù)緩存系統(tǒng)及方法。在本發(fā)明提供的數(shù)據(jù)緩存系統(tǒng)及方法中,利用在指令緩存或數(shù)據(jù)軌道表中存儲(chǔ)相關(guān)信息提前對數(shù)據(jù)緩存進(jìn)行填充,并提前控制數(shù)據(jù)緩存向處理器輸出可能被訪問的數(shù)據(jù),從而部分或全部掩蓋了數(shù)據(jù)緩存缺失造成的等待時(shí)間和/或?qū)?shù)據(jù)緩存的訪問時(shí)延。
【專利說明】一種數(shù)據(jù)緩存系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)架構(gòu)【技術(shù)領(lǐng)域】,特別涉及一種數(shù)據(jù)緩存系統(tǒng)及方法。
【背景技術(shù)】
[0002]通常而言,緩存的作用是將內(nèi)存中的一部分內(nèi)容復(fù)制在其中,使這些內(nèi)容能在短時(shí)間內(nèi)由處理器核快速存取,以保證流水線的持續(xù)運(yùn)行。
[0003]現(xiàn)行緩存的尋址都基于以下方式,首先用地址中的索引段尋址讀出標(biāo)簽存儲(chǔ)器中的標(biāo)簽。同時(shí)用地址中索引段與塊內(nèi)位移段共同尋址讀出緩存中的內(nèi)容。此外,將標(biāo)簽存儲(chǔ)器中讀出的標(biāo)簽與地址中的標(biāo)簽段進(jìn)行匹配。如果從標(biāo)簽存儲(chǔ)器中讀出的標(biāo)簽與地址中的標(biāo)簽段相同,那么從緩存中讀出的內(nèi)容有效,稱為緩存命中。否則,如果從標(biāo)簽存儲(chǔ)器中讀出的標(biāo)簽與地址中的標(biāo)簽段不相同,成為緩存缺失,從緩存中讀出的內(nèi)容無效。對于多路組相聯(lián)的緩存,同時(shí)對各個(gè)路組并行進(jìn)行上述操作,以檢測哪個(gè)路組緩存命中。命中路組對應(yīng)的讀出內(nèi)容為有效內(nèi)容。若所有路組都為缺失,則所有讀出內(nèi)容都無效。緩存缺失之后,緩存控制邏輯將低級存儲(chǔ)媒介中的內(nèi)容填充到緩存中。
[0004]在現(xiàn)有緩存結(jié)構(gòu)中,各種各樣的緩存預(yù)取技術(shù)被用來減少緩存缺失的發(fā)生。對于指令緩存而言,預(yù)取技術(shù)能帶來一定的性能提升。但是對于數(shù)據(jù)緩存,由于數(shù)據(jù)地址的不確定性,很難有效地對數(shù)據(jù)地址進(jìn)行預(yù)測。因此,隨著日漸擴(kuò)大的處理器/存儲(chǔ)器速度鴻溝,數(shù)據(jù)緩存缺失仍是制約現(xiàn)代處理器性能提升的最嚴(yán)重瓶頸。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于提供一種數(shù)據(jù)緩存系統(tǒng)及方法,根據(jù)事先記錄的數(shù)據(jù)讀取指令(LOAD指令)相關(guān)信息預(yù)測該指令的數(shù)據(jù)地址,從而提前從外部存儲(chǔ)器預(yù)取相應(yīng)數(shù)據(jù)塊將對應(yīng)數(shù)據(jù)塊填充到數(shù)據(jù)緩存中,并在處理器執(zhí)行到該數(shù)據(jù)讀取指令之前向處理器提供對應(yīng)數(shù)據(jù),部分或全部掩蓋了數(shù)據(jù)緩存缺失造成的等待時(shí)間和/或?qū)?shù)據(jù)緩存的訪問時(shí)延,提高了指令處理系統(tǒng)的性能。對于數(shù)據(jù)存儲(chǔ)指令(STORE指令),也可以用類似的方法提高性倉泛。
[0006]為解決上述技術(shù)問題,本發(fā)明提供了一種數(shù)據(jù)緩存系統(tǒng),所述數(shù)據(jù)緩存系統(tǒng)包括:處理器,所述處理器用以執(zhí)行指令、讀取數(shù)據(jù);存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)用以存儲(chǔ)指令和數(shù)據(jù);指令軌道表,所述指令軌道表存儲(chǔ)所述存儲(chǔ)系統(tǒng)中存儲(chǔ)的分支指令的相關(guān)信息;循跡器,所述循跡器指向處理器當(dāng)前正在執(zhí)行的指令之后的第一條數(shù)據(jù)讀取指令;數(shù)據(jù)引擎,所述數(shù)據(jù)引擎用以在處理器執(zhí)行所述循跡器指向的數(shù)據(jù)讀取指令之前,提前計(jì)算出數(shù)據(jù)地址,并根據(jù)所述數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供對應(yīng)數(shù)據(jù)。
[0007]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述存儲(chǔ)系統(tǒng)進(jìn)一步包含指令緩存,所述指令緩存用以存儲(chǔ)供處理器執(zhí)行的指令及數(shù)據(jù)讀取指令的相關(guān)信息;所述相關(guān)信息表示該指令是否為數(shù)據(jù)讀取指令。
[0008]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)讀取指令的相關(guān)信息為數(shù)據(jù)讀取指令的類型信息;根據(jù)所述類型信息,可以直接得到基地址寄存器號(hào)、地址偏移量在該指令碼中的位置信息。
[0009]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述存儲(chǔ)系統(tǒng)進(jìn)一步包含數(shù)據(jù)軌道表,所述數(shù)據(jù)軌道表用以存儲(chǔ)數(shù)據(jù)讀取指令的相關(guān)信息;所述相關(guān)信息表示該指令是否為數(shù)據(jù)相關(guān)指令;且所述數(shù)據(jù)軌道表的行與指令軌道表的行一一對應(yīng)。
[0010]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)讀取指令的相關(guān)信息為數(shù)據(jù)讀取指令的類型信息;根據(jù)所述類型信息,可以直接得到基地址寄存器號(hào)、地址偏移量在該指令碼中的位置信息。
[0011]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)軌道表進(jìn)一步存儲(chǔ)了數(shù)據(jù)讀取指令的基地址寄存器號(hào)和地址偏移量中的至少一項(xiàng)內(nèi)容。
[0012]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎以基地址寄存器值加地址偏移量得到確定數(shù)據(jù)地址;或以基地址寄存器值作為確定數(shù)據(jù)地址;或以指令地址值加地址偏移量得到確定數(shù)據(jù)地址;或多個(gè)基地址寄存器值相加得到確定數(shù)據(jù)地址。
[0013]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)緩存系統(tǒng)包含一個(gè)時(shí)間點(diǎn)檢測模塊;所述時(shí)間點(diǎn)檢測模塊用以判斷是否到達(dá)向存儲(chǔ)系統(tǒng)輸出數(shù)據(jù)地址以讀出數(shù)據(jù)并提供給處理器的時(shí)間點(diǎn)。
[0014]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎進(jìn)一步包含判斷模塊,所述判斷模塊對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值;且當(dāng)基地址寄存器的值被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),用數(shù)據(jù)引擎計(jì)算得到的所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0015]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎進(jìn)一步包含基地址差值存儲(chǔ)器,所述基地址差值存儲(chǔ)器中的每一項(xiàng)對應(yīng)一個(gè)基地址寄存器,用于存儲(chǔ)對應(yīng)基地址寄存器的變化差值。
[0016]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎還能夠以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址。
[0017]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎進(jìn)一步包含判斷模塊,所述判斷模塊對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值;且當(dāng)基地址寄存器的值尚未被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù);當(dāng)基地址寄存器的值已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0018]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎進(jìn)一步包含比較器,在所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)的情況下,當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),所述比較器對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0019]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,對于任意數(shù)據(jù)讀取指令,所述數(shù)據(jù)引擎在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
[0020]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎中的加法器對所述實(shí)際數(shù)據(jù)地址與對應(yīng)基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
[0021]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎進(jìn)一步包含基地址差值存儲(chǔ)器,所述基地址差值存儲(chǔ)器中的每一項(xiàng)對應(yīng)一個(gè)基地址寄存器,用于存儲(chǔ)對應(yīng)基地址寄存器的變化差值;所述數(shù)據(jù)引擎在處理器執(zhí)行所述數(shù)據(jù)讀取指令之前,以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址。
[0022]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎進(jìn)一步包含比較器,在所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)的情況下,當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),所述比較器對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0023]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,對于任意數(shù)據(jù)讀取指令,所述數(shù)據(jù)引擎在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且當(dāng)所述可能數(shù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
[0024]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)引擎中的加法器對所述實(shí)際數(shù)據(jù)地址與所述基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
[0025]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述指令軌道表和數(shù)據(jù)軌道表的列數(shù)均可以少于指令塊中指令個(gè)數(shù);且所述指令軌道表的每個(gè)表項(xiàng)對應(yīng)一條分支指令,其表項(xiàng)格式包含分支目標(biāo)指令塊上從分支目標(biāo)指令開始的第一條分支指令在指令軌道表中的行地址和列地址,以及所述分支目標(biāo)指令塊上從所述分支目標(biāo)指令開始的第一條數(shù)據(jù)讀取指令在數(shù)據(jù)軌道表中的列地址;所述數(shù)據(jù)軌道表的每個(gè)表項(xiàng)對應(yīng)一條數(shù)據(jù)讀取指令。
[0026]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)緩存系統(tǒng)進(jìn)一步包括數(shù)據(jù)讀緩沖,所述數(shù)據(jù)讀緩沖存儲(chǔ)當(dāng)前指令之后的若干條數(shù)據(jù)讀取指令可能用到的數(shù)據(jù),供處理器讀取。
[0027]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,所述數(shù)據(jù)緩存系統(tǒng)進(jìn)一步包括指令讀緩沖,所述指令讀緩沖存儲(chǔ)了至少包括當(dāng)前指令塊在內(nèi)的單數(shù)個(gè)或復(fù)數(shù)個(gè)指令塊;且所述數(shù)據(jù)讀緩沖中的表項(xiàng)數(shù)目與所述指令讀緩沖中的指令數(shù)目相同,且--對應(yīng);對于指令讀緩沖中的任意數(shù)據(jù)讀取指令,其在數(shù)據(jù)讀緩沖中的對應(yīng)表項(xiàng)用于存儲(chǔ)該數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。
[0028]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,使用同一數(shù)據(jù)讀取指令的指令地址或指令地址偏移量,能夠從所述指令讀緩沖和數(shù)據(jù)讀緩沖中同時(shí)讀出所述數(shù)據(jù)讀取指令及對應(yīng)數(shù)據(jù)。
[0029]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,根據(jù)數(shù)據(jù)讀取指令與該指令之前最后更新對應(yīng)基地址寄存器值的指令之間的距離,對數(shù)據(jù)讀取指令分類;根據(jù)所述分類,在不同的時(shí)間點(diǎn)控制數(shù)據(jù)緩存將不同類型的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)讀緩沖中。
[0030]可選的,在所述的數(shù)據(jù)緩存系統(tǒng)中,記錄指令讀緩沖中的數(shù)據(jù)讀取指令對應(yīng)數(shù)據(jù)是否已經(jīng)存儲(chǔ)在數(shù)據(jù)讀緩沖中的信息,并根據(jù)所述信息對相應(yīng)數(shù)據(jù)尚未存儲(chǔ)在數(shù)據(jù)讀緩沖中的數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存將對應(yīng)的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)讀緩沖中。
[0031]本發(fā)明還提供了一種數(shù)據(jù)緩存方法,所述數(shù)據(jù)緩存方法包括:提前找到處理器當(dāng)前正在執(zhí)行的指令之后的數(shù)據(jù)讀取指令;在處理器執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出數(shù)據(jù)地址,并根據(jù)所述數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供對應(yīng)數(shù)據(jù)。
[0032]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:以基地址寄存器值加地址偏移量得到確定數(shù)據(jù)地址;或以基地址寄存器值作為確定數(shù)據(jù)地址;或以指令地址值加地址偏移量得到確定數(shù)據(jù)地址;或多個(gè)基地址寄存器值相加得到確定數(shù)據(jù)地址。
[0033]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:通過對所述數(shù)據(jù)讀取指令的地址與處理器當(dāng)前執(zhí)行的指令的地址進(jìn)行比較,以判斷是否到達(dá)向存儲(chǔ)系統(tǒng)輸出數(shù)據(jù)地址以讀出數(shù)據(jù)并提供給處理器的時(shí)間點(diǎn);且當(dāng)基地址寄存器的值已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0034]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:記錄所有基地址寄存器的變化差值。
[0035]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址。
[0036]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:通過對所述數(shù)據(jù)讀取指令的地址與處理器當(dāng)前執(zhí)行的指令的地址進(jìn)行比較,以判斷是否到達(dá)向存儲(chǔ)系統(tǒng)輸出數(shù)據(jù)地址以讀出數(shù)據(jù)并提供給處理器的時(shí)間點(diǎn)。
[0037]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值;且當(dāng)基地址寄存器的值尚未被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù);當(dāng)基地址寄存器的值已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0038]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:在選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)的情況下,當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),所述比較器對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0039]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:對于任意數(shù)據(jù)讀取指令,在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
[0040]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:對所述實(shí)際數(shù)據(jù)地址與所述基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
[0041]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:記錄所有基地址寄存器的變化差值;在處理器執(zhí)行所述數(shù)據(jù)讀取指令之前,以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址;根據(jù)所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù);當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
[0042]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:對于任意數(shù)據(jù)讀取指令,在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
[0043]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:對所述實(shí)際數(shù)據(jù)地址與所述基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
[0044]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:建立數(shù)據(jù)讀取指令與對應(yīng)數(shù)據(jù)之間的聯(lián)系;使用同一數(shù)據(jù)讀取指令的指令地址或指令地址偏移量,同時(shí)讀出所述數(shù)據(jù)讀取指令及對應(yīng)數(shù)據(jù)。
[0045]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:根據(jù)數(shù)據(jù)讀取指令與該指令之前最后更新對應(yīng)基地址寄存器值的指令之間的距離,對數(shù)據(jù)讀取指令分類;根據(jù)所述分類,在不同的時(shí)間點(diǎn)控制數(shù)據(jù)緩存輸出不同類型的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。
[0046]可選的,所述的數(shù)據(jù)緩存方法進(jìn)一步包括:記錄數(shù)據(jù)讀取指令對應(yīng)數(shù)據(jù)是否已經(jīng)由數(shù)據(jù)緩存輸出的信息,并根據(jù)所述信息對相應(yīng)數(shù)據(jù)尚未由數(shù)據(jù)緩存輸出的數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存輸出對應(yīng)的數(shù)據(jù)。
【專利附圖】
【附圖說明】
[0047]圖1是本發(fā)明實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的一框結(jié)構(gòu)示意圖;
[0048]圖2是本發(fā)明實(shí)施例的循跡器的一框結(jié)構(gòu)示意圖;
[0049]圖3a是本發(fā)明實(shí)施例的數(shù)據(jù)引擎的一示意圖;
[0050]圖3b是本發(fā)明實(shí)施例的判斷模塊的一示意圖;
[0051]圖3c是本發(fā)明實(shí)施例的數(shù)據(jù)引擎的另一示意圖;
[0052]圖3d是本發(fā)明實(shí)施例的計(jì)算基地址差值的一示意圖;
[0053]圖4是本發(fā)明實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的另一框結(jié)構(gòu)示意圖;
[0054]圖5a是本發(fā)明實(shí)施例的數(shù)據(jù)引擎的另一示意圖;
[0055]圖5b是本發(fā)明實(shí)施例的判斷模塊的另一示意圖;
[0056]圖6是本發(fā)明實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的另一框結(jié)構(gòu)示意圖;
[0057]圖7是本發(fā)明實(shí)施例的壓縮軌道表應(yīng)用的示意圖;
[0058]圖8a是本發(fā)明實(shí)施例的指令讀緩沖和數(shù)據(jù)讀緩沖配合工作的一示意圖;
[0059]圖8b是本發(fā)明實(shí)施例的指令讀緩沖和數(shù)據(jù)讀緩沖配合工作的另一示意圖;
[0060]圖Sc是本發(fā)明實(shí)施例的指令讀緩沖和數(shù)據(jù)讀緩沖配合工作的另一示意圖。
【具體實(shí)施方式】
[0061]以下結(jié)合附圖和具體實(shí)施例對本發(fā)明提出的數(shù)據(jù)緩存系統(tǒng)及方法作進(jìn)一步詳細(xì)說明。根據(jù)下面說明和權(quán)利要求書,本發(fā)明的優(yōu)點(diǎn)和特征將更清楚。需說明的是,附圖均采用非常簡化的形式且均使用非精準(zhǔn)的比例,僅用以方便、明晰地輔助說明本發(fā)明實(shí)施例的目的。
[0062]為了便于描述,在本說明書中,以數(shù)據(jù)讀取指令為例對本發(fā)明技術(shù)方案進(jìn)行說明。對于數(shù)據(jù)存儲(chǔ)指令,也可以用類似方式實(shí)現(xiàn)。
[0063]請參考圖1,其為本發(fā)明實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的一框結(jié)構(gòu)示意圖。如圖1所示,所述數(shù)據(jù)緩存系統(tǒng)包含處理器101、主動(dòng)表109、數(shù)據(jù)塊地址存儲(chǔ)比較器127、掃描器111、指令軌道表107、循跡器119、指令緩存103、數(shù)據(jù)緩存113、數(shù)據(jù)引擎105和時(shí)間點(diǎn)檢測模塊148。應(yīng)當(dāng)理解的是,這里列出各種部件的目的是為了便于描述,還可以包含其他部件,而某些部件可以被省略。這里的各種部件可以分布在多個(gè)系統(tǒng)中,可以是物理上存在的或是虛擬的,可以是硬件實(shí)現(xiàn)(如:集成電路)、軟件實(shí)現(xiàn)或由硬件和軟件組合實(shí)現(xiàn)。
[0064]在本發(fā)明中,處理器可以是包含指令緩存和數(shù)據(jù)緩存、能執(zhí)行指令并對數(shù)據(jù)進(jìn)行處理的處理單元,包括但不限于:通用處理器(General Processor)、中央處理器(CPU)、微控制器(MCU)、數(shù)字信號(hào)處理器(DSP)、圖象處理器(GPU)、片上系統(tǒng)(SOC)、專用集成電路(ASIC)等。
[0065]在本發(fā)明中,存儲(chǔ)器的層次指的是存儲(chǔ)器與處理器101之間的接近程度。越接近處理器101的層次越高。此外,一個(gè)高層次的存儲(chǔ)器(如指令緩存103和數(shù)據(jù)緩存113)通常比低層次的存儲(chǔ)器速度快但容量小。“最接近處理器的存儲(chǔ)器”指的是在存儲(chǔ)層次中離處理器最近、通常也是速度最快的存儲(chǔ)器,如本實(shí)施例中的指令緩存103和數(shù)據(jù)緩存113。此夕卜,本發(fā)明中的各個(gè)層次的存儲(chǔ)器具有包含關(guān)系,即層次較低的存儲(chǔ)器含有層次較高的存儲(chǔ)器中的全部存儲(chǔ)內(nèi)容。
[0066]在本發(fā)明中,分支指令指的是任何適當(dāng)?shù)哪軐?dǎo)致處理器101改變執(zhí)行流(如:非按順序執(zhí)行一條指令)的指令形式。分支源指一條進(jìn)行分支操作的指令(即:分支指令),分支源地址可以是分支指令本身的指令地址;分支目標(biāo)指的是分支指令造成的分支轉(zhuǎn)移所轉(zhuǎn)向的目標(biāo)指令,分支目標(biāo)地址可以指當(dāng)分支指令的分支轉(zhuǎn)移成功發(fā)生時(shí)轉(zhuǎn)移進(jìn)入的地址,也就是分支目標(biāo)指令的指令地址;數(shù)據(jù)讀取指令指的是任何適當(dāng)?shù)哪軐?dǎo)致處理器101從存儲(chǔ)器讀數(shù)據(jù)的指令形式;所述數(shù)據(jù)讀取指令的指令格式中通常包含基地址寄存器號(hào)和地址偏移量;數(shù)據(jù)讀取指令所需的數(shù)據(jù)指的是處理器101執(zhí)行數(shù)據(jù)讀取指令時(shí)讀的數(shù)據(jù);數(shù)據(jù)讀取指令的數(shù)據(jù)地址指的是處理器101執(zhí)行數(shù)據(jù)讀取指令進(jìn)行讀/寫數(shù)據(jù)所用到的地址;當(dāng)處理器核101執(zhí)行一條數(shù)據(jù)讀取指令時(shí),可以用基地址加偏移量的方式計(jì)算數(shù)據(jù)地址;基地址寄存器更新指令指的是對數(shù)據(jù)讀取指令可能用到的基地址寄存器中的任何一個(gè)的值進(jìn)行更改的指令。當(dāng)前指令可以指當(dāng)前正在被處理器核執(zhí)行或獲取的指令;當(dāng)前指令塊可以指含有當(dāng)前正被處理器執(zhí)行的指令的指令塊。
[0067]在本發(fā)明中,術(shù)語“填充”指的是在處理器執(zhí)行到一條指令之前,提前從外部存儲(chǔ)器取得相應(yīng)指令或所需數(shù)據(jù)并存儲(chǔ)到指令緩存或數(shù)據(jù)緩存。
[0068]在本發(fā)明中,指令軌道表107中的行與指令緩存103中的存儲(chǔ)塊一一對應(yīng)。指令軌道表107含有復(fù)數(shù)個(gè)軌跡點(diǎn)。在此,一個(gè)軌跡點(diǎn)是指令軌道表107中的一個(gè)表項(xiàng),可含有至少一條指令的信息,比如該指令的類型等。當(dāng)一個(gè)軌跡點(diǎn)含有的信息表示該軌跡點(diǎn)至少對應(yīng)一條分支指令時(shí),該軌跡點(diǎn)為一個(gè)分支點(diǎn),所述信息可以是分支目標(biāo)地址等。軌跡點(diǎn)的循跡地址就是該軌跡點(diǎn)本身的指令軌道表地址,且所述循跡地址由一個(gè)行地址和一個(gè)列地址構(gòu)成。軌跡點(diǎn)的循跡地址與該軌跡點(diǎn)所代表的指令的指令地址相對應(yīng),且對于分支點(diǎn)而言,每個(gè)分支點(diǎn)中含有該分支點(diǎn)所代表的分支指令的分支目標(biāo)指令在指令軌道表107中的循跡地址,且該循跡地址與該分支目標(biāo)指令的指令地址相對應(yīng)。
[0069]在本實(shí)施例中,指令緩存103除了存儲(chǔ)可能被處理器101執(zhí)行的指令外,還存儲(chǔ)有對應(yīng)每條指令的指令類型信息,如該指令是否為數(shù)據(jù)讀取指令的信息;所述指令類型信息還可以進(jìn)一步表示對應(yīng)指令是哪種類型的數(shù)據(jù)讀取指令,從而包含了如何計(jì)算數(shù)據(jù)地址的信息,如基地址寄存器號(hào)及地址偏移量在該指令碼中的位置信息等。
[0070]為便于表示,可以用BNX表示分支點(diǎn)循跡地址中的行地址,即BNX對應(yīng)指令所在存儲(chǔ)塊的位置(存儲(chǔ)塊的行號(hào)),而循跡地址中的列地址就對應(yīng)分支指令在其所在存儲(chǔ)塊中的位置(偏移量)。相應(yīng)地,每組BNX及列地址對應(yīng)指令軌道表107中的一個(gè)分支點(diǎn),即可以根據(jù)一組BNX及列地址從指令軌道表107中找到對應(yīng)的分支點(diǎn)。
[0071]進(jìn)一步地,指令軌道表107的分支點(diǎn)中還存儲(chǔ)了以循跡地址形式表示的該分支指令的分支目標(biāo)指令在指令緩存103中的位置信息。根據(jù)該循跡地址,可以在指令軌道表107中找到該分支目標(biāo)指令對應(yīng)的軌跡點(diǎn)的位置。即對于指令軌道表107的分支點(diǎn)而言,其指令軌道表地址就是其分支源地址對應(yīng)的循跡地址,其指令軌道表內(nèi)容中包含了其分支目標(biāo)地址對應(yīng)的循跡地址。
[0072]在本實(shí)施例中,主動(dòng)表109中的表項(xiàng)與指令緩存103中的存儲(chǔ)塊一一對應(yīng),即可以與指令軌道表107中的行對應(yīng)。主動(dòng)表109中的每個(gè)表項(xiàng)指明了該主動(dòng)表行對應(yīng)的指令緩存存儲(chǔ)塊存儲(chǔ)在指令緩存103中的位置,并形成了 BNX與指令緩存存儲(chǔ)塊的對應(yīng)關(guān)系。主動(dòng)表109中的每個(gè)表項(xiàng)存儲(chǔ)了一個(gè)指令緩存存儲(chǔ)塊的塊地址。這樣,當(dāng)用一個(gè)指令地址在主動(dòng)表109中進(jìn)行匹配時(shí),可以得到匹配成功項(xiàng)中存儲(chǔ)的BNX,或得到匹配不成功的結(jié)果。
[0073]數(shù)據(jù)緩存113中的每個(gè)存儲(chǔ)塊用一個(gè)存儲(chǔ)塊號(hào)表示。數(shù)據(jù)塊地址存儲(chǔ)比較器127中的表項(xiàng)與數(shù)據(jù)緩存113中的存儲(chǔ)塊一一對應(yīng),每個(gè)表項(xiàng)存儲(chǔ)了數(shù)據(jù)緩存113中對應(yīng)存儲(chǔ)塊的塊地址,并形成了數(shù)據(jù)塊地址與數(shù)據(jù)緩存存儲(chǔ)塊號(hào)的對應(yīng)關(guān)系。這樣,當(dāng)用一個(gè)數(shù)據(jù)地址在數(shù)據(jù)塊地址存儲(chǔ)比較器127中進(jìn)行匹配時(shí),可以得到匹配成功項(xiàng)中存儲(chǔ)的存儲(chǔ)塊號(hào),或得到匹配不成功的結(jié)果。
[0074]掃描器111對從外部存儲(chǔ)器送往指令緩存103的指令進(jìn)行審查,一旦發(fā)現(xiàn)某條指令是分支指令,即計(jì)算該分支指令的分支目標(biāo)地址。例如,將分支指令所在指令塊的塊地址、該分支指令在指令塊中的偏移量和分支轉(zhuǎn)移距離三者相加得到分支目標(biāo)地址。
[0075]可以將掃描器111計(jì)算得到的分支目標(biāo)指令地址與主動(dòng)表109中存儲(chǔ)的存儲(chǔ)塊行地址匹配。若匹配成功,表示該分支目標(biāo)指令已經(jīng)存儲(chǔ)在指令緩存103中,則主動(dòng)表109輸出該BNX送往指令軌道表107填入所述分支指令的相應(yīng)表項(xiàng)。若匹配不成功,則表示該分支目標(biāo)指令尚未存儲(chǔ)在指令緩存103中,此時(shí),將該分支目標(biāo)指令地址通過總線115送往外部存儲(chǔ)器,同時(shí)在主動(dòng)表109中分配一個(gè)表項(xiàng)存儲(chǔ)對應(yīng)塊地址,并輸出該BNX送往指令軌道表107填入所述分支指令的相應(yīng)表項(xiàng),并將外部存儲(chǔ)器通過總線114送來的對應(yīng)指令塊填充到指令緩存103中與該BNX對應(yīng)的存儲(chǔ)塊中,同時(shí)在指令軌道表107中相應(yīng)行中建立對應(yīng)的軌道。對于該指令塊中的分支指令,其分支目標(biāo)指令地址經(jīng)主動(dòng)表109匹配輸出一個(gè)BNX,而該分支目標(biāo)指令在其指令塊中的位置(即該分支目標(biāo)指令地址的塊內(nèi)偏移量部分)就是對應(yīng)的軌跡點(diǎn)列號(hào),從而得到了對應(yīng)該分支目標(biāo)指令的循跡地址,并將該循跡地址作為分支點(diǎn)內(nèi)容存儲(chǔ)到所述分支指令對應(yīng)的分支軌跡點(diǎn)中。相應(yīng)地,數(shù)據(jù)讀取指令在其指令塊中的位置(即該分支目標(biāo)指令地址的偏移量部分)就是對應(yīng)的數(shù)據(jù)點(diǎn)列號(hào)。此外,在掃描器111對指令塊審查的過程中,可以發(fā)現(xiàn)數(shù)據(jù)讀取指令,并將相應(yīng)指令類型信息存儲(chǔ)在指令緩存103中。如此,就可以在將指令塊填充到指令緩存103中的同時(shí),建立對應(yīng)整個(gè)指令塊的一條軌道,并記錄數(shù)據(jù)訪問相關(guān)信息。
[0076]在本發(fā)明中,循跡器119的讀指針121可以從指令軌道表107中的當(dāng)前指令對應(yīng)的軌跡點(diǎn)開始不斷移動(dòng)直到指向第一個(gè)分支點(diǎn)。此時(shí)讀指針121的值即為分支源指令的循跡地址,其中包含了 BNX和對應(yīng)的分支點(diǎn)列號(hào)。根據(jù)該循跡地址可以從指令軌道表107讀出該分支源指令的分支目標(biāo)指令循跡地址。這樣,循跡器119的讀指針121從指令軌道表107中處理器101當(dāng)前執(zhí)行的指令對應(yīng)的軌跡點(diǎn)開始,提前移動(dòng)到該軌跡點(diǎn)之后的第一個(gè)分支點(diǎn),并可以根據(jù)該目標(biāo)指令循跡地址從指令緩存103中找到該目標(biāo)指令。循跡器119的讀指針123與讀指針123中的BNX —同構(gòu)成對指令緩存103的循跡地址,從指令緩存103中當(dāng)前指令對應(yīng)的軌跡點(diǎn)開始,根據(jù)記錄在指令緩存103中的指令類型信息,提前移動(dòng)到該指令之后的第一條數(shù)據(jù)讀取指令,并讀出該數(shù)據(jù)讀取指令對應(yīng)基地址寄存器號(hào)137和地址偏移量138。
[0077]在本實(shí)施例中,指令緩存103支持多個(gè)端口的同時(shí)讀寫,從而能在根據(jù)指令地址253向處理器101提供指令251供譯碼執(zhí)行的同時(shí),輸出讀指針123指向的數(shù)據(jù)讀取指令相關(guān)信息255。所述相關(guān)信息255包括該數(shù)據(jù)讀取指令對應(yīng)的基地址寄存器號(hào)137和地址偏移量138。由于讀指針123指向的數(shù)據(jù)讀取指令屬于當(dāng)前指令塊,因此,也可以增加一個(gè)指令讀緩沖(Instruct1n Read Buffer, IRB)用于存儲(chǔ)包括當(dāng)前指令塊在內(nèi)的至少一個(gè)指令塊,供讀指針123指向并讀取相關(guān)信息。此時(shí),可以由所述指令讀緩沖向處理器101提供指令并向數(shù)據(jù)引擎提供數(shù)據(jù)讀取指令相關(guān)信息;或由所述指令讀緩沖向處理器101提供指令,并由指令緩存103向數(shù)據(jù)引擎提供數(shù)據(jù)讀取指令相關(guān)信息;或由指令緩存103向處理器101提供指令,并由所述指令讀緩沖向數(shù)據(jù)引擎提供數(shù)據(jù)讀取指令相關(guān)信息。
[0078]請參考圖2,其為本發(fā)明實(shí)施例的循跡器的一框結(jié)構(gòu)示意圖。在本實(shí)施例的循跡器119中,寄存器231、增量器233和選擇器235共同對指令軌道表107中的軌跡點(diǎn)進(jìn)行循跡,寄存器241、增量器243和選擇器245共同對指令緩存103進(jìn)行循跡。其中,寄存器231中存儲(chǔ)的是對指令軌道表107的循跡地址,其輸出為循跡器119的讀指針121,該讀指針121指向指令軌道表107中的一個(gè)軌跡點(diǎn)。當(dāng)根據(jù)讀指針121從指令軌道表121中讀出的指令類型為非分支指令類型時(shí),保持寄存器231中循跡地址的BNX部分不變,而列地址部分則通過增量器233增一后送往選擇器235。由于此時(shí)表不分支轉(zhuǎn)移是否發(fā)生的TAKEN信號(hào)125表示當(dāng)前沒有發(fā)生分支轉(zhuǎn)移,因此選擇器235選擇該增一后的列地址寫回寄存器231,使得讀指針121移動(dòng)并指向下一個(gè)軌跡點(diǎn)。
[0079]如此移動(dòng)讀指針121直到指向一個(gè)分支指令,即讀指針121的值為分支源指令的循跡地址,并從指令軌道表107讀出該分支源指令的分支目標(biāo)指令循跡地址送往選擇器235,而選擇器235的另一個(gè)輸入是讀指針121輸出經(jīng)增一后的循跡地址(即指向該分支點(diǎn)之后的軌跡點(diǎn)的循跡地址)。這樣,循跡器119的讀指針121從處理器101當(dāng)前執(zhí)行的指令對應(yīng)的軌跡點(diǎn)開始,提前移動(dòng)到該軌跡點(diǎn)之后的第一個(gè)分支點(diǎn)。根據(jù)該目標(biāo)指令循跡地址可以在指令緩存103中找到該目標(biāo)指令。此時(shí),寄存器231停止更新,等待處理器101產(chǎn)生對該分支指令的執(zhí)行結(jié)果。
[0080]根據(jù)讀指針121中的BNX和處理器101輸出的指令地址的低位部分253,即可從指令緩存103中讀出處理器101所需指令251。根據(jù)讀指針121中的BNX和讀指針123中的列地址,即可從指令緩存103中讀出讀指針123指向的數(shù)據(jù)讀取指令的相關(guān)信息255。
[0081]當(dāng)處理器101執(zhí)行到所述分支指令時(shí)產(chǎn)生TAKEN信號(hào)125。若TAKEN信號(hào)125表示該分支轉(zhuǎn)移沒有發(fā)生,則選擇器235選擇讀指針121增一后的循跡地址送往寄存器231。寄存器231受處理器101送來表示分支指令執(zhí)行完畢的BRANCH信號(hào)126控制存儲(chǔ)所述增一后的循跡地址,從而繼續(xù)移動(dòng)讀指針121沿當(dāng)前軌道繼續(xù)移動(dòng)到下一個(gè)分支點(diǎn),而處理器101輸出指令地址偏移量從讀指針121指向的指令緩存103的存儲(chǔ)塊中讀取相應(yīng)的后續(xù)指令。
[0082]若TAKEN信號(hào)125表示該分支轉(zhuǎn)移發(fā)生,則選擇器135選擇指令軌道表107輸出的分支目標(biāo)指令循跡地址送往寄存器231。寄存器231受處理器101送來表示分支指令執(zhí)行完畢的BRANCH信號(hào)126控制存儲(chǔ)所述分支目標(biāo)指令循跡地址,使得讀指針121指向指令軌道表107中該分支目標(biāo)指令對應(yīng)的軌跡點(diǎn),且讀指針121的BNX與處理器101輸出的指令地址偏移量253共同指向指令緩存103中該分支目標(biāo)指令,從而輸出該分支目標(biāo)指令供處理器101執(zhí)行。此后,讀指針121按之前所述方法沿該新的當(dāng)前軌道(即原分支目標(biāo)指令軌跡點(diǎn)所在的軌道)繼續(xù)移動(dòng)到下一個(gè)分支點(diǎn),而處理器101輸出指令地址偏移量從讀指針121指向的指令緩存103的存儲(chǔ)塊中讀取相應(yīng)的后續(xù)指令。
[0083]需要說明的是,可以在指令軌道表107中每條軌道的最后一個(gè)軌跡點(diǎn)之后增加一個(gè)結(jié)束軌跡點(diǎn),該結(jié)束軌跡點(diǎn)的類型為必定發(fā)生的分支轉(zhuǎn)移,該結(jié)束軌跡點(diǎn)內(nèi)容中的BNX就是該軌道對應(yīng)的指令塊按程序順序的下一個(gè)指令塊在指令軌道表107中的行地址(即BNX),該結(jié)束軌跡點(diǎn)中的存儲(chǔ)的目標(biāo)指令列地址為‘O’。這樣,一旦循跡器119從該軌道的最后一個(gè)分支點(diǎn)開始移動(dòng),則會(huì)指向結(jié)束軌跡點(diǎn),從而轉(zhuǎn)移至順序下一指令塊。
[0084]寄存器241中存儲(chǔ)的是對指令緩存103中數(shù)據(jù)訪問相關(guān)信息的循跡地址中的列地址,其輸出為循跡器119的讀指針123,該讀指針123指向指令緩存103中由讀指針121中的BNX指向的指令塊中的一條指令對應(yīng)的指令類型信息。當(dāng)根據(jù)讀指針123從指令緩存103中讀出的指令類型為非數(shù)據(jù)讀取指令時(shí),讀指針123輸出的列地址通過增量器243增一后送往選擇器245。由于此時(shí)表示分支轉(zhuǎn)移是否發(fā)生的TAKEN信號(hào)125無效,因此選擇器245選擇缺省輸入,即該增一后的列地址寫回寄存器241,使得讀指針123移動(dòng)并指向下一條指令。
[0085]如此移動(dòng)讀指針123直到指向一條數(shù)據(jù)讀取指令。這樣,循跡器119的讀指針123從處理器101當(dāng)前執(zhí)行的指令開始,提前移動(dòng)到該指令之后的第一條數(shù)據(jù)讀取指令,并讀出該數(shù)據(jù)讀取指令對應(yīng)的基地址寄存器號(hào)和地址偏移量。此時(shí),寄存器241停止更新,等待處理器101產(chǎn)生對該數(shù)據(jù)讀取指令的執(zhí)行結(jié)果。
[0086]當(dāng)處理器101執(zhí)行完該數(shù)據(jù)讀取指令時(shí),產(chǎn)生LOAD信號(hào)128控制寄存器241更新為選擇器245輸出的經(jīng)增一后的循跡地址,使得讀指針123繼續(xù)移動(dòng)并按前述方法指向下一條數(shù)據(jù)讀取指令。
[0087]此外,當(dāng)處理器101執(zhí)行分支指令產(chǎn)生的TAKEN信號(hào)125表示分支轉(zhuǎn)移發(fā)生時(shí),選擇器245選擇指令軌道表107輸出的分支目標(biāo)指令循跡地址并存儲(chǔ)到寄存器241中,使得讀指針123指向指令緩存103中所述分支目標(biāo)指令。之后,按上述相同方法移動(dòng)讀指針123直到指向該分支目標(biāo)指令之后的第一條數(shù)據(jù)讀取指令,并從指令緩存103中讀出該數(shù)據(jù)讀取指令對應(yīng)的基地址寄存器號(hào)和地址偏移量。
[0088]回到圖1,數(shù)據(jù)引擎105根據(jù)從從指令緩存103中讀出的基地址寄存器號(hào)可以在處理器101執(zhí)行數(shù)據(jù)讀取指令之前計(jì)算出數(shù)據(jù)地址146確定數(shù)據(jù)地址或可能數(shù)據(jù)地址,并控制數(shù)據(jù)緩存113輸出對應(yīng)數(shù)據(jù)供處理器101讀取。此外,數(shù)據(jù)引擎105還計(jì)算出下次執(zhí)行所述數(shù)據(jù)訪問指令時(shí)可能用到的預(yù)測數(shù)據(jù)地址,并根據(jù)所述數(shù)據(jù)預(yù)測地址提前從外部存儲(chǔ)器讀取數(shù)據(jù)塊填充到數(shù)據(jù)緩存113中,從而掩蓋了對數(shù)據(jù)緩存113的部分或全部訪問時(shí)延,或掩蓋了因緩存缺失造成的部分或全部等待時(shí)間。
[0089]請參考圖3a,其為本發(fā)明實(shí)施例的數(shù)據(jù)引擎的一個(gè)示意圖。在圖3a所示的數(shù)據(jù)引擎371中,加法器373的一個(gè)輸入是來源于指令緩存103的所述數(shù)據(jù)讀取指令的地址偏移量138,另一個(gè)輸入是根據(jù)所述數(shù)據(jù)讀取指令的基地址寄存器號(hào)從處理器101輸出的基地址寄存器值142,其輸出的數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行地址匹配??梢詫?shù)據(jù)緩存訪問時(shí)延和執(zhí)行基地址寄存器更新指令的操作產(chǎn)生新的基地址值所需時(shí)間相加得到所述提前的周期數(shù)。例如,對數(shù)據(jù)緩存的訪問時(shí)延為2個(gè)周期,執(zhí)行基地址寄存器更新指令產(chǎn)生新的基地址值需要I個(gè)周期,則所述提前的周期數(shù)為3。圖1中的時(shí)間點(diǎn)檢測模塊148對讀指針123的值與處理器101送出的當(dāng)前指令地址253進(jìn)行比較,當(dāng)讀指針123的值等于當(dāng)前指令地址加‘3’時(shí),即表示此時(shí)比處理器101執(zhí)行所述數(shù)據(jù)讀取指令的時(shí)間點(diǎn)提前了 3個(gè)周期,開始計(jì)算數(shù)據(jù)地址并根據(jù)判斷模塊133的輸出139控制數(shù)據(jù)緩存113向處理器101提供數(shù)據(jù),以掩蓋對數(shù)據(jù)緩存的訪問時(shí)延。此時(shí)判斷模塊133的輸出139表示了加法器373計(jì)算數(shù)據(jù)地址時(shí)所用的基地址寄存器值是否為更新后的值,從而決定是否可以按當(dāng)時(shí)加法器373輸出的數(shù)據(jù)地址146在數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行地址匹配以完成后續(xù)操作。
[0090]對于在分支目標(biāo)指令塊上的分支目標(biāo)指令之后的數(shù)據(jù)讀取指令,由于當(dāng)分支轉(zhuǎn)移發(fā)生使得指令地址指向分支目標(biāo)指令時(shí),該指令地址與所述數(shù)據(jù)讀取指令地址之間的距離小于‘3’,依然可以用上述方法控制數(shù)據(jù)緩存113提前向處理器101提供指令,
[0091]判斷模塊133對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值。
[0092]請參考圖3b,其為本發(fā)明實(shí)施例的判斷模塊的一種示意圖。在本實(shí)施例中,以對數(shù)據(jù)讀取指令及其之前三條指令的寄存器相關(guān)性進(jìn)行判斷為例進(jìn)行說明,對于更多條指令的情況,可以用類似方法實(shí)現(xiàn)。
[0093]在圖3b中,隨著循跡器119讀指針123的移動(dòng),讀指針123經(jīng)過的指令的目標(biāo)寄存器號(hào)被依次通過總線135送往寄存器351,而寄存器351與寄存器353、寄存器355構(gòu)成先入先出結(jié)構(gòu)。這樣,寄存器351、寄存器353和寄存器355分別存儲(chǔ)了讀指針123當(dāng)前指向的指令之前第一條指令的目標(biāo)寄存器號(hào)、之前第二條指令的目標(biāo)寄存器號(hào)及之前第三條指令的目標(biāo)寄存器號(hào)。這三個(gè)寄存器的輸出分別被送到比較器361、比較器363和比較器365作為一個(gè)輸入。讀指針123當(dāng)前指向的指令所需的源寄存器號(hào)通過總線137被分別送到這三個(gè)比較器作為另一個(gè)輸入。當(dāng)讀指針123當(dāng)前指向的指令為數(shù)據(jù)讀取指令時(shí),該源寄存器號(hào)就是基地址寄存器號(hào)。三個(gè)比較器分別對各自的兩個(gè)輸入進(jìn)行比較,并將比較結(jié)果送到或門357進(jìn)行或操作。若有任意一個(gè)比較器的輸出結(jié)果為比較相等,即表示數(shù)據(jù)讀取指令的基地址寄存器號(hào)與該比較器對應(yīng)的寄存器所代表的那條指令的目標(biāo)寄存器號(hào)相同,則在該指令完成對寄存器的更新之前由加法器373計(jì)算得到的確定數(shù)據(jù)地址很可能是錯(cuò)誤的,此時(shí),判斷模塊133的輸出139表示還不能用當(dāng)前的數(shù)據(jù)地址146在數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行地址匹配。若三個(gè)比較器的輸出結(jié)果均為比較不相等,則表示數(shù)據(jù)讀取指令的基地址寄存器號(hào)與三個(gè)比較器對應(yīng)的寄存器分別代表的三條指令的目標(biāo)寄存器號(hào)都不相同,即此時(shí)該基地址寄存器中值已經(jīng)更新或不需更新,因此可以用當(dāng)前的數(shù)據(jù)地址146在數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行地址匹配。在此判斷模塊133的輸出139起到控制數(shù)據(jù)塊地址存儲(chǔ)比較器127是否進(jìn)行地址匹配或數(shù)據(jù)緩存113是否輸出對應(yīng)數(shù)據(jù)的作用。
[0094]回到圖1,結(jié)合圖3a實(shí)施例所述數(shù)據(jù)引擎,當(dāng)循跡器119的讀指針123指向的數(shù)據(jù)讀取指令與其之前若干條指令之間沒有相關(guān)性(或有相關(guān)性的指令對基地址寄存器的更新都已完成)時(shí),判斷模塊133的輸出139指示數(shù)據(jù)塊地址存儲(chǔ)比較器127對數(shù)據(jù)地址146進(jìn)行匹配。若匹配成功,表示該數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)已經(jīng)存儲(chǔ)在數(shù)據(jù)緩存113中,則可以在處理器101執(zhí)行該數(shù)據(jù)讀取指令之前就從數(shù)據(jù)緩存113中讀出對應(yīng)數(shù)據(jù)經(jīng)總線155提供給處理器101 ;否則,表示該數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在數(shù)據(jù)緩存113中,則通過總線116將該數(shù)據(jù)地址送往外部存儲(chǔ)器讀取對應(yīng)數(shù)據(jù)塊,且在數(shù)據(jù)塊地址存儲(chǔ)比較器127中分配一個(gè)表項(xiàng)存儲(chǔ)該數(shù)據(jù)地址中的塊地址部分,并將通過總線112讀取到的數(shù)據(jù)塊存儲(chǔ)在數(shù)據(jù)緩存113中的對應(yīng)存儲(chǔ)塊中,同時(shí)將該數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)提供給處理器101。
[0095]這樣,當(dāng)處理器101需要讀取指令時(shí),對應(yīng)指令已經(jīng)通過總線251送往處理器101或正在往指令緩存103填充,同樣地,當(dāng)處理器101需要讀取數(shù)據(jù)時(shí),對應(yīng)數(shù)據(jù)已經(jīng)通過總線155送往處理器101或正在往數(shù)據(jù)緩存113填充,從而掩蓋對緩存的全部或部分訪問時(shí)延,提高指令處理系統(tǒng)的性能。
[0096]根據(jù)本發(fā)明技術(shù)方案,數(shù)據(jù)引擎還可以有其他的實(shí)現(xiàn)方式。請參考圖3c,其為本發(fā)明實(shí)施例的數(shù)據(jù)引擎的另一示意圖。在圖3c所示數(shù)據(jù)引擎931中,基地址差值存儲(chǔ)器131由多個(gè)寄存器組成,其中每個(gè)寄存器對應(yīng)一個(gè)基地址寄存器,用于存儲(chǔ)對應(yīng)基地址寄存器的變化差值。當(dāng)某個(gè)基地址寄存器的值發(fā)生變化時(shí),即可計(jì)算出該基地址寄存器的差值并存儲(chǔ)到基地址差值存儲(chǔ)器131的相應(yīng)寄存器中。
[0097]請參考圖3d,其為本發(fā)明實(shí)施例的計(jì)算基地址差值的一示意圖。如圖3d所示,處理器101中的寄存器堆301有一個(gè)讀端口,在更新寄存器堆301中某個(gè)寄存器值時(shí),可以從該讀端口讀出寄存器中的原有值,并通過總線307送往減法器303。同時(shí),即將被存儲(chǔ)到該寄存器中的新值通過總線305被送往減法器303。減法器303對所述新值和原有值相減,即可得到基地址差值,并將所述基地址差值存儲(chǔ)到基地址差值存儲(chǔ)器131的相應(yīng)寄存器中。
[0098]回到圖3c,按上述方法,隨著處理器101對基地址寄存器更新指令的執(zhí)行,基地址差值存儲(chǔ)器131中記錄了所有基地址寄存器值最近一次改變時(shí)的變化差值。加法器383的第一個(gè)輸入是來源于指令緩存103的由讀指針123指向的數(shù)據(jù)讀取指令地址偏移量138,第二個(gè)輸入是來源于基地址差值存儲(chǔ)器131的與所述數(shù)據(jù)讀取指令基地址寄存器號(hào)137對應(yīng)的基地址差值,第三個(gè)輸入是根據(jù)所述數(shù)據(jù)讀取指令的基地址寄存器號(hào)137從處理器101送來的基地址寄存器值142,其輸出的數(shù)據(jù)地址被送往選擇器145。
[0099]同樣地,可以在處理器101執(zhí)行到數(shù)據(jù)讀取指令之前的若干個(gè)周期時(shí),由加法器383計(jì)算產(chǎn)生可能數(shù)據(jù)地址并經(jīng)選擇器145選擇后送往數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行地址匹配以完成數(shù)據(jù)讀取操作。同時(shí),該可能數(shù)據(jù)地址還被送到比較器147暫存。當(dāng)處理器101執(zhí)行所述數(shù)據(jù)讀取指令所產(chǎn)生的實(shí)際數(shù)據(jù)地址144被送往比較器147與暫存在其中的可能數(shù)據(jù)地址進(jìn)行比較。若比較結(jié)果相等,表示該可能數(shù)據(jù)地址是正確的,處理器101可以直接讀取預(yù)先提供的數(shù)據(jù),從而掩蓋了對數(shù)據(jù)緩存113的部分或全部訪問時(shí)延,或掩蓋了因數(shù)據(jù)緩存缺失造成的部分或全部等待時(shí)間;否則,表示該可能數(shù)據(jù)地址是錯(cuò)誤的,選擇器145選擇由處理器101送出的實(shí)際數(shù)據(jù)地址144作為輸出的數(shù)據(jù)地址146送往數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行匹配以讀出正確數(shù)據(jù),之后的過程與前述方法相同,在此不再贅述。
[0100]當(dāng)然,在根據(jù)本發(fā)明技術(shù)方案實(shí)現(xiàn)的其他實(shí)施例中,處理器101也可以不等待可能數(shù)據(jù)地址與實(shí)際數(shù)據(jù)地址比較結(jié)果產(chǎn)生,直接讀取預(yù)先送來的數(shù)據(jù)并進(jìn)行后續(xù)指令的執(zhí)行,以更好地減少指令執(zhí)行的時(shí)間。在這種情況下,若所述比較結(jié)果為相等,則處理器101可以繼續(xù)執(zhí)行后續(xù)指令;若所述比較結(jié)果為不相等,則處理器101根據(jù)該比較結(jié)果,清除對所述錯(cuò)誤數(shù)據(jù)進(jìn)行處理導(dǎo)致的執(zhí)行結(jié)果,并按之前所述方法,重新讀取正確數(shù)據(jù)并重新執(zhí)行后續(xù)指令。
[0101]進(jìn)一步地,處理器101執(zhí)行數(shù)據(jù)讀取指令時(shí)輸出的實(shí)際數(shù)據(jù)地址144還被送到預(yù)測地址加法器143與從基地址差值存儲(chǔ)器131送來的相應(yīng)基地址差值140相加,得到下一次執(zhí)行該數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址,該預(yù)測數(shù)據(jù)地址經(jīng)選擇器145選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行匹配。若匹配不成功,則將通過總線116將該數(shù)據(jù)地址送往外部存儲(chǔ)器進(jìn)行數(shù)據(jù)塊預(yù)取,并在數(shù)據(jù)塊地址存儲(chǔ)比較器127中分配一個(gè)表項(xiàng)存儲(chǔ)帶數(shù)據(jù)地址中的塊地址部分,且將預(yù)取來的數(shù)據(jù)塊存儲(chǔ)在數(shù)據(jù)緩存113的對應(yīng)存儲(chǔ)塊中。如此,對再次執(zhí)行到該數(shù)據(jù)讀取指令時(shí)所需的數(shù)據(jù)進(jìn)行預(yù)取,可以部分或全部掩蓋因數(shù)據(jù)緩存缺失造成的等待時(shí)間。
[0102]根據(jù)本發(fā)明技術(shù)方案,可以使用將圖3a實(shí)施例和圖3c實(shí)施例結(jié)合起來的數(shù)據(jù)引擎實(shí)現(xiàn)數(shù)據(jù)緩存。請參考圖4,其為本發(fā)明實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的另一框結(jié)構(gòu)示意圖。
[0103]在本實(shí)施例中,以提前若干周期,用基地址寄存器值加地址偏移量得到的數(shù)據(jù)地址控制數(shù)據(jù)緩存提前向處理器101提供數(shù)據(jù)為例進(jìn)行說明??梢愿鶕?jù)從指令緩存103中讀出的數(shù)據(jù)讀取指令基地址寄存器號(hào)137從處理器101得到對應(yīng)的基地址寄存器值142,并從基地址差值存儲(chǔ)器131得到對應(yīng)的基地址差值140。加法器129的第一個(gè)輸入是從指令緩存103中讀出的數(shù)據(jù)讀取指令地址偏移量138,第二個(gè)輸入是選擇器141根據(jù)判斷模塊133的輸出139從基地址差值140和‘0’中選擇出的值,第三個(gè)輸入是處理器101送來的基地址寄存器值142。這樣,在計(jì)算數(shù)據(jù)地址時(shí),若判斷模塊133的輸出139為‘0’,則說明基地址寄存器值已經(jīng)更新完畢,此時(shí),選擇器141選擇‘0’輸出作為加法器129的第二個(gè)輸入,力口法器129的輸出就是由基地址寄存器值142與地址偏移量138相加得到的確定數(shù)據(jù)地址;若判斷模塊133的輸出139為‘I’,則說明基地址寄存器值尚未更新完畢,此時(shí),選擇器141選擇基地址差值140輸出作為加法器129的第二個(gè)輸入,加法器129的輸出就是由基地址寄存器值142、基地址差值140與地址偏移量138相加得到的可能數(shù)據(jù)地址。所述確定數(shù)據(jù)地址或可能數(shù)據(jù)地址經(jīng)總線146被送到數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行匹配以控制數(shù)據(jù)緩存113向處理器101提供數(shù)據(jù)。
[0104]在本實(shí)施例中,與圖3c實(shí)施例類似,加法器129輸出的可能數(shù)據(jù)地址被送到比較器147暫存。處理器101執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生的實(shí)際數(shù)據(jù)地址144被送往比較器147與暫存在其中的可能數(shù)據(jù)地址進(jìn)行比較。若比較結(jié)果相等,表示該可能數(shù)據(jù)地址是正確的,處理器101可以直接讀取預(yù)先提供的數(shù)據(jù),從而掩蓋了對數(shù)據(jù)緩存113的部分或全部訪問時(shí)延,或掩蓋了因數(shù)據(jù)緩存缺失造成的部分或全部等待時(shí)間;否則,表示該可能數(shù)據(jù)地址是錯(cuò)誤的,選擇器145選擇由處理器101送出的實(shí)際數(shù)據(jù)地址144作為輸出的數(shù)據(jù)地址146送往數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行匹配以控制數(shù)據(jù)緩存113向處理器101提供正確的數(shù)據(jù)。
[0105]同樣地,在根據(jù)本發(fā)明技術(shù)方案實(shí)現(xiàn)的其他實(shí)施例中,處理器101也可以不等待可能數(shù)據(jù)地址與實(shí)際數(shù)據(jù)地址比較結(jié)果產(chǎn)生,按之前所述方法直接讀取預(yù)先送來的數(shù)據(jù)并進(jìn)行后續(xù)指令的執(zhí)行,再根據(jù)該比較結(jié)果,決定是否重新讀取正確數(shù)據(jù)并重新執(zhí)行后續(xù)指令。
[0106]此外,在本實(shí)施例中,由加法器143計(jì)算產(chǎn)生預(yù)測數(shù)據(jù)地址并進(jìn)行數(shù)據(jù)塊填充的過程與圖3c實(shí)施例相同,在此不再贅述。
[0107]對于各種類型的數(shù)據(jù)讀取指令,均可以采用類似圖4實(shí)施例所述方法提前向處理器提供數(shù)據(jù)、預(yù)取并填充之后可能用到的數(shù)據(jù),以取得性能的提高。在此,按數(shù)據(jù)地址的計(jì)算方法不同將數(shù)據(jù)讀取指令分為:以基地址寄存器值加地址偏移量(BASE+0FFSET)得到數(shù)據(jù)地址的數(shù)據(jù)讀取指令、以基地址寄存器值(BASE)作為數(shù)據(jù)地址的數(shù)據(jù)讀取指令、以指令地址值加地址偏移量(PC+0FFSET)得到數(shù)據(jù)地址的數(shù)據(jù)讀取指令和多個(gè)基地址寄存器值相加得到數(shù)據(jù)地址的數(shù)據(jù)讀取指令。對于最后一種情況,本實(shí)施例中將以兩個(gè)基地址寄存器值相加(BASE1+BASE2)為例進(jìn)行說明,對于有更多個(gè)基地址寄存器相加的情況,也可以此類推。對于數(shù)據(jù)地址計(jì)算的其他方法,均可以用上述四種方法的組合或擴(kuò)展即可實(shí)現(xiàn),在此不再贅述。此外,對于多數(shù)據(jù)讀取指令(即從多個(gè)數(shù)據(jù)地址讀取對應(yīng)的多個(gè)數(shù)據(jù)的指令),也可以有相應(yīng)的處理方法。請參考圖5a,其為本發(fā)明實(shí)施例的數(shù)據(jù)引擎的另一示意圖。圖5a所示的數(shù)據(jù)引擎501除了能實(shí)現(xiàn)上述四種數(shù)據(jù)地址計(jì)算方法,還支持多數(shù)據(jù)讀取指令的數(shù)據(jù)地址的產(chǎn)生。
[0108]在圖5a中,加法器509用于計(jì)算控制數(shù)據(jù)緩存113提前輸出數(shù)據(jù)的數(shù)據(jù)地址517,加法器511用于計(jì)算預(yù)測數(shù)據(jù)地址或提供實(shí)際數(shù)據(jù)地址144,并通過總線519送往選擇器521。寄存器513用于暫存數(shù)據(jù)地址517以根據(jù)數(shù)據(jù)地址517產(chǎn)生多數(shù)據(jù)讀取指令的下一個(gè)數(shù)據(jù)地址。寄存器515用于暫存數(shù)據(jù)地址519,以根據(jù)數(shù)據(jù)地址519產(chǎn)生多數(shù)據(jù)讀取指令的下一個(gè)數(shù)據(jù)地址。判斷模塊507的結(jié)構(gòu)如圖5b所示。
[0109]在圖5b中,同樣以對數(shù)據(jù)讀取指令及其之前三條指令的寄存器相關(guān)性進(jìn)行判斷為例,與圖3b實(shí)施例中的結(jié)構(gòu)相比,增加了一組(三個(gè))比較器和一個(gè)三輸入邏輯或門551。其中寄存器351、寄存器353和寄存器355與圖3b實(shí)施例中的對應(yīng)部件相同,分別存儲(chǔ)了讀指針123當(dāng)前指向的指令之前第一條指令的目標(biāo)寄存器號(hào)、之前第二條指令的目標(biāo)寄存器號(hào)及之前第三條指令的目標(biāo)寄存器號(hào)。這三個(gè)寄存器的輸出分別被送到比較器361、比較器363和比較器365作為一個(gè)輸入,讀指針123當(dāng)前指向的指令緩存103中的指令所需的第一個(gè)基地址寄存器號(hào)通過總線137被分別送到這三個(gè)比較器作為另一個(gè)輸入進(jìn)行比較,三個(gè)結(jié)果都被送到三輸入邏輯或門357進(jìn)行邏輯或操作。同時(shí),這三個(gè)寄存器的輸出還分別被送到比較器471、比較器473和比較器475作為一個(gè)輸入,讀指針123當(dāng)前指向的指令所需的第二個(gè)基地址寄存器號(hào)通過總線477被分別送到這三個(gè)比較器作為另一個(gè)輸入進(jìn)行比較。這三個(gè)比較器的輸出被送到或門551進(jìn)行邏輯或操作。這樣,或門357輸出對應(yīng)于第一個(gè)基地址寄存器是否與之前的指令有相關(guān)性的控制信息139,而或門551輸出對應(yīng)于第二個(gè)基地址寄存器是否與之前的指令有相關(guān)性的控制信息535。
[0110]回到圖5a,根據(jù)判斷模塊507輸出的選擇信號(hào)535和選擇信號(hào)139分別對選擇器531和選擇器533控制,當(dāng)所述兩個(gè)基地址寄存器中的一個(gè)或全部的值尚未更新完畢時(shí),可以選擇對應(yīng)的基地址差值作為對應(yīng)選擇器的輸出,否則可以選擇‘0’作為對應(yīng)選擇器的輸出。
[0111]對于以基地址寄存器值加地址偏移量得到數(shù)據(jù)地址的數(shù)據(jù)讀取指令,選擇器523選擇來源于指令緩存103的地址偏移量138作為加法器509的第一個(gè)輸入;選擇器533根據(jù)判斷模塊507的輸出139選擇基地址差值或‘0’作為輸出經(jīng)選擇器529選擇后作為加法器509的第二個(gè)輸入;選擇器525選擇來源于處理器101的基地址寄存器值503作為加法器509的第三個(gè)輸入,選擇器531選擇‘0’輸出作為加法器509的第四個(gè)輸入。這樣,若所述基地址寄存器的值尚未更新完畢,則加法器509的四個(gè)輸入分別是:地址偏移量、基地址差值、基地址寄存器值和‘0’ ;若所述基地址寄存器的值已經(jīng)更新完畢,則加法器509的四個(gè)輸入分別是:地址偏移量、‘0’、基地址寄存器值和‘0’。加法器509的輸出經(jīng)選擇器521選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127。這樣就實(shí)現(xiàn)了與圖4實(shí)施例功能相同的以基地址寄存器值加地址偏移量得到數(shù)據(jù)地址的地址計(jì)算。
[0112]對于以基地址寄存器值作為數(shù)據(jù)地址的數(shù)據(jù)讀取指令,選擇器523選擇‘0’作為加法器509的第一個(gè)輸入;選擇器533根據(jù)判斷模塊507的輸出139選擇基地址差值或‘0’作為輸出經(jīng)選擇器529選擇后作為加法器509的第二個(gè)輸入;選擇器525選擇來源于處理器101的基地址寄存器值503作為加法器509的第三個(gè)輸入,選擇器531選擇‘0’輸出作為加法器509的第四個(gè)輸入。這樣,若所述基地址寄存器的值尚未更新完畢,則加法器509的四個(gè)輸入分別是:‘O’、基地址差值、基地址寄存器值和‘0’ ;若所述基地址寄存器的值已經(jīng)更新完畢,則加法器509的四個(gè)輸入分別是:‘0’、‘0’、基地址寄存器值和‘0’。加法器509的輸出經(jīng)選擇器521選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127。這樣就實(shí)現(xiàn)了以基地址寄存器值作為數(shù)據(jù)地址的地址計(jì)算。
[0113]對于以指令地址值加地址偏移量得到數(shù)據(jù)地址的數(shù)據(jù)讀取指令,可以在掃描時(shí)產(chǎn)生相應(yīng)的指令類型信息,使得當(dāng)讀指針123指向該指令時(shí),以讀指針121中的BNX部分對主動(dòng)表109進(jìn)行索引讀出對應(yīng)的指令塊地址,再將該指令塊地址與指針123的值(即所述數(shù)據(jù)讀取指令的列地址)相加即可得到該數(shù)據(jù)讀取指令的指令地址。在本實(shí)施例中,選擇器523選擇地址偏移量作為加法器509的第一個(gè)輸入;選擇器533選擇‘0’作為輸出經(jīng)選擇器529選擇后作為加法器509的第二個(gè)輸入;選擇器525選擇所述數(shù)據(jù)讀取指令的指令地址435作為加法器509的第三個(gè)輸入,選擇器531選擇‘0’輸出作為加法器509的第四個(gè)輸入。這樣,加法器509的四個(gè)輸入分別是:地址偏移量、‘O’、數(shù)據(jù)讀取指令地址和‘O’。加法器509的輸出經(jīng)選擇器521選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127。這樣就實(shí)現(xiàn)了以指令地址值加地址偏移量得到數(shù)據(jù)地址的地址計(jì)算。
[0114]在本實(shí)施例中,對于上述三種情況,當(dāng)處理器101執(zhí)行該數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址144時(shí),選擇器533選擇基地址差值作為輸出經(jīng)選擇器529選擇后輸出作為加法器511的第一個(gè)輸入,選擇器531選擇‘0’輸出作為加法器511的第二個(gè)輸入,選擇器527選擇實(shí)際數(shù)據(jù)地址144作為加法器511的第三個(gè)輸入。此時(shí),加法器511的輸出就是對應(yīng)該數(shù)據(jù)讀取指令的預(yù)測數(shù)據(jù)地址519。所述預(yù)測數(shù)據(jù)地址519經(jīng)選擇器521選擇后被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127以控制對數(shù)據(jù)緩存113的填充。
[0115]對于以兩個(gè)基地址寄存器值相加得到數(shù)據(jù)地址的數(shù)據(jù)讀取指令,選擇器523選擇來源于處理器101的第二個(gè)基地址寄存器值505作為加法器509的第一個(gè)輸入;選擇器533根據(jù)判斷模塊507的輸出139選擇第一個(gè)基地址差值或‘0’作為輸出經(jīng)選擇器529選擇后作為加法器509的第二個(gè)輸入;選擇器525選擇來源于處理器101的第一個(gè)基地址寄存器值503作為加法器509的第三個(gè)輸入,選擇器531根據(jù)判斷模塊507的輸出535選擇第二個(gè)基地址差值或‘0’輸出作為加法器509的第四個(gè)輸入。這樣,若所述兩個(gè)基地址寄存器的值均尚未更新完畢,則加法器509的四個(gè)輸入分別是:第二個(gè)基地址寄存器值、第一個(gè)基地址差值、第一個(gè)基地址寄存器值和第二個(gè)基地址差值;若所述第一個(gè)基地址寄存器的值已經(jīng)更新完畢,但所述第二個(gè)基地址寄存器的值尚未更新完畢,則加法器509的四個(gè)輸入分別是:第二個(gè)基地址寄存器值、‘O’、第一個(gè)基地址寄存器值和第二個(gè)基地址差值;若所述第二個(gè)基地址寄存器的值已經(jīng)更新完畢,但所述第一個(gè)基地址寄存器的值尚未更新完畢,則加法器509的四個(gè)輸入分別是:第二個(gè)基地址寄存器值、第一個(gè)基地址差值、第一個(gè)基地址寄存器值和‘0’ ;若所述兩個(gè)基地址寄存器的值均已經(jīng)更新完畢,則加法器509的四個(gè)輸入分別是:第二個(gè)基地址寄存器值、‘0’、第一個(gè)基地址寄存器值和‘0’。加法器509的輸出經(jīng)選擇器521選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127。這樣就實(shí)現(xiàn)了以兩個(gè)基地址寄存器值相加以得到數(shù)據(jù)地址的計(jì)算。
[0116]此外,當(dāng)處理器101執(zhí)行該數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址144時(shí),選擇器533選擇第一個(gè)基地址差值作為輸出經(jīng)選擇器529選擇后輸出作為加法器511的第一個(gè)輸入,選擇器531選擇第二個(gè)基地址差值輸出作為加法器511的第二個(gè)輸入,選擇器527選擇實(shí)際數(shù)據(jù)地址144作為加法器511的第三個(gè)輸入。此時(shí),加法器511的輸出就是對應(yīng)該數(shù)據(jù)讀取指令的預(yù)測數(shù)據(jù)地址519。所述預(yù)測數(shù)據(jù)地址519經(jīng)選擇器521選擇后被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127以控制對數(shù)據(jù)緩存113的填充。
[0117]對于以上任何一種在基地址寄存器值尚未更新完畢即計(jì)算可能數(shù)據(jù)地址的情況,當(dāng)處理器執(zhí)行所屬數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址144時(shí),都需要由比較器147對所述計(jì)算得到的數(shù)據(jù)地址與實(shí)際數(shù)據(jù)地址144進(jìn)行比較,以確定所述計(jì)算得到的數(shù)據(jù)地址的正確性。若比較結(jié)果為相等,則數(shù)據(jù)緩存113提前向處理器101提供的數(shù)據(jù)就已經(jīng)是所需數(shù)據(jù)。若比較結(jié)果為不相等,則選擇器533選擇‘0’輸出經(jīng)選擇器529選擇后輸出作為加法器511的第一個(gè)輸入,選擇器531選擇‘0’輸出作為加法器511的第二個(gè)輸入,選擇器527選擇實(shí)際數(shù)據(jù)地址144輸出作為加法器511的第三個(gè)輸入。此時(shí)加法器511的輸出519就是實(shí)際數(shù)據(jù)地址144的值,該數(shù)據(jù)地址519經(jīng)選擇器521選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127,以控制數(shù)據(jù)緩存113輸出處理器101實(shí)際需要的數(shù)據(jù)。
[0118]對于多數(shù)據(jù)讀取指令,可以按上述方法計(jì)算得到第一個(gè)數(shù)據(jù)地址并根據(jù)該數(shù)據(jù)地址控制數(shù)據(jù)緩存113向處理器101提供數(shù)據(jù)。同時(shí),該數(shù)據(jù)地址517被暫存在寄存器513中。之后選擇器523選擇‘0’作為加法器509的第一個(gè)輸入,選擇器529根據(jù)多個(gè)數(shù)據(jù)地址相應(yīng)的變化方向選擇‘I’或‘-1’作為加法器509的第二個(gè)輸入。例如,若該多數(shù)據(jù)讀取指令的數(shù)據(jù)地址是遞增的,則選擇器529選擇‘I’作為輸出;若該多數(shù)據(jù)讀取指令的數(shù)據(jù)地址是遞減的,則選擇器529選擇‘-1’作為輸出。為了便于說明,在本實(shí)施例以‘I’和‘-1’作為地址遞增、遞減的變化量。對于不同的指令集體系結(jié)構(gòu),也可以用其他任何合適的值作為地址遞增、遞減的變化量。選擇器525選擇來源于寄存器513的數(shù)據(jù)地址作為加法器509的第三個(gè)輸入,選擇器531選擇‘0’作為加法器509的第四個(gè)輸入。這樣,加法器509的輸出就是第二個(gè)數(shù)據(jù)地址,該數(shù)據(jù)地址經(jīng)選擇器521選擇后被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127,以控制數(shù)據(jù)緩存113向處理器101輸出第二個(gè)數(shù)據(jù)。如此反復(fù),即可實(shí)現(xiàn)在處理器執(zhí)行多數(shù)據(jù)讀取指令之前,提前向處理器101提供多個(gè)數(shù)據(jù)。
[0119]同樣地,若在多數(shù)據(jù)讀取指令的基地址寄存器值尚未更新完畢即計(jì)算了數(shù)據(jù)地址,則需要由比較器147對所述計(jì)算得到的第一個(gè)數(shù)據(jù)地址與實(shí)際數(shù)據(jù)地址144進(jìn)行比較,以確定所述計(jì)算得到的第一個(gè)數(shù)據(jù)地址的正確性。若比較結(jié)果為相等,則數(shù)據(jù)緩存113提前向處理器101提供的多個(gè)數(shù)據(jù)就已經(jīng)是所需數(shù)據(jù)。若比較結(jié)果為不相等,則選擇器533選擇‘0’輸出經(jīng)選擇器529選擇后輸出作為加法器511的第一個(gè)輸入,選擇器531選擇‘0’輸出作為加法器511的第二個(gè)輸入,選擇器527選擇實(shí)際數(shù)據(jù)地址144輸出作為加法器511的第三個(gè)輸入。此時(shí)加法器511的輸出519就是實(shí)際數(shù)據(jù)地址144的值,即實(shí)際的第一個(gè)數(shù)據(jù)地址的值,該數(shù)據(jù)地址519經(jīng)選擇器521選擇后作為數(shù)據(jù)地址146被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127,以控制數(shù)據(jù)緩存113輸出處理器101實(shí)際需要的第一個(gè)數(shù)據(jù)。同時(shí),該實(shí)際的第一個(gè)數(shù)據(jù)地址被暫存在寄存器515中。之后選擇器529根據(jù)多個(gè)數(shù)據(jù)地址相應(yīng)的變化方向選擇‘I’或‘-1’作為加法器511的第一個(gè)輸入,選擇器531選擇‘0’輸出作為加法器511的第二個(gè)輸入,選擇器527選擇暫存在寄存器515中的所述實(shí)際的第一個(gè)數(shù)據(jù)地址作為加法器511的第三個(gè)輸入。這樣,加法器511的輸出就是實(shí)際的第二個(gè)數(shù)據(jù)地址,該數(shù)據(jù)地址經(jīng)選擇器521選擇后被送往數(shù)據(jù)塊地址存儲(chǔ)比較器127,以控制數(shù)據(jù)緩存113向處理器101輸出實(shí)際的第二個(gè)數(shù)據(jù)。如此反復(fù),即可在根據(jù)所述可能數(shù)據(jù)地址從數(shù)據(jù)緩存113提前提供的數(shù)據(jù)不正確的情況下,用正確的多個(gè)數(shù)據(jù)地址向處理器101提供多個(gè)數(shù)據(jù),以保證處理器101的正確運(yùn)行。
[0120]除以上述各種情況外,其他數(shù)據(jù)地址的產(chǎn)生方式都可以視為這五種情況的特例或擴(kuò)展,按類似的方法處理,在此不再贅述。
[0121]根據(jù)本發(fā)明技術(shù)方案,還可以增加一個(gè)數(shù)據(jù)軌道表。請參考圖6,其為本發(fā)明實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的另一框結(jié)構(gòu)示意圖。如圖6所示,所述數(shù)據(jù)緩存系統(tǒng)包含處理器101、主動(dòng)表109、數(shù)據(jù)塊地址存儲(chǔ)比較器127、掃描器111、指令軌道表107、數(shù)據(jù)軌道表607,循跡器119、指令緩存603、數(shù)據(jù)緩存113、數(shù)據(jù)引擎105和時(shí)間點(diǎn)檢測模塊148。同樣的,這里列出各種部件的目的是為了便于描述,還可以包含其他部件,而某些部件可以被省略。這里的各種部件可以分布在多個(gè)系統(tǒng)中,可以是物理上存在的或是虛擬的,可以是硬件實(shí)現(xiàn)(如:集成電路)、軟件實(shí)現(xiàn)或由硬件和軟件組合實(shí)現(xiàn)。
[0122]在本實(shí)施例中,處理器101、主動(dòng)表109、數(shù)據(jù)塊地址存儲(chǔ)比較器127、掃描器111、指令軌道表107、循跡器119、數(shù)據(jù)緩存113、數(shù)據(jù)引擎105和時(shí)間點(diǎn)檢測模塊148與圖4實(shí)施例中的相應(yīng)部件相同。指令緩存603則與普通的指令緩存相同,即只包含了指令,而沒有包含對應(yīng)每條指令的指令類型信息。
[0123]數(shù)據(jù)軌道表607中的行與指令緩存603中的存儲(chǔ)塊一一對應(yīng)。數(shù)據(jù)軌道表607含有復(fù)數(shù)個(gè)軌跡點(diǎn)。在此,一個(gè)軌跡點(diǎn)是數(shù)據(jù)軌道表607中的一個(gè)表項(xiàng),可含有至少一條指令的信息,比如該指令的類型等。所述信息還可以進(jìn)一步表示對應(yīng)指令是哪種類型的數(shù)據(jù)讀取指令,從而包含了如何計(jì)算數(shù)據(jù)地址的信息,如基地址寄存器號(hào)及地址偏移量在該指令碼中的位置信息等。當(dāng)一個(gè)軌跡點(diǎn)含有的信息表示該軌跡點(diǎn)至少對應(yīng)一條數(shù)據(jù)讀取指令時(shí),該軌跡點(diǎn)為一個(gè)數(shù)據(jù)點(diǎn)。
[0124]在本實(shí)施例中,循跡器119的讀指針121提供的BNX與讀指針123提供的列地址一起指向數(shù)據(jù)軌道表607中的一個(gè)軌跡點(diǎn)。根據(jù)從該軌跡點(diǎn)中讀出的指令類型信息可以按圖2實(shí)施例相同方法控制讀指針123移動(dòng)并指向當(dāng)前指令之后的第一條數(shù)據(jù)讀取指令。在本實(shí)施例中,數(shù)據(jù)軌道表607向數(shù)據(jù)引擎105提供由讀指針123指向的數(shù)據(jù)點(diǎn)中包含的地址偏移量138、基地址寄存器號(hào)137,以及讀指針123經(jīng)過的所述數(shù)據(jù)點(diǎn)之前若干條指令的和目標(biāo)寄存器號(hào)135。后續(xù)的數(shù)據(jù)地址和預(yù)測數(shù)據(jù)地址的計(jì)算、提前提供數(shù)據(jù)及預(yù)取數(shù)據(jù)的具體操作過程與圖4實(shí)施例所述相同,在此不再贅述。
[0125]此外,也可以在數(shù)據(jù)軌道表的數(shù)據(jù)點(diǎn)中只存儲(chǔ)指令類型信息。讀指針123同時(shí)指向數(shù)據(jù)軌道表中的數(shù)據(jù)點(diǎn)及指令緩存103中對應(yīng)的數(shù)據(jù)讀取指令,并由指令緩存103提供所述地址偏移量和基地址寄存器號(hào),以實(shí)現(xiàn)與圖6實(shí)施例相同的功能。
[0126]進(jìn)一步地,還可以將預(yù)先計(jì)算得到的數(shù)據(jù)地址存儲(chǔ)在數(shù)據(jù)軌道表607的數(shù)據(jù)點(diǎn)中。這樣,當(dāng)循跡器119的讀指針123指向一個(gè)數(shù)據(jù)點(diǎn)時(shí),可以直接從該數(shù)據(jù)點(diǎn)中讀出數(shù)據(jù)地址送往數(shù)據(jù)塊地址存儲(chǔ)比較器127進(jìn)行匹配。
[0127]或者,可以將預(yù)先計(jì)算得到的數(shù)據(jù)地址經(jīng)數(shù)據(jù)塊地址存儲(chǔ)比較器127匹配后得到的數(shù)據(jù)緩存113的存儲(chǔ)塊號(hào)及地址偏移量存儲(chǔ)在數(shù)據(jù)點(diǎn)中。這樣,當(dāng)循跡器119的讀指針123指向一個(gè)數(shù)據(jù)點(diǎn)時(shí),可以根據(jù)從該數(shù)據(jù)點(diǎn)中讀出的存儲(chǔ)塊號(hào)及地址偏移量直接在數(shù)據(jù)緩存113中找到所需數(shù)據(jù)。
[0128]需要說明的是,為了便于描述,本實(shí)施例同時(shí)包含了指令軌道表和數(shù)據(jù)軌道表。在實(shí)際應(yīng)用中,顯然也可以將指令軌道表與數(shù)據(jù)軌道表合并為一個(gè)軌道表。此時(shí),該軌道表中既包含分支點(diǎn),也包含數(shù)據(jù)點(diǎn),循跡器119的讀指針121和讀指針123均對該軌道表尋址并讀出相應(yīng)的分支點(diǎn)信息及數(shù)據(jù)點(diǎn)信息。這種實(shí)施方法也應(yīng)屬于本說明書涵蓋范圍之內(nèi)。
[0129]此外,在有數(shù)據(jù)軌道表或有同時(shí)包含分支點(diǎn)和數(shù)據(jù)點(diǎn)的軌道表的情況下,對于之前所述以基地址寄存器值作為數(shù)據(jù)地址的情況,可以直接將‘0’存儲(chǔ)在相應(yīng)的數(shù)據(jù)點(diǎn)中,當(dāng)讀指針123指向該數(shù)據(jù)點(diǎn)時(shí),將所存儲(chǔ)的‘0’作為地址偏移量輸出送往加法器129進(jìn)行地址計(jì)算。
[0130]對于之前所述以指令地址值加地址偏移量得到數(shù)據(jù)地址的情況,由于該數(shù)據(jù)讀取指令本身的地址及地址偏移量都是固定不變的,因此可以在掃描器111掃描發(fā)現(xiàn)該指令時(shí)直接通過將指令地址與地址偏移量相加計(jì)算出數(shù)據(jù)地址,并存儲(chǔ)在數(shù)據(jù)點(diǎn)中。當(dāng)讀指針123指向該數(shù)據(jù)點(diǎn)時(shí),直接用所述數(shù)據(jù)地址送往數(shù)據(jù)塊地址存儲(chǔ)比較器127匹配。
[0131]此外,根據(jù)本發(fā)明技術(shù)方案,還可以將基地址差值存儲(chǔ)在數(shù)據(jù)軌道表中。具體地,可以用與之前所述相同的方法產(chǎn)生對應(yīng)于每條數(shù)據(jù)讀取指令的基地址寄存器的差值,并將所述基地址差值存儲(chǔ)在對應(yīng)的數(shù)據(jù)點(diǎn)中。這樣就可以省略基地址差值存儲(chǔ)器,且對應(yīng)每條數(shù)據(jù)讀取指令都有一個(gè)相應(yīng)的基地址差值,能夠更準(zhǔn)確地計(jì)算可能數(shù)據(jù)地址及預(yù)測數(shù)據(jù)地址。
[0132]在本發(fā)明中,由于一個(gè)指令塊中只有部分指令是分支指令或數(shù)據(jù)讀取指令,因此,還可以對指令軌道表107和/或數(shù)據(jù)軌道表607進(jìn)行壓縮,從而降低指令軌道表107和/或數(shù)據(jù)軌道表607對存儲(chǔ)空間的需求。例如,壓縮軌道表可以具有與原始軌道表相同的行,但列數(shù)少于原始軌道表,并由一個(gè)映射表存儲(chǔ)壓縮軌道表中的行與原始軌道表中的行之間的對應(yīng)關(guān)系。請參考圖7,其為本發(fā)明實(shí)施例的壓縮軌道表應(yīng)用的示意圖。為了便于說明,在本實(shí)施例中只顯示了相關(guān)模塊,省略了其他部分。
[0133]如圖7所示,所述軌道表存儲(chǔ)結(jié)構(gòu)包括:指令軌道表701、指令映射表703、數(shù)據(jù)軌道表705和數(shù)據(jù)映射表707。在本實(shí)施例中,指令軌道表701和數(shù)據(jù)軌道表705都是經(jīng)過壓縮的軌道表。指令軌道表701和數(shù)據(jù)軌道表705的行一一對應(yīng),且具有與原始軌道表相同的行數(shù),即對指令軌道表701和數(shù)據(jù)軌道表705的循跡地址中的行地址依然是BNX。
[0134]在本實(shí)施例中,指令軌道表701 (或數(shù)據(jù)軌道表705)中的每個(gè)表項(xiàng)均是一個(gè)分支點(diǎn)(或數(shù)據(jù)點(diǎn)),且按對應(yīng)的分支指令(或數(shù)據(jù)讀取指令)在指令塊中的先后順序依次對應(yīng)。而指令映射表703 (或數(shù)據(jù)映射表707)中的表項(xiàng)與指令軌道表701 (或數(shù)據(jù)軌道表705)
中的分支點(diǎn)(或數(shù)據(jù)點(diǎn))--對應(yīng),且存儲(chǔ)了對應(yīng)分支點(diǎn)(或數(shù)據(jù)點(diǎn))在指令塊中的塊內(nèi)偏移量。這樣,可以將一條分支指令(或數(shù)據(jù)讀取指令)在其所在指令塊中的塊內(nèi)偏移量經(jīng)指令映射表轉(zhuǎn)換為列地址后,根據(jù)該列地址找到指令軌道表701 (或數(shù)據(jù)軌道表705)中由所述分支指令(或數(shù)據(jù)讀取指令)的BNX指向的行中找到對應(yīng)的分支點(diǎn)(或數(shù)據(jù)點(diǎn));對于指令軌道表701 (或數(shù)據(jù)軌道表705)中任何一個(gè)分支點(diǎn)(或數(shù)據(jù)點(diǎn)),也可以在指令映射表703 (或數(shù)據(jù)映射表707)的相應(yīng)表項(xiàng)中找到該分支點(diǎn)(或數(shù)據(jù)點(diǎn))對應(yīng)的分支指令(或數(shù)據(jù)讀取指令)的塊內(nèi)偏移量,并與所述分支點(diǎn)(或數(shù)據(jù)點(diǎn))本身的BNX —同構(gòu)成所述分支點(diǎn)(或數(shù)據(jù)點(diǎn))在指令緩存中對應(yīng)的分支指令(或數(shù)據(jù)讀取指令)。
[0135]由于指令軌道表701和數(shù)據(jù)軌道表705的列數(shù)均小于原始軌道表,且指令軌道表701與數(shù)據(jù)軌道表705的列不一定對應(yīng),因此為了與原始軌道表中的循跡地址區(qū)分,在本實(shí)施例中,指令軌道表701的循跡地址中的列地址為MBNY,且該MBNY通過指令映射表703對應(yīng)原始指令軌道表中的一個(gè)列地址;數(shù)據(jù)軌道表705的列地址為DMBNY,且該DMBNY通過數(shù)據(jù)映射表707對應(yīng)原始數(shù)據(jù)軌道表中的一個(gè)列地址。此時(shí),指令軌道表701中的表項(xiàng)內(nèi)容包含了分支目標(biāo)指令對應(yīng)的BNXUMBNY和DMBNY。其中,BNX和MBNY共同表示該表項(xiàng)對應(yīng)的分支指令的分支目標(biāo)指令后的第一條分支指令在指令軌道表701中的分支點(diǎn)的循跡地址,而BNX和DMBNY共同表示該表項(xiàng)對應(yīng)的分支指令的分支目標(biāo)指令后的第一條數(shù)據(jù)讀取指令在數(shù)據(jù)軌道表705中的分支點(diǎn)的循跡地址。
[0136] 在本實(shí)施例中,分支指令地址711包含了該分支指令在軌道表中的行地址(即BNX),以及該分支指令在其所在指令塊中的位置偏移量,即BNX和列地址。當(dāng)根據(jù)一個(gè)指令塊建立軌道表701中的一條新軌道時(shí),所述分支指令地址711中的行地址部分(BNX)指出指令軌道表701中的一行,并以所述行中按順序第一個(gè)空閑單元作為所述分支指令對應(yīng)的分支點(diǎn),同時(shí),按之前實(shí)施例所述方法將分支指令地址711的塊內(nèi)偏移量(該分支指令在其所在指令塊中的位置偏移量)存儲(chǔ)到指令映射表703中的相應(yīng)表項(xiàng)。
[0137]該分支指令的分支目標(biāo)指令地址715的塊內(nèi)偏移量被送到指令映射表703中由指令地址715中的BNX指向的行中所有存儲(chǔ)的塊內(nèi)偏移量比較,并以第一個(gè)大于等于指令地址715的塊內(nèi)偏移量的存儲(chǔ)在該行內(nèi)的塊內(nèi)偏移量的列地址作為指令地址715對應(yīng)的列地址MBNY,從而形成指令地址715在指令軌道表701的循跡地址(BNXUMBNY)。該循跡地址721被存儲(chǔ)在所述分支點(diǎn)(即所述分支指令在指令軌道表701中的對應(yīng)表項(xiàng))中。
[0138]同樣地,從該分支指令的分支目標(biāo)指令開始的第一條數(shù)據(jù)讀取指令的指令地址717中的塊內(nèi)偏移量部分被送到數(shù)據(jù)映射表707按相同方法轉(zhuǎn)換為數(shù)據(jù)軌道表705的列地址DMBNY,所述列地址與循跡地址721中的BNX部分共同構(gòu)成所述數(shù)據(jù)讀取指令在數(shù)據(jù)軌道表705中的循跡地址723。該數(shù)據(jù)讀取指令的相應(yīng)信息713被存儲(chǔ)在所述數(shù)據(jù)軌道表705中由循跡地址723指向的表項(xiàng)中,即存儲(chǔ)在相應(yīng)的數(shù)據(jù)點(diǎn)中。循跡地址723中的DMBNY還被送往指令軌道表701存儲(chǔ)在所述分支點(diǎn)中。這樣,所述分支指令對應(yīng)的分支點(diǎn)內(nèi)容包括了 BNX、IMBNY和DMBNY,其中BNX與MBNY共同指向指令軌道表701中所述分支指令的目標(biāo)指令后的第一個(gè)分支點(diǎn),而BNX與DMBNY共同指向數(shù)據(jù)軌道表705中所述分支指令的目標(biāo)指令后的第一個(gè)數(shù)據(jù)點(diǎn)。
[0139]這樣,完成了對指令軌道表701中的一個(gè)表項(xiàng)內(nèi)容的生成和存儲(chǔ)。之后,當(dāng)循跡器的讀指針指向該表項(xiàng)時(shí),可以從該表項(xiàng)中讀出該分支指令的分支目標(biāo)指令后的第一條分支指令在指令軌道表701中的循跡地址,從而直接在指令軌道表701中找到該分支目標(biāo)指令所在的軌道及該分支目標(biāo)指令后的第一個(gè)分支點(diǎn);同時(shí),也可以從該表項(xiàng)中讀出從該分支指令的分支目標(biāo)指令開始的第一條數(shù)據(jù)讀取指令在數(shù)據(jù)軌道表705中的循跡地址,從而在該分支指令的分支轉(zhuǎn)移發(fā)生后,能夠直接利用該循跡地址從數(shù)據(jù)軌道表705中找到該數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)點(diǎn),并從該數(shù)據(jù)點(diǎn)中讀出數(shù)據(jù)讀取指令的相關(guān)信息,如指令類型或數(shù)據(jù)地址等,以進(jìn)行相應(yīng)的后續(xù)操作。
[0140]在采用本實(shí)施例所述的軌道表壓縮技術(shù)后,數(shù)據(jù)軌道表中的每個(gè)表項(xiàng)都是一個(gè)數(shù)據(jù)點(diǎn),讀指針123每經(jīng)過一次增一就能指向一個(gè)數(shù)據(jù)點(diǎn)。因此還需要一個(gè)額外的增一邏輯,用于依次指向指令緩存103中所述數(shù)據(jù)讀取指令之前的若干條指令,并將這些指令的目標(biāo)寄存器值送往判斷模塊133進(jìn)行相關(guān)性判斷。所述增一邏輯與循跡器119中寄存器241、增量器243和選擇器245構(gòu)成的結(jié)構(gòu)類似,在此不再說明。
[0141]根據(jù)本發(fā)明技術(shù)方案,還可以在前述實(shí)施例的基礎(chǔ)上增加一個(gè)數(shù)據(jù)讀緩沖(DataRead Buffer, DRB)以暫存提前從數(shù)據(jù)緩存113中讀出的數(shù)據(jù)。所述數(shù)據(jù)讀緩沖用于存儲(chǔ)根據(jù)讀指針123的值提前從數(shù)據(jù)緩存113中讀出的多個(gè)數(shù)據(jù),及這些數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址。當(dāng)處理器101執(zhí)行到數(shù)據(jù)讀取指令并計(jì)算得到實(shí)際數(shù)據(jù)地址時(shí),可采用與前述實(shí)施例相同的方法將該實(shí)際數(shù)據(jù)地址與數(shù)據(jù)讀緩沖提供給處理器101的數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址進(jìn)行比較,從而確定該數(shù)據(jù)是否就是該數(shù)據(jù)讀取指令需要的數(shù)據(jù)。
[0142]這樣,讀指針123就可以不必等待當(dāng)前指令之后的第一條數(shù)據(jù)讀取指令被執(zhí)行完畢后再移動(dòng)到下一條數(shù)據(jù)讀取指令,而可以在向數(shù)據(jù)讀緩沖輸出所述第一條數(shù)據(jù)讀取指令所需數(shù)據(jù)后,即可移動(dòng)到下一條數(shù)據(jù)讀取指令,更早地對后續(xù)數(shù)據(jù)讀取指令所需數(shù)據(jù)進(jìn)行填充和獲取,從而充分利用數(shù)據(jù)緩存113的輸出帶寬以進(jìn)一步降低數(shù)據(jù)緩存缺失造成的等待時(shí)間及訪問數(shù)據(jù)緩存所需的時(shí)間。
[0143]同樣地,在本實(shí)施例中,數(shù)據(jù)讀緩沖中也可以不存儲(chǔ)完整的數(shù)據(jù)地址,而是只存儲(chǔ)基地址寄存器值,當(dāng)處理器101執(zhí)行到數(shù)據(jù)讀取指令時(shí)將產(chǎn)生的實(shí)際基地址寄存器值與數(shù)據(jù)讀緩沖提供給處理器101的數(shù)據(jù)對應(yīng)的基地址寄存器值進(jìn)行比較,從而確定該數(shù)據(jù)是否就是該數(shù)據(jù)讀取指令需要的數(shù)據(jù)。
[0144]此外,還可以在數(shù)據(jù)讀緩沖中針對每個(gè)數(shù)據(jù)地址(或基地址寄存器值)增加一個(gè)標(biāo)志位,表示該數(shù)據(jù)地址(或基地址寄存器值)是確定數(shù)據(jù)地址(或確定基地址寄存器值)還是可能數(shù)據(jù)地址(或可能基地址寄存器值)。在這種情況下,當(dāng)處理器101執(zhí)行到數(shù)據(jù)讀取指令時(shí),只將產(chǎn)生的實(shí)際數(shù)據(jù)地址(或?qū)嶋H基地址寄存器值)與數(shù)據(jù)讀緩沖提供給處理器101的數(shù)據(jù)對應(yīng)的可能數(shù)據(jù)地址(或可能基地址寄存器值)進(jìn)行比較,以確定該數(shù)據(jù)是否就是該數(shù)據(jù)讀取指令需要的數(shù)據(jù),從而減少比較次數(shù)。
[0145]根據(jù)本發(fā)明技術(shù)方案,還可以如前述實(shí)施例所述增加一個(gè)指令讀緩沖用于存儲(chǔ)包括當(dāng)前指令塊在內(nèi)的至少一個(gè)指令塊,由指令地址253指向并輸出指令供處理器101讀取。此時(shí),數(shù)據(jù)讀緩沖可以與該指令讀緩沖同步向處理器101提供相應(yīng)數(shù)據(jù),即當(dāng)處理器101從指令讀緩沖讀取一條數(shù)據(jù)讀取指令時(shí),可以同時(shí)從數(shù)據(jù)讀緩沖的對應(yīng)位置讀取該數(shù)據(jù)讀取指令所需的數(shù)據(jù)。請參考圖8a,其為本發(fā)明實(shí)施例的指令讀緩沖和數(shù)據(jù)讀緩沖配合工作的一個(gè)示意圖。為了便于說明,在本實(shí)施例中只顯示了相關(guān)模塊,省略了其他部分。
[0146]在圖8a中,指令緩存103與處理器101之間增加了一個(gè)指令讀緩沖801,用于暫存處理器101當(dāng)前執(zhí)行的指令塊,并根據(jù)處理器101送來的指令地址253通過總線809輸出對應(yīng)的指令供處理器101執(zhí)行;數(shù)據(jù)讀緩沖803中的數(shù)據(jù)表項(xiàng)數(shù)目與指令讀緩沖801中的指令數(shù)目相同,且一一對應(yīng)。即,若指令讀緩沖801中的某條指令是數(shù)據(jù)讀取指令,則其在數(shù)據(jù)讀緩沖803中的對應(yīng)表項(xiàng)用于存儲(chǔ)該數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù);否則,在數(shù)據(jù)讀緩沖803中的對應(yīng)表項(xiàng)中的是無效信息。這樣就建立了指令讀緩沖與數(shù)據(jù)讀緩沖之間的聯(lián)系,即建立了數(shù)據(jù)讀取指令與對應(yīng)數(shù)據(jù)之間的聯(lián)系。
[0147]在本實(shí)施例中,循跡器119的讀指針123如之前實(shí)施例所述,可以在控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖803輸出當(dāng)前指令之后的第一條數(shù)據(jù)讀取指令所需數(shù)據(jù)后,即移動(dòng)到下一條數(shù)據(jù)讀取指令并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖803輸出對應(yīng)數(shù)據(jù),同時(shí)在數(shù)據(jù)讀緩沖803中的相應(yīng)位置存儲(chǔ)數(shù)據(jù)引擎105產(chǎn)生的數(shù)據(jù)地址146,直至當(dāng)前指令塊中所有數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)及對應(yīng)數(shù)據(jù)地址都被輸出并存儲(chǔ)在數(shù)據(jù)讀緩沖803中。這樣,根據(jù)處理器101輸出的指令地址253即可在數(shù)據(jù)讀緩沖803中找到在指令讀緩沖801中指令地址253指向的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。因此,指令地址253從指令讀緩沖801中讀出指令,且當(dāng)該指令為數(shù)據(jù)讀取指令時(shí),可以根據(jù)同一指令地址253同時(shí)從數(shù)據(jù)讀緩沖803中讀出對應(yīng)數(shù)據(jù)通過總線811送往處理器101供執(zhí)行,并讀出對應(yīng)數(shù)據(jù)地址送往比較器807與處理器101執(zhí)行到數(shù)據(jù)讀取指令并計(jì)算得到實(shí)際數(shù)據(jù)地址進(jìn)行比較,從而確定該數(shù)據(jù)是否就是該數(shù)據(jù)讀取指令需要的數(shù)據(jù)。
[0148]進(jìn)一步地,可以適當(dāng)增加指令讀緩沖和數(shù)據(jù)讀緩沖的存儲(chǔ)塊數(shù)目,以達(dá)到更好的性能。請參考圖8b,其為本發(fā)明實(shí)施例的指令讀緩沖和數(shù)據(jù)讀緩沖配合工作的另一個(gè)示意圖。在本實(shí)施例中,指令軌道表107是未經(jīng)壓縮的軌道表。指令讀緩沖由兩個(gè)存儲(chǔ)塊構(gòu)成,其中存儲(chǔ)塊851存儲(chǔ)了當(dāng)前指令塊,存儲(chǔ)塊853存儲(chǔ)了當(dāng)前指令之后的第一個(gè)分支指令的目標(biāo)指令塊。數(shù)據(jù)讀緩沖也由兩個(gè)存儲(chǔ)塊構(gòu)成,其中存儲(chǔ)塊861用于存儲(chǔ)當(dāng)前指令塊中數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù),存儲(chǔ)塊863用于存儲(chǔ)所述目標(biāo)指令塊中數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。
[0149]循跡器819中的寄存器231、增量器233、選擇器235、寄存器241、增量器243、選擇器245與圖2實(shí)施例中的對應(yīng)部件相同,并產(chǎn)生對指令軌道表107當(dāng)前軌道循跡的讀指針121和對指令讀緩沖中當(dāng)前指令塊(即存儲(chǔ)塊851)循跡的讀指針123。不同之處在于循跡器819中增加了寄存器841、增量器843和選擇器845,并產(chǎn)生對指令讀緩沖中當(dāng)前指令之后第一個(gè)分支指令的目標(biāo)指令塊(即存儲(chǔ)塊853)循跡的讀指針823。
[0150]在本實(shí)施例中,由于存儲(chǔ)塊851中已經(jīng)存儲(chǔ)了當(dāng)前指令塊,因此指向指令緩存103的行地址不是來源于讀指針121的BNX,而是讀指針121指向的分支點(diǎn)中的目標(biāo)指令軌跡點(diǎn)的行地址881。這樣,一旦讀指針121指向一個(gè)新的分支點(diǎn),即可用該分支點(diǎn)的目標(biāo)指令軌跡點(diǎn)的行地址881從指令緩存103中讀出所述目標(biāo)指令塊存儲(chǔ)在存儲(chǔ)塊853中。
[0151]在本實(shí)施例中,選擇器871用于選擇從存儲(chǔ)塊851及存儲(chǔ)塊853送出的地址偏移量中的一個(gè)作為地址偏移量138送往數(shù)據(jù)引擎;選擇器873用于選擇從存儲(chǔ)塊851及存儲(chǔ)塊853送來的基地址寄存器號(hào)中相應(yīng)的一個(gè)作為基地址寄存器號(hào)137送往數(shù)據(jù)引擎及處理器101。與之前實(shí)施例所述類似,讀指針123依次指向存儲(chǔ)塊851中的各條數(shù)據(jù)讀取指令,由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊861的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊861的相應(yīng)位置。當(dāng)處理器101執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址144時(shí),由比較器807對實(shí)際數(shù)據(jù)地址144和存儲(chǔ)塊861輸出的所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址進(jìn)行比較,以確定所述數(shù)據(jù)的正確性。讀指針823則從存儲(chǔ)塊853中的所述分支目標(biāo)指令開始依次指向各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0152]在上述過程中,可以有一定的仲裁方法防止不同指令塊同時(shí)輸出基地址寄存器號(hào)和地址偏移量造成的沖突。例如,可以由選擇器871和選擇器873先選擇存儲(chǔ)塊851中的數(shù)據(jù)讀取指令對應(yīng)的基地址寄存器號(hào)和地址偏移量送到數(shù)據(jù)引擎105進(jìn)行數(shù)據(jù)地址計(jì)算,再選擇存儲(chǔ)塊853中的數(shù)據(jù)讀取指令對應(yīng)的基地址寄存器號(hào)和地址偏移量送到數(shù)據(jù)引擎105進(jìn)行數(shù)據(jù)地址計(jì)算。也可以有其他任何合適的仲裁方法。
[0153]這樣,在數(shù)據(jù)讀緩沖中預(yù)先存儲(chǔ)了當(dāng)前指令塊和目標(biāo)指令塊中數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。讀指針121指向當(dāng)前指令之后的第一個(gè)分支點(diǎn),并根據(jù)從該分支點(diǎn)中讀出分支目標(biāo)指令循跡地址中的行地址881控制指令緩存103向存儲(chǔ)塊853存儲(chǔ)所述分支指令的目標(biāo)指令所在的指令塊。
[0154]讀指針123沿存儲(chǔ)塊851移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊861的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊861的相應(yīng)位置。
[0155]選擇器845選擇所述目標(biāo)指令循跡地址中的列地址883作為讀指針823的新值,使得讀指針823從所述分支目標(biāo)指令開始沿存儲(chǔ)塊853移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0156]若處理器101執(zhí)行所述當(dāng)前指令之后的第一個(gè)分支指令且分支轉(zhuǎn)移沒有發(fā)生,則讀指針121繼續(xù)移動(dòng)指向下一個(gè)分支點(diǎn),并根據(jù)從該分支點(diǎn)中讀出的目標(biāo)指令循跡地址中的行地址881控制指令緩存103向存儲(chǔ)塊853存儲(chǔ)所述分支指令的目標(biāo)指令所在的指令塊。讀指針123繼續(xù)沿存儲(chǔ)塊851移動(dòng)直至完成將后續(xù)所有數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù)存儲(chǔ)在存儲(chǔ)塊861中相應(yīng)位置的操作。
[0157]由于讀指針121指向了一個(gè)新的分支點(diǎn),選擇器845選擇所述目標(biāo)指令循跡地址中的列地址883作為讀指針823的新值,使得讀指針823沿存儲(chǔ)塊853從所述分支目標(biāo)指令開始移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0158]若處理器101執(zhí)行所述當(dāng)前指令之后的第一個(gè)分支指令且分支轉(zhuǎn)移發(fā)生,則存儲(chǔ)塊853中的指令塊被存儲(chǔ)到存儲(chǔ)塊851中,以更新當(dāng)前指令塊。選擇器245選擇原分支目標(biāo)指令循跡地址中的列地址883作為讀指針123的新值。讀指針123沿存儲(chǔ)塊851從所述新的當(dāng)前指令開始移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊861的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊861的相應(yīng)位置。
[0159]同時(shí),讀指針121從新的當(dāng)前指令軌跡點(diǎn)(即原分支目標(biāo)軌跡點(diǎn))開始沿新的當(dāng)前軌道移動(dòng),直到第一個(gè)分支點(diǎn),并根據(jù)從該分支點(diǎn)中讀出分支目標(biāo)指令循跡地址中的行地址881控制指令緩存103向存儲(chǔ)塊853存儲(chǔ)所述分支指令的目標(biāo)指令所在的指令塊。
[0160]由于讀指針121指向了一個(gè)新的分支點(diǎn),讀指針選擇器845選擇新分支目標(biāo)指令循跡地址中的列地址883作為讀指針823的新值,使得讀指針823沿存儲(chǔ)塊853從所述分支目標(biāo)指令開始移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0161]由于在計(jì)算讀指針823指向的數(shù)據(jù)讀取指令的數(shù)據(jù)地址時(shí),對應(yīng)的基地址寄存器值很有可能尚未更新,因此存儲(chǔ)在存儲(chǔ)塊863中的數(shù)據(jù)很可能是錯(cuò)誤的??梢栽诜种мD(zhuǎn)移發(fā)生,且存儲(chǔ)塊863中的數(shù)據(jù)被存儲(chǔ)到存儲(chǔ)塊861中之后,由讀指針123從存儲(chǔ)塊851中所述發(fā)生轉(zhuǎn)移的分支指令的目標(biāo)指令開始,按之前所述實(shí)施例相同方法再次移動(dòng)到數(shù)據(jù)讀取指令并由數(shù)據(jù)引擎105產(chǎn)生數(shù)據(jù)地址控制數(shù)據(jù)緩存113更新存儲(chǔ)塊,以提高數(shù)據(jù)讀緩沖中預(yù)先存儲(chǔ)的數(shù)據(jù)的準(zhǔn)確性。
[0162]根據(jù)本發(fā)明技術(shù)方案,還可以根據(jù)數(shù)據(jù)讀取指令與該指令之前最后改變對應(yīng)基地址寄存器值的指令之間的距離,對數(shù)據(jù)讀取指令分類。依然用圖3a實(shí)施例中所述的3個(gè)周期為例,可以在讀指針123或讀指針823移動(dòng)的過程中確定數(shù)據(jù)讀取指令與其之前最后改變對應(yīng)基地址寄存器值的指令之間的距離,并將與相應(yīng)的改變基地址寄存器值的指令之間的距離大于‘3’的數(shù)據(jù)讀取指令歸為‘較遠(yuǎn)’的一類,且將與相應(yīng)的改變基地址寄存器值的指令之間的距離小于等于‘3’的數(shù)據(jù)讀取指令歸為‘較近’的一類。對于‘較遠(yuǎn)’的一類指令,可以在處理器101實(shí)際執(zhí)行到所述數(shù)據(jù)讀取指令之前3條指令時(shí)再由數(shù)據(jù)引擎105計(jì)算出確定數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù),這樣依然能完全掩蓋對數(shù)據(jù)緩存113的訪問時(shí)延。而對于‘較近’的一類指令,為了盡量完全掩蓋對數(shù)據(jù)緩存113的訪問時(shí)延,可以提前(即早于3條指令)由數(shù)據(jù)引擎105計(jì)算出可能數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。
[0163]這樣,在讀指針823沿存儲(chǔ)塊853中的指令移動(dòng)的過程中,若指向的是‘較遠(yuǎn)’的一類指令,則忽略該指令;若指向的是‘較近’的一類指令,則直接由數(shù)據(jù)引擎105計(jì)算出可能數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。之后讀指針823繼續(xù)移動(dòng)指向下一條數(shù)據(jù)讀取指令。
[0164]對于讀指針123,在沿存儲(chǔ)塊851中的指令移動(dòng)的過程中,若指向的是‘較遠(yuǎn)’的一類指令,則等待直到處理器101執(zhí)行到所述數(shù)據(jù)讀取指令之前3條指令時(shí)再由數(shù)據(jù)引擎105計(jì)算出確定數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù),以掩蓋數(shù)據(jù)緩存訪問時(shí)延;若指向的是‘較近’的一類指令,由于之前已經(jīng)根據(jù)可能數(shù)據(jù)地址從數(shù)據(jù)緩存113獲取了對應(yīng)數(shù)據(jù),因此可以忽略該指令。之后讀指針123繼續(xù)移動(dòng)指向下一條數(shù)據(jù)讀取指令。
[0165]或者,在讀指針823沿存儲(chǔ)塊853中的指令移動(dòng)的過程中,只計(jì)算出‘較近’的一類指令對應(yīng)的可能數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。在讀指針123沿存儲(chǔ)塊851中的指令移動(dòng)的過程中,對所有數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。
[0166]或者,在讀指針823沿存儲(chǔ)塊853中的指令移動(dòng)的過程中,只計(jì)算出‘較遠(yuǎn)’的一類指令對應(yīng)的可能數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。在讀指針123沿存儲(chǔ)塊851中的指令移動(dòng)的過程中,只計(jì)算出‘較近’的一類指令對應(yīng)的可能數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。
[0167]或者,在讀指針823沿存儲(chǔ)塊853中的指令移動(dòng)的過程中,只計(jì)算出‘較遠(yuǎn)’的一類指令對應(yīng)的可能數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。在讀指針123沿存儲(chǔ)塊851中的指令移動(dòng)的過程中,對所有數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。
[0168]根據(jù)本發(fā)明技術(shù)方案,還可以對目標(biāo)指令塊中的每條數(shù)據(jù)讀取指令增加一個(gè)標(biāo)志位,以表示該數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)是否已經(jīng)存儲(chǔ)在數(shù)據(jù)讀緩沖中。在這種情況下,當(dāng)讀指針123沿存儲(chǔ)塊851中的指令移動(dòng)時(shí),對所有的對應(yīng)數(shù)據(jù)尚未存儲(chǔ)在數(shù)據(jù)讀緩沖中的數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖輸出對應(yīng)數(shù)據(jù)。
[0169]此外,還可以采用其他任何合適的策略控制數(shù)據(jù)緩存113向數(shù)據(jù)讀緩沖存儲(chǔ)數(shù)據(jù),以提高數(shù)據(jù)讀緩沖中數(shù)據(jù)的準(zhǔn)確性,或減少錯(cuò)誤數(shù)據(jù)的存儲(chǔ)次數(shù)。
[0170]請參考圖Sc,其為本發(fā)明實(shí)施例的指令讀緩沖和數(shù)據(jù)讀緩沖配合工作的另一示意圖。在圖Sc中,指令軌道表891是經(jīng)過壓縮的軌道表,即指令軌道表891中的每個(gè)表項(xiàng)均是一個(gè)分支點(diǎn),且按對應(yīng)的分支指令在指令塊中的先后順序依次對應(yīng)。而指令映射表895中的表項(xiàng)與指令軌道表891中的分支點(diǎn)一一對應(yīng),且存儲(chǔ)了對應(yīng)分支點(diǎn)在指令塊中的塊內(nèi)偏移量。因此,在本實(shí)施例中,指令軌道表891的循跡地址中的列地址為MBNY,且該MBNY通過指令映射表895對應(yīng)原始指令軌道表中的一個(gè)列地址。此時(shí),指令軌道表891中的表項(xiàng)內(nèi)容包含了 BNX、MBNY和TOFFSET。其中,BNX和MBNY共同表示該表項(xiàng)對應(yīng)的分支指令的分支目標(biāo)指令后的第一條分支指令在指令軌道表891中的分支點(diǎn)的循跡地址。而BNX和TOFFSET共同表示該表項(xiàng)對應(yīng)的分支指令的分支目標(biāo)指令軌跡點(diǎn)在原始軌道表中的循跡地址,其中T0FFEST表示所述分支目標(biāo)指令在其所在指令塊中的塊內(nèi)偏移量。這樣,根據(jù)TOFFSET即可以在存儲(chǔ)塊853中找到所述分支目標(biāo)指令。
[0171]在本實(shí)施例中,讀指針121指向一個(gè)分支點(diǎn),并根據(jù)從該分支點(diǎn)中讀出的BNX 881控制指令緩存103向存儲(chǔ)塊853存儲(chǔ)所述分支指令的目標(biāo)指令所在的指令塊。
[0172]讀指針123沿存儲(chǔ)塊851移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊861的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊861的相應(yīng)位置。
[0173]選擇器845選擇從所述分支點(diǎn)中讀出的TOFFSET 893作為讀指針823的新值,使得讀指針823從所述分支目標(biāo)指令開始沿存儲(chǔ)塊853移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0174]若處理器101執(zhí)行所述當(dāng)前指令之后的第一個(gè)分支指令且分支轉(zhuǎn)移沒有發(fā)生,則讀指針121的MBNY增一指向同一軌道中的下一個(gè)分支點(diǎn),并根據(jù)從該分支點(diǎn)中讀出的BNX881控制指令緩存103向存儲(chǔ)塊853存儲(chǔ)所述分支指令的目標(biāo)指令所在的指令塊。讀指針123繼續(xù)沿存儲(chǔ)塊851移動(dòng)直至完成將后續(xù)所有數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù)存儲(chǔ)在存儲(chǔ)塊861中相應(yīng)位置的操作。
[0175]由于讀指針121指向了一個(gè)新的分支點(diǎn),選擇器845選擇從所述分支點(diǎn)中讀出的TOFFSET 893作為讀指針823的新值,使得讀指針823沿存儲(chǔ)塊853從所述分支目標(biāo)指令開始移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0176]若處理器101執(zhí)行所述當(dāng)前指令之后的第一個(gè)分支指令且分支轉(zhuǎn)移發(fā)生,則存儲(chǔ)塊853中的指令塊被存儲(chǔ)到存儲(chǔ)塊851中,以更新當(dāng)前指令塊。選擇器245選擇從原分支點(diǎn)中讀出的TOFFSET 893作為讀指針123的新值。讀指針123沿存儲(chǔ)塊851從所述新的當(dāng)前指令(即所述原分支點(diǎn)的分支目標(biāo)指令)開始移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊861的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊861的相應(yīng)位置。
[0177]同時(shí),選擇器235選擇從所述分支點(diǎn)中讀出的BNX 881和MBNY 883作為讀指針121的新值,使得讀指針121直接指向新的分支點(diǎn)(即原分支目標(biāo)指令之后的第一個(gè)分支點(diǎn)),根據(jù)從該新的分支點(diǎn)中讀出的BNX 881控制指令緩存103向存儲(chǔ)塊853存儲(chǔ)所述新的分支點(diǎn)對應(yīng)的目標(biāo)指令所在的指令塊,并等待處理器101執(zhí)行所述分支指令產(chǎn)生的分支轉(zhuǎn)移判定結(jié)果。
[0178]由于讀指針121指向了一個(gè)新的分支點(diǎn),讀指針選擇器845選擇從所述新的分支點(diǎn)中讀出的TOFFSET 893作為讀指針823的新值,使得讀指針823沿存儲(chǔ)塊853從所述新的分支點(diǎn)的分支目標(biāo)指令開始移動(dòng)指向后續(xù)各條數(shù)據(jù)讀取指令,并由數(shù)據(jù)引擎105產(chǎn)生相應(yīng)的數(shù)據(jù)地址146控制數(shù)據(jù)緩存113向存儲(chǔ)塊863的對應(yīng)位置存儲(chǔ)所述數(shù)據(jù)讀取指令的對應(yīng)數(shù)據(jù),并將所述數(shù)據(jù)對應(yīng)的數(shù)據(jù)地址存儲(chǔ)在存儲(chǔ)塊863的相應(yīng)位置。
[0179]綜上,在本發(fā)明提供的數(shù)據(jù)緩存系統(tǒng)和方法中,利用在指令緩存或數(shù)據(jù)軌道表中存儲(chǔ)相關(guān)信息提前對數(shù)據(jù)緩存進(jìn)行填充,并提前控制數(shù)據(jù)緩存向處理器輸出可能被訪問的數(shù)據(jù),部分或全部掩蓋了數(shù)據(jù)緩存缺失造成的等待時(shí)間和/或?qū)?shù)據(jù)緩存的訪問時(shí)延,提高了指令處理系統(tǒng)的性能。
[0180]上述描述僅是對本發(fā)明較佳實(shí)施例的描述,并非對本發(fā)明范圍的任何限定,本發(fā)明領(lǐng)域的普通技術(shù)人員根據(jù)上述揭示內(nèi)容做的任何變更、修飾,均屬于權(quán)利要求書的保護(hù)范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)緩存系統(tǒng),其特征在于,包括: 處理器,所述處理器用以執(zhí)行指令、讀取數(shù)據(jù); 存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)用以存儲(chǔ)指令和數(shù)據(jù); 指令軌道表,所述指令軌道表存儲(chǔ)所述存儲(chǔ)系統(tǒng)中存儲(chǔ)的分支指令的相關(guān)信息; 循跡器,所述循跡器指向處理器當(dāng)前正在執(zhí)行的指令之后的第一條數(shù)據(jù)讀取指令; 數(shù)據(jù)引擎,所述數(shù)據(jù)引擎用以在處理器執(zhí)行所述循跡器指向的數(shù)據(jù)讀取指令之前,提前計(jì)算出數(shù)據(jù)地址,并根據(jù)所述數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供對應(yīng)數(shù)據(jù)。
2.如權(quán)利要求1所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述存儲(chǔ)系統(tǒng)進(jìn)一步包含指令緩存,所述指令緩存用以存儲(chǔ)供處理器執(zhí)行的指令及數(shù)據(jù)讀取指令的相關(guān)信息;所述相關(guān)信息表示該指令是否為數(shù)據(jù)讀取指令。
3.如權(quán)利要求2所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)讀取指令的相關(guān)信息為數(shù)據(jù)讀取指令的類型信息;根據(jù)所述類型信息,可以直接得到基地址寄存器號(hào)、地址偏移量在該指令碼中的位置信息。
4.如權(quán)利要求1所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述存儲(chǔ)系統(tǒng)進(jìn)一步包含數(shù)據(jù)軌道表,所述數(shù)據(jù)軌道表用以存儲(chǔ)數(shù)據(jù)讀取指令的相關(guān)信息;所述相關(guān)信息表示該指令是否為數(shù)據(jù)相關(guān)指令;且 所述數(shù)據(jù)軌道表的行與指令軌道表的行一一對應(yīng)。
5.如權(quán)利要求4所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)讀取指令的相關(guān)信息為數(shù)據(jù)讀取指令的類型信息;根據(jù)所述類型信息,可以直接得到基地址寄存器號(hào)、地址偏移量在該指令碼中的位置信息。
6.如權(quán)利要求4所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)軌道表進(jìn)一步存儲(chǔ)了數(shù)據(jù)讀取指令的基地址寄存器號(hào)和地址偏移量中的至少一項(xiàng)內(nèi)容。
7.如權(quán)利要求1所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎以基地址寄存器值加地址偏移量得到確定數(shù)據(jù)地址;或 以基地址寄存器值作為確定數(shù)據(jù)地址;或 以指令地址值加地址偏移量得到確定數(shù)據(jù)地址;或 多個(gè)基地址寄存器值相加得到確定數(shù)據(jù)地址。
8.如權(quán)利要求7所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)緩存系統(tǒng)包含一個(gè)時(shí)間點(diǎn)檢測模塊;所述時(shí)間點(diǎn)檢測模塊用以判斷是否到達(dá)向存儲(chǔ)系統(tǒng)輸出數(shù)據(jù)地址以讀出數(shù)據(jù)并提供給處理器的時(shí)間點(diǎn)。
9.如權(quán)利要求8所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎進(jìn)一步包含判斷模塊,所述判斷模塊對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值;且 當(dāng)基地址寄存器的值被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),用數(shù)據(jù)引擎計(jì)算得到的所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
10.如權(quán)利要求8所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎進(jìn)一步包含基地址差值存儲(chǔ)器,所述基地址差值存儲(chǔ)器中的每一項(xiàng)對應(yīng)一個(gè)基地址寄存器,用于存儲(chǔ)對應(yīng)基地址寄存器的變化差值。
11.如權(quán)利要求10所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎還能夠以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或 以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或 多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址。
12.如權(quán)利要求11所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎進(jìn)一步包含判斷模塊,所述判斷模塊對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值;且 當(dāng)基地址寄存器的值尚未被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù); 當(dāng)基地址寄存器的值已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
13.如權(quán)利要求12所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎進(jìn)一步包含比較器,在所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)的情況下,當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),所述比較器對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且 當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
14.如權(quán)利要求13所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,對于任意數(shù)據(jù)讀取指令,所述數(shù)據(jù)引擎在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且 當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
15.如權(quán)利要求14所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎中的加法器對所述實(shí)際數(shù)據(jù)地址與對應(yīng)基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
16.如權(quán)利要求7所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎進(jìn)一步包含基地址差值存儲(chǔ)器,所述基地址差值存儲(chǔ)器中的每一項(xiàng)對應(yīng)一個(gè)基地址寄存器,用于存儲(chǔ)對應(yīng)基地址寄存器的變化差值; 所述數(shù)據(jù)引擎在處理器執(zhí)行所述數(shù)據(jù)讀取指令之前,以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或 以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或 多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址。
17.如權(quán)利要求16所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎進(jìn)一步包含比較器,在所述判斷模塊選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)的情況下,當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),所述比較器對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且 當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
18.如權(quán)利要求17所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,對于任意數(shù)據(jù)讀取指令,所述數(shù)據(jù)引擎在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且 當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
19.如權(quán)利要求18所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)引擎中的加法器對所述實(shí)際數(shù)據(jù)地址與所述基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
20.如權(quán)利要求4所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述指令軌道表和數(shù)據(jù)軌道表的列數(shù)均可以少于指令塊中指令個(gè)數(shù);且 所述指令軌道表的每個(gè)表項(xiàng)對應(yīng)一條分支指令,其表項(xiàng)格式包含分支目標(biāo)指令塊上從分支目標(biāo)指令開始的第一條分支指令在指令軌道表中的行地址和列地址,以及所述分支目標(biāo)指令塊上從所述分支目標(biāo)指令開始的第一條數(shù)據(jù)讀取指令在數(shù)據(jù)軌道表中的列地址; 所述數(shù)據(jù)軌道表的每個(gè)表項(xiàng)對應(yīng)一條數(shù)據(jù)讀取指令。
21.如權(quán)利要求7所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)緩存系統(tǒng)進(jìn)一步包括數(shù)據(jù)讀緩沖,所述數(shù)據(jù)讀緩沖存儲(chǔ)當(dāng)前指令之后的若干條數(shù)據(jù)讀取指令可能用到的數(shù)據(jù),供處理器讀取。
22.如權(quán)利要求21所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述數(shù)據(jù)緩存系統(tǒng)進(jìn)一步包括指令讀緩沖,所述指令讀緩沖存儲(chǔ)了至少包括當(dāng)前指令塊在內(nèi)的單數(shù)個(gè)或復(fù)數(shù)個(gè)指令塊;且 所述數(shù)據(jù)讀緩沖中的表項(xiàng)數(shù)目與所述指令讀緩沖中的指令數(shù)目相同,且一一對應(yīng); 對于指令讀緩沖中的任意數(shù)據(jù)讀取指令,其在數(shù)據(jù)讀緩沖中的對應(yīng)表項(xiàng)用于存儲(chǔ)該數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。
23.如權(quán)利要求2 2所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,使用同一數(shù)據(jù)讀取指令的指令地址或指令地址偏移量,能夠從所述指令讀緩沖和數(shù)據(jù)讀緩沖中同時(shí)讀出所述數(shù)據(jù)讀取指令及對應(yīng)數(shù)據(jù)。
24.如權(quán)利要求23所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,根據(jù)數(shù)據(jù)讀取指令與該指令之前最后更新對應(yīng)基地址寄存器值的指令之間的距離,對數(shù)據(jù)讀取指令分類; 根據(jù)所述分類,在不同的時(shí)間點(diǎn)控制數(shù)據(jù)緩存將不同類型的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)讀緩沖中。
25.如權(quán)利要求23所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,記錄指令讀緩沖中的數(shù)據(jù)讀取指令對應(yīng)數(shù)據(jù)是否已經(jīng)存儲(chǔ)在數(shù)據(jù)讀緩沖中的信息,并根據(jù)所述信息對相應(yīng)數(shù)據(jù)尚未存儲(chǔ)在數(shù)據(jù)讀緩沖中的數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存將對應(yīng)的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)讀緩沖中。
26.一種數(shù)據(jù)緩存方法,其特征在于,所述方法包括;提前找到處理器當(dāng)前正在執(zhí)行的指令之后的數(shù)據(jù)讀取指令; 在處理器執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出數(shù)據(jù)地址,并根據(jù)所述數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供對應(yīng)數(shù)據(jù)。
27.如權(quán)利要求26所述的緩存方法,其特征在于,所述方法進(jìn)一步包括: 以基地址寄存器值加地址偏移量得到確定數(shù)據(jù)地址;或 以基地址寄存器值作為確定數(shù)據(jù)地址;或 以指令地址值加地址偏移量得到確定數(shù)據(jù)地址;或 多個(gè)基地址寄存器值相加得到確定數(shù)據(jù)地址。
28.如權(quán)利要求27所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:通過對所述數(shù)據(jù)讀取指令的地址與處理器當(dāng)前執(zhí)行的指令的地址進(jìn)行比較,以判斷是否到達(dá)向存儲(chǔ)系統(tǒng)輸出數(shù)據(jù)地址以讀出數(shù)據(jù)并提供給處理器的時(shí)間點(diǎn);且 當(dāng)基地址寄存器的值已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
29.如權(quán)利要求27所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:記錄所有基地址寄存器的變化差值。
30.如權(quán)利要求29所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括: 以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或 以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或 多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址。
31.如權(quán)利要求30所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:通過對所述數(shù)據(jù)讀取指令的地址與處理器當(dāng)前執(zhí)行的指令的地址進(jìn)行比較,以判斷是否到達(dá)向存儲(chǔ)系統(tǒng)輸出數(shù)據(jù)地址以讀出數(shù)據(jù)并提供給處理器的時(shí)間點(diǎn)。
32.如權(quán)利要求31所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:對數(shù)據(jù)讀取指令及其之前若干條指令的寄存器相關(guān)性進(jìn)行判斷,以確定相應(yīng)基地址寄存器的值是否已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值;且 當(dāng)基地址寄存器的值尚未被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述可能數(shù)據(jù) 地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù); 當(dāng)基地址寄存器的值已經(jīng)被更新為該數(shù)據(jù)讀取指令所需的基地址寄存器值時(shí),所述判斷模塊選擇所述確定數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
33.如權(quán)利要求32所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:在選擇所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)的情況下,當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),所述比較器對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且 當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
34.如權(quán)利要求33所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:對于任意數(shù)據(jù)讀取指令,在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且 當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
35.如權(quán)利要求34所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:對所述實(shí)際數(shù)據(jù)地址與所述基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
36.如權(quán)利要求27所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:記錄所有基地址寄存器的變化差值; 在處理器執(zhí)行所述數(shù)據(jù)讀取指令之前,以基地址寄存器值加地址偏移量,再加上對應(yīng)基地址差值得到可能數(shù)據(jù)地址;或以基地址寄存器值加對應(yīng)基地址差值作為可能數(shù)據(jù)地址;或多個(gè)基地址寄存器值及對應(yīng)的基地址差值相加得到可能數(shù)據(jù)地址; 根據(jù)所述可能數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù); 當(dāng)處理器執(zhí)行所述數(shù)據(jù)讀取指令產(chǎn)生實(shí)際數(shù)據(jù)地址時(shí),對所述可能數(shù)據(jù)地址與所述實(shí)際數(shù)據(jù)地址進(jìn)行比較,以確定所述可能數(shù)據(jù)地址是否與所述實(shí)際數(shù)據(jù)地址一致;且當(dāng)兩者不一致時(shí),使用所述實(shí)際數(shù)據(jù)地址控制存儲(chǔ)系統(tǒng)向處理器提供數(shù)據(jù)。
37.如權(quán)利要求36所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:對于任意數(shù)據(jù)讀取指令,在處理器再次執(zhí)行所述數(shù)據(jù)讀取指令之前,提前計(jì)算出所述再次執(zhí)行所述數(shù)據(jù)讀取指令時(shí)的預(yù)測數(shù)據(jù)地址;且 當(dāng)所述可能數(shù)據(jù)地址對應(yīng)的數(shù)據(jù)尚未存儲(chǔ)在所述存儲(chǔ)系統(tǒng)中時(shí),從外部存儲(chǔ)器獲取包含所述數(shù)據(jù)的數(shù)據(jù)塊并填充在所述存儲(chǔ)系統(tǒng)中。
38.如權(quán)利要求37所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:對所述實(shí)際數(shù)據(jù)地址與所述基地址差值相加得到所述預(yù)測數(shù)據(jù)地址。
39.如權(quán)利要求26所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:建立數(shù)據(jù)讀取指令與對應(yīng)數(shù)據(jù)之間的聯(lián)系; 使用同一數(shù)據(jù)讀取指令的指令地址或指令地址偏移量,同時(shí)讀出所述數(shù)據(jù)讀取指令及對應(yīng)數(shù)據(jù)。
40.如權(quán)利要 求39所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:根據(jù)數(shù)據(jù)讀取指令與該指令之前最后更新對應(yīng)基地址寄存器值的指令之間的距離,對數(shù)據(jù)讀取指令分類; 根據(jù)所述分類,在不同的時(shí)間點(diǎn)控制數(shù)據(jù)緩存輸出不同類型的數(shù)據(jù)讀取指令對應(yīng)的數(shù)據(jù)。
41.如權(quán)利要求39所述的數(shù)據(jù)緩存方法,其特征在于,所述方法進(jìn)一步包括:記錄數(shù)據(jù)讀取指令對應(yīng)數(shù)據(jù)是否已經(jīng)由數(shù)據(jù)緩存輸出的信息,并根據(jù)所述信息對相應(yīng)數(shù)據(jù)尚未由數(shù)據(jù)緩存輸出的數(shù)據(jù)讀取指令計(jì)算數(shù)據(jù)地址并控制數(shù)據(jù)緩存輸出對應(yīng)的數(shù)據(jù)。
【文檔編號(hào)】G06F12/08GK104050092SQ201310086817
【公開日】2014年9月17日 申請日期:2013年3月15日 優(yōu)先權(quán)日:2013年3月15日
【發(fā)明者】林正浩 申請人:上海芯豪微電子有限公司