存储检查的禁止装置及方法

文档序号:6451770阅读:178来源:国知局
专利名称:存储检查的禁止装置及方法
技术领域
本发明涉及微电子领域,特别涉及一种将可于指令层次选择性地禁止存储检查(store checking)的特征纳入现有微处理器指令集结构的技术。
随着使用上的爆炸性成长,在技术上也经历一相应的提高,其特征在于对下列项有着日益升高的要求更快的速度、更强的寻址能力、更快的内存存取、更大的操作数、更多种一般用途类型的运算(如浮点运算、单一指令多重数据(SIMD),条件移动等)以及附加的特殊用途运算(如数字信号处理功能及其它多媒体运算)。如此造就了该领域中惊人的技术进展,且都已应用于微处理器的设计,像扩充管线化(extensive pipelining)、超纯量结构(super-scalar architecture)、高速缓存结构、乱序处理(out-of-orderprocessing)、爆发式存取(burst access)机制、分支预测(branch predication)以及假想执行(speculative execution)。直言之,比起30年前刚出现时,现在的微处理器呈现出惊人的复杂度,且具备了强大的能力。
但与许多其它产品不同的是,有另一非常重要的因素已限制了,并持续限制着微处理器结构的演进。现今微处理器会如此复杂,一大部分得归因于这项因素,即旧有软件的兼容性。在市场考虑下,所多制造商选择将新的结构特征纳入最新的微处理器设计中,但同时在这些最新的产品中,又保留了所有为确保兼容于较旧的,即所谓(旧有)(legacy)应用程序所必需的能力。
这种旧有软件兼容性的负担,没有其它地方,会比在x86,兼容的微处理器的发展史中更加显而易见。大家都知道,现在的32/16位的虚拟模式(virmal-mode)x86微处理器,仍可执行1980年代所撰写的8位真实模式(real-mode)的应用程序。而熟悉此领域技术者也承认,有不少相关的结构“包袱”堆在x86结构中,只是为了支持与旧有应用程序及工作模式的兼容性。虽然在过去,研发者可将新开发的结构特征加入现有的指令集结构,但如今使用这些特征所凭借的工具,即可程序化的指令,却变得相当稀少。更简单他说,在某些重要的指令集中,已没有“多余”的指令,让设计者可以将更新的特征纳入一现有的结构中。
例如,在x86指令集结构中,已经没有任何一未定义的一字节大小的操作码状态尚未被使用的。在主要的一字节大小的x86操作码图中,全部256个操作码状态都已被现有的指令占用了。结果x86微处理器的设计者现在必须在提供新特征与保留旧有软件兼容性两者间作抉择。若要提供新的可程序化特征,则必须分派操作码状态给这些特征。若现有的指令集结构没有多余的操作码状态;则某些已存在的操作码状态必须重新定义,以提供给新的特征。因此,为了提供新的特征,就得牺牲旧有软件的兼容性了。
在现代的微处理器中,有些程序员希望纳入的特征,但在此前都因上述理由而无法实现。其中一项特征为在指令层次控制是否要禁止存储检查。
既然几乎所有的微处理器都使用了多阶段的管线结构,那就有可能会发生(事实上可能性极高),一个被提取到管线的指令很可能是一等待(pending)存储运算的目标,而该存储运算是进行至管线后面的阶段,但尚未执行完成。也就是,将要存储到一目的位置的数据还未被写入内存(即外部内存或内部高速缓存)。这在许多不同情况下都会发生。例如,该存储指令可能正进行到一个未用来写入内存的早期管线阶段。或者,数据可能被放在一等待存储缓冲器中,而该存储缓冲器正等待一适当的时间,以便写入内存,但存储指令却被允许离开管线。熟悉此领域技术者将察觉,管线结构对微处理器设计者提出各种挑战,其与循序执行指令的同步化有关,但这些指令有一部份却是以管线方式平行地执行。
存储检查是所有管线化微处理器的固有特征,其可确保在微处理器管线中的所有指令是应用程序员所要执行的指令。在这些微处理器管线内有提供各种装置与工具,以对照还未写入内存的等待存储事件,来检查所有进入管线的指令,并且当存储指令执行时,进一步对照存储指令的目的地址,来检查所有在前面管线阶段的指令。若检测到一等待存储事件,其目的地址对应(一般与高速缓存线的大小相对应)到一进入管线指令的位置,则管线会暂停工作,而该存储事件即被允许写入内存。当管线暂停工作时,管线内各阶段的指令便会停止前进,直到该停顿状态解除为止。在数据写入后,便从原来位置再次提取进入管线的指令,且被允许通过管线。在一存储指令执行时,若一指令在一先前的管线阶段被检测到,且其位置(即其指令指针(instructionpointer,IP))对应至该存储指令的目的地址,则微处理器中的同步逻辑会将管线工作暂停,并清空先前管线阶段之前的所有管线阶段。在存储指令写入其数据后,会重新填充管线。
存储检查是一项极为繁重的作业,其所需的硬件与微处理器内管线阶段的数目成正比。这就是为何存储目的与指令位置通常仅以高速缓存线的大小为单位来进行检查,如前所述。再者,由于虚拟地址转换为实体地址在本质上非常复杂,存储检查一般是使用虚拟地址而非实体地址来达成。
现在,程序员无法控制微处理器的存储检查特征。若程序员选用自我修正码(self-modifying code)的技术,则必须确定做为先前存储运算的存储目标的后续指令是对应的应用程序执行的。在来源码(source code)的层级,这是可以达成的,虽然这样一种程序技术并非理想。然而,微处理器并不执行来源码。自动化编译器从所提供的程序代码产生微处理器所需的指令流。所产生的指令流极可能由于特定编译器的排列(alignment)特性,而在同一高速缓存线内包含交错的程序代码与数据。因此,即使程序员提供了用来确保自我修正来源码的一致性的工具,不利于管线同步化(pipelinesynchronization)事件仍可能因程序代码的编译而产生。
程序员基于各种改进效果的考虑,可能想在一指令前安插一存储运算,用来修改指令的位置,但所要的执行顺序仍是执行该位置修改前的内容。这就是为什么现在存储检查不可能排除这样一种执行事件的顺序的原因。
因此,我们需要一种可将禁止存储检查的特征纳入一现有微处理器指令集结构的装置及方法,其中该指令集结构是被已定义的操作码完全占用,且纳入禁止特征能让一符合旧有规格的微处理器保留执行旧有应用程序的能力,同时对于任何特定指令,还提供应用程序员及编译器控制是否执行存储检查的能力。

发明内容
本发明是针对上述及其它公知技术的问题与缺点提供一种更好的技术,用来扩充微处理器的指令集,使其超越现有的能力,提供指令层级的存储检查禁止特征。在一具体实施例中,提供了一种可在微处理器内进行指令层级的存储检查控制的装置。该装置包括一提取逻辑(fetch logic)与一转译逻辑(translation logic)。该提取逻辑接收一延伸指令。该延伸指令具一延伸前置码(extended prefix)与一延伸前置码标记(extended prefix tag)。该延伸前置码指定要禁止延伸指令的存储检查。该延伸前置码标记则是一现有指令集内另一结构操作码。该提取逻辑对于延伸指令的相关等待存储事件,排除其存储检查。该转译逻辑连接至提取逻辑,将延伸指令转译成一微指令序列(micro instruction sequence),以指示该微处理器于一指定运算执行时,排除存储检查。
本发明的一个目的,是提出一种扩充现有指令集在一微处理器管线内选择性地禁止存储检查的微处理器机制。该微处理器机制具有一延伸指令与一转译器(translator)。该延伸指令是指定其相关的存储检查要被禁止,其中延伸指令包含现有指令集其中一选取的操作码,其后则接着一n位的延伸前置码。该选取的操作码指出延伸指令,而该n位的延伸前置码则指示要禁止存储检查。该转译器接收延伸指令,并产生一微指令序列,指示微处理器执行一指定运算,并排除指定运算执行时的相关存储检查。
本发明的另一目的在于提出一种为现有指令集增添禁止指令的存储检查特征的模块。该模块包括一扩展标记(escape tag),一存储检查禁止指定位(store check suppression specifier)、一转译逻辑及一延伸执行逻辑。该扩展标记由一提取逻辑接收,并指出一对应指令的附随部分是指定了所要执行的运算,其中该扩展标记为现有指令集内的一第一操作码。该存储检查禁止指定位连接至扩展标记,且为该附随部分其中之一,其指定的运算执行时要禁止存储检查。该转译逻辑连接至提取逻辑,用于产生一微指令序列,以指示微处理器执行该运算,并在微指令序列内指定要禁止存储检查。该延伸执行逻辑连接至转译逻辑,接收微指令序列,以不进行存储检查方式执行该运算。
本发明的另一目的,在于提供一种扩充现有指令集结构的方法,用于指令层级禁止存储检查。该方法包括提供一延伸指令,延伸指令包含一延伸标记及一延伸前置码,其中该延伸标记是现有指令集结构其中一第一操作码项;通过该延伸前置码指定延伸指令执行时,禁止存储检查,其中该延伸指令的其余部分指定所要执行的运算;以及禁止该延伸指令的相关存储检查。
本发明的前述目的、特征及优点,在配合下列说明及所附图示后,将可获得更好的理解
请参阅

图1,其是一相关技术的微处理器指令格式100的方框图。该相关技术的指令100具有数量可变的数据项101-103,每一项都设定成一特定值,合在一起便组成微处理器的一特定指令100,该特定指令100指示微处理器执行一特定运算,例如将两操作数相加,或者是将一操作数从内存移至一内部缓存器,或从内部缓存器移至内存。一般而言,指令100内的操作码项102指定了所要执行的特定运算,而选用(optional)的地址指定位项103位于操作码102之后,以指定关于特定运算的附加信息,像是如何执行运算,操作数位于何处等等。指令格式100并允许程序员在一操作码102前加上前置码项101。在操作码102所指定的特定运算执行时,前置码101用来指示是否使用特定的结构特征。一般来说,这些结构特征能应用于指令集中任何操作码102所指定运算的大部分。例如,现今前置码101存在于一些能使用不同大小操作数(如8位、16位、32位)执行运算的微处理器中。而当许多此类处理器被程序化为一预设的操作数大小时(比如32位),在其个别指令集中所提供的前置码101,仍能使程序员依据各个指令,选择性地取代(override)该预设的操作数大小(如为了产生16位的操作数)。可选择的操作数大小仅是结构特征的一例,在许多现代的微处理器中,这些结构特征能应用于众多可由操作码102加以指定的运算(如加、减、乘、布尔逻辑等)。
图1所示的指令格式100,有一为业界所熟知的范例,此即x86指令格式100,其为所有现代的x86-兼容微处理器所采用。更具体他说,x86指令格式100(也称为x86指令集结构100)使用了8位前置码101、8位操作码102以及8位地址指定位103。x86结构100也具有数个前置码101,其中两个取代了x86微处理器所预设的地址/数据大小(如操作码状态66H与67H),另一个则指示微处理器依据不同的转译规则来解译其后的操作码字节102(即前置码值0FH,其使得转译动作是依据所谓的二字节操作码规则来进行),其它的前置码101则使特殊运算重复执行,直至重复条件满足为止(即REP操作码F0H、F2H及F3H)。
现请参阅图2,其显示一表格200,用来描述一指令集结构的指令201如何对应至图1指令格式内一8位操作码字节102的位值。表格200呈现了一8位操作码图200的范例,其将一8位操作码项102所具有的最多256个值,关联到对应的微处理器操作码指令201。表格200将操作码项102的一特定值,譬如02H,映射至一对应的操作码指令201(即指令I02 201)。在x86操作码图的例子中,为此领域中人所熟知的;操作码值14H是映射至x86的进位累加(Add With Carry,ADC)指令,此指令将一8位的直接(immediate)操作数加至结构缓存器AL的内含值。熟悉此领域技术者也将发觉,上文提及的x86前置码101(即66H、67H、0FH、F0H、F2H及F3H)是实际的操作码值201,其在不同情况下,指定要将特定的结构延伸项应用于随后的操作码项102所指定的运算。例如,在操作码14H(正常情况下,是前述的ADC操作码)前加上前置码0FH,会使得x86处理器执行一“解压缩与插入低压缩的单精度浮点值”(Unpack and Interleave Low Packed Single,precisionFloating-point Values)运算,而非原本的ADC运算。诸如此x86例子所述的特征,在现代的微处理器中是允许实现的,这是因为微处理器内的指令转译逻辑是依序解译一指令100的项101-103。所以在过去,在指令集结构中使用特定操作码值作为前置码101,可允许微处理器设计者将不少先进的结构特征纳入兼容旧有软件的微处理器的设计中,而不会对未使用那些特定操作码状态的旧有程序,带来执行上的负面冲击。例如,一未曾使用x86操作码0FH的旧有程序,仍可在今日的x86微处理器上执行。而一较新的应用程序,借着运用x86操作码0FH作为前置码101,就能使用许多新进纳入的x86结构特征,如单一指令多重数据(SIMD)运算,条件移动运算等等。
尽管过去已通过指定可用的(即多余或未指派的)操作码值201作为前置码101(也称为结构特征标记/指针101或扩展指令101),来提供结构特征,但许多指令集结构100已因为一非常直接的理由,而无法提供功能上的强化所有可用/多余的操作码值已被用完,也就是,操作码图200中的全部操作码值已被结构化地指定。当所有可用的值被分派为操作码项102或前置码项101时,就没有剩余的操作码值可作为纳入新特征使用。这个严重的问题存在于现在的许多微处理器结构中,因而迫使设计者得在增添结构特征与保留旧有程序的兼容性两者间作抉择。
值得注意的是,图2所示的指令201是以一般性的方式表示(即I24、I86),而非具体指定实际的运算(如进位累加、减、互斥或)。这是因为,在一些不同的微处理器结构中,完全占用的操作码图200在结构上,已将纳入较新进展的可能性排除。虽然图2例子所提到的,是8位的操作码项102,熟悉此领域技术者仍将发觉,操作码102的特定大小,除了作为一特殊情况来讨论完全占用的操作码结构200所造成的问题外,其它方面与问题本身并不相干。因此,一完全占用的6位操作码图将有64个可结构化地指定的操作码/前置码201,并将无法提供可用/多余的操作码值作为扩充之用。
另一种替代做法,则并非将原有指令集完全废弃,以一新的格式100与操作码图200取代,而是只针对一部份现有的操作码201,以新的指令含意取代,如图2的操作码40H至4FH以这种混合的技术,微处理器就可以单独地以下列两种模式的一工作其中旧有模式利用操作码40V-4FH,是按旧有规则来解译,或者以另一种改良模式(enhanced mode)工作,此时操作码40H-4FH则按加强的结构规则来解译。此项技术能允许设计者将新特征纳入设计,然而,当符合旧有规格的微处理器在加强模式工作时,缺点仍旧存在,因为微处理器不能执行任何使用操作码40H-4FH的应用程序。因此,站在保留旧有软件兼容性的立场,兼容旧有软件/加强模式的技术并非一最佳选择。
然而,对于操作码空间已完全占用的指令集200,且该空间涵盖所有于符合旧有规格的微处理器上执行应用程序的情形,本案发明人已注意到其中操作码201的使用状况,虽然有些指令202是结构化地指定,但未用于能被微处理器执行的应用程序中。图2所述的指令IF1 202即为此现象的一例,事实上,相同的操作码值202(即F1H)是映射至未用于x86指令集结构的一有效指令202。虽然未使用的x86指令202是有效的x86指令202,其指示要在x86微处理器上执行一结构化地指定的运算,但它却未使用于任何能在现代x86微处理器上执行的应用程序。这个特殊的x86指令202被称为电路内仿真断点(In Circuit Emulation Breakpoint)(即ICE BKPT,操作码值为F1H),之前都是专门使用于一种现在已不存在的微处理器仿真设备中。ICE BKPT 202从未用于电路内仿真器之外的应用程序中,并且先前使用ICEBKPT 202的电路内仿真设备已不复存在。因此,在x86的情形下,本案发明人已在一完全占用的指令集结构200内发现一样工具,通过利用一有效但未使用的操作码202,以允许在微处理器的设计中纳入先进的结构特征,而不需牺牲旧有软件的兼容性。在一完全占用的指令集结构200中,本发明利用一结构化地指定但未使用的操作码202,作为一指针标记指出其后一n位前置码,因此允许微处理器设计者可将最多2n个最新发展的结构特征,纳入微处理器的设计中,同时保留与所有旧有软件完全,的兼容性。
本发明提供一n位的延伸存储检查禁止指定位前置码,以使用前置码标记/延伸前置码的概念,因而可允许程序员对于一延伸指令,从提取到执行完毕的整个过程,指定要禁止其对应的存储检查。本发明的另一实施例,则将该延伸指令与其后特定数量指令的执行,排除在微处理器的存储检查机制外。本发明现将参照图3至图10进行讨论。
现请参阅图3,其为本发明的延伸指令格式300的方框图。与图1所讨论的格式100非常近似,该延伸指令格式300具有数量可变的指令项301-305,每一项设定为一特定值,集合起来便组成微处理器的一特定指令300。该特定指令300指示微处理器执行一特定运算,像是将两操作数相加,或是将一操作数从内存搬移至微处理器的缓存器内。一般而言,指令300的操作码项302指定了所要执行的特定运算,而选用的地址指定位项303则位于操作码302后,以指定该特定运算的相关附加信息,像是如何执行运算、操作数所在的缓存器。用于计算来源/结果操作数的内存地址的直接与间接数据等等。指令格式300也允许程序员在一操作码302前加上前置码项301。在操作码30的所指定的特定运算执行时,前置码项301是用来指示是否要使用现有的结构特征。
然而,本发明的延伸指令300是前述图1指令格式100的一超集(superset),其具有两个附加项304与305,可被选择性作为指令延伸项,并置于一格式化延伸指令300中所有其余项301-303之前。这两个附加项304与305,其为延伸指令300的一部份,可让程序员指定是否要禁止或排除延伸指令300的存储检查。选用项304与305是一延伸指令标记304与一延伸存储检查禁止前置码305。该延伸指令标记304是一微处理器指令集内另一依据结构所指定的操作码。在一x86的实施例中,该延伸指令标记304,或称为扩展标记304,是用操作码状态F1H,其为早先使用的ICE BKPT指令。扩展标记304向微处理器逻辑指出,该延伸前置码305,或称延伸特征指定位305,是跟随在后,其中该延伸前置码305指定要禁止延伸指令300的存储检查。在一具体实施例中,扩展标记304指出,一对应延伸指令300的附随部分301-303及305指定了微处理器所要执行的运算。存储检查禁止指定位305,或称延伸前置码305,则指定执行该运算时,不需进行延伸指令300的存储检查。微处理器内的延伸执行逻辑执行该运算,但该运算是在排除任何存储检查的情形下执行。
此处将本发明的选择性地禁止存储检查的技术作个概述。一延伸指令是组态为指定一依据现有微处理器指令集执行的运算,其中该延伸指令执行时排除存储检查。该延伸指令包括该现有指令集的操作码/指令304其中的一位以及n位的延伸前置码305。所选取的操作码/指令作为一指针304,以指出指令300是一延伸特征指令300(即,其指定了微处理器结构的延伸项),而该n位的特征前置码305则指出要禁止的存储检查。在一具体实施例中,延伸前置码305具有八位的大小,可指定要禁止一指令及后续最多255个指令的存储检查,或是指定要禁止该指令与n个后续指令的存储检查,再加上八位延伸前置码305的剩余位值所指定的其它延伸特征。n位前置码的实施例,则最多可指定要禁止2n个存储检查,或是像前述禁止存储检查与其它延伸特征的各种组合。
现请参阅图4,一表格400显示依据本发明,禁止存储检查的指定如何映像至一8位延伸前置码实施例的位逻辑状态。类似于图2所讨论的操作码图200,图4的表格400呈现一8位的延伸前置码图400的范例,其将一8位延伸前置码项305的最多256个值,关联到一符合旧有规格微处理器中,一些指令所对应的存储检查禁止401(如E34、E4D等)。在一x86的具体实施例中,本发明的8位延伸特征前置码305是提供给存储检查禁止401(即E00-EFF)的指令层级控制用,这些存储检查禁止401乃现行x86指令集结构未能另行指定的。
图4所示的延伸特征401是以一般性的方式表示,而非具体指实际的特征,这是因为本发明的技术可应用于各种不同的结构延伸项401与特定的指令集结构。熟悉此领域技术者将发觉,许多不同的结构特征401,其中一些已于上文提及,可按此处所述的扩展标记304/延伸前置码305技术将其纳入一现有的指令集小图4的8位前置码实施例提供了最多256个不同的特征401,而一n位前置码实施例则具有最多2n个不同特征401的程序化选择。
现请参阅图5,其为解说本发明用来执行选择性的存储检查禁止运算的管线化微处理器500的方框图。微处理器500具有三个明显的阶段类型提取、转译及执行。提取阶段具有提取逻辑501,可从外部内存503提取指令。所提取的指令被送至延伸预取逻辑(extended pre-fetch logic)502。延伸预取逻辑502对送入的指令执行存储检查,并组态为检测其中是否具有如前述图3与图4的扩展标记与延伸前置码的存储检查禁止序列。经过存储检查的指令以前述方式加以同步化,且缓存于一指令高速缓存504中,并被送入一指令队列(instruction queue)505,供一转译逻辑506存取。该转译逻辑506是连接至一微指令队列508,其包含一延伸转译逻辑507。执行阶段则有一执行逻辑509,其内具有一延伸执行逻辑510。
根据本发明在工作时提取逻辑501从外部内存503提取格式化指令,并将这些指令送入延伸预取逻辑502中。延伸预取逻辑502执行存储检查,并于所送入指令受到管线后段的等待存储事件的影响时,起始其同步化动作。若检测到本发明的一延伸指令,则延伸预取逻辑502允许该延伸指令不需经过存储检查,即送至指令高速缓存504与指令队列505。所提取的指令是按执行顺序送至指令队列505。接着从指令队列505提取这些指令,送至转译逻辑506。转译逻辑506将每一送入的指令转译为一对应的微指令序列,以指示微处理器500去执行这些指令所指定的运算。根据本发明,延伸转译逻辑507检测那些具有延伸前置码标记的指令,以进行对应的延伸存储检查禁止前置码的转译动作。在一x86的实施例中,延伸转译逻辑507组态为检测其值为F1H的延伸前置码标记,其是x86的ICE BKPT操作码。延伸微指令字段则提供于微指令队列506中,以指定要禁止由该指令附随部分所指定的运算的存储检查。其它延伸转译逻辑507的实施例,则可于延伸微指令字段中,指定要禁止本发明的一第一指令与后续一定数量指令的存储检查。
微指令从微指令队列508被送至执行逻辑509,其中延伸执行逻辑510组态为执行微指令所指定的特定运算,并对照管线前段的所有指令的IP位置,来检查等待存储运算的目的地址。若一等待存储运算的目的地址与一先前阶段的IP位置相符,且该先前阶段的指令的延伸微指令字段并未指定要禁止存储检查,则延伸执行逻辑510将至该先前阶段为止的管线清空,并允许该等待存储运算写入其数据。在该存储事件完成后,再重新填充管线。然而,若该先前阶段指令的延伸微指令字段指定要禁止存储检查,则延伸执行逻辑510将排除管线的清空动作。因此,标记指令(tagged instruction)被允许通过管线执行,并不会因为一后续阶段的存储事件另行引发管线的同步化清空与重新填充,而被清空。
熟悉此领域技术者将发现,图5所示的微处理器500是现代的管线化微处理器50经过简化的结果。事实上,现代的管线化微处理器500最多可包含有20至30个不同的管线阶段。然而,这些阶段可概括地归类为方框图所示的三个阶段,因此,图5的方框图500可用来点明前述本发明实施例所需的必要组件。为了简明起见,微处理器500中无关的组件并没有显示出来,也未加以讨论。
现请参阅图6,其为本发明在一微处理器中,用来指定要禁止一延伸指令的相关存储检查的延伸前置码600的一示范实施例方框图。存储检查禁止前置码600具8位大小,且包括一禁止字段601。在一具体实施例中,禁止字段601指定要排除该延伸指令的相关存储检查。另一具体实施例则包含可指定要排除该延伸指令与后续最多255个指令的存储检查的禁止字段。禁止检查的指令的数量是由禁止字段来指示。
现请参阅图7,其为图5的微处理器内提取阶段逻辑700的方框图。提取阶段逻辑700包括一连接至外部内存705的预取缓冲器704,该预取缓冲器704提供预取指令至一延伸预取逻辑706。该延伸预取逻辑706具有一提取控制器709,后者是经由一禁用信号(disable signal)708耦合至一禁止序列检测器(suppress sequence detector)707。提取控制器709也连接至一具有延伸特征字段703的机器特定缓存器(machine specific register)702。禁止序列检测器707提供一控制信号SUPP至一等待存储评估逻辑(pending storeevaluation logic)710。该等待存储评估逻辑710对包含等待存储事件的目的地址的多个缓存器711进行存取。在一实施例中,这些缓存器711被称为较低线性指令指针(linear instruction pointer,LIP)链。缓存器711是以管线中的存储缓冲器(如复合写入缓冲器(write combine buffer)、因写缓冲器(write back buffer)等)通过总线715所提供的目的地址来进行更新。等待存储评估逻辑710经由SMC HIT信号耦合至一管线同步逻辑(pipelinesynchronization logic)712。该管线同步逻辑712提供一控制信号STALL 713至管线控制逻辑(图中未显示)。延伸预取逻辑706将所提取的指令送入一填充缓冲器(fill buffer)714,后者则连接至一指令高速缓存716。
实际工作上,在从内存705提取高速缓存线时,其是被送至预取缓冲器704。延伸预取逻辑706提取出高速缓存线的内容,并对照缓存器711的较低LIP链中,等待存储运算的目的地址,来检查所送入指令的IP地址。若等待存储评估逻辑710确定有一预取指令的IP地址与缓存器711内一等待存储目标相符,则SMC HIT信号被设定为真,因而驱使管线同步逻辑712将STALL信号713设为真,而开始一管线同步化事件。因此,管线暂停工作,直到该等待存储运算将其数据写入内存为止,接着,该预取指令重新被提取,并允许进入管线执行。若该预取指令的IP地址并未与任何存储目标相符,则延伸预取逻辑706将该预取指令送至填充缓冲器714,最后再送至指令高速缓存716。
禁止序列检测器707也对来自预取缓冲器704的高速缓存线内容进行评估,以检测其是否含有一指示要禁止存储检查的扩展标记/延伸前置码序列。若检测到该序列,则SUPP信号被设为真,以指示等待存储评估逻辑710不要对较低LIP链缓存器711进行评估,并允许对应的延伸指令送入填充缓冲器714。
在微处理器通电启动期间,机器特定缓存器702内的延伸字段703的状态是通过信号启动状态(signal power-up state)701决定,以指出该特定微处理器是否能处理本发明的用来禁止微处理器的存储检查的延伸指令。在一具体实施例中,信号701从一特征控制缓存器(图上未显示)导出,该特征控制缓存器则读取一于制造时即已组态的熔丝数组(fuse array)(未显示)。机器特定缓存器702将延伸特征字段703的状态送至提取控制器709及下述的其它逻辑。提取控制逻辑709则决定是否要对从预取缓冲器704所取得的高速缓存线数据进行评估,以检测存储检查禁止序列。提供这样的控制特征,可允许监督应用程序(如SIOS)允许/禁用微处理器的延伸执行特征。若延伸特征被禁用,则具有被选为延伸特征标记的操作码状态的指令,将如同任何其它指令般,对照等待存储事件来进行检查。提取控制器709则指示禁止序列检测器707通过将禁用信号708设为真,来禁用延伸序列的检测。
现请参阅图8,其为图5的微处理器内转译阶段逻辑800的方框图。转译阶段逻辑800具有一指令缓冲器804,按照本发明,其提供延伸指令至转译逻辑805。转译逻辑805是连接至一具有一延伸特征字段803的机器特定缓存器802,如前面图7部分所述。转译逻辑805具一转译控制器806,其提供一禁用信号807至一扩展指令检测器808及一延伸前置码转译器809。扩展指令检测器808连接至延伸转译器809及一指令转译器810。延伸转译逻辑809与指令转译逻辑810存取一控制只读存储器(ROM)811,其中存储了对应至某些延伸指令的模板(template)微指令序列。转译逻辑805也包含一微指令缓冲器812,其具有一操作码延伸项字段813、一微操作码字段814、一目的字段815、一来源字段816以及一位移字段817。
实际工作上,在微处理器通电启动期间,机器特定缓存器802内的延伸字段803的状态是通过信号启动状态801决定,以指出该特定微处理器是否能转译与执行本发明的延伸指令,如前面图8部分所述。机器特定缓存器802将延伸特征字段803的状态送至转译控制器806。转译控制逻辑806则决定从指令缓冲器804所取得的指令要依照延伸转译规则或是公用转译规则来进行转译。若延伸特征被禁用,则具有被选为延伸特征标记的操作码状态的指令,将依照公用转译规则来转译。在一x86的具体实施例中,选取操作码状态F1H作为标记,则在公用的转译规则下,遇到F1H将造成不合法的指令异常(exception)。若延伸转译被禁用,指令转译器810将转译所有送入的指令,并对微指令812的所有字段813至817进行组态。然而,在延伸转译规则下,若遇到标记,则会被扩展指令检测器808检测出来。扩展指令检测器808将指示延伸前置码转译器809依据延伸转译规则,转译该延伸指令的延伸前置码部分,并对操作码延伸项字段813进行组态,以指示要禁止该延伸指令所对应的微指令序列的存储检查。指令转译器810将转译该延伸指令的其余部分,并对微指令812的微操作码字段814、来源字段816、目的字段815以及位移字段817进行组态。某些特定指令将导致对控制ROM 811的存取,以获取对应的微指令序列模板。经过组态的微指令812被送至一微指令队列(未显示于图中),由处理器进行后续执行。
现请参阅图9,其为图5微处理器内的执行阶段逻辑900的方框图。该执行阶段逻辑900具一延伸存储逻辑(extended store logic)908,其连接至一数据高速缓存911与一总线单元912。总线单元912是用于指导一内存总线(图中未显示)上的内存存取作业(memory transaction)。依本发明,延伸存储逻辑908从微处理器前一阶段的一延伸微指令缓冲器901接收微指令,从数据缓冲器902接收一数据操作数,并从地址缓冲器903接收一目的地址操作数。延伸存储逻辑908包含一存储检查逻辑909,后者分别连接至多个线性IP缓存器905、一管线同步逻辑914(经由IP HIT信号)以及多个存储缓冲器910。这些线性IP缓存器905也称为较高LIP链,且每一缓存器905具有一IP字段906与一存储检查禁止字段907。较高LIP链905的内容包含位于前面管线阶段的指令的虚拟地址,这些内容是从前面管线阶段经由总线904依序送至较高LIP链905。
实际工作上,延伸存储逻辑908根据延伸微指令缓冲器901中的微指令的指示,通过总线单元912将操作数写入高速缓存911或外部内存。就延伸微指令所指示的写入/存储运算而言,存储检查逻辑909从地址缓冲器903接收运算所需的目的地址信息,并从缓冲器902接收所要存储的操作数。存储检查逻辑909接着将地址与数据送入存储缓冲器910,同时评估较高LIP链905的内容,以判断管线内是否有一指令,其虚拟IP地址与等待存储事件的目的地址相符。若在较高LIP链905中发现一相符的虚拟IP地址906,则存储检查逻辑909检视相关的存储检查禁止字段907。若相关字段907的内容指明要禁止存储检查,存储检查逻辑909便允许管线继续工作,不被中断。存储缓冲器910的内容则以符合该存储事件被赋予的内存特性,经由总线单元912写入高速缓存911或外部内存,其中该内存特性是按特定处理器(processor-specific)的结构常规所指定。然而,若存储检查逻辑909决定不要禁止一相符虚拟地址906的存储检查,则IP HIT信号会被设为真,以通知管线同步逻辑914开始一管线清空/重新填充的事件,该事件是进行至检测出该相符虚拟IP地址的管线阶段为止。管线同步逻辑914于是通过FLUSH信号915开始管线同步化事件。随着指令被处理,延伸微指令则与一管线时钟脉冲(未显示)同步,被送至微指令缓存器913。
此处对本发明的重要技术特征(如图3至图9部分所述)做个整理。通过使用一已跟据结构指定、但实际未使用的操作码作为标记,本发明可在一延伸指令中提供一种可程序化的标记。前置码组合。在一具体实施例中,前置码是用来指示一符合旧有规格的微处理器只禁止延伸指令的存储检查。在另一不同的实施例中,前置码则指示符合旧有规格的微处理器禁止延伸指令与后续一定数量指令的存储检查。当延伸指令被提取时,本发明的延伸预取逻辑检测是否有标记-前置码组合,并允许延伸指令送入处理器的指令高速缓存,而不对照等待存储事件进行任何存储检查。延伸转译逻辑则通过本发明的延伸微指令内的操作码延伸项字段,指明要禁止延伸指令的对应微指令序列的存储检查。操作码延伸项字段的内容是反映在较高LIP链中的存储检查禁止字段,如此当延伸存储逻辑处理一存储事件时,对于已指定要禁止存储检查的延伸指令而言,并不会启动同步化事件。
因此,本发明赋予程序员或自动化程序代码编译装置(automated codecompilation device)一种机制,可用来指示符合旧有规格的微处理器去禁止单一指令或指令群的存储检查,借以克服在相同高速缓存线内程序代码与数据的交错所造成的管线同步化清空问题,并提供一种更具弹性的工具,来实作包含自我修正码的算法(algorithm)。
现请参阅图10,其为描述本发明对可使程序员在指令层级取代微处理器内的存储检查过程的指令,进行提取、转译与执行的方法的工作流程图1000。流程开始于方框1002,其中一个组态有延伸特征指令的程序,被送至微处理器。流程接着进行至方框1004。
在方框1004中,下一个指令被提取,以进入微处理器的管线。流程接着进行至判断方框1008。
在判断方框1008中,对方框1004中所提取的指令进行评估,以判断是否包含一延伸扩展码-延伸前置码序列。在一x86的实施例中,该评估是用来检测其后为一禁止存储检查指定位项的操作码值F1(ICE BKPT)。若检测到该延伸扩展码与后续项,则流程进行至方框1010。若未检测到该延伸扩展码与延伸指定位,则流程进行至方框1006。
在方框1006中,以等待存储事件对方框1004中所提取的指令进行同步化。其中,对等待存储事件的目标进行评估,以判断是否与该提取指令的虚拟地址相符。若相符,则管线暂停工作,并允许这些等待存储事件完成动作。接着,该提取指令从外部记忆体重新被提取,流程则进行至方框1012。
在方框1010中,译码延伸指令的延伸前置码部分,以指定在一对应微指令序列通过管线时,要禁止该微指令序列的存储检查。存储检查的禁止,是通过组态本发明的延伸微操作码字段来指定。流程接着进行到方框1012。
在方框1012中,该指令的所有其余部分被转译,以决定一指定运算、缓存器操作数的位置、内存地址指定位以及跟据现有微处理器指令集,由前置码所指定的现有结构特征的使用。流程接着进行至方框1014。
在方框1014中,一延伸微指令序列被组态为指定运算及其对应的操作码延伸项。流程接着进行至方框1016。
在方框1016中,多个微指令序列,其中包含方框1014所组态的延伸微指令序列,按转译装置的处理顺序,送至一微指令队列,由微处理器执行。流程接着进行至判断方框1018。
在判断方框1018中,下一个微指令序列由本发明的一延伸执行逻辑进行提取。该延伸执行逻辑评估该下个微指令序列,以判断是否有指定一存储事件。若没有,则流程进行至方框1028。若有,则流程进行至方框1020。
在方框1020中,由于已指定一存储事件,存储检查逻辑便查询本发明的一较高LIP链。流程接着进行至判断方框1022。
在判断方框1022中进行评估,以判断该存储事件的目的地址,是否与管线中位在该存储事件后的指令的任何虚拟IP地址相符。若在该LIP链中发现一相符的虚拟IP地址,则流程进行至判断方框1024。若未发现,则流程进行至方框1028。
在判断方框1024中,评估该相符虚拟IP地址的相关存储检查禁止字段,以判断是否要禁止相关指令的存储检查。若是,则流程进行至方框1028,若否,则流程进行至方框1026。
在方框1026中,延伸执行逻辑指出,该相关指令需要进行一管线同步化事件。流程接着进行至方框1028。
在方框1028中,执行该下个微指令序列所指定的运算。流程接着进行至方框1030。
在方框1030中,本方法完成。
虽然本发明及其目的。特征与优点已详细叙述,其它实施例也可包含在本发明的范围内。例如,本发明已就如下的技术加以叙述利用已完全占用的指令集结构内一单一、未使用的操作码状态作为标记,以指出其后的延伸特征前置码。但本发明的范围就任意一方面来看,并不限于已完全占用的指令集结构,或未使用的指令,或是单一标记。相反地,本发明涵盖了未完全映像的指令集、具已使用操作码的实施例以及使用一个以上的指令标记的实施例。例如,考虑一没有未使用操作码状态的指令集结构。本发明的一具体实施例包含了选取一作为扩展标记的操作码状态,其中选取标准是按市场因素而决定。另一具体实施例则包含使用操作码的一特殊组合作为标记,如操作码状态7FH的连续出现。因此,本发明的本质是在于使用一标记序列,其后则为一n位的延伸前置码,可允许程序员/编译员于一现有的微处理器指令集中,指定要禁止个别指令或指令群的存储检查。
此外,虽然上文是利用微处理器为例来解说本发明及其目的。特征和优点,熟悉此领域技术者仍可察觉,本发明的范围并不限于微处理器的结构,而可涵盖所有形式的可程序化装置,如信号处理器、工业用控制器(industrialcontroller)。阵列处理机及其它同类装置。
权利要求
1.一种可在一微处理器内进行指令层级的存储检查控制的装置,其特征在于,它包含一提取逻辑,用来接收一延伸指令,其中该延伸指令包含一延伸前置码,用于指定要禁止该延伸指令的存储检查;以及一延伸前置码标记,是一现有指令集内另一结构操作码;其中该提取逻辑排除延伸指令的相关等待存储事件的存储检查;以及一转译逻辑,连接至提取逻辑,用于将延伸指令转译成一微指令序列,以指示微处理器在一指定运算执行时,排除存储检查。
2.如权利要求1所述的装置,其特征在于所述的延伸指令还包含现有指令集的指令项。
3.如权利要求2所述的装置,其特征在于所述的指令项指定微处理器所要执行的指定运算,且指定运算执行时将另行执行存储检查。
4.如权利要求3所述的装置,其特征在于若在一特定指令完成执行前,检测到一存储事件,其中存储事件的一目的地址与特定指令的位置相符,则一存储检查逻辑将另行从微处理器清除特定指令与所有后续提取的指令,并在存储事件完成后,从特定指令的位置开始重新提取指令。
5.如权利要求1所述的装置,其特征在于所述的提取逻辑包含延伸预取逻辑,组态为检测延伸前置码与延伸前置码标记,并允许该延伸指令在不需检查这些等待存储事件的情形下,进行至转译逻辑。
6.如权利要求5所述的装置,其特征在于一等待存储评估逻辑另行评估微处理器管线中前面的指令,以检测这些等待存储事件,若发现这些等待存储事件的一目的地址与一所提取指令的位置相符,则该存储检查逻辑暂停提取指令的执行,以允许更新目的地址。
7.如权利要求1所述的装置,其特征在于所述的延伸前置码包含一禁止字段,用来指定要禁止延伸指令的相关存储检查。
8.如权利要求1所述的装置,其特征在于所述的延伸前置码包含一禁止字段,用来指定要禁止延伸指令与一指定数量的后续指令的相关存储检查。
9.如权利要求1所述的装置,其特征在于所述的转译逻辑包含一扩展指令检测逻辑,用于检测该延伸前置码标记;一指令转译逻辑,用来决定该指定运算,并在微指令序列内指定该指定运算;以及一延伸转译逻辑,连接至扩展指令检测逻辑与指令转译逻辑,用来在微指令序列内指定,要在指定运算执行时,排除存储检查。
10.一种扩充一现有指令集以在一微处理器管线内选择性地禁止存储检查的微处理器机制,其特征在于,它包含一延伸指令,组态为指定延伸指令的相关存储检查要被禁止,其中该延伸指令包含现有指令集其中一选取的操作码,其后则接着一n位的延伸前置码,该选取的操作码指出延伸指令,而该n位的延伸前置码则指示要禁止存储检查;以及一转译器,组态为接收延伸指令,产生一微指令序列,以指示一微处理器执行一指定运算,并在指定运算执行时,排除相关的存储检查。
11.如权利要求10所述的微处理器机制,其特征在于所述的延伸指令还包含其余指令项,组态为指定该指定运算。
12.如权利要求10所述的微处理器机制,其特征在于所述的n位前置码包含一禁止字段,组态为指定要禁止延伸指令的存储检查。
13.如权利要求10所述的微处理器机制,其特征在于所述的n位前置码包含一禁止字段,组态为指定要禁止该延伸指令与一指定数量的后续指令的存储检查。
14.如权利要求10所述的微处理器机制,其特征在于所述的转译器包含一扩展指令检测器,用来检测该延伸指令内的选取操作码;一指令转译器,用来转译延伸指令的其余部分,以决定该指定运算;以及一延伸前置码转译器,连接至扩展指令检测器及指令转译器,用来转译n位的延伸前置码,并在微指令序列内指定要禁止存储检查。
15.如权利要求10所述的微处理器机制,其特征在于还包含一延伸预取逻辑,用来从内存接收延伸指令,检测选取的操作码与n位的延伸前置码,并在不检查等待存储事件是否与该延伸指令的位置相符的情形下,允许延伸指令送至转译器。
16.一种为一现有指令集增添禁止指令的存储检查特征的模块,其特征在于,它包含一扩展标记,由一提取逻辑接收,并指出一对应指令的附随部分是指定了所要执行的一运算,其中扩展标记为现有指令集内的一第一操作码;一存储检查禁止指定位,连接至扩展标记,且为附随部分其中之一,用来指定在运算执行时要禁止存储检查;一转译逻辑,连接至提取逻辑,用于产生一微指令序列,以指示一微处理器执行该运算,并在微指令序列内指定要禁止存储检查;以及一延伸执行逻辑,连接至转译逻辑,接收该微指令序列,并以不进行存储检查的方式执行运算。
17.如权利要求16所述的模块,其特征在于所述的转译逻辑包含一扩展标记检测逻辑,用来检测扩展标记,并指示该附随部分的转译动作需跟据延伸转译常规(conventions);以及一译码逻辑,连接至该扩展标记检测逻辑,用来跟据现有指令集的常规,执行指令的转译动作,并跟据延伸转译常规执行对应指令的转译,以允许该运算以不进行存储检查的方式执行。
18.一种扩充一现有指令集结构的方法,以在指令层级禁止存储检查,该方法包含提供一延伸指令,该延伸指令包含一延伸标记及一延伸前置码,其中延伸标记是现有指令集结构其中一第一操作码项;通过该延伸前置码指定在延伸指令执行时禁止存储检查,其中该延伸指令的其余部分指定所要执行的一运算;以及禁止该延伸指令的相关存储检查。
19.如权利要求18所述的方法,其特征在于所述的指定动作包含使用现有指令集结构的一第二操作码项来指定运算。
20.如权利要求18所述的方法,其特征在于还包含将该延伸指令转译成一微指令序列,微指令序列是指示一延伸执行逻辑以不进行存储检查的方式执行该运算。
21.如权利要求20所述的方法,其特征在于所述的转译延伸指令的动作包含在一转译逻辑内检测该延伸标记;以及按照延伸转译规则译码延伸前置码与延伸指令的其余部分,以产生微指令序列。
全文摘要
本发明提供一种装置及方法,用于扩充微处理器上指令集,以在指令层级选择性地禁止存储检查。该装置包括一提取逻辑与一转译逻辑。提取逻辑接收一延伸指令。该延伸指令具有一延伸前置码与一延伸前置码标记。该延伸前置码指定要禁止延伸指令的存储检查。该延伸前置码标记则为一现有指令集内另一结构操作码。提取逻辑排除了延伸指令的相关等待存储事件的存储检查。转译逻辑连接至提取逻辑,用来将延伸指令转译成一微指令序列,以指示微处理器在一指定运算执行时,排除存储检查。
文档编号G06F9/38GK1453702SQ03122280
公开日2003年11月5日 申请日期2003年4月25日 优先权日2002年10月29日
发明者G·葛兰·亨利, 罗德·E·胡克 申请人:智慧第一公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1