新一代微处理器Pentium
Pentiumm(以下称P5)与Intel 486相比有以下重要改进:
·超级标量体系结构
·动态转移预测
·流水线浮点部件
·较大容量的片上超高速缓存(增加8K)
·较强的错误检测和报告功能
·更多的测试挂钩(边界扫描、探针方式)
P5以与Intel 486 CPU相同的频率工作时,整数运算性能提高一倍,浮点性能提高5倍。P5的初始目标频率是66MHZ。
P5的两条流水线和浮点部件能够独立工作。每条流水线在一个时钟内发送一条常用的指令。这两条流水线在一个时钟内可以发送两条整数指令,或在一个时钟内发送一条浮点指令(在某些情况下可以发送两条浮点指令)。
浮点部件在Intel 486基础上完全重新进行了设计,快速算法可使诸如ADD,MOL和LOAD等公用运算的速度最少提高3倍。许多应用程序中利用指令调度和重叠(流水线)执行可以使性能提高5倍或更多。
P5设计成能利用所有C5C/C8C超高速缓存特性提供一种高性能的CPU/超高速缓存的功能。P5实现了一种36位地址总线,同时该结构也支持64位的物理地址空间。
二、P5的内部结构
图1所示为P5的内部结构框图。由图看出:P5有两条指令流水线,即“U”流水线和“V”流水线。U和V流水线都执行整数指令。但只有“U”流水线执行浮点指令,在“V”流水线中也可以执行一条异常的FXCH指令。因此,P5能够在每个时钟内执行两条整数指令,或在每个时钟内执行一条浮点指令,如果两条浮点指令中有一条为FXCH指令,那么在一个时钟内可以执行两条浮点指令。每条流水线都有自己的独立的地址生成逻辑、算术逻辑部件和数据超高速缓存接口。
如图1所示,P5有两个独立的超高速缓存,即一个指令超高速缓存和一个数据超高速缓存。数据超高速缓存有两个端口,分别用于两条流水线。它有一个专用的转换后援缓冲器(TLB),用来把线性地址转换成数据超高速缓存所用的物理地址。指令超高速缓存、转移目标缓存器和预取缓存器负责将原始指令送入P5的执行部件。指令取自指令超高速缓存或外部总线。转移地址由转移目标缓冲器予以记录,指令超高速缓存的TLB将线性地址转换成指令超高速缓存器所用的物理地址,译码部件将预取的指令译码成P5可以执行的指令。控制ROM含有控制实现P5体系结构必须执行的运算顺序的微代码。控制ROM部件直接控制两条流水线。
P5对80486的寄存器作了如下扩充:
1.EFLAGS寄存器
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ I V V A V R N O D I T S Z A P C┃
┃0 0 0 0 0 0 0 0 0 0 I I 0 IOPL 0 0 1 ┃
┃ D P F C M F T F F F F F F F F F┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
图2 EFLAGS寄存器
EFLAGS增加了两位(见图2)以控制P5虚拟8086方式扩充部分的虚拟中断。有关详情参见第七章“虚拟8086方式”,增加一个附加位以允许软件测试CPUID指令是否存在而不产生(未定义的操作码)异常。标志位1,3,5,15和31,22是Intel保留的。当用SAHF或PUSHF存储时或在中断处理期间,则在第1位存储1,第3,5,15和31,22位存储0。
VIF 当允许虚拟8086方式扩充(CR4.VME=1)或允许保护方式虚拟中断(CR4.PVI=1),虚拟中断标志是所用中断标志的虚拟映象。当禁止虚拟8086方式扩充(CR4.VME=0)和禁止保护方式虚拟中断(CR4.PVI=0)时,该位被强制为0。
VIP 当允许虚拟8086方式扩充(CR4.VME=1)或允许保护方式虚拟中断(CR4.PVI=1)时,虚拟中断挂起标志指示虚拟中断是否挂起。当禁止虚拟8086方式扩充(CR4.VME=0)和禁止保护方式虚拟中断(CR4.PVI=0)时,该位强制为0。
ID 置位和清除标识标志的功能处理器支持CPUID指令。
下面说明Intel 486 CPU扩充的标志特性:
RF 可由IRETD但不能由POPF或POPFD置位的RF标志用来禁止在紧跟IRETD后面的指令上产生代码断点异常。代码断点是最高优先级故障,因而保证在译码或指令执行期间可能被检测的任何其他故障之前得到服务。如果产生后续故障,那么堆栈上RF标志的映象始终置1。当完成故障处理程序后重新启动该指令时,这就需要保证不会多次检测出代码断点故障。
AC 当处理器在特权级3上操作时,AC标志与CRO中的AM位联用以允许检测和产生对准检查异常。当处理器不在特权级3上时,虽然AC标志可能被置位,但决不产生对准检查异常。在实方式时,决不会产生对准检查异常,而且EFLAGS中AC位的内容是不可预测的。复位后EFLAGS的内容是0000 0002H。
2.控制寄存器CR0中的CD位和NW位的含意已被重新定义以控制P5的超高速缓存。
P5定义了一个新的控制寄存器(CR4),CR4包含一些允许对Intel 486结构作某些扩充的位。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ┃
┃1 0 9 8 4 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 ┃
┃ M P P D T P V ┃
┃0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C A S S V M ┃
┃ E E E E D I E ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
CR4中第31...7位Intel留用。当读出CR4的内容时,这些位为0。写入CR4的内容时,这些位必须全为0。否则,如果对这些位中的任意一位写1,则产生一般保护异常。VME 该位为1时,允许虚拟8086方式扩充。该位为0时,禁止虚拟8086方式扩充,有关详情参见第七章“虚拟8086方式”。
PVI 该位为1时,允许保护方式虚拟中断。该位为0时,禁止保护方式虚拟中断。
TSD 该位为1且当前特权级不为0时,禁止RDTSC(读时间标志计数器)指令且执行这一指令时将产生#GP(0)故障。当该位为0时,RDTSC将在所有特权级上执行。
DE 该位为1时,允许调试扩充。该位为0时,禁止调试扩充。准确地说,该位控制是否支持I/O断点。
PSE 该位为1时,允许页面大小扩充。该位为0时,禁止页面大小扩充。
PAE 该位为1时,允许物理地址扩充。该位为0时,禁止物理地址扩充。
MCE 该位为1时,允许机器检查异常。该位为0时,禁止机器检查异常。
复位后CR4的内容为0。
3.模型专用寄存器
P5定义了几种模型专用寄存器,用于控制可测试性、执行跟踪、性能监测和机器检查错误的功能。P5可以使用新指令RDMSR和WRMSR读或写这些寄存器。
表1模型专用寄存器
┏━━━━━━┯━━━━━━━┯━━━━━━━━━━━━━━┓
┃值(十六进制)│寄存器名 │说 明 ┃
┠──────┼───────┼──────────────┨
┃00H │机器检查地址 │引起异常周期的存储地址 ┃
┃01H │机器检查类型 │引起异常周期的存储周期类型 ┃
┃02H │测试寄存器1 │奇偶校验逆寄存器 ┃
┃03H │Intel公司保留 │ ┃
┃04H │测试寄存器2 │指令超高速缓存结束位 ┃
┃05H │测试寄存器3 │超高速缓存测试数据 ┃
┃06H │测试寄存器4 │高速缓存测试标志 ┃
┃07H │测试寄存器5 │超高速缓存测试控制 ┃
┃08H │测试寄存器6 │TLB测试线性地址 ┃
┃09H │测试寄存器7 │TLB测试控制和物理地址31-12 ┃
┃0AH │测试寄存器8 │TLB测试物理地址35-32 ┃
┃0BH │测试寄存器9 │BTB测试标志 ┃
┃0CH │测试寄存器10 │BTB测试目标 ┃
┃0DH │测试寄存器11 │BTB测试控制 ┃
┃0EH │测试寄存器12 │执行跟踪和转移预测 ┃
┃0FH │Intel公司留用 │ ┃
┃10H │时间标记计数器│性能监测 ┃
┃11H │控制和事件选择│性能监测 ┃
┃12H │计数器0 │性能监测 ┃
┃13H │计数器1 │性能监测 ┃
┃14H │Intel公司留用 │ ┃
┗━━━━━━┷━━━━━━━┷━━━━━━━━━━━━━━┛
P5的模型寄存器如表1所示。
P5将实现一种已知为探针方式的新的调试方式,用这种方式可以检验和修改P5的内部状态和系统的外部状态。处理器寄存器可以读和写。系统存储器和IO空间也可以读和写。
探针方式由边界扫描和专用引脚联合控制和访问。要建立两个新寄存器PDR(探针数据寄存器)和PBR(探针断点寄存器),并为边界扫描的测试访问端口(TAP)和P5的执行器所知。这些寄存器一起使P5能执行那些在接口寄存器和P5寄存器或外部系统之间传送数据的命令。边界扫描引脚(TCK,TDI,TKO,TMS,TRST#)用于P5与外界传送数据,控制时钟和转换状态。另外,两个新引脚PRDY和R/S#用来控制进入和退出探针方式以及保持同步。
输出引脚PRDY用以表示P5处在探针方式并且TAP已准备好接受边界扫描/探针方式命令。输入引脚R/S#用来进入和退出探针方式。R/S#是一个边沿敏感输入引脚。
P5有4个调试寄存器,可用于编程以检查断点是否匹配。这些断点通过4个断点引脚BP3-BP0在外部表示是否匹配。其中两个引脚BP0(PM0/BP0)和BP1(PM1/BP1)供性能监测多路选择用。PM0和PM1引脚用来外部表示与监测所选择事件相关的计数器已增1或溢出。探针方式控制寄存器中的PB1、PB0(性能监测/断点)位决定是否为性能监测或断点指示配置了多路选用引脚。
三、P5总线与80486总线的主要区别
P5总线被设计成类似于Intel486 CPU总线,但是为了获取更高性能和提供对多重处理系统的更好支持,它牺牲了完全兼容性。
下面是P5总线和80486 CPU总线的区别:
·P5具有64位数据总线,而Intel486 CPU支持32位数据总线。P5比Intel486 CPU(BE3#-BE0#)具有更多的字节允许(BE7#-BE0#)和数据奇偶校验引脚(DP7-0)。
·P5有一条36位地址总线,而Intel486 CPU支持一条32位地址总线。
·P5支持地址流水线(NA#),以提供多达2个未完成周期。
·P5在NA#的早期或第一个BRDY#取样KEN#引脚。KEN#只被取样一次。Intel486 CPU在超高速缓存行填充周期的第一个和最后一个RDY#/BRDY#之前的时钟两次取样KEN#。
·突发串长度信息由P5经由和地址一起的CACHE#引脚驱动。Intel486 CPU则是在运行中用BLAST#引脚控制突发串长度。
·P5一个总线周期产生8个字节写入,所以它没有PLOCK#引脚。
·在突发串期间,P5不改变地址和字节允许的低阶位。
·P5在突发串周期时需要运行回写和行填充,并且突发串不能中间终止(没有RDY#或BLAST#引脚)。
·P5支持可超高速缓存的突发串周期。
·P5使用下面的一些新引脚,支持回写超高速缓存协议:CACHE#、HIT#、HITM#、INV和WB/WT#。
·P5不支持用BS8#和BS16#实现的动态总线带宽。
·P5不允许使每个时钟都无效,或当P5驱动地址总线时使时钟无效。
·P5保证在连续锁定周期之间有一个空闲周期。
·P5提供了SCYC引脚,它指出锁定操作期间的一个分割周期。
·P5的不可超高速缓存的指令预取是8字节而不是16字节。
·P5有一个INIT引脚,可以在维持内部超高速缓 存状态和浮点机器状态的同时执行复位功能。
·P5通过EWBE#引脚支持它与外部系统之间的强存储排序。
·P5支持内部奇偶错误校验,加强了数据奇偶校验和地址奇偶错误校验。建立了下面引脚以实现这些新特性:APCHK#、BUSCHK#、PEN#、IERR#和AP。
·P5可使用下面引脚进行边界扫描:TDI,TDO,TMS,TRS#和TCK。
·P5使用下面引脚支持探针方式:R/S#和PRDY。
·P5含有IU,IV和IBT引脚,以及一个用于执行跟踪的转移跟踪信息专用周期。
·P5使用FRCMC#和IERR#引脚支持功能冗余校验(FRC)。
·P5使用下面引脚支持性能监测:BP3,BP2,PM1/BP1和PM0/BP0。
·P5使用SMI#输入和SMIACT#输出实现系统管理方式。
·在P5上,使用BOFF#异常结束一个总线周期后,从头重新启动该总线周期。不保留在BOFF#之前返回的数据。Intel486 CPU保留在BOFF#建立之前返回的数据,并在周期被异常结束的点上重新启动该周期。
·FLUSH#是一个边沿触发的输入。对于每个下降边沿,它被识别一次。它是作为一次中断实现的,因此仅在指令边界上被识别。