一种基于移位的指令提取与缓冲方法及超标量微处理器
技术领域
本发明涉及微处理器领域,具体涉及一种基于移位的指令提取与缓冲方法及超标量微处理器。
背景技术
超标量微处理器可以每周期发送多条指令给各个执行单元,藉以增进处理器的总处理能力,这就要求微处理器流水线前段的取指单元与译码单元必须有效率的提供指令流给执行单元。因此,微处理器的取指单元必须具备相应的逻辑电路用以处理进入流水线的指令字节流,判定指令字的起始边界并提取出有效的指令字,使其尽早进入译码单元或者指令缓冲队列。
在处理器设计中,传统的技术是通过选择器实现有效指令的提取和缓冲,由于字节流较长且缓冲队列较深,所以提取逻辑和缓冲逻辑也相对复杂。如图 1所示,现有技术指令提取的步骤如下:(1)根据地址偏移和预测跳转信息确定指令行上有效指令的起始位置,(2)从指令行上提取有效的指令字并计算出指令数;(3)指令缓冲时,根据有效指令数选择相应指令条数的缓冲操作(1~8条),结合缓冲队列的写指针,将提取出的有效指令按照先后顺序依次写入缓冲队列。难点在于有效指令条数不固定,提取与缓冲时均不能以固定方式去处理,导致选择逻辑相对复杂。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于移位的指令提取与缓冲方法及超标量微处理器,本发明能够保证取指的高效,也使得提取逻辑和缓冲逻辑更为简单,降低了硬件的开销。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于移位的指令提取与缓冲方法,实施步骤包括:
1)针对指令字构建有效字掩码;
2)根据指令字偏移量对指令行进行右对齐式移位;
3)根据有效字掩码对移位后的指令行按字宽进行拆分并提取有效字;
4)将有效字排序进入缓冲块序列;
5)由缓冲项写使能控制缓冲块序列写入缓冲队列。
优选地,步骤1)的详细步骤包括:
1.1)判断分支预测跳转标志的值类型,如果分支预测跳转标志的值为0则跳转执行步骤1.2)处理不带有分支的无分支指令;如果分支预测跳转标志的值为1则跳转执行步骤1.3)处理带有分支的带分支指令;
1.2)根据指令字偏移量,首先在掩码行上确定出有效掩码的起始位置,且该起始位置之前的掩码为无效掩码,逐位置0,该起始位置之后为有效掩码,逐位置1;其次通过对掩码行进行循环右移操作,将起始位置之前的无效掩码全部移除,将其高位置为无效;最后得到无分支指令的有效字掩码;
1.3)根据预测偏移量,首先在掩码行上确定出分支指令掩码的位置,且该位置之前的掩码为有效掩码,逐位置1,该位置之后为无效掩码,逐位置0;最后得到带分支指令的有效字掩码。
优选地,步骤2)的详细步骤包括:根据指令字偏移量,首先在指令行上确定出有效字的起始位置,且该起始位置之前的指令字为无效字,该起始位置之后为有效字;其次通过对指令行进行右移操作将起始位置之前的指令字即无效字全部移除,并给指令行高位补x,将其置为无效字;最后得到移位后的新构指令行。
优选地,步骤3)的详细步骤包括:首先有效字掩码与新构指令行上的指令字是对应关系,掩码为1表示对应指令字有效;反之,表示对应指令字无效;其次,对有效字进行拆分提取成单个指令字。
优选地,步骤4)的详细步骤包括:根据写指针的低位段将有效的指令字进行循环左移后填入缓冲块序列,使得第一个有效字与缓冲队列写指针起始位置对齐。
优选地,步骤5)的详细步骤包括:先将有效字掩码进行0位扩展,再根据缓冲队列写指针的值将扩展后的指令字掩码进行循环左移、将有效字掩码与缓冲队列写指针对齐,生成缓冲项写使能控制缓冲块序列写入缓冲队列。
本发明还提供一种超标量微处理器,包括指令提取和缓冲逻辑,所述指令提取和缓冲逻辑被编程以执行本发明基于移位的指令提取与缓冲方法的步骤。
和现有技术相比,本发明具有下述优点:本发明基于移位的指令提取与缓冲方法通过指令行移位、指令字排序和以缓冲块序列写入缓冲队列的设计,比传统方式的逻辑更为简单且易实现,能够保证取指的高效,也使得提取逻辑和缓冲逻辑更为简单,降低了硬件的开销。
附图说明
图1是现有技术的指令字提取与缓冲的示意图。
图2是本发明实施例方法的基本原理示意图。
图3是本发明实施例中的指令行移位的示意图
图4是本发明实施例中的构建有效字掩码示意图。
图5是本发明实施例中的无分支指令译码表。
图6是本发明实施例中的带分支指令译码表。
图7是本发明实施例中的指令提取示意图。
图8是本发明实施例中的指令缓冲示意图。
图例标号说明:102、预测分支跳转标志;103、预测偏移量;104、指令字偏移量;105、指令字偏移量;106、256bits指令行;107、构建有效字掩码模块;108、指令行移位模块;109、有效字掩码v0~v7;110、新构指令行;112、带分支指令的有效字掩码;113、无分支指令的有效字掩码;115、二路选择器;116、指令字掩码生成单元;117、分支预测掩码生成单元;121、指令提取模块;122、i0指令;123、i1指令;124、i2指令;125、i3指令;126、i4指令;127、i5指令;128、i6指令;129、i7指令;130、缓冲队列写指针bit[4:0];131、缓冲项写使能;132、缓冲块序列;133、缓冲队列;140、指令缓冲模块;141、待译码指令1;142、待译码指令2;143、待译码指令3;144、待译码指令4。
具体实施方式
如图2所示,本实施例基于移位的指令提取与缓冲方法的实施步骤包括:
1)针对指令字构建有效字掩码,掩码为真则指令字有效,反之则指令字无效;
2)根据指令字偏移量对指令行进行右对齐式移位;
3)根据有效字掩码对移位后的指令行按字宽进行拆分并提取有效字;
4)将有效字排序进入缓冲块序列;
5)由缓冲项写使能控制缓冲块序列写入缓冲队列。
本实施例基于移位的指令提取与缓冲方法根据分支预测信息提供的预测偏移量和指令高速缓存提供的指令字偏移量构建有效字掩码,将指令高速缓存中读取到的指令行基于指令字偏移量进行右对齐式移位,移位会将无效字从指令行移除,得到新构指令行是向右对齐的指令字行,便于指令提取与之后进入译码或者缓冲队列,由有效字掩码控制对新构指令行按字宽进行指令字拆分提取,根据缓冲队列写指针的低三位将有效字进行排序后放入缓冲块序列(排序的作用是将第一个有效字与缓冲队列的写起始位置对齐),再根据写指针和有效字掩码生成缓冲项写使能,最后由缓冲项写使能控制缓冲块序列写入缓冲队列,本实施例基于移位的指令提取与缓冲方法包含指令行移位、指令字排序和以缓冲块序列写入缓冲的设计,比传统方式的逻辑更为简单且易实现,降低了硬件的开销。
参见图2,预测分支跳转标志102、预测偏移量103来自于分支预测模块,指令字偏移量104、105和指令行106来自于指令高速缓存,待译码指令141/142/143/144是将发送至译码单元的指令字。本发明按功能划分为4个模块,分别是构建有效字掩码模块107,指令行移位模块108,指令提取模块121和指令缓冲模块140;按时序划分为3个阶段,分别是S1阶段——构建有效字掩码与指令行移位,S2阶段——指令提取,S3阶段——指令缓冲。下文以256bits的指令行提取与32项缓冲队列深度为例,对本发明提供的基于移位的指令提取与缓冲方法进行详细的步骤描述。S1阶段分两模块,构建有效字掩码107和指令行移位108。
本实施例中,步骤1)的详细步骤包括:
1.1)判断分支预测跳转标志的值类型,如果分支预测跳转标志的值为0则跳转执行步骤1.2)处理不带有分支的无分支指令;如果分支预测跳转标志的值为1则跳转执行步骤1.3)处理带有分支的带分支指令;根据分支预测跳转标志来选择上文所述的无分支指令的有效字掩码和带分支指令的有效字掩码,取二者中一个作为最终的有效字掩码,具体是分支预测跳转标志为1,即有效时,选带分支指令的有效字掩码;分支预测跳转标志为0,即无效时,选无分支指令的有效字掩码;
1.2)根据指令字偏移量,首先在掩码行上确定出有效掩码的起始位置,且该起始位置之前(即右侧)的掩码为无效掩码,逐位置0,该起始位置之后(即左侧含自身)为有效掩码,逐位置1;其次通过对掩码行进行循环右移操作,将起始位置之前(即右侧)的无效掩码全部移除,将其高位(即最左侧)置为无效;最后得到无分支指令的有效字掩码;
1.3)根据预测偏移量,首先在掩码行上确定出分支指令掩码的位置(即有效指令在指令行上的结束位置),且该位置之前(即右侧含自身)的掩码为有效掩码,逐位置1,该位置之后(即左侧)为无效掩码,逐位置0;最后得到带分支指令的有效字掩码。
步骤1)即为构建有效字掩码模块107执行的阶段。本实施例中,构建有效字掩码模块107接收到来自指令高速缓存的指令字偏移量104和来自分支预测模块的预测偏移量103与预测分支跳转标志102,如图4所示,在指令字掩码生成单元116中生成无分支指令的有效字掩码113,在分支预测掩码生成单元117中生成了带分支指令的有效字掩码112,再经预测分支跳转标志102从二者中选其一作为有效字掩码109,输出到指令提取模块。
指令字掩码生成单元116主要是对指令字偏移量进行译码。如图5无分支指令译码表中无分支指令字掩码,其每一行的8位掩码分别对应着指令行上的指令字,掩码为1表示对应的指令字有效,掩码为0表示对应指令字无效。指令字偏移量不仅决定了无分支指令字掩码的生成,也控制了指令行的移位,下文中对掩码行的移位处理,是为了达到与指令行移位匹配的目的,由于指令行将无效指令字移除,故掩码行将相应无效字掩码移除。
当指令字偏移量为3’b000时,起始位置在指令字0即指令行上的有效字为指令字0~7,无效字为无,掩码行为8’b1111_1111,不需要移位;
当指令字偏移量为3’b001时,起始位置在指令字1即指令行上的有效字为指令字1~7,无效字为指令字0,此时掩码行为8’b1111_1110,需循环右移一位,移位后掩码行为8’b0111_1111;
当指令字偏移量为3’b010时,起始位置在指令字2即指令行上的有效字为指令字2~7,无效字为指令字0~1,此时掩码行为8’b1111_1100,需循环右移两位,移位后掩码行为8’b0011_1111;
当指令字偏移量为3’b011时,起始位置在指令字3即指令行上的有效字为指令字3~7,无效字为指令字0~2,此时掩码行为8’b1111_1000,需循环右移三位,移位后掩码行为8’b0001_1111;
当指令字偏移量为3’b100时,起始位置在指令字4即指令行上的有效字为指令字4~7,无效字为指令字0~3,此时掩码行为8’b1111_0000,需循环右移四位,移位后掩码行为8’b0000_1111;
当指令字偏移量为3’b101时,起始位置在指令字5即指令行上的有效字为指令字5~7,无效字为指令字0~4,此时掩码行为8’b1110_0000,需循环右移五位,移位后掩码行为8’b0000_0111;
当指令字偏移量为3’b110时,起始位置在指令字6即指令行上的有效字为指令字6~7,无效字为指令字0~5,此时掩码行为8’b1100_0000,需循环右移六位,移位后掩码行为8’b0000_0011;
当指令字偏移量为3’b111时,起始位置在指令字7即指令行上的有效字为指令字7,无效字为指令字0~6,此时掩码行为8’b1000_0000,需循环右移七位,移位后掩码行为8’b0000_0001。
掩码行移位后即为无分支指令的有效字掩码113。
分支预测掩码生成单元117主要是对预测偏移量进行译码。如图6带分支指令译码表中带分支指令字掩码,其每一行的8位掩码分别对应着指令行上的指令字,掩码为1表示对应的指令字有效,掩码为0表示对应指令字无效,左起首位的1即是预测分支指令的位置,最左边掩码对应最高地址段指令字,最右边掩码对应最低地址段指令字,预测偏移量103是指分支预测器预测到被提取的指令行中分支指令与有效指令起始位置的偏移量,由于分支指令与其之前的指令有效,分支指令之后的指令字均无效,所以它决定有效指令的终止位置,进而也就确定了有效字在提取的指令行上的范围和有效指令数。
当预测偏移量为3’b000时,则预测分支指令位置在指令字0即指令行上的指令字1~7都为无效字,则掩码行为8’b0000_0001;
当预测偏移量为3’b001时,则预测分支指令位置在指令字1,即指令行上的指令字2~7都为无效字,指令字0~1有效,掩码行为8’b0000_0011;
当预测偏移量为3’b010时,则预测分支指令位置在指令字2,即指令行上的指令字3~7都为无效字,指令字0~2有效,掩码行为8’b0000_0111;
当预测偏移量为3’b011时,则预测分支指令位置在指令字3,即指令行上的指令字4~7都为无效字,指令字0~3有效,掩码行为8’b0000_1111;
当预测偏移量为3’b100时,则预测分支指令位置在指令字4,即指令行上的指令字5~7都为无效字,指令字0~4有效,掩码行为8’b0001_1111;
当预测偏移量为3’b101时,则预测分支指令位置在指令字5,即指令行上的指令字6~7都为无效字,指令字0~5有效,掩码行为8’b0011_1111;
当预测偏移量为3’b110时,则预测分支指令位置在指令字6,即指令行上的指令字7都为无效字,指令字0~6有效,掩码行为8’b0111_1111;
当预测偏移量为3’b111时,则预测分支指令位置在指令字7,即指令行上的指令字0~7都为有效字,掩码行为8’b1111_1111;
至此生成了带分支指令的有效字掩码112。
如图4所示,将无分支指令的有效字掩码113和带分支指令的有效字掩码112作为2:1MUX选择器115的输入,经预测分支跳转标志102控制输出。当预测分支跳转标志102有效即为1时,选带分支指令的有效字掩码112作为有效字掩码109;当预测分支跳转标志102无效即为0时,选无分支指令的有效字掩码112作为有效字掩码109。
本实施例中,步骤2)的详细步骤包括:根据指令字偏移量,首先在指令行上确定出有效字的起始位置,且该起始位置之前(即右侧)的指令字为无效字,该起始位置之后(即左侧含自身)为有效字;其次通过对指令行进行右移操作将起始位置之前(即右侧)的指令字即无效字全部移除,并给指令行高位(即最左侧)补x,将其置为无效字;最后得到移位后的新构指令行。
步骤2)即为指令行移位模块108执行的阶段,本实施例中,指令行移位模块108接收到来自指令高速缓存的256bits的指令行106和指令字偏移量105,对指令行106进行移位生成新构指令行110输出给指令提取模块。如图3所示0~7分别表示指令行上指令字编号,7为最高地址段指令字,0为最低地址段指令字,指令字偏移量表示所选取的指令行上有效字起始的位置且起始位置之前的指令字为无效字。
当指令字偏移量为3’b000时,起始位置在指令字0即指令行上的有效字为指令字0~7,无效字为无即指令行无需右移或可理解为右移零个字;
当指令字偏移量为3’b001时,起始位置在指令字1即指令行上的有效字为指令字1~7,无效字为指令字0,此时需要将指令行右移一个字宽度并给高位补x使其为无效字;
当指令字偏移量为3’b010时,起始位置在指令字2即指令行上的有效字为指令字2~7,无效字为指令字0~1,此时需要将指令行右移两个字宽度并给高位补x使其为无效字;
当指令字偏移量为3’b011时,起始位置在指令字3即指令行上的有效字为指令字3~7,无效字为指令字0~2,此时需要将指令行右移三个字宽度并给高位补x使其为无效字;
当指令字偏移量为3’b100时,起始位置在指令字4即指令行上的有效字为指令字4~7,无效字为指令字0~3,此时需要将指令行右移四个字宽度并给高位补x使其为无效字;
当指令字偏移量为3’b101时,起始位置在指令字5即指令行上的有效字为指令字5~7,无效字为指令字0~4,此时需要将指令行右移五个字宽度并给高位补x使其为无效字;
当指令字偏移量为3’b110时,起始位置在指令字6即指令行上的有效字为指令字6~7,无效字为指令字0~5,此时需要将指令行右移六个字宽度并给高位补x使其为无效字;
当指令字偏移量为3’b111时,起始位置在指令字7即指令行上的有效字为指令字7,无效字为指令字0~6,此时需要将指令行右移七个字宽度并给高位补x使其为无效字。
指令行向右移位并给高位补x后得到新构指令行110,其中有效的指令字均向低地址对齐,高地址位是无效字。
本实施例中,步骤3)的详细步骤包括:首先有效字掩码与新构指令行上的指令字是对应关系,掩码为1表示对应指令字有效;反之,表示对应指令字无效;其次,对有效字进行拆分提取成单个指令字。
步骤3)对应前述S2阶段。如图7所示,S2阶段主要完成指令提取模块121的执行,接收新构指令行110和步骤1)的有效字掩码109,对新构指令行110进行拆分。新构指令行110和有效字掩码109一一对应,如虚线圈所示当新构指令行的指令字7对应的有效字掩码为1时,表示该指令字7有效,可以从指令行上拆分提取并按顺序被寄存到i6指令128中,反之有效字对应掩码为0,将不能被拆分提取并寄存到i7指令129中。指令行上的指令字7被寄存到i6指令,指令字6被寄存到i5指令,以此类推。
上述过程详情如下,首先i0指令122~i7指令129实则与指令行的指令字0~指令字7是对应的,即i0指令接收指令字0的数据;其次根据指令字偏移量 104定位指令行上有效指令的起始位置并将起始位置之前的指令字通过指令行右移从指令行上剔除得到了新构指令行110,所以当无效字0被移除时,整个指令行上有效的指令字都将右移并占据到新的位置,即有效字1就出现在指令字0的位置(其他同理可推,不赘述),i0指令依旧是接收指令字0的数据,只是此时指令字0上的数据已经被替换成指令字1的数据。如上操作的好处是将指令行上无效字移除,并将有效字向右对齐(低地址对齐)为有效字进入译码单元或缓冲队列,提供了有效的顺序的指令流,使指令字进入缓冲队列的更为简便。
本实施例中,步骤4)的详细步骤包括:根据写指针的低位段将有效的指令字进行循环左移后填入缓冲块序列,使得第一个有效字与缓冲队列写指针起始位置对齐。
本实施例中,步骤5)的详细步骤包括:先将有效字掩码进行0位扩展(ZeroExtend),再根据缓冲队列写指针的值将扩展后的指令字掩码进行循环左移、将有效字掩码与缓冲队列写指针对齐,生成缓冲项写使能控制缓冲块序列写入缓冲队列。
S3阶段主要完成指令进入译码单元或缓冲队列,对应前述步骤4)和步骤5)。
如图8所示,指令缓冲模块140接收来自指令提取模块121的有效字i0 122~i7129,先根据缓冲队列写指针130低3位将指令字i0 122~i7 129进行循环左移,然后填入缓冲块序列132即b0~b7中,目的是为了确定第一条有效字与缓冲队列写起始位置对齐。然后根据缓冲队列写指针130和有效字掩码109生成缓冲项写使能131如图8,将有效字掩码109先进行ZeroExtend形成32bits的数据,再进行循环左移,左移的宽度由缓冲项写指针130决定,通过此方法生成32bits的缓冲项写使能131。根据缓冲项写使能131将缓冲块序列132写入缓冲队列133,其中0~31表示项的编号。例如缓冲队列写指针130为5’b01011,那缓冲队列写指针130的低3位为3’b011,先将有效字i0 122~i7 129循环左移三次完成排序,立即锁存到缓冲块序列中,即指令i0进入b3,i1进入b4,i2进入b5,i3进入b6,i4进入b7,i5进入b0,i6进入b1,i7进入b2。然后根据缓冲队列写指针130和有效字掩码109生成缓冲项写使能131为{13’b0000000000000, 有效字掩码109[7:0],11’b00000000000}。最后将缓冲块序列132依次写入缓冲队列133,即:
b3进入项11,实则指令i0被写入项11;
b4进入项12,实则指令i1被写入项12;
b5进入项13,实则指令i2被写入项13;
b6进入项14,实则指令i3被写入项14;
b7进入项15,实则指令i4被写入项15;
b0进入项16,实则指令i5被写入项15;
b1进入项16,实则指令i6被写入项16;
b2进入项17,实则指令i7被写入项17。
如图2指令的缓冲完成后根据译码单元可接收指令的状况,按照FIFO原则从指令缓冲140将指令字141~144取出送去译码单元。
本实施例还提供一种超标量微处理器,包括指令提取和缓冲逻辑,指令提取和缓冲逻辑被编程以执行本实施例前述基于移位的指令提取与缓冲方法的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。