新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 处理器系列之PowerPC指令集

处理器系列之PowerPC指令集

作者:时间:2018-01-12来源:网络

  对  体系结构家族树的所有分支来说, 体系结构和应用级编程模型是通用的。

本文引用地址:/article/201801/374368.htm

   体系结构是一种精减指令集计算机(Reduced Instruction Set Computer,RISC)体系结构,定义了 200 多条指令。PowerPC 之所以是 RISC,原因在于大部分指令在一个单一的周期内执行,而且通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存储到内存)。

  PowerPC 体系结构分为三个级别(或者说是“book”)。通过对体系结构以这种方式进行划分,为实现可以选择价格/性能比平衡的复杂性级别留出了空间,同时还保持了实现间的代码兼容性。

  Book I. 用户指令集体系结构

  定义了通用于所有 PowerPC 实现的用户指令和寄存器的基本集合。这些是非特权指令,为大多数程序所用。

  Book II. 虚拟环境体系结构

  定义了常规应用软件要求之外的附加的用户级功能,比如高速缓存管理、原子操作和用户级计时器支持。虽然这些操作也是非特权的,但是程序通常还是通过操作系统调用来访问这些函数。

  Book III. 操作环境体系结构

  定义了操作系统级需要和使用的操作。其中包括用于内存管理、异常向量处理、特权寄存器访问、特权计时器访问的函数。Book III 中详细说明了对各种系统服务和功能的直接硬件支持。

  从最初的 PowerPC 体系结构的开发开始,就根据特定的市场需求而发生分支。当前,PowerPC 体系结构家族树有两个活跃的分支,分别是PowerPC AS体系结构和 PowerPC Book E体系结构。PowerPC AS 体系结构是 IBM 为了满足它的 eServer pSeries UNIX 和 Linux 服务器产品家族及它的 eServer iSeries 企业服务器产品家族的具体需要而定义的(参阅 参考资料中的链接以获得更多资料)。PowerPC Book E 体系结构,也被称为 Book E,是 IBM 和 Motorola 为满足嵌入式市场的特定需求而合作推出的。PowerPC AS 所采用的原始 PowerPC 体系结构与 Book E 所采用的扩展之间的主要区别大部分集中于 Book III 区域中。

  在这些衍生的体系结构中还有一些适当的应用级扩展,这些扩展大部分与具体应用的场合相关,但是 PowerPC AS 和 PowerPC Book E 共享在 PowerPC 体系结构的 Book I 中定义的基本指令集。虽然三种体系结构主要在操作系统级别上表现出不同,但它们在很大程度上具备应用级的兼容性。

  PowerPC 最初定义了同时对 32 位和 64 位实现的支持,可以让 32 位的应用程序运行于 64 位系统之上。在 IBM pSeries 和 iSeries 服务器上使用的 PowerPC AS 系统现在只提供体系结构的 64 位实现,新的 64 位应用程序和遗留的 32 位的应用程序可以运行于同一个系统之上。PowerPC Book E 体系结构同时有 32 位实现和 64 位实现,64 位实现也完全兼容 32 位 PowerPC 应用程序。这两种体系结构都具备与 PowerPC Book I 指令和寄存器的完全兼容性,同时提供了对内存管理、异常和中断、计时器支持和调试支持等各方面的系统级扩展。

  POWER 的自然历史

  POWER 和 PowerPC 微有着漫长而传奇的历史,最初是 IBM 801,其后是 POWER、RS64 和 PowerPC 芯片系列(这些并不是线性发展的)。每个芯片家族都对计算世界有自己强有力的影响,从游戏澳门24小时娱乐官网台到主机,从数字手表到高端工作站,到处都得到了应用。欲了解全部历史,请阅读“ 人类的 POWER:IBM 的芯片制造历史”。

  最初的 PowerPC 体系结构仍是 PowerPC AS 和 PowerPC Book E 的主要组成部分,并仍保持了其完整性,表现出了令人信服的应用级兼容性。

  PowerPC 应用程序编程模型

  当用到不只一种类型的 PowerPC 时,开发人员应时刻谨记处理内存的方式存在一些差异。

  PowerPC 存储模型

  PowerPC 体系结构本身支持字节(8 位)、半字(16 位)、字(32 位) 和双字(64 位) 数据类型。

  PowerPC 实现还可以处理最长 128 字节的多字节字符串操作。32 位 PowerPC 实现支持 4-gigabyte 的有效地址空间,而 64 位 PowerPC 实现支持 16-exabyte 的有效地址空间。所有存储都可以字节寻址。

  对于错位数据访问来说,不同的产品家族提供了不同的校准支持,有一些是以处理异常的方式,其他的是通过硬件中的一步或者多步操作来处理访问。

  最高位字节在最前(Big-endian)还是最低位字节在最前(little-endian)?

  PowerPC、PowerPC AS 以及早期的 IBM PowerPC 4xx 家族大部分是字节排列顺序最高位在最前的机器,这就意味着对半字、字以及双字访问来说,最重要的字节(most-significant byte,MSB)位于最低的地址。各实现对最低位在最前的字节排列顺序方式的支持不同。PowerPC 和 PowerPC AS 提供了最小限度的支持,而 4xx 家族为最低位字节在最前的存储提供了更为健壮的支持。Book E 是字节排列顺序无关的,因为 Book E 体系结构完全支持这两种访问方法。

  PowerPC 应用级寄存器

  PowerPC 的应用级寄存器分为三类:通用寄存器(general-purpose register,GPR)、浮点寄存器(floating-point register [FPR] 和浮点状态和澳门24小时娱乐官网寄存器 [Floating-Point Status and Control Register,FPSCR])和专用寄存器(special-purpose register,SPR)。让我们来分别看一下这三类寄存器。

  通用寄存器(GPR)

  用户指令集体系结构(Book I)规定,所有实现都有 32 个 GPR(从GPR0 到 GPR31)。GPR 是所有整数操作的源和目的,也是所有加载/存储操作的地址操作数的源。GPR 还提供对 SPR 的访问。所有 GRP 都是可用的,只有一种情况例外:在某些指令中,GPR0 只是代表数值 0,而不会去查找 GPR0 的内容。

  浮点寄存器(FPR)

  Book I 规定,所有实现都有 32 个 FPR(从 FPR0 到 FPR31)。FPR 是所有浮点操作的源和目的操作数,可以存放 32 位和 64 位的有符号和无符号整数,以及单精度和双精度浮点数。FPR 还提供对 FPSCR 的访问。

  注意,嵌入式微处理器实现时经常不提供对浮点指令集的直接硬件支持,或者只是提供一个附加浮点硬件的接口。很多嵌入式应用程序很少或者根本不需要浮点算法,而当需要的时候,对 PowerPC 浮点指令执行进行软件仿真就足够了。在嵌入式微处理器中,硬件中省去浮点(支持)而为实现带来的芯片面积和功率的减少是至关重要的。

  浮点状态和澳门24小时娱乐官网寄存器(FPSCR)捕获浮点操作的状态和异常结果,FPSCR 还具有澳门24小时娱乐官网位,以支持特定的异常类型和对四种舍入模式之一的选择。对 FPSCR 的访问要通过 FPR。

  专用寄存器(SPR)

  SPR 给出处理器核心内部资源的状态并对其进行澳门24小时娱乐官网。不需要系统服务的支持就可以由应用程序读写的 SPR 包括计数寄存器(Count Register)、链接寄存器(Link Register)和整型异常寄存器(Integer Exception Register)。需要系统服务的支持才可以由应用程序读写的 SPR 包括时基(Time Base)和其他各种可能支持的计时器。

  指令地址寄存器(Instruction Address Register,IAR)

  这个寄存器就是程序员们所熟知的 程序计数器或者 指令指针。它是当前指令的地址。这实际上是一个伪寄存器,用户只能通过“branch and link”指令才能直接使用这个寄存器。IAR 主要是由调试器使用,显示将要被执行的下一条指令。

  链接寄存器(Link Register,LR)

  这个寄存器存放的是函数调用结束处的返回地址。某些转移指令可以自动加载 LR 到转移之后的指令。每个转移指令编码中都有一个 LK 位。如果 LK 为 1,转移指令就会将程序计数器移为 LR 中的地址。而且,条件转移指令 bclr 转移到 LR 中的值。

  定点异常寄存器(Fixed-Point Exception Register,XER)

  这个寄存器存放整数运算操作的进位以及溢出信息。它还存放某些整数运算操作的进位输入以及加载和存储指令( lswx 和 stswx )中传输的字节数。

  计数寄存器(Count Register,CTR)

  这个寄存器中存放了一个循环计数器,会随特定转移操作而递减。条件转移指令 bcctr 转移到 CTR 中的值。

  条件寄存器(Condition Register,CR)

  这个寄存器分为八个字段,每个字段 4 位。很多 PowerPC 指令将指令的第 31 位编码为 Rc 位,有一些指令要求 Rc 值等于 1。当 Rc 等于 1 且进行整数操作时,CR 字段 0 被设置来表示指令操作的结果:相等(Equal, EQ),大于(Greater Than, GT),小于(Less Than, LT),以及和溢出(Summary Overflow, SO)。当 Rc 等于 1 且进行浮点操作时,CR 字段 1 被设置用来表示 FPSCR 中异常状态位的状态:FX、FEX、VX 和 OX。任何一个 CR 字段都可以是整数或者浮点比较指令的目标。CR 字段 0 还被设置用来表示条件存储指令( stwcx 或者stdcx ) 的结果。还有一组指令可以操纵特定的 CR 位、特定的 CR 字段或者整个 CR,通常为了测试而将几个条件组合到同一个位中。

  处理器版本寄存器(Processor Version Register,PVR)

  PVR 是一个 32 位只读寄存器,标识处理器的版本和修订级别。处理器版本由 PowerPC 体系结构过程分配。修订级别由实现定义。需要有特权才能访问 PVR,所以应用程序只能在操作系统函数的帮助下才可以确定处理器版本。


上一页 1 2 3 4 下一页

关键词: 处理器 PowerPC

评论

澳门24小时娱乐城专区

关闭