專利名稱:選擇性存取不同指令緩沖階層的裝置及方法
技術領域:
本發明是有關于一種分支目標地址在管線微處理器進行快取的領域,且特別是有關于一種在微處理器因分支目標地址快取命中而進行分支(branch)后,將正確的指令格式提供至指令格式化邏輯的裝置及方法。
其中,指令擷取階層是在目前的執行程序中擷取下一個指令,而此下一個指令基本上是下一個循序內存地址的指令,然而,在發生分支(taken branch)指令的情況下,下一個指令是由分支指令所指定的內存地址中的指令,一般稱此內存地址為分支目標地址(branch targetaddress)。指令擷取階層從指令快取區中擷取的指令,目前如果不在此指令快取區中,則會自機器的階層式內存(memory hierarchy)中較高層次的指令高速緩存中擷取,例如從較高階層高速緩存或是從系統內存中擷取得到,而指令擷取階層擷取到的指令會提供給下一個階層的指令譯碼階層處理。
指令譯碼階層包括指令譯碼邏輯,用以對從指令擷取階層接收的指令字節進行譯碼。在處理器支持不同指令長度的情況下,例如x86結構處理器,一個指令譯碼階層的功能,會分割指令字節流以格式化指令,其中格式化指令流(a stream of instructions)包括決定每一個指令的長度,比方說,指令格式化邏輯從指令擷取階層接收尚未辨識的指令字節流,進而對此指令字節流進行格式化,或分析為個別的字節群組,其中每一個位群組是一個指令,而這些指令所組成的程序即是可使處理器進行執行的指令。另外,指令譯碼階層也包含轉換宏指令,例如x86指令,為由剩余的管線(pipeline)進行執行的微指令(micro-instruction)。
指令執行階層包括執行邏輯,是執行從指令譯碼階層接收的已格式化及譯碼的指令,其中執行邏輯是操作從處理器的緩存器組及/或內存回收的數據。而寫回階層,是將執行邏輯所產生的結果儲存至處理器的緩存器組。
管線處理器的一個重要觀念,是使每一個階層的處理器忙碌于函數被設計時的工作,假設指令譯碼階層已準備要譯碼下一個指令,但指令擷取階層尚未提供其所需的指令字節時,則處理器在效能上就會變糟。而為了防止指令譯碼階層的饑餓(starvation),普遍性的解決方法是在指令快取區及指令格式化邏輯之間,放置一個指令緩沖器。指令擷取階層會嘗試在指令緩沖器中保持數個指令的字節,以使指令譯碼階層有指令字節可進行譯碼,不至有饑餓情形發生。
一般來說,指令快取區一次會提供一個指令字節的快取線(cacheline),通常為16或32字節,而指令擷取階層會自指令快取區中擷取一個或多個快取線,進而將快取線儲存至指令緩沖器中。當指令譯碼階層準備譯碼一個指令時,會自指令緩沖器中存取指令字節,而不是在指令快取區中等待。
此指令快取區提供一個指令字節用的快取線,可由擷取地址(fetchaddress)進行選取,其中擷取地址是由指令擷取階層將的提供給指令快取區。在正常的程序運作中,由于在預期的情況下會循序性地執行程序指令,因此擷取地址會單因快取線的大小而增加,且增加后的擷取地址會被指作為下一個循序擷取地址。然而,如果有一個分支指令(branch instruction)被指令譯碼邏輯譯碼,且此分支指令發生(或預期發生),則擷取地址會更新為分支指令的目標地址(以快取線大小計算下),而不是被更新為下一個循序擷取地址。
然而,在擷取地址被更新至分支目標地址的時候,指令緩沖器可能在分支指令后,隨著下一個循序指令的指令字節而移位。因為當分支情況發生時,在分支指令后的指令不會被譯碼及執行。而程序本身在執行時,是需要對在分支目標地址上的指令進行執行,而不是對在分支指令后的下一個循序指令進行執行,因此在程序的循序指令流為典型的預期情況時,指令緩沖器中的指令字節錯誤的預先擷取(ppre-fetch)。而為了補救這個錯誤,處理器必須在分支指令后,清除(flush)掉所有的指令字節,包括在指令緩沖器中的指令字節。
但在發生分支指令后,立即清除指令緩沖器會產生極高的代價,因為指令譯碼階層會持續饑餓,直到指令緩沖器從指令快取區中重新移植過。而一個可解決此問題的方法是在譯碼分支指令前先進行分支。此可以由使用一個分支目標地址快取區(branch target addresscache;簡稱BTAC)來實現,此BTAC快取(cache)包含先前已執行分支指令的指令快取線的擷取地址,以及與其相關的目標地址。
此指令快取區擷取地址是應用于BTAC,本質上相似于擷取地址對于指令快取區的應用。在包含分支指令快取線的指令快取區擷取地址情況中,快取線是提供給指令緩沖器。此外,如果擷取地址命中(hit)BTAC,BTAC會提供一個相關的分支目標地址,如果分支指令命中BTAC是預期發生的,則指令快取擷取地址會被更新為由BTAC提供的目標地址。
因為指令快取區會一次提供一條指令集的快取線提供至指令緩沖器,因此在分支指令后,快取線中可能仍會有指令字節存在。而在分支指令后的這些指令字節不應被執行。然而,指令緩沖器不會一次全被清除掉(如上所述,在沒有BTAC的處理器中會被清除掉),因為可能直到現在尚未被譯碼的指令緩沖器中,仍有有效指令存在。特別是,分支指令本身(即任何在快取線中優先于分支指令的指令字節)必須被譯碼及執行。
可是,在分支指令仍在指令緩沖器中且尚未被格式化的情況下,在指令緩沖器中接續于分支指令的指令的位置也不得而知,這是因為分支指令在快取線中的長度及位置在分支指令被格式化前無法得知,因此在指令緩沖器中的分支指令的位置未知。據此,在分支指令后的指令的位置也無法得知。
此外,也可能在分支指令譯碼前,包含分支的目標指令的快取線會被儲存至指令緩沖器中,而在快取線中,處于目標指令前的指令字節不會被執行,更復雜點的,分支指令可能會由多字節(multiple bytes)組成,而造成分支指令會涵蓋橫跨多個快取線。
一般說來,在管線微處理器的設計中,去設計指令格式邏輯,使的在處理器的循環周期中進行指令格式函數,是很困難的事,因此,盡可能在格式化指令字節上提供更多的循環周期,會比將指令字節自指令緩沖器中位移,更有助益。而如果是利用一個指令緩沖器使的盡可能提供時間,也是相當有助益的事,因為可讓指令格式化邏輯格式化由指令緩沖器提供的指令字節。此外,利用微處理器中一個具有較大儲存空間的指令緩沖器,以減少指令譯碼階層饑餓的可能性,也很有幫助。特別是關于這一點在當微處理器管線處理指令的速度增加時會特別重要。這在與內存的存取時間,或是與擷取階層在發生分支情況下,自指令快取區中擷取指令所需的時間有關的速度增加上尤其正確。
因此,在管線處理器中的分支控制裝置是必須的,使得基于BTAC的指令快取擷取地址在利用上,可以與一個具有較大儲存空間的指令緩沖器結合,而此具有較大儲存空間的指令緩沖器可以提供有效的處理時間特性及適當的程序執行。
本發明另在微處理器中也提供一種預先譯碼階層,此預先譯碼階層包括一個指令緩沖器,至少具有階層A、B以及C,用以暫存指令字節。此預先譯碼階層也包括一個多任務器,耦接于指令緩沖器,用以選擇階層A、B及C其中的一個階層以提供至指令格式化邏輯。預先譯碼階層也包含一分支指針,耦接于多任務器,依據呈現于階層A的分支指令以指示微處理器是否發生分支。預先譯碼階層也包含一涵蓋指針(wrap indicator),耦接于多任務器,指出被指令格式化邏輯格式化的指令是否涵蓋橫跨階層A及B,以進一步格式化指令。其中,多任務器依據分支指針及涵蓋指針,從階層A、B及C中選擇其中的一個階層以提供給指令格式化邏輯。
本發明又提供一種分支控制裝置,適用于微處理器。此分支控制裝置包括指令緩沖器,具有第一、第二及第三階層,用以暫存自指令快取區接收的第一、第二及第三快取線,其中,第一及第二快取線各自包含分支指令的一部份,而第三快取線則是包含分支指令的目標指令。分支控制裝置也包括一分支目標地址快取區(branch target addresscache;簡稱BTAC),耦接于指令緩沖器,輸出一個指針,以顯示第三快取線是由BTAC所提供的分支指令的目標地址自指令快取區中選取得到。分支控制裝置也包括一多任務器,耦接指令緩沖器與指令格式化邏輯,用以選取第一、第二及第三階層中的一個階層,以提供至指令格式化邏輯,其中,多任務器會在選取第一及第二階層后,依據BTAC輸出的指針及指令格式化邏輯判斷的分支指令長度,選取第三階層。
本發明又再提出一種暫存指令字節以提供至指令格式化邏輯的方法,適用于一微處理器。此方法包括儲存一分支指針,以判斷處理器是否有分支于相對應于指令緩沖器的第一快取線,接著,產生第一快取線的第一指令長度,然后,依據第一指令的長度,判斷第一指令是否涵蓋超過第一快取線,此方法也包括依據分支指針及上述的判斷步驟,選取儲存于指令緩沖器的第二快取線以格式化第二指令。
本發明具有的一個優點是使多重字節寬度的指令緩沖器在連接預先譯碼BTAC時,可以在多數情況中,達到零分支代價,因為本發明是在將指令緩沖器中的階層提供給指令格式化邏輯后,才進行階層位移(shift),而不是先位移指令緩沖器的已格式化階層,再提供最底層的階層予指令格式化邏輯。而由位移階層的減少,本發明可以將有效的周期時間數量,增加于指令格式化邏輯在格式化目前的指令上。
附圖標記說明100微處理器102指令快取區104、174緩存器106階層置換多任務器108字節智能型排列多任務器(byte-wise alignment mux)112指令緩沖器114指令格式化邏輯116分支目標地址快取區(BTAC)118、128多任務器122控制邏輯124增加器
126階層132、138目標地址134命中訊號(HIT signal)136理論性分支信息(SBI signal)142、144、146、148、166數據總線152擷取地址154、156、168控制訊號158現行指針162次一循序擷取地址164分解目標地址172指令長度176與門178比較器184現行指針緩存器186BWRAP訊號188移位訊號192、193BTAC分支指針194涵蓋訊號(fwrap signal)196進位訊號198和(sum)步驟202至步驟228為本發明一實施例的一實施步驟步驟302至步驟326為本發明另一實施的一實施步驟微處理器100包括指令快取區102,用以快取指令字節,經由數據總線166自內存中接收這些指令字節,而指令快取區102包括儲存指令字節用的快取線矩陣,此快取線矩陣是由擷取地址152來進行索引,即擷取地址152是在矩陣中選擇其中一條快取線,而指令快取區102會經由數據總線142輸出被選取的指令字節的快取線。
在本實施例中,指令快取區102包含一個64KB的4-way集合關系型快取,具有每道(way)32-字節的快取線,在本實施例中,指令快取區102一次會提供已選取的指令字節的一半快取線,例如,在每兩個間隔周期中,會提供16個字節。在本實施例中,指令快取區102是類似于美國專利案號09/849,736,名稱為非實際的分支目標地址快取(SPECULATIVE BRANCH TARGET ADDRESS CACHE)(文件編號CNTR2021)中所描述的指令快取區,其中此申請案與本發明具有共同的申請人(assignee),在此也將其申請標的并入本發明作參考。
微處理器100也包含分支目標地址快取區(branch target addresscache;以下簡稱BTAC)116,此BTAC 116接收指令快取區102的擷取地址152,BTAC 116包括儲存元素的矩陣,用以快取目前已執行的分支指令及其相關分支目標地址的擷取地址,而儲存的元素也包括其它關于分支指令的理論性分支信息,作為快取的目標地址,特別是,所儲存的元素包括多重字節分支指令是否涵蓋橫跨兩個指令快取線的指針。擷取地址152會指向位于BTAC 116中儲存元素的矩陣,以選擇其中的一個儲存元素。
BTAC 116會由擷取地址152,從被選取的儲存元素中,輸出一個目標地址132及理論性分支信息(speculative branch information;以下簡稱SBI)136。在本實施例中,SBI 136包括分支指令長度,位于快取線中的分支指令位置,分支指令為呼叫(call)或返回(return)指令,以及分支指令預期發生與否,這些皆在美國專利案號09/849,736,名稱為非實際的分支目標地址快取(SPECULATIVE BRANCH TARGETADDRESS CACHE)中有所描述,在此將其申請標的也并入本發明的參考。
BTAC 116也輸出一個命中訊號(HIT signal)134,用以指示擷取地址152是否命中BTAC 116,在本實施例中,BTAC 116是類似于上述參考的美國專利案中描述的BTAC,其中,BTAC 116是一個非實際的BTAC,因為微處理器100在指令快取區102提供的指令快取線被譯碼前,會分支連結到BTAC 116所提供的目標地址132,不論目前在擷取地址選取的快取線中的分支指令是否為已知狀態,因此,理論上,微處理器100會分支連結到BTAC 116所提供的目標地址132,即使目前分支指令可能不存在于擷取地址選取以作為命中BTAC 116的快取線中。
BTAC 116也輸出一個BWRAP訊號186,用以確認分支指令是否涵蓋橫跨兩個快取線,其中,BWRAP訊號186的值是BTAC 116在分支指令執行后,隨著分支指令目標地址而快取得到的,但BWRAP訊號186的值在僅顯示上次分支指令是否涵蓋橫跨快取線的情況下,是非實際的值。然而,如在上述參考的美國專利案中所描述的,在本實施例中,在上次所執行的分支指令或快取線的擷取地址152是虛擬別名的狀況中,快取線會被進行修正。
微處理器100也包括控制邏輯122,上述的HIT訊號134、SBI 136以及BWRAP訊號186皆是當作輸入訊號輸入至控制邏輯122,以下會對控制邏輯122的操作進行更詳細的描述。
微處理器100也包括一個多任務器118,此多任務器118在其輸入端至少接收三個地址,且會選取其中一個輸入地址作為輸出至指令快取區102的擷取地址152,以響應從控制邏輯122傳送的控制訊號168。多任務器118會自BTAC 116接收目標地址132,也會接收次一循序擷取地址162,此次一循序擷取地址162,為依循指令快取區102的快取線大小而增加,且會由增加器124所接收的擷取地址152以提供至多任務器118。
多任務器118也接收一個分解目標地址(resolved target address)164,由微處理器100中的執行邏輯所提供,此執行邏輯依據分支指令的完整譯碼來計算分解目標地址164。如果微處理器100在分支連結到BTAC 116提供的目標地址132后,經判斷發覺其所分支連結到的地址是錯誤的,則微處理器100會進行錯誤修正,由清除(flush)管線以及分支連結至分解目標地址164或是快取線的擷取地址,包括接續于分支指令的指令地址,來進行修正。在本實施例中,如果微處理器100推測判斷出在目前的快取線142中沒有分支指令,則微處理器100會由清除管線以及分支連結至包括分支指令本身指令地址的快取線擷取地址,來修正錯誤,此錯誤修正描述于美國專利案號09/849,658,名稱為偵測及修正錯誤的非實際分支目標地址快取分支的裝置、系統及方法(APPARATUS,SYSTEM AND METHOD FOR DETECTING ANDCORRECTING ERRONEOUS SPECULATIVE BRANCH TARGETADDRESS CACHE BRANCHES)(文件編號CNTR2022),此案與本發明具有相同的申請人,在此將其申請標的并入本案作參考。
在本實施例中,多任務器118也接收其它來自于分支預測元素預測的目標地址,例如一個呼叫/返回堆棧以及一個分支目標緩沖器(branch target buffer;簡稱BTB),其中BTB是依據分支指令指針,快取間接分支指令的目標地址。多任務器118會選擇性地使BTAC 116提供的目標地址因呼叫/返回堆棧及BTB提供的目標地址而無效,此在美國專利案號09/849,799,名稱為依據分支指令型態由第二預測器使非實際的分支目標地址快取選擇性無效(SPECULATIVE BRANCHTARGET ADDRESS VACHE WITH SELECTIVE OVERRIDE BYSECONDARY PREDICTOR BASED ON BRANCH INTRUCTIONTYPE)(文件編號CNTR2052),此案與本發明具有相同的申請人,在此將申請標的并入本案作參考。
微處理器100也包括一指令緩沖器112,此指令緩沖器112包括數個階層、或緩存器,會集體或個別地稱為階層126,以儲存自指令快取區102經數據總線142傳送的指令字節。在本實施例中,指令緩沖器112會自指令快取區102中一次接收16-字節的快取線,在本實施例中,指令緩沖器112的階層126是16-字節寬,在本實施例中,指令緩沖器112包含一個由8階層所組成的128-字節緩沖空間,每個階層用以儲存16個指令字節。
圖1僅顯示指令緩沖器112的較低4層階層,最底層階層記為階層A 126A,下一個階層是在階層A 126A的上的階層B126B,再下一個階層是在階層B 126B的上的階層C 126C,再下下一個階層是在階層C 126C的上的階層D 126D。
指令緩沖器112是由一個具有頂層及底層的先進先出(first-in-first-out)移位緩存器所組成,會自指令快取區102接收指令字節儲存于頂層,然后將階層126移出底層。指令緩沖器112可以一次自底層移出一個或兩個階層126,也就是說,指令緩沖器112可以在一個時脈周期中移出階層A 126A,或是在一個時脈周期中將階層A126A及階層B 126B一起移出。控制邏輯122會提供一個移位訊號,即是用以判斷移出指令緩沖器112的階層126數目,以下將會詳述。當指令快取區102提供一個快取限制指令緩沖器112,則快取線會被置入最接近指令緩沖器112底層的未使用階層126。
微處理器100也包括數個緩存器174,每一個緩存器174儲存自BTAC 116傳送的目標地址132,每一個緩存器174連接于相對應于指令緩沖器112中的階層126。圖1中即顯示連結于階層126A~D的4個緩存器174A~D,儲存于緩存器174的目標地址是被BTAC 116用來預測儲存在相連的階層126中的分支指令。
微處理器100也包括數個緩存器104,每一個緩存器104用以儲存自控制邏輯122傳送的BTAC分支指針192,每一個緩存器104是對應連接于數個指令緩沖器112的階層126以及目標地址緩存器174,圖1即繪示4個緩存器104A~D對應連接階層126A~D及目標地址緩存器174A~D,其中,儲存于緩存器104的BTAC分支指針192,用以確認微處理器100是否會如推測般,分支連結到自BTAC 116傳送且儲存于相對應緩存器174的目標地址,進而推測目前相對應階層126中的分支指令。如果BTAC 116在確認擁有HIT訊號且預期分支指令發生的情況下,微處理器100會分支連結至BTAC 116所提供的目標地址132,在本實施例中,BTAC 116會在SBI 136中提供一個預期訊號,無論分支指令是否會發生,其中一個存在于緩存器104的BTAC分支指針會被提供以作為輸出至控制邏輯122的輸出訊號193。
在本實施例中,控制訊號122會輸出一個16-位值的BTAC分支指針,以儲存于緩存器104且會被作為輸出訊號193提供至控制邏輯122,這16位(bits)相對應于階層126的16字節(bytes),其中具有真值(true value)的位會指出在階層126中相對應的字節,作為分支指令的第一字節,用以使微處理器100可分支連結至BTAC 116所提供的目標地址132。
微處理器100也包括一個具有3-輸入端的階層置換多任務器106,此階層置換多任務器106是經由數據總線144A~C,接收自指令緩沖器112分別傳送的關于指令字節的三個階層126A~C。階層置換多任務器106會依據控制邏輯122產生的控制訊號154,自三個階層126A~C選擇其中一個階層,關于階層置換多任務器106的操作將會詳述于下。
在本實施例中,每一個數據總線144A~C都是26-字節寬,數據總線144A~C會分別提供階層126A~C 16個字節,另外,會提供上一個階層前10個字節做映像(shadow)。以數據總線144A為例,數據總線144A會提供階層A 126A 16個字節
,此外,階層A 126A的16個字節
中的前10個字節
會提供給階層B 126B。
在x86處理器中的指令長度是可變動的,且可能會變為11個字節長,因此,一個11-字節的指令在其第一字節的是階層A 126A最后一個字節位置的情況下,指令的最后10個字節會是在階層B 126B的前10個字節位置。進一步地說,由所提供的16-字節及上一個階層的10-字節映像,階層置換多任務器106會提供足夠的指令字節,以確保目前至少有一個完整的x86指令會被數據總線144A~C其中的一所選取,不管在26-字節的數據總線144中的下一個指令是從何處開始。
微處理器100也包括一個字節智能型排列多任務器(byte-wisealignment mux)108,此字節智能型排列多任務器108所接收的指令字節,是階層置換多任務器106經由數據總線146自其中的一個總線144A~C選取得到。在本實施例中,字節智能型排列多任務器108包括一組多任務器,用以排列自階層置換多任務器106接收的指令字節,使得下一個字節被格式化,例如,下一個被格式化指令的第一個字節,會被輸出在11-字節的數據總線148的第一字節線上。字節智能型排列多任務器108依據控制邏輯122產生的控制訊號156來排列字節,控制邏輯122則是依據現行指針(current pointer)訊號158來產生控制訊號156,其中現行指針訊號158會指向下一個被格式化指令的第一字節。
舉例來說,假設最后一個被格式化指令的最后一個字節是在數據總線146的字節3中,則下一個被格式化指令的第一字節會是在數據總線146的字節4中。字節智能型排列多任務器108會從數據總線146排列字節,使得數據總線146的字節4會被提供于數據總線148的字節0上,數據總線146的字節5會被提供于數據總線148的字節1上,直至四次上升排列,使得字節14被提供于數據總線148的字節10為止。
微處理器100也包括指令格式化邏輯114,是接收指令緩沖器112經由數據總線148傳送的指令字節,此指令格式化邏輯114會檢查,或審視,指令緩沖器112的階層126以及相關的映像內容,這些內容是由階層置換多任務器106所選取,以及由字節智能型排列多任務器108進行排列。指令格式化邏輯114會將接收到的指令字節進行格式化,或分析,為指令,特別是,指令格式化邏輯114會決定指令的字節大小。指令格式化邏輯114會提供已格式化指令給剩余的微處理器100管線,用以更進一步的譯碼及執行,而指令緩沖器112為了減少指令格式化邏輯114饑餓的可能性,會暫存指令字節。
指令格式化邏輯114會經由控制訊號172,提供目前已格式化的指令長度。在本實施例中,指令長度172包括4個位,會由控制邏輯172(改為122)產生的控制訊號188,來控制指令緩沖器112的移位,即,控制訊號188會為指令緩沖器112供應如移位計數的服務,而控制邏輯122也會利用移位計數188來控制指令字節至指令緩沖器112的加載。
在本實施例中,指令格式化邏輯114可以在每個處理器100的時脈周期中格式化多重指令,而指令長度訊號172會顯示多重格式化指令的指令長度和(sum)。在本實施例中,指令長度訊號172上所顯示的最大和(sum)是15字節。
也就是,階層置換多任務器106會提供一個裝置,讓指令格式化邏輯114可以得到最適的指令字節階層126,用以格式化而不需指令緩沖器112位移已格式化的階層126。然后,自指令緩沖器112位移一個階層126的時間,就會從提供階層126至指令格式化邏輯114所減少的時間而來,而這對微處理器在時脈的時間上是相當有助益的。
微處理器100也包括緩存器184,用以儲存及輸出現行指針158,此現行指針158用以確認在指令緩沖器112階層126中的位置,是目前被指令格式化邏輯114格式化的指令,也即現行指針158會指向被指令格式化邏輯114格式化指令的第一字節。另,現行指針158也會被提供給控制邏輯122,而控制邏輯122會利用現行指針158產生控制訊號154、156及188。在本實施例中,現行指針158包括4個位,用以確認任一16字節是在其中的一指令緩沖器112的階層126中。
微處理器100也包括加法器182,用以接收指令長度172及現行指針158,以及產生它們的和(sum)198。如果下一個指令是循序的,例如目前被格式化指令不是一個發生的分支指令,則指令長度172及現行指針158的和198即是次一指針198,或是指向下一個被格式化指令的指針。
次一指針198是提供給多任務器128,而此多任務器128也接收儲存于其中一個緩存器174的目標地址的較低4個位,且緩存器174是關聯于階層置換多任務器106所選取的階層126。如果BTAC分支指針193顯示目前格式化指令并非一發生分支指令,則控制邏輯122會控制多任務器128去選取次一指針198,但如果BTAC分支指針193顯示目前格式化指令是一發生分支指令,則控制邏輯122會控制多任務器128選擇自緩存器174傳送的目標地址138,即分支指令會使微處理器100分支連結到BTAC116所提供的目標地址132。其中,多任務器128的輸出會儲存于現行指針緩存器184中。
加法器182也會產生進位訊號(carry signal)196,而進位訊號196在現行指針158及指令長度172的和為真時會產生一個進位,特別是,進位訊號196會顯示目前格式化指令的一個字節是否有占據現階層126的最后一個字節。舉例來說,假設目前格式化指令是開始于選取階層126的字節13,例現行指針158是0xD,然后假設指令格式化邏輯114決定目前格式化指令有一個3字節的指令長度172,例此指令占據階層126的字節13、14及15是階層126的最后3個字節,而在本例中,現行指針158及指令長度172的和為0x10,因此,加法器182產生的次一指針198即會是0x0,且進位196會是1,或真值。
相比之下,假設目前格式化指令是開始于字節12,即指令會占據階層126字節位置12、13及14,但不是字節位置15。在這個情況中,和是0xF,因此,次一指針198是0xF,而進位196的值是0,或偽值。進位訊號196是提供至控制邏輯122,而控制邏輯122會利用進位訊號196產生控制訊號154、156及188。
微處理器100也包括比較器(comparator)178,用以接收次一指針198及將次一指針198與0進行比較,如果次一指針198不等于0,則比較器178會輸出真值(true value),但如果次一指針198等于0,則比較器178會輸出偽值(false value)。
比較器178輸出的值會提供給與門(AND gate)176,且與門176也會接收進位訊號196。另,與門176輸出的訊號是一個涵蓋訊號(fwrapsignal)194,用以顯示目前格式化指令所涵蓋的階層126是否如指令格式化邏輯114所決定的。舉例來說,假設目前被格式化指令是開始于所選取階層126的字節13,例現行指針158是0xD,然后假設指令格式化邏輯114決定目前格式化指令有一個3字節的指令長度172,假設此指令占據階層126的字節13、14及15是階層126的最后3個字節。在此例中,現行指針158及指令長度172的和為0x10,因此,加法器182產生的次一指針198即會是0x0,進位196是1,或真值。而由于次一指針198等于0(非不等于0),則比較器178的輸出值為偽值(false value),接下來,由于與門176的其中一個輸入訊號(即比較器178的輸出訊號)為偽值,因此涵蓋訊號194會是偽值。
相比之下,假設目前格式化指令是開始于字節14,即假設指令的前兩個字節占據階層中的后兩個字節位置,而指令的最后一個字節會占據下一個階層上的第一字節位置。在這種情況中,和是0x11,因此,次一指針198是0x1,而進位196的值為真,由于次一指針198不等于0,即非并不等于0,因此比較器178的輸出值為真值(true value),接下來,由于比較器178的輸出訊號為真且進位訊號196也為真,因此涵蓋訊號194也為真。
涵蓋訊號(fwrap signal)194會提供至控制邏輯122,而控制邏輯122會利用涵蓋訊號194產生控制訊號154、156及188。由于涵蓋訊號194是依據指令字節在階層126中譯碼而來,因此涵蓋訊號194會提供一個真實指示于格式化指令是否有涵蓋橫跨于兩個指令緩沖器112階層126,相比之下,BWRAP訊號186是在指令譯碼前產生出來,因此BWRAP訊號186會提供一個非實際指示于分支指令是否有涵蓋橫跨兩個快取線。
請參考圖2,是本發明依據圖1關于指令緩沖器112動作的流程圖,此流程開始于步驟202。
在步驟202中,圖1中的次一循序擷取地址162是由圖1的多任務器118選取,作為圖1的擷取地址152,以提供給圖1的指令快取區102及圖1的BTAC 116。接著,流程程序自步驟202至步驟204。
在步驟204中,指令快取區102會輸出快取線于圖1的數據總線142,此快取線是由步驟202提供的擷取地址所選取。接著,流程程序自步驟204至步驟206。
在步驟206中,經由步驟204的指令快取區所輸出的已選取快取線,會被儲存于指令緩沖器112,且此快取線是儲存在接近指令緩沖器112底層的第一未使用階層126。此已選取快取線包括一個分支指令,為BTAC 116快取的目標地址。接著,流程程序自步驟206至步驟208。
在判斷步驟208中,控制邏輯122會判斷BTAC 116的分支是否發生,即,控制邏輯122會檢測BTAC HIT訊號134,以判斷擷取地址152對在步驟202的BTAC 116是否發生命中情形,以及與BTAC 116輸出的目標地址132有關聯的分支指令,是否有預期性的發生。如果沒有,則流程會返回步驟202以擷取下一個循序快取線,否則流程會進行至步驟212。
在步驟212中,目標地址132會由BTAC 116輸出以儲存在其中一個緩存器174,此緩存器174是與步驟206分支指令所儲存的階層126有關聯。另外,控制邏輯122會輸出一個具有真值的BTAC分支指針192,此BTAC分支指針192是儲存在其中一個緩存器104,而此緩存器104是與步驟206分支指令儲存的階層126有關聯。在本實施例中,BTAC分支指針192中的位與階層126分支指令的第一字節有關聯,此位值為真,表示微處理器100會分支連結到將在步驟224中發生且由BTAC 116所提供的目標地址132。接著,流程從步驟212至判斷步驟214繼續進行。
在判斷步驟214中,控制邏輯122會判斷BTAC 116是否預期分支指令會涵蓋橫跨快取線,也就是,圖1的控制邏輯122會判斷圖1的BWRAP訊號是否為真,如果是,則流程會進入步驟216,否則流程會進入步驟224。
在步驟216中,次一循序擷取地址162會提供至指令快取區102。如果流程進到步驟216,而目前只有分支指令的第一部份儲存在步驟206的指令緩沖器112的快取線中,則此情形會由步驟214中的BWRAP訊號186來表示,也就是說,這個分支指令字節的第二部份還沒有被指令快取區102輸出以儲存至指令緩沖器112內。因此,有必要在分支指令的第二部分被指令快取區102輸出以儲存在指令緩沖器112后,才可將BTAC 116所提供的目標地址132應用于指令緩沖區102中。流程自步驟216至步驟218繼續進行。
在步驟218中,指令快取區102輸出由步驟216提供的次一循序擷取地址162所選取的快取線,所輸出的快取線包括非實際BWRAP訊號186所指示的分支指令第二部份。流程自步驟218至步驟222繼續進行。
在步驟222中,包含分支指令第二部分的快取線,是儲存于指令緩沖器112中,其中,包含分支指令第二部分的快取線儲存于指令緩沖器112的階層126中,而緊連的上一層階層126中,則是包含分支指令的第一部分。流程自步驟222至步驟224繼續進行。
在步驟224中,多任務器118選取BTAC 116提供的目標地址132。作為下一個指令快取區102的擷取地址152,在此,整個分支指令已儲存于指令緩沖器112中。如果,流程是從判斷步驟214至步驟224,則分支指令是包含在指令緩沖器112中的一個階層126,如果,流程是從步驟222至步驟224,則分支指令是包含在指令緩沖器112中兩個緊鄰的階層126。流程自步驟224至步驟226繼續進行。
在步驟226中,指令快取區102輸出的快取線,是由目標地址132因應步驟224的指令快取區102而選取,所選取的快取線,包括分支指令的目標指令,或指令集。流程自步驟226至步驟228繼續進行。
在步驟228中,包含目標指令的快取線是儲存于指令緩沖器112中,其中,包含目標指令的快取線會儲存于指令緩沖器112的階層126中,而緊接在上一層的階層126是包含整個分支指令或是分支指令的第二部分,則是依據分支指令是否涵蓋橫跨多重快取線而定。流程自步驟228返回至步驟202進行。
請參考圖3,是本發明依據圖1的指令緩沖器112的階層126的選擇的一流程圖。流程開始于步驟302。
在步驟302中,圖1的指令格式化邏輯114,格式化圖1指令緩沖器112的階層A 126A中的指令,而指令格式化邏輯114是對圖1的現行指針158指向的指令進行格式化,且會產生指令在圖1的指令長度172。流程自步驟302至步驟304進行。
在步驟304中,圖1的加法器182會將指令長度172加向現行指針158,以產生圖1的次一指針198及圖1的進位訊號196,且與門176會產生圖1的涵蓋訊號(fwrap signal)194。另外,儲存于緩存器104A的BTAC分支指針會被輸出在圖1的BTAC分支指針訊號193上。流程自步驟304至步驟306進行。
在判斷步驟306中,控制邏輯122會判斷步驟302的格式化指令,是否為圖2步驟224微處理器100分支連結的分支指令,即,控制邏輯122會判斷步驟304的BTAC分支指針193是否為真。在本實施例中,控制邏輯122會判斷在BTAC分支指針193中,與現行指針158相對應的位是否為真,如果不是,則流程會進到判斷步驟308,否則流程會進行到判斷步驟316。
在判斷步驟308中,控制邏輯122會判斷進位訊號196是否為真,如果不是,則流程會進到步驟312,否則流程會進行到步驟314。
在步驟312中,控制邏輯122會產生控制訊號154,以控制圖1的階層置換多任務器106選取階層A 126A,使階層A 126A提供于數據總線146中,進一步讓指令格式化邏輯114進行格式化。另外,控制邏輯122會在移位訊號188上產生0的值。流程自步驟312至步驟324進行。
在步驟314中,控制邏輯122產生控制訊號154以控制圖1的階層置換多任務器106選取階層B 126B,使階層B 126B提供于數據總線146中,以進一步讓指令格式化邏輯114進行格式化。另外,控制邏輯122會在移位訊號188上產生1的值。流程自步驟314至步驟324進行。
在判斷步驟316中,控制邏輯122會判斷圖1的涵蓋訊號194是否為真,如果不為真,則流程進入步驟318,否則,流程進入步驟322。
在步驟318中,控制邏輯122產生控制訊號154以控制圖1的階層置換多任務器106選取階層B 126B,使階層B 126B提供于數據總線146中,以進一步讓指令格式化邏輯114進行格式化。另外,控制邏輯122會在移位訊號188上產生1的值。接著,流程自步驟318至步驟324進行。
在步驟322中,控制邏輯122會產生控制訊號154,以控制圖1的階層置換多任務器106選取階層C 126C,以提供于數據總線146上,作為指令格式化邏輯114格式化的用。此外,控制邏輯122還會產生值為2的移位訊號188。接著,流程自步驟322至步驟324進行。
在步驟324中,對現行指針158進行更新,即,圖1的多任務器128會選取圖1的次一指針198或是目標地址138,且會儲存選取的值于緩存器184中。如果流程是由步驟312或314而來,則多任務器128會選取次一指針198,否則,多任務器128會選取目標地址138。另外,指令格式化邏輯114會格式化已更新現行指針158指向的指令,其中,已更新現行指針158所在的階層,由步驟312、314、318或322的階層置換多任務器106選取而得。流程自步驟324至步驟326進行。
在步驟326中,指令緩沖器112會在312、314、318或322的步驟中,位移移位訊號188確認的階層數目,使得階層A又可再次位于指令緩沖器112的底層,且指令緩沖器112會在階層置換多任務器106選取適當的階層126以提供指令格式化邏輯114后,才位移確認的階層數目。
請合并參考圖4A~F,一同作為圖4來參考,是本發明的圖1依據圖3的指令緩沖器112階層126選取的6個數據表例子。在圖4的每個數據表中包括4列,相對應于指令緩沖器112的階層A~D 126A~D,且以這些階層名稱為卷標,每一個數據表包括16行,相對應每個階層126的16個位位置,從左而右分別標示0至15。在數據表中的每個單位(cell)不是空白的,就是被移植關于指令字節的內容。有三個不同的指令常被用來說明3-字節ADD(x86加法指令)、4-字節SUB(x86減法指令)及2-字節JCC(x86條件式跳躍指令、或是分支指令),每個指令的字節會以括號圈住數字來標示相對應的指令字節。例如,“SUB[2]”表示為第3字節,是SUB指令的字節2。
這6個不同的數據表即是說明6個關于目前格式化指令的不同組合內容,包括分支/非分支、涵蓋訊號194真/偽值,以及進位訊號196真/偽值。在每個情形中,現行指針158、指令長度172、BTAC分支指針193及目標地址138較低4個位的初始條件值皆為確定的值。此外,次一指針198、進位訊號196及涵蓋訊號194的值,在每個狀況中,由圖1的控制裝置從初始條件值產生而來,而由階層置換多任務器106選取的指令緩沖器112階層,以及由控制邏輯122產生的移位訊號值188,皆會在每個情況中,顯示于響應初始條件值及所產生的值中。雖然在圖4的實施例中,字節因此大印地安格式(big-endian)存放,但在其它的實施例中,微處理器100可為小印地安(little-endian)的微處理器100,在圖4中會顯示字節的相反編號。
圖4A即是說明狀況1,目前格式化指令是一個非分支指令(non-branch),并沒有涵蓋橫跨兩個指令緩沖器112階層,且也沒有占據階層的最后一個字節,3-字節的ADD指令是位于階層A 126A的字節8~10,而4-字節的SUB指令是位于階層A 126A的字節11~14。現行指針158的值為8,指向ADD指令的第一字節,且由指令格式化邏輯114在圖3的步驟302中所產生的指令長度172為3,BTAC分支指針193在圖3的步驟304所輸出的值為偽(false),另外,由于目前格式化指令并非分支指令,因此在步驟324輸出的目標地址138是非可應用的值。
在圖3的步驟304中,由加法器182產生的次一指針198的值為11,加法器182產生的進位訊號196的值為偽,且由與門176產生的涵蓋訊號194也為偽值。因為目前格式化指令是一個非分支指令,并不會占據其階層的最后字節,因此下一個被指令格式化邏輯114格式化的指令,會開始于與目前格式化指令相同的階層。接著,控制邏輯122會控制階層置換多任務器106選擇階層A 126A,且位移0個階層,這個動作是對應圖3的步驟312。
圖4B即是說明狀況2,目前格式化指令是一個非分支指令(non-branch),并沒有涵蓋橫跨兩個指令緩沖器112階層,但卻占據階層的最后一個字節。其中,3-字節的ADD指令是位于階層A 126A的字節13~15,而4-字節的SUB指令是位于階層B 126B的字節0~3。現行指針158的值為13,指向ADD指令的第一字節,且由指令格式化邏輯114在圖3的步驟302中所產生的指令長度172為3,而BTAC分支指針193在步驟304所輸出的值為偽(false),另外,由于目前格式化指令并非分支指令,因此在步驟324輸出的目標地址138是非可應用的值。
在圖3的步驟304中,由加法器182產生的次一指針198的值為0,加法器182產生的進位訊號196的值為真,且由與門176產生的涵蓋訊號194是為偽值。因為目前格式化指令是一個會占據其階層的最后字節的非分支指令,因此下一個被指令格式化邏輯114格式化的指令會開始于目前被格式化指令的上一層階層。接著,控制邏輯122會控制階層置換多任務器106選擇階層B 126B,且位移1個階層,這個動作是對應圖3的步驟314。
圖4C即是說明狀況3,目前格式化指令是一個非分支指令(non-branch),此非分支指令涵蓋橫跨兩個指令緩沖器112階層,且占據階層的最后一個字節。其中,3-字節的ADD指令的前兩個字節是位于階層A 126A的字節14~15,而3-字節的ADD指令的第三字節是位于階層B 126B的字節0,另,4-字節的SUB指令是位于階層B 126B的字節1~4。現行指針158的值為14,指向ADD指令的第一字節,且由指令格式化邏輯114在圖3的步驟302中所產生的指令長度172為3,而BTAC分支指針193在步驟304所輸出的值為偽(false),另外,由于目前格式化指令并非分支指令,因此在步驟324輸出的目標地址138是非可應用的值。
在圖3的步驟304中,由加法器182產生的次一指針198的值為1,加法器182產生的進位訊號196的值為真,與門176產生的涵蓋訊號194也為真值。因為目前格式化指令是一個會占據其階層的最后字節的非分支指令,因此下一個被指令格式化邏輯114格式化的指令會開始于目前被格式化的指令的上一層階層。接著,控制邏輯122會控制階層置換多任務器106選擇階層B 126B,且位移1個階層,這個動作是對應圖3的步驟314。
圖4D是說明狀況4,目前格式化指令是一個分支(branch)指令,并沒有涵蓋橫跨兩個指令緩沖器112階層,且也沒有占據階層的最后一個字節,2-字節的JCC指令是位于階層A 126A的字節7~8,而4-字節的SUB指令是分支指令的目標指令,位于階層B 126B的字節11~14。現行指針158的值為7,指向JCC指令的第一字節,且由指令格式化邏輯114在圖3的步驟302中所產生的指令長度172為2,另外,由于階層A 126A的字節7包含JCC指令的第一字節,且此分支指令是目前BTAC 116分支的指令,因此,BTAC分支指針193的位7在圖3的步驟304所輸出的值為真(true),而在步驟324輸出的目標地址138是11,用以指向目標指令。
在圖3的步驟304中,由加法器182產生的次一指針198的值為9,然而,由于BTAC分支指針193的值為真,因此多任務器128會選擇值為11的目標地址138。而加法器182產生的進位訊號196的值為偽,且由與門176產生的涵蓋訊號194也為偽值。另外,雖然目前格式化指令是一個沒有涵蓋橫跨兩個指令緩沖器112階層的分支指令,但下一個被指令格式化邏輯114格式化的指令,即目標指令,卻會開始于目前被格式化指令的上一層階層。接著,控制邏輯122會控制階層置換多任務器106選擇階層B 126B,且位移1個階層,這個動作是對應圖3的步驟318。
圖4E是說明狀況5,即目前格式化指令是一個分支指令,并沒有涵蓋橫跨兩個指令緩沖器112階層,但卻占據階層的最后一個字節。其中,2-字節的JCC指令是位于階層A 126A的字節14~15,而4-字節的SUB指令是分支指令的目標指令,位于階層B 126B的字節11~14。現行指針158的值為14,指向JCC指令的第一字節,且由指令格式化邏輯114在步驟302中所產生的指令長度172為2,另外,由于階層A126A的字節14包含JCC指令的第一字節,且此分支指令是目前BTAC116分支的指令,因此,BTAC分支指針193的位14在步驟304所輸出的值為真(true),而在步驟324輸出的目標地址138是11,用以指向目標指令。
在圖3的步驟304中,由加法器182產生的次一指針198的值為0,然而,由于BTAC分支指針193的值為真,因此多任務器128會選擇值為11的目標地址138。而加法器182產生的進位訊號196的值為真,但由與門176產生的涵蓋訊號194是為偽值。另外,雖然目前格式化指令是一個沒有涵蓋橫跨兩個指令緩沖器112階層的分支指令,但下一個被指令格式化邏輯114格式化的指令,即目標指令,卻會開始于目前被格式化指令的上一層階層。接著,控制邏輯122會控制階層置換多任務器106選擇階層B 126B,且位移1個階層,這個動作是對應圖3的步驟318。
圖4F即是說明狀況6,目前格式化指令是一個分支指令,且涵蓋橫跨兩個指令緩沖器112階層。其中,2-字節的JCC指令的前一個字節是位于階層A 126A的字節15,而2-字節的JCC指令的第二字節是位于階層B 126B的字節0,另,4-字節的SUB指令是此分支指令的目標指令,位于階層C 126C的字節11~14。現行指針158的值為15,指向JCC指令的第一字節,且由指令格式化邏輯114在圖3的步驟302中所產生的指令長度172為2,另外,由于階層A 126A的字節15包含JCC指令的第一字節,且此分支指令是目前BTAC 116分支的指令,因此,BTAC分支指針193的位15在步驟304所輸出的值為真(true),而在步驟324輸出的目標地址138是11,用以指向目標指令。
在圖3的步驟304中,由加法器182產生的次一指針198的值為1,然而,由于BTAC分支指針193的值為真,因此多任務器128會選擇值為11的目標地址138。而加法器182產生的進位訊號196的值為真,且由與門176產生的涵蓋訊號194也為真。因為目前格式化指令是一個涵蓋橫跨兩個指令緩沖器112階層的分支指令,因此下一個被指令格式化邏輯114格式化的指令,即目標指令,會開始于目前格式化指令的上兩層階層。接著,控制邏輯122會控制階層置換多任務器106選擇階層C 126C,且位移2個階層,這個動作是對應圖3的步驟322。
雖然本發明已以實施例說明如上,然其并非用以限定本發明,舉例來說,指令緩沖器的寬度及儲存空間是可變換的,也就是說,本發明可以使用較大寬度及儲存空間的指令緩沖器進行操作。
任何熟悉此技術者,在不脫離本發明的精神和范圍內,當可作各種的更動與潤飾,因此本發明的保護范圍當以權利要求書為準。
權利要求
1.一種微處理器,其特征為包括一指令緩沖器,包括復數個階層,用以暫存自一指令快取區接收的指令字節;一分支指針,關聯每一該些階層,用以儲存一指針,該指針用以檢測該微處理器是否有分支到暫存于關聯的該階層中一分支指令的一目標地址;以及一多任務器,耦接該指令緩沖器,依據與該些階層其中的一相關聯的該分支指針,選擇該些階層其中之一。
2.如權利要求1所述的微處理器,其特征為其中該多任務器提供所選取的該階層至一指令格式化邏輯。
3.如權利要求2所述的微處理器,其特征為其中該指令緩沖器包括該些階層的一底層階層。
4.如權利要求3所述的微處理器,其特征為其中該指令格式化邏輯是判斷在該底層階層中一指令的長度。
5.如權利要求4所述的微處理器,其特征為其中該多任務器依據與該底層階層相關的該分支指針,選取階層其中之一。
6.如權利要求5所述的微處理器,其特征為還包括一涵蓋指針,耦接該多任務器,依據該指令長度,顯示該指令是否有涵蓋超過該底層階層。
7.如權利要求6所述的微處理器,其特征為其中如果該分支指針指出該微處理器發生分支,則該多任務器會依據該涵蓋指針是否指示該分支指令涵蓋超過該底層階層,以選取階層其中之一。
8.如權利要求7所述的微處理器,其特征為其中如果該分支指針指出該微處理器有發生分支,且該涵蓋指針也指出該分支指令是涵蓋超過該底層階層,則該多任務器會選取該底層階層上兩層階層的其中之一。
9.如權利要求8所述的微處理器,其特征為其中該指令緩沖器會位移兩個階層。
10.如權利要求8所述的微處理器,其特征為其中如果該分支指針指出該微處理器有發生分支,且該涵蓋指針指出該分支指令并未涵蓋超過該底層階層,則該多任務器會選取該底層階層上層階層其中之一。
11.如權利要求10所述的微處理器,其特征為其中指令緩沖器會位移其中一個該階層。
12.如權利要求10所述的微處理器,其特征為還包括一進位指針,耦接該多任務器,依據該指令長度,顯示該指令的一字節是否占據該底層階層的一最后字節。
13.如權利要求12所述的微處理器,其特征為其中如果該分支指針指出該微處理器并無發生分支,則該多任務器會依據該進位指針是否指出該指令占據該底層階層的該最后字節,來選取階層其中之一。
14.如權利要求13所述的微處理器,其特征為其中如果該分支指針指出該微處理器并無發生分支,且該進位指針指出該指令占據該底層階層的該最后字節,則該多任務器會選取該底層階層上層的其中的一階層。
15.如權利要求14所述的微處理器,其特征為其中該指令緩沖器會位移該些階層的其中之一。
16.如權利要求14所述的微處理器,其特征為其中如果該分支指針指出該微處理器并無發生分支,且該進位指針也指出該指令并未占據該底層階層的該最后字節,則該多任務器會選取該底層階層。
17.如權利要求16所述的微處理器,其特征為其中該指令緩沖器不位移任何階層。
18.如權利要求1所述的微處理器,其特征為還包括一分支目標地址快取區,耦接以接收該指令快取區的一擷取地址,用以提供該分支指令的該目標地址至該指令快取區,以作為一次一擷取地址。
19.如權利要求18所述的微處理器,其特征為其中該分支目標地址快取區會提供該指令快取擷取地址是否命中于該分支目標地址快取區的一指令。
20.如權利要求19所述的微處理器,其特征為還包括一控制邏輯,耦接該多任務器,依據該指令快取擷取地址是否命中該分支目標地址快取區的該指示,以殖入該分支指針。
21.一種預先譯碼階層,適用于一微處理器,其特征為該預先譯碼階層包括一指令緩沖器,包括至少階層A、B及C,用以暫存指令字節;一多任務器,耦接該指令緩沖器,用以選取該些階層A、B及C的其中之一,以提供至一指令格式化邏輯;一分支指針,耦接該多任務器,用以依據呈現于該階層A的一分支指令,指示該微處理器是否發生分支;以及一涵蓋指針,耦接該多任務器,用以指示被該指令格式化邏輯格式化的一指令,是否涵蓋橫跨該些階層A及B;其中該多任務器會依據該分支指針及該涵蓋指針,選取該些階層A、B及C其中之一,以提供至該指令格式化邏輯。
22.如權利要求21所述的預先譯碼階層,其特征為還包括一加法器,耦接該多任務器,該加法器包括一第一輸入端,用以接收一指針,該指針是指向該階層A中的該指令的一位置;一第二輸入端,是自該指令格式化邏輯接收該指令的一長度;一第一輸出端,用以指示該第一及該第二接收該指針及該長度的一和;以及一第二輸出端,用以指出該和的一進位。
23.如權利要求22所述的預先譯碼階層,其特征為其中該涵蓋指針只在該進位為真值及該和不等于0的情況下,顯示出真值。
24.如權利要求23所述的預先譯碼階層,其特征為其中該多任務器在該分支指針指示為真及該涵蓋指針指示為真的情況下,會選取該階層C。
25.如權利要求24所述的預先譯碼階層,其特征為其中該指令緩沖器會在該多任務器選取階層C后,位移該階層A及B。
26.如權利要求23所述的預先譯碼階層,其特征為其中該多任務器會在該分支指針指示為真及該涵蓋指針指示為偽的情況下,選取該階層B。
27.如權利要求26所述的預先譯碼階層,其特征為其中該指令緩沖器在該多任務器選取該階層B后,位移該階層A。
28.如權利要求23所述的預先譯碼階層,其特征為其中該多任務器在該分支指針指示為偽及該第二輸出端指示為真的情況下,選取該階層B。
29.如權利要求28所述的預先譯碼階層,其特征為其中該指令緩沖器在該多任務器選取該階層B后,即位移該階層A。
30.如權利要求23所述的預先譯碼階層,其特征為其中該多任務器在該分支指針指示為偽及該第二輸出端指示為偽的情況下,選取該階層A。
31.如權利要求30所述的預先譯碼階層,其特征為其中該指令緩沖器在該多任務器選取該階層A后,不會位移該些階層A、B及C的任一階層。
32.如權利要求21所述的預先譯碼階層,其特征為其中該多任務器也將被選取的該些階層A、B及C其中的一提供至該指令格式化邏輯,而被選取的其中的一該些階層A、B及C會具有上層該些階層A、B及C其中之一的一映像部分。
33.如權利要求32所述的預先譯碼階層,其特征為其中該指令包括一可變長度指令。
34.如權利要求33所述的預先譯碼階層,其特征為其中該可變長度指令包括一x86指令。
35.如權利要求34所述的預先譯碼階層,其特征為其中該映像部分包括至少10指令字節。
36.一種分支控制裝置,適用于一微處理器,其特征為包括一指令緩沖器,包括一第一、一第二及一第三階層,用以暫存自一指令快取區接收的一第一、一第二及一第三快取線,該第一及該第二快取線分別包括部分的一分支指令,該第三快取線包括該分支指令的一目標指令;一分支目標地址快取區(BTAC),耦接該指令緩沖器,用以輸出一指示,指示已由該分支目標地址快取區提供的該分支指令的一目標地址,從該指令快取區中選取該第三快取線;以及一多任務器,耦接于該指令緩沖器及一指令格式化邏輯之間,是自該第一、該第二及該第三階層選取其中之一,以提供至該指令格式化邏輯;其中該多任務器選取該第一階層后選取該第三階層,依據該分支目標地址快取區輸出的該指示及該指令格式化邏輯所判斷該分支指令的一長度而來。
37.如權利要求36所述的分支控制裝置,其特征為還包括一指針至該第一階層,用以確認該分支指令的一起始地址。
38.如權利要求37所述的分支控制裝置,其特征為還包括一加法器,用以產生該分支指令的該指針及該長度之一和;其中該和指出包含部分該分支指令的該第一及該第二快取線。
39.如權利要求38所述的分支控制裝置,其特征為其中該多任務器所選取的該第三快取線,是依據該分支指令的該指針及該長度的該和,以及該分支目標地址快取區輸出的該指示。
40.如權利要求38所述的分支控制裝置,其特征為還包括一第二多任務器,耦接該指針,用以選取該和及該目標地址,其中之一,以作為一次一指針。
41.一種暫存指令字節以提供至指令格式化邏輯的方法,適用于一微處理器,其特征為該暫存指令字節以提供至指令格式化邏輯的方法包括一儲存指示步驟,其中儲存的該指示,是關于該微處理器是否分支連結至相對應的一第一快取線,其中該第一快取線是儲存于一指令緩沖器中;一產生第一指令長度步驟,產生一第一指令的一長度,其中該第一指令位于儲存該指令緩沖器的該第一快取線中;一判斷步驟,是依據該第一指令的該長度,判斷該第一指令是否涵蓋超過該第一快取線;以及一選取步驟,是依據該指示及該判斷步驟,選取儲存于該指令緩沖器的一第二快取線以格式化一第二指令。
42.如權利要求41所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為其中如果該指示指出該微處理器有發生分支且該第一指令是涵蓋超過該第一快取線,則該第二快取線是位于該第一快取線上的兩個該快取線。
43.如權利要求42所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為還包括在該選取步驟后,自該指令緩沖器中位移該第一快取線及該第一快取線上的一該快取線。
44.如權利要求41所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為其中如果該指示指出該微處理器有發生分支且該第一指令并未涵蓋超過該第一快取線,則該第二快取線是位于該第一快取線上的一個該快取線。
45.如權利要求44所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為還包括在該選取步驟后,自該指令緩沖器中位移該第一快取線。
46.如權利要求41所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為還包括判斷在該第一指令中的一字節是否占據該指令緩沖器中的該第一快取線的一最后字節位置。
47.如權利要求46所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為其中如果該指示指出該微處理器尚未發生分支且該第一指令的該字節占據該第一快取線的該最后字節位置,則該第二快取線是位于該第一快取線上的一個該快取線。
48.如權利要求47所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為還包括在該選取步驟后,自該指令緩沖器中位移該第一快取線。
49.如權利要求46所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為其中如果該指示指出該微處理器尚未發生分支且該第一指令的該字節并未占據該第一快取線的該最后字節位置,則該第二快取線是該第一快取線。
50.如權利要求49所述的暫存指令字節以提供至指令格式化邏輯的方法,其特征為還包括在該選取步驟后,不自該指令緩沖器中位移任一該第一快取線。
全文摘要
一種分支控制裝置,適用于一微處理器,此分支控制裝置包括:一指令緩沖器,具有數個階層,用以暫存自指令快取區接收的指令字節的快取線。一多任務器,是在指令緩沖器中的三個階層中選取一底層階層,以提供至指令格式化邏輯,其中此多任務器所選取的階層,是依據一分支指針、一指令涵蓋指針及一進位指針而進行選取,其中分支指針是用以指示微處理器目前是否分支至分支目標地址快取區所提供的目標地址,而分支指針及目標地址目前是儲存于相關聯的階層中,其中此階層是包含因目標地址而被快取的分支指令。涵蓋指針是指出目前被格式化的指令是否涵蓋橫跨兩個快取線,而進位指針則是指出目前被格式化指令是否占據目前被格式化的指令緩沖器階層的最后字節位置。
文檔編號G06F9/46GK1376977SQ02107189
公開日2002年10月30日 申請日期2002年3月14日 優先權日2001年7月3日
發明者葛林G·亨利, 湯瑪斯C·麥當勞 申請人:智權第一公司