CN101075184A - 对预处理微指令发生异常多层嵌套进行处理的设备及方法 - Google Patents
对预处理微指令发生异常多层嵌套进行处理的设备及方法 Download PDFInfo
- Publication number
- CN101075184A CN101075184A CN 200610011927 CN200610011927A CN101075184A CN 101075184 A CN101075184 A CN 101075184A CN 200610011927 CN200610011927 CN 200610011927 CN 200610011927 A CN200610011927 A CN 200610011927A CN 101075184 A CN101075184 A CN 101075184A
- Authority
- CN
- China
- Prior art keywords
- order
- micro
- instruction
- unusual
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
本发明涉及复杂指令集计算机内部异常处理技术,尤其涉及对预处理微指令发生异常多层嵌套进行处理的设备及方法,所述方法包括:A、微指令在执行过程中发生异常,译码部件缓存异常信息,并对缓存的异常信息进行译码产生微指令地址;B、译码部件按产生的微指令地址索引微指令存储器获取异常预处理微指令,并将获取的异常预处理微指令发送给后端部件,后端部件在执行接收的异常预处理微指令时如果再次发生异常,则执行步骤C;如果不发生异常,则执行步骤D;C、后端部件刷空计算机的指令流水线,译码部件缓存再次发生的异常信息,并对再次发生的异常信息进行译码产生微指令地址,转而执行步骤B;D、后端部件跳转并执行异常处理程序。
Description
技术领域
本发明涉及复杂指令集计算机内部异常处理技术,尤其涉及一种对预处理微指令发生异常多层嵌套进行处理的设备及方法。
背景技术
基于复杂指令集的计算机(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。
步骤4023:ROQ在每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中,重排序缓冲器将附带了异常信息的微指令发送给译码部件。在实际应用中,在重排序缓冲器将附带了异常信息的微指令发送给译码部件同时,可以进一步将附带了异常信息的微指令发送给重命名部件,重命名部件可以对接收的异常信息进行分析,进而取消异常信息所在指令后所有曾经建立的依赖关系。这样的技术方案与本发明实施例中所举的技术方案在思路上是一致的,应包含在本发明的保护范围之内。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
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包括:
指令重排序缓冲器跳转到异常处理程序,在最深层次的异常处理程序执行完后重新执行次深层次的异常处理程序,最后执行最顶层次的异常处理程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100119270A CN100495322C (zh) | 2006-05-18 | 2006-05-18 | 对预处理微指令发生异常多层嵌套进行处理的设备及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100119270A CN100495322C (zh) | 2006-05-18 | 2006-05-18 | 对预处理微指令发生异常多层嵌套进行处理的设备及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101075184A true CN101075184A (zh) | 2007-11-21 |
CN100495322C CN100495322C (zh) | 2009-06-03 |
Family
ID=38976253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100119270A Expired - Fee Related CN100495322C (zh) | 2006-05-18 | 2006-05-18 | 对预处理微指令发生异常多层嵌套进行处理的设备及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100495322C (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101834801A (zh) * | 2010-05-20 | 2010-09-15 | 哈尔滨工业大学 | 基于缓冲池的数据缓存排序在线处理方法 |
CN103226499A (zh) * | 2013-04-22 | 2013-07-31 | 华为技术有限公司 | 一种恢复内部存储器中的异常数据的方法及装置 |
CN103986660A (zh) * | 2014-05-30 | 2014-08-13 | 华为技术有限公司 | 加载微码的装置以及加载微码的方法 |
CN104156241A (zh) * | 2014-07-31 | 2014-11-19 | 中国船舶重工集团公司第七0九研究所 | 处理器微程序的初始化配置方法及系统 |
CN104268029A (zh) * | 2014-09-23 | 2015-01-07 | 天津国芯科技有限公司 | 一种用于嵌入式PowerPC处理器异常嵌套的处理电路及方法 |
US9747105B2 (en) | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
CN112579170A (zh) * | 2020-12-10 | 2021-03-30 | 海光信息技术股份有限公司 | 一种用于减少虚拟地址计算的处理器及其方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6216222B1 (en) * | 1998-05-14 | 2001-04-10 | Arm Limited | Handling exceptions in a pipelined data processing apparatus |
US7065750B2 (en) * | 1999-02-17 | 2006-06-20 | Elbrus International | Method and apparatus for preserving precise exceptions in binary translated code |
CN1216327C (zh) * | 2003-05-15 | 2005-08-24 | 复旦大学 | 采用双指令集的32位嵌入式微处理器 |
US7313790B2 (en) * | 2003-06-23 | 2007-12-25 | Intel Corporation | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation |
-
2006
- 2006-05-18 CN CNB2006100119270A patent/CN100495322C/zh not_active Expired - Fee Related
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10684855B2 (en) | 2009-12-17 | 2020-06-16 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
CN104699457B (zh) * | 2009-12-17 | 2019-02-15 | 英特尔公司 | 用于在单个指令中执行移位和异或运算的方法和装置 |
US9747105B2 (en) | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
CN101834801A (zh) * | 2010-05-20 | 2010-09-15 | 哈尔滨工业大学 | 基于缓冲池的数据缓存排序在线处理方法 |
CN101834801B (zh) * | 2010-05-20 | 2012-11-21 | 哈尔滨工业大学 | 基于缓冲池的数据缓存排序在线处理方法 |
CN103226499B (zh) * | 2013-04-22 | 2016-02-24 | 华为技术有限公司 | 一种恢复内部存储器中的异常数据的方法及装置 |
EP2854032A4 (en) * | 2013-04-22 | 2015-09-16 | Huawei Tech Co Ltd | METHOD AND APPARATUS FOR RESTORING EXCEPTION DATA IN INTERNAL MEMORY |
WO2014173090A1 (zh) * | 2013-04-22 | 2014-10-30 | 华为技术有限公司 | 一种恢复内部存储器中的异常数据的方法及装置 |
US9921925B2 (en) | 2013-04-22 | 2018-03-20 | Huawei Technologies Co., Ltd. | Method and apparatus for recovering abnormal data in internal memory |
CN103226499A (zh) * | 2013-04-22 | 2013-07-31 | 华为技术有限公司 | 一种恢复内部存储器中的异常数据的方法及装置 |
CN103986660A (zh) * | 2014-05-30 | 2014-08-13 | 华为技术有限公司 | 加载微码的装置以及加载微码的方法 |
CN104156241A (zh) * | 2014-07-31 | 2014-11-19 | 中国船舶重工集团公司第七0九研究所 | 处理器微程序的初始化配置方法及系统 |
CN104156241B (zh) * | 2014-07-31 | 2019-08-13 | 中国船舶重工集团公司第七0九研究所 | 处理器微程序的初始化配置方法及系统 |
CN104268029A (zh) * | 2014-09-23 | 2015-01-07 | 天津国芯科技有限公司 | 一种用于嵌入式PowerPC处理器异常嵌套的处理电路及方法 |
CN112579170A (zh) * | 2020-12-10 | 2021-03-30 | 海光信息技术股份有限公司 | 一种用于减少虚拟地址计算的处理器及其方法 |
CN112579170B (zh) * | 2020-12-10 | 2022-11-08 | 海光信息技术股份有限公司 | 一种用于减少虚拟地址计算的处理器及其方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100495322C (zh) | 2009-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101075184A (zh) | 对预处理微指令发生异常多层嵌套进行处理的设备及方法 | |
CN101114218A (zh) | 复杂指令集体系结构中的深度优先异常处理方法 | |
CN1186720C (zh) | 据物理分页指针比较结果转送数据的装置及方法 | |
CN1202480C (zh) | 高级微处理器中增强调度的方法和设备 | |
CN1088214C (zh) | 用多指令集处理数据的器件和方法 | |
CN1147794C (zh) | 具有静态转移预测支持的去耦取指令-执行引擎 | |
US11042375B2 (en) | Counting elements in data items in a data processing apparatus | |
CN104679481B (zh) | 一种指令集转换系统和方法 | |
CN1242087A (zh) | 用于高级微处理器的门控存储缓冲器 | |
CN1222985A (zh) | 在多级流水线结构中处理条件跳转的方法 | |
CN1379872A (zh) | 用于在执行被转换指令时维持环境的方法和装置 | |
CN1542609A (zh) | 处理器及处理管线中例外反应的装置与方法 | |
CN1349160A (zh) | 流水线控制相关延迟消除方法 | |
CN1291323C (zh) | 实现数据一致性的装置及方法 | |
CN1525309A (zh) | 指令转回处理器系统、指令转回方法和指令转回程序 | |
CN1335962A (zh) | 面向线程的调试 | |
JP7245817B2 (ja) | データ処理装置における連続値の照合 | |
US10353681B2 (en) | Systems and methods for using error correction and pipelining techniques for an access triggered computer architecture | |
CN1716202A (zh) | 动静结合二进制翻译中静态信息不完备的处理方法及装置 | |
Post | The future of computing performance | |
CN100345117C (zh) | 二进制翻译中对x86中浮点运算的处理方法 | |
CN1542608A (zh) | 微控制器 | |
CN1100293C (zh) | 指令控制拼装方法及其装置 | |
CN1558326A (zh) | 用于更正微处理器中的内部呼叫或返回堆栈的方法与装置 | |
CN105825890A (zh) | 存储器编程方法以及存储器装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090603 |
|
CF01 | Termination of patent right due to non-payment of annual fee |