指令处理方法以及其所适用的超纯量管线微处理器 技术领域 本发明主要关于微处理器的技术领域, 特别是有关于一种微处理器的微处理器架 构 (microarchitecture)。
背景技术 精简指令集架构处理器的一个典型是这种处理器会使用一种加载 / 储存架构, 也 就是说, 这种处理器包括了一加载指令, 用以将一操作数从存储器中加载至该处理器的一 寄存器, 这种处理器还包括一储存指令, 用以将该处理器的一寄存器中的一操作数储存到 存储器里。 在一般范例中, 上述加载指令与储存指令是唯一会存取存储器的指令, 而执行算 术 / 逻辑运算的其它指令则从寄存器中接收各自的操作数并将结果写入寄存器, 意即, 非 加载或储存的指令不被允许指定在存储器中的操作数, 这使得大部分的非加载或储存的指 令可在单一频率周期执行完毕, 相较之下, 一个加载指令则需要占用数个频率周期以存取 存储器 ( 即高速缓存或系统存储器 )。因此, 一般的指令序列可能包括有一个加载指令, 用 以从存储器中提取 (fetch) 一操作数至一第一寄存器, 该加载指令其后则接着一算术逻辑 (arithmetic/logical) 指令, 用以在第一寄存器中的操作数上执行一算术逻辑运算 ( 即加 法运算、 减法运算、 增量运算、 乘法运算、 移位 / 回转 (shirt/rotate) 运算、 布尔和 (Boolean AND) 运算、 布尔或 (Boolean OR) 运算、 布尔反 (Boolean NOT) 运算等等 ) 并且将结果写入 一第二寄存器, 该算术逻辑指令其后再接着一储存指令, 用以将第二寄存器中的结果写入 存储器。上述加载 / 储存架构的典型范例的优点是众所周知的。
然而, 加载 / 储存架构所产生的结果是许多处理器包括了不同的加载 / 储存单 元, 分离于执行算术逻辑运算的执行单元, 也就是说, 一加载单元仅执行从存储器中将数 据加载至一寄存器, 一储存单元仅执行将数据从一寄存器储存至存储器, 而算术逻辑单元 (Arithmetic/Logical Unit, ALU) 则对来自来源寄存器的操作数执行算术逻辑运算并将结 果写入一目的寄存器。 于是, 以上述的指令序列范例而言, 加载单元会执行加载指令以自存 储器中提取操作数至第一寄存器, 一算术逻辑单元会执行算术逻辑指令以对第一寄存器中 的操作数执行算术逻辑运算 ( 或许使用另一寄存器中的第二操作数来进行 ) 并将结果写入 第二寄存器, 最后, 储存单元会执行将第二寄存器中的结果写入存储器的储存指令。
使用不同加载 / 储存单元以及算术逻辑单元的优点是架构简单且速度快, 然而, 缺点是将结果通过寄存器在各个单元间所做的转送动作会耗用许多时间, 这个问题的一部 分可藉由转送总线而获得解决, 转送总线会把一结果从一执行单元直接转送至另一执行单 元而不需经由寄存器, 但是, 这仍然有时间被耗用的问题, 意即转送过程中所发生的延迟 (delay) 情形。 所被耗用的时间主要是取决于距离与阻容电路 (RC circuit) 时间常数的一 函数, 该距离是指信号在转送总线上来去不同执行单元之间所需的距离, 而阻容电路时间 常数是指关于该信号传输线 (signal trace) 的阻容电路时间常数。关于转送结果的延迟 时间总计可达一或多个频率周期, 视已知设计中执行单元的布设 (layout) 与所使用的制 程技术而定。
发明内容 本发明的一实施例提供了一种超纯量管线微处理器。 该超纯量管线微处理器包括 由该超纯量管线微处理器的一指令集架构所界定的一寄存器集合、 一高速缓存、 多个执行 单元、 以及耦接至上述高速缓存的一储存单元。上述储存单元是不同于该超纯量管线微处 理器的其它执行单元, 且上述储存单元包括一算术逻辑单元。上述储存单元是用以接收一 第一指令, 上述第一指令指定上述寄存器集合的一第一来源寄存器、 以及在一第一来源操 作数上执行并产生一结果的一第一运算。 上述储存单元亦用以自上述第一来源寄存器读取 上述第一来源操作数。 上述算术逻辑单元是用以在上述第一来源操作数上执行上述第一运 算以产生上述结果, 而非将上述第一来源操作数转送至上述其它执行单元的任一者以在上 述第一来源操作数上执行上述第一运算以产生上述结果。 上述储存单元更用以将上述结果 写入上述高速缓存。
本发明的另一实施例提供了一种指令处理方法, 适用于一超纯量管线微处理器, 该超纯量管线微处理器具有由该超纯量管线微处理器的一指令集架构所界定的一寄存器 集合、 一高速缓存、 多个执行单元、 以及不同于该超纯量管线微处理器的其它执行单元的一 储存单元。 上述指令处理方法包括 : 由上述储存单元接收一第一指令, 上述第一指令指定上 述寄存器集合的一第一来源寄存器、 以及在一第一来源操作数上执行并产生一结果的一第 一运算 ; 由上述储存单元自上述第一来源寄存器读取上述第一来源操作数 ; 由上述储存单 元的一算术逻辑单元在上述第一来源操作数上执行上述第一运算以产生上述结果, 而非将 上述第一来源操作数转送至上述其它执行单元的任一者以在上述第一来源操作数上执行 上述第一运算以产生上述结果 ; 以及由上述储存单元将上述结果写入上述高速缓存。
附图说明
图 1 是根据本发明所述的超纯量管线微处理器的方块图。 图 2 是根据本发明如图 1 所示的加载单元 124 的方块图。 图 3 是根据本发明如图 1 所示的超纯量管线微处理器 100 的运作流程图。 图 4 是显示比对本发明所述的超纯量管线微处理器 100 的传统微处理器运作流程 图 5 是根据本发明一实施例所述的效果的时间图。 图 6 是根据本发明另一实施例所示的加载单元的方块图。 图 7 是根据本发明另一实施例所述的加载单元的方块图。 图 8 是根据本发明另一实施例所述的效果的时间图。 图 9 是根据本发明如图 1 所示的储存单元 126 的方块图。 图 10 是根据本发明如图 1 所示的超纯量管线微处理器 100 的运作流程图。 图 11 是显示比对本发明所述的超纯量管线微处理器 100 的传统微处理器运作流图。
程图。 图 12 是根据本发明另一实施例所述的效益的时间图。
【主要组件符号说明】
100 ~超纯量管线微处理器 ;
102 ~指令高速缓存 ; 104 ~指令转译器 ; 106 ~寄存器别名表 ; 108 ~保留站 ; 112 ~通用寄存器集合 ; 114 ~重排缓冲器 ; 116 ~存储器子系统 ; 122 ~其它执行单元 ; 124 ~加载单元 ; 126 ~储存单元 ; 132 ~宏指令 ; 134 ~微指令 ; 142、 162 ~算术逻辑单元 ; 144、 146 ~总线 ; 148 ~转送总线 ; 152 ~结果总线 ; 154、 156 ~算术逻辑单元结果 ; 202 ~地址产生器 ; 204 ~转译后备缓冲器 ; 206 ~快取卷标矩阵 ; 208 ~快取数据矩阵 ; 212 ~控制逻辑 ; 214 ~多工器 ; 222 ~虚拟加载地址 ; 224 ~实体地址 ; 226 ~状态 ; 228 ~快取线 ; 232 ~加载数据 ; 234 ~命中 / 未命中 ; 652、 952 ~第二操作数 ; 662 ~储存区 ; 946 ~储存数据具体实施方式
本发明的发明人发现在一管线流加载单元设计中, 最后一个阶段中可能会有一部 份的频率周期不会被使用到, 也就是说, 加载单元最后一个阶段的电路所产生的延迟时间 只是频率周期时间的一小部分而已。因此, 本发明有利地在实施例中将一算术逻辑单元整 合到加载单元的最后一个阶段中, 使加载单元能够在将从存储器所提取出的加载数据加载 到目的寄存器之前, 先在加载数据上执行算术逻辑运算。 通过此一有利的设计, 使得将加载数据转送至另一算术逻辑执行单元以执行算术逻辑运算时所需耗用的时间能够节省下来。 本发明的微处理器使用了一加载 / 储存的微处理器架构, 该微处理器架构所实现的是处理 器的非加载 / 储存 x86 架构 ( 或处理器的宏架构 )。指令转译器产生特别类型的加载微指 令 ( 此后以 ldalu 微指令称之 ), 用以指示加载单元执行从存储器的加载以及在加载数据上 执行适当的算术逻辑单元运算。这使得该微处理器得以实现复杂的宏指令, 该宏指令所需 要的存储器的读取以及一算术逻辑单元运算皆位于执行单元中, 所以不需要另一执行单元 来执行该算术逻辑单元运算, 从而避免结果转送所造成的时间延迟。
图 1 是根据本发明所述的超纯量管线微处理器的方块图。超纯量管线微处理器 100 包括一指令高速缓存 102, 用以快取一指令集架构 ( 例如 : x86 指令集架构 ) 的宏指 令。宏指令 132 所包括的指令需要一存储器存取与一算术逻辑单元运算功能, 举例来说, 一 x86MOVZX reg/mem( 零值延伸搬移 ) 指令, 用以指示超纯量管线微处理器 100 将存储器中 的来源操作数的内容复制到目的寄存器并且将该值进行零值延伸。 当目的寄存器的尺寸大 小要比存储器操作数的有效大小来的大时, 零值延伸是很重要的一项运作。其它的例子则 包括了 x86 指令, 该 x86 指令涉及 (involve) 一存储器操作数以及一算术逻辑单元功能, 例 如: 加法 (ADD)、 减法 (SUB)、 增量 (INC)、 减量 (DEC)、 乘法 (MUL)、 移位 (SAL/SAR/SHL/SHR)、 回转 (RCL/RCR/ROL/ROR)、 与 (AND)、 或 (OR)、 反 (NOT)、 异或 (XOR) 等功能。 超纯量管线微处理器 100 包括耦接至指令高速缓存 102 的一指令转译器 104, 该指 令转译器 104 将宏指令 132 转译为例如 ldalu 微指令的微指令 134, 该 ldalu 微指令指示加 载单元 124( 将于后续段落作进一步说明 ) 加载存储器中的数据并且于加载的数据上执行 算术逻辑单元运算。在另一实施例中, 指令转译器 104 将宏指令 132 转译为例如 stalu 微 指令的微指令 134, 该 stalu 微指令指示储存单元 126( 将于后续段落作进一步说明 ) 于储 存数据上执行算术逻辑单元运算并且将该数据储存于存储器中。
超纯量管线微处理器 100 包括一寄存器别名表 (Register Alias Table, RAT)106, 寄存器别名表 106 产生微指令相依性并且以程序顺序将微指令 134 发送 (dispatch) 至保 留站 108, 保留站 108 再将微指令 134 送到 (issue) 执行单元 ( 即为加载单元 124、 储存单元 126、 以及其它执行单元 122) 执行。在一实施例中, 保留站 108 不以程序顺序送出微码指令 134。举例来说, 其它执行单元 122 可包括整数算术逻辑单元、 浮点单元、 以及单指令多数据 (Single Instruction Multiple Data, SIMD) 执行单元 ( 例如 : 多媒体延伸 (MultiMedia eXtension, MMX) 单 元 或 单 指 令 多 数 据 串 流 延 伸 (Streaming SIMDExtensions, SSE) 单 元 )。执行单元 122/142/162 各自将其结果 152/154/156 提供至一重排缓冲器 (Reorder Buffer, ROB)114, 重排缓冲器 114 能确保按顺序将指令引退 (retirement) 至架构状态 (architectural state)。超纯量管线微处理器 100 亦包括耦接至加载单元 124 与储存单 元 126 的一存储器子系统 116, 存储器子系统 116 包括了高速缓存、 加载缓冲器、 储存缓冲 器、 以及一总线接口单元。
执行单元 122/142/162 接收来自一通用寄存器集合 (General PurposeRegister, GPR)112 的操作数。执行单元 122/142/162 亦互相接收来自对方的结果 152/154/156 以当 作转送总线 148 上的操作数。尤其是加载单元 124 接收一总线 144 上的操作数, 而储存单 元 126 接收一总线 146 上的操作数。加载单元 124 包括一算术逻辑单元 142, 储存单元 126 包括一算术逻辑单元 162, 其相关的运算将于后续作进一步说明。
将算术逻辑单元功能整合至加载指令中
图 2 是根据本发明如图 1 所示的加载单元 124 的方块图。加载单元 124 包括一 地址产生器 202, 地址产生器 202 使用如图 1 所示的来源操作数 144 以产生虚拟加载地址 222( 也就是将自该处加载数据的存储器地址 )。加载单元 124 存取存储器子系统 116 的一 转译后备缓冲器 (Translation LookasideBuffer, TLB)204, 转译后备缓冲器 204 负责查找 虚拟位置 222 以提供转译后的实体地址 224。 一快取卷标矩阵 (cache tag array)206 查找 实体地址 224 的一卷标部分并且为高速缓存的每一路 (way) 提供状态 226。实体地址 224 的索引 (index) 部分为一快取数据矩阵 208 的索引, 而快取数据矩阵 208 则针对高速缓存 的每一路输出一快取线 (cache line)228。 控制逻辑 212 检查状态 226 以决定实体地址 224 是否为高速缓存的一命中 / 未命中 (hit/miss)234。 此外, 控制逻辑 212 控制一多工器 214, 而多工器 214 选择从数据矩阵 208 所输出的适合的快取线 228 以及加载指令或 ldalu 微指 令所指定的快取线中的数据, 该数据可为根据实施例的不同而为 1、 2、 4、 8、 16、 32、 或 64 位, 且被提供作为加载数据 232。
在一传统的加载单元 124 中, 加载数据 232 将被提供当作一传统加载指令的结果, 然而, 本发明的加载单元 124 有利地, 亦包括了如图 1 所示的算术逻辑单元 142, 算术逻辑单 元 142 接收加载数据 232 以及选择性地在加载数据 232 上执行一算术逻辑单元运算以产生 一算术逻辑单元结果 (alu-result)154。( 如果该指令为一正规加载指令, 则算术逻辑单元 142 只是让加载数据 232 当作算术逻辑单元结果 154 通过。) 算术逻辑单元 142 是用以根 据不同实施例执行不同的各式运算。
在一实施例中, 算术逻辑单元 142 执行一零值延伸 (zero-extend) 运算, 并且包括 多个与门 (AND gate) 以遮除掉 (mask off) 加载数据 232 中不被由 ldalu 微指令指定的存 储器操作数所包括的较高位。
在其它实施例中, 算术逻辑单元 142 是用以额外执行一或多个单一 (single) 操作 数运算, 包括、 但不限定于以下运算 :
1. 布尔 (Boolean) 反 (NOT) 运算 : 算术逻辑单元结果 154 使加载数据 232 的每一 位被反向 (invert)。
2. 不等门 (NE GATE) 运算 : 算术逻辑单元结果 154 为加载数据 232 的二补码负位 (two’ s complement negation)。
3. 增量 (increment) 运算 : 算术逻辑单元结果 154 为加载数据 232 再加 1。
4. 减量 (decrement) 运算 : 算术逻辑单元结果 154 为加载数据 232 再减 1。
5. 符号延伸 (sign-extend) 运算 : 算术逻辑单元结果 154 为符号延伸后的加载数 据 232。
6. 零值侦测运算 : 若加载数据 232 为零时, 算术逻辑单元结果 154 的值为真 (true) ; 反之, 若加载数据 232 不为零时, 算术逻辑单元结果 154 的值则为假 (false)。
7. 壹值侦测运算 : 若加载数据 232 的所有位皆为二进制的壹 (1) 值时, 算术逻辑 单元结果 154 的值为真 ; 反之, 若加载数据 232 的所有位并非全为二进制的壹值时, 算术逻 辑单元结果 154 的值则为假。
8. 数据格式转换运算 : 算术逻辑单元结果 154 为格式化成一指定数据格式的加载 数据 232, 该指定数据格式可为例如一浮点格式、 或单指令多数据格式。在图 6 所示的另一实施例中, 算术逻辑单元 142 是用以接收一第二操作数 652, 以 及用以在第二操作数 652 与加载数据 232 上执行一双操作数的算术逻辑单元功能。算术逻 辑单元 142 可用以另外再执行一或多个双操作数运算, 包括但不限定于以下运算 :
9. 布尔逻辑 (AND、 OR、 XOR、 NOR) 运算 : 算术逻辑单元 142 在第二操作数 652 与加 载数据 232 上执行指定的布尔逻辑运算, 以产生算术逻辑单元结果 154。
10. 算术 (ADD、 SUB、 MUL) 运算 : 算术逻辑单元 142 在第二操作数 652 与加载数据 232 上执行指定的算术运算, 以产生算术逻辑单元结果 154。
在图 6 所示的另一实施例中, 加载单元 124 包括了储存区 662, 储存区 662 用以于 加载地址不存在数据高速缓存时储存第二操作数 652, 而当加载地址不存在数据高速缓存 时会使得必须从系统存储器提取加载数据且 ldalu 微指令必须在加载单元 124 中重新执 行。
图 3 是根据本发明如图 1 所示的超纯量管线微处理器 100 的运作流程图。流程从 方块 302 开始进行。
在方块 302, 指令转译器 104 译码一宏指令 132 并将之转译为单一 ldalu 微指令 134, 宏指令 132 所指定的运算是用以产生自该处提取数据的一存储器地址。宏指令 132 也 指定了将于存储器中提取出的数据上执行的一算术逻辑单元运算以产生一结果。宏指令 132 还指定了作为该结果的目的寄存器的一通用寄存器 112。 ldalu 微指令与宏指令 132 指 定了相同的地址操作数。而且, ldalu 微指令还与宏指令 132 指定了相同的算术逻辑单元 运算。最后, ldalu 微指令更与宏指令 132 针对目的操作数指定了相同的通用寄存器 112。 举例来说, 宏指令 132 可为一 x86 MOVZX reg/mem 指令或一 PMOVZX reg/mem 指令, 在此例 子中, 指令转译器 104 再将宏指令 132 转译为指定了零值延伸为其算术逻辑单元运算的一 单一 ldalu 微指令。流程继续进行到方块 304。
在方块 304, 保留站 112 将 ldalu 微指令送到加载单元 124, 流程继续进行到方块 306。
在方块 306, 加载单元 124 根据由 ldalu 微指令所指定的来源操作数 144 而产生虚 拟加载地址 222, 流程继续进行到方块 308。
在方块 308, 加载单元 124 在转译后备缓冲器 204 中查找虚拟加载地址 222 以取得 实体加载地址 224, 流程继续进行到方块 312。
在方块 312, 加载单元 124 以实体加载地址 224 依序存取快取卷标矩阵 206 与快取 数据矩阵 208 以取得状态 226 与快取线 228, 而多工器 214 选择了由 ldalu 微指令所指定的 加载数据 232, 流程继续进行到方块 322。
在方块 322, 加载单元 124 在加载数据 232 上执行由 ldalu 微指令所指定的算术逻 辑单元运算, 以产生算术逻辑单元结果 154, 流程继续进行到方块 324。
在方块 324, 加载单元 124 将算术逻辑单元结果 154 输出到其结果总线上, 事实上, 算术逻辑单元 142 执行所需的算术逻辑单元运算有利地减轻了将加载数据 232 转送至另一 执行单元 122 以执行算术逻辑单元运算的需求以及转送运算所伴随的延迟。流程继续进行 到方块 326。
在方块 326, 重排缓冲器 114 从加载单元的结果总线接收并储存算术逻辑单元结 果 154, 流程继续进行到方块 328。在方块 328, 重排缓冲器 114 将其所储存的算术逻辑单元结果 154 引退至目的通用 寄存器 112, 流程结束。
图 4 是显示传统微处理器的运作流程, 用以比对本发明所述的超纯量管线微处理 器 100 的运作。虽然图 1 所示的超纯量管线微处理器 100 中的组件亦存在于图 4 的描述 中, 但必须了解的是图 4 所述的微处理器中的加载单元并不包括用以在加载数据上执行算 术逻辑单元运算的一算术逻辑单元, 且指令转译器并不会针对加载数据产生特别的 ldalu 微指令。流程从方块 402 开始进行。
在方块 402, 指令转译器 104 译码一宏指令 132 并将之转译为二个微指令 134, 一 为加载指令, 一为 alu 微指令。举例来说, 宏指令 132 可为一 x86MOVZX reg/mem 指令或一 PMOVZX reg/mem 指令, 在此范例中, 指令转译器 104 会将宏指令 132 转译为一加载微指令以 及指定零值延伸为其算术逻辑单元函数的一 alu 微指令。接着, 寄存器别名表 116 在加载 微指令上针对 alu 微指令产生一相依性。流程继续进行到方块 404。
在方块 404, 保留站 112 将加载指令送到加载单元 124, 流程继续进行到方块 406。
在方块 406, 加载单元 124 根据由加载指令所指定的来源操作数 144 产生虚拟加载 地址 222, 流程继续进行到方块 408。
在方块 408, 加载单元 124 在转译后备缓冲器中查找虚拟加载地址 222 以取得实体 加载地址 224, 流程继续进行到方块 412。
在方块 412, 加载单元 124 以实体加载地址 224 依序存取快取卷标矩阵 206 与快取 数据矩阵 208 以取得状态 226 与快取线 228, 而多工器 214 选择了由加载指令所指定的加载 数据 232, 流程继续进行到方块 414 与方块 416。
在方块 414, 加载单元 124 将所提取的加载数据 232 输出到其结果总线上, 流程继 续进行到方块 418。
在方块 416, 既然加载数据 222 目前已可取用为一来源操作数, 则保留站 112 将 alu 微指令送到一执行单元 122( 例如一整数单元 ), 流程继续进行到方块 418。
在方块 418, 整数单元 112 从加载单元 124 的结果总线接收加载数据 232 作为一来 源操作数, 流程继续进行到方块 422。
在方块 422, 整数单元 112 在接收自加载单元 124 的加载数据 232 上执行由 alu 微 指令所指定的算术逻辑单元运算, 以产生一算术逻辑单元结果。流程继续进行到方块 424。
在方块 424, 整数单元 112 将算术逻辑单元结果输出到其结果总线 152 上, 流程继 续进行到方块 426。
在方块 426, 重排缓冲器 114 从整数单元 122 的结果总线 152 接收并储存算术逻辑 单元结果, 流程继续进行到方块 428。
在方块 428, 重排缓冲器 114 将其所储存的算术逻辑单元结果引退至目的通用寄 存器 112, 流程结束。
比较图 3 与图 4 可发现, 指令转译器 104 产生一单一 ldalu 微指令、 以及加载单元 124 包括一算术逻辑单元 142 以执行由 ldalu 微指令所指定的算术逻辑单元运算, 有利地避 免了由传统微处理器所引起的转送运作, 如图 5 所示。
图 5 是根据本发明一实施例所述的效果的时间图。图中展示了六个频率周期, 图 左侧所示为传统微处理器中由寄存器区隔的管线流阶段, 图右侧所示为本发明一实施例的超纯量管线微处理器 100 中由寄存器区隔的管线流阶段。在图 5 所示的范例中, 假设了加 载单元 124 包括有四个管线流阶段, 各自被标示为 A、 B、 C、 以及 D。然而, 需要注意的是在其 它实施例中, 加载单元 124 可具有不同数量的管线流阶段。而在图 5 所示的范例中, 假设了 传统微处理器中的整数算术逻辑单元包括单一阶段。
在传统微处理器中, 一加载指令接在加载单元 124 分别对应到频率周期 1、 2、 3、 4 的管线流阶段 A、 B、 C、 以及 D 之后进行。然后加载数据被转送至整数单元, 整数单元于频率 周期 5 在加载数据上执行一算术逻辑单元运算, 最后, 于频率周期 6, 由整数单元所产生的 算术逻辑单元结果被写入至重排缓冲器 114 并且被转送至其它执行单元 122。
在如图 1 所示的超纯量管线微处理器 100 中, 相似于传统微处理器一般, 一 ldalu 指令接在加载单元 124 分别对应到频率周期 1、 2、 3、 4 的管线流阶段 A、 B、 C、 以及 D 之后进 行。然而, 不同于传统微处理器, 在加载单元 124 于频率周期 4 的管线流阶段 D 中, 算术逻 辑单元 142 在加载数据 232 上执行了由 ldalu 微指令所指定的算术逻辑单元运算以产生算 术逻辑单元结果 154。在频率周期 5 中, 由加载单元 124 所产生的算术逻辑单元结果 154 被 写入至重排缓冲器 114 并且被转送至其它执行单元 122。因此可见, 如图 1 所示的超纯量 管线微处理器 100 至少在比传统微处理器更早一频率周期时, 即产生了算术逻辑单元结果 154 并且让其它指令可取得算术逻辑单元结果 154。而如上述所言, 当信号在转送总线上来 去不同执行单元之间所需的距离、 以及该信号传输线的阻容电路时间常数增加时, 意即转 送延迟增加时, 那么本发明所能省下的时间也就跟着提升了。 图 7 是根据本发明另一实施例所述的加载单元的方块图。本图中的加载单元 124 类似于图 1 所示的加载单元 124, 然而, 图 7 的加载单元 124 在内部将算术逻辑单元结果 154 转送回给自己当作一来源操作数 144, 以供计算出一后续加载指令 ( 或 ldalu 微指令 ) 的一 加载地址 222。 在某些设计中, 此内部转送的路径可能比传统微处理器中来自其它执行单元 的外部转送路径来的短, 该其它执行单元会执行算术逻辑单元运算且结果会被当作一来源 操作数 144 从该处被转送至加载单元 124。有关内部转送的路径的优点将于图 8 中绘示。
图 8 为一相似于图 5 所示的时间图。然而, 图 8 所示的范例假设了在传统微处理 器中, 一加载指令接在 alu 微指令之后并且使用 alu 微指令的算术逻辑单元结果当作一来 源操作数以计算加载地址。同样地, 第八图中假设了在超纯量管线微处理器 100 中, 一加载 指令接在 alu 微指令之后并且使用 alu 微指令的算术逻辑单元结果 154 当作一来源操作 数以计算加载地址。此外, 图 8 所示的范例假设传统微处理器 ( 以及超纯量管线微处理器 100) 分别在频率周期 5 与 7 中, 需要一额外的频率周期以将结果自加载单元 124 转送至整 数单元 122, 以及另一额外的频率周期将结果自整数单元 122 转送至加载单元 124。如图 8 所示, 本发明的加载单元 124 在频率周期 4 的管线流阶段 D 中执行由 ldalu 微指令所指定 的算术逻辑单元运算, 并且在频率周期 5 中将算术逻辑单元结果 154 内部转送回给自己使 得加载单元 124 能够使用算术逻辑单元结果 154, 以产生加载地址 222, 而非使一算术逻辑 单元结果自其它执行单元被转送至加载单元 124。因此, 在此范例中, 具有如图 7 所示的加 载单元 124 的超纯量管线微处理器 100 可有利地在以少于传统微处理器三个频率周期的情 况下, 即处理完 ldalu 微指令或加载微指令序列。
图 9 是根据本发明如图 1 所示的储存单元 126 的方块图。储存单元 126 包括了图 1 中的算术逻辑单元 162, 算术逻辑单元 162 所接收的储存数据 946 是经由总线 146 来自通
用寄存器集合 112 的、 或经由转送总线 148 来自执行单元 122/124/126。算术逻辑单元 162 在储存数据 946 上执行一算术逻辑单元运算以产生一算术逻辑单元结果 156, 而算术逻辑 单元结果 156 被提供至存储器子系统 116 中的一储存缓冲器、 被提供至重排缓冲器 114、 以 及经由转送总线 148 被提供至执行单元 122/124/126。储存缓冲器最终将算术逻辑单元结 果 156 写入至存储器。该算术逻辑单元运算可为如图 2 所述由加载单元 124 所执行的任一 单来源操作数的算术逻辑单元运算。另外, 在一实施例中, 算术逻辑单元 162 可接收一第二 操作数 952 以致该算术逻辑单元运算可为如图 6 所述由加载单元 124 所执行的任一双来源 操作数的算术逻辑单元运算。
如下于第 10 ~ 12 图所述, 通过将算术逻辑单元 162 整合至储存单元 126 以于将 储存数据 946 写入存储器前先在储存数据 946 上执行算术逻辑单元运算, 即可有利地避免 掉传统微处理器所会发生的转送延迟。
在一实施例中, 超纯量管线微处理器 100 将储存运算拆解为两个不同的微指 令 - 储存地址微指令以及储存数据微指令。而超纯量管线微处理器 100 包括了两个单独的 单元 - 储存地址单元以及储存数据单元, 分别用以执行该储存地址微指令以及储存数据微 指令。储存地址单元包括一地址产生器 ( 类似于加载单元 124 的地址产生器 202), 用以从 储存地址微指令所指定的来源操作数产生一虚拟储存地址。 然后储存地址单元于转译后备 缓冲器 204 中查找虚拟储存地址以取得一转译后的实体储存地址, 该实体储存地址即为储 存地址单元写入至存储器子系统 116 的一储存缓冲器的数据, 且该储存缓冲器是被配置予 此储存运算。储存缓冲器中的实体储存地址最后被写入到快取卷标矩阵 206 与快取数据矩 阵 208、 或被写入到系统存储器中。在一传统微处理器中, 储存单元仅接收储存数据 ( 不会 有储存单元之外的其它执行单元在储存数据上执行一算术逻辑单元运算 )、 以及将储存数 据写入至储存缓冲器。 储存缓冲器最后将储存数据从储存数据单元写入至由储存地址单元 所产生的存储器地址。 在一实施例中, 储存地址单元并未被绘示出, 而储存数据单元则为图 9 所示的储存单元 126。
图 10 是根据本发明如图 1 所示的超纯量管线微处理器 100 的运作流程图。流程 从方块 1002 开始进行。
在方块 1002, 指令转译器 104 译码一宏指令 132 并将其转译为单一 stalu 微指令 134。 宏指令 132 指定了容纳 (hold) 一操作数的一通用寄存器 112, 一算术逻辑单元运算即 执行于该操作数上以产生一结果并将结果写入存储器中。stalu 微指令针对其来源操作数 指定了与宏指令 132 所指定的相同的通用寄存器 112。再者, stalu 微指令亦指定了与宏指 令 132 所指定的相同的算术逻辑单元运算。流程继续进行到方块 1004。
在方块 1004, 保留站 112 将 stalu 微指令送到储存单元 126, 流程继续进行到方块 1006。
在方块 1006, 储存单元 126 从由 stalu 微指令所指定的通用寄存器 112( 或者从转 送总线 148) 接收储存数据 946。 如果 stalu 微指令指定的是一双操作数的算术逻辑单元运 算, 则储存单元 126 再接收来自于一第二通用寄存器 112( 或转送总线 148) 的第二操作数 952。储存单元 126 的算术逻辑单元 162 在储存数据 946 上 ( 以及于指定时, 亦包括在第二 操作数 952 上 ) 执行由 stalu 微指令所指定的算术逻辑单元运算, 以产生算术逻辑单元结 果 156。流程继续进行到方块 1008。在方块 1008, 储存单元 126 将算术逻辑单元结果 156 写入存储器子系统 116 的一 储存缓冲器。如上所述, 在一实施例中, 算术逻辑单元结果 156 将被写入到的物理存储器地 址亦被储存地址单元写入至该储存缓冲器, 以因应一储存地址微指令。流程继续进行到方 块 1012。
在方块 1012, 储存缓冲器将算术逻辑单元结果 156 写入存储器, 流程结束。
图 11 显示传统微处理器的运作流程, 用以比对本发明所述的超纯量管线微处理 器 100 的运作。虽然图 1 所示的超纯量管线微处理器 100 中的组件亦存在于图 11 的描述 中, 但必须了解的是传统微处理器中的储存单元并不包括用以在储存数据上执行算术逻辑 单元运算的一算术逻辑单元, 且指令转译器并不会针对储存数据产生特别的 stalu 微指 令。流程从方块 1102 开始进行。
在方块 1102, 指令转译器 104 译码一宏指令 132 并将的转译为二个微指令 134, 宏 指令 132 指定了容纳一操作数的一通用寄存器 112, 一算术逻辑单元运算即执行于该操作 数上以产生一结果并将结果写入存储器中。第一个转译后的微指令为一算术逻辑单元指 令, 该算术逻辑单元指令针对其来源操作数指定了与宏指令 132 所指定的相同的通用寄存 器 112, 且该算术逻辑单元指令亦指定了与宏指令 132 所指定的相同的算术逻辑单元运算。 该算术逻辑单元指令针对其目的操作数指定了一临时寄存器。 第二个转译后的微指令为一 储存微指令, 该储存微指令针对其来源操作数 ( 意即针对其储存数据 ) 指定了上述临时寄 存器。流程继续进行到方块 1104。
在方块 1104, 保留站 112 将 alu 微指令送到整数单元 122, 流程继续进行到方块 1106。
在方块 1106, 整数单元 122 从 alu 微指令所指定的通用寄存器 112 接收来源操作 数, 并且在来源操作数上执行由 alu 微指令所指定的算术逻辑单元运算以产生一结果。流 程继续进行到方块 1108 与方块 1112。
在方块 1108, 整数单元 122 将结果输出到结果总线 152 上, 流程继续进行到方块 1114。
在方块 1112, 保留站 108 将储存微指令送到储存单元 126, 流程继续进行到方块 1114。
在方块 1114, 储存单元 126 通过结果总线 152 从整数单元 112 接收结果, 流程继续 进行到方块 1116。
在方块 1116, 储存单元 126 将结果写入储存缓冲器, 流程继续进行到方块 1118。
在方块 1118, 储存缓冲器将结果写入存储器, 流程结束。
比较图 10 与图 11 可发现, 指令转译器 104 产生一单一 stalu 微指令, 且储存单元 126 包括一算术逻辑单元 162 以执行由 stalu 微指令所指定的算术逻辑单元运算, 此有利地 避免了由传统微处理器所引起的转送运作, 如图 12 所示。
图 12 是根据本发明一实施例所述的效果的时间图。图中展示了三个频率周期, 图 左侧所示为传统微处理器中由寄存器区隔的管线流阶段, 图右侧所示为本发明一实施例的 超纯量管线微处理器 100 中由寄存器区隔的管线流阶段。在图 12 所示的范例中, 假设了储 存单元 126 包括单一管线流阶段。然而, 需要注意的是在其它实施例中, 储存单元 126 可具 有不同数量的管线流阶段。而在图 12 所示的范例中, 假设了传统微处理器中的整数算术逻辑单元包括单一阶段。
在传统微处理器中, 一 alu 微指令接在整数单元 122 用以执行指定算术逻辑单元 运算的管线流阶段之后进行, 该指定的算术逻辑单元运算是用以于频率周期 1 内产生一结 果。然后该结果通过转送总线 148 从整数单元被转送至储存单元, 而储存单元于频率周期 2 内接收该结果为储存数据。最后在频率周期 3, 储存数据被写入储存缓冲器。
在如图 1 所示的超纯量管线微处理器 100 中, 一 stalu 指令接在储存单元 126 于频 率周期 1 的管线流阶段之后进行。相较于传统的微处理器, 在频率周期 1, 储存单元 126 中 的算术逻辑单元 162 在储存数据 946 上 ( 以及于指定时, 亦包括在第二操作数 952 上 ) 执 行由 stalu 微指令所指定的算术逻辑单元运算, 以产生算术逻辑单元结果 156。 在频率周期 2, 由储存单元 126 所产生的算术逻辑单元结果 156 被写入储存缓冲器。因此可见, 如图 1 所示的超纯量管线微处理器 100 至少在比传统微处理器更早一频率周期时, 即产生了算术 逻辑单元结果 156 并且让储存缓冲器与其它指令可取得算术逻辑单元结果 156。而如上述 所言, 当信号在转送总线上来去不同执行单元之间所需的距离、 以及该信号传输线的阻容 电路时间常数增加时, 意即转送延迟增加时, 那么本发明所能省下的时间也就跟着提升了。
需要注意的是, 虽然在图 10 所述的实施例中, 宏指令 132 指定了用以容纳一操作 数的通用寄存器 112, 且一算术逻辑单元运算在该操作数上执行以产生一结果而该结果将 被写入存储器, 但指令转译器 104 可产生一 stalu 微指令以及其它微指令 ( 包括 ldalu 微 指令 ) 以实作其它宏指令。举例来说, 某些宏指令 132 于一存储器操作数上指定了读取、 修 改、 或写入类型的运算, 也就是说, 宏指令指定了一算术逻辑单元运算以及一存储器地址, 且该存储器地址为该算术逻辑单元运算所执行其上的操作数的地址, 而该结果将被写回该 存储器地址。针对这样的宏指令, 本发明的指令转译器 104 可产生其后接着一 stalu 微指 令的一传统的加载微指令, 或者其后接着一传统的储存微指令的一 ldalu 微指令。
本 发 明 的 另 一 优 点 是 通 过 将 加 载 微 指 令 与 alu(alu 与 储 存 ) 微 指 令 合 并 至 单一 ldalu(stalu) 微指令, 在超纯量管线微处理器 100 中, 一次仅会耗用一个指令槽 (instruction slot) 而非两个指令槽。举例来说, ldalu(stalu) 微指令仅分别占用寄存器 别名表 116、 保留站 108、 以及重排缓冲器 114 中的一个项目 (entry) 而已, 而非如加载微指 令与 alu(alu 与储存 ) 微指令会分别占用寄存器别名表 116、 保留站 108、 以及重排缓冲器 114 中的两个项目。特别是通过整理出重排缓冲器 114 中的更多空间给更多微指令使用, ldalu 微指令可能创造出用以送出指令到执行单元 122/124/126 的一较大的微指令集用池 (pool) 或窗口, 因而可能增加超纯量管线微处理器 100 的前视 (lookahead) 能力, 使更加充 分利用程序执行时的指令级平行化, 并且可提升执行单元 122/124/126 的使用状况。再者, 单一 ldalu 微指令只会产生两次对通用寄存器 112 的存取 ( 读取来源操作数、 以及写入结 果 ), 而加载与 alu 微指令序列则产生四次存取。因此, 本发明可降低通用寄存器 112 的拥 塞状况, 并且可使超纯量管线微处理器 100 的设计包括较小、 较快、 耗用较低功率、 以及较 不复杂的通用寄存器 112。 最后, 指令转译器 104 每个频率周期可产生的微指令数量是有限 的 ( 该数量在一实施例中为 3, 在另一实施例中则为 4)。另根据一实施例, 为了降低指令转 译器 104 的复杂度, 指令转译器 104 必须在同一个频率周期内产生实作一已知宏指令所需 的所有微指令, 这使得部分的有限数量指令槽在某些频率周期时是空着的, 因此, 让指令转 译器 104 能够少产生一微指令以实作某些宏指令, 可使指令转译器 104 充分利用有限数量指令槽并以较快的速率转译宏指令。
纵然上述实施例是针对 x86 架构的微处理器, 但本发明并不只限定于 x86 架构的 微处理器。反之, 将一或多个算术逻辑单元并入超纯量管线微处理器中的管线加载以及 / 或储存单元, 此一概念亦可运用于其它架构的微处理器中。
另外, 虽然上述实施例所描述的指令转译器产生 ldalu 微指令 ( 或 stalu 微指 令 ), 例如图 3 中的方块 302, 以因应一复杂的宏指令需要从存储器进行读取与一算术逻辑 单元运算 ( 或者需要一算术逻辑单元运算与进行写入存储器 ), 但在其它实施例中, 指令转 译器可辨识一宏指令序列, 该宏指令序列中的第一个宏指令将一操作数从存储器搬移至一 寄存器, 其后该宏指令序列中的第二个宏指令在该寄存器中的该操作数上执行一算术逻辑 单元运算并将该操作数写入一目的寄存器 ( 或者该宏指令序列中的第一个宏指令在寄存 器中的操作数上执行一算术逻辑单元运算并将该操作数写入一目的寄存器, 其后该宏指令 序列中的第二个宏指令再将该操作数从目的寄存器搬移至存储器 )。指令转译器将这两个 宏指令整合至一单一 ldalu 微指令, 该单一 ldalu 微指令指示加载单元在将加载数据写入 目的寄存器的前, 于加载数据上执行算术逻辑单元运算 ( 或者整合至一单一 stalu 微指令, 该单一 stalu 微指令只是储存单元在将储存数据写入存储器的前, 于储存数据上执行算术 逻辑单元运算 ), 从而避免掉结果转送延迟。换言之, ldalu 微指令与 stalu 微指令可运用 在各式情况中并带来效益, 不止是因应转译单一宏指令。 在另一范例的一实施例中, 超纯量 管线微处理器 100 包括一微码单元与一微序列发生器 (microsequencer), 微码单元所包括 的微码例程的微码指令是储存于一微码存储器, 而微序列发生器则将微指令定序于超纯量 管线微处理器 100 的管线流中。该微码可供指令转译器 104 使用以实作复杂的宏指令、 或 执行其它功能, 例如 : 内建自我测试 (Built-In Self-Test, BIST) 或超纯量管线微处理器 100 的其它初始化功能。该微码可有利地随时视需求使用 ldalu 微指令与 stalu 微指令以 降低程序于超纯量管线微处理器 100 上的执行时间以及 / 或程序代码大小。
此外, 上述实施例所描述位于加载单元或储存单元中的算术逻辑单元需要少于一 个频率周期以执行算术逻辑单元运算 ( 意即算术逻辑单元运算是执行于加载单元或储存 单元的最后管线流阶段所对应的频率周期的一部份 ), 使得执行所有加载 / 储存指令所需 的频率周期数量都是相同的, 不论加载 / 储存指令为正规的加载 / 储存指令或为算术逻辑 单元整合加载 / 储存指令, 虽然如此, 但在其它实施例中, 算术逻辑单元运算所占用的时间 多于加载单元或储存单元的最后管线流阶段的可用时间, 因此视运算逻辑单元运算的复杂 度而定, 将造成算术逻辑单元整合加载 / 储存指令比常规加载 / 储存指令占用更多频率周 期, 以及 / 或造成某些算术逻辑单元整合加载 / 储存指令比其它算术逻辑单元整合加载 / 储存指令占用更多频率周期。在此实施例中, 保留站中的指令排序器 (scheduler) 则必须 考虑执行一加载 / 储存指令所需的频率周期的可变量量。
本发明虽以各种实施例揭露如上, 然而其仅为范例参考而非用以限定本发明的 范围, 任何熟习此项技艺者, 在不脱离本发明的精神和范围内, 当可做些许的更动与润饰。 举例来说, 软件可实现相关于本发明的装置与方法的功能、 制造、 模块化 (modeling)、 模拟 (simulation)、 描述 (description)、 以及 / 或测试等等。该软件可使用一般程序设计语言 (如: C、 C++)、 硬件描述语言 ( 如 : Verilog HDL、 VHDL 等等 )、 或其它可得的程序来实作。且 该软件可配置于任何公知的计算机可使用媒体中, 例如 : 半导体、 磁盘、 或光盘 ( 如只读记忆光盘 (Compact Disc Read-Only Memory, CD-ROM)、 数字多功能光盘 (Digital Versatile Disc Read-Only Memory, DVD-ROM) 等等 )。本发明所述的装置与方法的实施例可包括于一 半导体智财核心 (semiconductorintellectual property core) 中, 例如 : 微处理器核心 (如 : 嵌入于硬件描述语言中 ), 再进一步转换为硬件的集成电路产品。 另外, 本发明所述的 装置与方法可以硬件与软件的一组合方式嵌入。因此, 上述实施例并非用以限定本发明的 范围, 本发明的保护范围当视后附的权利要求所界定者为准。 特别是, 本发明可实作于一微 处理器装置, 且该微处理器装置可使用于一般用途的计算机。 最后, 熟习此项技艺者应当可 理解在不脱离本发明的精神和范围内, 以上述所揭露的实施例与概念设计出与本发明相同 目的的其它架构。