專利名稱:對預處理微指令發生異常多層嵌套進行處理的設備及方法
技術領域:
本發明涉及復雜指令集計算機內部異常處理技術,尤其涉及一種對預處理微指令發生異常多層嵌套進行處理的設備及方法。
背景技術:
基于復雜指令集的計算機(Complex Instruction Set Computer,CISC)是指以微程序為基礎、具有復雜指令系統的計算機。在CISC系統中,一條復雜指令一般需要被翻譯為多條微指令,被翻譯的多條微指令被保存在CPU的只讀存儲器(ROM)中,處理器中的指令流水線處理的是這些微指令,而不是翻譯前的操作系統可見的復雜指令。
微指令通常可以比復雜指令操作更多的寄存器資源。例如,復雜指令集一般可以操作8個可見通用寄存器,而微指令集可以操作32或64個以上的可見通用寄存器。以32個可見的通用寄存器為例,其中的8個可以作為復雜指令集的通用寄存器,而剩下的24個則保留給微指令集的譯碼器作為臨時寄存器或用作其它用途。
處理器中的指令流水線在處理由一條復雜指令翻譯成的多條微指令時經常發生異常。在發生異常后,現有技術中存在的處理機制首先轉入一段預處理微指令,執行這段預處理微指令能夠保存寄存器現場,并從內存中獲取跳轉的目標地址或通過執行微指令動態生成跳轉的目標地址,然后根據目標地址跳轉到操作系統可見的異常處理程序,執行異常處理程序可以實現對異常的修復。上述跳轉的目標地址通常存放在系統內存的某一固定區域中。
上述處理機制存在一個問題,即在異常發生后執行預處理微指令時又可能發生異常,進而形成預處理微指令的異常多層嵌套。此時,處理器應當及時對預處理微指令發生的異常多層嵌套進行處理,在保證這些異常得以正確修復的同時,又不至于導致指令流程的混亂甚至進入異常的死循環。
但是,目前還不存在對預處理微指令發生異常多層嵌套進行處理的技術,如何對預處理微指令發生異常多層嵌套進行處理是目前急需解決的重要問題。
發明內容
(一)要解決的技術問題針對上述現有技術存在的不足,本發明的一個主要目的在于提供一種對預處理微指令發生異常多層嵌套進行處理的設備,使發生的異常得以有序和正確的修復。
本發明的另一個主要目的在于提供一種對預處理微指令發生異常多層嵌套進行處理的方法,使發生的異常得以有序和正確的修復。
(二)技術方案為達到上述目的,本發明的技術方案是這樣實現的一種對預處理微指令發生異常多層嵌套進行處理的設備,該設備包括取指部件,用于從指令高速緩沖內存中取出指令,并將取出的指令發送給譯碼部件;譯碼部件,用于根據接收自取指部件的指令對緩存的異常信息進行譯碼,按譯碼產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給發射部件和指令重排序緩沖器;發射部件,用于將接收的異常預處理微指令中數據已準備好的指令發送給執行部件;執行部件,用于執行接收自發射部件的指令,并將執行的結果寫回到指令重排序緩沖器;指令重排序緩沖器,用于保存計算機指令流水線中每條指令的狀態信息,并保證指令的精確異常,在指令發生異常時將異常信息輸出給取指部件、譯碼部件、發射部件和執行部件。
所述譯碼部件包括異常緩沖器,用于緩存接收自指令重排序緩沖器的異常信息,并根據接收自微碼地址生成器的選擇信號將緩存的異常信息發送給微碼地址生成器;指令寄存器,用于存放當前正在執行指令的操作碼字節;微碼地址生成器,用于從異常緩沖器和指令寄存器中選擇信息,并對選擇獲取的信息進行譯碼產生微指令地址,按產生的微指令地址索引微指令存儲器獲取微指令;微指令存儲器,用于存儲微指令,并根據接收自微指令選擇器的選擇信號將微碼地址生成器索引獲取的微指令發送給微指令選擇器;簡單指令譯碼器,用于對指令寄存器中緩存的信息進行譯碼,并根據接收自微指令選擇器的選擇信號將譯碼產生的微指令發送給微指令選擇器;微指令選擇器,用于從微指令存儲器和簡單指令譯碼器中選擇微指令,并將選擇獲取的微指令發送給微指令生成器;微指令生成器,用于對接收自微指令選擇器的微指令進行譯碼,將譯碼后的微指令輸出到譯碼總線上。
所述微碼地址生成器和微指令選擇器為二路選擇器,微碼地址生成器優先處理從異常緩沖器中選擇獲取的信息,微指令選擇器優先處理從微指令存儲器中選擇獲取的微指令。
所述發射部件進一步包括重命名邏輯,用于消除寄存器之間的寫寫相關和讀寫相關。
所述執行部件的數量至少為一個。
一種對預處理微指令發生異常多層嵌套進行處理的方法,該方法包括A、微指令在執行過程中發生異常,譯碼部件緩存異常信息,并對緩存的異常信息進行譯碼產生微指令地址;B、譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給后端部件,后端部件在執行接收的異常預處理微指令時如果再次發生異常,則執行步驟C;如果不發生異常,則執行步驟D;C、后端部件刷空計算機的指令流水線,譯碼部件緩存再次發生的異常信息,并對再次發生的異常信息進行譯碼產生微指令地址,轉而執行步驟B;D、后端部件跳轉并執行異常處理程序,按異常發生的時間順序由后到先逐一對異常進行修復。
所述后端部件包括發射部件、執行部件和指令重排序緩沖器,所述步驟B包括B1、譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給發射部件和指令重排序緩沖器;B2、發射部件將數據準備好的異常預處理微指令發送給執行部件,執行部件將對異常預處理微指令執行的結果發送給指令重排序緩沖器;B3、指令重排序緩沖器檢查Roq_head指向的異常預處理微指令,如果Roq_head指向的異常預處理微指令發生異常,則執行步驟C;如果Roq_head指向的異常預處理微指令不發生異常,則執行步驟D。
步驟B1中所述譯碼部件將獲取的異常預處理微指令發送給發射部件是按微指令的地址順序發送的。
步驟B1中所述譯碼部件將獲取的異常預處理微指令發送給發射部件的同時進一步包括譯碼部件將獲取的異常預處理微指令按微指令的地址順序存放在指令重排序緩沖器中。
步驟C中所述刷空計算機指令流水線的后端部件為指令重排序緩沖器;所述刷空計算機的指令流水線是指令重排序緩沖器通過向取指部件、譯碼部件、發射部件和執行部件輸出異常信息實現的;所述譯碼部件緩存再次發生的異常信息,是將再次發生的異常信息緩存在異常緩沖區中。
所述異常信息可以帶有錯誤碼信息,所述譯碼部件進一步將錯誤碼信息緩存到異常緩沖區中。
所述后端部件為指令重排序緩沖器,所述步驟D包括指令重排序緩沖器跳轉到異常處理程序,在最深層次的異常處理程序執行完后重新執行次深層次的異常處理程序,最后執行最頂層次的異常處理程序。
(三)有益效果從上述技術方案可以看出,本發明具有以下有益效果1、利用本發明,在預處理微指令發生異常多層嵌套時,通過刷空計算機的指令流水線,跳轉并執行異常處理程序,在最深層次的異常處理程序執行完后重新執行次深層次的異常處理程序,最后執行最頂層次的異常處理程序,實現了對預處理微指令發生異常多層嵌套進行的處理,使發生的異常得以有序和正確的修復。
2、利用本發明,由于實現了對預處理微指令發生異常多層嵌套進行的處理,使發生的異常得以有序和正確的修復,所以可以進一步保證寄存器之間依賴關系的正確恢復,進而使處理器可以從斷點處繼續執行指令,保證了指令執行的順利進行。
3、利用本發明,對于在執行多條微指令時觸發的多個異常,同樣可以通過刷空計算機的指令流水線,跳轉并執行異常處理程序,對多條微指令時觸發的多個異常逐一進行修復,進而實現對多條微指令觸發的多個異常進行處理,使發生的異常得以有序和正確的修復。
圖1為依照本發明提供的對預處理微指令發生異常多層嵌套進行處理的設備的結構框圖;圖2為依照本發明提供的對預處理微指令發生異常多層嵌套進行處理的設備中譯碼部件的結構框圖;圖3為依照本發明提供的對預處理微指令發生異常多層嵌套進行處理設備中指令重排序緩沖器的示意圖;圖4為本發明對預處理微指令發生異常多層嵌套進行處理總體技術方案的實現流程圖;圖5為對預處理微指令發生三層嵌套進行處理的示意圖;圖6為重命名模塊中為寄存器建立依賴和取消依賴關系的示意圖;圖7為依照本發明實施例中對預處理微指令發生異常多層嵌套進行處理的方法流程圖。
具體實施例方式
為使本發明的目的、技術方案和優點更加清楚明白,以下結合具體實施例,并參照附圖,對本發明進一步詳細說明。
如圖1所示,圖1為依照本發明提供的對預處理微指令發生異常多層嵌套進行處理的設備的結構框圖。本發明提供的對預處理微指令發生異常多層嵌套進行處理的設備為一個中央處理器(CPU),該CPU包括取指部件101、譯碼部件102、發射部件103、執行部件104和指令重排序緩沖器(ROQ)105。
其中,取指部件101包括指令寄存器,指令高速緩沖內存(cache),指令旁路緩沖器,分支預測器等,具體組成結構可以隨實現系統的復雜度不同作相應的調整。取指部件101用于從指令cache中取出指令,并將取出的指令發送給譯碼部件102。
譯碼部件102用于根據接收自取指部件101的指令對緩存的異常信息進行譯碼,按譯碼產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給發射部件103和ROQ 105。譯碼部件102的結構將在圖2中進一步詳細描述,這里就不再贅述。
發射部件103用于將接收的異常預處理微指令中數據已準備好的指令發送給執行部件104。發射部件103還可以進一步包括重命名邏輯,用于消除寄存器之間的寫寫相關和讀寫相關。
執行部件104用于執行接收自發射部件103的指令,并將執行的結果寫回到ROQ 105。一般情況下,由于CPU需要同時執行各種不同的指令,而每個執行部件在同一時刻只能執行一種類型的指令,所以執行部件的數量一般至少為一個。
ROQ 105用于保存計算機指令流水線中每條指令的狀態信息,并保證指令的精確異常,在指令發生異常時將異常信息輸出給取指部件101、譯碼部件102、發射部件103和執行部件104。計算機指令流水線中每條指令的狀態信息主要包括指令是否執行完畢、指令是否提交等,對于分支指令還有分支寫回、分支觸發等。
基于圖1所述的對預處理微指令發生異常多層嵌套進行處理設備的結構框圖,圖2示出了圖1中譯碼部件102的結構框圖,該譯碼部件包括異常緩沖器(Ex_buffer)201、指令寄存器(Ir)202、微碼地址生成器(Rom_pcgenerator)203、微指令存儲器(uROM)204、簡單指令譯碼器(Simpledecoder)205、微指令選擇器(Micro code selecter)206和微指令生成器(Uopgenerator)207。
其中,Ex_buffer 201用于緩存接收自ROQ 105的異常信息,并根據接收自Rom_pc generator 203的選擇信號將緩存的異常信息發送給Rom_pc generator 203。
Ir 202用于存放當前正在執行指令的操作碼字節。
Rom_pc generator 203用于從Ex_buffer 201和Ir 202中選擇信息,并對選擇獲取的信息進行譯碼產生的微指令地址,按產生的微指令地址索引uROM 204獲取微指令。Rom_pc generator 203為二路選擇器,優先處理從Ex_buffer 201中獲取的信息。
uROM 204用于緩存微指令,并根據接收自Micro code selecter 206的選擇信號將微碼地址生成器索引獲取的微指令發送給Micro code selecter206。
Simple decoder 205用于對Ir 202中緩存的信息進行譯碼,并根據接收自Micro code selecter 206的選擇信號將譯碼產生的微指令發送給Microcode selecter 206。
Micro code selecter 206用于從uROM 204和Simple decoder 205中選擇微指令,并將選擇獲取的微指令發送給Uop generator 207。Micro codeselecter 206為二路選擇器,優先處理從uROM 204中獲取的微指令。
Uop generator 207用于對接收自Micro code selecter 206的微指令進行譯碼,將生成的微指令輸出到譯碼總線(decode bus)上。
基于圖1和圖2所述的結構框圖,本發明對預處理微指令發生異常多層嵌套進行處理的流程如下執行部件104在執行過程中如果發現異常,則將異常信息通過結果總線(result bus)發送給ROQ 105,ROQ 105通過例外總線(exception bus)將異常信息發送給譯碼部件102,譯碼部件102收到這個異常信息后將Ir 202置無效,并把這個異常信息緩沖在Ex_buffer201中。在下一拍Rom_pc generator 203選擇Ex_buffer 201中緩存的異常信息進行譯碼,生成微指令地址urom_pc,并按生成的urom_pc索引uROM204獲取微指令,獲取的微指令通過Micro code selecter 206發送給Uopgenerator 207,Uop generator 207對微指令進一步譯碼并輸出到decode bus上。如果發生異常嵌套的話,異常信息又會緩沖到Ex_buffer 201中,這樣又一次異常處理開始了。按照這種譯碼器結構設計就可以處理復雜指令異常預處理時發生的異常嵌套。
基于圖1所述的對預處理微指令發生異常多層嵌套進行處理設備的結構框圖,圖3示出了圖1中ROQ 105的示意圖。ROQ 105中的微指令是按微指令的地址順序存放的,Roq_head指向ROQ 105隊列頭的指令,Roq_tail指向隊列尾的下一項。ROQ 105可以用來保證指令的精確異常,當ROQ 105中的一條微指令發生異常后,ROQ 105將異常信息發給取指部件101,譯碼部件102,發射部件103和執行部件104等。
基于圖1、圖2和圖3所述的對預處理微指令發生異常多層嵌套進行處理設備的結構框圖,圖4示出了本發明對預處理微指令發生異常多層嵌套進行處理總體技術方案的實現流程圖,該方法包括以下步驟步驟401微指令在執行過程中發生異常,譯碼部件緩存異常信息,并對緩存的異常信息進行譯碼產生微指令地址;步驟402譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給后端部件,后端部件在執行接收的異常預處理微指令時如果再次發生異常,則執行步驟403;如果不發生異常,則執行步驟404;步驟403后端部件刷空計算機的指令流水線,譯碼部件緩存再次發生的異常信息,并對再次發生的異常信息進行譯碼產生微指令地址,轉而執行步驟402;步驟404后端部件跳轉并執行異常處理程序,按異常發生的時間順序由后到先逐一對異常進行修復。
上述步驟402中,所述后端部件包括發射部件、執行部件和ROQ,所述步驟402包括步驟4021譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給發射部件;在本步驟中,譯碼部件將獲取的異常預處理微指令發送給發射部件是按微指令的地址順序發送的;進一步地,譯碼部件在將獲取的異常預處理微指令發送給發射部件的同時,將獲取的異常預處理微指令按微指令的地址順序存放在ROQ中。
步驟4022發射部件將數據準備好的異常預處理微指令發送給執行部件,異常預處理微指令在執行部件中需要執行1拍或多拍,執行部件將對異常預處理微指令執行的結果發送給ROQ。
步驟4023ROQ在每1拍檢查Roq_head指向的異常預處理微指令,可以檢查前4條、2條或1條指令,如果Roq_head指向的異常預處理微指令發生異常,則執行步驟403;如果Roq_head指向的異常預處理微指令已經寫回,且不發生異常,則執行步驟404。
上述步驟403中,所述刷空計算機的指令流水線的后端部件為ROQ,所述刷空計算機的指令流水線是ROQ通過向取指部件、譯碼部件、發射部件和執行部件輸出異常信息實現的;所述譯碼部件緩存再次發生的異常信息,是將再次發生的異常信息緩存在異常緩沖區中,如果異常信息帶有錯誤碼信息,則譯碼部件進一步將錯誤碼信息也緩存到異常緩沖區中。
上述步驟404中,所述后端部件為ROQ,所述步驟404包括ROQ跳轉到異常處理程序,在最深層次的異常處理程序執行完后重新執行次深層次的異常處理程序,最后執行最頂層次的異常處理程序,這樣就形成了一個深度優先遍歷,在最深層的異常被處理完畢后,這種處理器結構會觸發次深層次的異常,直到所有異常都被處理完畢后,復雜指令才能得到執行。
基于圖4所述的對預處理微指令發生異常多層嵌套進行處理總體技術方案的實現流程圖,圖5示出了對預處理微指令發生三層嵌套進行處理的示意圖。
從圖5中可以看出,處理器第一次跳轉到異常處理程序對第三層的異常進行處理,這個第三層的異常是由第二層異常的預處理微指令產生的。在對第三層的異常修復完成后,處理器返回到斷點重新執行這條指令,結果再次觸發異常,此時由于第三層的異常已經被修復,觸發的是第二層的異常。處理器第二次跳轉到異常處理程序對第二層的異常進行處理,在對第二層的異常修復完成后,處理器會返回到斷點再次執行這條發生異常的指令,結果導致第三次觸發異常。此時由于第三層和第二層的異常都已經被修復,所以只會觸發第一層的異常。處理器第三次跳轉到異常處理程序對第一層的異常進行處理,在對第一層的異常修復完成后,處理器會返回到斷點再次執行這條發生異常的指令,指令就能夠順利通過執行了。
為了在異常觸發后取消已經建立的寄存器依賴關系,需要為每個寄存器依賴指定微指令編號。圖6示出了重命名模塊中為寄存器建立依賴和取消依賴關系的示意圖。如圖6所示,在遇到微指令1時,邏輯寄存器1被映射到物理寄存器3;在遇到微指令6時,邏輯寄存器2被映射到物理寄存器1;在遇到微指令8時,邏輯寄存器3被映射到物理寄存器5;由于微指令3,4,5和7沒有對應的目標寄存器,所以微指令3,4,5和7沒有與寄存器建立對應關系,微指令3,4,5和7只執行而不寫回;在遇到微指令9時,邏輯寄存器1被映射到物理寄存器7,此時邏輯寄存器1映射了兩個物理寄存器3和7,它們的區別在于對應的微指令編號不同,即分別為2和9。
在圖6中,如果一個微指令發生了異常,則重命名模塊收到這個異常信息,將根據已經建立的依賴關系與發生異常的微指令進行比較,并將位于發生異常微指令之后微指令建立的依賴關系取消。例如,如果微指令8發生了異常,則重命名模塊將取消之后微指令9建立的依賴關系,即取消邏輯寄存器1到物理寄存器7的依賴關系,其它的依賴關系保留。
為了更加清楚的說明本發明提供的對預處理微指令發生異常多層嵌套進行處理的方法,以下結合具體的實施例進行詳細說明。
在本實施例中,以x86的處理器為例,在x86系列的處理器中有很多的復雜指令,常見的如串拷貝指令,軟中斷int n指令,間接跳轉指令等,這些指令所對應的微指令被存放在一塊rom中。譯碼部件從存儲器中取得復雜指令后,會按照這種指令的操作碼域和其它的相關域去索引rom,取出微指令分別發送給重命名邏輯和發射部件。
X86可見的通用寄存器有8個,分別為eax、ebx、ecx、edx、esp、ebp、esi和edi,對應到微指令的8個普通的寄存器。另外,微指令集還被分配了24個臨時寄存器,這24個臨時寄存器用來緩沖各執行部件的運算結果,包括加法部件,乘法部件,除法部件,訪存部件等。由于微指令執行時會對這32個寄存器產生數據相關,這種相關通過后端的重命名邏輯進行重命名,從而消除了假相關。重命名后的微指令被按序放到重排序緩沖器中。重排序緩沖器中的微指令有3種狀態,空狀態,映射狀態,寫回狀態。當重排序緩沖器中的某一項的狀態為空時,表示這項可以存放一條微指令,只是目前沒有被使用。映射狀態表示當前的表項已經存放了一條微指令,這個微指令是從重命名部件發射過來,而且這條指令正在執行部件執行或正在記分板中等待發射,還沒有運算結果產生。寫回狀態表示當前的指令在執行部件已經執行完畢,并且執行結果已經寫到寄存器堆中,就等待處理器做最后的確認。
基于圖4所述的對預處理微指令發生異常多層嵌套進行處理總體技術方案的實現流程圖,圖7示出了依照本發明實施例中對預處理微指令發生異常多層嵌套進行處理的方法流程圖,包括以下步驟步驟701重排序緩沖器按順序將隊列頭的已經寫回的微指令發送給重命名部件,重命名部件根據接收自重排序緩沖器的微指令修改相應目標寄存器的狀態信息;在本步驟中,如果隊列頭的微指令附帶了異常信息,則重排序緩沖器發送給重命名部件的信息無效,重排序緩沖器將再次把附帶了異常信息的微指令發送給譯碼部件。
步驟702譯碼部件從接收的異常中獲取異常矢量,并將獲取的異常矢量編碼為一個特殊的指令,記錄發生的異常所在的指令地址。
步驟703譯碼部件根據編碼產生的特殊指令從rom中索引獲取相應的微指令,通過執行獲取的微指令得到異常處理程序地址,再進行壓棧,保存關鍵現場等預處理操作,然后根據得到的異常處理程序地址轉入正式的異常處理程序;如果在壓棧和保存關鍵現場的過程中又發生了異常,即發生異常多層嵌套,則執行步驟705;如果沒有發生異常多層嵌套,則執行步驟704。
步驟704譯碼部件執行異常處理程序,對發生的異常進行修復,并在異常處理程序執行完成后重新執行這條指令,結束本流程。
步驟705譯碼部件緩沖獲得的新異常矢量,將獲取的新異常矢量編碼為一個特殊的指令,并根據由新異常矢量編碼而來的特殊指令重新從rom中索引獲取相應的微指令,通過執行獲取的微指令第二次得到異常處理程序地址;在本步驟中,譯碼部件緩沖獲得的新異常矢量的同時,重排序緩沖區被清空,其它各種功能部件也都作了清除工作。
步驟706譯碼部件進行壓棧,保存關鍵現場等預處理操作,如果在壓棧和保存關鍵現場的過程中又發生了異常,即發生異常多層嵌套,則執行步驟708;如果沒有發生異常多層嵌套,則執行步驟707。
步驟707譯碼部件根據第二次得到的異常處理程序地址轉入正式的異常處理程序,對發生的異常進行修復,并在異常處理程序執行完成后重新執行這條指令,結束本流程。
步驟708譯碼部件繼續執行步驟705和706,直至不再發生異常多層嵌套,轉入正式的異常處理程序,對發生的異常進行修復,并在異常處理程序執行完成后重新執行這條指令。
在本實施例中,處理器是以如下的順序執行異常處理的在最深層次的異常處理程序執行完后會重新執行到次深層次的異常處理程序,最后執行到最頂層次的異常處理程序。
在本發明所舉實施例步驟701中,重排序緩沖器將附帶了異常信息的微指令發送給譯碼部件。在實際應用中,在重排序緩沖器將附帶了異常信息的微指令發送給譯碼部件同時,可以進一步將附帶了異常信息的微指令發送給重命名部件,重命名部件可以對接收的異常信息進行分析,進而取消異常信息所在指令后所有曾經建立的依賴關系。這樣的技術方案與本發明實施例中所舉的技術方案在思路上是一致的,應包含在本發明的保護范圍之內。
以上所述的具體實施例,對本發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施例而已,并不用于限制本發明,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種對預處理微指令發生異常多層嵌套進行處理的設備,其特征在于,該設備包括取指部件,用于從指令高速緩沖內存中取出指令,并將取出的指令發送給譯碼部件;譯碼部件,用于根據接收自取指部件的指令對緩存的異常信息進行譯碼,按譯碼產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給發射部件和指令重排序緩沖器;發射部件,用于將接收的異常預處理微指令中數據已準備好的指令發送給執行部件;執行部件,用于執行接收自發射部件的指令,并將執行的結果寫回到指令重排序緩沖器;指令重排序緩沖器,用于保存計算機指令流水線中每條指令的狀態信息,并保證指令的精確異常,在指令發生異常時將異常信息輸出給取指部件、譯碼部件、發射部件和執行部件。
2.根據權利要求1所述的設備,其特征在于,所述譯碼部件包括異常緩沖器,用于緩存接收自指令重排序緩沖器的異常信息,并根據接收自微碼地址生成器的選擇信號將緩存的異常信息發送給微碼地址生成器;指令寄存器,用于存放當前正在執行指令的操作碼字節;微碼地址生成器,用于從異常緩沖器和指令寄存器中選擇信息,并對選擇獲取的信息進行譯碼產生微指令地址,按產生的微指令地址索引微指令存儲器獲取微指令;微指令存儲器,用于存儲微指令,并根據接收自微指令選擇器的選擇信號將微碼地址生成器索引獲取的微指令發送給微指令選擇器;簡單指令譯碼器,用于對指令寄存器中緩存的信息進行譯碼,并根據接收自微指令選擇器的選擇信號將譯碼產生的微指令發送給微指令選擇器;微指令選擇器,用于從微指令存儲器和簡單指令譯碼器中選擇微指令,并將選擇獲取的微指令發送給微指令生成器;微指令生成器,用于對接收自微指令選擇器的微指令進行譯碼,將譯碼后的微指令輸出到譯碼總線上。
3.根據權利要求2所述的設備,其特征在于,所述微碼地址生成器和微指令選擇器為二路選擇器,微碼地址生成器優先處理從異常緩沖器中選擇獲取的信息,微指令選擇器優先處理從微指令存儲器中選擇獲取的微指令。
4.根據權利要求1所述的設備,其特征在于,所述發射部件進一步包括重命名邏輯,用于消除寄存器之間的寫寫相關和讀寫相關。
5.根據權利要求1所述的設備,其特征在于,所述執行部件的數量至少為一個。
6.一種對預處理微指令發生異常多層嵌套進行處理的方法,其特征在于,該方法包括A、微指令在執行過程中發生異常,譯碼部件緩存異常信息,并對緩存的異常信息進行譯碼產生微指令地址;B、譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給后端部件,后端部件在執行接收的異常預處理微指令時如果再次發生異常,則執行步驟C;如果不發生異常,則執行步驟D;C、后端部件刷空計算機的指令流水線,譯碼部件緩存再次發生的異常信息,并對再次發生的異常信息進行譯碼產生微指令地址,轉而執行步驟B;D、后端部件跳轉并執行異常處理程序,按異常發生的時間順序由后到先逐一對異常進行修復。
7.根據權利要求6所述的方法,其特征在于,所述后端部件包括發射部件、執行部件和指令重排序緩沖器,所述步驟B包括B1、譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給發射部件和指令重排序緩沖器;B2、發射部件將數據準備好的異常預處理微指令發送給執行部件,執行部件將對異常預處理微指令執行的結果發送給指令重排序緩沖器;B3、指令重排序緩沖器檢查Roq_head指向的異常預處理微指令,如果Roq_head指向的異常預處理微指令發生異常,則執行步驟C;如果Roq_head指向的異常預處理微指令不發生異常,則執行步驟D。
8.根據權利要求7所述的方法,其特征在于,步驟B1中所述譯碼部件將獲取的異常預處理微指令發送給發射部件是按微指令的地址順序發送的。
9.根據權利要求7所述的方法,其特征在于,步驟B1中所述譯碼部件將獲取的異常預處理微指令發送給發射部件的同時進一步包括譯碼部件將獲取的異常預處理微指令按微指令的地址順序存放在指令重排序緩沖器中。
10.根據權利要求7所述的方法,其特征在于,步驟C中所述刷空計算機指令流水線的后端部件為指令重排序緩沖器;所述刷空計算機的指令流水線是指令重排序緩沖器通過向取指部件、譯碼部件、發射部件和執行部件輸出異常信息實現的;所述譯碼部件緩存再次發生的異常信息,是將再次發生的異常信息緩存在異常緩沖區中。
11.根據權利要求10所述的方法,其特征在于,所述異常信息可以帶有錯誤碼信息,所述譯碼部件進一步將錯誤碼信息緩存到異常緩沖區中。
12.根據權利要求6所述的方法,其特征在于,所述后端部件為指令重排序緩沖器,所述步驟D包括指令重排序緩沖器跳轉到異常處理程序,在最深層次的異常處理程序執行完后重新執行次深層次的異常處理程序,最后執行最頂層次的異常處理程序。
全文摘要
本發明涉及復雜指令集計算機內部異常處理技術,尤其涉及對預處理微指令發生異常多層嵌套進行處理的設備及方法,所述方法包括A、微指令在執行過程中發生異常,譯碼部件緩存異常信息,并對緩存的異常信息進行譯碼產生微指令地址;B、譯碼部件按產生的微指令地址索引微指令存儲器獲取異常預處理微指令,并將獲取的異常預處理微指令發送給后端部件,后端部件在執行接收的異常預處理微指令時如果再次發生異常,則執行步驟C;如果不發生異常,則執行步驟D;C、后端部件刷空計算機的指令流水線,譯碼部件緩存再次發生的異常信息,并對再次發生的異常信息進行譯碼產生微指令地址,轉而執行步驟B;D、后端部件跳轉并執行異常處理程序。
文檔編號G06F9/38GK101075184SQ20061001192
公開日2007年11月21日 申請日期2006年5月18日 優先權日2006年5月18日
發明者段振中, 范東睿 申請人:中國科學院計算技術研究所