一种基于SPARCV8处理器的存储器精确陷阱控制结构与方法转让专利

申请号 : CN201510617153.5

文献号 : CN105224412B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 裴茹霞肖建青张洵颖李红桥张丽娜崔媛媛

申请人 : 中国航天科技集团公司第九研究院第七七一研究所

摘要 :

本发明提供一种既实现精确陷阱又不完全禁用write buffer的写缓存功能的,在提高系统可靠性的同时避免系统性能受到明显的损失方法的,基于SPARCV8处理器的存储器精确陷阱控制结构与方法;所述的方法在SPARCV8处理器中指令流水线执行推进时,根据SPARCV8处理器发出的写操作访问需求,执行如下操作;当前存储指令为单字或者双字的写操作缓存在写缓存器write buffer中,同时允许流水线继续推进;当前存储指令为字节或者半字的写操作时,流水线推进停顿;若在写缓存器write buffer中没有缓存其它的写操作时,则进行主存储器的访问;否则,在写缓存器write buffer处理完所有缓存的写操作之后,再访问主存储器;等待该字节或者半字类型的写操作对主存储器的访问完成后再继续推进。

权利要求 :

1.一种基于SPARCV8处理器的存储器精确陷阱控制方法,其特征在于,SPARCV8处理器中指令流水线执行推进时,根据SPARCV8处理器发出的写操作访问需求,执行如下操作;

当前存储指令为单字或者双字的写操作时,缓存在写缓存器write buffer中,同时允许流水线继续推进;

当前存储指令为字节或者半字的写操作时,流水线推进停顿;若在写缓存器write buffer中没有缓存其它的写操作时,则进行主存储器的访问;否则,在写缓存器write buffer处理完所有缓存的写操作之后,再访问主存储器;等待该字节或者半字类型的写操作对主存储器的访问完成后再继续推进;

其中,在处理字节或半字类型的写操作时,流水线一直处于等待状态,没有执行新的指令,当该写操作出现无法纠正的错误时,将产生的错误信号传递给流水线,SPARCV8处理器的当前程序地址寄存器PC能够准确对应发出该写操作的存储指令,从而产生的是一个精确陷阱,并对其进行对应处理。

2.根据权利要求1所述的一种基于SPARCV8处理器的存储器精确陷阱控制方法,其特征在于,在写缓存器write buffer进行缓存控制时,SPARCV8处理器流水线的执行,和对主存的写操作独立并行。

3.一种基于SPARCV8处理器的存储器精确陷阱控制结构,其特征在于,包括取值选择器,级联的第一Load操作选择器和第二Load操作选择器,级联的第一Store操作选择器和第二Store操作选择器,以及用于产生控制整个流水线的推进信号holdn的与门,推进信号holdn分别控制流水线各级间的寄存器;

所述的取值选择器的低电位输入端连接取值操作访问完成的ready信号,高电位输入端连接高电位信号,选择控制端连接指令Cache命中信号,输出端输出指令访问的推进信号iholdn;

所述的第一Load操作选择器的低电输入端连接load操作访问完成的ready信号,高电位输入端连接高电位信号,选择控制端连接数据Cache命中信号,连接第二Load操作选择器的高电位输入端;所述的第二Load操作选择器的低电位输入端连接高电位信号,高电位输入端连接第一Load操作选择器的输出端,选择控制端连接Load操作信号;

所述的第一Store操作选择器的低电输入端连接第二Load操作选择器的输出端,高电位输入端连接store操作访问完成的ready信号,选择控制端连接字节或半字节类型的写操作信号;所述的第二Store操作选择器的低电输入端连接第一Store操作选择器的输出端,高电位输入端连接高电位信号,选择控制端连接单字节或双字节类型的写操作信号,输出端输出数据访问的推进信号dholdn;

所述的与门的输入端分别连接指令访问的推进信号iholdn和数据访问的推进信号dholdn。

4.根据权利要求3所述的一种基于SPARCV8处理器的存储器精确陷阱控制结构,其特征在于,取值操作访问完成的ready信号,load操作访问完成的ready信号,以及store操作访问完成的ready信号均由外部主存储器的访问接口连接输入。

说明书 :

一种基于SPARCV8处理器的存储器精确陷阱控制结构与方法

技术领域

[0001] 本发明涉及对SPARC V8处理器中存储器的数据校验错误控制领域,具体为一种基于SPARCV8处理器的存储器精确陷阱控制结构与方法。

背景技术

[0002] 现代微处理器在执行指令的过程中,除了响应外部中断以外,其内部还可能触发两种类型的陷阱(有时也称为异常),分别是精确陷阱和延迟陷阱。精确陷阱是指发生陷阱时,导致该陷阱的指令还没有更改任何程序可见的状态,也就是当前PC能够准确对应着触发陷阱的这条指令,这样陷阱子程序处理起来非常容易。但是对于延迟陷阱而言,在发生陷阱时,导致该陷阱的指令与当前PC并不对应,当前PC可能是它后面的第若干条指令,相对于正在执行真正引发陷阱的指令的时刻,此时系统的执行状态已经改变。因此在进行陷阱子程序的处理时,就需要找到真正触发该陷阱的那条指令,并把它后面的指令对程序状态所做的更改都取消掉,做到这些会导致控制非常复杂。
[0003] 根据SPARC V8指令架构的定义,延迟陷阱主要是由存储器的写操作出现错误而导致的。因为现有的SPARC V8处理器为了提高执行性能,减少访存的等待,在硬件上专门设置了一个write buffer结构用以缓存当前的写操作,使得处理器可以立即执行后续指令,与此同时,缓存的写操作则能对主存储器进行访问。可以看出,通过write buffer结构将处理器执行指令与主存储器的写操作并行起来,从而很好的隐藏了访存开销。但是,如果这个写操作最终引发了错误,当该错误被反馈给处理器时,处理器已经向前执行了若干条指令,则会产生延迟陷阱。
[0004] 这种延迟陷阱不仅难于处理,而且还有可能会造成处理器的宕机事故。根据SPARC V8指令集定义,一旦发生陷阱并在进行陷阱处理时,硬件自动将陷阱使能位(ET)置为无效值零,也就是默认不允许陷阱嵌套。如果用户想使用这种嵌套功能,就必须在陷阱处理子程序中通过软件来重新配置ET位。由于写操作错误这种延迟陷阱发生的时机是不确定的,完全由主存储器的访问延迟所决定,如果处理器正在进行某个外部中断或者内部陷阱的处理,并且在子程序中还未配置ET位有效,这时刚好出现了一个写操作错误的延迟陷阱,那么处理器就无法响应它而进入“错误模式”。在错误模式下,处理器不能执行任何指令,也无法自行返回到正常模式,即呈现所谓的宕机状态,它只能通过外部复位才能回到初始状态,重新执行。
[0005] 由上可见,由于写操作错误而引发的延迟陷阱给SPARC V8处理器带来了极大的控制复杂度和安全隐患,尤其是在空间应用中,主存储器受单粒子辐射而出现数据错误的概率随之增大,这种延迟陷阱导致处理器宕机的可能性也就越大,从而严重影响到系统的可靠性,因此必须对这种延迟陷阱机制进行改进。如果能将延迟陷阱也转化为精确陷阱来实现,那么不仅能够从根本上避免处理器宕机的可能性,而且还会带来陷阱处理程序的简化和统一,使陷阱处理的实时性更强、效率更高;但是,精确陷阱不能使主存储器的写操作与处理器执行指令并行起来,这势必会对处理器的性能造成影响。因此,设计一种既高效又可靠的精确陷阱控制机制就显得尤为重要。

发明内容

[0006] 针对现有技术中存在的问题,本发明提供一种既实现精确陷阱又不完全禁用write buffer的写缓存功能的,在提高系统可靠性的同时避免系统性能受到明显的损失方法的,基于SPARCV8处理器的存储器精确陷阱控制结构与方法。
[0007] 本发明是通过以下技术方案来实现:
[0008] 一种基于SPARCV8处理器的存储器精确陷阱控制方法,SPARCV8处理器中指令流水线执行推进时,根据SPARCV8处理器发出的写操作访问需求,执行如下操作;
[0009] 当前存储指令为单字或者双字的写操作缓存在写缓存器write buffer中,同时允许流水线继续推进;
[0010] 当前存储指令为字节或者半字的写操作时,流水线推进停顿;若在写缓存器write buffer中没有缓存其它的写操作时,则进行主存储器的访问;否则,在写缓存器write buffer处理完所有缓存的写操作之后,再访问主存储器;等待该字节或者半字类型的写操作对主存储器的访问完成后再继续推进;
[0011] 其中,在处理字节或半字类型的写操作时,流水线一直处于等待状态,没有执行新的指令,当该写操作出现无法纠正的错误时,将产生的错误信号传递给流水线,SPARCV8处理器的当前PC能够准确对应发出该写操作的存储指令,从而产生的是一个精确陷阱,并对其进行对应处理。
[0012] 优选的,在写缓存器write buffer进行缓存控制时,SPARCV8处理器流水线的执行,和对主存的写操作独立并行。
[0013] 一种基于SPARCV8处理器的存储器精确陷阱控制结构,包括取值选择器,级联的第一Load操作选择器和第二Load操作选择器,级联的第一Store操作选择器和第二Store操作选择器,以及用于产生控制整个流水线的推进信号holdn的与门,推进信号holdn分别控制流水线各级间的寄存器;
[0014] 所述的取值选择器的低电位输入端连接取值操作访问完成的ready信号,高电位输入端连接高电位信号,选择控制端连接指令Cache命中信号,输出端输出指令访问的推进信号iholdn;
[0015] 所述的第一Load操作选择器的低电输入端连接load操作访问完成的ready信号,高电位输入端连接高电位信号,选择控制端连接数据Cache命中信号,连接第二Load操作选择器的高电位输入端;所述的第二Load操作选择器的低电位输入端连接高电位信号,高电位输入端连接第一Load操作选择器的输出端,选择控制端连接Load操作信号;
[0016] 所述的第一Store操作选择器的低电输入端连接第二Load操作选择器的输出端,高电位输入端连接store操作访问完成的ready信号,选择控制端连接字节/半字节类型的写操作信号;所述的第二Store操作选择器的低电输入端连接第一Store操作选择器的输出端,高电位输入端连接高电位信号,选择控制端连接单字节/双字节类型的写操作信号,输出端输出数据访问的推进信号dholdn;
[0017] 所述的与门的输入端分别连接指令访问的推进信号iholdn和数据访问的推进信号dholdn。
[0018] 优选的,取值操作访问完成的ready信号,load操作访问完成的ready信号,以及store操作访问完成的ready信号均由外部主存储器的访问接口连接输入。
[0019] 与现有技术相比,本发明具有以下有益的技术效果:
[0020] 本发明针对SPARC V8处理器由于存储器写操作错误而导致的延迟陷阱以及它可能引发系统宕机的问题,通过相应的结构修改,最终实现了统一的精确陷阱控制,取得的效果如下:
[0021] 1)增强了系统的可靠性。原始结构下存储器写操作错误产生的是延迟陷阱,它很有可能在无法完成陷阱嵌套功能时造成整个系统错误而呈现宕机状态,这对空间应用领域来说存在严重的安全隐患,因为在空间环境中,单粒子辐射造成主存储器数据位发生翻转的概率增加,更容易导致存储器写操作错误而引发系统的宕机行为。本发明将写操作错误经过对写操作指令的分别缓存控制,使其实现成一种精确陷阱,从根本上避免了处理器宕机的可能性,保证了整个系统的稳定与可靠。
[0022] 2)减小了陷阱处理的控制复杂度。在精确陷阱机制下,当前PC能够准确表征发生存储器写操作错误的那条指令,并且在该写操作过程中,处理器不会继续执行新指令,因此无需设法清除或恢复系统执行状态,极大的降低了陷阱处理的控制复杂度。
[0023] 3)设计修改简单且易于实施。本发明所进行的设计修改仅限于write buffer写操作的缓存控制以及指令流水线的推进控制电路,非常局部化,不会影响处理器中的其它部件。
[0024] 4)不增加额外的硬件功耗。本发明仅仅是根据不同的写操作类型而分别进行流水线的推进控制,同时又去掉了write buffer对字节和半字类型写操作的缓存逻辑,因此在整个硬件资源上,不会产生额外的面积和功耗开销。处理器的性能无明显损失。本发明在实现精确陷阱的同时,并不是完全取消了write buffer对写操作的缓存功能,对于所有单字和双字类型的写操作,它仍然能够保证该写操作与处理器执行指令的并行性,因此处理器的整体性能并没有受到过多影响。

附图说明

[0025] 图1为现有技术中写操作错误产生延迟陷阱的过程示意图。
[0026] 图2为本发明实例中所述的写操作错误产生精确陷阱的过程示意图。
[0027] 图3为现有技术中写错误延迟陷阱导致宕机的时序图。
[0028] 图4为本发明实例中所述的精确陷阱的流水线控制结构示意图。
[0029] 图5为本发明实例中各种写操作访问外部主存储器的过程示意图。

具体实施方式

[0030] 下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
[0031] 本发明涉及SPARC V8架构处理器中写操作错误产生精确陷阱的控制结构与实现方法,具体的写错误是指字节和半字类型的写操作在更新外部主存储器时所出现的数据校验错误。
[0032] 本发明通过对SPARC V8处理器中主存储器写操作产生错误的机理进行分析,并从控制结构上进行改进,将其实现成一种精确陷阱,从而来消除写操作错误的延迟陷阱所导致的陷阱处理过于复杂、以及可能导致的处理器宕机的问题;另外,本发明所实现的精确陷阱控制机制仍然能够有效利用原始结构中write buffer的写缓存功能,保留字和双字位宽的写操作与处理器执行的并行化,不会导致明显的性能损失。其主要包括如下方面的改进。
[0033] (1)根据处理器发出的写操作位宽,有选择的将其缓存到write buffer中。SPARC V8指令集一共定义了四种位宽类型的存储器写操作,分别是字节型、半字型、单字型和双字型的访问。对于处理器发出的单字或者双字的写操作,直接缓存在write buffer中,后续write buffer会按照统一的先进先出策略来实施对外部主存储器的写访问。对于字节或半字类型的写操作,则不再将它缓存到write buffer中,如果此时write buffer中没有缓存其它的写操作,则该字节或半字类型的写操作可直接进行主存储器的访问;否则,它应该等到write buffer处理完所有缓存的写操作之后才能访问主存储器。当然,处理器发出的所有类型的写操作都会按照数据Cache的更新策略进行Cache存储器的写更新,这与write buffer的缓存控制过程是完全独立的、并行的。
[0034] (2)实现指令流水线推进与否的精细化控制。指令流水线是否能继续执行后续的新指令,由何时完成访存操作决定。在基于write buffer结构的SPARC V8处理器中,所有的写操作只要到达write buffer,不论它对主存储器的访问是否完成,都不影响指令流水线的推进,因此可以获得很高的性能。由于进行存储器写操作的同时,流水线可以继续执行新指令,因此一旦某个写操作发生错误,当前PC就不能标识与该写操作对应的那条指令,从而引发一个延迟陷阱。本发明在实现精确陷阱时,并不是将所有类型的写操作都统一对待,而是采用不同的流水线控制机制,对于单字或者双字的写操作,由于它不会导致主存储器数据的校验错误,因此在它被缓存到write buffer的同时可以直接允许流水线继续推进;但对于字节或者半字的写操作,有可能出现主存数据的校验错误,因此为了达到精确陷阱处理的目的,流水线必须停顿下来,一直等到该字节或者半字类型的写操作对主存储器的访问完成为止。
[0035] (3)通过存储器写操作反馈回来的错误信号产生精确陷阱。一般而言,在可靠性要求比较高的应用环境中,处理器系统必须能够对外部主存储器中的数据进行检错与纠错,以保证所访问数据的正确性。这种纠检错功能通常采用ECC编码技术来实现,针对SPARC V8架构下任意一个32位的数据,需要生成其对应的校验编码值。对于单字访问的写操作,其位宽刚好是32位,可直接进行数据位的写入,同时将对应的校验位进行更新,因此它不关心原始数据是否存在错误,本次写操作都能正常的完成对主存储器的更新。对于双字访问的写操作,需要对两个连续的32位数据进行写更新,而每个32位的数据则完全按照单字类型的方式进行访问,因此它也能正常的完成执行。但是,对于字节和半字类型的写操作,其访问位宽分别只有8位和16位,它们就不能直接去更新整个数据字中对应的那个字节或者半字,因为校验位是对整个32位数据进行编码的,针对这种窄位宽的写操作类型,就必须先把整个32位的数据都读出来,修改其中对应的那个字节或者半字,然后才能对这个32位数据进行编码并重新写回到主存储器中。可以看到,即便是一个针对字节或者半字的写操作,但它却隐含了一个针对整个数据字的读校验访问,如果在进行该读访问的过程中,发现原始的数据存在校验错误,特别是出现了无法纠正的错误时,该字节或者半字的写操作也就无法正常完成对主存储器的更新操作了,此时就会产生一个错误信号传递给流水线。由于在处理字节或半字类型的写操作时,流水线一直处于等待状态,没有执行新的指令,因此当该写操作的错误信号返回时,当前PC能够准确对应着发出该写操作的那条指令,于是产生的是一个精确陷阱,对它的处理就变得非常简单。
[0036] 具体的,如图1所示,现有技术中SPARC V8处理器由于写操作错误而产生延迟陷阱的过程。每当执行一条store指令时,它对应的写操作一方面去更新数据Cache,另一方面会被缓存在write buffer中,如步骤①所示;在步骤②中,write buffer按照先进先出的顺序将其缓存的写操作依次发给外部主存储器进行访问,与此同时,指令流水线不停顿,可以继续执行后面的新指令;直到某个时刻,某一访问主存的写操作发生错误并返回了错误信号,此时指令流水线已经执行到指令N处,如步骤③所示。显然这个写错误导致的是一个延迟陷阱,处理器当前的PC已经不能代表之前的那条store指令,这给陷阱处理带来了额外的复杂度。在这种结构下,write buffer缓存SPARC V8指令集定义的所有写操作,包括写字节类型(STB)、写半字类型(STH)、写单字类型(STW)以及写双字类型(STD),它并不对这些操作类型进行区分,而采用统一的缓存方式。
[0037] 现有SPARC V8处理器由于写错误延迟陷阱而可能导致宕机的时序关系如图3所示;起初,处理器在run状态下正常执行指令时,当遇到一个外部中断或者内部陷阱时,处理器开始转入trap状态执行陷阱处理子程序,同时在T1时刻,硬件会自动将陷阱使能位(ET)拉低,以禁止陷阱的嵌套;如果用户程序想要支持陷阱嵌套功能,那么在进行相关的保存现场操作之后就可以通过软件重新将ET位配置成高,也就是图中的时刻T3。然而,由于延迟陷阱的存在,当处理器正在执行该陷阱处理子程序的过程中,它之前执行的某一条store操作很可能此时才返回错误信号,而且刚好发生在ET被重新拉高的T3时刻之前,即图中的T2时刻,这时该store操作产生的延迟陷阱就不能被处理,从而使处理器进入error状态(系统错误模式),无法继续执行指令,呈现宕机状态。
[0038] 本发明将写错误的延迟陷阱实现成一种精确陷阱,保证了写操作的错误信号返回到流水线时,处理器都不会执行其它程序而能立即响应这个写操作产生的陷阱,完全避免了宕机的可能性。如图2所示,本发明将写操作错误所导致的延迟陷阱实现成精确陷阱的过程。在步骤①中,流水线发出的写操作直接去更新数据Cache,但是write buffer只缓存STW/STD类型的写操作,而不再缓存STB/STH类型的写操作。对于STW/STD操作,它仍按照原来步骤②的方式访问主存,与此同时,指令流水线也可以继续执行后面的新指令,由于这种类型的写操作不会导致主存数据的校验错误,因此即便流水线继续推进也不会产生陷阱而造成影响。然而,对于STB/STH类型操作,指令流水线必须停下来等待,直到write buffer中之前缓存的STW/STD操作(如果存在)全部执行完、该STB/STH操作执行完、以及它的错误信号返回给流水线时,也就是在经历步骤②和步骤③之后,流水线才开始推进。这样,由STB/STH操作导致的写错误就属于一个精确陷阱,处理器当前的PC能够准确表征该store指令,从而极大的方便了陷阱的处理。
[0039] 如图4所示,本发明为实现精确陷阱而进行的流水线控制结构改进;其中,整个流水线的推进信号holdn包括指令访问的推进信号iholdn和数据访问的推进信号dholdn,只有当holdn为高时,指令流水线才能推进,继续执行新指令。iholdn信号只有在指令Cache命中时才为高,否则一直要等到缺失的取指操作完成的ready信号有效时才能变为高。dholdn信号分为load操作和store操作两种情况,对于load操作,dholdn的控制逻辑与iholdn类似,只有在数据Cache命中时才为高,否则一直要等到缺失的load操作完成的ready信号有效时才能变为高;对于store操作,本发明实现了精细化的控制,即如果是STW/STD类型的写访问,则不需停顿流水线,dholdn始终为高,如果是STB/STH类型的写访问,为了防止其写操作导致延迟陷阱,必须控制dholdn信号只有等到该store操作完成的ready信号有效时才变为高,从而才能推进流水线的执行。
[0040] 本优选实例中,分别以各种写操作访问外部主存储器的过程为例进行说明,如图5所示。对于任意一个32位的数据都采用8位的ECC编码,如图5中a图所示,某个时刻STB操作想要将主存数据“AABBCCDD”中的字节“BB”更新成“EE”,虽然这种数据位的更新可以直接完成,但ECC编码位的更新却无法直接进行,因为它是对整个数据字的校验编码,任何一个数据位的改变都会导致编码值的变化。因此,这时就必须先将原始数据和编码值都读出来(步骤①),然后进行步骤②的校验,如果检测出该数据有错,尤其是无法纠正的位于其它字节上的错误,则就需要将该错误信号反馈给流水线以进行错误处理,如果检测数据正确,则按照步骤③修改对应字节的数据位,然后对修改后的数据“AAEECCDD”进行编码(步骤④),最后才能将得到的新编码值“ZW”进行写入,即步骤⑤。如图5中b图所示,STH操作是更新半字的写操作,与STB的过程完全一致,也需要对原始数据进行读出和校验,如果校验出错,也将错误信号反馈给流水线。如图5中c图所示,然而,对于STW/STD操作,它们都直接更新整个数据字,即便原始数据有错误也不影响它本次的更新操作,因此这时就无需读出原有数据进行校验,从而不会产生错误信号。本发明正是基于STB/STH操作与STW/STD操作是否产生主存储器访问错误这一事实来分别进行流水线的停顿控制,一方面实现了STB/STH写操作错误的精确陷阱,另一方面对STW/STD操作仍然保留write buffer缓存控制功能,使其访存操作能与流水线执行指令并行起来,从而不至于对处理器的性能造成明显的损失。
[0041] 本发明的内容已经成功应用于一种兼容SPARC V8架构的处理器中,并且以该处理器作为主控单元设计实现了多款SoC芯片。本发明将存储器写操作错误所导致的延迟陷阱实现成了一种精确陷阱,使陷阱处理更加容易,同时它也从根本上消除了系统宕机的隐患,保证系统能稳定可靠的运转,而执行性能也没有受到明显影响。整个设计结构非常清晰、控制逻辑也很简单,可实施性较强。