CN101533344B - 一种用以储存目标地址的分支目标缓冲器***及方法 - Google Patents
一种用以储存目标地址的分支目标缓冲器***及方法 Download PDFInfo
- Publication number
- CN101533344B CN101533344B CN200810083742XA CN200810083742A CN101533344B CN 101533344 B CN101533344 B CN 101533344B CN 200810083742X A CN200810083742X A CN 200810083742XA CN 200810083742 A CN200810083742 A CN 200810083742A CN 101533344 B CN101533344 B CN 101533344B
- Authority
- CN
- China
- Prior art keywords
- bit
- destination address
- address
- instruction
- branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
一种用以储存目标地址的分支目标缓冲器***及方法,应用于16位元、32位元、64位元或更多位元的处理器架构,分支指令的目标地址储存环境,在储存分支指令的目标地址时,分支目标缓冲器无须储存目标地址的全部位元,而仅须储存目标地址的变动范围、进位位元、以及减/加位元。由于本发明的分支目标缓冲器无须储存分支指令地址与目标地址相似的部分,因而减少了分支目标缓冲器所须储存的目标地址栏位的位元个数。本发明虽使用较少的目标地址栏位位元个数,但确可产生出完整的目标地址,而并无运算效能的损失。
Description
技术领域
本发明有关于计算机架构(computer architecture)中的处理器(processor)的分支目标缓冲器(BTB),尤其有关于一种用以储存目标地址的分支目标缓冲器***及方法,应用于16位元、32位元、64位元或更多位元的处理器架构,在储存分支指令的目标地址时,分支目标缓冲器无须储存目标地址的全部位元,而仅须储存目标地址的变动范围、进位位元(Carry bit)、以及减/加位元(Sub/Add bit),为针对处理器(processor)中的分支目标缓冲器(BTB),提出减少目标地址栏位(target address field)位元个数的***及方法。
背景技术
分支目标缓冲器(BTB)是用来储存分支指令(branch instruction)的目标地址(target address),并常被用来判断是否为分支指令,如果某一指令已被认定为分支指令,再由分支预测器(branch predictor)根据此分支指令跳跃的历史,来判断此分支指令是否会跳跃(taken or not),若分支预测器预测执行方向改变而并非为循序执行,则由分支目标缓冲器的目标地址栏位(target address field)提供目标地址,让程式继续执行下去。
图1为一示意图,用以显示说明现有技术中用以储存分支指令(branch instruction)的目标地址(target address)的分支目标缓冲器的运作情形。如图1中所示,分支目标缓冲器10储存了曾执行过的目标分支(target branch)的历史记录,分支目标缓冲器10具有多个进入点(entry)101,而进入点101的个数可为,例如,512个(512-entry),即,在分支目标缓冲器10中,例如,具有512个进入点101(512-entry)。
在分支目标缓冲器10中的一进入点(entry)101包含标签(tag)102、以及资料(data)103,标签102为先前执行过的分支指令地址的[31:9]位元(在此,以512-entry为例),而资料(data)103包含了前一个执行过的分支指令 的目标地址(target address)([31:0])104、以及二个位元的历史资讯105。
分支目标缓冲器10会抓取目前的指令地址,然后检查该指令地址是否为之前所曾执行过的分支指令。使用目前地址的[8:2]位元来读出标签(tag)102,然后跟目前指令地址的[31:9]位元做比对。如果目前分支指令地址和快取中的标签(tag)102相同,资料103中的记录历史资讯的二位元历史资讯105会指出该分支指令常被抓取,分支目标缓冲器10将使用目标地址104做为下一个要传送到指令快取的指令地址。资料103中的二个历史记录位元历史资讯105代表了四种在分支目标缓冲器10的分支进入点(entry)101里可能的状况。
纵观现有技术,分支目标缓冲器在储存分支指令的目标地址(target address)时,必须储存全部的目标地址栏位位元,因而,分支目标缓冲器所含的位元数总数无法降低,致使晶片的面积以及耗电功率无法进一步降低,因此,如何能让分支目标缓冲器所必须储存、使用的位元数总数减少,并可应用于16位元、32位元、64位元或更多位元的处理器架构,但确可产生出完整的目标地址,并可达到相同的运算效能,以及达到降低晶片的面积以及耗电功率的目的,乃是待解决的问题。
发明内容
本发明的主要目的便是在于提供一种用以储存目标地址的分支目标缓冲器***及方法,应用于16位元、32位元、64位元或更多位元的处理器架构,分支指令的目标地址储存环境,在储存分支指令的目标地址时,分支目标缓冲器无须储存目标地址的全部位元,而仅须储存目标地址的变动范围、进位位元(Carry bit)、以及减/加位元(Sub/Add bit)。
本发明的又一目的便是在于提供一种用以储存目标地址的分支目标缓冲器***及方法,应用于16位元、32位元、64位元或更多位元的处理器架构,无须储存分支指令地址(branch instruction address)与目标地址(target address)相似的部分,因而减少了分支目标缓冲器(BTB)所须储存的目标地址栏位的位元个数。
本发明的再一目的便是在于提供一种用以储存目标地址的分支目标缓冲器***及方法,应用于16位元、32位元、64位元或更多位元的处理器架构,虽使用较少的目标地址栏位位元个数,但确可产生出完整的目标地址,而并无运算效能的损失。
根据以上所述的目的,本发明提供了一种新颖的用以储存目标地址的分支目标缓冲器***,可应用于16位元、32位元、64位元或更多位元的处理器架构,该分支目标缓冲器***包含分支目标缓冲器、指令地址加1单元、以及指令地址减1单元。该分支目标缓冲器用以储存目标地址的变动范围、进位位元、以及减/加位元;所述目标地址的变动范围为:目标地址中位于位元组偏移量(Byte offset)以上的位元,其位元个数等于指令集的分支指令格式中的偏移量的栏位位元个数减去符号位元;
指令地址加1单元,在查找分支目标缓冲器时,在进位位元值为1且减/加位元值为1时,指令地址加1单元对所送达的目标地址的变动范围以上的部分执行加1的运算,且将所运算的结果输回至分支目标缓冲器;以及
指令地址减1单元,在查找分支目标缓冲器时,在进位位元值为1且减/加位元值为0时,使指令地址减1单元对所送达的目标地址的变动范围以上的部分执行减1的运算,且将所运算的结果输回至分支目标缓冲器,
或者,在进位位元值为0时,指令地址加1单元、以及指令地址减1单元无须执行任何运算,且将目标地址的变动范围以上的部分输回至分支目标缓冲器;分支目标缓冲器将分支指令地址与目标地址的相同部分、以及经运算后的目标地址的变动范围以上的部分予以组合成目标地址并予以输出。在查找(Look up)分支目标缓冲器的同时,该指令地址加1单元可对目标地址的变动范围以上的部分执行加1的运算,而指令地址减1单元则可对目标地址的变动范围以上的部分做减1的运算。
应用本发明的用以储存目标地址的分支目标缓冲器方法时,分支目标缓冲器无须储存目标地址的全部位元,而是储存目标地址的变动范围、进位位元、以及减/加位元,虽使用较少的位元个数,但确可产生出完整的目标地址,且于产生目标地址的过程时,不会增加时间延迟,并无运算效能的损失。
本发明的用以储存目标地址的分支目标缓冲方法流程,首先,判别、设定分支指令地址与目标地址的相同的地址栏位部分;接着,在查找(Look up)分支目标缓冲器的同时,通过判断出的进位位元值、以及减/加位元值,使指 令地址加1单元对所送达的目标地址的变动范围以上的部分执行加1的运算,或,使指令地址减1单元对所送达的目标地址的变动范围以上的部分执行减1的运算,或者,指令地址加1单元、以及指令地址减1单元无须执行任何运算,视进位位元值、以及减/加位元值而定,在此,该目标地址的变动范围以上的部分为目标地址的变动范围以上的部分,指令地址加1单元或指令地址减1单元,对目标地址的变动范围以上的部分执行加1或减1的运算后,将所运算的结果输回至分支目标缓冲器;最后,分支目标缓冲器将分支指令地址与目标地址的相同部分、以及经运算后的目标地址的变动范围以上的部分予以组合成目标地址并予以输出;
所述目标地址的变动范围为:目标地址中位于Byte offset以上的位元,其位元个数等于指令集的分支指令格式中的偏移量的栏位位元个数减去符号位元;
其中,在进位位元值为1且减/加位元值为1时,指令地址加1单元对所送达的目标地址的变动范围以上的部分执行加1的运算;在进位位元值为1且减/加位元值为0时,使指令地址减1单元对所送达的目标地址的变动范围以上的部分执行减1的运算;在进位位元值为0时,指令地址加1单元、以及指令地址减1单元无须执行任何运算。
本发明的用以储存目标地址的分支目标缓冲器***及方法,利用较少的位元数而达成相同功能,并可降低晶片的面积、以及耗电功率。本发明可应用于16位元、32位元、64位元或更多位元的处理器架构,以32位元MIPS指令集为例,利用本发明的方法,每一个目标地址栏位(target address field)可减少15个位元,也就是原本需要储存32个位元,而使用本发明的方法则仅须储存17个位元,因而减少了46.88%的位元数总数使用量。又,以32位元ARM指令集为例,利用本发明的方法,每一个目标地址栏位(target address field),可减少7个位元,也就是原本需要储存32个位元,而使用本发明的方法则仅须储存25个位元,因而减少了21.88%的位元数总数使用量。本发明的用以储存目标地址的分支目标缓冲器***及方法可适用于任何指令集,对于不同指令集而言,所可节省的最大位元个数也不同。
以512进入点(512-entry)的分支目标缓冲器为例,对于32位元MIPS指令集而言,总共可减少7680(15x512=7680)个位元,而对32位元ARM指令集而言,总共可减少3584(7x512=3584)个位元。对于64位元或是更高位元的计算机架构而言,更可节省更多的位元总数使用量。若分支目标缓冲器的进入点entry数目越多,则可省下的位元个数也会越多。
本发明的用以储存目标地址的分支目标缓冲方法,包括:(a)不储存目标地址的全部位元,而储存位元个数较少的偏移目标(Offset target),偏移目标分成三个部分,目标地址的变动范围、进位位元(Carry bit)、减/加位元(Sub/Addbit),在此,在本发明中,偏移目标(offset target)用来取代32位元目标地址,并储存于分支目标缓冲器中,以此来达到降低储存的位元个数,偏移目标的总位元个数为变动范围的位元数再增加2个位元;(b)利用指令地址加1单元、以及指令地址减1单元,在查找(Look up)分支目标缓冲器(BTB)的同时,可对分支指令地址的变动范围以上的部分执行加或减的运算。
其中(a),偏移目标的目标地址的变动范围的位元个数并不固定,而为指令集的分支指令格式的偏移量的栏位的位元个数减去符号位元,若偏移目标的目标地址的变动范围多储存几个位元,相对地,两个对指令地址的变动范围以上的部分做加或减的指令地址加1或减1单元,所运算的位元个数即可减少几个位元。
其中(b),对分支指令地址的变动范围以上的部分执行加或减的运算,可用加法器(Adder)或计数器(Counter)而予以施行。
本发明具有以下有益效果:
通过使用本发明,在储存分支指令的目标地址时,分支目标缓冲器无须储存目标地址的全部位元,而仅须储存目标地址的变动范围、进位位元(Carry bit)、以及减/加位元(Sub/Add bit),由于本发明的分支目标缓冲器无须储存分支指令地址与目标地址相似的部分,因而减少了分支目标缓冲器所须储存的目标地址栏位的位元个数。本发明虽使用较少的目标地址栏位位元个数,但确可产生出完整的目标地址,而并无运算效能的损失。
附图说明
图1为一示意图,用以显示说明现有技术的用以储存分支指令(branch instruction)的目标地址(target address)的分支目标缓冲器的运作情形;
图2为一示意图,用以显示说明本发明的用以储存目标地址的分支目标缓冲器***的***方块图;
图3为一示意图,用以显示说明于图2中本发明的用以储存目标地址的分支目标缓冲器***的分支目标缓冲器的一实施例;
图4为一示意图,用以显示说明于图2中本发明分支目标缓冲器***的指令地址加1单元的一实施电路;
图5为一示意图,用以显示说明于图2中本发明分支目标缓冲器***的指令地址减1单元的一实施电路;
图6为一流程图,用以显示说明本发明的用以储存目标地址的分支目标缓冲器方法的流程步骤;
图7为一示意图,用以显示说明32位元MIPS指令集的分支指令格式;
图8为一示意图,用以显示说明32位元ARM指令集的分支指令格式;
图9为一示意图,用以显示说明MIPS指令集的分支指令地址与目标地址的比较情形;
图10为一示意图,用以显示说明ARM指令集的分支指令地址与目标地址的比较情形;
图11为一示意图,用以显示说明ARM指令集的偏移目标(offset target)格式;
图12为一示意图,用以显示说明现有的分支目标缓冲器读取时间情形;
图13为一示意图,用以显示说明MIPS指令集的根据分支指令地址获取目标地址的一实施例。
【主要元件符号说明】
1分支目标缓冲器***
2分支目标缓冲器
3指令地址加1单元
4指令地址减1单元
10分支目标缓冲器
101进入点
102标签
103资料
104目标地址
105历史资讯
20 21 22 23模组
24 25 26 27多工器
28 29 30 31机制
32多工器
具体实施方式
为使本领域的技术人员了解本发明的目的、特征及功效,通过下述具体实施例,并配合附图,对本发明进行详加说明:
图2为一示意图,用以显示说明本发明的用以储存目标地址的分支目标缓冲器***的***方块图。本发明可应用于16位元、32位元、64位元或更多位元的处理器架构,如图2中所示,分支目标缓冲器***1包含分支目标缓冲器2、指令地址加1单元3、以及指令地址减1单元4。
该分支目标缓冲器2用以储存目标地址的变动范围、进位位元、以及减/加位元。按不同的进位位元值、以及减/加位元值,指令地址加1单元3可对所送达的指令地址的某些部份执行加1的运算,或,指令地址减1单元4则可对所送达的指令地址的某些部份执行减1的运算;又或者,指令地址加1单元3、以及指令地址减1单元4无须执行任何运算,视进位位元值、以及减/加位元值而定。指令地址加1单元3或指令地址减1单元4,对指令地址的某些部份执行加1或减1的运算后,且将所运算的结果输回至分支目标缓冲器2。
在查找(Look up)分支目标缓冲器2的同时,该指令地址加1单元3可对目标地址的变动范围以上的部分执行加1的运算,或者,指令地址减1单元4则可对目标地址的变动范围以上的部分做减1的运算。
在此,以32位元指令地址为例,在读取分支目标缓冲器2的过程,在以指令地址查找(look up)分支目标缓冲器2之时,同时也将指令地址送到指令地址加1单元3、以及指令地址减1单元4。该指令地址加1单元3可对目标 地址的变动范围以上的部分执行加1的运算,在此,指令地址加1单元3对指令地址[31:25]部分执行加1的运算(指令地址[31:25]+1);或者,指令地址减1单元4则可对目标地址的变动范围以上的部分做减1的运算,在此,指令地址减1单元4功能单元对指令地址[31:25]部分执行减1的运算(指令地址[31:25]-1)。
指令地址加1单元3对指令地址的某些部份执行加1的运算(指令地址[31:25]+1)后,或者,指令地址减1单元4对指令地址的某些部份执行减1的运算(指令地址[31:25]-1)后,会将所运算的结果输回至分支目标缓冲器2。
图3为一示意图,用以显示说明于图2中本发明的用以储存目标地址的分支目标缓冲器***的分支目标缓冲器的一实施例。图3为分支目标缓冲器2的一实施例,如图3中所示,分支目标缓冲器2包含模组20(way 0)、模组21(way 1)、模组22(way 2)、模组23(way 3)、多工器24、多工器25、多工器26、多工器27、机制28、机制29、机制30、机制31、以及多工器32。
根据进位与减/加这两个位元,模组20(way 0)、模组21(way 1)、模组22(way 2)、模组23(way 3),分别地将选择讯号S传送到多工器24、多工器25、多工器26、多工器27。多工器24、多工器25、多工器26、多工器27分别地根据所接收到的选择讯号S,而选取指令地址[31:25]部分已执行减1的运算的指令地址[31:25]-1,或指令地址[31:25]部分已执行加1的运算的指令地址[31:25]+1,或指令地址[31:25]部分未执行减1或加1的运算的指令地址[31:25],并将所选取的指令地址[31:25]-1或指令地址[31:25]+1或指令地址[31:25]予以输出传送至多工器32。
目标地址的变动范围以上的部分,即,目标地址[31:25](指令地址[31:25]),再与目标地址的变动范围(目标地址[24:0])合并,其中目标地址的第0个位元与第1个位元的值直接设定为0。机制28、机制29、机制30、机制31分别地将来自于模组20(way 0)、模组21(way 1)、模组22(way 2)、模组23(way 3)的标签与目前的指令地址的标签予以做比较,然后依照标签比较的结果,从多工器32中选择某一个要读取的目标地址输出,即为此分支指令所对应的32位元目标地址(32-bit target address)。
图4为一示意图,用以显示说明于图2中本发明分支目标缓冲器***的指令地址加1单元的一实施电路。如图4中所示,为指令地址加1单元3(「指令地址[31:25]+1」)的功能单元的内部电路,各个位元的运算都是独立的,而且运算时间并不长,可以在预定时间内做完而执行加1的运算。
图5为一示意图,用以显示说明于图2中本发明分支目标缓冲器***的指令地址减1单元的一实施电路。如图5中所示,为指令地址减1单元4(「指令地址[31:25]-1」)的功能单元的内部电路,各个位元的运算都是独立的,而且运算时间并不长,可以在预定时间内做完而执行减1的运算。
图6为一流程图,用以显示说明本发明的用以储存目标地址的分支目标缓冲器方法的流程步骤。如图6中所示,首先,在步骤11中,分支目标缓冲器***1判别、设定分支指令地址与目标地址的相同的地址栏位部分,并进到步骤12。
接着,在步骤12中,在查找(Look up)分支目标缓冲器2的同时,通过判断出的进位位元值、以及减/加位元值,使指令地址加1单元3对所送达的指令地址的某些部份执行加1的运算,或,使指令地址减1单元4对所送达的指令地址的某些部份执行减1的运算,或者,指令地址加1单元3、以及指令地址减1单元4无须执行任何运算,视进位位元值、以及减/加位元值而定,在此,该指令地址的某些部份为目标地址的变动范围以上的部分,指令地址加1单元3或指令地址减1单元4,对目标地址的变动范围以上的部分执行加1或减1的运算后,且将所运算的结果输回至分支目标缓冲器2,并进到步骤13。
在步骤13中,分支目标缓冲器2将分支指令地址与目标地址的相同部份、以及经运算后的目标地址的变动范围以上的部分予以组合成目标地址并予以输出。
本发明利用分支指令地址与目标地址有部分相似的部分,两者相似的部分就不储存在分支目标缓冲器(BTB)中,利用这一点来达到减少目标地址栏位(target address field)的位元个数,至于两者相似的部分为何,就要从指令集的分支指令格式来说明。
图7为一示意图,用以显示说明32位元MIPS指令集的分支指令格式。图8为一示意图,用以显示说明32位元ARM指令集的分支指令格式。以下 所述的,第1例为32位元MIPS指令集分支指令的跳跃范围说明,第2例为32位元ARM指令集分支指令的跳跃范围说明,而第3例则为32位元MIPS指令集跳跃指令跳跃到相对地址的说明。由这三个例子可知分支指令跳跃的距离是有固定范围的,偏移量(offset)的值会受到限制,而且不同指令集的分支指令跳跃范围也不尽相同。
第1例:
BNE R3,R4,name
if(Regs[R3]!=Regs[R4])PC←name;
((PC+4)-217)<=name<((PC+4)+217)
在此,在图7中,MIPS指令集的分支指令格式中的immediate栏位的值为偏移量(offset)。
第2例:
BEQ name
if(Z set)PC←name;
((PC+8)-225)<=name<((PC+8)+225)
在此,在图8中,ARM指令集的分支指令格式中的offset栏位的值为偏移量(offset)。
第3例3:
j$rt
以下的第4例是一个位元个数较少的简单例子,如图13所示,以32位元MIPS指令集为例(图13中从右至左,为第0位元至第9位元),两个位元位数不相同的二进制数字相加,其中case1的偏移量为正数最大,而case2的偏移量为负数最小。在此,正数最大的偏移量为(01111)5个位元,而其正号以符号位元0来表示;负数最小的偏移量为(10000)5个位元,而其负号以符号位元1来表示。在执行相加动作之前,在case1以及case2中,偏移量的值必须先向左位移(shift)两个位元,而空出来的两个位元的值,直接设定为 0,此时,各个偏移量的值均为6个位元;另外,由于偏移量的符号位元个数较少仅为1位元,因此,还必须做符号延伸(sign extended)才能与『分支指令地址+4』做加法运算,因而,偏移量的符号位元个数将由1位元而做符号延伸为4位元,而运算结果即为目标地址。分支指令地址的变动为每次加4的原因为,第0位元以及第1位元为Byte offset;目标地址由右至左为第0位元至第9位元,其中,偏移量的变动范围以上部分,即为第6位元至第9位元,而第6位元为偏移量的符号位元,其余的第7位元至第9位元则为符号延伸(sign extended)。
由此可知,如果有进位产生,会造成两者的变动范围以上的部分即第6位元至第9位元,会有加1或减1的差异,若没有进位则为相同而并无差异的情况产生。
图9为一示意图,用以显示说明MIPS指令集的分支指令地址与目标地址的比较情形。图10为一示意图,用以显示说明ARM指令集的分支指令地址与目标地址的比较情形。在图9、图10中,将分支指令地址与目标地址予以比较,可知,分支指令地址与目标地址的差异主要是在变动范围的部分,而目标地址的变动范围以上的部分,若没有进位会与原来分支指令地址相同,若有进位,则目标地址的变动范围以上的位元部分会有加1或减1的变化。
另外byte offset这部分是不会改变的(因为PC每次都加4),所以只需要储存变动范围再加上两个额外的位元,用来记录有无进位以及是做加或减调整的动作,即可利用这些部分而产生出32位元的目标地址(32-bit target address)。
本发明适用于各种指令集的分支目标缓冲器,以下说明均以32位元ARM指令集为例,其他指令集同理。在本发明中,使用偏移目标(offset target)取代了原本储存在分支目标缓冲器中的32位元目标地址,偏移目标的格式请参考图11,图11为一示意图,用以显示说明ARM指令集的偏移目标(offset target)格式,其中目标地址的变动范围这个部分很明显,无须再予以说明。
进位(Carry)位元是用来判断有无进位到目标地址的变动范围以上的部分,即有无进位到第25位元及以上,而影响了第25位元至第31位元的值。比较分支指令地址与目标地址的第31位元到第25位元,在此位元范围的间的每一个位元,若有某一个位元不同,则判断结果为有进位的情况产生,而图 11中进位位元的计算方程式,即是判断分支指令地址与目标地址的第31位元到第25位元的每一个位元有无相等的作法,若相等则进位位元的值为0,表示没有进位,若不相等则进位位元的值为1,表示有进位,而减/加(Sub/Add)这个位元,则是依照原分支指令的偏移量为正数或负数来决定,若是正数则减/加(Sub/Add)位元的值为0,若是负数则减/加(Sub/Add)位元的值为1,接下来是说明如何利用偏移目标,而得到32位元目标地址的算法。
第1行:target address[24:2]=offset target[24:2]
第2行:If((Carry==1)&&(Sub/add==1))
第3行:target address[31:25]=pc[31:25]-1;
第4行:else if((Carry==1)&&(Sub/add==0))
第5行:target address[31:25]=pc[31:25]+1;
第6行:else
第7行:target address[31:25]=pc[31:25];
第8行:target address[1:0]=pc[1:0];
其中,在第1行,将偏移目标的[24:2]位元予以设定为目标地址的[24:2]位元;在第2行中,判断进位位元的值是否为1、且减/加位元的值是否也为1,若进位位元的值为1、且减/加位元的值为1,则进行第3行,若进位位元的值为0,则进行第7行;在第4行,若进位位元的值为1、且减/加位元的值为0,则进行第5行;在第2至第7行后,进行第8行。
图12为一示意图,用以显示说明现有的分支目标缓冲器读取时间情形。如图中所示,图12为一般的分支目标缓冲器(BTB)的读取过程,其过程大致为先解码(decode)选出要读RAM的哪一个集合(set),再读出在RAM所对应集合中的每一笔资料,比较各笔资料的标签(tag),在依照标签比较之后的结果,用多工器选出真正要读取的目标地址,之后就将目标地址送到NPC(Next PC)。
而本发明对目标地址的变动范围以上的部分,做加1与减1运算的调整需在比较标签(tag)之前做完,这样子的作法没有增加时间延迟(time delay)。
本发明的附图、元件符号或名词定义可参考如下:
1.目标地址(target address)为分支指令(branch instruction)跳跃的目的 地地址。
2.指令地址[31:25]的意思为32位元的指令地址中的第25位元到第31位元,总共有7个位元,其余以此类推。
3.分支目标缓冲器(BTB,Branch Target Buffer)为存放分支指令对应的目标地址。
4.MIPS指令集的分支指令格式中的immediate栏位与ARM指令集的分支指令格式中的offset栏位的值就是本发明提到的偏移量(offset)。
5.偏移目标(offset target)为本发明用来取代32位元目标地址,储存在分支目标缓冲器中,以此来达到降低储存的位元个数。偏移目标的总位元个数为变动范围的位元数再增加2个位元。
6.分支预测器(branch predictor),根据分支指令的跳跃历史,来判断此分支指令是否会跳跃(taken or not)。
7.变动范围为分支指令地址与目标地址比较的主要差异部分,根据本发明的设计,变动范围的位元个数为指令集的分支指令格式(branch instruction format)中的偏移量的栏位位元个数减去符号位元(sign bit)。
8.byte offset为指令地址的第0个位元与第1个位元,在32位元指令集中是固定不会变动的部分,而如果是64位元指令集byte offset则会有3个位元是不会变动的。(本发明举的位元例子都是从0开始)
9.示意图中,如果线与线之间有圆点,表示两条线有互相连接,若没有圆点,表示两条线没有互相连接。
以上所述仅为本发明之较佳实施例而已,并非用以限定本发明的范围;凡其它未脱离本发明所揭示之精神下所完成的等效改变或修饰,均应包含在下述的专利范围内。
Claims (6)
1.一种用以储存目标地址的分支目标缓冲方法,应用在16位元、32位元、64位元或更多位元的处理器架构,其特征在于,包含以下步骤:
判别、设定分支指令地址与目标地址的相同的地址栏位部分;
在查找分支目标缓冲器时,通过判断出的进位位元值、以及减/加位元值,使指令地址加1单元对所送达的目标地址的变动范围以上的部分执行加1的运算,或,使指令地址减1单元对所送达的目标地址的变动范围以上的部分执行减1的运算,又或者,指令地址加1单元、以及指令地址减1单元无须执行任何运算,视进位位元值、以及减/加位元值而定,指令地址加1单元或指令地址减1单元,对目标地址的变动范围以上的部分执行加1或减1的运算后,将所运算的结果输回至分支目标缓冲器;以及
分支目标缓冲器将分支指令地址与目标地址的相同部分、以及经运算后的目标地址的变动范围以上的部分予以组合成目标地址并予以输出;
所述目标地址的变动范围为:目标地址中位于位元组偏移量以上的位元,其位元个数等于指令集的分支指令格式中的偏移量的栏位位元个数减去符号位元;
其中,在进位位元值为1且减/加位元值为1时,指令地址加1单元对所送达的目标地址的变动范围以上的部分执行加1的运算;在进位位元值为1且减/加位元值为0时,使指令地址减1单元对所送达的目标地址的变动范围以上的部分执行减1的运算;在进位位元值为0时,指令地址加1单元、以及指令地址减1单元无须执行任何运算。
2.如权利要求1所述用以储存目标地址的分支目标缓冲方法,其特征在于,目标地址的变动范围以上的部分为自0位元开始的32位元指令地址的第17位元至第31位元。
3.如权利要求1所述用以储存目标地址的分支目标缓冲方法,其特征在于,目标地址的变动范围以上的部分为自0位元开始的32位元指令地址的第25位元至第31位元。
4.一种用以储存目标地址的分支目标缓冲器***,应用于16位元、32位元、64位元或更多位元的处理器架构,其特征在于,包含:
分支目标缓冲器,该分支目标缓冲器用以储存目标地址的变动范围、进位位元、以及减/加位元;所述目标地址的变动范围为:目标地址中位于位元组偏移量以上的位元,其位元个数等于指令集的分支指令格式中的偏移量的栏位位元个数减去符号位元;
指令地址加1单元,在查找分支目标缓冲器时,在进位位元值为1且减/加位元值为1时,指令地址加1单元对所送达的目标地址的变动范围以上的部分执行加1的运算,且将所运算的结果输回至分支目标缓冲器;以及
指令地址减1单元,在查找分支目标缓冲器时,在进位位元值为1且减/加位元值为0时,使指令地址减1单元对所送达的目标地址的变动范围以上的部分执行减1的运算,且将所运算的结果输回至分支目标缓冲器,
或者,在进位位元值为0时,指令地址加1单元、以及指令地址减1单元无须执行任何运算,且将目标地址的变动范围以上的部分输回至分支目标缓冲器;分支目标缓冲器将分支指令地址与目标地址的相同部分、以及经运算后的目标地址的变动范围以上的部分予以组合成目标地址并予以输出。
5.如权利要求4所述用以储存目标地址的分支目标缓冲器***,其特征在于,目标地址的变动范围以上的部分为自0位元开始的32位元指令地址的第17位元至第31位元。
6.如权利要求4所述用以储存目标地址的分支目标缓冲器***,其特征在于,目标地址的变动范围以上的部分为自0位元开始的32位元指令地址的第25位元至第31位元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810083742XA CN101533344B (zh) | 2008-03-10 | 2008-03-10 | 一种用以储存目标地址的分支目标缓冲器***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810083742XA CN101533344B (zh) | 2008-03-10 | 2008-03-10 | 一种用以储存目标地址的分支目标缓冲器***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101533344A CN101533344A (zh) | 2009-09-16 |
CN101533344B true CN101533344B (zh) | 2011-04-06 |
Family
ID=41103964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810083742XA Expired - Fee Related CN101533344B (zh) | 2008-03-10 | 2008-03-10 | 一种用以储存目标地址的分支目标缓冲器***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101533344B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190004806A1 (en) * | 2017-06-30 | 2019-01-03 | Qualcomm Incorporated | Branch prediction for fixed direction branch instructions |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558325A (zh) * | 2004-02-03 | 2004-12-29 | 智慧第一公司 | 将多余的分支目标地址高速缓存项目无效化的装置及方法 |
CN1947093A (zh) * | 2004-04-21 | 2007-04-11 | 富士通株式会社 | 分支预测装置、分支预测方法以及处理器 |
JP2007286739A (ja) * | 2006-04-13 | 2007-11-01 | Toshiba Corp | 分岐予測付きプリフェッチバッファ |
-
2008
- 2008-03-10 CN CN200810083742XA patent/CN101533344B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558325A (zh) * | 2004-02-03 | 2004-12-29 | 智慧第一公司 | 将多余的分支目标地址高速缓存项目无效化的装置及方法 |
CN1947093A (zh) * | 2004-04-21 | 2007-04-11 | 富士通株式会社 | 分支预测装置、分支预测方法以及处理器 |
JP2007286739A (ja) * | 2006-04-13 | 2007-11-01 | Toshiba Corp | 分岐予測付きプリフェッチバッファ |
Also Published As
Publication number | Publication date |
---|---|
CN101533344A (zh) | 2009-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
FI86921C (fi) | Loepbandliknande felkorrigeringssystem | |
JPH09218731A (ja) | マイクロプロセッサのパワーエスティメータ | |
US20080209190A1 (en) | Parallel prediction of multiple branches | |
CN104272248B (zh) | 处理器指令集中的谓词计算方法和装置 | |
US20190065205A1 (en) | Variable length instruction processor system and method | |
JP2012123810A (ja) | 復帰スタックを管理する方法および装置 | |
US20100058038A1 (en) | Branch Target Buffer System And Method For Storing Target Address | |
CN1512325B (zh) | 一种计算机及一种产生并使用计算历史的方法 | |
CN101211256A (zh) | 一种专用双流水线risc指令***及其操作方法 | |
CN101533344B (zh) | 一种用以储存目标地址的分支目标缓冲器***及方法 | |
EP1643357B1 (en) | Information processing apparatus comprising a branch history register | |
US8578135B2 (en) | Apparatus for calculating and prefetching a branch target address | |
EP2431865B1 (en) | Semiconductor integrated circuit and index calculation method | |
CN1690899B (zh) | 控制装置 | |
US20070294518A1 (en) | System and method for predicting target address of branch instruction utilizing branch target buffer having entry indexed according to program counter value of previous instruction | |
CN104572024A (zh) | 一种用于函数返回地址预测的装置及方法 | |
CN113779755B (zh) | 一种硅基多光谱集成电路芯片的设计方法和集成电路芯片 | |
CN101361039A (zh) | 处理器 | |
KR20070038898A (ko) | 시리얼 데이터 입력 시스템 | |
JPS61500992A (ja) | コンピュ−タシステムにおける、またはそれに関する改良 | |
JP5132612B2 (ja) | データ転送方法および装置 | |
CN105320581A (zh) | 一种集成电路、验证方法及产生特征值调整码的方法 | |
CN101826002A (zh) | 记录式分支预测器的硬件实现方法 | |
CN113447051A (zh) | 单码道绝对式位置测量装置 | |
CN116360855A (zh) | 一种指令转换电路及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110406 Termination date: 20170310 |