16/32位混合架构指令预取缓冲器装置的制作方法

文档序号:6434103阅读:269来源:国知局
专利名称:16/32位混合架构指令预取缓冲器装置的制作方法
技术领域
本发明涉及一种指令预取缓冲器装置,尤其涉及一种16/32位混合架构指令预取缓冲器装置,通过一个表项缓存一条16位指令或者半条32位指令来简化混合架构指令取指,并提升取指性能。
背景技术
微处理器的设计中,指令取指是性能上重要的瓶颈,指令的取指影响流水线前级的指令供给,如果指令取指发生堵塞,则会影响下级流水线的执行,流水线会出现气泡,造成流水线下级空闲的状况,这对资源和性能都是极大地浪费。流水线缓冲器的出现缓解了这个问题,当后级流水线发生堵塞,前级流水可以把信息暂存入缓冲器后继续工作,降低了流水线停滞的概率。目前,为了满足在低成本的要求下获得最大化的性能,处理器的指令集开始出现了变长指令集结构。这些指令集中,基本分为两种指令长度,指令长度较长的指令具有更多的操作数个数,更长的立即数位数等,可以提供更高的性能,而指令长度较小的指令具有较高的代码密度,占据更小的存储空间,可以降低开发的成本。因此采用两种长度的指令混合编程的架构,可以在性能和成本之间达到很好的平衡。目前主流的技术就是16/32位混合架构。但是由于指令的长度不一样,因此取指会很复杂,需要在取得指令的同时判断该指令是哪种长度的指令,然后才能确定下一次取指的地址。这样,会大大增加取指逻辑的复杂性,增加设计的风险。

发明内容
为了克服现有处理器的指令取指过程中流水线堵塞造成性能损失、对变长指令取指过程中逻辑过于复杂,设计风险性高的问题,本发明提供一种16/32位混合架构指令预取缓冲器装置,可以实现流水线缓冲功能,同时简化对变长指令取指的复杂度,提升性能同时降低成本。为了解决上述技术问题采用的技术方案一种16/32位混合架构指令预取缓冲器装置,包括循环缓冲器,用于连接于指令存储器的输出端,将从指令存储器中取出的数据作为指令缓存起来,指令有16位和32位两种长度,缓存过程中新指令以循环的方式覆盖缓冲器内最旧的指令;数据选通器,用于连接于循环缓冲器输出端,在循环缓冲器和指令存储器之间选通一路获得指令,发往下级流水线,在指令旁路时选通指令存储器,否则选通循环缓冲器;控制模块,用于检测循环缓冲器状态,控制模块连接循环缓冲器,维护循环缓冲器中指令的创建,控制模块连接数据选通器,为数据选通器提供选通信号,控制指令信息发送到下级流水线;当控制模块监测循环缓冲器中没有指令时,控制模块控制数据选通器选通指令存储器通路,指令存储器中的指令将绕过循环缓冲器直接被发射到流水线后级;当控制模块监测到循环缓冲器中存在指令时,控制模块控制数据选通器选通循环缓冲器输出的指令。进一步,每次从指令存储器中取出数据的位宽与所访问的指令存储器的宽度相同,其中有效数据的位宽根据访问地址的字对齐状况不同而变化。再进一步,所述循环缓冲器以16位指令长度为单位缓存指令,所述单位缓存指包含的表项数目是可配置的。更进一步,循环缓冲器的每个表项容纳一条16位指令或半条32位指令。作为优选的一种方案控制模块包括第一创建指针单元、第二创建指针单元、第一发射指针单元、第二发射指针单元和预解码单元,所述第一创建指针单元和第二创建指针单元指示当前从指令存储器中获取的数据在循环缓冲器中创建的位置,第二创建指针单元在第一创建指针单元基础上偏移一个表项;第一发射指针单元和第二发射指针单元为当前从循环缓冲器中读取的目标指令的位置,第二发射指针单元在第一发射指针单元的基础上偏移一个表项。进一步,若向循环缓冲器中创建32位数据时,在第一创建指针单元和第二创建指针单元指向的表项中各创建16位数据,同时第一创建指针单元和第二创建指针单元分别向后移动两个表项;若向循环缓冲器中创建16位数据时,在第一创建指针单元指向的表项中创建16位数据,第二创建指针单元对应的表项不创建内容,同时第一创建指针单元和第二创建指针单元分别向后移动一个表项。再进一步,当数据选通器从循环缓冲器中选通32位指令时,将第一发射指针单元和第二发射指针单元指向的表项中的数据组合成32位指令输出,同时第一发射指针单元和第二发射指针单元分别向后移动两个表项;当数据选通器从循环缓冲器中选通16位指令时,将第一发射指针单元指向的表项中的16位指令输出,同时第一发射指针单元和第二发射指针单元分别向后移动一个表项。控制核心通过预译码单元译码对从指令存储器中取出的数据进行预译码,判断当前指令为16位或者32位指令。作为优选的另一种方案在循环缓冲器为空的情况下,若从指令存储器中取出的数据中包括1条16位或者32位指令,该指令不进入循环缓冲器,直接进入后级流水线。或者是在循环缓冲器为空的情况下,若从指令存储器中取出的数据中包含1条 16位指令及其他指令,16位指令不进入循环缓冲器,直接进入后级流水线,剩余指令进入循环缓冲器。再或者是,在循环缓冲器为空的情况下,若从指令存储器中取出的数据中包含半条32位指令,则半条32位指令先进入循环缓冲器缓存,等待后续半条指令进入循环缓冲器后一起发射到后级流水线。本发明和现有的流水线缓冲器技术和变长指令取指技术相比,具有以下有益效果1)节省资源,本发明中循环缓冲器中每个表项只缓存变长指令中指令长度较小的指令,指令长度较大的指令通过两个表项分开缓存,和传统的一个表项存储一条指令的流水线缓冲器相比,对硬件资源的利用更加充分;2)提高性能,本发明通过指令的旁路,当循环缓冲器中没有指令的时候可以将指令直接发送到下级流水线,不需要经过循环缓冲器,省去了在循环缓冲器中缓存的一个周期; 3)降低设计复杂度,本发明通过循环缓冲器将指令取指地址的计算和16位32位指令的判断分隔开来,不需要在取得指令的同时马上译码判断指令的长度从而计算得到下一条指令的取指地址,而是只需要通过简单的对循环缓冲器的维护,便可判断16位32位指令并且发往下级流水线。


图1为本发明第图2为本发明第图3为本发明第图4为本发明第图5为本发明第图6为本发明第图7为本发明第符号说明循环缓冲器10控制模块14第一创建指针单元18第一发射指针单元22指令存储器沈
实施例的结构图。
实施例中循环缓冲器表项的结构图。 实施例对指令进行旁路的第一种情况的示意图。 实施例对指令进行旁路的第二种情况的示意图。 实施例对指令进行旁路的第三种情况的示意图。 实施例在不能旁路时对指令的处理情况的示意图< 实施例在处理一段程序的情况的示意图。
数据选通器12 指令预译码单元16 第二创建指针单元20 第二发射指针单元M 指令译码单元观。
具体实施例方式下面结合附图对本发明做进一步说明。参照图1 图7,一种16/32位混合架构指令预取缓冲器装置,包括循环缓冲器10,用于连接于指令存储器沈的输出端,将从指令存储器沈中取出的数据作为指令缓存起来,指令有16位和32位两种长度,缓存过程中新指令以循环的方式覆盖缓冲器内最旧的指令;数据选通器12,用于连接于循环缓冲器输出端,在循环缓冲器和指令存储器之间选通一路获得指令,发往下级流水线,在指令旁路时选通指令存储器,否则选通循环缓冲器;控制模块14,用于检测循环缓冲器状态,控制模块连接循环缓冲器,维护循环缓冲器中指令的创建,控制模块连接数据选通器,为数据选通器提供选通信号,控制指令信息发送到下级流水线;当控制模块14监测循环缓冲器10中没有指令时,控制模块14控制数据选通器12 选通指令存储器26通路,指令存储器沈中的指令将绕过循环缓冲器10直接被发射到流水线后级;当控制模块14监测到循环缓冲器10中存在指令时,控制模块14控制数据选通器 12选通循环缓冲器10输出的指令。每次从指令存储器中取出数据的位宽与所访问的指令存储器的宽度相同,其中有
6效数据的位宽根据访问地址的字对齐状况不同而变化。所述循环缓冲器以16位指令长度为单位缓存指令,所述单位缓存指包含的表项数目是可配置的。循环缓冲器的每个表项容纳一条16位指令或半条32位指令。请参照图1所示,为本发明第一实施例的结构图。本装置在处理器流水线中位于指令存储器26的出口端。本装置将指令存储器沈中取出的指令进行缓存后发送至指令译码单元观进行译码,或者将指令存储器沈中取出的指令不经过缓存,直接旁路至指令译码单元观进行译码。指令存储器26的宽度为32位,每次访问指令存储器沈都会得到32位数据。指令存储器26中的指令有16位指令和32位指令两种。访问指令存储器沈的地址有字对齐和半字对齐两种,若访问地址是字对齐的,则从指令存储器26中取出32位数据都是有效数据,数据的组织形式有四种一条32位指令、两条16位指令、一条16位指令和半条32位指令、半条32位指令和另一个半条32位指令(分别属于不同的32位指令);若访问地址是半字对齐的,则从指令存储器沈中取出32位数据中只有16位有效数据,数据的组织形式有两种一条16位指令、半条32位指令。本装置包括一循环缓冲器10,一数据选通器12,一控制模块14。循环缓冲器10以表项为基本单位,表项的数目是可配置的,本实施例中表项的数目为八,每个表项中可以存储一条16位指令或者半条32位指令,以及伴随指令的一些控制信息。控制模块14通过第一创建指针单元18和第二创建指针单元20将从指令存储器沈中取出的有效数据创建到循环缓冲器10中,第二创建指针单元20在第一创建指针单元18偏移一位的基础上得到。 若往循环缓冲器10中创建32位数据,则将32位数据拆分为两个16位数据,分别存储到第一创建指针单元18和第二创建指针单元20所指的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动两位,指向下一次将要创建数据的表项;若往循环缓冲器 10中创建16位数据,则将16位数据直接存储到第一创建指针单元18所指的表项中,第二创建指针单元20对应的表项不创建内容,同时第一创建指针单元18和第二创建指针单元 20分别向后移动一位,指向下一次将要存储数据的表项。控制模块14通过第一发射指针单元22和第二发射指针单元M从循环缓冲器10中选取数据,拼装出具体指令后输出到数据选通器12的输入端,第二发射指针单元M在第一发射指针单元22偏移一位的基础上得到。若从循环缓冲器10中发射32位指令,则第一发射指针单元22和第二发射指针单元M 所指的表项中的数据组合成一条32位指令输出到数据选通器12的输入端,同时第一发射指针单元22和第二发射指针单元M分别向后移动两位,指向下一次将要发射数据的表项; 若从循环缓冲器10中发射一条16位指令,则第一发射指针单元22所指的表项中的数据作为一条16位指输出到数据选通器12的输入端,同时第一发射指针单元22和第二发射指针单元M分别向后移动一位,指向下一次将要发射数据的表项。另外,控制模块14通过第一发射指针单元22检测循环缓冲器10的状态,因为第一发射指针单元22所指向的表项中的数据是循环缓冲器10中最老的数据,所以当第一发射指针单元22所指向的表项中的数据无效时,表示循环缓冲器10中没有指令。循环缓冲器10中数据的创建和发射都采用循环的方式,从循环缓冲器10的一端开始创建和发射,随着数据的创建和发射,第一创建指针单元18、第二创建指针单元20、第一发射指针单元22、第二发射指针单元M向循环缓冲器 10的另一端移动,直至移动到循环缓冲器10到另一端端口之后,第一创建指针单元18、第二创建指针单元20、第一发射指针单元22、第二发射指针单元M重新回到循环缓冲器10 的起始端开始创建和发射数据,创建的新数据依次覆盖之前的旧数据,如此循环往复。运行过程中,第一发射指针单元22、第二发射指针单元M不能超过第一创建指针单元18、第二创建指针单元20,因为数据需要先创建到循环缓冲器10中才能被发射,最极端的情况是第一发射指针单元22、第二发射指针单元M和第一创建指针单元18、第二创建指针单元20 重合,表示循环缓冲器中没有指令可以被发射。控制模块14通过指令预译码单元16对指令存储器26中取出的数据进行预译码,得出数据中是否至少包括一条完整的16位或者32 位指令。控制模块14通过数据选通器12从指令存储器沈和循环缓冲器10中选通一路获得具体指令,发往指令译码单元观进行译码。控制模块14判断下属条件一、译码得出从指令存储器26中取出的数据中至少包括一条指令;二、此时循环缓冲器10中没有指令。若同时满足上述两个条件,则对指令进行旁路,控制模块14控制数据选通器12选通指令存储器26输出的指令,将指令直接旁路到下级流水线,若此时从指令存储器沈中取出的数据包含多于一条指令,则控制模块14将剩余的数据通过创建指针创建到循环缓冲器10中。若上述两个条件中至少有一个不满足,则不能对指令进行旁路,控制模块14通过第一创建指针单元18和第二创建指针单元20将从指令存储器沈中取出的数据创建到循环缓冲器10 中。请参照图2所示,为本发明第一实施例中循环缓冲器10中一个表项的结构图。本实施例中一个表项包含18比特信息。其中16比特为从指令存储器沈中取出的指令数据, 有可能是一条16位指令,或者半条32位指令。表项中包含一比特异常信息,用来表示在访问指令存储器26时发生的异常信息,本实施例中表示发生访问错误异常。表项中包含一比特的有效位信息,用来表示该表项中的数据是有效的,否则不管表项中其他比特为什么值, 均是无效的,该有效位在控制模块14通过第一创建指针单元18或者第二创建指针单元20 将数据创建到表项中时被置位,在控制模块14通过第一发射指针单元22或者第二发射指针单元M将数据从表项中发射出去时被清零。请参照图3所示,为本发明第一实施例在跳转到字对齐地址时对一条16位指令进行旁路时的一种情况。图3(A)为一段程序,当程序发生跳转,转移到该程序段时,因为程序段的入口地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码,根据图3(A)中所示的程序段指令排布情况,通过预译码得出此32位数据的组织形式为一条16位指令(指令1)和半条32位指令(指令i)。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中没有有效数据,表示循环缓冲器10中没有指令。因此,满足指令旁路的两个条件。如图3(B)所示,控制模块14控制数据选通器12选通指令内存的数据,将其中的一条完整指令,即指令1发往指令译码单元观。因为从指令存储器26取出的数据中除了被旁路的指令外,还包含其他数据,这里具体为半条指令2,控制模块14将这半条指令2创建到第一创建指针单元18所指向的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动一位,指向下一次将要创建数据的表项。请参照图4所示,为本发明第一实施例在跳转到字对齐地址时对一条32位指令进行旁路时的一种情况。图4(A)为一段程序,当程序发生跳转,转移到该程序段时,因为程序段的入口地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码,根据图3 (A)中所示的程序段指令排布情况,通过预译码得出此32位数据的组织形式为一条32位指令(指令1)。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中没有有效数据,表示循环缓冲器10中没有指令。因此,满足指令旁路的两个条件。如图4(B)所示,控制模块14控制数据选通器12选通指令内存的数据,将其中的一条完整指令,即指令1发往指令译码单元观。因为从指令存储器沈取出的数据中除了被旁路的指令外,不包含其他数据,所以没有数据创建到循环缓冲器10中。请参照图5所示,为本发明第一实施例在跳转到非字对齐地址时对一条16位指令进行旁路时的一种情况。图5(A)为一段程序,当程序发生跳转,转移到该程序段时,因为程序段的入口地址是非字对齐的,所以从指令存储器26中取出16位有效数据,控制模块14 通过指令预译码单元16对取出的16位数据进行预译码,根据图5(A)中所示的程序段指令排布情况,通过预译码得出此16位数据的组织形式为一条16位指令(指令1)。控制模块 14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中没有有效数据,表示循环缓冲器10中没有指令。因此,满足指令旁路的两个条件。 如图5(B)所示,控制模块14控制数据选通器12选通指令内存的数据,将其中的一条完整指令,即指令1发往指令译码单元观。因为从指令存储器沈取出的数据中除了被旁路的指令外,不包含其他数据,所以没有数据创建到循环缓冲器10中。请参照图6所示,为本发明第一实施例在跳转到非字对齐地址时不能对一条32位指令进行旁路时的一种情况。图6(A)为一段程序,当程序发生跳转,转移到该程序段时,因为程序段的入口地址是非字对齐的,所以从指令存储器沈中取出16位有效数据,控制模块 14通过指令预译码单元16对取出的16位数据进行预译码,根据图6 (A)中所示的程序段指令排布情况,通过预译码得出此16位数据的组织形式为半条32位指令(指令1)。取出的数据没有包含一条完整的指令,因此,不满足指令旁路条件。如图6 (B)所示,控制模块14将这半条指令1创建到第一创建指针单元18所指向的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动一位,指向下一次将要创建数据的表项。请参照图7所示,为本发明第一实施例在处理一段程序的情况。如图7㈧所示, 该段程序分为两个小段,第一段的入口地址是字对齐的,第二段的入口地址是非字对齐的。当程序跳转到第一段程序时,因为入口地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码, 根据图7(A)中所示的程序段指令排布情况,通过预译码得出此32位数据的组织形式为一条16位指令(指令1)和半条32位指令(指令i)。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中没有有效数据,表示循环缓冲器10中没有指令。因此,满足指令旁路的两个条件。控制模块14控制数据选通器12选通指令内存的数据,将其中的一条完整指令,即指令1发往指令译码单元观。因为从指令存储器26取出的数据中除了被旁路的指令外,还包含其他数据,这里具体为半条指令2,如图7(B)所示,控制模块14将这半条指令2创建到第一创建指针单元18所指向的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动一位,指向下一次将要创建数据的表项。下一周期,因为访问地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码,根据图7 (A)中所示的程序指令排布情况,通过预译码得出此32位数据的组织形式为半条32位指令(指令 2)和另外半条32位指令(指令幻。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中有有效数据,表示循环缓冲器10 中有指令。所以不能对指令进行旁路。这时第二发射指针单元M所指向的表项中没有有效的数据,因此整个循环缓冲器10中只有半条指令(指令2、,因此也不能从循环缓冲器10 中选取指令发射。控制模块14控制数据选通器12不选通循环缓冲器10以及指令存储器沈中的任何一路,即没有指令发射到指令译码单元观。如图7(C)所示,控制模块14将半条指令2和半条指令3创建到第一创建指针单元18和第二创建指针单元20所指向的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动两位,指向下一次将要创建数据的表项。当程序跳转到第二段程序时,因为入口地址是非字对齐的,所以从指令存储器沈中取出16位有效数据,控制模块14通过指令预译码单元16对取出的16位数据进行预译码,根据图7(A)中所示的程序指令排布情况,通过预译码得出此32位数据的组织形式为半条32位指令(指令16)。取出的数据没有包含一条完整的指令,所以不能对指令进行旁路。 如图7(D)所示,控制模块14将半条指令16创建到第一创建指针单元18所指向的表项中, 同时第一创建指针单元18和第二创建指针单元20分别向后移动一位,指向下一次将要创建数据的表项。下一周期,因为访问地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码,根据图7 (A)中所示的程序指令排布情况,通过预译码得出此32位数据的组织形式为半条32位指令(指令 16)和一条16位指令(指令17)。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中有有效数据,表示循环缓冲器10中有指令。所以不能对指令进行旁路。这时第二发射指针单元M所指向的表项中没有有效的数据,因此整个循环缓冲器10中只有半条指令(指令16),因此也不能从循环缓冲器10 中选取指令发射。控制模块14控制数据选通器12不选通循环缓冲器10以及指令存储器 26中的任何一路,即没有指令发射到指令译码单元观。如图7(E)所示,控制模块14将半条指令16和一条指令17创建到第一创建指针单元18和第二创建指针单元20所指向的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动两位,指向下一次将要创建数据的表项。下一周期,因为访问地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码,根据图7 (A)中所示的程序指令排布情况,通过预译码得出此32位数据的组织形式为一条32位指令(指令 18)。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中有有效数据,表示循环缓冲器10中有指令。所以不能对指令进行旁路。如图7(F)所示,控制模块14控制数据选通器12从循环缓冲器10中选取指令发射到指令译码单元28,因为此时第一发射指针单元22和第二发射指针单元M所指向的表项中的数据可以合成一条完整的32位指令,即指令16,所以从循环缓冲器10中发射一条 32位指令,同时第一发射指针单元22和第二发射指针单元M分出向后偏移两位,指向下一次将要发射数据的表项。控制模块14将一条指令18创建到第一创建指针单元18和第二创建指针单元20所指向的表项中,同时第一创建指针单元18和第二创建指针单元20分别向后移动两位,指向下一次将要创建数据的表项。 经过两个周期,第一创建指针单元18和第二创建指针单元20已经在移动到循环缓冲器10的一端端口之后又重新回到起始端口开始创建数据,一次覆盖已经被发射的旧数据,如图7(G)所示。此时因为访问地址是字对齐的,所以从指令存储器沈中取出32位有效数据,控制模块14通过指令预译码单元16对取出的32位数据进行预译码,根据图 7(A)中所示的程序指令排布情况,通过预译码得出此32位数据的组织形式为一条32位指令(指令20)。控制模块14通过指令第一发射指针单元22检测循环缓冲器10状态,此时第一发射指针单元22指向的表项中有有效数据,表示循环缓冲器10中有指令。所以不能对指令进行旁路。如图7(G)所示,控制模块14控制数据选通器12从循环缓冲器10中选取指令发射到指令译码单元28,因为此时第一发射指针单元22和第二发射指针单元M所指向的表项中的数据可以合成一条完整的32位指令,即指令18,所以从循环缓冲器10中发射一条32位指令,同时第一发射指针单元22和第二发射指针单元M分别向后移动两位, 指向下一次将要发射数据的表项。控制模块14将一条指令20创建到第一创建指针单元18 和第二创建指针单元20所指向的表项中,同时第一创建指针单元18和第二创建指针单元 20分别向后移动两位,指向下一次将要创建数据的表项。
1权利要求
1.一种16/32位混合架构指令预取缓冲器装置,其特征在于所述指令预取缓冲器装置包括循环缓冲器,用于连接于指令存储器的输出端,将从指令存储器中取出的数据作为指令缓存起来,指令有16位和32位两种长度,缓存过程中新指令以循环的方式覆盖缓冲器内最旧的指令;数据选通器,用于连接于循环缓冲器输出端,在循环缓冲器和指令存储器之间选通一路获得指令,发往下级流水线,在指令旁路时选通指令存储器,否则选通循环缓冲器;控制模块,用于检测循环缓冲器状态,控制模块连接循环缓冲器,维护循环缓冲器中指令的创建,控制模块连接数据选通器,为数据选通器提供选通信号,控制指令信息发送到下级流水线;当控制模块监测循环缓冲器中没有指令时,控制模块控制数据选通器选通指令存储器通路,指令存储器中的指令将绕过循环缓冲器直接被发射到流水线后级;当控制模块监测到循环缓冲器中存在指令时,控制模块控制数据选通器选通循环缓冲器输出的指令。
2.如权利要求1所述的16/32位混合架构指令预取缓冲器装置,其特征在于每次从指令存储器中取出数据的位宽与所访问的指令存储器的宽度相同,其中有效数据的位宽根据访问地址的字对齐状况不同而变化。
3.如权利要求1所述的16/32位混合架构指令预取缓冲器装置,其特征在于所述循环缓冲器以16位指令长度为单位缓存指令,所述单位缓存指包含的表项数目是可配置的。
4.如权利要求1所述的16/32位混合架构指令预取缓冲器装置,其特征在于循环缓冲器的每个表项容纳一条16位指令或半条32位指令。
5.如权利要求1 4之一所述的16/32位混合架构指令预取缓冲器装置,其特征在于 所述控制模块包括第一创建指针单元、第二创建指针单元、第一发射指针单元、第二发射指针单元和预解码单元,所述第一创建指针单元和第二创建指针单元指示当前从指令存储器中获取的数据在循环缓冲器中创建的位置,第二创建指针单元在第一创建指针单元基础上偏移一个表项;第一发射指针单元和第二发射指针单元为当前从循环缓冲器中读取的目标指令的位置,第二发射指针单元在第一发射指针单元的基础上偏移一个表项。
6.如权利要求5所述的16/32位混合架构指令预取缓冲器装置,其特征在于若向循环缓冲器中创建32位数据时,在第一创建指针单元和第二创建指针单元指向的表项中各创建16位数据,同时第一创建指针单元和第二创建指针单元分别向后移动两个表项;若向循环缓冲器中创建16位数据时,在第一创建指针单元指向的表项中创建16位数据,第二创建指针单元对应的表项不创建内容,同时第一创建指针单元和第二创建指针单元分别向后移动一个表项。
7.如权利要求5所述的16/32位混合架构指令预取缓冲器装置,其特征在于当数据选通器从循环缓冲器中选通32位指令时,将第一发射指针单元和第二发射指针单元指向的表项中的数据组合成32位指令输出,同时第一发射指针单元和第二发射指针单元分别向后移动两个表项;当数据选通器从循环缓冲器中选通16位指令时,将第一发射指针单元指向的表项中的16位指令输出,同时第一发射指针单元和第二发射指针单元分别向后移动一个表项。
8.如权利要求1 4之一所述的16/32位混合架构指令预取缓冲器装置,其特征在于在循环缓冲器为空的情况下,若从指令存储器中取出的数据中包括1条16位或者32位指令,该指令不进入循环缓冲器,直接进入后级流水线。
9.如权利要求1 4之一所述的16/32位混合架构指令预取缓冲器装置,其特征在于 在循环缓冲器为空的情况下,若从指令存储器中取出的数据中包含1条16位指令及其他指令,16位指令不进入循环缓冲器,直接进入后级流水线,剩余指令进入循环缓冲器。
10.如权利要求1 4之一所述的16/32位混合架构指令预取缓冲器装置,其特征在于在循环缓冲器为空的情况下,若从指令存储器中取出的数据中包含半条32位指令,则半条32位指令先进入循环缓冲器缓存,等待后续半条指令进入循环缓冲器后一起发射到后级流水线。
全文摘要
一种16/32位混合架构指令预取缓冲器装置,包括循环缓冲器,用于将从指令存储器中取出的数据作为指令缓存起来,指令有16位和32位两种长度,缓存过程中新指令以循环的方式覆盖缓冲器内最旧的指令;数据选通器,用于在循环缓冲器和指令存储器之间选通一路获得指令,发往下级流水线,在指令旁路时选通指令存储器,否则选通循环缓冲器;当控制模块监测循环缓冲器中没有指令时,控制数据选通器选通指令存储器通路,指令存储器中的指令将绕过循环缓冲器直接被发射到流水线后级;当监测到循环缓冲器中存在指令时,控制数据选通器选通循环缓冲器输出的指令。本发明实现流水线缓冲功能,同时简化对变长指令取指的复杂度,提升性能同时降低成本。
文档编号G06F9/38GK102436367SQ20111028770
公开日2012年5月2日 申请日期2011年9月26日 优先权日2011年9月26日
发明者孟建熠, 李春强, 郭宇波, 陈晨 申请人:杭州中天微系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1