微处理器架构

申请号 CN200580021532.2 申请日 2005-05-19 公开(公告)号 CN101002169A 公开(公告)日 2007-07-18
申请人 ARC国际(英国)公司; 发明人 A·阿里斯托代莫; S·C·利姆; R·富勒尔; A·R·唐普勒; M·泰勒; K-L·王; J·黑克威尔; N·托珀姆; D·汉森;
摘要 本 发明 提供了性能改进的 微处理器 ,其特征在于应用了动态分支预测、统一高速缓存调试单元、64位单向右移桶式移位器、预测性预取存储流 水 线和可定制的处理器扩展。
权利要求

1.一种微处理器,包括:
多级指令流线;和
预测性预取存储器流水线,其包括:
第一预取级,其包括预取指针地址寄存器文件和存储器地址发生 器;
第二预取级,其包括用地址指针存取的预取存储器结构,该地址 指针是在所述第一预取级中产生的;以及
数据选择级,其包括将预测操作数地址和来自预取存储器结构的 数据信息存储在其中的至少一个预取缓冲器
2.根据权利要求1所述的微处理器,其中所述预取存储器结构包 括存储操作数地址数据的X和Y存储器结构。
3.根据权利要求1所述的微处理器,其中所述第一和第二预取级 和所述数据选择级并行于所述指令流水线的执行级之前的级出现。
4.根据权利要求1所述的微处理器,其中所述指令流水线包括对 齐、解码和寄存器文件级,且所述第一和第二及预取级和所述数据选 择级分别并行于所述对齐、解码和寄存器文件级出现。
5.根据权利要求1所述的微处理器,其中所述预测性预取存储器 流水线进一步包括所述数据选择级中的硬件逻辑,其适于使包含在实 际解码指令中的实际操作数地址信息与所述预测操作数地址信息一 致。
6.根据权利要求5所述的微处理器,其中所述预测性预取存储器 流水线进一步包括硬件逻辑,其适于在如果所述实际操作数地址信息 与所述预测操作数地址信息匹配时,将所述预测操作数地址信息从所 述预取缓冲器传送至所述指令流水线的一个执行级。
7.根据权利要求1所述的微处理器,其中所述预测性预取存储器 流水线进一步包括一个回写结构,其在所述执行级之后被调用,且如 果所述指令要求对所述预取存储器结构中的至少一个进行写入时,其 适于将执行结果写回XY存储器。
8.一种为微处理器的指令流水线预测性地预取操作数地址和数据 信息的方法,所述方法包括:
在解码所述指令流水线中的当前指令之前,存取至少一个含有指 向预取存储器结构中特定位置的指针的寄存器;
从所述预取存储器结果中所述特定位置取出预测操作数数据;以 及
将所述指针和预测操作数数据存储在至少一个预取缓冲器中。
9.根据权利要求8所述的方法,其中存取、取出和存储并行、同 时且独立于所述指令流水线发生。
10.根据权利要求9所述的方法,其中存取、取出和存储分别并行 于所述指令流水线的对齐、解码和寄存器文件级发生。
11.根据权利要求8所述的方法,进一步包括在解码所述当前指令 后,使包含在已解码的当前指令中的实际操作数数据与所述预测操作 数数据一致。
12.根据权利要求8所述的方法,进一步包括如果所述预取预测操 作数数据与包含在所述当前指令中的实际操作数实际匹配,则解码所 述当前指令并将所述预取预测操作数数据传送至所述微处理器流水线 的一个执行单元。
13.根据权利要求8所述的方法,其中存取、取出和存储是在所述 微处理器的连续时钟脉冲上执行的。
14.根据权利要求8所述的方法,进一步包括执行预取危机检测。
15.根据权利要求14所述的方法,其中执行预取危机检测包括从 下列步骤构成的组中选择的至少一个操作:如果确定了写危机后的读 取的特征在于一个写入存储器中将被预取的位置的存储器写入,那么 在写危机后的读取消失时,使预取操作停顿或重新启动预取操作;以 及如果存在对先前预取的存储器位置的读取,则清除所述预取缓冲器。
16.一种微处理器,包括:
多级微处理器流水线;以及
与所述微处理器流水线的至少一部分并行的多级预取存储器流水 线,其中所述预取存储器流水线包括:
第一级,其具有用作指向特定预取存储器位置的指针的至少一个 寄存器;
第二级,其具有预取存储器结构,该预取存储器结构用于存储对 应于所述微处理器流水线中一预解码指令中的操作数的预测操作数地 址信息;和
第三级,其包括至少一个预取缓冲器;
其中所述第一、第二和第三级分别与所述微处理器流水线的相应 级并行,同时且独立。
17.根据权利要求16所述的微处理器,其中所述微处理器流水线 包括对齐、解码和寄存器文件级,且所述预取存储器流水线的所述第 一、第二和第三级分别并行于对齐、解码和寄存器文件级。
18.根据权利要求16所述的微处理器,进一步包括所述第三级中 的硬件逻辑,其适于使包含在一实际指令中的操作数地址信息与所述 预测操作数地址信息一致,所述实际指令是从所述微处理器流水线的 一解码级转送而来的。
19.根据权利要求16所述的微处理器,进一步包括电路,如果所 述实际指令中的操作数指针与所述预测操作数地址信息匹配,则其适 于将所述预测操作数地址信息从所述预测缓冲器传送至所述微处理器 流水线的一个执行级。
20.根据权利要求16所述的微处理器,进一步包括后执行级硬件 逻辑,如果解码的指令指定对至少一个预取存储器结构执行回写,则 其适于将执行结果回写至预取存储器。
21.在一种微处理器中,微处理器内核包括:
多级流水线;
高速缓存调试单元;
所述高速缓存调试单元和一个指令高速缓存单元之间的数据通 道;
所述高速缓存调试单元和一个数据高速缓存单元之间的数据通 道;
所述多级流水线的一个单元和所述高速缓存调试单元之间的数据 通道。
22.根据权利要求21所述的微处理器,其中所述多级流水线的所 述单元是所述流水线的一个执行级的一个辅助单元。
23.根据权利要求21所述的微处理器,进一步包括一个状态控制 单元,其适于为所述高速缓存调试单元提供所述流水线的当前状态。
24.根据权利要求23所述的微处理器,其中当前状态包括取代来 自所述流水线的前一指令的流水线刷新或其它系统变化中的至少一 个。
25.根据权利要求21所述的微处理器,进一步包括在所述高速缓 存调试单元和所述微处理器的一个存储器子系统之间、经过每个所述 指令高速缓存和数据高速缓存单元的数据通道。
26.根据权利要求21所述的微处理器,进一步包括功率管理控制 器,其适于选择性地在所述微处理器不需要所述高速缓存调试单元时, 对所述高速缓存调试单元进行断电。
27.根据权利要求21所述的微处理器,其中所述微处理器内核是 RISC型嵌入式微处理器内核。
28.一种微处理器,包括:
多级流水线;
数据高速缓存单元;
指令高速缓存单元;和
统一高速缓存调试单元,其可操作地连接至所述数据高速缓存单 元、所述指令高速缓存单元和所述多级流水线。
29.根据权利要求28所述的微处理器,其中所述统一高速缓存调 试单元经由所述多级流水线的一个执行级中的辅助单元可操作地连接 至所述多级流水线。
30.根据权利要求28所述的微处理器,进一步包括状态控制单元, 其适于为所述统一高速缓存调试单元提供所述流水线的当前状态。
31.根据权利要求30所述的微处理器,其中一个当前状态包括取 代来自所述多级流水线的前一命令的流水线刷新或其它系统变化中的 至少一个。
32.根据权利要求28所述的微处理器,进一步包括在所述统一高 速缓存调试单元和所述微处理器的一个存储器子系统之间的、经过每 个所述指令高速缓存和数据高速缓存单元的数据通道。
33.根据权利要求28所述的微处理器,进一步包括功率管理控制 器,其适于选择性地在所述微处理器不需要所述高速缓存调试单元时, 对所述高速缓存调试单元进行断电。
34.根据权利要求28所述的微处理器,其中所述架构是RISC型 嵌入式微处理器架构。
35.一种RISC型微处理器,包括:
多级流水线;以及
高速缓存调试单元,其中所述高速缓存调试单元包括:
至所述微处理器的指令高速缓存单元的接口;和
至所述微处理器的数据高速缓存单元的接口。
36.根据权利要求35所述的微处理器,进一步包括在所述高速缓 存调试单元和所述多级流水线的至少一个级之间的接口。
37.根据权利要求36所述的微处理器,其中所述多级流水线的所 述至少一个级包括所述多级流水线的一个执行级的一个辅助单元。
38.根据权利要求35所述的微处理器,进一步包括状态控制单元, 其适于为所述高速缓存调试单元提供所述多级流水线的当前状态。
39.根据权利要求38所述的微处理器,其中当前状态包括取代来 自所述多级流水线单元的前一命令的流水线刷新或其它系统变化中的 至少一个。
40.根据权利要求35所述的微处理器,进一步包括在所述高速缓 存调试单元和存储器子系统之间的、经过每个所述指令高速缓存和数 据高速缓存单元的接口。
41.根据权利要求35所述的微处理器,进一步包括功率管理控制 器,其适于选择性地在所述微处理器不需要所述高速缓存调试单元时, 对所述高速缓存调试单元进行断电。
42.一种在微处理器中使用变长指令执行分支预测的方法,所述方 法包括:
基于指定的取地址从存储器中取出指令;
基于所取指令的地址作出分支预测;以及
如果有如下情形则丢弃所述分支预测:
1)分支预测查找是基于对未对齐指令地址的非顺序取操作执行 的;以及
2)所述指令的分支目标对齐高速缓存BTAC位等于一个预定值。
43.根据权利要求42所述的方法,进一步包括如果1)或2)为假, 则传送与所述分支预测关联的预测指令。
44.根据权利要求43所述的方法,进一步包括如果分支预测不正 确,则更新下一个取地址。
45.根据权利要求44所述的方法,其中所述微处理器包括用于具 有选择级的流水线的指令,且更新包括在确定所述选择级中的分支后, 更新具有由该分支获得的下一个指令地址的分支预测单元BPU。
46.根据权利要求42所述的方法,其中作出分支预测包括解析分 支预测单元BPU的分支查找表,该分支查找表通过非顺序分支指令与 所取下一个指令关联的地址来索引所述非顺序分支指令。
47.根据权利要求42所述的方法,其中如果指令不是从存储器地 址线起始处开始的,则该指令被确定为未对齐。
48.根据权利要求42所述的方法,其中对于对齐的分支指令, BTAC对齐位为0或1中的一个,而对于未对齐的分支指令,BTAC对 齐位为0或1中的另一个。
49.一种在微处理器中执行动态分支预测的方法,包括:
在第一时钟周期,取出非顺序程序流之前的倒数第二个指令字和 包含下一指令预测信息的分支预测单元查找表项;
在第二时钟周期,取出这个非顺序程序流之前的最后一个指令字, 并基于在前一周期中取出的信息对该非顺序程序流进行预测;以及
在第三时钟周期,取出所述预测目标指令。
50.根据权利要求49所述的方法,其中取出分支指令之前的指令 和分支预测查找表项包括:使用正好在所述程序流中所述分支指令之 前的指令的指令地址来索引所述分支表中的分支。
51.根据权利要求50所述的方法,其中如果在所述分支指令之后 出现延迟槽指令,则取出分支指令之前的指令和分支预测查找表项包 括:使用所述分支指令的指令地址而非分支指令之前的指令来索引所 述BPU表。
52.一种更新变长指令集微处理器中分支预测单元的查找表的方 法,所述方法包括:
将零耗循环的循环体的最后指令的最后取地址存储在所述分支预 测查找表中;和
每当取指令达到所述循环体的终点时,将一个取指令预测性地重 定向到所述循环体的起点,其中所述循环体的最后取地址是从所述循 环终点后的第一指令的地址中获得的。
53.根据权利要求52所述的方法,其中存储包括:如果循环体终 点后的下一个指令具有对齐的地址,则所述循环体的最后指令具有直 接在循环所述体终点后的下一个指令地址之前的最后取地址,否则, 如果所述循环体终点后的下一个指令具有未对齐的地址,则所述循环 体的最后指令具有与所述循环体后下一个指令地址相同的最后取地 址。
54.一种在具有多级指令流水线的微处理器中执行分支预测的方 法,所述方法包括:
在微处理器调度之前通过静态分支预测来构建分支预测数据的分 支预测历史表;
将所述分支预测数据存储在存储器;
上电时,将所述分支预测数据加载至所述微处理器的分支预测单 元BPU中;以及
基于预加载的分支预测数据,利用所述BPU执行动态分支预测。
55.根据权利要求54所述的方法,进一步包括:如果预测数据在 指令处理过程改变,那么就更新所述BPU中的分支预测数据。
56.根据权利要求55所述的方法,其中更新包括:在确定了所述 指令流水线的选择级中的分支后,利用从该分支中获得的下一个指令 的地址来更新所述BPU。
57.根据权利要求54所述的方法,其中构建分支预测历史表包括: 模拟了将由所述处理器在调度过程中执行的指令,并用指示条件分支 是否被采用的信息来填充分支历史表。
58.根据权利要求54所述的方法,其中构建包括:使用模拟器和 编译器中的至少一个来生成分支历史。
59.根据权利要求54所述的方法,其中基于预加载的分支预测数 据,利用所述分支预测单元执行动态分支预测包括:在所述BPU中解 析分支历史表,该分支历史表通过非顺序指令与所取下一个指令关联 的地址来索引所述非顺序指令。
60.根据权利要求54所述的方法,其中所述微处理器是嵌入式微 处理器。
61.根据权利要求54所述的方法,进一步包括:在执行动态分支 预测后,将所述分支预测单元中的分支历史数据存储在一个非易失性 存储器中,以便在微处理器随后使用时进行预加载。
62.一种在采用动态分支预测的多级流水线微处理器中增强分支 预测性能的方法,包括:
执行静态分支预测,以构建微处理器调度之前的分支预测数据的 分支预测历史表;
将所述分支预测历史表存储在存储器中;
将所述分支预测历史表加载至所述微处理器的分支预测单元BPU 中;和
基于预加载的分支预测数据,利用所述BPU执行动态分支预测。
63.根据权利要求62所述的方法,其中静态分支预测是在微处理 器调度之前执行的。
64.根据权利要求62所述的方法,其中加载所述分支预测表是在 微处理器上电之后执行的。
65.根据权利要求62所述的方法,进一步包括如果预测数据在指 令处理过程中发生改变,那么就更新所述BPU中的分支预测数据。
66.根据权利要求65所述的方法,其中所述微处理器包括一个具 有选择级的指令流水线,且更新包括:在确定了所述选择级中的分支 后,利用从该分支中获得的下一个指令的地址来更新所述BPU。
67.根据权利要求62所述的方法,其中构建分支预测历史表包括: 模拟将由所述处理器在调度过程中执行的指令,并用指示条件分支是 否执行的信息来填充或创建分支历史表。
68.根据权利要求67所述的方法,其中构建包括:使用模拟器和 编译器中的至少一个来生成分支历史。
69.根据权利要求62所述的方法,其中基于预加载的分支预测数 据,利用所述分支预测单元执行动态分支预测包括:解析所述BPU中 的分支历史表,该分支历史表通过非顺序指令与所取下一个指令关联 的地址来索引所述非顺序指令。
70.根据权利要求62所述的方法,其中所述微处理器是嵌入式微 处理器。
71.根据权利要求62所述的方法,进一步包括:在执行动态分支 预测后,将所述分支预测单元中的分支历史数据存储在一个非易失性 存储器中,以便在微处理器随后使用时进行预加载。
72.一种嵌入式微处理器,包括:
多级指令流水线;以及
BPU,其适于执行动态分支预测,其中所述BPU预加载有通过静 态分支预测创建的分支历史表,且所述BPU随后被更新,以包含在动 态分支预测过程中从该分支获得的下一个指令的实际地址。
73.根据权利要求72所述的微处理器,其中所述分支历史表包含 在微处理器调度之前产生的数据,且所述BPU在所述微处理器上电时 被预加载。
74.根据权利要求72所述的微处理器,其中在确定所述指令流水 线的一个选择级中的分支后,所述BPU被更新以包含从该分支中获得 的下一个指令的地址。
75.根据权利要求72所述的微处理器,其中所述BPU预加载有分 支历史表,该分支历史表是在模拟处理过程中通过静态分支预测创建 的,所述模拟处理模拟了将由所述微处理器在调度过程中执行的指令, 且其中所述BPU包括分支历史表,其通过非顺序指令与所取下一个指 令关联的地址来索引所述非顺序指令。
76.一种桶式移位器,包括:
2N位移位器,其具有一个用于接收N位输入的上N位部分和一 个下N位部分,其中X位右移在所述2N位桶式移位器的所述上部中 产生X位右移,在所述下部中产生N-X位左移,而且其中N是2的整 数次幂,数字X<N。
77.根据权利要求76所述的桶式移位器,其中所述2N位移位器 是单向右移移位器。
78.根据权利要求76所述的桶式移位器,其中一个输入的X位旋 转,是通过在执行X位右移后,对所述上N位部分和所述下N位部分 的内容进行位运算逻辑OR实现的,其中X<N。
79.根据权利要求76所述的桶式移位器,其中所述2N位桶式移 位器包括log2N级多路复用器,其具有log2N位控制线,其中所述控制 线的每一位被分别连接至所述多路复用器的相应级。
80.根据权利要求79所述的桶式移位器,其中N等于32,且所述 多路复用器包括分别具有33位、35位、39位、47位和63位的5个级。
81.一种2N位单向右移桶式移位器,其中N是2的整数倍,所述 2N位单向右移桶式移位器包括:
对应于log2N的多个多路复用器级,其中所述多路复用器的每个连 续级将2x个额外位加至前一级中所述多个位上,其中x从0增加至 (log2N-1)。
82.根据权利要求81所述的2N位单向右移桶式移位器,其中N 等于32,所述第一多路复用器是33位,所述第二多路复用器是35位, 所述第三多路复用器是39位,所述第四多路复用器是47位,所述第 五多路复用器是63位,其中这5个级分别适于执行1位、2位、4位、 8位和16位移动。
83.一种利用2N位单向右移移位器执行正X位右移的方法,其中 X是整数,N是按位计算的字长,且0<X<N,所述方法包括:
在所述移位器的上N位部分接收N位数据输入;
将所述输入移动X位;以及
从所述2N位移位器的所述上N位部分取回结果。
84.一种利用2N位单向右移移位器执行负X位右移的方法,其中 X是整数,N是按位计算的字长,且0<X<N,所述方法包括:
在所述移位器的上N位部分接收N位数据输入;
将所述输入移动X位;以及
从所述2N位移位器的下N位部分取回结果。
85.一种利用2N位单向右移移位器执行正X位左移的方法,其中 X是整数,N是按位计算的字长,且0<X<N,所述方法包括:
在所述2N位单向右移移位器的上N位部分接收N位数据输入;
确定X的位运算反数;
将所述输入移动(1+X的反数)位,以及
从所述2N位移位器的下N位部分取回结果。
86.根据权利要求85所述的方法,其中移动包括发送log2N位控 制信号至log2N级多路复用器。
87.根据权利要求85所述的方法,其中N等于32,且所述5级多 路复用器包括分别移动1位、2位、4位、8位和16位的33位、35位、 39位、47位和63位的级。
88.一种利用2N位单向右移移位器执行负X位移动的方法,其中 X是整数,N是按位计算的字长,且0<X<N,所述方法包括:
在所述2N位单向右移移位器的上N位部分接收N位数据输入;
确定X的位运算反数;
将所述输入移动(1+X的反数)位,以及
从所述2N位移位器的上N位部分取回结果。
89.根据权利要求88所述的方法,其中移动包括发送log2N位控 制信号至log2N级多路复用器。
90.根据权利要求89所述的方法,其中N等于32,且所述5级多 路复用器包括分别移动1位、2位、4位、8位和16位的33位、35位、 39位、47位和63位的级。
91.一种利用2N位单向右移桶式移位器对一个N位数执行X位 右旋转的方法,其中0<X<N,所述方法包括:
在所述2N位桶式移位器的上N位部分接收N位数据输入;
将所述N位数据输入右移X位至所述N位桶式移位器中;以及
对所述2N位桶式移位器的上N位部分和下N位部分的内容执行 逻辑OR。
92.一种利用2N位单向右移桶式移位器对一个N位数执行X位 左旋转的方法,其中0<X<N,所述方法包括:
在所述2N位桶式移位器的上N位部分接收N位数据输入;
确定X的位运算反数;
将所述输入移动(1+X的反数)位;以及
对所述2N位桶式移位器的上N位部分和下N位部分的内容执行 逻辑OR。
93.一种2N位桶式移位器,包括:
一对上N位移位器部分和下N位移位器部分,其中对N位数进行 的X位右移在所述上N位部分产生X位右移,在所述下N位移位器 部分产生N-X位左移。
94.一种在微处理器中为所述微处理器上执行的操作系统选择性 地提供用于可扩展的微处理器逻辑的上下文切换支持的方法,所述方 法包括:
为所述操作系统提供至少一个软件扩展,所述软件扩展限定的属 性包括指令和可扩展逻辑的寄存器位置,以及如何使能/禁能所述可扩 展逻辑;
请求特定可扩展逻辑时,产生软件异常;以及
响应该异常,利用所述操作系统调用所述至少一个软件扩展来执 行所述特定可扩展逻辑中包含的数据的上下文切换。
95.根据权利要求94所述的方法,进一步包括:
为所述操作系统提供选择性地禁能或使能访问可扩展逻辑的装 置。
96.根据权利要求95所述的方法,其中为所述操作系统提供选择 性地禁能或使能访问可扩展逻辑的装置包括:为所述操作系统提供扩 展寄存器禁能/使能应用程序。
97.根据权利要求94所述的方法,进一步包括:提供利用所述可 扩展逻辑的功能在软件处理程序之间进行切换的装置。
98.根据权利要求97所述的方法,其中提供利用所述可扩展逻辑 的功能在软件处理程序之间进行切换的装置包括:提供用于执行惰性 上下文切换的装置。
99.根据权利要求98所述的方法,其中提供用于执行惰性上下文 切换的装置包括:提供用于存储包含在当前可扩展逻辑中的数据的状 态的装置,其包括执行惰性上下文切换。
100.一种在微处理器中为所述微处理器上执行的操作系统选择性 地提供可动态配置的可扩展微处理器逻辑的方法,所述方法包括:
为所述操作系统提供至少一个软件扩展;
当请求特定的扩展逻辑时,产生软件异常;以及
响应该异常,利用所述操作系统调用所述至少一个软件扩展来处 理所述微处理器的可扩展逻辑的动态配置。
101.根据权利要求100所述的方法,进一步包括:
为所述操作系统提供选择性地禁能或使能访问可扩展逻辑的装 置,其中所述可扩展逻辑包括扩展寄存器和指令。
102.根据权利要求101所述的方法,其中为所述操作系统提供选 择性地禁能或使能访问可扩展逻辑的装置包括:为所述操作系统提供 扩展寄存器禁能/使能应用程序,从而选择性地禁能或使能对包括扩展 寄存器和指令的可扩展逻辑的访问。
103.根据权利要求100所述的方法,进一步包括:提供利用所述 可扩展逻辑的功能在软件处理程序之间进行切换的装置。
104.根据权利要求103所述的方法,其中提供利用所述可扩展逻 辑的功能在软件处理程序之间进行切换的装置包括:存储包含在当前 可扩展逻辑中的数据的状态,以便将来调用同一处理过程。
105.根据权利要求104所述的方法,其中存储包含在当前可扩展 逻辑中的数据的状态包括:执行惰性上下文切换。
106.根据权利要求103所述的方法,其中提供利用所述可扩展逻 辑的功能在软件处理程序之间进行切换的装置包括:存储一个包含可 扩展逻辑的可再配置逻辑的内容的状态,以便将来调用同一处理过 程。
107.根据权利要求103所述的方法,其中存储一个包含可扩展逻 辑的可再配置逻辑块的内容的状态包括:执行惰性上下文切换。
108.一种可扩展微处理器,包括:
具有多级指令流水线的微处理器;以及
至所述指令流水线的扩展接口,其适于利用定制的处理器指令和 寄存器来补充标准的微处理器指令集。
109.根据权利要求108所述的可扩展微处理器,进一步包括:用 于选择性地禁能/使能所述定制的指令和寄存器的装置。
110.根据权利要求109所述的可扩展微处理器,其中所述用于选 择性地禁能/使能指令和寄存器的装置包括:扩展寄存器禁能/使能应用 程序,其是为所述微处理器上执行的操作系统提供的。
111.根据权利要求108所述的可扩展微处理器,进一步包括:用 于在定制的指令和寄存器之间切换的装置。
112.根据权利要求111所述的可扩展微处理器,其中用于切换的 装置包括:用于存储当前指令和寄存器的状态以便将来调用同一处理 过程的装置。
113.根据权利要求112所述的可扩展微处理器,其中用于存储的 装置包括用于执行惰性上下文切换的装置。
114.根据权利要求111所述的可扩展微处理器,其中用于在定制 的处理器指令之间切换的装置包括:用于再配置连接至所述扩展接口 的可再配置逻辑块的装置。
115.根据权利要求114所述的方法,其中用于切换的装置包括: 用于存储可再配置逻辑区域的状态以便将来调用同一处理过程的装 置。
116.根据权利要求115所述的方法,其中用于存储的装置包括用 于执行惰性上下文切换的装置。
117.一种微处理器,包括:
多级指令流水线;
指令扩展接口,其用于与所述指令流水线的至少一个级接口;
多个扩展应用程序,其通过所述指令流水线可用于所述操作系统;
所要求的扩展确定电路、例程或应用程序,用于识别要求多个扩 展应用程序之一的流水线中的指令;以及
扩展寄存器禁能/使能电路、例程或应用程序,其可用于所述操作 系统进行选择性地使能和禁能扩展应用程序。
118.根据权利要求117所述的微处理器,进一步包括:用于在扩 展应用程序间切换时存储当前可扩展逻辑的状态以便将来调用同一扩 展应用程序的装置。
119.根据权利要求117所述的微处理器,其中所述多个扩展应用 程序包括多个操作特定逻辑块。
120.根据权利要求117所述的微处理器,其中所述多个扩展应用 程序包括动态可配置逻辑块,其是可操作的,以被配置成执行多个不 同的功能。
121.根据权利要求117所述的微处理器,进一步包括:用于确定 当前任务所请求的扩展应用程序是否被加载至所述动态可配置扩展逻 辑块的逻辑。
122.根据权利要求121所述的微处理器,进一步包括:用于将所 要求的扩展加载至所述动态可配置扩展逻辑块的逻辑。
123.根据权利要求117所述的微处理器,其中所述多个扩展应用 程序包括指令和与每个扩展关联的寄存器位置,以及怎样使能/禁能每 个扩展。
124.根据权利要求117所述的微处理器,进一步包括:用于在接 收来自一个任务的请求从而使用来自一个任务的扩展应用程序时,确 定正进行请求的任务是否为最后使用该应用程序的任务的逻辑。
125.根据权利要求124所述的微处理器,进一步包括:用于在如 果所述扩展最后是由不同于正进行请求的任务使用时执行上下文切换 的逻辑。

说明书全文

技术领域

【0002】本发明一般涉及微处理器架构,更具体地是涉及用于在微处 理器中实现改进的流线性能的系统与方法。

背景技术

【0003】多级流水线微处理器架构已为本领域所熟知。典型的微处理 器流水线包括若干级指令处理硬件,其中时钟信号的每个上升脉冲都 将指令传送到流水线的下一级。虽然时钟的速度决定了每秒流水线传 送的数量,但处理器的有效运行速度还是部分依赖于存储器和处理器 之间指令和操作数的传输速度。因此,处理器通常使用一个或多个直 接构建在处理器内的相对较小的高速缓冲存储器。高速缓冲存储器通 常为片上随机存取存储器(RAM),用于存储存储器数据的拷贝,以备 处理器将来使用。典型地,高速缓存位于处理器和主存储器之间,以 拦截处理器对主存储器的访问。访问高速缓冲存储器一般要比访问片 外随机存取存储器迅速得多。当需要先前已访问过的数据的数据时, 可以直接从高速缓存中取回,而不是从相对较慢的片外随机存取存储 器中取回。
【0004】一般地,微处理器流水线在每个时钟信号脉冲将指令推向随 后的流水线级。然而,有效的流水线性能可能比处理器速度能够达到 的性能慢。因而,简单地增加微处理器时钟速度并不是总能相应地提 高系统性能。因此,除了提高时钟速度之外,还需要通过其他方法提 高系统有效性能的微处理器架构。
【0005】其中一种方法是采用与微处理器流水线并行的X和Y存储器 结构。由英国赫特福德郡ARC国际公司设计与许可的嵌入式微处理器 ARCtangent-A4TM和ARCtangent-A5TM线采用了这样的XY存储器结 构。XY存储器被设计用于帮助RISC架构处理器上复合指令的执行, 而不用中断流水线。XY存储器一般被布置成与主处理器流水线平行, 且位于指令解码级之后,但在执行级之前。在解码了指令后,使用地 址指针从XY存储器中取出源数据。然后将该源数据提供给执行级。 在这个示例性的ARC XY架构中,X和Y两个存储器结构获得两个操 作数并在同一个周期中接收结果。XY存储器中的数据通过地址发生器 中的指针来索引,并提供给ARC CPU流水线,以便用任意的ARC指 令进行处理。这些存储器是软件可编程的,以为流水线提供32位、16 位、或双16位数据。
【0006】微处理器设计的主要焦点是通过简化硬件来提高有效时钟速 度。利用局部性的存储器访问特性,在很多计算机系统中都成功地实 现了高性能的高速缓冲存储器。过去,基于微处理器的系统的高速缓 冲存储器片外使用高性能存储器的组件。这主要是因为区的大小, 不可能为片上高速缓冲存储器提供令人满意的性能,因为如果在给定 的制造工艺中为了容纳高速缓冲存储器而增加集成电路的大小,将对 集成电路的成品率造成不利影响。然而,随着近来集成电路技术集成 度的提高,经济地提供片上高速缓冲存储器现在已成为可能。
【0007】在带有高速缓冲存储器的计算机系统中,当需要存储器字时, 中央处理器(CPU)浏览高速缓冲存储器,以获取存储器字的拷贝。 如果在副本中找到了该存储器字,就称为发生了高速缓存“命中”,从 而不去访问主存储器。因而,用于测量高速缓冲存储器有效性的指标 表示就是“命中”率。命中率是指在总的存储器访问中,不访问主存 储器就能在高速缓冲存储器中找到所需数据的百分比。如果在高速缓 冲存储器中找不到所需数据,就称发生了“高速缓存未中(cache miss)”, 此时必须到主存储器中去查找该数据。此外,在许多计算机系统中, 存在部分没有映射到高速缓冲存储器的地址空间。这部分地址空间被 称为“未缓存的”或“不能缓存的”。例如,分配给输入/输出(I/O) 设备的地址几乎总是未缓存的。高速缓存未中和不能缓存的存储器访 问都需要访问主存储器。
【0008】在开发或调试计算机系统的过程中,经常需要监视CPU的程 序执行,或者需要中断一条指令流,以引导CPU执行某些替代指令。 一种用来调试处理器的公知方法采用了用于在处理器运行过程中监视 或观测程序流的装置或手段。对于带有片外高速缓存的系统,使用探 测器观测程序较为直接。然而,对于高速缓存集成在片上的处理器, 观测其程序流就要麻烦得多,因为大多数处理操作都是在芯片中内部 地执行的。
【0009】随着集成电路制造技术的提高,片上高速缓存在大多数微处 理器设计中都已成为标准配置。由于很难与片上高速缓存进行接口, 因而不得不将调试程序移植入芯片内。现代片上高速缓冲存储器现可 直接在高速缓冲存储器自身内使用高速缓存调试单元。
【0010】提高处理器性能的另一种方法是分支预测。分支预测利用指 令历史来预测是否会进入分支或非顺序指令。分支或非顺序指令都是 在满足某个条件时要求跳转到某个非顺序存储器地址的处理器指令。 当取回或取出指令时,如果该指令是条件分支,就会根据过去的分支 历史推理地预测该条件分支的结果,也就是在该条件分支后将被执行 的下一条指令的地址。这种预测性或推测性的结果通过参考或引用分 支历史表加入到流水线中。只有等到流水线后面的级才能知道预测是 否正确。然而,如果预测正确,由于不用返回去获取下一个非顺序指 令的地址,因而将会节约若干个时钟周期。如果预测不正确,必须刷 新作出不正确预测的级之后的当前流水线,并将正确的分支插回第一 级。当预测不正确时,似乎会产生严重的损失,因为这会耗费与没有 使用任何分支预测时同样数量的时钟周期。然而,在多个小循环重复 多次的应用程序中(例如一般用嵌入式处理器实施的应用程序),分支 预测具有令人满意的高成功率,其正确预测带来的益处超过了偶尔不 正确预测造成的损失(即,流水线刷新)。在这些类型的嵌入式应用程 序中,分支预测在超过百分之九十的时间上都是准确的。因而,节约 时钟周期的益处就超过了分支预测不正确导致的流水线刷新所带来的 损失。
【0011】分支预测的实现主要有两种技术。第一种是动态分支预测, 其记录运行时程序流行为,以便建立在流水线前部用于预测将来非顺 序程序流的历史。当出现分支指令时,参考或访问查找表,以便获取 随后将被预测性地插入流水线的下一条指令的地址。一旦查找表填充 了足量的数据,就会显著提高动态分支预测的性能。然而,这种技术 初始时的效率非常低,在足量的指令被处理并填充到分支历史表之前, 它甚至可能降低系统的性能。由于该技术需要一个“热身”阶段才能 变得有效率,因此关键代码的运行时行为可能变得不可预测,使得它 无法被某些嵌入式应用程序接受。而且,如上所述,错误的分支预测 会导致整个流水线刷新,浪费时钟周期并降低性能。
【0012】另一种主要的分支预测技术是静态分支预测。静态分支预测 使用分析技术来指导编译器产生具体的分支指令。这些具体的分支指 令一般包括在还未获得确定分支所需的所有信息时,在流水线早期指 导处理器执行推测性分支预测的线索。然而,静态分支预测技术的缺 点在于,它们一般会使处理器流水线设计变得复杂,因为不得不在多 个流水线级执行推测性的和实际的分支确定或判定。设计的复杂化会 导致硅覆盖面积和成本增加。静态分支预测技术可取得准确的结果, 但无法处理运行时条件的变化。因而,静态分支预测也存在局限性, 降低了对关键嵌入式应用程序的吸引
【0013】虽然分支预测对于提高有效处理速度是有效的,但在处理变 长微处理器指令集时可能出现的问题会降低或抵消这些效率增益。例 如,如果查找表包含的项或条目与宽为32位的取出项有关,且指令长 度从16位到64位不等,那么具体的查找表地址项可能不足以满足引 用某一特定指令。
【0014】计算机或其他数字电路内的数据一般被组织成一种或多种标 准数据大小,称为数据字。例如,非常普遍的数据字大小包含32位二 进制数据(由0和1构成)。数据字的大小影响数字电路中信息的精确 度和/或分辨率,较大的数据大小可以获得较大的精确度和/或分辨率, 因为它们可以表示更多的值。然而,较大的数据字需要较多的数字电 路来处理数据,导致成本上升,复杂度增加。除了处理最大数据大小 的数据之外,许多数字电路还允许处理较小并经平均分割的数据。例 如,最大数据字大小为32位的数字电路也可处理8位或16位数据。 只有最大数据字大小一半的数据操作数一般被称为半字。当不需要特 别精确时,处理较小的数据操作数具有很多优点,例如只需要较小的 存储器来存储数据,或者,同一电路可同时处理多个数据操作数。
【0015】处理数字数据时,两种经证明比较有用的处理操作是旋转和 移动(或称移位)。数据字内数据的各个位以固定顺序排列,通常是从 最左侧的最高有效位(MSB)至最右侧的最低有效位(LSB)。旋转操 作将一个数据字作为输入操作数,并通过将位值向左或向右移动若干 位的位置,在该数据字内重新排列各位的顺序,移动的位数可为固定 值,也可由第二输入操作数指定。当向左旋转时,移过MSB位置的位 值插入到右侧位的位置(右侧的这些位置由于其他位向左移动已被空 出)。当向右旋转时,移过LSB位置的位以同样的方式插到左侧位的位 置。例如,以32位数据字为例:
0101 0001 0000 0000 0000 0000 1010 1110
将该数据字向左旋转四个位的指令产生如下新值:
0001 0000 0000 0000 0000 1010 1110 0101
由于从数据字头部或尾部旋转出的位值都被卷绕并插入到数据字 的另一端,所以不会丢失任何位值。
【0016】第二种操作是移动或移位,其也将一个数据字作为输入操作 字,并通过将位值向左或向右移动若干位的位置,在该数据字内重新 排列各位的顺序,移动的位数可为固定值,也可由第二输入操作数指 定。但移动操作会丢弃移过MSB或LSB位置的位值。用固定值填充 移动操作留下的空位,在绝大多数情况下,对这些空位,要么全部填0, 要么全部填1。以32位数据字为例:
0101 0001 0000 0000 0000 0000 1010 1110
将该数据字向左移动四位的指令产生如下新值:
0001 0000 0000 0000 0000 1010 1110 0000
向右移动时,用MSB位置处的输入值来填充留下的空位位置的情 况也非常普遍。对于有符号二进制数,这具有确保该数保持相同符号 的功能。
【0017】如上所述,移动和旋转是微处理器流水线的执行级频繁使用 的操作功能。大多数微处理器使用一种称为桶式移位器的逻辑单元来 实现二进制数的逐位移动。桶式移位器允许将N位字向左或向右移动 0、1、2、……N-1位。如上所述,典型的32位桶式移位器包括多个 多路复用器。参见图1显示的传统右向和左向桶式移位器结构100。为 了允许双向移动,并行使用了重复硬件,一侧进行左向移动,另一侧 进行右向移动。单个5位控制线将指示多路复用器的每个级进行移动。 如此,0至31位之间任何组合的移动都可以通过使能5个多路复用器 级的多种组合来实现。例如,九位移动具有控制信号01001,其使能第 一和第四多路复用器,同时禁能其他多路复用器。这些并行移位器中 的一个将执行右向移动,而另一个执行左向移动。每个并行移位器的 最后一个的输出信号的选择逻辑将选择适当的结果。
【0018】传统桶式移位器可有效进行移动,然而,它并不是一个理想 方案,因为冗余的硬件结构在芯片上会占据过多的空间,消耗额外的 能量并使硬件设计变复杂。这种32位桶式移位器的硬件复杂性可由需 用于执行其功能的2∶1多路复用器的数量来表征。在本例中,5级中每 级均需要32个2∶1多路复用器,导致一共需要160个2∶1多路复用器。 一般而言,需用于实现一个N位桶式移位器的2∶1多路复用器的数量 是Nlog2(N),其中N是正整数且是2的幂。如上所述,典型的处理器 需要两个这样的桶式移位器来执行左右移动。对于32位处理器,需要 320个2∶1多路复用器。在两个此种桶式移位器对同一输入数据并行工 作的情况下,可采用额外的逻辑来实现旋转操作,以计算每个移位器 所需的有效移动距离,然后将移动操作的结果合并。可通过将一个32 位数向右旋转4位的例子来说明此点。在本例中,右移移位器必须将 输入数据移动4位的位置,左移移位器必须将输入数据移动28位的位 置。旋转结果可通过使用位运算逻辑OR操作合并两个移位器的输出 信号来获取。一般而言,为了将输入数据旋转D位个位置(其中D是 小于数据字长度N的非负整数),要在与该旋转相同方向的移位器应用 移动距离D,并在相反方向的移位器上应用移动距离(N-D)。对于 支持负移动距离的处理器,需要进一步的额外逻辑来计算负移动距离 的绝对值,并将其应用于移动方向与指定方向相反的移位器。
【0019】已开发出的可扩展的微处理器允许用户对基本的微处理器设 计增加专用逻辑扩展。这种技术试图兼有标准微处理器设计和专用逻 辑的优点。设计者试图利用标准的微处理器来执行执行程序代码所需 的大部分功能。设计者将由于这种方法的灵活性而受益——在硬件生 产出来后,可通过改变程序代码来改变设计功能。设计者还可以通过 访问现有的软件基础结构(如编译器、解码器操作系统和应用程序 代码)而获益。通过应用专用的逻辑设计,设计者可用最小的逻辑区 域获得最大的性能——但是设计功能被固定在硬件中,一旦制造出硬 件,就不能改变。
【0020】可扩展的微处理器同时具有这两种方法的优点——特别的专 用扩展指令、缓存器和接口被添加到设计中。对于标准微处理器,设 计功能还是由软件程序控制,因而仍可在硬件制造出来之后改变设计 功能;设计用于基本微处理器的软件基础结构可与处理器的扩展变量 一起使用。通过添加专用扩展功能来加速程序的关键部分可获得高性 能。
【0021】上述方法仍然存在的一些缺点——在某些情况下,设计用于 基本微处理器的软件必须进行修改才能和扩展变量一起使用,尤其是 对于操作系统;一旦硬件制造出来,专用扩展的功能就无法改变,这 意味着要对该设计功能进行任何更改都必须通过改变安排这些基础和 扩展操作的程序来实现。
【0022】应意识到,此处对有关公知设备、方法和材料的优点和缺点 的描述不应将本发明的范围限制在它们之外。实际上,本发明的各种 实施例可包括一个或多个公知设备、方法和材料,而不受其缺点的影 响。
【0023】在此以引用方式将下列参考文献并入本文,作为本文所述技 术的背景:2005年3月1日颁布的、题为“Method And Apparatus For Managing The Configuration And Functionality Of A Semiconductor Design”的美国专利号6,862,563(Hakewill等人);2003年4月25日 提交的、题为“Apparatus and Method for Managing Integrated Circuit Designs”的美国专利申请序列号10/423,745;以及2003年8月29日 提交的、题为“Improved Computerized Extension Apparatus and Methods” 的美国专利申请序列号10/651,560,这些专利和专利申请都已转让给本 发明的受让人。

发明内容

【0024】本发明的各种实施例可通过预测性的XY存储器取出方案改 进或克服传统微处理器架构的一个或多个缺点。在各种实施例中,XY 存储器结构位于指令流水线的并行位置上。在各种实施例中,推测性 的预取方案覆盖了流水线的若干部分,以维持较高的处理器时钟速度。 为了避免对时钟速度产生影响,甚至在当前指令尚未被解码之前,就 预测性地从X和Y存储器中预取出操作数。在各种示例性实施例中, 预测性的预取发生在指令流水线的对齐级中。在各种实施例中,对操 作数的预测性地址计算也发生在指令流水线的对齐级。在各种实施例 中,在指令解码级,以流水线预测性地址计算为基础访问XY存储器, 并且预测性预取方案发生在流水线寄存器文件级。由于实际的解码指 令在流水线中要等到解码级之后才能获得,因此都是在未获知当前指 令是什么内容之前就执行了所有的预取,同时该指令被推出解码级进 入寄存器文件级。因而,在各种实施例中,在寄存器文件级进行实际 指令指定的操作数和预测性预取操作数的比较。选出匹配的预取值送 入指令流水线的执行级。因而,在采用此种方案的微处理器架构中, 可使用单个指令执行数据存储器取、算术运算和结果写回,而不降低 指令流水线的时钟速度或使流水线停顿,即使在处理器处于高时钟频 率的情况下。
【0025】本发明的至少一个示例性实施例可提供用于微处理器流水线 的预测性预取XY存储器流水线。根据这一实施例的预测性预取XY 存储器流水线可包含第一预取级,其包括预取指针地址寄存器文件以 及X和Y地址发生器;第二预取级,其包括用地址指针存取的预取存 储器结构,该地址指针是在所述第一预取级中产生的;以及第三数据 选择级,其包括将预测操作数地址和来自预取存储器结构的数据信息 存储在其中的至少一个预取缓冲器
【0026】至少一个额外的示例性实施例可提供一种为微处理器指令流 水线的预测性预取操作数地址和数据信息的方法。根据这一实施例为 微处理器指令流水线预测性预取操作数地址和数据信息的方法包括, 在解码所述指令流水线中的当前指令之前,存取至少一个含有指向预 取存储器结构中特定位置的指针的寄存器;从所述预取存储器结果中 所述特定位置取出预测操作数数据;以及将所述指针和预测操作数数 据存储在至少一个预取缓冲器中。
【0027】本发明的另一示例性实施例可提供一种微处理器架构。根据 这一实施例的微处理器架构包括多级微处理器流水线;以及与所述微 处理器流水线的至少一部分并行的多级预取存储器流水线,其中所述 预取存储器流水线包括:第一级,其具有用作指向特定预取存储器位 置的指针的至少一个寄存器;第二级,其具有预取存储器结构,该预 取存储器结构用于存储对应于所述微处理器流水线中一预解码指令中 的操作数的预测操作数地址信息;和第三级,其包括至少一个预取缓 冲器;其中所述第一、第二和第三级分别与所述微处理器流水线的相 应级并行,同时且独立。
【0028】所公开的本发明的各种实施例可通过一种带有统一高速缓存 调试单元的微处理器架构克服传统微处理器的一个或多个缺点。在这 些实施例中,所提供的独立的高速缓存调试单元用作指令高速缓存和 数据高速缓存之间的接口。在各种示例性实施例中,高速缓存调试共 享指令高速缓存和数据高速缓存都可访问的硬件逻辑。在各种示例性 实施例中,可选择性地关闭高速缓存调试单元或者使其在独立的时钟 上运行而不是在指令流水线上运行。在各种示例性实施例中,微处理 器内核的执行级的辅助单元用于将指令传递到高速缓存调试单元,并 从高速缓存调试单元中接收响应。高速缓存调试单元也可分别通过指 令高速缓存和数据高速缓存,访问存储器子系统,以执行高速缓存刷 新、高速缓存更新以及其他调试功能。
【0029】本发明的至少一个实施例提供了一种微处理器内核,其包括 多级流水线;高速缓存调试单元;所述高速缓存调试单元和一个指令 高速缓存单元之间的数据通道;所述高速缓存调试单元和一个数据高 速缓存单元之间的数据通道;所述多级流水线的一个单元和所述高速 缓存调试单元之间的数据通道。
【0030】至少一个额外的示例性实施例提供了一种微处理器,其包括 多级流水线;数据高速缓存单元;指令高速缓存单元;和统一高速缓 存调试单元,其可操作地连接至所述数据高速缓存单元、所述指令高 速缓存单元和所述多级流水线。
【0031】本发明的又一实施例提供了一种RISC型微处理器,其包括多 级流水线;以及高速缓存调试单元,其中所述高速缓存调试单元包括: 至所述微处理器的指令高速缓存单元的接口;和至所述微处理器的数 据高速缓存单元的接口。
【0032】在本发明的各种实施例中,在所公开的微处理器架构中,指 令流水线选择性地忽略分支预测信息,以避免将错误指令加进流水线。 这些实施例对于分支选择方案特别有用,其中变长指令都被预测性的 取出。在各种示例性实施例中,以分支预测表中的地址为基础取出32 位字。然而,在以32位取出对象为基础的分支预测系统中,由于指令 存储器含有32位项,因此无论指令长度是多少,该地址参考包含带两 个16位指令字的字,或者16位指令字,以及更长的(32,48或64 位)未对齐的指令字,或者两个此类较长的未对齐指令字的部分。
【0033】在各种实施例中,分支预测表包含耦合于取指令地址较低位 的标签。如果由分支预测表指定的该位置项包含一个以上的指令,如 两个16位指令,或一个16位指令和32位、48位或64位指令的一部 分,可根据最终将被丢弃的指令作出预测。虽然指令对齐器将丢弃不 正确的指令,预测过的分支将已经被插入到流水线中去,而且不会被 发现,直到在流水线中较迟的级中,分支确定导致流水线刷新。
【0034】因而,在各种示例性实施例中,为避免产生此种不正确预测, 如果两个条件都得到满足,预测将被预先丢弃。在各种实施例中,如 果分支预测查找是以对未对齐地址非顺序取数为基础,以及其次,如 果分支目标对齐高速缓存(BTAC)位为零,预测就被丢弃。该第二条 件只有在预测基于带有对齐的指令地址的指令时才能得到满足。在各 种示例性实施例中,零对齐位将表明预测信息用于对齐分支。这将阻 止建立于不正确指令基础上的预测插入流水线中。
【0035】在本发明的各种实施例中,所公开的微处理器架构在去除分 支预测所涉及的固有等待时间的同时,采用了动态分支预测。在这个 实施例中,取指令地址用于在记录历史程序流的BPU表中进行查询, 以预测非顺序程序流何时发生。然而,是采用程序流中的分支指令之 前的指令地址来索引分支表中的分支,而不是使用分支指令的指令地 址来索引分支表。因而,在分支指令之前取出指令将产生预测,并消 除由取出分支指令地址本身在动态分支预测过程中产生的固有的一步 等待时间。在以上实施例中,应注意在某些情况下,延迟槽指令可插 入条件分支之后,使条件分支不是最后的顺序指令。在此种情况下, 因为延迟槽指令是实际顺序起点,非顺序程序流之前的指令将实际上 成为分支指令。因而,BPU将根据条件分支指令本身的地址来索引该 项,因为它是非顺序指令之前的指令。
【0036】在各种实施例中,使用延迟槽指令也会影响选择级中的分支 方案。在各种示例性实施例中,如果使用了延迟槽指令,BPU更新必 须在分支指令之后推迟一个执行周期。该程序由于使用变长指令而变 得更加复杂。执行之后分支方案的执行要求更新BPU表。然而,当处 理器指令集包括变长指令时,它对于确定最后的取地址就变得至关重 要,也就是说,更新地址、当前指令中顺序起点之前的取地址以及当 前指令的地址。在各种示例性实施例中,如果当前指令是对齐的或未 对齐的16位或对齐的32位指令,最后取地址将是当前指令的取指令 地址。对齐的16位或对齐的32位指令的更新地址将是前一指令的最 后取地址。对于未对齐的16位指令,如果按顺序获取它,更新地址将 是前一指令的更新地址。否则,更新地址将是前一指令的最后取地址。
【0037】在同一个实施例中,如果当前指令是未对齐的32位或对齐的 48位指令,最后取地址将只是下一个指令的地址。更新地址将是当前 指令的地址。未对齐的48位指令或对齐的64位指令的最后取地址将 是下一指令减一的地址,而更新地址将是当前指令的地址。如果当前 指令是未对齐64位,最后取地址将和下一个指令地址一样,而更新地 址将是下一个指令地址减一。
【0038】在本发明的示例性实施例中,微处理器架构采用动态地址预 测和零耗循环。在此种处理器中,无论零耗循环机制何时更新BPU都 被更新。特别是,BPU需要存储循环体最后指令的最后取地址。这使 得,每当取指令到达循环体的终点,都允许BPU将取指令预测性地重 定向到循环体的起点。在本实施例中,通过利用指令以32位字获取 并且指令大小一般为16位的整数倍这样的事实,循环体的最后取地址 可根据循环终点后第一条指令的地址获得,无论是否使用变长指令。 因而,在本实施例中,如果在循环体结束之后下一个指令带有对齐的 地址,循环体具有最后指令在循环体结束之后,正好在下一指令地址 之前的最后取地址。否则,如果循环体结束之后的下一个指令带有未 对齐地址,循环体的最后指令在循环体之后带有和下一指令一样的取 地址。
【0039】本发明的至少一个示例性实施例提供了一种在使用变长指令 的微处理器中执行分支预测的方法。根据本实施例的在使用变长指令 的微处理器中执行分支预测的方法包括基于指定的取地址从存储器中 取出指令;基于所取指令的地址作出分支预测;以及如果有如下情形 则丢弃所述分支预测:1)分支预测查找是基于对未对齐指令地址的 非顺序取操作执行的;以及2)所述指令的分支目标对齐高速缓存 (BTAC)位等于零。
【0040】至少一个额外的示例性实施例提供了一种在微处理器中执行 动态分支预测的方法。根据本实施例的在微处理器中执行动态分支预 测的方法包括在第一时钟周期,取出非顺序程序流之前的倒数第二个 指令字和包含下一指令预测信息的分支预测单元(BPU)查找表项; 在第二时钟周期,取出这个非顺序程序流之前的最后一个指令字,并 基于在前一周期中取出的信息对该非顺序程序流进行预测;以及在第 三时钟周期,取出所述预测目标指令。
【0041】另一个示例性实施例提供了一种更新变长指令集微处理器中 分支预测单元查找表的方法。所述更新变长指令集微处理器中分支预 测单元的查找表的方法包括:将零耗循环的循环体的最后指令的最后 取地址存储在所述分支预测查找表中;和每当取指令达到所述循环体 的终点时,将一个取指令预测性地重定向到所述循环体的起点,其中 所述循环体的最后取地址是从所述循环终点后的第一指令的地址中获 得的。
【0042】本发明的至少一个示例性实施例提供了一种在具有多级指令 流水线的微处理器中执行分支预测的方法。根据这一实施例执行分支 预测的方法包括:在微处理器调度之前通过静态分支预测来构建分支 预测数据的分支预测历史表;将所述分支预测数据存储在存储器;上 电时,将所述分支预测数据加载至所述微处理器的分支预测单元(BPU) 中;以及基于预加载的分支预测数据,利用所述BPU执行动态分支预 测。
【0043】本发明的至少一个示例性实施例可提供一种在采用动态分支 预测的多级流水线微处理器中增强分支预测性能的方法。根据这一实 施例增强分支预测性能的方法包括:执行静态分支预测,以构建微处 理器调度之前的分支预测数据的分支预测历史表;将所述分支预测历 史表存储在存储器中;将所述分支预测历史表加载至所述微处理器的 分支预测单元BPU中;和基于预加载的分支预测数据,利用所述BPU 执行动态分支预测。
【0044】本发明还有一个示例性实施例提供了一种嵌入式微处理器架 构。根据这一实施例的嵌入式微处理器架构包括:多级指令流水线; 以及BPU,其适于执行动态分支预测,其中所述BPU预加载有通过静 态分支预测创建的分支历史表,且所述BPU随后被更新,以包含在动 态分支预测过程中从该分支获得的下一个指令的实际地址。
【0045】本发明的至少一个实施例提供了一种桶式移位器,其包括: 2N位移位器,其具有一个用于接收N位输入的上N位部分和一个下N 位部分,其中X位右移在所述2N位桶式移位器的所述上部中产生X 位右移,在所述下部中产生N-X位左移,而且其中N是2的整数次幂, 数字X<N。
【0046】本发明的至少一个另外的实施例提供了2N位单向右移桶式 移位器,其中N是2整数倍。根据本实施例,2N位单向右移桶式移位 器包括多个多路复用器级,与Log2N相对应,其中每个多路复用器的 后续级都在前一级数量上额外增加2x位,其中x从0增加到(Log2N-1)。
【0047】本发明的一个额外实施例提供了利用2N位单向右移移位器 执行正X位右移的方法,其中X是整数,N是按位计算的字长,且 0<X<N。根据这一实施例利用2N位单向右向移位器执行正X位右移 的方法包括:在所述移位器的上N位部分接收N位数据输入;将所述 输入移动X位;以及从所述2N位移位器的所述上N位部分取回结果。
【0048】本发明的又一实施例提供了一种利用2N位单向右移移位器 执行负X位右移的方法,其中X是整数,N是按位计算的字长,且 0<X<N。根据这一实施例利用2N位单向右移移位器执行负X位右移 的方法包括:在所述移位器的上N位部分接收N位数据输入;将所述 输入移动X位;以及从所述2N位移位器的下N位部分取回结果。
【0049】本发明的另一个实施例提供了一种利用2N位单向右移移位 器执行正X位左移的方法,其中X是整数,N是按位计算的字长,且 0<X<N。根据这一实施例利用2N位单向右移移位器执行正X位左移 的方法包括:在所述2N位单向右移移位器的上N位部分接收N位数 据输入;确定X的位运算反数;将所述输入移动(1+X的反数)位, 以及从所述2N位移位器的下N位部分取回结果。
【0050】本发明还有另外一个实施例提供了利用2N位单向右移移位 器执行负的X位右移的方法,0<X<N,其中X是整数,N是字的位长。 根据本实施例,利用2N位单向右移移位器执行负的X位右移的方法 包括在移位器的上部N位部分接收N位数据输入,确定X的位运算反 数,将输入信息移动(1+X的反数)位,以及接收来自2N位移位器 的下部N位部分的结果。
【0051】本发明还有另外一个实施例提供了利用2N位单向右移移位 器执行X位右旋转N位数字的方法,0<X<N。根据这一实施例利用2N 位单向右移移位器对一个N位数执行X位右旋转的方法包括:在所述 2N位桶式移位器的上N位部分接收N位数据输入;将所述N位数据 输入右移X位至所述N位桶式移位器中;以及对所述2N位桶式移位 器的上N位部分和下N位部分的内容执行逻辑OR。
【0052】本发明还有另外一个实施例提供了一种利用2N位单向右移 移位器对一个N位数执行X位左旋转的方法,其中0<X<N。根据这一 实施例利用2N位单向右移移位器对一个N位数执行X位左旋转的方 法包括:在所述2N位桶式移位器的上N位部分接收N位数据输入; 确定X的位运算反数;将所述输入移动(1+X的反数)位;以及对所 述2N位桶式移位器的上N位部分和下N位部分的内容执行逻辑OR。
【0053】本发明还有一个实施例提供一种2N位桶式移位器。根据这一 实施例的2N位桶式移位器包括:一对上N位移位器部分和下N位移 位器部分,其中对N位数进行的X位右移在所述上N位部分产生X 位右移,在所述下N位移位器部分产生N-X位左移。
【0054】本发明的各种实施例提供了一种微处理器架构,其中可扩展 逻辑可通过固定功能的硬件或可编程逻辑扩展添加到微处理器中。可 扩展的微处理器可被配置成,用于提供可定制的具体运行逻辑。这些 操作特定逻辑块(称为扩展),可被实施为固定功能逻辑。这些扩展也 可以通过增加连接于可扩展处理器的可动态配置的逻辑块来实施。然 而,这样的逻辑不可能也不应该对所有其他程序都是可用的。因而, OS可以利用扩展缓存器禁能或使能功能来选择性地禁能或使能对扩 展寄存器的访问。在各种示例性实施例中,当在处理过程之间切换时, 必须存储当前可扩展逻辑的状态,以便将来调用同一处理过程。操作 系统由于是在可扩展逻辑之前被写的,因此不太可能知晓如何处理对 某个特定扩展操作的请求或执行操作间的切换。在各种实施例中,一 系列的软件扩展如同设备驱动程序一样都安装在OS中,OS对其属性 (例如与每个扩展相关联的指令和寄存器位置)进行定义以及扩展如 何启动/禁能。此外,记录某个特定扩展逻辑配置的所有状态信息非常 耗时。因而在各种实施例中,只有非常必要时才应用一种称为惰性上 下文切换的技术来执行扩展状态的上下文切换。当任务被切换掉时, 对所有扩展状态的访问都被禁能,而且该扩展状态的内容不保存。当 请求访问某个具体扩展时,由于对该扩展的访问被禁能,所以将产生 异常。在各种示例性实施例中,OS将访问软件扩展(驱动程序),以 确定该异常是真正的错误还是对扩展逻辑的有效请求。当某项任务作 出有效请求,要求使用被禁能的扩展时,OS确定哪项任务最后使用过 这个禁能的扩展;如果最后一次是提出该请求的任务使用的,就不需 要任何上下文切换;如果该扩展是由别的任务使用的,那么执行上下 文切换。此后,该扩展就被使能,直到下一次任务切换为止——当它 被再次禁能时。
【0055】至少一个实施例提供了一种选择性地提供由微处理器上执行 的操作系统支持、可动态配置的可扩展微处理器逻辑的方法。根据这 一实施例,选择性地提供由微处理器上执行的操作系统支持、可动态 配置的可扩展微处理器逻辑的方法可包括:向操作系统提供至少一个 可配置动态的扩展逻辑块和一个软件扩展。一旦在请求特定扩展逻辑 时产生软件异常,操作系统就调用至少一个软件扩展来处理微处理器 的可扩展逻辑的动态配置。
【0056】在这个实施例中,所有扩展在任务切换都被禁能。当请求访 问特定扩展时,由于对该扩展的访问被禁能,所以会产生异常。在各 种示例性实施例中,OS将调用软件扩展(驱动程序)来确定该异常是 真正的错误还是对扩展逻辑的有效请求。除了为惰性上下文切换作好 准备之外,OS将访问软件扩展(驱动程序)以确定该任务所希期的扩 展逻辑是否载入了动态可配置扩展逻辑块。如果所需扩展已经载入, 就无需进一步的操作;如果扩展未被载入,软件扩展就控制所需扩展 载入动态可配置扩展逻辑块。由于其具有按照任何特定任务要求动态 配置(切换)不同的扩展逻辑硬件的功能,该方法被称为虚拟硬件扩 展方案。
【0057】至少一个额外实施例提供了一种为所述微处理器上执行的操 作系统选择性地提供用于可扩展的微处理器逻辑的上下文切换支持的 方法。根据这一实施例,为所述微处理器上执行的操作系统选择性地 提供用于可扩展的微处理器逻辑的上下文切换支持的方法包括:为所 述操作系统提供至少一个软件扩展,所述软件扩展限定的属性包括指 令和可扩展逻辑的寄存器位置,以及如何使能/禁能所述可扩展逻辑; 当请求特定可扩展逻辑时,产生软件异常;以及响应该异常,利用所 述操作系统调用所述至少一个软件扩展来执行特定可扩展逻辑中包含 的数据的上下文切换。
【0058】本发明的另一实施例提供了一种向微处理器上运行的操作系 统选择性地提供动态可配置、可扩展微处理器逻辑的方法。根据本实 施例,为所述微处理器上执行的操作系统选择性地提供可动态配置的 可扩展微处理器逻辑的方法包括:为所述操作系统提供至少一个软件 扩展;当请求特定的扩展逻辑时,产生软件异常;以及响应该异常, 利用所述操作系统调用所述至少一个软件扩展来处理所述微处理器的 可扩展逻辑的动态配置。
【0059】本发明还有一个实施例提供了一种可扩展微处理器。根据本 实施例,该可扩展微处理器包括具有多级指令流水线的微处理器;以 及至所述指令流水线的扩展接口,其适于利用定制的处理器指令和寄 存器来补充标准的微处理器指令集。
【0060】本发明还有一个实施例提供了一种微处理器架构。根据这一 实施例的微处理器架构包括:多级指令流水线;指令扩展接口,其用 于与所述指令流水线的至少一个级接口;多个扩展应用程序,其通过 所述指令流水线可用于所述操作系统;所要求的扩展确定电路、例程 或应用程序,用于识别要求多个扩展应用程序之一的流水线中的指令; 以及扩展寄存器禁能/使能电路、例程或应用程序,其可用于所述操作 系统进行选择性地使能和禁能扩展应用程序。
【0061】根据下文结合附图所作的详细描述,本发明的其他方面和优 点将变得更加明显,附图仅为对本发明的原理进行图解说明。

附图说明

【0062】图1是一个方框图,示出了根据本发明的至少一个示例性的 处理器内核;
【0063】图2是一个方框图,示出了一种采用XY存储器结构的微处 理器内核架构的指令流水线的一部分,以及由这种指令流水线根据传 统非预测性XY存储器处理的典型的多操作数指令;
【0064】图3是根据本发明至少一个实施例的一种示例性指令格式, 其用于在2个操作数上执行乘法指令以及单指令存储器回写;
【0065】图4是一个方框图,示出了根据本发明至少一个实施例的微 处理器指令流水线架构,其包括并行预测性预取XY存储器流水线;
【0066】图5是一个方框图,更详细地示出了根据本发明至少一个实 施例的预测性预取XY存储器流水线结构和操作;
【0067】图6是一个方框图,示出了根据本发明至少一个实施例的XY 存储器结构中的具体预取操作;
【0068】图7是一个流程图,详细说明了根据本发明至少一个实施例 的用于预测性地预取指令操作数地址的方法的步骤;
【0069】图8是一个方框图,示出了根据本发明至少一个实施例的微 处理器的统一高速缓存调试单元的架构;
【0070】图9是一个示意图,示出了根据本发明至少一个示例性实施 例的32位指令存储器的内容和相应的表,该表说明了与选择性地忽略 分支预测信息的技术结合的指令存储器内特定指令的位置;
【0071】图10是一个流程图,示出了根据本发明至少一个示例性实施 例,选择性地丢弃分支预测的方法步骤,该分支预测对应于和未对齐 16位目标指令带有相同取地址的对齐16位指令。
【0072】图11是一个流程图,示出了一种通过在分支预测单元中表中 存储非顺序分支指令执行分支预测的现有方法,其中该单元表由非顺 序分支指令的取地址索引;
【0073】图12是一个流程图,示出了根据本发明至少一个示例性实施 例的、在非顺序分支指令之前通过在分支预测单元表中存储非顺序分 支指令执行分支预测的方法,该单元表由该指令的取地址索引;
【0074】图13示出当从一个系统中的存储器中取出32位字时,在分 支决定过程中可能遇到的情况,该系统并入有包括长度为16位、32 位、48位或64位指令的变长指令架构。
【0075】图14和图15是表格,说明了计算变长指令集架构处理器中 用于动态分支预测的零耗循环的最后取指令地址的方法。
【0076】图16是一个方框图,示出了传统微处理器内核的一个多级指 令流水线;
【0077】图17是一个流程图,示出了根据本发明至少一个示例性实施 例的、用于以预加载静态分支预测数据为基础执行动态分支预测的方 法的步骤;
【0078】图18是一个方框图,示出了根据本发明至少一个示例性实施 例的、流入和流出分支预测单元的数据流;
【0079】图19是一个示意图,示出了传统并行右移和左移32位桶式 移位器,每个移位器包括五个串联多路复用器;
【0080】图20是一个示意图,示出了根据本发明至少一个实施例的64 位单向右移桶式移位器,该移位器能够进行有符号的右向或左向二进 制移动;
【0081】图21是表,示出了根据本发明的各种实施例、利用桶式移位 器执行左右正负移动;
【0082】图22是表,示出了根据本发明的各种实施例、利用桶式移位 器对给定输入进行左右正负移动的结果;
【0083】图23是表,示出了根据本发明的各种实施例、利用桶式移位 器执行8位旋转的结果;
【0084】图24是表,示出了根据本发明的各种实施例、基于多路复用 器的桶式移位器的多个级;以及
【0085】图25和图26是方框图,示出了根据本发明至少一个示例性 实施例、利用了操作系统支持的虚拟硬件扩展的微处理器架构。

具体实施方式

【0086】以下描述的目的在于通过提供有关新的且实用的微处理器架 构的具体实施例和细节,使本发明能够得到彻底理解。但是应理解, 本发明并不限于这些具体的实施例和细节,它们不过是说明性的例子 而已。还应理解,本领域普通技术人员根据已知系统和方法将认识到, 根据具体设计和其他需要,可以任意数量的替代性实施例用于本发明 需要的目的和益处。
【0087】对本发明的讨论将通过参照各附图进行。图1以方框图的形 式示出了根据本发明至少一个示例性实施例的微处理器内核100的架 构及其外围硬件结构。从图1中可看到若干个将所示微处理器架构与 传统微处理器架构区分开的新特征。首先,图1所示的微处理器架构 具有一个带有七级指令流水线的微处理器内核100。然而,应注意到, 还可以有其他流水线级。图1中还显示了跟在取出(FET)级110之后 的对齐级(ALN)120,由于图1中显示的微处理器内核100处理可变 位长的指令集(也就是16位、32位、48位或64位),对齐级120将 来自取出级110的字格式化为适当指令。在各种示例性实施例中,指 令从存储器中以32位字的格式取出。因而,当取出级110从指定的取 地址中取出32位字时,该取地址处的项可包含对齐的16位或32位指 令、由前一指令的一部分引导的未对齐16位指令,或者基于实际指令 地址的前一指令一部分引导的未对齐的较大指令。例如,取出的字带 有取指令地址Ox4,但实际指令地址是Ox6。在各种示例性实施例中, 从存储器中取出的32位字传送到对齐级120,在这里,被对齐成完整 的指令。在各种示例性实施例中,该对齐包括丢弃多余的16位指令或 集中未对齐的32位或更大的指令,使之成为单个指令。在完全组合指 令之后,N位指令被转送到解码器130。
【0088】还是参照图1,图中还有指令扩展接口280,其容许与定制的 处理器指令接口,该指令用于补充微处理器的标准指令集架构。通过 时序寄存的接口,这些定制的指令与微处理器流水线100的各级接口, 以便在将定制的逻辑附加到预先存在的处理器流水线时最小化关键路 径加载的影响。特别地,在扩展指令接口中为特别定制指令定义了定 制操作码槽,以便微处理器可以正确应答定制指令182的存在,以及 提取源操作数地址,该地址用于索引寄存器文件142。定制指令标志接 口184用于允许添加定制指令标志,该指令标志由微处理器用于进行 利用标准条件代码赋值器或定制扩展条件代码赋值器184进行条件赋 值,以确定指令是否以执行级(EXEC)150的条件赋值结果为基础执 行。定制ALU接口186允许用户定义的算术和逻辑扩展指令,该逻辑 扩展指令的结果是在结果选择级(SEL)160中选择的。
【0089】现参照图2,该方框示出了根据传统非预测性XY存储器 (Mem),采用XY存储器结构的微处理器内核架构的指令流水线和由 该指令流水线处理的典型多操作数指令的微处理器内核架构的指令流 水线的一部分。XY型数据存储器在本领域中是公知的。通常在RISC 处理器中,一个流水线型指令中只实现一个存储器载入或存储。然而, 在某些情况下,为了提高流水线效率,也就是每个时钟执行的操作数 个数,需要单个指令执行多个操作。例如,单个指令可以执行存储器 读取、算术运算以及存储器写入操作。解码和执行此类复合指令的能 力对于数字信号处理器(DSP)操作获得高性能特别重要。DSP操作 一般牵涉到对较大的数据集进行重复计算,因而,需要较高的存储器 带宽。通过使用XY存储器结构,每个时钟周期多达2×32位源数据 存储器读取访问,以及1×32位目标数据存储器写入访问就变得可能 了,得到非常高的数据存储器带宽。(例如,在400MHz处理器中,每 个指令以3个32位访问、2个读取和1个写入,可获得4.8Gb/s的存 储器带宽,或3*32位*400MHz/sec=38.4Gbit/s或4.8Gbyte/s)
【0090】在典型XY存储器实施中,用于XY存储的数据从使用地址 的存储器中取出的,该地址是用在解码级中指令解码的寄存器数字中 选择的。该数据随后被反馈给处理器流水线的执行单元。图2示出此 种XY存储器的实施。在图2中,指令是在取出级210从存储器中取 出的,并且在下一个时钟周期中发送到对齐级220。在对齐级220,该 指令被格式化成适当的形式。例如,如果在取出级210,利用取地址 0x4从存储器中取出了32位字,但实际的指令地址为带有指令地址0x6 的16位字,那么该32位字的前16位就被丢弃。已经适当格式化的指 令随后被发送到解码级230,解码成实际指令,例如图2中所示的已解 码指令241。该已解码指令随后发送到寄存器文件级240。
【0091】图2说明了已解码指令241的格式。该指令包括名称(使用 任意的名称来指称该指令)、目标地址指针和更新模式、第一源地址指 针和更新模式,以及第二源地址指针和更新模式。在寄存器文件级240 中,从已解码指令241中利用寄存器数字(窗口寄存器)作为一组指 向地址寄存器242的指针,选择源地址和目标操作数。该源地址随后 用于访问X存储器243和Y存储器244。因而,在解码级230和执行 级250之间,用于访问的地址需要进行选择,存储器访问应得到执行, 所选数据馈进至执行级250。随着微处理器时钟速度增加,要在单个时 钟周期中执行所有这些步骤变得很困难甚至是不可能了。因此,要么 必须降低时钟频率来接纳这些额外的步骤,要么每个应用XY存储器 的指令使用多个时钟周期。两种方法首先都会消除或者至少降低使用 XY存储器的益处。
【0092】解决该问题的一种方法是扩展处理器流水线,在解码级和执 行级之间增加更多的流水线级。然而,额外的处理器级是不理想的, 有以下几个原因。首先,它们使处理器的架构变得复杂。第二,分支 预测级的不正确预测的不利结果会增加。最后,因为XY存储功能只 有在某些应用程序在处理器上运行时才会需要,所以即使不用这些应 用程序,额外的流水线级将也也必须的。
【0093】另一种可替换的方法是移动该XY存储器到指令流水线的较 早的级,移到寄存器文件之前,为数据选择留出更多的循环时间。然 而,这样做可能会导致复杂化,如果XY存储器移到解码级,窗口寄 存器数在访问存储器之前还没有解码。
【0094】因而,至少根据本发明的一个示例性实施例,为克服这些问 题,源数据需预测性预取并存储以备数据缓存器使用。当需要来自X 或Y存储器的源数据时,只要在执行级之前作出比较,检查所需数据 是否已经被预取。如果是,那么只要从预取数据缓存器中取出数据使 用就可以了。如果还没有预取,那么指令就停止并取出所需数据。为 了减少停止的指令数量,有必要确保数据在大多数时候都被正确地预 取。有两种方案可用于支持该功能。第一,可以使用窗口寄存器的可 预测方式。例如,如果大部分时间用的是同一组N个窗口寄存器,并 且每个指针地址都通过规则的方式增加(按照窗口寄存器选择的时间 顺序),那么这些N个窗口寄存器中每一个的下几个数据都可以被相当 准确地预取。这减少了预测故障。
【0095】第二,通过使用更多的预测数据缓存器,可以预先进行更多 的预测性取出,减少预测失误的可能。由于复合指令也包括更新地址, 这些地址也要进行预测性地更新。一般而言,地址更新是可以预测的, 只要用户以代码的顺序使用同样的调节器及其相关的非调节代码,并 且用户对于执行N个预取数据缓存器坚持使用一套N个指针。因为数 据是预取的,所以预取的数据可能会由于回写至XY存储器而过期。 在此种情况下,指定的预取缓存器可被刷新,过期数据可重新取出, 或者,可替换地,可执行数据转送从而更新这些缓存器。
【0096】图3根据本发明的不同实施例,示出复合指令的格式化,例 如可能用在DSP应用程序中的指令,该程序可能需要可扩展的处理功 能,包括XY存储器。复合指令300由四个子成分组成,指令名称301、 目标指针302、第一操作数指针303以及第二操作数指针304。在图3 所示的指令300中,指令Muldw是一个双16位乘法指令。目标指针 302指定计算指令的结果要用指针地址AX1写入X存储器。标签u0 指定更新模式。这是用户定义的地址更新模式,并且必须在调用可扩 展功能之前指定。源操作数指针303和304,指定第一个操作数要利用 指针地址AX0从X存储器中读取并利用更新代码u1更新,而第二操 作数要使用指针地址AY0和更新代码u0读取从Y存储器中读取。
【0097】图4是方框图,其示出根据本发明至少一个实施例的微处理 器指令流水线架构,其包括并行预测性预取XY存储器流水线。在图4 所示的例子中,指令流水线包括七个级,FCH 401、ALN 402、DEC 403、 RF 404、EX 405、SEL 406和WB 407。如上所述,时钟周期的每个上 升脉冲将指令传送到指令流水线的下一级。与指令流水线并行的是预 测性预取XY存储器流水线,该流水线包括6个级,PF1 412、PF2 413、 DSEL 414、P0 415、P1 416和C 417。应意识到,不同的实施例可能会 多用或少用这些流水线。在各种示例性实施例中,预取不一定都是与 取出指令401同时开始。例如,预取可以开始得早得多,当指针第一 次建立时,或者已经被取出时,因为它最近被用过。如果预取指令预 测不正确,预取也可晚些时候进行。前面的两个级PF1 412和PF2 413, 在寄存器文件级404之前,留有足够的时间来访问所要被选取的地址、 所要执行的存储器访问,以及所要馈进至执行级405的选取的数据。
【0098】图5是方框图,其示出根据本发明至少一个实施例的预测性 预取XY存储器流水线的结构和操作。在图5中,示出了预测性预取 XY存储器流水线的6个流水线级。如上所述,应意识到,在各种实施 例中,不同的实施例可能会多用或少用这些流水线。如上面参照图4 所述的,这些级包括PF1 500、PF2 510、DESL(数据选择)520、P0 530、 P1 540和C550。PF1 500级与指令流水线对齐级同时进行,它包括预 取影子指针地址寄存器文件502和X与Y地址发生器(用于更新指针 地址)504和506。其后,PF2级包括使用PF1级510中指针504和506 对X存储器单元512和Y存储器单元514的访问。在DSEL级520, 在PF2级510中从X存储器512和Y存储器514中读取的数据写入多 个预取缓存器522中的一个。图5中所示的四个预取缓存器522仅为 举例。在各种实施例中,将使用多个队列式预取缓存器。还应注意, 通常每个队列都与任意指针相关联,但每个指针至多只与一个队列关 联。在DSEL级520中,预取数据与包含于来自解码级的实际指令中 的操作数指针一致。如果实际数据已被预取,它们就被发送到适当的 执行级的执行单元中。
【0099】P0 530、P1 540和C 550级都用于继续传递源地址和目标地址 (源地址在DSEL级选取),以便当它们到达C550级时,可以更新实 际指针地址寄存器,而且目标地址也用于将执行结果(如果需要,如 指令指定的那样)回写到XY存储器。PF1 500级的地址寄存器只是影 子地址寄存器,该寄存器根据需要被预测性更新。这些值只有在C级 550中才提交。预取危机检测执行将PF1 500和PF2 510级中使用的地 址与DSEL 520、P0 530、P1540和C550级中的目标地址匹配的任务, 这样如果对要预取的存储器中位置有写入,则预取就被停止,直到写 危机之后的该读取消失为止或重新启动。预取危机也可发生于对存储 器中某个位置处有写入的时候,该位置已经被预取并在DSEL级存储 于缓存器中。在这种情况下,当写入操作完成时缓存器中的项被刷新 并重新取出。
【0100】图6是方框图,其示出根据本发明至少一个实施例的XY存 储器结构中预取逻辑的特定结构。在各种示例性实施例中,在PF1级 605,通过访问一组寄存器610执行预测性预取,该寄存器610用作指 向X和Y存储器614和612上特定位置的指针。在PF2级602中,从 XY存储器中取出数据,然后在下一个时钟脉冲中,预测性操作数数据 和地址信息存储于预取缓存器620中。当还处于也与处理器寄存器文 件级603相应的DSEL级时,匹配与选择模块622检查预取地址。如 果从解码指令中得到的所需操作数地址处于预取缓存器中时,它们被 选取并寄存以供执行级使用。在各种示例性实施例中,预取缓存器可 以是一个、两个、或更多,以便使用先入先出存储方案。当数据项是 从一个预取缓存器620中读取时,其不再驻留在该缓存器中。FIFO缓 存器中的下一个数据自动移动到队列的前面。
【0101】现在参照图7的流程图,该图根据本发明至少一个实施例详 细列出预测性预取操作数地址的方法步骤。在图7中,预取方法步骤 和典型的指令流水线步骤并行描述。预取方法的单个步骤可与各种步 骤同时进行,也可提前进行。图中所暗示的预取程序和指令流水线步 骤之间的任何对应只是为了便于说明。应意识到,直到匹配和选择之 前,预取方法的步骤都独立于指令流水线方法的步骤。
【0102】继续参照图7,预取方法的操作在步骤700开始并进行到步骤 705,这里访问一组用作指向X和Y存储器结构中特定位置的指针的 寄存器。在各种实施例中,步骤705可与进入微处理器指令流水线取 出级的复合指令同时进行。然而,如此处所述,在各种其他实施例中, 由于实际的复合指令尚未解码,因而,预取程序不是建立在该指令中 任何信息的基础上,这可以于指令在步骤707取出之前进行。可选择 地,步骤705可以在复合指令预取之后,解码之前进行。此处所应用 的复合指令是指执行多个步骤的指令,例如存储器读取、算术运算和 存储器写入。
【0103】继续参考图7,在步骤710中,X和Y存储器结构是在预取 寄存器中指针指定的位置存取的。然后本方法的操作进入到步骤715, 这里从X和Y存储器位置读取的数据被写入预取缓存中。
【0104】然后,在步骤720中,预取方法的结果与实际解码指令在匹 配和选择步骤中匹配。匹配或选择被执行从而使从指令流水线的解码 级转送的实际指令中操作数的地址与预取缓存中的预取数据一致。如 果预取数据正确,根据指令的性质(即移动、相加等等),操作在步骤 725进入执行流水线的适当的执行单元。可以理解如果预取操作数地址 不正确,则出现流水线刷新同时实际操作数被取出并注入到流水线。 预取方法的操作在匹配和选择之后结束。应该理解如果需要,也就是, 如果指令请求对XY存储器写入,执行的结果时回写至XY存储器。 而且,可以理解,因为步骤700-715是并行执行的且与处理器流水线 操作703-720独立,那么它们不产生影响,否则延迟取出,对齐,解 码,寄存器文件或执行的处理器流水线操作。
【0105】如上所述,当执行重复功能时,如DSP扩展功能,这里数据 被重复地从XY存储器中读取和写入其中,预测性预取是利用XY存 储器益处而不影响指令流水线的有效方法。尽管使用XY存储器,但 处理器时钟频率可以高速维持。此外,当在微处理器上运行的应用不 要求XY存储器时,XY存储器功能对应用是完全透明的。无论XY存 储器功能是否被调用,正常指令流水线流和分支预测完全不受其影响。 执行分支的辅助单元为应用提供接口从而选择可扩展功能。因此,作 为上述微处理器架构的结果,仔细使用指针及其相关的更新模式,操 作数可以足够的精度预测性预测,从而克服与误预测相关的负担且对 微处理器流水线没有任何影响。
【0106】应该理解,虽然描述符“X”和“Y”在整个说明书中使用, 但这些术语仅是说明性的而不针对任何特殊的结构。也就是说,任何 两维预取存储器结构可被当作“XY存储器”。
【0107】现在参考图8,其示出了高速缓存调试单元(CDU)的示例性 的架构,如图1中所描述的。一般,高速缓存调试便于检查是否某些 数据被存储在高速缓存中,并便于选择性地改变高速缓存的内容。在 某些情形中,需要基于指令或当前处理器流水线条件,刷新高速缓存, 预加载高速缓存,或查找或改变高速缓存中的某些位置。
【0108】如这里所述,在采用高速缓存调试的传统微处理器架构中, 每个指令高速缓存和数据高速缓存的一部分将分配给调试逻辑。然而, 通常这些调试功能是离线,而非在运行时执行的,和/或将减缓。而且, 在处理器设计中,对于使冗余逻辑被使用的指令高速缓存和数据高速 缓存,调试功能具有强烈的相似性。虽然调试单元在运行时很少被使 用,它们即使在没有被特别调用时也消耗功率,因为它们包括在指令 高速缓存和数据高速缓存组件中。
【0109】在各种示例性实施例中,传统高速缓存调试单元的设计缺点 是通过统一高速缓存调试单元800而克服的,如图8所示。统一高速 缓存调试单元800通过提供单个单元而至少消除了这些问题中的一部 分,该单个单元与指令高速缓存单元810和数据高速缓存单元820分 开设置。在各种示例性实施例中,统一高速缓存调试单元800可与指 令流水线通过辅助单元840接口。在各种示例性实施例中,辅助单元 840接口允许请求发送到CDU 800并响应要从CDU 800接收的请求。 这些在图8中被标记为Aux请求和Aux响应。在图8所示的例子中, 状态控制装置850可指定CDU 800的当前状态,比如,在发生取代来 自辅助单元840前一命令的流水线刷新或其他系统变化时。
【0110】如图8所示的示例性实施例所示,指令高速缓存810包括指 令高速缓存RAM 812,分支预测单元(BPU)814和多向指令高速缓 存(MWIC)816。在各种实施例中,CDU 800通过BPU 814经指令高 速缓存RAM存取线801与指令高速缓存RAM 812通信,该高速缓存 RAM存取线801被标记为I$RAM Access。在各种实施例中,该线仅 允许CDU 800和指令高速缓存RAM 812之间的接触。调用外部存储 器子系统830是通过多向指令高速缓存(MWIC)816经请求填充线802 做出的。例如,如果CDU 800需要从存储器子系统230中推出一条信 息至指令高速缓存RAM 812,则使用通过请求填充线202的路径。
【0111】继续参考图8,在各种示例性实施例中,数据高速缓存820 的结构在某些方面反映指令高速缓存810的结构。在图8示出的例子 中,数据高速缓存820包括数据高速缓存RAM 822,数据高速缓存RAM 控制824和数据突发(data burst)单元826。在各种示例性实施例中, CDU 800与数据高速缓存RAM 822通过数据高速缓存RAM控制824 经数据高速缓存RAM存取线803通信。在各种实施例中,该线可允许 CDU 800和数据高速缓存RAM 822之间的通信。因此在各种实施例中, 通过数据高速缓存820对外部存储器子系统830的调用是通过数据突 发单元(DBU)826在填充/刷新请求线804上执行的。因为在各种实 施例中,CDU 200需要从数据高速缓存820中取数据并将其写入存储 器子系统830中。
【0112】在各种示例性实施例中,因为CDU 800位于指令高速缓存810 和数据高速缓存820的外部,这些结构的每个架构都被简化。而且, 因为不同示例的实施例中,CDU 800可在不使用时选择性地关闭,因 此比传统基于高速缓存的调试单元消耗较少的功率,传统基于高速缓 存的调试单元即使在不用时也接收功率。在各种实施例中,高速缓存 调试单元800保持断电,直到从辅助单元840接收调用或直到流水线 确定从辅助单元到高速缓存调试单元800的指令840在流水线中。在 各种实施例中,高速缓存调试单元将保持加电直到接收指令断电。然 而,在不同的其它实施例中,高速缓存调试单元800将在所有请求的 信息被送回辅助单元840后断电。而且,因为传统指令和数据高速缓 存调试单元具有类似的结构,可实现总硅量的减少,这是由于在CDU 800中共享逻辑硬件。
【0113】图1是按照本发明至少一个示例性实施例,示出组合用于选 择性地忽略分支预测信息的技术的32位指令存储器和相应表的内容的 示意图,该表示出在指令存储器中特殊指令的位置。当在采用变长指 令集的微处理器中进行分支预测时,当对一个被打包成与被预测为分 支的对齐指令具有相同32位字的未对齐目标地址预测分支时,会产生 性能问题。
【0114】在图9中,示出了32位宽的存储器字的序列,其含有在存储 器中连续位置中的指令instr_1到instr_4。instr_2是非顺序取指令的目 标。仅根据指令开始的32位取地址,BPU将预测信息存储在表中。在 存储器的任何32位字中可以有一个以上的指令,然而,每32位字仅 做出一个预测。因此,参考图9可看出性能问题。instr_2的指令地址 实际是0x2,然而,取地址是0x0,而该地址的取出将使由instr_1的 16位和instr_2的16位组成的整个32位的字被取出。在简单BPU配 置中,基于地址为0x0的32位字的取指令为instr_1进行分支预测。分 支预测器不考虑这样的事实,即在0x0处的instr_1将被对齐器在其发 出前丢弃,然而预测被保留。如果instr_1是作为0x0处顺序取的结果 而取出的,或如果对0x0做出分支,则预测将被校正,但在该情形中, 分支是对0x2处的instr_2做出的,因此预测是错误的。因此,对于 instr_2,预测是错误的,且将引起正确的指令达到定位点(backstop) 并引起流水线刷新,导致严重的性能削弱。
【0115】图10是按照本发明不同实施例的流程图,其概括出用于通过 选择性地丢弃分支预测信息而解决前述问题的步骤。该方法的操作从 步骤1000开始并进入到步骤1005,这里32位字是从存储器中目标指 令的指定的取地址读取的。然后,在步骤1010,基于取出的指令作出 预测。该预测基于对齐的取指令位置。然后该方法的操作进入到步骤 1015,这里两部分确定测试的第一部分被应用来确定分支预测查找是 否是基于对未对齐指令地址的非顺序取的。对于图9,instr_2满足该条 件,因为instr_2是未对齐的(其不是从线0x0的起始处开始,而是在 第一个16位后开始)。然而,仅有该条件是不充分的,因为有效的分 支预测查找可以基于位于未对齐指令地址处的分支。例如,如果图9 中instr_1不是分支,而instr_2是分支。如果在步骤1015中,可以确 定分支预测查找是基于对于未对齐指令地址的非顺序取出,该方法的 操作可进入到测试的下一个步骤,即步骤1020。否则,该方法的操作 跳转到步骤1025,这里预测被假定是有效的并通过。
【0116】回到步骤1020,在该步骤中,第二个确定是关于是否分支目 标地址高速缓存(BTAC)对齐位是0而做出的,对齐位是0指示预测 信息用于对齐的分支。对于所有对齐的分支,该位为0,且对于所有的 未对齐分支,该位为1,因为该位是从指令地址获取的。对于对准的分 支(即,0,4,8,等)指令地址的第二位将总是0,且对于所有未对 齐的分支(即,2,6,a,等)为1。如果在步骤1020中,确定了分支 目标地址高速缓存(BTAC)对齐位不是0,操作进入到步骤1025,这 里预测通过。否则,如果在步骤1020中,确定了BTAC对齐位是0, 该方法的操作进入到步骤1030,这里预测被丢弃。因此,不是引起不 正确的指令被注入到流水线中并最终引起流水线刷新,而是下一个顺 序指令被正确地取出。在步骤1030后,该方法的操作与步骤1025后 面的相同,这里基于是否分支被预测,在步骤1035中更新下一个取地 址并回到产生下一个取出的步骤1005。
【0117】如上所述,动态分支预测是在流水线处理器架构中减少分支 削弱的有效技术。该技术使用取指令地址来在内部表中查找从而预测 非顺序程序流的目标,该表记录程序流历史。而且,如所讨论的那样, 当使用变长指令架构时,进行分支预测很复杂。在变长指令架构中, 取指令地址不能被假定为与实际指令地址相同。这使得分支预测算法 保证足够的指令字被取出并同时最小化不需要的取出困难。
【0118】一个改进该问题的公知方法是对处理器流水线的前端(front) 增加额外的流水线级,从而在取指令之前执行分支预测以便预测机制 有更多的时间做出更好的决定。该方法的消极效果是额外的流水线级 增加了校正不正确预测的削弱。可替换地,如果预测可与取指令同时 执行,则额外的流水线级将是不必要的。然而,这样的设计具有固有 的等待时间,在该等待时间中额外的指令已经在做出预测之前被取出。
【0119】传统的分支预测方案使用分支指令(非顺序程序指令)的指 令地址来索引其内部表。图11示出这样的传统索引方法,其中两个指 令被顺序地取出,第一个指令是分支指令,而第二个指令是顺序指令 字。在步骤1100中,分支指令是与关联地BPU表项一起取出的。在 下一个时钟周期中,在步骤1105,该指令在流水线中传送至下一级, 这里其被作为预测的分支检测,同时下一个指令被取出。然后,在步 骤1110,在下一个时钟周期中,目标指令是基于在最后周期中做出的 分支预测取出的。因此,引入了等待时间,因为三个步骤都被要求取 出分支指令,做出预测和取出目标指令。如果在步骤1105中取出的指 令字不是部分分支也不是其延迟槽,则该字被丢弃,且结果是“气泡 (bubble)”被注入到流水线中。
【0120】图12示出按照本发明不同实施例,用于做出分支预测的新型 和改进的方法。图12中描绘的方法特征为分支指令之前的指令的地址 被用来索引BPU表,而非分支指令自身的指令地址。因此,通过取出 正好在分支指令之前的指令,可从该指令的地址做出预测,同时分支 指令自身被取出。
【0121】特别参考图12,该方法从步骤1200开始,这里在分支指令之 前的指令与包含在下一指令的预测信息中的BPU项一起被取出。然后, 在步骤1205,分支指令被取出,同时,可基于在前一周期中取出的信 息对分支作出预测。然后,在步骤1210中,在下一个时钟周期中,目 标指令被取出。如图所示,没有额外的指令字在分支和目标指令之间 被取出。因此,没有气泡被注入到流水线中且处理器的整体性能被改 进。
【0122】应该注意到在某些情形中,由于使用延迟槽指令,分支指令 可以不是出发点(departure point)(非顺序流之前的指令)。另一个指 令可以在分支指令之后出现。因此,虽然非顺序跳转由分支指令决定, 要执行的最后指令可以不是分支指令,而可以是延迟槽指令。延迟槽 被用在某些具有隐藏分支决定延时的短流水线的处理器架构中。具有 动态分支预测的处理器可能仍然需要支持延迟槽概念与遗留码兼容。 这里延迟槽指令在分支指令之后使用,利用上面的分支预测方案将引 起分支指令,而非分支指令之前的指令的指令地址被用来索引BPU表, 因为该指令实际上是最后指令之前的指令。该事实对于分支决定具有 重要意义,如下面的讨论。也就是,为了有效地执行分支决定,我们 必须知道前一指令的最后取地址。
【0123】如上面所述,分支指令出现在流水线的选择级并引起BPU更 新从而反映回写级过程中条件分支的结果。参考图13,图13示出在执 行分支决定时碰到的五个潜在的情形。这些情形可按它们的处理方式 分成两组。第一组包括未对齐16位指令和对齐的16位或32位指令。 第二组包括如下三种情形中的一种:未对齐的32位或48位指令,未 对齐的48位或对齐64位指令,和未对齐的64位指令。
【0124】在这些方案下,对于每个指令需要计算两条信息:也就是当 前指令的最后取地址,L0和当前指令U0的更新地址。在第一组的情形 中,需要知道L-1,前一指令的最后取地址,和U-1,前一指令的更新 地址。注意第一情形和第二情形,未对齐的16位指令和对齐的16位 或32位指令,L0仅是被表示为instr-addr[31:2]的取地址的30个最高有 效位。然而,因为两个情形中,指令地址跨度仅为一个取地址线,更 新地址U0取决于是否这些指令顺序地到达,或是非顺序到达。然而, 与针对图4所讨论的方法放在一起,我们知道前面指令的最后取地址 为L-1。该信息被存储在内部并可作为流水线选择级的当前指令的变量。 在第一情形中,如果当前指令是通过顺序程序流到达的,则其具有与 前面指令相同的开始地址,且因此U0将成为U-1。否则,更新地址将 是前面非顺序指令L-1的最后取地址。在第二情形中,16或32位对齐 的指令的更新地址将是前面指令L-1的最后取地址,与前面指令依序与 否无关。
【0125】通过利用每个取指令取出连续的32位字这一事实,可以相同 方式处理情形3-5。因此,当指令足够长和/或未对齐而跨存储器中两 个或多个连续取指令字时,显然我们知道,最后取地址L0可从下一顺 序指令的指令地址获得,该指令地址在图13中被表示为 next_addr[31:2]。在情形3和5中,覆盖未对齐的32位,对齐的48位 和未对齐的64位指令,当前指令的最后部分与下一顺序指令的起始部 分共享同一取地址。因此L0将是next_addr[31:2]。在情形4中,覆盖 未对齐48位或对齐的64位指令,当前指令的最后部分的取地址小于 下一顺序指令的起始地址。因此,L0=next_addr[31:2]-1。另一方面, 在情形3和4中,当前指令跨两个连续的32位取出的指令字。当前指 令最后部分之前的取地址总是指令起始部分的取地址。因此,U0是 inst_addr[31:2]。在情形5中,当前指令的最后部分共享与下一顺序指 令的开始部分相同的取地址。因此,U0是next_addr[31:2]-1。在刚描 述的方案中,更新地址U0和最后取出的地址L0是基于提供给先前信号 从寄存器直接到达的选择级的4个值计算的。这些信号也就是 inst_addr,next_addr,L-1和U-1。仅一个多路复用器被要求计算情形1 中的U0,一个减量器被要求计算情形4中的L0和情形5中的U0。所 揭示的新型改进的分支预测方法的总复杂度与传统方法相比仅有最低 限度的增加。
【0126】在本发明的另一个实施例中,为计算变长指令集微处理器中 动态分支预测的零耗循环的最后的取指令提供流方法和设备。零耗循 环,和前面讨论的动态分支预测都是改进高效处理器性能的强有力的 技术。在采用两种技术的微处理器中,每当零耗循环机制被更新时, BPU都必须更新。特别的,BPU需要循环体的最后取指令地址。这允 许每当取指令达到循环体结束点时,BPU都将取指令重定向循环体起 点。然而,在变长指令架构中,确定循环体的最后取地址不是不重要。 通常,具有变长指令集的处理器仅保持跟踪指令从中取出的第一地址。 然而,循环体的最后取地址是循环体最后指令的最后部分的取地址, 且不易于利用。
【0127】通常,零耗循环机制要求要作为该价格状态一部分存储的循 环体的结束点相关的地址。在各种实施例中,该地址可表示为LP_END。 如果LP_END被赋以循环体最后指令后的下一指令的地址,在各种示 例性实施例中被制定为LP_LAST的循环体的最后取地址可通过挖掘 两个事实而获得。首先,尽管指令集具有可变长度的性质,但指令是 以固定大小的指令块(chunks)取出的,也就是32位字。BPU字仅对 具有这些固定大小块的取地址操作。第二,变长指令大小通常是固定 大小的整数倍,也就是16位。基于这些事实,如果指令的起始地址与 取地址相同,则指令可分类为对齐的。如果,LP_END是对齐的地址, 则LP_LAST必须是LP_END之前的取地址。如果LP_END是未对齐 的,则LP_LAST是LP_END的取地址。因此,等式 LP_LAST=LP_END[31:2]-(~LP_END[1])可用来获取LP_LAST,而无 论LP_END是否对齐。
【0128】参考图14和15,示出了两个例子,其中LP_END既是未对 齐的又是对齐的。在两个情形中,指令“sub”是循环体的最后指令。 在第一个情形中,LP_END位于0xA。在该情形中,LP_END是对齐 的,且LP_END[1]是1,因此,LP_END[1]的形式是0,而循环体的最 后取地址,LP_LAST是LP_END[32:2],LP_END[32:2]是0x8。在第二 情形中,LP_END是对齐的并位于0x18。LP_END[1]是0,所有对齐指 令都是这样,因此LP_END的形式是1,而LP_LAST是LP_END[31:2] -1或LP_LAST上面的线,即线0x14。注意在上面的计算中,为零的 最不重要的地址被忽略以便简化描述。
【0129】图16示出典型的微处理器内核1600,其具有多级指令流水 线。微处理器内核1600的第一级是取指令级(FET)1610。在取指令 级1610中,基于它们的N位指令地址,在指令RAM 1670中取回或取 出指令。在执行取指令的过程中,由其地址索引的指令拷贝被存储在 指令高速缓存1612中。因此,对同一指令的以后调用可从指令高速缓 存1612中取回,而非校对慢的指令RAM 1670。
【0130】多级流水线微处理器的取出级1610的另一个典型组件的分支 预测单元(BPU)1614。分支预测单元1614通过预测非顺序指令的分 支将根据过去指令处理历史被采用而增加处理速度。BPU 1614含分支 查找或预测表,其根据是否分支被采用而存储分支指令的地址和指示。 因此,当分支指令被取出时,参考查找表做出关于下一指令地址的预 测。如这里讨论,预测是否正确直到流水线后面的级中才能知道。在 图16所示的例子中,直到第6级流水线才能知道。
【0131】继续参考图16,典型微处理器内核流水线的下一级是指令解 码级(DEC)1620,这里实际指令被解码成机器语言供处理器编译。 如果指令涉及分支或跳转,则生成目标地址。然后,在级(REG)1630 中,任何被要求的操作数是从寄存器文件中读取的。然后,在级(EXEC) 1640中,特定指令由适当的单元执行。通常执行级单元包括浮点单元 1643,乘法器单元1644,算术单元1645,移位器1646,逻辑单元1647 和加法器单元1648。执行级140的结果是在选择级(SEL)1650中选 择的,且最后该数据通过回写级(WB)1660回写至寄存器文件。指令 流水线随每个时钟周期增加。
【0132】现参考图17,流程示出了按照本发明至少一个示例性实施例, 基于预加载的静态分支预测数据执行动态分支预测的方法的步骤。如 上面的讨论,当软件指令导致非顺序程序流时,动态分支预测常用作 增加流水线性能的技术。因为指令是依次被馈进至流水线的,但直到 流水线后面的级才执行,因此会产生问题。因此,决定是否采用非顺 序程序流(以下也称为分支)直到流水线结束点才能做出,但相关的 哪个地址用来取下一指令的决定要求在流水线前面做出。在无分支预 测时,取出级将必须在分支被决定离开决定级和未用的取出级之间的 所有级后取下一指令。这对性能是不必要的障碍。因此,选择然后取 哪个指令是基于历史性能推理性或预测性做出的。分支历史表被用在 分支预测单元(BPU)中,该单元通过与下一采用的指令相关的地址 来索引非顺序指令。在决定流水线的选择级中的分支后,BPU是以分 支产生的下一指令的地址更新的。
【0133】为了消除动态和静态分支预测技术的限制,本发明揭示复合 分支预测技术,其组合零动态和静态分支预测的优点。继续参考图17, 该技术从步骤1700开始,并进入到步骤1705,这里静态分支预测是基 于调度或部署(deployment)后由微处理器执行的应用、在处理器最终 调度前离线执行的。在各种示例性实施例中,静态分支预测可用编译 器或模拟器辅助执行的。例如,如果处理器要在特殊的嵌入式应用, 如电子装置中采用,模拟器可在处理器被调用之前为由处理器执行的 离散指令集模拟不同指令。通过执行静态分支预测,在分支指令被执 行后,分支历史表可完全由下一指令的实际地址填充或创建。
【0134】在静态分支预测过程中,形成分支预测数据表后,该方法的 操作进入到步骤1710,这里分支预测表被存储在存储器中。在各种示 例性实施例中,该步骤将涉及在非易失性存储器中存储分支预测表供 处理器在以后使用。然后在步骤1715中,当处理器在所需的嵌入式应 用中调用时,静态分支预测数据被预加载至BPU的分支历史表中。在 各种示例性实施例中,分支预测数据在微处理器上电时被预加载,例 如在含处理器的特定产品上电时。
【0135】然后该方法的操作进入步骤1720,这里在通常的操作中,动 态分支预测是基于预加载分支预测数据执行的,而无需要求预热时间 或没有不稳定的结果。然后,在步骤1725中,在决定多级处理器流水 线的选择级中的每个分支后,BPU中的分支预测表被更新从而按需要 改进预测信息的精度。该方法的操作在步骤1730结束。应该理解,在 各种示例性实施例中,每次处理器被断电时,“当前”分支预测表可存 储在非易失性存储器中,这样每次处理器上电时,最近的分支预测数 据被加载到BPU中。
【0136】现参考图18,方框示出按照本发明至少一个示例性实施例的 流进和流出分支预测单元1814的数据。在指令流水线的取出级1810 中,BPU 1814保持分支预测查找表1816,该表存储由分支指令地址索 引的下一指令。因此,当分支指令进入流水线时,查找表1816被指令 地址引用。下一指令的地址是从表1816中提取的并按照分支指令直接 注入到流水线中。因此,如果分支被采用,则下一指令地址在下一时 钟信号可利用。如果没有采用分支,则流水线必须刷新,且正确的指 令地址在取出级1810被回注。如果要求流水线刷新,查找表1816以 实际下一指令的地址更新,这样其可为分支指令的下一事件(instance) 利用。
【0137】现参考图19,示出了用于微处理器的改进的桶式移位器架构 的示例性实施例,其中64位单向右移移位器2000可提供与图19中所 示的传统双32位移位器1900相同的功能,同时电路复杂性和功率消 耗都减小了。如果64位移位器2000被配置为并排(side-by-side)32 位移位器,可利用下面的原理。假定要移动的二进制数(达到32位) 驻存在左侧的64位移位器中,在图20中被标记为A。现在,例如当 执行两位右移操作时,64位结果的左半部分含右移两位的数字A,或 换句话说,最右侧(最不重要)位(LSB)被截去的数字A且两个领 头位零被加到前面(最重要位)(MSB)。然而,64位移位器的右半部 分含数字A,其特征为在移动操作中从A上切去的位1和0后面有30 个零。因此,对64位移位器的左半部分中A执行2位右移导致64位 寄存器的右半部分中的30位左移。因此,对64位单向右移移位器, 双向移动是可能的。
【0138】上面的行为可通过两个事实解释。首先,左移等价于位位置 上同一数字在相反方向上的右移,反之亦然。换句话说,左移等价于 同一绝对移动距离的右移,但符号相反。其次,通过选择64位结果的 左半部分,隐式移动(implicit shift)距离32加到右移的位位置上的实 际数字。在上面图20中所示的例子中,2位右移可当作负两位左移。 选择64位结果的左半部分等价于将32加至移动距离-2。因此,这等 价于左移30个位位置。而且,因为负右移等价于同一移动距离的正左 移,负右移30个位位置可通过选择64位移位器结果的左半部分而获 得,该64位移位器执行了2位右移。类似地,2位位置的负左移是通 过选择上面64位结构的右半部分而执行的。也就是,64位单向右移移 位器可用来计算正负意义上的左移和右移达到32个位位置。
【0139】图20中所示的桶式移位器的另一个优势是因为每个乘法器仅 能分别右移1、2、4、8和16位,且输入的左半部分总被选择为零, 每个乘法器所需的长度仅需要为分别33、35、39、47和63位。这是 因为其它位都是零,且可以从硬件逻辑中清除(left out of)。该结果是 简化的设计,减小了芯片面积和功率消耗。
【0140】现在参考图21,示出按照本发明不同实施例的左右正负移动 方式是以桶式移位器执行的表。图21中表2100示出按照不同实施例, 通过在执行移动距离为D的移动后分别采用移位器的上部分和下部 分,以64位桶式移位器执行的正负右移动,其移动距离D>0和D<0。 而且,正负左移动是在执行距离等于D的反数+1的移动后,通过分 别采用移位器的下部分和上部分而执行的。对于右移,指定的移动距 离被直接应用至移位器。在图21中64位移位器2110的情形中,上部 2110u是上32位,而下部21101是下32位。左正负移动是在移动移动 距离的负数或反数加1个位后通过分别采用下部和上部执行的。
【0141】现在参考图22,示出按照图21中表2100中给出的程序移8 个位的结果。以32位十六进制数AABBCCDD作为输入,正右移8位 的结果简单地为00AABBCC。输入的最后8位DD通过移动操作被截 去。类似地,两个领头零被补充到输入的领头部分。因此,保留在64 位移位器2110的上部2110u中的结果为00AABBCC。下部21101包含 跟有六个零的数字DD。这等价于负右移24位,或类似地左移24位。
【0142】正左移8位是通过移动(^D)+1位并采用下部21101中内容 而获得的,其中^D是D的位运算反数或反码。因此,在该情形中, D=8或二进制的01000。其反数为10111。其加1就获得11000或十进 制的24。这样在64位右移移位器中执行24位右移就在移位器的下32 位中产生BBCCDD00。这与输入AABBCCDD实际被左移8位相同。 类似地,负左移24位位置,也就是D=-24是通过右移D的反数加1 或24位,并采用上部2110u的内容或000000AA而实现的。
【0143】图20中64位单向右移桶式移位器(right only barrel shifter) 2000可用来执行旋转操作。32位量的旋转可通过组合左移和右移的结 果而获得。作为例子,旋转32位量两个位位置至右边可通过组合右移 该量两个位位置的结果和左移该量30个位位置的结果而获得。如上面 证明的那样,这两个移动结果可分别作为64位右移位器的右半部分和 左半部分而利用。因此,同样重要的移位器设计可用来计算32位旋转 至右边。旋转至左边可类似地证明。
【0144】现在参考图23,说明以按照本发明不同实施例的桶式移位器 执行的8位旋转至右边的表被示出。为了执行使用按照本发明不同实 施例的64位单向右移移位器的8位旋转,8位移动是对输入执行的。 这分别将8位右移的结果00AABBCC留在上部中,24位左移的结果 DD000000留在下部中。这两个数字被一起逻辑或从而产生 DDAABBCC。
【0145】图24是示出基于按照本发明不同实施例的多路复用器的桶式 移位器各级的示意图。该图示出了作为64位多路复用器2400的上部 32位中32位数字的输入。图24中示出的多路复用器2400包括5个级。 然而,应该理解这里给出的可应用至不同长度的桶式移位器,例如128 位、256位等,其中N是处理器的指令字长,桶式移位器的长度是2N, 所要求的多路复用器级的数目为Log2N。
【0146】继续参考图24,多路复用器的第一级执行一位移动,因此长 度是33位。第二级执行两位移动,因此是33+2级或35位长。第三 级执行四位移动,因此是35+4或39位长。第四级执行8位移动,因 此是39+8或47位长。最后,第五级执行16位移动并且是47+16或 63位长。借助各级组合,从1到32位的任意长度的移动可用5位控制 线不同可能的级组合执行,该5位控制线具有激活第五级的最高有效 位和激活第一级的最低有效位。而且,与使用要求320位多路复用器 逻辑的双并行(dual parallel)32位移位器的现有技术比较,按照本发 明不同实施例的64位单向右移桶式移位器仅要求217位多路复用器逻 辑。这几乎节省了33%的逻辑,这对不同字大小,如16位、32位、 64位、128位等都保持恒定。
【0147】下面以例子的方式参考不同附图讨论本发明。回头参考图1, 图1以方框图的形式示出按照至少一个本发明示例性实施例的微处理 器内核100的架构和外围硬件结构。几个新型特征可从图1中显然看 出,图1区分了示出的微处理器架构与传统微处理器架构。首先,图1 中微处理器具有微处理器内核100,其具有7个级指令流水线。图1 中示出取出级110后面的对齐级120。因为图1中示出的微处理器内核 100是可操作的,从而以变长指令集工作,也就是16位、32位、48 位或64位,对齐级120将来自取出级110的字格式化为适当的指令。 在不同的示例性实施例中,指令是从存储器中以32为字取出的。因此, 当取出级110取指定取地址处的32位字时,该取地址处的项可含对齐 的16位或32位指令,基于实际指令地址,未对齐的16位指令被部分 前期指令引导(preceded),或较大指令的未对齐部分被部分前期指令 引导。例如,取出的字可具有的取指令地址为Ox4,但实际指令地址 为Ox6。在不同的示例性实施例中,从存储器中取出的32位字被传送 至对齐级120,这里其被对齐到完整的指令中。在不同的示例性实施例 中,该对齐可包括丢弃多余的16位指令或将未对齐的32位或较大的 指令组合到单个指令中。在完成组合指令后,N位指令被转送至解码 器130。
【0148】还参考图1,也示出了指令扩展接口280,其允许定制的用于 补充微处理器的标准指令集架构的处理器指令接口。这些定制的指令 的接口通过时序寄存接口出现暂微处理器流水线100的不同级中,以 便当附加定制的逻辑至预先存在的处理器流水线时最小化关键路径加 载的影响。特别地,定制操作代码槽是在用于特殊定制指令的扩展指 令接口中定义的,以便微处理器正确地应答定制指令182的出现和用 于索引寄存器文件142的源操作数地址的提取。定制指令标志接口184 被用来允许添加定制指令标志,其被微处理器用于条件赋值,该条件 赋值要么使用标准条件代码赋值器要么使用定制扩展条件代码赋值器 以便确定指令是否基于执行级(EXEC)结果150的条件赋值被执行。 定制ALU接口186允许用户定义算术和逻辑扩展指令,其结果在结果 选择级(SEL)160中被选择。
【0149】图26和26是方框图,其示出按照本发明至少一个示例性实 施例的利用由虚拟硬件扩展支撑的操作系统的微处理器架构。按照本 发明至少一个实施例的微处理器能够由用户以接口的方式进行逻辑扩 展,通过该接口可以添加扩展指令和寄存器。处理器指令集的某些槽 和寄存器映射保留通过该接口实现的功能。通过该接口,包括数字信 号处理器(DSP)指令的特殊指令,状态机器和相关机器状态可以延伸 至处理器中,以便可利用和/或加速对微处理器执行关键的应用。
【0150】在各种示例性实施例中,该扩展接口壳用来添加固定的功能 逻辑,如在应用专用集成电路(ASIC)中那样,或可以连接至可编程 逻辑(FPGA或PLD块)的阵列。当连接至可编程逻辑阵列时,可以 基于系统的当前需要动态地改变扩展功能的行为。本发明的实施例提 供系统,其中可编程逻辑的阵列被连接至微处理器的扩展接口,且微 处理器具有这样的机构,通过它可以基于上下文再配置可编程逻辑阵 列。因此,CPU可动态地再配置处理器上运行的程序可利用的扩展指 令/寄存器。
【0151】执行可扩展处理器和操作系统(OS)之间接口的问题是OS 通常是在处理器之前汇编的,且任何扩展软件接口已经被创建。因此, OS能够处理这些扩展而无需驱动程序或其他软件例程辅助。图25和 26示出按照本发明实施例的系统基本组件。图25示出微处理器内核 2500,其包括动态可再配置扩展指令/可通过扩展接口2510存取的寄存 器逻辑。扩展接口2510响应操作系统的命令与操作系统操作系统的软 件接口2520通信。图26示出系统2600,其可以动态地在微处理器的 控制下再配置。系统2600包括可扩展处理器2610,要求的扩展确定例 程或应用程序2620,扩展寄存器禁能/使能例程或应用程序2630,可利 用的扩展例程或应用程序2640和一个或多个扩展应用程序2650,这些 都通过软件接口2660互联。
【0152】在各种示例性实施例中,要求的扩展确定例程或应用程序 2620将通知OS,特殊的程序或用户应用程序其具有可能的扩展功能。 在各种示例性实施例中,这可采用ELF可执行格式的扩展形式。扩展 寄存器禁能/使能例程或应用程序2630允许OS使能或禁能对扩展指令 或寄存器逐个地或成组地存取。如果存取是在OS已经禁能扩展功能时 做出或试图进行的,则会产生异常。在各种示例性实施例中,可利用 的扩展例程或应用程序2640通知OS关于可利用的扩展功能或功能组。 在各种示例性实施例中,这包括关于扩展的配置信息,该配置信息至 少包括在被使用的扩展指令槽处,被利用的扩展寄存器槽处和用于分 解和调试的指令及寄存器的名称处。在各种示例性实施例中,这也将 包括软件功能,OS可通过该软件功能确定所要求的扩展功能是否被构 建在微处理器中;该扩展的一个软件模块,软件模块允许在如果不能 以硬件方式得到该扩展时进行软件仿真;以及可选地,一个配置文件, 其包含连接至扩展接口的可再配置的硬件所需要的扩展。
【0153】在各种示例性实施例中,在运行应用程序之前,用户或管理 员将对OS注册(安装)可利用的扩展功能,类似于微软视窗TM下的 虚拟设备。而且,因为扩展之间的上下文切换要求存储可扩展硬件的 状态信息,所以我们所知的惰性上下文切换技术被用来管理存储在固 定功能扩展或动态可再配置扩展中的机器状态的上下文切换。
【0154】在各种示例性实施例中,当用户应用程序被执行时,没有扩 展功能被加载或使能。OS将检查确保由程序指定的扩展功能已经注 册。程序对扩展功能的存取(如寄存器读取或写入,扩展指令执行) 将引起异常,要么非法指令异常要么扩展禁能的扩展。在各种示例性 实施例中,这将引起OS检查是否指令异常是由对程序要求的扩展功能 (如在ELF文件中指定的那样)存取导致的。否则,错误是真实的非 法指令错误,且OS采取正常的错误处理动作。
【0155】在各种示例性实施例中,如果对其尝试存取的扩展是按照由 要求的扩展确定例程或应用程序2620确定的程序要求指定的,则OS 可采取下面的动作过程中的一个。如果扩展已经内置在微处理器中, 扩展(或含功能的扩展组)可被使能。在程序被允许继续之前,如果 扩展已经正被某些其他任务使用,则可能需要上下文切换存储在扩展 中的状态(惰性上下文切换)。该技术通常被OS用来最小化上下文切 换时间。或者,如果所要求的扩展可作为动态可再配置块利用,则OS 必须确定是否扩展已经用可利用的扩展例程或应用程序2640加载。如 果加载,则OS可检查是否扩展中的任何状态需要上下文切换。如果扩 展没有加载,则OS必须从扩展配置中保存机器状态,该扩展配置在加 载所需扩展配置之前被加载到动态可再配置块中。扩展(或含功能的 扩展组)可被使能且允许程序继续。最后,如果所要求的扩展没有作 为内置功能,或动态可再配置块利用,在没有现存硬件扩展时,适当 的仿真代码(如以OS注册的)可调用来执行所要求的功能。
【0156】上面描述的实施例,通过对OS错误操作码和可执行文件格式 做出扩展,可提供异常的益处,包括公共OS可用在许多不同配置的微 处理器上,除了使用不同扩展功能集的可执行程序,为公共指令集架 构(ISA)编写的不同可执行程序可运行在多任务OS下的任何微处理 器上,该微处理器使用公共ISA,该ISA使用扩展功能的软件仿真, 或内置的扩展功能自身。而且,当微处理器具有动态可再配置扩展逻 辑时,除了使用不同扩展功能集,为公共ISA编写的不同可执行程序 可以一定速度运行在多任务OS下的任何微处理器上,该微处理器使用 公共ISA。因此,这可为扩展功能提供强有力的开发平台,通过该开发 平台,扩展功能可还原为软件或可编程逻辑,同时也运行在基于实际 OS的环境中。而且,这可用来开发现场可升级系统,从而新软件将通 过该软件关键功能的硬件加速和利用动态可再配置硬件而实现。使用 其他扩展功能的现有功能将能够操作,如同OS可无缝管理一样,对于 每个任务,动态可再配置硬件必须有扩展功能。
【0157】虽然前面的描述包括许多细节和说明,但应理解,这些仅是 为了图解说明而包括进来的。本发明的实施例并不限于这里描述的具 体实施例给出的范围。例如,虽然这里揭示的许多实施例参考了具体 实施例描述,但其原理可同样应用至一般的微处理器。实际上,对于 本领域的技术人员来说,根据前面描述和附图,除了这里所描述的实 施例之外,本发明实施例的各种修改将是明显的。因此,这样的修改 在权利要求的范围内。进一步,虽然本发明的实施例在本文中是针对 出于特定目的的特定环境中的特定实现方式描述的,但本领域技术人 员将认识到本发明的用途并不限于此,而且本发明的实施例可有利地 在用于许多目的的任意数量的环境下实施。因此,权利要求应包括本 文所揭示的本发明实施例的全部范围和精神。
相关申请的交叉参考
【0001】本申请要求2004年5月19申请的、名称为“Microprocessor Architecture”的临时申请60/572,238的优先权,在此将其全部内容并 入本文作为参考。
QQ群二维码
意见反馈