一、主要特征
◆ 超级标量结构(双指令流水线)
◆ 双Cache(指令Cache和数据Cache分离)
◆ 分支预测技术
◆ 64位数据总线
◆ RISC和CISC的结合
二、 内部结构
1. 功能模块
从功能模块的角度, Pentium在80486的基础上增加了一条指令流水线(包括相应的地址生成部件)和一个Cache。
在结构上, 与80486相比, 形成了双执行部件和双Cache结构。如下图所示:
(1) 指令部件
U和V两条独立的指令流水线, 各自有独立的地址生成逻辑, 并与各自独立的内部数据总线与双端口Cache连接。从而实现了从地址生成到数据存取的独立操作。
- U流水线:可执行任何整数及浮点两类指令;
- V流水线:只能执行简单整数指令
(2) 双Cache
数据Cache与指令Cache分离, 提高操作的并行性
(3) 浮点部件
八级流水浮点指令, 速度是80486内部浮点部件的3~5倍。
(4) 微指令ROM
采用CISC技术, 结合了RISC的设计思想, 一些简单指令(如加、减、移位等)直接用硬件逻辑电路实现, 复杂指令仍然采用微程序的设计思想(微指令ROM实现复杂指令)。
2、寄存器结构
通用寄存器、变址寄存器, 段寄存器以及指针与80486基本相同。增加了大量的测试寄存器和检查寄存器、性能监测的寄存器。 如测试寄存器1~12, 用于如奇偶校验测试、TLB线性地址测试, Cache测试、分支预测BTB测试等。
增加了一个CR4寄存器(6个有效位), 其中的控制位PSE=0页面大小为4K;PSE=1页面大小为4M。页面太大: 失去分页的优点;页面太小: 命中率下降(访问数据在某个页面的概率) 有了PSE位,能使存储管理跟灵活。
三、 Pentium的主要技术改进
1. 超级标量结构(Super Scalar Architecture)
针对微处理器, 两种典型结构形式:标量结构 超级标量结构
什么是标量处理器(Scalar Processor):一个周期执行一条指令;处理器内部只有一个指令执行部件。
计算机系统中的三种基本的周期信号:指令周期 机器周期(总线周期) 时钟周期(节拍周期)。 一个周期执行一条指令的含义需要从是否具有流水线功能来分析:
非流水线执行方式:指令执行顺序串行, 一个指令周期完成一条指令。
流水线执行方式:指令分解为多个独立的执行阶段。一种基本的分段方式是:取指(FE) 译码(DE) 执行(EX) 写结果(WB) 。
每一执行阶段的时间长度:一个总线周期。此时, CPU执行指令的过程如下图所示:
在流水线方式下:一个总线周期可以执行一条指令
以周期数衡量CPU性能的指标:IPC (Instructions/per cycle) —— 每一个总线周期完成的指令数。
· 非流水线指令执行方式:IPC < 1
· 流水线指令执行方式:IPC = 1(理想状况)
那么,怎样使 IPC > 1呢?处理器内部有多个指令执行部件, 并且多个部件独立并行工作, 则可以使IPC >1。Pentium具有IPC >1处理能力的处理器。
超级标量结构(重点!):
① 处理器内有多个独立并行的流水线指令部件
② 具有IPC >1的处理能力。
2. Pentium的指令流水线结构
五级流水线:指令预取(PF)、指令译码(D1)、地址生成(D2)、指令执行(EX)、写结果及置处理器状态(WB)
— U和V两条流水线同时执行的流水线状况以及流程的方式, 超标量执行可表示为以下形式:
如何分配两条流水线上的指令:两条流水线可以同时执行两条指令, 但要满足一定配对规则。
◆ 两条指令必须是“简单”指令:硬件逻辑而不是微代码实现、单周期执行。
◆ 两条指令要在指令Cache内。
◆ 成对指令无寄存器数据相关
◆ 指令中不能同时包含偏移量与立即数等。
由此引发流水线调度策略(两条流水线的调度策略):
Pentium对U、V两条流水线的调度采用按序发射按序完成策略。
在译码阶段(D1), 两条连续的指令(如i1和i2)先后被译码,并检查是否可以配对。若是, 合格的一对指令同时发射到U、V流水线的D2段。
要求:这一对同时进入D2阶段的指令也必须同时离开D2阶段进入EX段。如果一条指令在D2段停留, 则另一条指令也必须在D2段停顿。一旦成对指令进入EX阶段。若一条指令EX阶段停留, 则另一条指令也必须在EX阶段停顿。
关于流水线级数:理论上讲: 流水线级数越深, 并发指令数越多, 速度越快;但硬件越复杂, 成本越高。所以,我们追求流水线级数的性价比。
3. 分支预测技术
转移指令除了对时间造成影响以外, 由于在转移指令与目标指令之间的指令的执行还可能影响一些中间结果和标志位,从而导致程序发生逻辑错误;
对于无条件转移指令, 虽然在D1结束时便可知程序要转移而不用执行其后面的几条指令, 但是, 在WB结束之前的时间,需要按寻址方式形成目标地址, 因此也必须等到WB结束, 才能转移到目标指令执行。
解决“条件转移指令” 对流水线的影响:
① 分支预测技术
— 静态分支预测:硬件固定选择分支
— 动态分支预测:在预测点, 根据程序过去的分支情况的统计值(或上一次的分支情况)选择分支。(依据:程序执行的时间局部性规律)
Pentium的分支预测:动态分支预测 (Pentium 双标量流水线体系结构)
分支情况统计部件:分支目标缓冲器(Branch Target Buffer - BTB)
分支预测时间:指令预取阶段(PF)
分支预测过程:两个指令预取缓冲区
分支预测的流程如下:
程序按预测方向执行, 如果分支预测发生错误, 仍会造成四个周期的时间损失。若预测要分支, 则两个方向的指令预取同时进行。
附:造成Pentium(包括其它CISC处理器)流水线阻塞的其它可能因素。
① 指令码太长:超过了数据总线的宽度。
② 执行阶段时间开销太大:一个EX周期不能完成上述操作, 则需要多个EX周期。
③ 数据相关:也称为数据依赖, 如“写后读”
④ 资源冲突:多条并行的指令需要使用同一资源
由于存在上述许多因素使流水线不能按理想状况运行, 因此在实际情况下, 单流水线的IPC<1, 双流水线的IPC<2。比如, 双流水线1000个周期只执行了1300条指令, 则IPC=1.3。
4. Cache的一致性协议
为有效利用Cache资源, 并支持多处理器系统, Pentium提出的使用Cache的一套规则 —— MESI一致性协议。该协议为避免Cache内容丢失、 Cache内容过时; 实施Cache淘汰; 何时进行Cache填充等提供了一种手段。 该协议为每一个Cache行规定了四种状态, 一个Cache行在任何时刻处于某种状态之一。
M —— Modified(已修改)
一个Cache行相对于所对应的内存地址单元, 其内容已被修改。比如, 当写Cache 命中后。处于M状态的Cache行, 可直接进行读/写操作(对Cache), 无需启动访问内存的总线周期。 M状态相当于为避免Cache内容丢失而设立的“更新位”
E —— Exclusive(独占)
此时的Cache行与所对应内存单元内容相同。处于已E状态的Cache行的读/写操作(对Cache), 无需启动访问内存的总线周期。对处于已E状态的Cache行实施写操作后, 该Cache行状态将变为M状态。
S —— Shared(共享)
指示本Cache行与其它Cache行可以共享。即, 同一个Cache行的内容可以放在多个Cache内。对处于S状态下的Cache行进行读操作, 无需启动访问内存的总线周期;对处于S状态下的Cache行进行写操作, 必须启动访问内存的写周期(直写), 使内存相应单元持有共享Cache行的更新值。(总线监视, 避免过时)
I —— Invalid(无效)
该Cache行内容无效。对I状态的Cache行进行读操作:不命中Cache, 访问内存, 执行Cache填充。对I状态的Cache行进行写操作:写入Cache, 同时写入相应内存单元(直写)。
四、Pentium 基本型的主要引脚介绍
Pentium 微处理器是 Intel公司 于1993年3月推出的,采用0.6um的静态CMOS工艺的高性能微处理器。Pentium 微处理器采用PGA封装,共237个引脚,如图:
1. 数据线:D63 ~ D0
2. 数据奇偶校验位:DP7 ~ DP0
3. 数据校验检查位:/PCHK
4. 地址线:A31 ~ A3、/BE7 ~ /BE0(对D63~D0的8个字节)
5. 地址奇偶校验位:AP(双向)
6. 地址奇偶校验检查位:/APCHK(处理器件检测到/EADS→读地址→建立/APCHK)
7. 流水线状态指示信号:IU、IV(IU 指示U流水线当前指令执行结束;IV 指示U流水线当前指令执行结束)
8. 工作状态指示信号:/FRCMC、/IERR
/FRCMC=1正常工作状态(主配置);/FRCMC=1内部自测试(测试配置),处于该状态时, 除/IERR引脚以外,其余输出引脚均输出“高阻状态”。系统内部进行自测试, 如果发现错误,由引脚/IERR输出低电平来指示。