首页> 中国专利> 一种基于SPARCV8处理器的存储器精确陷阱控制结构与方法

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

摘要

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

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-12-05

    授权

    授权

  • 2016-02-03

    实质审查的生效 IPC(主分类):G06F11/07 申请日:20150924

    实质审查的生效

  • 2016-01-06

    公开

    公开

说明书

技术领域

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

背景技术

现代微处理器在执行指令的过程中,除了响应外部中断以外,其内部还 可能触发两种类型的陷阱(有时也称为异常),分别是精确陷阱和延迟陷 阱。精确陷阱是指发生陷阱时,导致该陷阱的指令还没有更改任何程序可见 的状态,也就是当前PC能够准确对应着触发陷阱的这条指令,这样陷阱子 程序处理起来非常容易。但是对于延迟陷阱而言,在发生陷阱时,导致该陷 阱的指令与当前PC并不对应,当前PC可能是它后面的第若干条指令,相 对于正在执行真正引发陷阱的指令的时刻,此时系统的执行状态已经改变。 因此在进行陷阱子程序的处理时,就需要找到真正触发该陷阱的那条指令, 并把它后面的指令对程序状态所做的更改都取消掉,做到这些会导致控制非 常复杂。

根据SPARCV8指令架构的定义,延迟陷阱主要是由存储器的写操作出 现错误而导致的。因为现有的SPARCV8处理器为了提高执行性能,减少访 存的等待,在硬件上专门设置了一个writebuffer结构用以缓存当前的写操 作,使得处理器可以立即执行后续指令,与此同时,缓存的写操作则能对主 存储器进行访问。可以看出,通过writebuffer结构将处理器执行指令与主 存储器的写操作并行起来,从而很好的隐藏了访存开销。但是,如果这个写 操作最终引发了错误,当该错误被反馈给处理器时,处理器已经向前执行了 若干条指令,则会产生延迟陷阱。

这种延迟陷阱不仅难于处理,而且还有可能会造成处理器的宕机事故。 根据SPARCV8指令集定义,一旦发生陷阱并在进行陷阱处理时,硬件自动 将陷阱使能位(ET)置为无效值零,也就是默认不允许陷阱嵌套。如果用 户想使用这种嵌套功能,就必须在陷阱处理子程序中通过软件来重新配置 ET位。由于写操作错误这种延迟陷阱发生的时机是不确定的,完全由主存 储器的访问延迟所决定,如果处理器正在进行某个外部中断或者内部陷阱的 处理,并且在子程序中还未配置ET位有效,这时刚好出现了一个写操作错 误的延迟陷阱,那么处理器就无法响应它而进入“错误模式”。在错误模式 下,处理器不能执行任何指令,也无法自行返回到正常模式,即呈现所谓的 宕机状态,它只能通过外部复位才能回到初始状态,重新执行。

由上可见,由于写操作错误而引发的延迟陷阱给SPARCV8处理器带来 了极大的控制复杂度和安全隐患,尤其是在空间应用中,主存储器受单粒子 辐射而出现数据错误的概率随之增大,这种延迟陷阱导致处理器宕机的可能 性也就越大,从而严重影响到系统的可靠性,因此必须对这种延迟陷阱机制 进行改进。如果能将延迟陷阱也转化为精确陷阱来实现,那么不仅能够从根 本上避免处理器宕机的可能性,而且还会带来陷阱处理程序的简化和统一, 使陷阱处理的实时性更强、效率更高;但是,精确陷阱不能使主存储器的写 操作与处理器执行指令并行起来,这势必会对处理器的性能造成影响。因 此,设计一种既高效又可靠的精确陷阱控制机制就显得尤为重要。

发明内容

针对现有技术中存在的问题,本发明提供一种既实现精确陷阱又不完全 禁用writebuffer的写缓存功能的,在提高系统可靠性的同时避免系统性能 受到明显的损失方法的,基于SPARCV8处理器的存储器精确陷阱控制结构 与方法。

本发明是通过以下技术方案来实现:

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

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

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

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

优选的,在写缓存器writebuffer进行缓存控制时,SPARCV8处理器流 水线的执行,和对主存的写操作独立并行。

一种基于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。

优选的,取值操作访问完成的ready信号,load操作访问完成的ready 信号,以及store操作访问完成的ready信号均由外部主存储器的访问接口 连接输入。

与现有技术相比,本发明具有以下有益的技术效果:

本发明针对SPARCV8处理器由于存储器写操作错误而导致的延迟陷阱 以及它可能引发系统宕机的问题,通过相应的结构修改,最终实现了统一的 精确陷阱控制,取得的效果如下:

1)增强了系统的可靠性。原始结构下存储器写操作错误产生的是延迟 陷阱,它很有可能在无法完成陷阱嵌套功能时造成整个系统错误而呈现宕机 状态,这对空间应用领域来说存在严重的安全隐患,因为在空间环境中,单 粒子辐射造成主存储器数据位发生翻转的概率增加,更容易导致存储器写操 作错误而引发系统的宕机行为。本发明将写操作错误经过对写操作指令的分 别缓存控制,使其实现成一种精确陷阱,从根本上避免了处理器宕机的可能 性,保证了整个系统的稳定与可靠。

2)减小了陷阱处理的控制复杂度。在精确陷阱机制下,当前PC能够 准确表征发生存储器写操作错误的那条指令,并且在该写操作过程中,处理 器不会继续执行新指令,因此无需设法清除或恢复系统执行状态,极大的降 低了陷阱处理的控制复杂度。

3)设计修改简单且易于实施。本发明所进行的设计修改仅限于write buffer写操作的缓存控制以及指令流水线的推进控制电路,非常局部化,不 会影响处理器中的其它部件。

4)不增加额外的硬件功耗。本发明仅仅是根据不同的写操作类型而分 别进行流水线的推进控制,同时又去掉了writebuffer对字节和半字类型写 操作的缓存逻辑,因此在整个硬件资源上,不会产生额外的面积和功耗开 销。处理器的性能无明显损失。本发明在实现精确陷阱的同时,并不是完全 取消了writebuffer对写操作的缓存功能,对于所有单字和双字类型的写操 作,它仍然能够保证该写操作与处理器执行指令的并行性,因此处理器的整 体性能并没有受到过多影响。

附图说明

图1为现有技术中写操作错误产生延迟陷阱的过程示意图。

图2为本发明实例中所述的写操作错误产生精确陷阱的过程示意图。

图3为现有技术中写错误延迟陷阱导致宕机的时序图。

图4为本发明实例中所述的精确陷阱的流水线控制结构示意图。

图5为本发明实例中各种写操作访问外部主存储器的过程示意图。

具体实施方式

下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明 的解释而不是限定。

本发明涉及SPARCV8架构处理器中写操作错误产生精确陷阱的控制结 构与实现方法,具体的写错误是指字节和半字类型的写操作在更新外部主存 储器时所出现的数据校验错误。

本发明通过对SPARCV8处理器中主存储器写操作产生错误的机理进行 分析,并从控制结构上进行改进,将其实现成一种精确陷阱,从而来消除写 操作错误的延迟陷阱所导致的陷阱处理过于复杂、以及可能导致的处理器宕 机的问题;另外,本发明所实现的精确陷阱控制机制仍然能够有效利用原始 结构中writebuffer的写缓存功能,保留字和双字位宽的写操作与处理器执 行的并行化,不会导致明显的性能损失。其主要包括如下方面的改进。

(1)根据处理器发出的写操作位宽,有选择的将其缓存到writebuffer 中。SPARCV8指令集一共定义了四种位宽类型的存储器写操作,分别是字 节型、半字型、单字型和双字型的访问。对于处理器发出的单字或者双字的 写操作,直接缓存在writebuffer中,后续writebuffer会按照统一的先进先 出策略来实施对外部主存储器的写访问。对于字节或半字类型的写操作,则 不再将它缓存到writebuffer中,如果此时writebuffer中没有缓存其它的写 操作,则该字节或半字类型的写操作可直接进行主存储器的访问;否则,它 应该等到writebuffer处理完所有缓存的写操作之后才能访问主存储器。当 然,处理器发出的所有类型的写操作都会按照数据Cache的更新策略进行 Cache存储器的写更新,这与writebuffer的缓存控制过程是完全独立的、并 行的。

(2)实现指令流水线推进与否的精细化控制。指令流水线是否能继续 执行后续的新指令,由何时完成访存操作决定。在基于writebuffer结构的 SPARCV8处理器中,所有的写操作只要到达writebuffer,不论它对主存储 器的访问是否完成,都不影响指令流水线的推进,因此可以获得很高的性 能。由于进行存储器写操作的同时,流水线可以继续执行新指令,因此一旦 某个写操作发生错误,当前PC就不能标识与该写操作对应的那条指令,从 而引发一个延迟陷阱。本发明在实现精确陷阱时,并不是将所有类型的写操 作都统一对待,而是采用不同的流水线控制机制,对于单字或者双字的写操 作,由于它不会导致主存储器数据的校验错误,因此在它被缓存到write buffer的同时可以直接允许流水线继续推进;但对于字节或者半字的写操 作,有可能出现主存数据的校验错误,因此为了达到精确陷阱处理的目的, 流水线必须停顿下来,一直等到该字节或者半字类型的写操作对主存储器的 访问完成为止。

(3)通过存储器写操作反馈回来的错误信号产生精确陷阱。一般而 言,在可靠性要求比较高的应用环境中,处理器系统必须能够对外部主存储 器中的数据进行检错与纠错,以保证所访问数据的正确性。这种纠检错功能 通常采用ECC编码技术来实现,针对SPARCV8架构下任意一个32位的数 据,需要生成其对应的校验编码值。对于单字访问的写操作,其位宽刚好是 32位,可直接进行数据位的写入,同时将对应的校验位进行更新,因此它 不关心原始数据是否存在错误,本次写操作都能正常的完成对主存储器的更 新。对于双字访问的写操作,需要对两个连续的32位数据进行写更新,而 每个32位的数据则完全按照单字类型的方式进行访问,因此它也能正常的 完成执行。但是,对于字节和半字类型的写操作,其访问位宽分别只有8位 和16位,它们就不能直接去更新整个数据字中对应的那个字节或者半字, 因为校验位是对整个32位数据进行编码的,针对这种窄位宽的写操作类 型,就必须先把整个32位的数据都读出来,修改其中对应的那个字节或者 半字,然后才能对这个32位数据进行编码并重新写回到主存储器中。可以 看到,即便是一个针对字节或者半字的写操作,但它却隐含了一个针对整个 数据字的读校验访问,如果在进行该读访问的过程中,发现原始的数据存在 校验错误,特别是出现了无法纠正的错误时,该字节或者半字的写操作也就 无法正常完成对主存储器的更新操作了,此时就会产生一个错误信号传递给 流水线。由于在处理字节或半字类型的写操作时,流水线一直处于等待状 态,没有执行新的指令,因此当该写操作的错误信号返回时,当前PC能够 准确对应着发出该写操作的那条指令,于是产生的是一个精确陷阱,对它的 处理就变得非常简单。

具体的,如图1所示,现有技术中SPARCV8处理器由于写操作错误而 产生延迟陷阱的过程。每当执行一条store指令时,它对应的写操作一方面 去更新数据Cache,另一方面会被缓存在writebuffer中,如步骤①所示;在 步骤②中,writebuffer按照先进先出的顺序将其缓存的写操作依次发给外部 主存储器进行访问,与此同时,指令流水线不停顿,可以继续执行后面的新 指令;直到某个时刻,某一访问主存的写操作发生错误并返回了错误信号, 此时指令流水线已经执行到指令N处,如步骤③所示。显然这个写错误导 致的是一个延迟陷阱,处理器当前的PC已经不能代表之前的那条store指 令,这给陷阱处理带来了额外的复杂度。在这种结构下,writebuffer缓存 SPARCV8指令集定义的所有写操作,包括写字节类型(STB)、写半字类 型(STH)、写单字类型(STW)以及写双字类型(STD),它并不对这些操 作类型进行区分,而采用统一的缓存方式。

现有SPARCV8处理器由于写错误延迟陷阱而可能导致宕机的时序关系 如图3所示;起初,处理器在run状态下正常执行指令时,当遇到一个外部 中断或者内部陷阱时,处理器开始转入trap状态执行陷阱处理子程序,同 时在T1时刻,硬件会自动将陷阱使能位(ET)拉低,以禁止陷阱的嵌套; 如果用户程序想要支持陷阱嵌套功能,那么在进行相关的保存现场操作之后 就可以通过软件重新将ET位配置成高,也就是图中的时刻T3。然而,由 于延迟陷阱的存在,当处理器正在执行该陷阱处理子程序的过程中,它之前 执行的某一条store操作很可能此时才返回错误信号,而且刚好发生在ET 被重新拉高的T3时刻之前,即图中的T2时刻,这时该store操作产生的延 迟陷阱就不能被处理,从而使处理器进入error状态(系统错误模式),无法 继续执行指令,呈现宕机状态。

本发明将写错误的延迟陷阱实现成一种精确陷阱,保证了写操作的错误 信号返回到流水线时,处理器都不会执行其它程序而能立即响应这个写操作 产生的陷阱,完全避免了宕机的可能性。如图2所示,本发明将写操作错误 所导致的延迟陷阱实现成精确陷阱的过程。在步骤①中,流水线发出的写操 作直接去更新数据Cache,但是writebuffer只缓存STW/STD类型的写操 作,而不再缓存STB/STH类型的写操作。对于STW/STD操作,它仍按照 原来步骤②的方式访问主存,与此同时,指令流水线也可以继续执行后面的 新指令,由于这种类型的写操作不会导致主存数据的校验错误,因此即便流 水线继续推进也不会产生陷阱而造成影响。然而,对于STB/STH类型操 作,指令流水线必须停下来等待,直到writebuffer中之前缓存的STW/STD 操作(如果存在)全部执行完、该STB/STH操作执行完、以及它的错误信 号返回给流水线时,也就是在经历步骤②和步骤③之后,流水线才开始推 进。这样,由STB/STH操作导致的写错误就属于一个精确陷阱,处理器当 前的PC能够准确表征该store指令,从而极大的方便了陷阱的处理。

如图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信号有效时才 变为高,从而才能推进流水线的执行。

本优选实例中,分别以各种写操作访问外部主存储器的过程为例进行说 明,如图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操作仍然保留writebuffer缓存控制功能,使其访存操作能与流水 线执行指令并行起来,从而不至于对处理器的性能造成明显的损失。

本发明的内容已经成功应用于一种兼容SPARCV8架构的处理器中,并 且以该处理器作为主控单元设计实现了多款SoC芯片。本发明将存储器写 操作错误所导致的延迟陷阱实现成了一种精确陷阱,使陷阱处理更加容易, 同时它也从根本上消除了系统宕机的隐患,保证系统能稳定可靠的运转,而 执行性能也没有受到明显影响。整个设计结构非常清晰、控制逻辑也很简 单,可实施性较强。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号