计算机原理


高等院校计算机专业教材 计算机原理 张道光 编著 周 兵 主审 西安电子科技大学出版社 西安 内 容 简 介 本书围绕计算机系统的组成,详细论述了各个部分的组成及工作原理,结合新的计算机 技术应用,内容更具有创新性。全书共 11 章,其内容包括:计算机系统概论、数据的表示 与校验、运算方法与运算器、存储器系统、指令系统、控制器、接口与输入输出、外围设备、 总线、并行处理与互连网络、多处理机与机群系统。 本书可作为高等院校计算机及相关专业本科生的教材,也可以作为计算机专业研究生及 计算机工程技术人员的参考书。 前 言 计算机技术的迅速发展对社会的进步带来了巨大的推动作用并产生了深远的影响,它正 潜移默化地改变着人们的生产方式、工作方式、生活方式和学习方式,掌握计算机基本知识 和应用技术已成为当今社会人们的迫切要求和参与社会竞争的必要条件,是衡量个人素质的 重要标志之一。 《计算机原理》是计算机科学与技术学科一门重要的专业基础课程,在计算机硬件课程 群中起着承上启下的作用。为适应计算机的发展和教学改革的需要,编者结合多年的教学实 践经验,首先进行内容“优化”,将计算机硬件课程群中相近的内容进行整合,使该教材既 能体现原课程教材的主体面貌,又赋予了新的结构内容;其次突出内容“关联”,将内容之 间的联系勾画出来,展现在读者面前,以达到“纲举目张”之目的;最后采用“案例教学”, 针对目前学生普遍存在的“对设计无从下手,对问题束手无策”等现象,采用“案例教学” 是培养学生分析解决、解决问题行之有效方法。 全书共 11 章,第 1 章计算机概述;第 2 章计算机中数据的表示;第 3 章运算方法与运 算器;第 4 章指令系统;第 5 章存储器系统;第 6 章控制器;第 7 章接口与输入输出;第 8 章外围设备;第 9 章总线;第 10 章并行处理与互连网络;第 11 章多处理机与机群系统。 本书由张道光主编,并编写了第 2 章、第 4 章、第 5 章;第 7 章和第 8 章由副主编刘卫 光编写;第 10 章由副主编夏冰编写;第 1 章和第 3 章由王鼎媛编写;第 6 章由张书钦编写; 第 9 章和第 11 章由董跃钧编写。全书由张道光、周兵统稿。 本书承蒙周兵教授审阅了全部书稿,并提出了许多宝贵意见,在此表示诚挚的感谢。由 于时间仓促及编者水平有限,书中难免存在疏漏和错误,敬请广大读者批评指正。 编 者 2008-10-25 目录 第 1 章 计算机系统概论......................................................................................................................1 1.1 计算机的发展与应用..................................................................................................................1 1.1.1 计算机发展阶段和发展趋势................................................................................................1 1.1.2 计算机的应用........................................................................................................................3 1.2 计算机系统的组成.....................................................................................................................4 1.2.1 计算机系统的硬件................................................................................................................4 1.2.2 计算机系统的软件................................................................................................................4 1.2.3 计算机系统的层次结构........................................................................................................5 1.3 计算机系统结构.........................................................................................................................6 1.3.1 传统冯·诺依曼计算机系统结构........................................................................................6 1.3.2 现代计算机系统结构............................................................................................................6 关 联...................................................................................................................................................7 习 题...................................................................................................................................................8 第 2 章 计算机中数据的表示..............................................................................................................9 2.1 进位计数制及其之间的转换.....................................................................................................9 2.1.1 进位计数制............................................................................................................................9 2.1.2 进位计数制之间的相互转换..............................................................................................10 2.2 定点数的表示............................................................................................................................11 2.2.1 符号的表示..........................................................................................................................11 2.2.2 小数点的表示......................................................................................................................12 2.2.3 几种机器数形式..................................................................................................................12 2.3 浮点数的表示............................................................................................................................16 2.3.1 浮点数的格式......................................................................................................................16 2.3.2 浮点数的规格化..................................................................................................................17 2.3.3 浮点数的表示范围..............................................................................................................18 2.3.4 浮点数的机器零..................................................................................................................18 2.4 非数值数据的表示....................................................................................................................19 2.4.1 ASCII 码与字符串................................................................................................................19 2.4.2 BCD 码与十进制数串..........................................................................................................19 2.5 数据校验码................................................................................................................................21 2.5.1 奇偶校验码..........................................................................................................................21 2.5.2 海明校验码..........................................................................................................................22 2.5.3 循环冗余校验码..................................................................................................................24 关 联.................................................................................................................................................26 习 题.................................................................................................................................................27 第 3 章 运算方法与运算器................................................................................................................30 3.1 定点数的算术运算与实现........................................................................................................30 3.1.1 定点数加减运算..................................................................................................................30 3.1.2 定点数乘法运算..................................................................................................................35 3.1.3 定点数除法运算..................................................................................................................40 3.2 逻辑运算和移位操作...............................................................................................................43 3.2.1 逻辑运算..............................................................................................................................43 3.2.2 移位操作..............................................................................................................................44 3.3 定点运算器................................................................................................................................44 3.3.1 算术逻辑单元.......................................................................................................................44 3.3.2 定点运算器的基本结构......................................................................................................48 3.3.3 定点运算器模型..................................................................................................................49 3.4 浮点数的算术运算与浮点运算器............................................................................................50 3.4.1 浮点数的加减运算..............................................................................................................50 3.4.2 浮点数的乘法和除法运算..................................................................................................51 3.4.3 浮点运算器..........................................................................................................................53 关 联.................................................................................................................................................54 习 题.................................................................................................................................................55 第 4 章 存储器系统............................................................................................................................59 4.1 存储器概述................................................................................................................................59 4.1.1 存储器分类..........................................................................................................................59 4.1.2 存储器系统结构..................................................................................................................60 4.1.3 主存储器的技术指标..........................................................................................................60 4.2 半导体存储器............................................................................................................................61 4.2.1 半导体存储器分类..............................................................................................................61 4.2.2 存储元电路..........................................................................................................................62 4.2.3 存储器芯片..........................................................................................................................64 4.2.4 存储器的扩展与应用..........................................................................................................73 4.2.5 并行存储器..........................................................................................................................78 4.3 高速缓冲存储器........................................................................................................................80 4.3.1 Cache 基本原理....................................................................................................................80 4.3.2 Cache 的结构........................................................................................................................81 4.3.3 Cache 的读写过程................................................................................................................85 4.4 虚拟存储器................................................................................................................................85 4.4.1 概述......................................................................................................................................85 4.4.2 页式虚拟存储器..................................................................................................................86 4.4.3 段式虚拟存储器..................................................................................................................87 4.4.4 段页式虚拟存储器..............................................................................................................88 4.4.5 替换算法..............................................................................................................................89 关 联.................................................................................................................................................90 习 题.................................................................................................................................................91 第 5 章 指令系统................................................................................................................................94 5.1 指令系统与性能........................................................................................................................94 5.1.1 指令与指令系统..................................................................................................................94 5.1.2 指令系统的性能..................................................................................................................94 5.2 机器指令....................................................................................................................................95 5.2.1 机器指令的格式..................................................................................................................95 5.2.2 指令字的长度......................................................................................................................95 5.2.3 机器指令的分类..................................................................................................................95 5.3 操作码的编码方法....................................................................................................................96 5.3.1 定长编码..............................................................................................................................96 5.3.2 变长编码..............................................................................................................................97 5.4 地址码的寻址方式....................................................................................................................99 5.4.1 指令寻址方式......................................................................................................................99 5.4.2 操作数寻址方式.................................................................................................................100 5.5 典型的指令系统......................................................................................................................103 5.5.1 复杂指令系统....................................................................................................................103 5.5.2 精简指令系统....................................................................................................................105 关 联...............................................................................................................................................107 习 题...............................................................................................................................................108 第 6 章 控制器.................................................................................................................................. 110 6.1 CPU 功能和组成.....................................................................................................................110 6.1.1 CPU 的功能........................................................................................................................110 6.1.2 CPU 的基本组成................................................................................................................ 111 6.2 控制器的时序系统和控制方式..............................................................................................113 6.2.1 有关周期的基本概念........................................................................................................113 6.2.2 时序信号与体制................................................................................................................113 6.2.3 时序信号发生器................................................................................................................114 6.2.4 控制方式............................................................................................................................117 6.3 指令流程图..............................................................................................................................118 6.3.1 五类典型指令的指令周期分析........................................................................................118 6.3.2 指令周期流程....................................................................................................................125 6.4 微程序控制器..........................................................................................................................127 6.4.1 基本概念............................................................................................................................127 6.4.2 微程序控制器基本原理....................................................................................................129 6.4.3 微程序设计......................................................................................................................130 6.4.4 微程序设计举例..............................................................................................................134 6.4.5 微程序控制器设计步骤..................................................................................................137 6.5 组合逻辑控制器......................................................................................................................138 6.6 门阵列控制器..........................................................................................................................140 6.6.1 可编程逻辑阵列 PLA .......................................................................................................141 6.6.2 基本思想............................................................................................................................141 6.7 流水线处理技术......................................................................................................................141 6.7.1 指令执行方式....................................................................................................................141 6.7.2 流水线的分类....................................................................................................................143 6.7.3 线性流水线......................................................................................................................143 6.7.4 流水线中的相关问题........................................................................................................145 6.8 多媒体技术..............................................................................................................................146 6.9 典型 CPU 简介..........................................................................................................................147 6.9.1 8086CPU.............................................................................................................................147 6.9.2 Pentium 微处理器 ..............................................................................................................148 关 联...............................................................................................................................................150 习 题...............................................................................................................................................151 第 7 章 接口与输入输出..................................................................................................................155 7.1 接口概述..................................................................................................................................155 7.1.1 接口的功能与组成............................................................................................................155 7.1.2 I/O 端口的编址方式 ..........................................................................................................156 7.1.3 I/O 端口地址的译码 ..........................................................................................................156 7.2 输入输出方式..........................................................................................................................158 7.2.1 程序控制传送方式............................................................................................................158 7.2.2 中断方式............................................................................................................................161 7.2.3 直接存储器方式................................................................................................................165 7.2.4 通道方式............................................................................................................................170 关 联...............................................................................................................................................171 习 题...............................................................................................................................................172 第 8 章 外围设备..............................................................................................................................176 8.1 外围设备概述..........................................................................................................................176 8.1.1 外围设备的概念................................................................................................................176 8.1.2 外围设备的分类................................................................................................................177 8.1.3 外围设备的功能................................................................................................................177 8.2 输入设备..................................................................................................................................177 8.2.1 键盘....................................................................................................................................178 8.2.2 鼠标....................................................................................................................................178 8.2.3 其他输入设备....................................................................................................................179 8.3 输出设备..................................................................................................................................181 8.3.1 显示器................................................................................................................................181 8.3.2 打印机................................................................................................................................183 8.4 外存储设备..............................................................................................................................186 8.4.1 磁表面存储器的原理.........................................................................................................186 8.4.2 磁记录方式.........................................................................................................................187 8.4.3 硬磁盘存储器....................................................................................................................189 8.4.4 光盘存储设备....................................................................................................................191 8.4.4 闪存....................................................................................................................................193 关 联...............................................................................................................................................194 习 题...............................................................................................................................................195 第 9 章 总线......................................................................................................................................197 9.1 总线技术概述..........................................................................................................................197 9.2 总线系统结构..........................................................................................................................199 9.2.1 总线通道组成....................................................................................................................199 9.2.2 总线结构类型....................................................................................................................199 9.3 总线信息传送方式及定时......................................................................................................201 9.3.1 总线信息传送方式:........................................................................................................201 9.3.2 总线定时............................................................................................................................202 9.4 总线的仲裁..............................................................................................................................202 9.4.1 集中式仲裁........................................................................................................................202 9.4.2 分布式仲裁........................................................................................................................204 9.5 计算机中的总线......................................................................................................................204 9.5.1 内部总线............................................................................................................................204 9.5.2 外部通信总线....................................................................................................................207 9.6 新一代总线..............................................................................................................................211 9.6.1 PCI Express 总线................................................................................................................211 9.6.2 USB 总线............................................................................................................................213 关 联...............................................................................................................................................216 习 题...............................................................................................................................................217 第 10 章 并行处理和互连网络........................................................................................................219 10.1 并行处理的概念....................................................................................................................219 10.1.1 并行性..............................................................................................................................219 11.1.2 并行性的等级和分类......................................................................................................219 10.1.3 开发并行性的途径..........................................................................................................220 10.2 并行处理机基本结构............................................................................................................221 10.2.1 并行处理机的两种典型结构..........................................................................................221 11.2.2 并行处理机的特点..........................................................................................................222 10.3 SIMD 计算机基本结构...........................................................................................................223 10.3.1 SIMD 计算机模型............................................................................................................223 10.3.2 SIMD 计算机发展过程....................................................................................................223 10.3.3 Illiac IV 计算机 ................................................................................................................224 10.3.4 Burroughs BSP 计算机..................................................................................................226 10.3.5 CM-2 计算机 ....................................................................................................................228 10.4 SIMD 计算机的应用.............................................................................................................230 10.4.1 计算模型及有限差分......................................................................................................230 10.4.2 阵列处理机的几种基本算法..........................................................................................231 10.5 互连网络的概念....................................................................................................................231 10.5.1 基本概念和作用..............................................................................................................232 10.5.2 主要特性和性能参数......................................................................................................233 10.5.3 互连函数..........................................................................................................................236 10.6 静态互连网络........................................................................................................................239 10.6.1 静态互连网络结构..........................................................................................................239 10.6.2 静态互连网络特性..........................................................................................................241 10.7 动态互连网络........................................................................................................................242 10.7.1 动态互连网络的互连形式..............................................................................................242 10.7.2 动态网络互连方式的比较..............................................................................................244 10.7.3 多级互连网络..................................................................................................................245 10.8 互连网络的消息传递机制....................................................................................................245 10.8.1 消息寻径..........................................................................................................................245 10.8.2 死锁和虚拟通道..............................................................................................................249 10.8.3 单播方式下的寻径..........................................................................................................252 10.8.4 广播方式下的寻径..........................................................................................................254 关 联...............................................................................................................................................254 习 题...............................................................................................................................................255 第 11 章 多处理机与机群系统 ........................................................................................................256 11.1 多处理机系统特点与分类....................................................................................................256 11.1.1 基本结构..........................................................................................................................256 11.1.2 多处理机系统特点..........................................................................................................257 11.1.3 多处理机系统的 Cache 一致性问题 ..............................................................................257 11.2 多处理机软件和典型的多处理机系统 ................................................................................259 11.2.1 并行算法..........................................................................................................................259 11.2.2 程序并行性分析..............................................................................................................260 11.2.3 并行程序设计语言..........................................................................................................261 11.2.4 MPP 和 SMP.....................................................................................................................261 11.2.5 CM-5 系统 ........................................................................................................................264 11.3.3 SGI Origin 2000 系列服务器 ...........................................................................................266 11.3 机群系统................................................................................................................................267 11.3.1 机群系统的结构特点......................................................................................................267 11.3.2 机群系统的关键技术......................................................................................................268 11.3.3 提高通信系统的性能......................................................................................................269 11.3.4 几种典型系统..................................................................................................................271 关 联...............................................................................................................................................272 习 题...............................................................................................................................................273 1 第 1 章 计算机系统概论 【内容摘要】 纵观计算机的发展长河,去认知计算机组成和计算机系统结构,正确理解计算机的一些 基本概念,为后续内容的学习打下良好的基础。 【学习要点】 ● 计算机系统的硬件组成及其基本功能 ● 计算机系统的软件组成与作用 ● 计算机系统层次结构 1.1 计算机的发展与应用 纵观计算机 60 多年的发展长河,我们可以明显看到计算机迅猛发展对人类社会的进步 带来的巨大推动作用,尤其是微型计算机的出现和快速普及,极大地开拓了计算机更为广阔 的应用领域,正潜移默化地改变人们的生产方式、工作方式、生活方式和学习方式。下面从 计算机的硬件和软件两个方面来简单介绍计算机的发展历程。 1.1.1 计算机发展阶段和发展趋势 1、按逻辑部件划分计算机发展阶段 1946 年 2 月,在美国的宾夕法尼亚大学研制成功了第一台电子计算机,称为“ENIAC” (Electronic Numerical Intergrator and Calculator,电子数字积分器),它是一个重 30 吨、占地 150 平方米、每小时耗电 150 千瓦的庞然大物,其内部采用了 18800 只电子管,1500 个继电器,与当今的微型计算机相比,相形见绌,只能送博物馆展览了,但它毕竟是计算机 的鼻祖,是一个新生事物,自诞生之日起,便具有强大的生命力,随着主要电子器件的演变, 计算机的发展按“代”划分为五个阶段。 (1)电子管时代计算机(1946 年~1959 年) 主要特点:逻辑器件━━━电子管 主 存━━━磁鼓 辅 存━━━磁带 软 件━━━机器语言、汇编语言 应 用━━━科学计算 代表机型:IBM 700 系列计算机 (2)晶体管时代计算机(1959 年~1964 年) 主要特点:逻辑器件━━━晶体管 主 存━━━磁芯 辅 存━━━磁盘 软 件━━━高级语言、编译系统 应 用━━━除科学计算外,已开始应用于数据处理、过程控制 代表机型:IBM 7000 系列计算机 (3)集成电路时代计算机(1964 年~1975 年) 主要特点:逻辑器件━━━小规模集成芯片 主 存━━━磁芯 辅 存━━━磁盘 软 件━━━高级语言、操作系统 应 用━━━科学计算、数据处理、过程控制 代表机型:IBM 360 系列计算机、DEC 生产的 PDP-8 小型商用计算机 2 (4)大规模/超大规模集成电路时代计算机(1975 年~1990 年) 主要特点:逻辑器件━━━大规模/超大规模集成芯片 主 存━━━半导体存储芯片 辅 存━━━磁盘、光盘 软 件━━━高级语言、操作系统 应 用━━━科学计算、数据处理、过程控制,并进入网络应用时代 代表机型:微型计算机 (5)超级规模集成电路时代计算机(1990 年~现在) 随着集成电路的集成度进一步提高,出现了极大、甚大规模集成电路,推动计算机进入 了第五个发展阶段。在此阶段,推出了 32 位、64 位微处理器芯片,如 Pentiun 、Athlon 64 等,使微机的性能更上了一个台阶。同时,采用大规模并行计算和高性能机群计算技术的超 级计算机也得到迅速发展,如 IBM 公司的“深蓝”超级并行计算机、我国 2004 年研制开发 的“曙光”超级计算机。 2、按应用特点划分计算机发展阶段 计算机发展的每一个阶段与其应用密切相关,计算机按其应用特点可以划分三个阶段。 (1)超、大、中、小型计算机阶段(1946 年~1980 年) 计算机代替人的脑力劳动,提高工作效率,解决较复杂的数学计算和数据处理。 (2)微型计算机阶段(1981 年~1990 年) 随着微型计算机的普及和计算机技术的日新月异,计算机的功能日益强大,应用领域无 所不在,无处不用,对世界科技和经济的发展起到了重要的推动作用。 (3)计算机网络阶段(1981 年以后) 计算机技术与通信技术融合而聚变的网络技术在 20 世纪 80 年代以后发展极为迅速,由 简单的远程终端,发展到今天遍布全球的因特网,实现了信息资源共享,推动了信息化社会 的进程。 3、计算机的发展趋势 随着科学技术的不断进步,未来计算机将会朝着高性能、网络化、个性化等方向发展, 具体体现以下几个方面: (1)两极发展方向 当今计算机正朝着微型计算机和巨型计算机方向发展,微型计算机的发展和普及程度标 志着计算机应用水平,巨型计算机的发展代表了计算机科学的发展水平。 (2)智能化计算机 它采用人工智能方法和技术,系统设计中充分考虑建造知识库管理系统,根据所存储的 知识进行推理和判断,在某种程度上具有模仿人的思维功能,并具有声音和图像识别能力。 (3)多媒体计算机 它采用多媒体技术,充分考虑到人的听觉、视觉效果,将大量信息用数值、文字、声音、 图形、图像、视频等进行展现,从而极大地改善人们生活、学习环境。 (4)网络计算机 计算机网络技术在压缩时空方面的出色表现而流行于世,已成为现代人们生活中必不可 少的组成部分,它正朝着高速化、综合化、智能化方面发展。 (5)非冯·诺依曼体系结构计算机 冯·诺依曼(johe Von Neumman)在 1946 年提出了“存储程序”的计算机设计方案, 人们把按照这一原理设计的计算机称之为冯·诺依曼计算机,该计算机“集中顺序控制”的 串行机制严重制约了计算机的性能,为进一步提高计算机性能,非冯·诺依曼体系结构的计 算机理论产生了,相继出现“并行处理机”、“神经网络计算机”、“生物晶体计算机”等。 3 1.1.2 计算机的应用 随着计算机的普及和计算机技术日新月异,计算机应用范围从科学计算、数据处理等传 统领域扩展到办公自动化、人工智能、电子商务、远程教育等,涉及到政治、经济、军事、 科技以及社会生活的各个方面。归纳起来,计算机的应用有以下几个方面: 1、科学计算 在科学研究和工程技术中遇到的各类数学问题的计算统称为科学计算。科学计算问题复 杂,计算量大,有些用人工计算甚至无法完成。例如地图着色的“四色问题”,需要上百亿 次的计算,如果人工计算,一个人既便昼夜不停,也需要几万年!又如海域气象预报,如果 用人工计算,算出结果时早已失去了实际意义。在工程预算方面,为选择一个理想的方案, 往往需要计算几十个甚至上百个方案,只有使用计算机才能很好地解决上述问题。 2、数据处理 数据处理是指对数据进行收集、分析和加工等。据统计,世界上 70%以上的计算机主 要用于数据处理,因此,计算机不在是传统意义上的计算工具了,已成为数据处理领域最强 有力的工具,被广泛用于信息传递、情报检索、企事业管理、金融、物流、办公自动化等。 3、实时控制 实时控制又称过程控制,要求及时地检测和收集被控对象的有关数据,并能按最佳状态 进行自动调节和控制。利用计算机可以提高自动控制的准确性,实时控制广泛应用于冶金、 机械、纺织、化工、电力等行业中。 在军事上,导弹的发射、先进的防空系统等现代化军事设施通常都是计算机构成的控制 系统。例如利用卫星定位系统控制导弹实际飞行轨道,直接袭击目标,其命中率几乎接近 100%;美国在海湾战争和伊拉克战争中,计算机实时控制技术发挥了淋漓尽致的作用。 4、计算机辅助系统 计算机辅助设计 CAD(Computer Aided Design)是人们借助计算机进行设计的一项专门 技术,广泛应用于航空、制造、建筑及微电子技术等方面。首先按照设计任务书的要求提出 设计方案,然后进行各种方案的比较,确定产品结构、外形尺寸、材料选择,进行模拟组装, 再对模拟组装设备进行各种性能测试,根据测试结果进行修正,最后设计出产品,产品设计 完成后再将其分解为零件、分装部件,并给出零件图、分装部件图、总体装配图等,上述全 部工作都由计算机完成,大大降低了产品的设计成本,缩短了产品设计周期,因此,CAD 技术被各制造业广泛应用。 计算机辅助制造 CAM(Computer Aided Manufacturing)是利用计算机代替人去完成制造 过程相关工作,包括生产工艺控制、物料流控制、生产过程控制与仿真、质量控制与检测。 目前人们将数控、物料流控制及储存、机器人、柔性制造、生产过程仿真等计算机相关控制 技术统称为计算机辅助制造。利用计算机参与大脑的辅助工作是一个不断开拓的新领域,计 算机辅助工艺规划 CAPP(Computer Aided Process Planning)、计算机辅助工程 CAE(Computer Aided Engineering)等越来越得到广泛的应用。 5、人工智能 人工智能研究如何让计算机模仿人类的高级思维活动,该领域是近年来重点开发的新兴 领域,有着广阔的应用前景,被成功地用于机器人的研制和各类专家系统的开发,以及智能 翻译系统、语音图像识别、密码分析、指纹鉴定等。 6、远程教育 Internet 和 WWW 技术的发展带来了教育事业大变革,日渐兴起的远程教育使教学资源 通过互联网穿越时空,学生受教育可以不受时间、空间和地域的限制,在全球的每一个角落 通过网络自由学习,每一个学生都可以获得第一流老师的指导,都可以向世界最权威的专家 请教,都可以从世界的任何角落获得最新的信息和资料。 4 7、电子商务 电子商务是指以电子形式进行的商品交易活动和服务。电子商务以其公平、快捷、方便、 高效、中间环节少、24 小时交易和服务等巨大优势赢得了人们的青睐,在短短几年时间, 电子商务得到了突飞猛进的发展,电子商务已成为一股不可阻挡的潮流,改变整个未来世界 的面貌,推动全球经济一体化的进程。 1.2 计算机系统的组成 一个计算机系统是由硬件、软件两大部分组成。硬件是计算机系统的物质基础,没有硬 件,再好的软件也无法运行;没有强有力的硬件支持,就不可能编制出高质量、高效率的软 件;没有好的硬件环境,一些先进的软件也无法运行。同样,软件是计算机系统的灵魂,没 有软件,再好的硬件也毫无用途,犹如一堆废物;没有高质量的软件,硬件也不可能充分发 挥其效率。 1.2.1 计算机系统的硬件 计算机的硬件由运算器、控制器、存储器、输入设备和输出设备五大组成部分,其中运 算器和控制器是计算机的核心,统称为中央处理单元 CPU(Central Processing Unit)。 1、输入设备(Input Device) 输入设备用来向计算机输入程序和原始数据。可分为字符输入设备、图形输入设备和语 音输入设备等,常用的输入设备有键盘、鼠标、扫描仪、光笔等。 2、输出设备(Output Device) 输出设备用来输出计算机的处理结果及程序,处理结果可以是数据、字符、表格、图形 等,常用的输出设备有显示器、打印机、绘图仪等。 3、存储器(Memory) 存储器用来存放程序和数据,在控制器的控制下,可以与输入设备、输出设备、运算器、 控制器等进行信息交换。计算机中的存储器分为三类:主存储器、辅助存储器和高速缓冲存 储器。主存储器和高速缓冲存储器统称为内存储器,简称内存,由半导体存储器构成,是可 以被 CPU 直接访问。辅助存储器又称为外存储器,简称外存,它不能被 CPU 直接访问。 4、运算器(Arithmetic Logic Unit 简称 ALU) 运算器是对数据进行运算的部件,其主要功能是对二进制数据进行算术运算(加、减、 乘、除)和逻辑运算(与、或、非、移位),故又称为算术逻辑单元(ALU)。 5、控制器(Controller) 控制器是整个计算机的控制中心,其功能是控制计算机各个部件自动协调工作,具体而 言,控制器的功能包括顺序控制、操作控制和时间控制。顺序控制是对程序中指令执行顺序 的控制,换句话讲,如何保证计算机执行完一条指令后能够正确地取下一条指令并执行。操 作控制是指计算机在执行一条指令时怎样产生这条指令所需的所有控制信号。时间控制是将 指令所需的所有控制信号按照一定的时间顺序发送给相应部件,控制各个部件去完成相应动 作,进而实现指令的功能。 1.2.2 计算机系统的软件 计算机系统中各种软件的有机组合构成了计算机的软件系统,基本的软件系统包括系统 软件和应用软件两大类。 1、系统软件 (1)操作系统 操作系统是系统软件的核心,负责管理和控制计算机的硬件资源、软件资源和程序的运 行,具体包括并发控制、内存管理、进程调度、I/O 及文件管理等,它是用户与计算机之间 的接口,提供了软件的开发环境和运行环境。 5 (2)语言处理程序 由于计算机本身只能识别和处理用二进制的“0”或“1” 形式表示的机器语言,因此 任何用其他语言编写的都必须翻译为机器语言程序后才能由计算机去执行和处理。语言处理 程序就是完成这种翻译工作的程序,其翻译方式有两种:一种称为解释,通过解释程序对用 程序设计语言编写的源程序边解释边执行。另一种称为编译,通过编译程序将源程序全部翻 译为机器语言的目标程序后再执行。 (3)数据库管理系统 数据管理系统被广泛应用在信息处理、情报检索和各种管理系统中,极大地方便了用户 根据需要建立数据库,查询、显示、修改数据库的内容,打印各种表格等。 (4)分布式软件系统 分布式软件系统包括分布式操作系统、分布式编译系统、分布式数据库系统、分布式算 法及软件包等,主要用于分布式计算环境、管理分布式计算资源、控制分布式程序的运行、 提供分布式程序开发与设计工具等。 (5)网络软件系统 网络软件系统包括网络操作系统、网络协议、通信软件、网络应用程序等,支持网络活 动和数据通信。人类借助计算机网络这个平台实现远程教育、网络聊天、视频点播、电子邮 件、电子商务等。 (6)各种服务程序 服务程序是指为方便用户使用和维护计算机所编制的程序。这类程序包含的内容很广 泛,如装入程序、编辑程序、调试程序、诊断程序等,一些通用的应用软件也可以作为服务 程序,如文字处理程序、表格处理程序、图形处理软件等。 2、应用软件 应用软件是指用户为解决某个应用领域中的各类问题而编写开发的程序。由于计算机的 应用极其广泛,所以应用软件种类繁多,极其丰富。目前应用软件正向标准化、集成化方向 发展,许多通用的应用软件根据其功能组成不同的应用软件包,方便供用户选择使用。 1.2.3 计算机系统的层次结构 由上述内容可知,计算机是硬件与软件相结合的一个整体,对于不同的应用、不同的对象、 不同的设计者,计算机的复杂程度各不相同,从而使计算机具有了不同的属性。为了使计算 机硬件和软件之间、系统与使用者之间更好地协调与配合,以便构成合理、高效的计算机系 统,因此提出了计算机系统层次结构,如图 1-1 所示。 1、微程序设计层 此层可以进行微程序设计,由机器硬件直接 执行微指令编写的微程序。 2、指令系统层 此层可以进行机器语言程序设计,该程序由 第 1 层的微程序负责解释执行。 3、操作系统层 它由操作系统程序实现。操作系统程序是机 器指令和广义指令组成,广义指令是对操作系统 定义和解释的软件指令,因此,此层属于混合层。 4、汇编语言层 此层可以进行汇编语言程序设计,软件上需 要汇编程序的支持。 汇编语言层 操作系统层 指令系统层 微程序设计层 高级语言层 5 层 3 层 2 层 1 层 图 1-1 计算机系统层次结构示意图 4 层 6 5、高级语言层 此层可以进行高级语言程序设计,是面向用户的,软件上需要各种高级语言编译程序的 支持。 由图 1-1 可以看到不同层次之间的关系:上面的一层是建立在下一层的基础上实现出来 的,实现的功能更强大,更接近人解决问题的思维方式和处理问题的具体过程,对使用人员 更方便,使用这一层提供的功能时,不必关心下一层的实现细节;下面一层是实现上一层的 基础,更接近计算机硬件实现的细节,实现的功能相对简单,人们使用这些功能更感到困难。 在实现这一层的功能时,可能尚无法了解其上一层的目标和将要解决的问题,也不必理解其 更下一层实现中的有关细节问题,只要使用下一层所提供出来的功能来完成本层次的功能处 理即可。采用这种分层次的方法来分析和解决某些问题,有利于简化处理问题的难度,在某 一段时间,在处理某一层中的问题时,只需集中精力解决当前最需要关心的核心问题即可, 而不必牵扯各上下层中的其他问题。 1.3 计算机系统结构 1.3.1 传统冯·诺依曼计算机系统结构 传统冯·诺依曼计算机系统结构如图 1-2 所示。其硬件由运算器、控制器、存储器、输 入设备和输出设备五大部分组成。特点是以运算器为中心,采用存储程序原理,将编写好的 程序预先存储到存储器中,然后启动系统自动执行程序。构成程序的指令是串行执行的,在 控制器的控制下自动地、连续地从存储器中依此取出指令并进行分析和执行。存储器是按顺 序的一维线性空间,按地址访问存储器。指令和数据采用二进制形式。 图 1-2 传统的计算机基本结构框图 1.3.2 现代计算机系统结构 由于传统冯·诺依曼计算机系统结构存在着很多缺点,首先是 CPU 与存储器之间的瓶 颈和串行执行指令都会严重影响 CPU 功效的发挥;其次是高级语言与机器语言的巨大差异 会带来较为繁重的编译工作;再者是较复杂的数据结构导致必须使用地址映射才能解决。以 CPU 为中心的传统冯·诺依曼计算机系统结构已不能计算机发展的需要,甚至会影响计算 机的性能,因此,必须改变传统冯·诺依曼计算机系统结构,以适用计算机发展的需要。现 代计算机系统结构孕育而生,新的计算机技术不断涌现。图 1-3 所示是以存储器为中心的现 代计算机系统结构。现代计算机系统结构的计算机与传统冯·诺依曼计算机相比较,不同之 处主要体现在三个方面:第一,现代计算机系统结构以存储器为中心,I/O 设备与 CPU 可以 并行工作,进一步改进了系统的性能。第二,现代计算机采用先行控制技术和流水线技术, 改变传统的串行执行程序为并行,从而提高系统作业的吞吐量。第三,现代计算机中的存储 器采用多体交叉存储器,可以在一个存储器访问周期中同时对多个存储单元进行访问,实现 多字的一次性存取,增加存储带宽。 输入设备 控制器 存储器 运算器 输出设备 程序 数据 命令 请求 请求 命令 命令 7 图 1-3 现代的计算机基本结构框图 关 联 基本概念 CPU 机器字长 计算机系统 存储程序 计算机应用 硬件系统 存储器 控制器 输入输出 运算器 总线 软件系统 系统软件 应用软件 层次结构 计算机的发展 8 习 题 1.1 冯·诺依曼计算机由哪几个部分组成?各部分的功能是什么? 1.2 计算机的发展经历了哪几个时代?计算机有哪些方面的应用? 1.3 传统的计算机系统结构的特点?现代计算机系统结构为什么以存储器为中心? 1.4 解释下面术语的含义 计算机系统、系统软件、计算机系统的层次结构、硬件、软件、微处理器、机器字长 1.5 单选题 (1)1946 年美国推出的世界上第一台计算机称为( )。 A、ENIAC B、UNIVAC-I C、ILLIAC-IV D、EDVAC (2)完整的计算机系统包括两大部分,它们是( )。 A、运算器和控制器 B、主机与外设 C、硬件与软件 D、硬件与操作系统 (3)现代计算机系统结构是以( )为中心的。 A、运算器 B、控制器 C、存储器 D、寄存器 1.6 填空题 (1)CPU 主要包括▁▁▁▁和▁▁▁▁两个部分 (2)计算机系统的硬件包括▁▁▁▁、▁▁▁▁、▁▁▁▁、▁▁▁▁、▁▁▁▁等五大 部分 (3)从软件、硬件的交界面看,计算机层次结构包括▁▁▁▁和▁▁▁▁两大部分。 9 第 2 章 计算机中数据的表示 【内容摘要】 数据是计算机处理的对象,它在计算机内部是用二进制信息来表示的,不仅表示形式最 简单,而且,物理上最可靠。数据包括数值型数据和非数值型数据两种,数值型数据用于表 示整数、小数和实数,其表示方式将会涉及数的位权、基数、符号、小数点等问题;非数值 型数据用于表示字符、声音、图形、图像等,其表示方式主要是代码的约定。 【学习要点】 ● 进位计数制及其之间的相互转换 ● 数据的定点表示法和数据的浮点表示法 ● 机器数与真值 ● 非数值数据的编码 ● 数据的校验 2.1 进位计数制及其之间的转换 2.1.1 进位计数制 进位计数制是一种按进位进行计数的制式。在日常工作生活中,我们习惯使用十进制数, 而计算机内部则只能识别二进制数,但在程序设计时,数据往往用十进制数或十六进制数表 示,而很少用二进制数,因为用二进制数表示数据或地址时,位数太长,书写不方便,易出 错。 进位计数制有两个特征: 基数 R(Radix):是指进制数中数码所允许取值的个数,且计数规则是“逢 R 进一”。 位权 W(Weight):是指基数 R 的 i 次幂(R i),表示进制数中第 i 位的位权。 1、十进制数(Decimal) 十进制数是我们日常工作生活中最常用的数,数中的任一数码 di∈{0,1,2,…,9}, 所以十进制数的基数为 10,且逢十进一;十进制数的位权为 10i。任何一个十进制数都可以 用式(2-1)写成一个按权展开的多项式和的形式。 D=dndn-1…d1d0.d-1…d-m =dn×10n+dn-1×10n-1+…+d1×101+d0×100+d-1×10-1 +…+d-m×10-m =∑ − = m ni di×10i (2-1) 十进制数后缀为 D,可省略。如 78D,179.26D 或 78,179.26 等。 2、二进制数(Binary) 二进制数中的任一数码 bi∈{0,1},所以二进制数的基数为 2,且逢二进一;二进制数 的位权为 2i。任何一个二进制数都可以用式(2-2)写成一个按权展开的多项式和的形式。 B=bnbn-1…b1b0.b-1…b-m =bn×2n+bn-1×2 n-1+…+b1×21+b0×20+b-1×2-1 +…+b-m×2-m = ∑ − = m ni bi×2i (2-2) 二进制数后缀为 B,如 1001B,10011101.1101B 等。 3、十六进制数(Hexadecimal) 十六进制数中的任一数码 hi∈{0,1,2,…,9,A,B,C,D,E,F},所以十六进制 10 数的基数为 16,且逢十六进一;十六进制数的位权为 16i。任何一个十六进制数都可以用式 (2-3)写成一个按权展开的多项式和的形式。 H=hnhn-1…h1h0.h-1…h-m =hn×16n+hn-1×16 n-1+…+h1×161+h0×160+h-1×16-1+…+h-m×16-m = ∑ − = m ni hi×16i (2-3) 十六进制数后缀为 H,如 23AH,9C78.1B3H 等,A~F 相当于十进制数的 10~15。为了 区分十六进制数和标识符(标号、变量等),当十六进制数首位为 A~ F 时,其前必须加“0”, 如 0F08H,0C57.2H。 2.1.2 进位计数制之间的相互转换 1、二进制数与十进制数之间的转换 (1)二进制数转换为十进制数 直接按式(2-1)展开并求和即可。 【例 2-1】将 101110.101B 转换为十进制数。 解:101110.101B=1×25+0×24+1×23+1×22+1×21+0×20+1×2-1+0×2-2+1×2-3=46.625 (2)十进制数转换为二进制数 十进制数转换为二进制数有两种方法:直接法和查表法 直接法:对于整数部分采用“除 2 取余法”,直到商为零,而余数(由低位到高位)即 为转换成的二进制数整数部分;对于小数部分采用“乘 2 取整法”,而积的整数部分(由高 位到低位)即为转换成的二进制数小数部分。最后将转换结果合起来便得到相应的二进制数。 【例 2-2】将 25.696 转换为二进制数。 解:对整数部分,采用“除 2 取余法”,计算如下: 因此 25D=11001B 对于小数部分,采用“乘 2 取整法”,计算如下: 因此 0.696D≈0.10110B 25.696D≈11001.10110B 查表法:利用十进制与二进制数对照表,把十进制数分解成 2i 多项式和的形式,然后 查表求得对应的二进制数。十进制转换为二进制数对应关系如表 2-1 所示。 表 2-1 十进制与 2 的整次幂之间的对应关系 具体方法:把十进制数(整数和小数)分解成 2 的整次幂项的和,对于出现 2 的整次幂 2-3 2-2 2-1 20 21 22 23 24 25 26 27 28 29 210 0.125 0.25 0.5 1 2 4 8 16 32 64 128 256 512 1024 12 6 25 3 2 2 2 (最高位) 2 21 0 余 1 (最低位) 余 0 余 0 余 1 余 1 整数 × 2 0.696 (最高位) 1.392 1 (最低位) × 2 × 2 × 2 × 2 1.136 1 .568 0.392 0.784 0.136 0.784 0.568 0.272 0 110 11 项相应的位置数码取“1”,否则取“0”。 【例 2-3】将 133.625D 转换为二进制数。 解:133.625D=128+4+1+0.5+0.125=27+22+20+2-1+2-3=10000101.101B 2、二进制数与十六进制数之间的转换 由于四位二进制数的编码与一位十六进制数的数码之间存在着一一对应的关系,如表 2-2 所示。因此,二进制数与十六进制数之间的转换十分简单、方便。 表 2-2 二进制和十六进制之间的对应关系 H 0 1 2 3 4 5 6 7 8 9 A B C D E F B 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 (1)二进制数转换为十六进制数 以小数点为分界线,分别向左、向右按四位进行分组,不足四位者,在最前面或最后面 补 0,使之成为四位,然后,每四位按表 2-2 的对应关系用一位十六进制数来表示。 【例 2-4】将 1111000111.10011B 、110110001101B 分别转换为十六进制数。 解:1111000111.10011B=0011 1100 0111.1001 1000B=3C7.98H 110110001101B=1101 1000 1101B=0D8DH (2)十六进制数转换为二进制数 每一位十六进制数按表 2-2 的对应关系转换成四位的二进制数即可,小数点位置不变。 【例 2-5】将 3F.75H 转换为二进制数。 解:3F.75H=0011 1111.0111 0101B=111111.01110101B 3、十进制数与十六进制数之间的转换 (1)十六进制数转换为十进制数 直接按式(2-3)展开并求和即可。 【例 2-6】将 7B9.62H 转换为十进制数。 解:7B9.3CH=7×162+11×161+9×160+3×16-1+12×16-2=1977.234375 (2)十进制数转换为十六进制数 采用类似于十进制转换为二进制数的方法,对于整数部分采用“除 16 取余法”,直到商 为零,而余数(由低位到高位)即为转换成的十六进制数整数部分;对于小数部分采用“乘 16 取整法”,而积的整数部分(由高位到低位)即为转换成的十六进制数小数部分。最后将 转换结果合起来便得到相应的十六进制数。这种方法因乘、除 16 比较复杂,一般采用下面 间接方法。 【例 2-7】将 105.75 转换为十六进制数。 解:105.75=1101001.11B=0110 1001.1100B=69.CH 2.2 定点数的表示 2.2.1 符号的表示 计算机本身无法识别数据的符号(正号“+”、负号“-”),为了让计算机能够识别数的符 号,必须用“0”和“1”来表示。因此规定:数据字的最高位为符号位,并且用“0”表示 正(+);用“1”表示负(-)。于是一个数据字的书写形式和机器内的存储形式存在差异, 为了区别这种不同,我们把书写形式(正、负符号加绝对值)的数据称为真值,机器内的存 储形式(符号位加二进制数值)的数据称为机器数。一个数据的机器数究竟采用多少位表示, 与机器的字长有关,若机器的字长是 16 位,则表示数据的机器数也是 16 位。机器数有一定 的长度限制,相应的真值便会存在一定的范围要求,以 8 位机为例,8 位的机器数相应的真 值范围为-128~+127。 十进制数 二进制数 十六进制数 转换 转换 12 2.2.2 小数点的表示 数据中的小数点在计算机中有两种表示方法,即定点表示法和浮点表示法。 1、定点表示法 定点表示法所表示的数据为定点数。定点数指小数点在数中的位置是固定不变的。因此, 计算机中数的小数点不用表示,或者隐含表示,不占用存储空间。下面以 16 位机为例说明 定点表示法。 (1)定点整数 小数点被固定在数值位的最低有效位之后,其格式如下: (2)定点小数 小数点被固定在符号位与尾数之间,其格式如下: 定点整数表示的数只能是整数,而定点小数所表示的数只能是小数。在本书中,我们更 侧重于定点小数。 2、浮点表示法 定点表示法难以表示数值很大的数据和数值很小的数据,为了表示更大范围的数据,数 学上通常采用科学计数法,将数据表示成三部分:第一部分表示数据的符号;第二部分表示 数据的有效值;第三部分表示数据中的小数点位置。改变了第三部分的数值,相当于改变了 小数点位置,这种表示小数点的方法称为浮点表示法。浮点表示法所表示的数据是浮点数, 浮点数 x 通常表示为: x = (-1)S M × Re 其中,S(Sign)──符号,0 表示正(+),1 表示负(-)。 M(Mantissa)──尾数,为定点小数,表示浮点数 X 的有效数字,决定浮点数的精度。 e(exponent)──阶码,为定点整数,表示浮点数 x 中小数点的实际位置,是影响浮 点数大小的主要因素,换一句话讲,决定了浮点数的表示范围。 R(Radix)──基数,是一个系统中约定的常数,通常取值为 2。 由于 R 是一个常数,所以,浮点数在计算机中存储形式为 S、E 、M,其中 E 是阶码 的移码形式。由此可见,浮点数的表示又归结到定点整数和定点小数表示问题。 关于浮点数的表示更详细的内容将在 2.3 节中讨论。 2.2.3 几种机器数形式 对于数据定点表示的符号问题,计算机如何处理符号位?符号位能否同数值位一样参加 运算?为了妥善地处理好这个问题,下面以 n 位机为例,介绍几种定点数的机器数形式(机 器数为 n 位,其中符号位占 1 位,数值位占 n-1 位,而小数点隐含)。 1、原码 原码是一种最简单、最直观的机器数表示形式,与真值的形式最为接近。 (1)原码的定义 设 x 为 n 位的二进制数据,式(2-4)和 式( 2-5)分别给出了 x 为定点小数±0.x1x2…xn-1 和 x 为定点整数±x1x2…xn-1 的原码定义。 . D15 D14 D0 尾数/数值位 隐含的小数点 符号位 D15 D14 D0 尾数/数值位 隐含的小数点 符号位 13 定点小数原码的定义: 定点整数原码的定义: 【例 2-8】已知二进制数的真值 x,求[x]原。 ①x=+0.0010110 ②x=-0.0010110 ③x=+0010110 ④x=-0010110 解:由定义可得 ① ∵x≥0,∴[x]原= x = 0.0010110 ② ∵x<0,∴[x]原= 1-x = 1.0010110 ③ ∵x≥0,∴[x]原= x = 00010110 ④ ∵x<0,∴[x]原= 27-x = 10010110 (2)原码所表示的数据大小 以 n 位定点小数为例,分析原码所表示的数据范围。 所以,n 位定点小数的原码所表示的数据范围为[-(1-2-(n-1)),+(1-2-(n-1))]。0 的原码 形式有两种:+0 的原码为 0.00 …0,-0 的原码为 1.00 …0。 (3)原码的运算特点 1)原码的移位 原码移位规则:符号位保持不变,数值位进行左移或右移,移出后出现的空位进行补 0。 【例 2-9】已知 x 的原码[x]原,求[2x]原、[1/2x]原 ① [x]原 = 0.0101001 ②[x]原 = 1.0101001 解: ①[2x]原 = 0.1010010 [1/2x]原 = 0.0010100 ②[2x]原 = 1.1010010 [1/2x]原 = 1.0010100 2)原码的加减运算 原码的加减运算较复杂,不仅要判断两个数的符号,确定是进行加法还是进行减罚运算, 还要比较两个数的绝对值大小,来决定运算结果的符号。可见,原码不便于进行加减运算, 对原码的符号位处理的硬件较复杂。为了简化运算,人们提出机器数的补码形式,从此,不 再分别处理符号位和数值位,把符号位作为数值的一部分参与运算,并能将减法运算转换成 加法运算,从而简化了硬件及结构,降低了成本。 2、补码 (1)互补数 计数制中,为了简化计数,常采用一种计满归零的方法。例如钟表的计时,计满 12 归 0,即 12=0,于是有:13 点=1 点,14 点=2 点,…,23 点=11 点,24 点=0 点。因此,钟表 是以 12 为模的计数方式,其数学表达式为:12=0 (mod 12) 对于钟表的表盘,若时针指向 12 点,顺时针方向拨时针 8 格,即表示的时间为 8 点, 而按逆时针方向拨时针 4 格,表示的时间仍为 8 点,因此,两种不同方向的拨法其结果是一 样的,于是,8 和-4 是模 12 的互补数,记为:-4=8 (mod 12) 对于任意一个数 x,若模为 M,则数 x 的补数[x]补数可由式(2-6)进行计算。 [x]补数 = M + x (mod M) (2-6) x 0≤x≤+(1-2-(n-1)) (2-4) 1-x = 1+ x∣∣ -(1-2-(n-1))≤x≤0 []x 原= x 0≤x≤+(2n-1-1) (2-5) 2n-1-x -(2n-1-1)≤x≤0 []x 原= 0.00 …0 +0 ┇ 0.11 … 1 +(1-2-(n-1)) n 位定点正 小数的原码 1.00 …0 -0 ┇ 1.11 … 1 -(1-2-(n-1)) n 位定点负 小数的原码 14 根据式(2-6)可知: 1)当 x≥0 时,M + x ≥ M,把 M 丢掉,[x]补数 = x,即正数的补数等于他本身; 2)当 x<0 时,[x]补数 = M + x = M-∣x∣ 即负数的补数等于模与该数绝对值之差。 【例 2-10】求在模 M=2 的条件下,二进制数 x 的补数[x]补数 ①x= +0.0101001 ②x= -0.0101001 解:①∵x≥0,∴[x]补数 = 2 + x =x = 0.0101001 ②∵x<0,∴[x]补数 = 2 + x = 2-∣x∣= 2-0.0101001=1.1010111 (2)补码的定义 补码实际上是对模的补数,由于机器字长的限制,数据在计算机中的运算是有模运算。 设 x 为 n 位的二进制数据,式(2-7)和式(2-8)分别给出了 x 为定点小数±0.x1x2…xn-1 和 x 为定点整数±x1x2…xn-1 的补码定义。 定点小数补码的定义: 定点整数补码的定义: 【例 2-11】已知 x,求 x 的补码[x]补。 ①x=+0.0010110 ②x=-0.0010110 ③x=+0010110 ④x=-0010110 解:由定义可得 ① ∵x≥0,∴[x]补= x = 0.0010110 ② ∵x<0,∴[x]补=28+x = 1.1101010 ③ ∵x≥0,∴[x]补= x = 00010110 ④ ∵x<0,∴[x]补= 28+x = 11101010 (3)补码所表示的数据大小 以 n 位定点小数的补码为例,分析补码所表示的数据范围。 所以,n 位定点小数的补码所表示的数据范围为[-1,+(1-2-(n-1))]。小数 0 的补码形式 只有一种:[+0]补=0.00 …0,[-0]补=2+0. 00…0=0.00 …0。 (4)补码的运算特点 1)[x]补的移位 补码的移位规则:补码的左移时,符号位保持不变,数值位进行左移,最底位出现的空 位进行补 0;补码的右移时,符号位保持不变,数值位进行右移,最高位出现的空位填补符 号位。 【例 2-12】已知 x 的补码[x]补,求[2x]补、[1/2x]补 ①[x]补 = 0.0101001 ②[x]补 = 1.0101001 解:① [2x]补 = 0.1010010 [1/2x]补 = 0.0010100 ② [2x]补 = 1.1010010 [1/2x]补 = 1.0010100 在补码左移过程中,注意不要把高位的数值位移出,否则将会出错。例如,将 8 位定点 正小数补码[x]补=0.1010011 进行左移时,需要将最高数值位的 1 移出,如果将 1 移入符号位, 正数的补码变成了负数的补码,造成符号出错;如果将 1 丢掉,又会失去最高位的有效数值 x 0≤x≤+(1-2-(n-1)) (mod 2) (2-7) 2+x = 1- x∣∣ -1≤x≤0 []x 补= x 0≤x≤2n-1-1 (mod 2n ) (2-8) 2n+x -2n-1≤x≤0 []x 补= 0.00 …0 +0 ┇ 0.11 … 1 +(1-2-(n-1)) n 位定点正 小数的补码 1.00 …0 -1 ┇ 1.11 … 1 -2-(n-1) n 位定点负 小数的补码 15 而导致出错。同理,对于 8 位定点负小数补码[x]补=1.0010011 进行左移时,也会出现同样的 错误。 2)[x]补与[x]原的转换 若 x≥0,则[x]原=[x]补。若 x<0,则将[x]原除符号位以外的各位取反后,再在最底位上加 1,即得到[x]补;反之,将[x]补除符号位以外的各位取反后,再在最底位上加 1,即得到[x]原。 【例 2-13】已知[x]原,求[x]补。 ①[x]原=0.0010110 ②[x]原=1.0010110 ③[x]原=00010110 ④[x]原=10010110 解:由定义可得 ①∵x≥0,∴[x]补=[x]原= 0.0010110 ②∵x<0,∴[x]补=1.1101010 ③∵x≥0,∴[x]补=[x]原= 00010110 ④∵x<0,∴[x]补=11101010 从【例 2-13】的结果中我们还可以看出一个规律:当 x<0 时,保持原码的符号位不变, 从原码的最底位开始向高位扫描,在遇到第一个 1 之后,保持该位 1 和比他低的各位不变, 将其余位取反,即得到[x]原对应的补码。 【例 2-14】 已知[x]补,求[x]原。 ①[x]补=0.0010110 ②[x]补=1.0010110 ③[x]补=00010110 ④[x]补=10010110 解:由定义可得 ①∵x≥0,∴[x]原=[x]补= 0.0010110 ②∵x<0,∴[x]原=1.1101010 ③∵x≥0,∴[x]原=[x]补= 00010110 ④∵x<0,∴[x]原=11101010 3)[x]补与[-x]补的关系 已知[x]补求[-x]补称为对[x]补求补或变补。其规则是:将[x]补的各位取反(包括符号位), 然后在最低位加 1,即得到[-x]补。反之亦然。 【例 2-15】已知[x]补,求[-x]补。 ①[x]补=0.0010110 ②[x]补=1.0010110 ③[x]补=00010110 ④[x]=10010110 解:由定义可得 ①[-x]补=1.1101010 ②[-x]补=0.1101010 ③[-x]补=11101010 ④[-x]补=01101010 3、反码 反码实质上是一种特殊的补码,其特殊性在于反码的模比补码的模小 2n-1。 (1)反码的定义 设 x 为 n 位的二进制数据,式(2-9)和式(2-10)给出了 x 为定点小数±0.x1x2…xn-1 和 x 为定点整数±x1x2…xn-1 的反码定义。 定点小数反码的定义: 定点整数反码的定义: 【例 2-16】已知 x,求 x 的反码[x]反。 ①x=+0.0010110 ②x=-0.0010110 ③x=+0010110 ④x=-0010110 解:由定义可得 ①[x]反=0.0010110 ②[x]反=1.1101001 ③[x]反=00010110 ④[x]反=11101001 (2)反码所表示的数据大小 以 n 位定点小数为例,分析反码所表示的数据范围。 x 0≤x≤+(1-2-(n-1)) (mod (2-2-(n-1)) (2-9) (2-2-(n-1))+x -(1-2-(n-1))≤x≤0) []x 反= x 0≤x≤2n-1-1 (mod (2n-1) ) (2-10) (2n-1)+x -(2n-1-1)≤x≤0) []x 反= 16 所以,n 位定点小数的反码所表示的数据范围为[-(1-2-(n-1)),+(1-2-(n-1))]。小数 0 的 反码形式有两种:+0 的反码为 0.00 …0,-0 的反码为 1.11 … 1。 4、移码 移码通常用来表示浮点数的阶码 e。我们知道阶码是整数,若采用定点整数补码形式表 示,补码的符号位可以作为数值位,这样一来,负数补码的值总大于正数补码的值,在进行 对阶时,需要进行比较两个浮点数的阶码大小,比较起来就不直观和方便。因此,人们提出 了移码形式。浮点数阶码 e 的移码形式我们记为“E”。移码 E 实质上是将阶码 e 的真值映 像到一个正数域,这样移码 E 的大小可以直观地反映出真值的大小,便于比较数值的大小。 若阶码 e 的真值范围为[-128,+127],则 E=128+e,移码 E 的范围是[0,255]。 (1)移码的定义 设 x 为 n 位的二进制数据,式(2-11)给出了 x为定点整数±x1x2…xn-1 的移码定义。 定点整数移码的定义: [x]移= 2n-1+x -2n-1≤x≤2n-1-1 (2-11) 由式(2-11)知,移码是把真值 x 在数轴上正向平移了 2n-1,所以,移码也称为增量或余 码。 (2)移码所表示的数据大小 对于 n 位定点整数的移码,其表示的数据范围。 所以,n 位定点整数的移码所表示的数据范围为[0,2n-1],0 的移码形式只有一种,即 100 …0。 (3)移码与补码的关系 1)当 0≤x≤2n-1-1 时,∵[x]补=x,[x]移=2n-1+x,∴[x]移=2n-1+[x]补 2)当-2n-1≤x<0 时,∵[x]补=2n+x,[x]移=2n-1+x,∴[x]移=2n-1+[x]补-2n=[x]补-2n-1 【例 2-17】已知二进制数 x,求[x]补和[x]移 ①x = +0101001 ②x = -0101001 解:①∵x≥0,∴[x]补=00101001 [x]移=10101001 ②∵x<0,∴[x]补 =11010111 [x]移=01010111 2.3 浮点数的表示 2.3.1 浮点数的格式 根据浮点表示法可知,计算机中的一个浮点数由阶码 E、尾 数 M 和符号 S 三个部分组 成。其中 E 为定点整数的移码形式,M 为定点小数的补码形式,S 为数符。由于三个部分所 占的位置和长度不同,浮点数的格式也不相同,为此,美国 IEEE(电气电子工程师协会) 提出了一个从系统结构角度支持浮点数的表示方法,称为 IEEE754 标准,是目前计算机普 遍采用的标准。 (1)32 位单精度浮点数格式(IEEE754 标准) 32 位单精度浮点数格式如图 2-1 所示。 符号位 S(1 位) 阶码 E(8 位) 尾数 M(23 位) 图 2-1 IEEE754 标准 32 位单精度浮点数格式 100 …0 0 ┇ 011 … 1 2n -1 n 位定点 整数的移码 0.00 …0 +0 ┇ 0.11 … 1 +(1-2-(n-1)) n 位定点正 小数的反码 1.00 …0 -(1-2-(n-1)) ┇ 1.11 … 1 -0 n 位定点负 小数的反码 17 S:数符,占 1 为。S 为 0 表示“+”,S 为 1 表示“-”。 E:阶 码 e 的移码形式,占据 8 位,包括 1 位阶符和 7 位数值。将阶码 e 的真值平移 127 便转换成移码 E,即 E=127+e。移码 E 的取值范围为[1,254],0 和 255 用于表示特殊含义 的数值。 M:尾数,占 23 位。由于尾数的规格化要求,IEEE754 标准约定小数点左边隐含一位 “1”,从而使尾数的实际有效位为 24 位,即尾数的有效值为 1.M。 根据上述规定,32 位单精度浮点数所表示的数值 x 为: x = (-1)S × 2E-127 ×1.M 若 E=0,且 M=0,则 x 为 0 若 E=0,且 M≠0,则 x = (-1)S× 2-127×0.M,为非规格化浮点数 若 1≤E≤254,则 x = (-1)S× 2E-127×1.M,为规格化浮点数 若 E=255,且 M≠0,则 x 为“非数值” 若 E=255,且 M=0,则 x = (-1)S×∞ 值得注意的是:非规格化浮点数和 0 的尾数 M 前的隐含位是“0”而不是“1”。 【例 2-18】将 5/32 和-69.625 表示成 IEEE754 单精度浮点数的格式。 解:①5/32=0.00101B=1.01B×2-3,按 IEEE754 单精度浮点数的要求, ∵x≥0,∴S=0 ∵尾数的有效值为 1.M,∴M=01000000000000000000000B ∵E=127+e,∴E=127+(-3)=124=01111100B 5/32 表示成 IEEE754 单精度浮点数的格式为: 0 01111100 01000000000000000000000 ②∵-69.625= -1000101.101B= -1.000101101B×26 ∴S=1 M=00010110100000000000000B E=127+6=133=10000101B,其浮点数格式如下: 1 10000101 00010110100000000000000 【例 2-19】将 IEEE754 单精度浮点数 42E48000H 转换成真值十进制数。 解:按 IEEE754 定义的单精度浮点数格式 单精度浮点数 42E48000H 可表示为: 0 10000101 11001001000000000000000 ∴S=1,E=10000101B=133,M=11001001000000000000000B=0.78515625,其浮点数对 应的真值为:(-1)S × 2E-127 ×1.M=(-1)0 × 2133-127 ×1.78515625=1.78515625×26=114.25 (2)64 位双精度浮点数格式(IEEE754 标准) 64 位双精度浮点数格式如图 2-2 所示。 符号位 S(1 位) 阶码 E(8 位) 尾数 M(23 位) 图 2-2 IEEE754 标准 64 位双精度浮点数格式 64 位双精度浮点数所表示的数值 x 为: x = (-1)S × 2E-1023 ×1.M 2.3.2 浮点数的规格化 浮点数规格化的目的在于:一方面为了提高运算精度,尽可能占满尾数的位数,以 保留更多的有效数字;另一方面保证了浮点数的唯一性。例如,对于浮点数 0.001011×26, 由于 0.001011×26=0.101100×24=0.000001011×29=……,所以,同一个数 0.001011×26 就有多种表示,无法保证其唯一性。另外,如果规定尾数为 6 位,0.000001011×29 就成了 0.000001×29,从而丢掉了有效数字,降低了数的精度。对于基数 R 为 2 的浮点数,其规格 化条件是:0.5≤ M∣∣<1。在计算机中,浮点数通常是以规格化形式存储和参加运算的。 18 如果运算结果出现了非规格化浮点数,则必须对结果进行规格化处理。 2.3.3 浮点数的表示范围 浮点数的格式被确定后,其所表示的数据范围也就确定了。求浮点数的表示范围, 实质上是分析出浮点数所表示的最大数、最小数等。下面针对基数 R 为 2 的浮点数(阶 码为 m+1 位(包括 1 位阶符),尾数为 n+1 位(包括 1 位数符)),分别讨论不同形式的 机器数所表示的规格化和非规格化的最大、最小数。 1、阶码和尾数均采用原码表示 阶码和尾数均采用原码表示时,典型浮点数的机器数和真值如表 2-3 所示。 表 2-3 阶码和尾数均用原码表示时机器数的规格化和非规格化最大、最小数 典型浮点数 机器数 真值 非规格化最小正数 0 1 11…1 00…01 +2-n×2-(2m-1) 规格化最小正数 0 1 11…1 10…00 +2-1×2-(2m-1) 最大正数 0 0 11…1 11…11 +(1-2-n)×2(2m-1) 非规格化最大负数 1 1 11…1 00…01 -2-n×2-(2m-1) 规格化最大负数 1 1 11…1 10…00 -2-1×2-(2m-1) 最小负数 1 0 11…1 11…11 -(1-2-n)×2(2m-1) 2、阶码和尾数均采用补码表示 阶码和尾数均采用补码表示时,典型浮点数的机器数和真值如表 2-4 所示。 表 2-4 阶码和尾数均用补码表示时机器数的规格化和非规格化最大、最小数 典型浮点数 机器数 真值 非规格化最小正数 0 1 00…0 00…01 +2-n×2-2m 规格化最小正数 0 1 00…0 10…00 +2-1×2-2m 最大正数 0 0 11…1 11…11 +(1-2-n)×2(2m-1) 非规格化最大负数 1 1 00…0 11…11 -2-n×2-2m 规格化最大负数 1 1 00…0 01…11 -(2-1+2-n)×2-2m 最小负数 1 0 11…1 00…00 -1×2(2m-1) 3、阶码和尾数分别采用移码和补码表示 阶码和尾数分别采用移码和补码表示时,典型浮点数的机器数和真值如表 2-5 所示。 表 2-5 阶码用移码尾数用补码表示时机器数的规格化和非规格化最大、最小数 典型浮点数 机器数 真值 非规格化最小正数 0 0 00…0 00…01 +2-n×2-2m 规格化最小正数 0 0 00…0 10…00 +2-1×2-2m 最大正数 0 1 11…1 11…11 +(1-2-n)×2(2m-1) 非规格化最大负数 1 0 00…0 11…11 -2-n×2-2m 规格化最大负数 1 0 00…0 01…11 -(2-1+2-n)×2-2m 最小负数 1 0 11…1 00…00 -1×2(2m-1) 2.3.4 浮点数的机器零 计算机在对浮点数处理的过程中,首先是判“0”,因为,当一个浮点数是“0”时, 运算可以简化。机器零是指如果一个浮点数的尾数为全 0,则不论阶码为何值;或者如 果一个浮点数的阶码小于它所能表示的最小值,则不论其尾数为何值,计算机都会把这 种浮点数当作零看待。特别是当阶码用移码表示、尾数用补码表示时,如果阶码为它所 表示的最小数-2m(阶码为 m 位)且尾数为 0 时,其阶码的移码形式为全 0,尾数的补码形 式也为全 0,这时的浮点数的机器数形式也为全 0,从而有利于简化机器的判 0 电路。 19 2.4 非数值数据的表示 2.4.1 ASCII 码与字符串 字符和字符串是计算机中用得最多的非数值数据,人们利用字符和字符串编写程序、表 达文字及各类信息,以便于与计算机进行交流。为了使计算机硬件能够识别和处理字符,必 须对字符按一定规则用二进制进行编码。 1、ASCII 码 ASCII 码(American Standard Code for Information Interchange 美国标准信息交换码)是 目前国际上广泛使用的字符编码。ASCII 码为 7 位二进制编码,可表示 128 个字符,包括 10 个数字字符(0~9)、52 个英文字母(大、小写各 26 个)、34 个常用符号和 32 个控制字 符(如空格符 NUL、回车符 CR、换行符 LF 等)。表 2-6 所示为 ASCII 编码。7 位 ASCII 码用 b6b5b4b3b2b1b0 表示,其中 b6b5b4 为 ASCII 码的高 3 位,是字符所在表中列的编码;b3b2b1b0 为 ASCII 码的低 4 位,是字符所在表中行的编码。 表 2-6 ASCII码字符表 b6b5b4 b3b2b1b0 000 001 010 011 100 101 110 111 0000 NUL DLE SP 0 @ P p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 ″ 2 B R b r 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN & 6 F V f v 0111 BEL ETB ′ 7 G W g w 1000 BS CAN ( 8 H X h x 1001 HT EM ) 9 I Y i y 1010 LF SUB * : J Z j z 1011 VT ESC + ; K [ k { 1100 FF FS , < L \ l ∣ 1101 CR GS - = M ] m } 1110 SO RS ﹒ > N ˆ n ~ 1111 SI US / ? O _ o DEL 在计算机中,一个字符用一个字节表示,由于 ASCII 码只有 7 位,因此,表示字符的 字节的最高位 b7 有以下用法: (1)b7 置 0,用于表示字符的 ASCII 码 (2)b7 置 1,用于表示汉字的编码 (3)b7 用作奇偶校验位 2、字符串 字符串是指连续的一串字符。由于一个字符占一个字节单元,所以字符串在存储时要占 连续的多个字节单元,至于存储顺序不同的机器可以有不同的规定,字符串中的字符既可以 从低位字节向高位字节顺序存放,也可以从高位字节向低位字节顺序存放。 2.4.2 BCD 码与十进制数串 1、8421BCD 码 BCD(Binary Coded Decimal)码是对一位十进制数所进行的编码,其目的在于:一方 20 面方便快捷地将十进制数转换成二进制形式的数据;另一方面直接实现对十进制数的运算。 BCD 码的编码方法有多种,较常用的有 8421 BCD 码、2421 BCD 和余 3 码。常见的 BCD 码如表 2-7 所示。 表 2-7 BCD码 一位十进制数 8421BCD 码 2421BCD 码 余 3 码 0 0000 0000 0011 1 0001 0001 0100 2 0010 0010 0101 3 0011 0011 0110 4 0100 0100 0111 5 0101 1011 1000 6 0110 1100 1001 7 0111 1101 1010 8 1000 1110 1011 9 1001 1111 1100 8421BCD 码是 4 位二进制编码,“8421”是指 4 个位置的位权分别为 8、4、2、1,有且 只有 10 个编码。由于 4 位二进制的编码有且只有 16 个编码,所以,8421BCD 码与 4 位的 二进制编码之间并不存在一一对应的关系。在对十进制数直接进行运算时,其结果可能会出 现非 8421BCD 码,此时需要及时进行加 6(0110)修正,否则,运算的结果会出错。 另外需要注意的是 BCD 码是对一位十进制数所进行的编码,对于多位十进制数,则应 用多个 BCD 码组合起来表示。例如十进制数 147,对应的 8421BCD 码为 0001 0100 0111。 2、十进制数 (1)非压缩型十进制数 非压缩型十进制数主要应用于显示、打印等非数值处理过程中,是将十进制数以字符串 的形式进行表示,即把十进制数中的每一位数字以及数的正、负符号都当作一个字符,用一 个字节表示其 ASCII 码。根据数的符号(+、-)的 ASCII 码所存储的位置不同,非压缩型 十进制数又可分为前分隔非压缩型十进制数和后嵌入非压缩型十进制数。 1)前分隔非压缩型十进制数 前分隔非压缩型十进制数的表示方法是:数的符号占一个字节,正号“+”的 ASCII 码 为 2BH,负号“-”的 ASCII 码为 2DH,位于十进制数的数字位之前。 【例 2-20】采用前分隔非压缩型十进制数,写出十进制数+256 和-1716 在内存的存储形式。 解:+256 在内存的存储形式为: 2B 32 35 36 “+” “2” “5” “6” 十进制数+256 在内存中共占 4 个字节单元。 -1716 在内存的存储形式为: 2D 31 37 31 36 “-” “1” “7” “1” “6” 十进制数-1716 在内存中共占 5 个字节单元。 2)后嵌入非压缩型十进制数 后嵌入非压缩型十进制数的表示方法是:数的符号不单独占一个字节,而是嵌入到最低 位数字的编码中。其嵌入规则是:若数的符号为正号“+”,则最低位数字的 ASCII 码保持 不变;若数的符号为负号“-”,则最低位数字的 ASCII 码加上 40H。 【例 2-21】采用后嵌入非压缩型十进制数,写出十进制数+256 和-1716 在内存的存储形式。 21 解:+256 在内存的存储形式为: 32 35 36 “2” “5” “6” 十进制数+256 在内存中共占 3 个字节单元 -1716 在内存的存储形式为: 31 37 31 76 “1” “7” “1” “6” 十进制数-1716 在内存中共占 4 个字节单元 (2)压缩型十进制数 压缩型十进制数既能节省存储空间,又便于直接进行十进制运算,是被广泛采用的十进 制数表示方法。此方法是用一个字节存放两位十进制数的 BCD 码,数的符号(+、-)占半 个字节,并存放在最低位数字的 BCD 码之后。数的符号所占的半个字节规定为: “1100” 表示正号(+),“1101”表示负号(-)。为了保证此表示方法不出现只有半个字节的情况, 规定压缩型十进制数数字个数和 1 位符号之和必须是偶数,否则,在最高位数字之前补一个 数字 0。 【例 2-22】采用压缩型十进制数,写出十进制数+256 和-1716 在内存的存储形式。 解:+256 在内存的存储形式为: 0010 0101 0110 1100 “2” “5” “6” “+” 十进制数+256 在内存中共占 2 个字节单元 -1716 在内存的存储形式为: 0001 0111 0001 0110 1101 “1” “7” “1” “6” “-” 十进制数-1716 在内存中共占 3 个字节单元 2.5 数据校验码 数据在存储和传送的过程中,难免不会出现错误,为了减少和避免错误的发生,一方面 从硬件方面采取措施,提高硬件本身的抗干扰能力和可靠性;另一方面在数据编码上采取检 错纠错的措施,使得机器能够自动发现错误,甚至能纠正错误。我们把这种具有检测错误或 带有自动纠错能力的数据编码称为数据校验码。其原理是在数据中加入一些校验位,组成数 据校验码,通过检查数据校验码的合法性来判断是否出错或进行纠错。常用的数据校验码有 奇偶校验码、海明校验码和循环冗余校验码(CRC)等。 2.5.1 奇偶校验码 奇偶校验码是一种最简单、最常用的校验码,被广泛应用于内存的读写校验和串行通信。 1、奇偶校验码的编码 对于 n 位二进制数 D=dn-1dn-2…d1d0,添加一位校验位 P,P 的位置可以在数据 D 的最高 位 dn-1 之前,也可以在数据 D 的最低位 d0 之后,并且,P 是数据 D 的函数,即 P=ƒ(D)。 于是,n 位数据 D 和 1 位校验位 P 便构成了一个 n+1 位的奇偶校验码。奇偶校验码根据 P~ D 之间的函数不同,可分为奇校验和偶校验。 偶校验(Even):加入一位校验位 PEven 后,使得 n+1 位的奇偶校验码中“1”的个数为 偶数,因此,PEven=dn-1⊕dn-2⊕…d1⊕d0。 奇校验(Odd):加入一位校验位 POdd 后,使得 n+1 位的奇偶校验码中“1”的个数为奇 数,因此,POdd= EvenP 。 2、奇偶校验码的校验 22 发送端将一个奇偶校验码发送后,接收端需要对接收到信息进行校验,判断所接收到的 数据是否有误,以决定其取舍。具体校验方法为:如果接收端接收到一个 1 的个数为偶数的 奇校验码,或接收端接收到一个 1 的个数为奇数的偶校验码,则表示接收端所接收的是一个 有错的校验码。通过设置出错标志 E(E=0,表示无误;E=1,表示有误),很容易实现校验。 偶校验的出错标志 EEven:E Even= dn-1⊕dn-2⊕…d1⊕d0⊕PEven 奇校验的出错标志 EOdd:E Odd= dn-1⊕dn-2⊕…d1⊕d0⊕POdd 3、奇偶校验码的纠错能力 根据奇偶校验码的校验可知,奇偶校验码只能发现一位出错或奇数位同时出错,至于出 错的位置是无法确定的,因此,奇偶校验码无法实现纠错功能。尽管如此,由于一位出错的 概率远远高于多位同时出错的概率,奇偶校验码能够满足一般可靠性的要求,因此,奇偶校 验码一种最简单、最常用的数据校验码,它被广泛应用于对存储器中数据的检查或传送数据 的检查。 2.5.2 海明校验码 海明校验码是由 Richard Hamming 于 1950 年提出的,到目前还被广泛应用。它是在 奇偶校验的基础上,通过合理增加校验位的位数,组成海明校验码,不仅能够实现发现多位 出错,而且能够对一位出错进行自动纠正。 1、海明校验码中校验位的位数 设数据的位数为 n,校验位的位数为 k,则组成的海明校验码为 n+k 位。校验时 k 位校 验位的编码共有 2k 种状态,其中只有一种状态用来表示数据无误,其余 2k -1 种状态用来表 示数据有措。由于海明校验码共 n+k 位,所以校验位的位数 k 与数据的位数 n 应满足: 2k -1≥n+k (2-12) 根据式(2-12)可计算出具有检测一位出错并能纠正一位错误能力的海明校验码中 k 与 n 的具体对应关系,如表 2-8 所示。 表 2-8 海明校验码中校验位的位数 k 与数据的位数 n 的关系 n 最小的 k 1~4 4 5~11 5 12~26 6 27~57 7 58~120 8 2、海明校验码的编码 设 n 位的数据为 Dn-1…D1D0,k 位的校验位为 Pk-1…P1P0,组成的海明校验码为 HmHm-1… H1,其中 m=n+k,海明校验码的编码规则为: (1)校验位 Pi 在海明校验码 HmHm-1…H1 中的位置 每一个校验位 Pi 在海明校验码中被安置在位号为 2i 的位置(i∈{0,1,…,k-1}),校 验位 Pk-1 可能不满足这个关系,将其安置在海明校验码的最高位。其余各位为数据位,并按 从低位到高位依次排列。 (2)海明校验码 HmHm-1…H1 的校验 海明校验码 HmHm-1…H1 中的每一位 Hj 是由多个校验位 Pi 来校验的(i∈{0,1,…,k-1}), 其关系是被校验的每一位位号 j 等于校验它的各个校验位的位号之和。 (3)校验位 Pi 的形成 根据规则(2),找出校验位 Pi 参与了对哪些数据位的校验,反过来,被校验的这些数 据位按照奇偶校验原理形成校验位 Pi,下面以一个字节的数据为例来讨论海明校验码。由于 数据为 8 位,即 n=8,按式(2-12)可求出校验位的位数 k=5,海明校验码的总位数为 13 23 位,表示为 H13H12…H1。 按规则(1)知,海明校验码为 P4D7D6D5D4P3D3D2D1P2D0P1P0 按规则(2)可以得到表 2-9 所示的结果。 表 2-9 海明校验码与校验位的关系 海明校验码 数据位/ 校验 位 参与校验的校验位位号 被校验的海明校验码的位号等 于校验它的各个校验位位号之 和 H1 P0 1 1=1 H2 P1 2 2=2 H3 D0 1,2 3=1+2 H4 P2 4 4=4 H5 D1 1,4 5=1+4 H6 D2 2,4 6=2+4 H7 D3 1,2,4 7=1+2+4 H8 P3 8 8=8 H9 D4 1,8 9=1+8 H10 D5 2,8 10=2+8 H11 D6 1,2,8 11=1+2+8 H12 D7 4,8 12=4+8 H13 P4 13 13=13 按规则(3)可以将形成校验位 Pi 的数据位进行分组,即校验组的分组。如果需要区分 是两位出错还是一位出错,可以补充一个总校验位 P4 P0:D0,D1,D3,D4,D6 P1:D0,D2,D3,D5,D6 P2:D1,D2,D3,D7 P3:D4,D5,D6,D7 P4:D0,D1,D2,D3,D4,D5,D6,D7,P0,P1,P2,P3 若采用偶校验,则各个校验位的形成方法为: P0=D0⊕D1⊕D3⊕D4⊕D6 P1=D0⊕D2⊕D3⊕D5⊕D6 P2=D1⊕D2⊕D3⊕D7 P3=D4⊕D5⊕D6⊕D7 P4=D0⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕P0⊕P1⊕P2⊕P3 3、海明校验码的校验 在接收端收到海明校验码后,需对 k 个校验位分别进行 k 组奇偶校验,以判断数据传输 是否出错。分组校验后,校验结果形成 k 位的状态字 Sk-1…S1S0,若状态字 Sk-1…S1S0 全 0, 则表示数据传输无误;否则,则表示数据传输有误,状态字 Sk-1…S1S0 所对应的十进制数值 就是出错位的位号,将该位取反,即可实现纠错。下面以一个字节数据的海明校验码为例来 说明校验过程。校验时按偶校验,状态字 S4…S1S0 形成如下: S0= P0⊕D0⊕D1⊕D3⊕D4⊕D6 S1= P1⊕D0⊕D2⊕D3⊕D5⊕D6 S2= P2⊕D1⊕D2⊕D3⊕D7 S3= P3⊕D4⊕D5⊕D6⊕D7 S4= P4⊕D0⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕P0⊕P1⊕P2⊕P3 24 状态字 S4…S1S0 能够反映 13 位海明校验码的出错情况,错误个数为偶数时 S4 为 0,错 误个数为奇数时 S4 为 1,以此可以判断是一位出错还是两位出错。 2.5.3 循环冗余校验码 在一位出错的概率远远大于多位同时出错概率的情况下,奇偶校验是一种简单有效的检 查方法,但在串行通信中,常常会遇到瞬间干扰,造成多位数据会同时发生错误,此时,使 用奇偶校验码意义不大,通常采用循环冗余校验码,即 CRC 码(Cyclic Redundancy Check)。它是一种具有很强检错纠错能力的校验码。 1、循环冗余校验思想 用 n 位的数据 dn-1…d1d0 构成一个χ的 n-1 次幂的多项式 M(χ),即 M(χ)= dn-1χn-1+dn-2 χn-2+…+d1χ1+d0,再用一个约定的多项式 G(χ)去除 M(χ),可得式(2-13)所示的关 系式: = Q(χ)+ (2-13) 其中 Q(χ)为商数,R(χ)为余数。 由式(2-13)可得:M(χ)- R(χ)=Q(χ)×G(χ) (2-14) 发送端将 M(χ)- R(χ)作为校验码进行发送,接收端收到校验码后,用双方约定 的多项式 G(χ)去除,如果能够被整除,即余数为 0,则表示数据传输无误,否则,则表 示数据传输有误。 2、模 2 运算 由式(2-14)可知,M(χ)- R(χ)是减法运算,需要涉及到借位,难以用简单的拼 装方法实现编码,为了回避借位运算,CRC 码采用了模 2 运算。所谓模 2 运算,是指以按 位模 2 加运算为基础的二进制四则运算。简单地讲,模 2 运算是一种不考虑进位和借位的运 算。 (1)模 2 加减 模 2 加减是按异或规则实现按位加,不进位。其运算规则是: 0±0=0,0±1=1,1±0=1,1±1=0 【例 2-23】按模 2 加减规则,计算 1101+1011,1101-1011 解:根据模 2 加减规则可得: ①1101+1011=0110 ②1101-1011=0110 由此可见,模 2 的加法运算等于模 2 的减法运算。 (2)模 2 乘 模 2 乘就是在进行乘法运算时,按模 2 加的运算规则,对各个位积进行模 2 加法。 例如 1010×1011=1001110。 (3)模 2 除 模 2 除就是在进行除法运算时,按模 2 减的运算求部分余数,计算时不进行借位。 例如 1011001÷1101=1100,余数为 101。 3、CRC 码的编码 设 n 位数据 dn-1…d1d0 所构成一个χ的 n-1 次幂的多项式 M(χ),即 M(χ)= dn-1χn-1+dn-2 χn-2+…+d1χ1+d0,约定一个生成多项式 G(χ)为χ的 k 次幂的多项式,即 G(χ)= Ck χk+Ck-1χk-1+…+C1χ1+C0,G(χ)作为除数的余数多项式 R(χ)最高次幂为χk-1,因此 R(χ)相当于 k 位余数形成的多项式。把 k 位余数拼接在 n 位数据位之后,便构成 n+k 位的 CRC 码。CRC 码的编码只是简单地拼接,关键是如何根据数据去产生 k 位余数。 由于 n 位数据位后附加了 k 位余数,n 位数据所构成一个χ的 n-1 次幂的多项式 M(χ) 25 相当于提高了χk-1 阶,即 M(χ)·χk-1。然后按模 2 除法,用 M(χ)·χk-1 除以 G(χ), 便得到余数多项式 R(χ),该多项式中χ的各个次幂的系数就是 k 位余数。 =Q(χ)+ (2-15) 由式(2-15)可得:M(χ)·χk-1-R(χ)=Q(χ)×G(χ) 根据模 2 加减运算规则可得:M(χ)·χk-1+R(χ)=Q(χ)×G(χ) (2-16) 【例 2-24】设生成多项式 G(χ)=χ3+χ1+1,求 4 位数据 1101 的 CRC 码。 解:∵G(χ)=χ3+χ1+1,是 4 位的多项式 ∴余数是 3 位 根据式(2-16)可得 3 位的余数为 101,因此,4 位数据 1101 的 CRC 码为 1101101。 在 CRC 码中,由 n 位数据和 k 位校验构成的 n+k 位的 CRC 码,也称为(n+k,n)码。 在【例 2-24】中,由于 n=4,n+k=7,故称(7,4)码。 4、CRC 码的校验 接收端收到 CRC 码后,用双方约定的生成多项式 G(χ)做模 2 除,如果除得的余数 为 0,则表示接收到的信息中没有错误,否则,则表示接收到的信息中某一位发生错误。出 错的位置不同相应的余数也不同,因此,可以根据余数来确定出错的位置,进而实现纠错功 能。 在【例 2-24】中,对于 4 位数据 1101 的(7,4)码出错情况如表 2-10 所示。 表 2-10 4位数据 1101 基于 G(χ)=χ3+χ1+1 (7,4)码的校验 错误状态 F7 F6 F5 F4 F3 F2 F1 D3 D2 D1 D0 R2 R1 R0 余数 错误位置 无误 1 1 0 1 0 0 1 000 无 有误 1 1 0 1 0 0 0 001 1 有误 1 1 0 1 0 1 1 010 2 有误 1 1 0 1 1 0 1 100 3 有误 1 1 0 0 0 0 1 011 4 有误 1 1 1 1 0 0 1 110 5 有误 1 0 0 1 0 0 1 111 6 有误 0 1 0 1 0 0 1 101 7 以表 2-10 中的第二行为例,把余数 001 补 0 后再除以 G(χ),得到的第二次余数为 010, 第二次余数为 010 再补 0 后除以 G(χ),得到的第三次余数为 100,按此继续做除法,不 难发现所得的余数依次为 011、110、111、101,最后又回到 001,这就是为什么将此校验码 称之为循环校验码的原因。根据循环码的这一特点,当接收端收到 CRC 码与生成多项式 G (χ)做模 2 除得到的余数不为 0 时,可以一边对余数补 0 继续做模 2 除,同时使被检测的 CRC 码循环左移,当出现余数为 101 时,原来出错的位已移到 F7 的位置,将其取反进行纠 错后,在下次移位时送回 F1,将 CRC 码继续循环左移,移满一个循环后,可得到一个纠错 后的 CRC 码。 例如,若接收端收到 CRC 码字为 1010111,用 G(χ)=χ3+χ1+1 做模 2 除,得到的 余数为 100,说明接收到的信息中某一位发生错误。将此余数补 0 后再除以 G(χ),同时 使 CRC 码循环左移。进行如此运算 4 次后,得到的余数为本 101,此时,CRC 码也循环左 移了 4 位,变成了 1111010。出错位已移至 F7,将其取反可得 0111010。再将它循环左移 3 位,补足 7 次(一个循环),出错位又回到 F3,便得到一个正确的码字 1010011。 5、生成多项式 G(χ) 26 由前面的内容可知,在 CRC 码的形成和校验过程中,生成多项式 G(χ)起着非常重 要的作用。采用的生成多项式 G(χ)不同,所形成的 CRC 码字、码距不同,其检错和纠 错能力也不同。关于生成多项式 G(χ),并非任何一个χ的 k 次幂多项式都可以作为生成 多项式,它应满足以下要求: (1)任何一位发生错误都应使余数不为 0 (2)不同位发生错误时,其余数应不同 (3)对余数做模 2 除,应能使余数循环 为便于选择满足以上要求的生成多项式 G(χ),表 2-11 列出了常用的生成多项式。 表 2-11 常用的生成多项式 G(χ) CRC 码长 数据位数 码距 多项式 G(χ) 7 4 3 χ3+χ+1 7 4 3 χ3+χ2+1 7 3 4 χ4+χ3+χ2+1 7 3 4 χ4+χ2+χ+1 15 11 3 χ4+χ+1 15 7 5 χ8+χ7+χ6+χ4+1 15 5 7 χ10+χ8+χ5+χ4+χ2+χ+1 31 26 3 χ5+χ2+1 31 21 5 χ10+χ9+χ8+χ6+χ5+χ3+1 63 57 3 χ6+χ+1 63 51 5 χ12+χ10+χ5+χ4+χ2+1 在数据通信与网络中,由于数据位数多,上千位二进制数据位构成一帧,为检测信息传 输的正确与错误,广泛采用 CRC 码进行校验。这时所使用的生成多项式的次幂比较高,常 用的生成多项式有: G(χ)=χ16+χ15+χ2+1 G(χ)=χ16+χ12+χ5+1 G(χ)=χ32+χ26+χ22+χ16+χ12+χ11+χ10+χ8+χ7+χ5+χ4+χ2+χ+1 关 联 27 习 题 2.1 数制转换 (1)213=( )B=( )H (2)0F8EH=( )B=( )D (3)69.75=( )B=( )H (4)10111011B =( )D=( )H (5)110000010.0101 B = ( )D =( )H 2.2 设机器字长为 8 位(含一位符号位),分别求出[x]原、[x]反、[x]移、[x]补、[-x]补、[ 2 1 x]补。 (1)x=+119 (2)x=-56 (3)x=-1 (4)x=+25/128 (5)-37/64 2.3 已知 x 二进制真值,试求[x]补、[-x]补、[ 2 1 x]补、[ 4 1 x]补、[2x]补、[4x]补、[-2x]补、[- 4 1 x]补。 (1)x=+0.0101101 (2)x=-0.0001011 (3)x=-1 2.4 已知[x]补 ,求 x 的真值。 (1)[x]补=0.1010111(2)[x]补=1.1110010(3)[x]补=0.0101101 (4)[x]补=1.1111111 2.5 设十进制数 x=(+124.625)×2-10。 (1)写出 x 对应的二进制定点小数表示形式。 (2)若机器的浮点数表示格式为: 20 19 18 15 14 0 数符 阶符 阶码 尾 数 其中阶码和尾数的基数均为 2。 1)写出阶码和尾数均采用原码表示时的机器数形式。 2)写出阶码和尾数均采用补码表示时的机器数形式。 2.6 设某机字长为 16 位,数据表示格式如下。 定点数: 15 14 0 数符 尾 数 浮点数: 15 14 13 11 10 0 数符 阶符 阶码 尾 数 分别写出下列数据表示形式中所能表示的最小正数、最大正数、最大负数、最小负数(绝 对值最大的负数)以及浮点规格化最小正数、最大负数所对应的十进制真值。 (1)原码表示的定点整数 (2)补码表示的定点整数 (3)阶码与尾数均用原码表示的浮点数 (4)阶码与尾数均用补码表示的浮点数 (5)阶码为移码、尾数用补码表示的浮点数 2.7 设 2.6 题的浮点数格式中,阶码与尾数均用补码表示,分别写出下面用十六进制书写的 浮点数所对应的十进制真值。 (1)FFFFH (2)C400H 2.8 写出下列十进制数的 IEEE754 标准 32 位单精度浮点数的机器数表示形式。 (1)0.15625 (2)-0.15625 28 2.9 写出 IEEE754 标准 32 位单精度浮点数所能表示的最小规格化正数和最大规格化负数的 机器数表示形式。 2.10 写出下列十六进制的 IEEE754 单精度浮点数所代表的十进制数真值。 (1)42E48000H (2)3F880000H (3)00800000H (4)C7F00000H 2.11 设有两个正浮点数:N1=M1×2e1, N2=M2×2e2 (1)若 e1>e2 ,是否有 N1>N2 ? (2)若 M1、M2 均为规格化数,上述结论是否正确? 2.12 设一个 6 位二进制小数 x=0.a1a2a3a4a5a6 ,x≥0,请回答: (1)若要 x≥ 8 1 , a1a2a3a4a5a6 需要满足什么条件? (2)若要 x> 2 1 , a1a2a3a4a5a6 需要满足什么条件? (3)若要 4 1 ≥x> 16 1 ,a1a2a3a4a5a6 需要满足什么条件? 2.13 分别用前分隔数字串、后嵌入数字串和压缩的十进制数串形式表示下列十进制数。 (1)+79 (2)-635 (3)+2008 (4)-8510 2.14 下面是两个字符(ASCII 码)的海明校验码(偶校验),请检测它们是否有错?如果有 错,请加以改正,并写出相应的正确 ASCII 码所代表的字符。 (1)10111010011 (2)10001010110 2.15 设数据信息是 1010110010001111,选择生成多项式为 G(x)=100101,求出数据的 CRC 码。 2.16 完成下列 8421 BCD 码与其它数制/码制的转换。 (1)(1001 0011)BCD= ( )D =( ) B (2)(0011 0111 0110.011)BCD = ( )D =( ) B (3)11010011B=( )BCD (4)110000010.0101B = ( )BCD (5)151.625 = ( ) B = ( )BCD 2.17 计算下列 BCD 码的和,并按规则进行十进制调整。 (1)96+87 (2)1556+298 2.18 选择题 (1)某机器字长 64 位,1 位符号位,63 位尾数。若采用定点小数表示,则最大正小数为( )。 A、+(1-2-64) B、+(1-2-63) C、2-64 D、2-63 (2)设[x]补=1.x1x2x3x4x5x6x7x8,当满足( )时,x>- 2 1 成立。 A、x1=1, x2x3x4x5x6x7x8 至少有一个为 1 B、x1=0, x2x3x4x5x6x7x8 至少有一个为 1 C、x1=1, x2x3x4x5x6x7x8 任意 D、x1=0, x2x3x4x5x6x7x8 任意 (3)在下列机器数中,哪种表示方式下零的表示形式是惟一的( )。 A、原码 B、补码 C、反码 D、都不是 (4)下列论述中,正确的是( )。 A、已知[x]原求[x]补的方法是在[x]原的末位加 1 B、已知[x]补求[-x]补的方法是在[x]补的末位加 1 C、已知[x]原求[x]补的方法是将尾数连同符号位一起取反,再在末位加 1 D、已知[x]补求[-x]补的方法是将尾数连同符号位一起取反,再在末位加 1 (5)IEEE754 标准规定的 32 位浮点数格式中,符号位为 1 位,阶码为 8 位,尾数为 23 位, 则它所能表示的最大规格化正数为( )。 29 A、+(2-2-23) ×2+127 B、+(1-2-23) ×2+127 C、+(2-2-23) ×2+255 D、2+127×2-23 (6)浮点数的表示范围取决于( )。 A、阶码的位数 B、尾数的位数 C、阶码采用的编码 D、尾数采用的编码 (7)假定下列字符码中有奇偶校验位,但没有数据错误,采用奇校验位的编码是( )。 A、10000010 B、11010110 C、11010111 D、10111011 2.19 填空题 (1)设某机器字长为 8 位(含一符号位),若[x]补=11001001,则 x 所表示的十进制数的真 值为▁▁▁▁,[ 4 1 x]补=▁▁▁▁;若[y]移=11001001,则 y 所表示的十进制数的真值为 ▁▁▁▁,y 的原码[y]原=▁▁▁▁。 (2)在带符号数的编码方式中,零的表示是惟一的有▁▁▁▁和▁▁▁▁。 (3)若[x1]补=10110111,[x2]原=1.01101,则数 x1 的十进制数真值是▁▁▁▁,x2 的十进制数 真值是▁▁▁▁。 (4)设某浮点数的阶码为 8 位,用移码表示;尾数为 24 位,采用规格化补码表示。则该浮 点数能表示的最大正数的阶码为▁▁▁▁,尾数为▁▁▁▁;规格化最小负数的阶码为 ▁▁▁▁,尾数为▁▁▁▁。 (5)设有效信息位的位数为 k,校验位的位数为 r,则能够检测出一位出错并能自动纠错的 海明校验码应满足的关系是▁▁▁▁。 30 第 3 章 运算方法与运算器 【内容摘要】 计算机最基本的功能是对数据进行处理。计算机对数据的处理可以归纳为两种基本运 算:一是算术运算,二是逻辑运算。算术运算是指加、减、乘、除运算,逻辑运算是指逻辑 移位和逻辑与、逻辑或、逻辑非等运算。无论哪一种运算,都会涉及到运算对象(数据), 结合数据的不同表示方法,本章将侧重于以定点小数的补码来讨论计算机中各类数据的运算 方法与硬件实现问题。 【学习要点】 ● 定点小数补码的四则运算与实现 ● 浮点数的四则运算与实现 ● 十进制数的加减运算与实现 ● 逻辑运算与 ALU ● 定点运算器与浮点运算器 3.1 定点数的算术运算与实现 定点数的机器数有原码、反码、补码等形式,在本节中我们重点是以定点小数的补码来 讨论定点数的加、减、乘、除运算。只有补码运算可以将减法转换为加法,补码的符号位同 补码的数值位一样参与运算,运算规则简单,易于实现,所以现代计算机中的数据普遍采用 补码。 3.1.1 定点数加减运算 1、补码加减运算规则 假设定点小数 x 的补码为[x]补,定点小数 y 的补码为[y]补。 则有: [x+y]补= [x]补+[y]补 (mod 2) (3-1) [x-y]补= [x]补- [y]补=[x]补+[-y]补 (mod 2) (3-2) 根据式(3-1)和式(3-2),补码加减运算的规则如下: 规则 1,参与运算的数是补码,运算结果也是补码; 规则 2,符号位同数值位一样参与运算,其结果的符号取决于运算结果的补码; 规则 3,加法运算时,直接将两个的补码相加;减法运算时,需要将减数变补(即[y]补 求[-y]补),然后再与被减数的补码相加。这是由于数据采用补码形式后,减法运算转换成了 加法运算,所以计算机实现加减运算只需加法器,无需减法器。我们在进行减法运算时也只 能按加法进行运算; 规则 4,补码的运算是有模的运算,如果运算结果超出了模(即符号位的运算产生了进 位),则将模自动丢失。这样处理的结果并非是错误的,还需要进一步进行溢出判断。 2、溢出与溢出判断 溢出是指运算结果超出了机器所能表示的数的范围。如果运算结果超出了机器所能表示 的最大正数,称为上溢(正溢出);如果运算结果超出了机器所能表示的最小负数,称为下 溢(负溢出)。一旦出现溢出,机器将无法表示正确结果,因此,计算机在运算的过程中必 须正确判断溢出并及时处理。 (1)单符号判别法 符号判别法是根据参与运算数的符号和运算结果的符号进行判断溢出。设[x]补=x0.x1x2… xn-1,[y]补=y0.y1y2…yn-1, [z]补= [x+y]补=z0.z1z2…zn-1,溢出标志为 V,则溢出标志 V 与符号 位(x0、y0、z0)之间的关系如表 3-1 所示。根据真值表 3-1,可得出溢出的判断条件为: 31 V= x0y0 0z + 0x 0y z0=(x0⊕y0)(x0⊕y0) 表 3-1 溢出标志(V)与符号位(x0、y0、z0)之间的真值表 x0 y0 z0 V 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 0 (2)双符号判别法 双符号判别法也称为变形补码法,是根据结果的变形补码来进行判断溢出。变形补码的 定义如下:设 x 为 n 位的二进制数据,式(3-3)和式(3-4)分别给出了 x 为定点小数 ±0.x1x2…xn-1 和 x 为定点整数±x1x2…xn-1 的变形补码定义。 定点小数变形补码的定义: 定点整数变形补码的定义: 由定义可知: 1)变形补码只是比普通补码多了一位符号位,所以,变形补码也称双符号位补码。如: [x]补=x0.x1x2…xn-1,则 [x]变补= x0x0.x1x2…xn-1,其 中 ,x0x0 为 00 表示正数,x0x0 为 11 表示负数。 2)变形补码的加减运算与普通补码的加减运算相同,只不过两个符号位都参与了运算, 运算结果为:z ' 0 z0.z1z2…zn-1,其中,z ' 0 z0 是结果的两个符号位,其含义为: z ' 0 z0=00,表示结果为正,无溢出 z ' 0 z0=11,表示结果为负,无溢出 z ' 0 z0=01,表示结果正溢出 z ' 0 z0=10,表示结果负溢出 由此可见,当 z ' 0 z0 不一致时,结果便产生溢出。因此,采用变形补码进行运算时,溢 出的判断条件为:V= z ' 0 0z + '0z z0= z ' 0 ⊕z0。 (3)进位判别法 当最高有效位产生进位而符号位无进位时,产生正溢;当最高有效位无进位而符号位产 x 0≤x<1 (mod 4) (3-3) 4+x -1≤x<0 []x 变补= x 0≤x<2n-1 (mod 2n+1 ) (3-4) 2n+1+x -2n-1≤x<0 []x 变补= 32 生进位时,产生负溢。故溢出的判断条件为:V=Cs⊕C0,其中 Cs 为符号位产生的进位,C0 为最高有效位产生的进位。 3、补码加减运算的步骤 补码的加减运算虽然十分简单,但一定要注意运算步骤的完整。为此归纳出补码的加减 运算步骤: 步骤 1,求[x]补、[y]补、[-y]补; 步骤 2,按式(3-1)和式(3-2)进行二进制加法运算。注意:只能按加法进行运算, 即使是减法运算,也要将减数变补(即由[y]补求[-y]补),然后再与被减数相加; 步骤 3,利用溢出判断条件,判断运算结果的正确性。 【例 3-1】已知 x 的真值,用补码的加减运算,计算 x±y。 ①x=+0.1010 y=+0.0011 ②x=-0.1101 y=-0.1011 解:①[x]补=0.1010,[y]补=0.0011,[-y]补=1.1101 [x+y]补=[x]补+[y]补=0.1010+0.0011=0.1101 [x- y]补=[x]补- [y]补=[x]补+[-y]补=0.1010+1.1101=0.0111 具体运算过程如下: 由单符号判别法可知,x±y 的结果没有发生溢出。 ②[x]补=1.0011,[y]补=1.0101,[-y]补=0.1011 [x+y]补=[x]补+[y]补=1.0011+1.0101=0.1000 [x-y]补=[x]补-[y]补=[x]补+[-y]补=1.0011+0.1011=1.1110 具体运算过程如下: 由单符号判别法可知,x+y 的结果为正,而参与运算的两个数是负数,所以结果发生了 溢出。而 x-y 的结果不会发生溢出。 【例 3-2】已知 x 的真值,利用变形补码求 x±y。 ① x=+0.1010 y=+0. 0011 ② x=-0.1101 y=-0.1011 解:①[x]变补=00.1010,[y]变补=00.0011,[-y]变补=11.1101 [x+y]变补=[x]变补+[y]变补=00.1010+00.0011=00.1101 [x-y]变补=[x]变补-[y]变补=[x]变补+[-y]变补=00.1010+11.1101=00.0111 具体运算过程如下: 由双符号判别法可知,x±y 结果的双符号相同,所以没有发生溢出。 ②[x]变补=11.0011,[y]变补=11.0101,[-y]变补=00.1011 [x+y]变补=[x]变补+[y]变补=11.0011+11.0101=10.1000 [x-y]变补=[x]变补-[y]变补=[x]变补+[-y]变补=11.0011+00.1011=11.1110 具体运算过程如下: 0.1010 +0.0011 0.1101 进位位 自然丢失 0.1010 +1.1101 10.0111 1.0011 +0.1011 1.1110 进位位 自然丢失 1.0011 +1.0101 10.1000 00.1010 +00.0011 00.1101 进位位 自然丢失 00.1010 +11.1101 100.0111 11.0011 +00.1011 11.1110 进位位 自然丢失 11.0011 +11.0101 110.1000 33 由双符号判别法可知,x+y 结果的双符号为 10,所以运算结果发生了溢出。而 x-y 结果 的双符号为 11,不会发生溢出。 【例 3-3】已知 x =-0.10111,y=-0.10001,求 (x+y)。 解: ∵[x]变补=11.01001,[y]变补=11.01111 ∴[ x]变补=11.10100,[ y]变补=11.10111 [ (x+y)]变补= [ x]变补+[ y]变补=11.10100+11.10111=11.01011 溢出判断:由于结果的双符号位相同,未产生溢出,运算结果正确。 ∴ (x+y)的真值为-0.10101 4、补码加减运算的逻辑实现 (1)一位全加器 设一位全加器 FA(Full Addition)的输入为 Ai 和 Bi,进位输入为 Ci,结果输出为 Si, 进位输出为 Ci+1,则一位全加器的真值表如表 3-2 所示。 表 3-2 一位全加器的真值表 输入 Ai Bi Ci 输出 Ci+1 Si 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 根据表 3-2 可得输出与输入之间的逻辑表达式: Si=(Ai⊕Bi)⊕Ci (3-5) Ci+1=AiBi+(Ai⊕Bi)·Ci (3-6) 由式(3-5)和 式(3-6),一位全加器逻辑电路如图 3-1(b)所示。假设单位逻辑门电路(与 门、与非门、或门、或非门)的时间延迟为 T,则一个异或门的时间延迟为 3T,一位全加器 产生 zi 的时间延迟为 6T,进位传递(由 Ci 到 Ci+1)时间为 2T。 (2)n 位补码加减运算的逻辑电路 n 位补码加减运算的逻辑电路需要 n 个一位全加器 FA、外加控制信号 M(M=0,实现 加法;M=1,实现减法)组成。其逻辑电路如图 3-1(a)所示。 为了进一步讨论进位关系,将式(3-5) 中进位输出 Ci+1 的关系式进行改变如下形式: Ci+1=AiBi+(Ai⊕Bi)·Ci=Gi+Pi·Ci 其中,Gi= AiBi,为进位生成函数;Pi= Ai⊕Bi,为进位传递函数。下面讨论 n 位补码加 减运算的进位关系。 C1 =G0+P0·C0 C2 =G1+P1·C1 ┇ (3-7) Cn-1 =Gn-2+Pn-2·Cn-2 由式(3-7)可知,高位的进位 Ci 仅仅是它的低一位进位 Ci-1 的函数,也就是说,只有 34 产生出 Ci-1 后才能产生 Ci,这种进位关系称为行波进位或串行进位。行波进位的补码加减运 算时间主要取决于进位的传递时间。为了提高补码的加减运算速度,进位关系往往采用并行 进位,即高位的进位 Ci 都是 C0 的函数。 C1 =G0+P0·C0 C2 =G1+P1·C1=G1+P1G0+P1P0·C0 ┇ (3-8) Cn-1 =gn-2+Pn-2·Cn-2=Gn-2+Pn-2Gn-3+…+Pn-3Pn-4…P1G0+Pn-3Pn-4…P1 P 0·C0 由式(3-8)可知,n 越大,进位逻辑电路越复杂,因此,往往将 n 位按 4 位进行分组, 不难证明,n/4-1 组间的进位信号 G*和传递信号 P*,的表达式。 P* 0=P3P2P1P0 G* 0= G3+ P3G2+P3P2G1+P3P2P1G0 P* 1=P7P6P5P4 G* 1= G7+P7G6+P7P6G6+P7P6P5G4 ┇ ┇ P* n/4 -1=Pn-1Pn-2Pn-3Pn-4 G* n/4 -1= Gn-1+Pn-1Gn-2+Pn-1Pn-2Gn-3+Pn-1Pn-2Pn-3Gn-4 它们同样满足 C* i+1=G* i+P* i C* i 各组的进位为: C* 1 =G* 0+P* 0·C0 C* 2 =G* 1+P* 1G* 0+P* 1 P* 0·C0 ┇ C* n/4 -1 =G* n/4 -2+P* n/4 -2G* n/4 -3+…+P* n/4 -2P* n/4 -3…P* 1G* 0+P* n/4 -2P* n/4 -3…P* 1 P* 0·C0 n 位定点数的加减运算进行分组后,组内可以按上述并行进位关系进行加法,而组间既 可以是串行进位关系,也可以是组间并行进位关系,在这里我们不再进行嫯述,感兴趣的同 学可以看有关的参考书。 图 3-1 n 位补码加减运算电路 在实际的运算器中,参与运算的数据和运算结果通常存放在寄存器中,控制器控制将数 据送入加法器,并进行加法运算,再将运算结果送回寄存器。如图 3-2 所示,给出了带有寄 存器的实现补码加减运算的逻辑电路。其中寄存器 A、B 分别存放参与运算的两个补码数据, 运算结果送回寄存器 A 保存。 35 图 3-2 实现补码加减运算的逻辑电路 3.1.2 定点数乘法运算 1、补码与真值的关系 设[x]补=x0.x1x2…xn-1 当 x≥0 时,则[x]补=0.x1x2…xn-1=∑ − = 1 1 n i xi×2-i 当 x<0 时,则[x]补=1.x1x2…xn-1=2+x ∴x=[x]补-2=-1+0.x1x2…xn-1=-1+∑ − = 1 1 n i xi×2-i 所以,对于任何数 x,其补码与真值的关系如式(3-9)所示。 x=-x0+∑ − = 1 1 n i xi×2-i=-x0+0.x1x2…xn-1 (3-9) 2、补码的右移 ∵x=-x0+∑ − = 1 1 n i xi×2-i=-x0+0.x1x2…xn-1 =- x0+ ∑ − = 1 1 n i xi×2-i=-x0+ x0+ ∑ − = 1 1 n i xi×2-i =-x0+ ∑ − = 1 0 n i xi×2-(i+1)= -x0+0.x0x1x2…xn-1=x0.x0x1x2…xn-1 ∴[ 补= x0.x0x1x2…xn-1 3、补码的一位乘法 设被乘数[x]补=x0.x1x2…xn-1,乘数[y]补=y0.y1y2…yn-1,则: [x·y]补=[x]补×(-y0+ ∑ − = 1 1 n i yi×2-i) =[x]补×[-y0+y12-1+y22-2+…+yn-12-(n-1)] =[x]补×[-y0+(y1-y12-1)+(y22-1-y22-2)+ …+(yn-12-(n-2)-yn-12-(n-1)] =[x]补×[(y1-y0)+(y2-y1)2-1+…+(yn-1-yn-2)2-(n-2)+(0-yn-1)2-(n-1)] 在乘数[y]补的最低位 yn-1 之后再添加一位 yn,并令 yn=0,在乘法运算开始时令部分积 Z0=0,便可以得到布斯(Booth)递推公式: [Z0]补=0 [Z1]补={[Z0]补+(yn-yn-1) [x]补}×2-1,yn=0 36 [Z2]补={[Z1]补+(yn-1-yn-2) [x]补}×2-1 ┇ [Zi]补={[Zi-1]补+(yn-i+1-yn-i) [x]补}×2-1 ┇ [Zn-1]补={[Zn-2]补+(y2-y1) [x]补}×2-1 [Zn]补={[Zn-1]补+(y1-y0) [x]补} Booth 算法规则如表 3-3 所示,其操作流程如图 3-3 所示,最后一步(i=n)时不进行右 移操作,即得到[x·y]补 表 3-3 Booth算法规则 yi+1yi (yi+1-yi) [x]补 对上次部分积的操作 00 0 上次部分积加 0,右移一位 01 -[x]补 上次部分积加[-x]补,右移一位 10 [x]补 上次部分积加[x]补,右移一位 11 0 上次部分积加 0,右移一位 图 3-3 补码一位乘 Booth 算法流程图 【例 3-4】已知 x 和 y 的真值,x=-0.1101 y=0.1011,利用补码的一位乘求 x·y。 解:[x]补=11.0011,[y]补=00.1011,[-x]补=00.1101 ∴[x·y]补=11.01110001,x·y 的真值为-0.10001111B 37 通过【例 3-4】补码一位乘法的运算过程分析,用硬件实现补码一位乘法时,只需三个 寄存器和一个 n 位加法器,实现补码一位乘法的硬件逻辑电路如图 3-4 所示。图中 A、B、 C 为三个寄存器,在运算开始时,寄存器 A 用于存放乘积和部分积的高位部分,初始内容 为 0;寄 存器 C 用于存放乘数和部分积的低位部分,初始内容为乘数;yn-1 和 yn 用于控制进 行+[x]补还是+[-x]补。寄存器 B 用于存放被乘数,可以在 yn-1 和 yn 控制下输出原码和反码, 当执行+[x]补时,输出原码;当执行+[-x]补时,输出反码。Cx 是乘法控制触发器,Cx=1,允许 产生移位脉冲,以控制进行乘法运算;否则,停止进行乘法运算。计数器 i 用于记录乘法次 数,在运算开始时,计数器 i 清 0,每进行一次运算,计数器 i 进行加 1,当计数到 n+1 时, 结束运算。另外,当 i=n 时,将计数器 i 清 0,使得在进行第 n+1 次运算时,不再进行移位。 图 3-4 实现补码一位乘的逻辑电路 4、补码的二位乘法 根据布斯递推公式,将两步合并为一步,即可导出补码的两位乘法公式。 设上次部分积为[Zi]补,本次的部分积则为: [Zi+1]补={[Zi]补+(yn-i-yn-i-1) [x]补}×2-1 下次的部分积为: [Zi+2]补={[Zi+1]补+(yn-i-1-yn-i-2) [x]补}×2-1 把[Zi+1]补带入[Zi+2]补中,可得: [Zi+2]补={{[Zi]补+(yn-i-yn-i-1) [x]补}×2-1+(yn-i-1-yn-i-2) [x]补}×2-1 ={[Zi]补+(yn-i-2yn-i-2+yn-i-1) [x]补}×2-2 (yn-i-2yn-i-2+yn-i-1)式中 yn-i、 yn-i-2、 yn-i-1 的初始值分别为附加位 yn=0、yn-1、yn-2。其值 及其对应的操作如表 3-4 所示。 表 3-4 (yn-i-2yn-i-2+yn-i-1)与[Pi+2]补的关系 yn-i、 yn-i-2、 yn-i-1 (yn-i-2yn-i-2+yn-i-1) [x]补 [Zi+2]补 0 0 0 0 {[Zi]补+0 }×2-2 0 0 1 +[x]补 {[Zi]补+[x]补}×2-2 0 1 0 -2[x]补 {[Zi]补+2[-x]补}×2-2 0 1 1 -[x]补 {[Zi]补+[-x]补}×2-2 1 0 0 +[x]补 {[Zi]补+[x]补}×2-2 1 0 1 +2[x]补 {[Zi]补+2[x]补}×2-2 1 1 0 -[x]补 {[Zi]补+[-x]补}×2-2 1 1 1 0 {[Zi]补+0 }×2-2 【例 3-5】 已知 x=-0.1101 y=-0.0101,利用补码的二位乘求 x·y。 38 解:[x]补=11.0011,[y]补=11.1011,[-x]补=00.1101 ∴[x·y]补=00.01000001,x·y 的真值为+0.01000001B 5、并行乘法运算 由于乘法运算大约占全部算术运算的 1/3 左右,因此采用高速乘法器件,无论从速度上 还是从效益上都是十分必要的。随着大规模集成电路的迅速发展,出现了各种形式的流水阵 列乘法器,它们属于并行乘法器。在此只简单介绍阵列乘法器的基本原理。 (1)无符号数阵列乘法器 设 A 为 m 位的无符号二进制整数(A=am-1…a1a0),B 为 n 位的无符号二进制整数 (B=bn-1…b1b0),A、B 的数值(真值)分别是 a、b,其乘积为 P(P = A·B),是一个 m+n 位无符号二进制整数,即 P= pm+n-1…p1p0,数 P 的真值为 p,则: a= ∑ − = 1 0 m i ai×2i b=∑ − = 1 0 n j bj×2j p=a·b=(∑ − = 1 0 m i ai×2i) ·(∑ − = 1 0 n j bj×2j)=∑ − = 1 0 m i ∑ − = 1 0 n j (aibj)×2i+j = ∑ −+ = 1 0 nm k pk×2k 位积 aibj{ aibj∣0≤i≤m-1 和 0≤j≤n-1}可以用 m×n 个逻辑与门并行产生,乘积 pk 可由相 同位权(2k)的位积相加,再加来自低位的进位产生。这样利用位积相加来实现乘法运算的 器件称为阵列乘法器,如图 3-5 所示。该阵列乘法器从根本上避免了一位乘和两位乘中所需 的大量重复的相加和移位操作,从而提高了乘法运算的速度。 图 3-5 m×n 位不带符号的阵列乘法器 (2)带符号数阵列乘法器 39 带符号数阵列乘法器是在无符号数阵列乘法器的基础上增加了符号处理和求补电路,所 以也称为符号求补的阵列乘法器。 1)求补器 按照扫描来进行的求补操作,对于 n 位带符号定点整数 A=an-1…a1a0,从 A 的最低位 a0 开始向高位进行扫描,直到找到第一个“1”(例如 ai=1,0≤i≤n-1),则该位置的 1 以及比 ai 低的所有位都保持不变,其余的位(比比 ai 高的所有位,不包括 ai 位)都求反,即实现了 对 A 的求补。第 i 扫描的输出为 Ci,则 Ci=ai+Ci-1,C-1=0。求补器的输出 ai*=ai⊕ECi-1,0≤i≤n-1, E 为控制信号,当 E=1 时,启动求补器进行求补;当 E=0 时,ai*=ai,显然,数的符号位可 以作为控制信号 E。如图 3-6 所示,给出了一个 4 位的对 2 求补器电路。 图 3-6 对 2 求补器电路 2)带求补器的阵列乘法器 设 A=anan-1…a1a0,B=bnbn-1…b1b0,A 和 B 为 n+1 位带符号定点整数。则 A 与 B 的乘积 为 P,P 为一个 2n 位带符号数。 P=A·B = P2n-1P2n-2…P1P0 P2n=an⊕bn 其中 P2n 为乘积的符号位。如图 3-7 所示,给出了带求补器的阵列乘法器。该带求补器 的阵列乘法器使用了三个求补器,两个算前求补器是对 A 和 B 求绝对值,然后,将两个数 的绝对值送入无符号数阵列乘法器中进行相乘,即得到 2n 位乘积的绝对值 P2n-1P2n-2…P1P0。 最后,再根据异或门输出的符号位 P2n,控制算后求补器对 P2n-1P2n-2…P1P0 求补,即得到 2n+1 位的乘积 P2nP2n-1P2n-2…P1P0。 图 3-7 (n+1)×(n+1)位带求补器的阵列乘法器 40 3.1.3 定点数除法运算 定点数除法可以分为恢复余数法和不恢复余数两种,我们在定点数原码除法中讨论恢复 余数的除法。由于后者采用得较多,在定点数补码除法中讨论不恢复余数的除法(加减交替 法)。 1、原码的恢复余数法 设被除数为 x,其原码为[x]原=x0.x1x2…xn-1,除数为 y,其原码为[y]原=y0.y1y2…yn-1,则 有: 商 q=x/y,其原码为[q]原=(x0⊕y0)+(0.x1x2…xn-1/0.y1y2…yn-1) 商的符号 q0=(x0⊕y0),商的数值部分是(0.x1x2…xn-1/0.y1y2…yn-1),实质上是两个正数求 商的运算,类似于十进制数的除法运算,其算法: (1)判断 x 0 q1=1 余数左移 0.1 1 0 1 减 y 1.0 0 1 余数为负 1.1 1 1 1 < 0 q2=0 余数左移 1.1 1 1 加 y 1.0 0 1 余数为正 0.1 1 0 > 0 q3=1 所以: 商 q=0.101 余数 r =0.000110 3.2 逻辑运算和移位操作 计算机除了能进行加、减、乘、除等基本算术运算以外,还可以对逻辑数进行逻辑运算。 逻辑数是指无符号的二进制数。逻辑运算主要指逻辑与、逻辑或、逻辑异或等。 3.2.1 逻辑运算 设参与逻辑运算的两个数 x 和 y: x=x0x1x2…x n-1 y=y0y1y2…y n-1 1、逻辑与(逻辑乘):记作“∧”或“· ” z=x∧y= z0z1z2…z n-1 则 zi=xi∧yi i∈{0,1,2,…,n-1} 2、逻辑或(逻辑加):记作“∨”或“ + ” z=x∨y= z0z1z2…z n-1 则 zi=xi∨yi i∈{0,1,2,…,n-1} 3、逻辑异或(逻辑异):记作“⊕” z=x⊕y= z0z1z2…z n-1 则 zi=xi⊕yi i∈{0,1,2,…,n-1} 44 【例 3-9】 已知 x=01101011B,y=11101001B, 分别求 x∧y、x∨y、x⊕y。 解: 3.2.2 移位操作 在定点数的运算中有左移和右移操作,在浮点数的运算中也用到移位操作,可见移位操 作的重要性。由于机器字长的限制,当机器数进行左移或右移时,必然会使机器数产生空位 和移出,移出的位到进位标志,而所产生的空位是填“0”、填“1”、还是填符号位或原来的 进位标志,因此,移位操作分为逻辑移位、算术移位和循环移位,如图 3-10 所示。 图 3-10 移位操作示意图 3.3 定点运算器 运算器是 CPU 的重要组成部分,是专门加工处理数据的部件,根据所能处理的数据不 同,运算器可以分为定点运算器和浮点运算器。运算器的核心是算术逻辑单元(ALU),除 此之外,还有各类寄存器(通用寄存器、 累加器、数据缓冲寄存器、标志寄存器等)、 数据多路选择器和数据总线等。 3.3.1 算术逻辑单元 1、一位算术逻辑单元 已知 Xi 和 Yi 是一位二进制数,其算 术运算的和为 Fi,则 Fi=Xi+Yi。表面上看, Fi 只能是算术运算的结果。如果 Xi 或 Yi 是 Ai、Bi 的逻辑函数,例如 X=Ai·Bi 或 Ai+Bi,当 Yi =0 时,则 Fi=Xi+Yi=Xi= Ai·Bi 或 Ai+Bi。Fi 便是 Ai、Bi 逻辑运算的结果。 因此,一位算术逻辑单元是在一位加法器 的基础上再加一个逻辑函数发生器构成, 如图 3-11 所示。 图 3-11 一位算术逻辑单元 因此,一位算术逻辑单元的逻辑表达式为: 01101011 ∧11101001 01101001 01101011 ∨11101001 11101011 01101011 ⊕11101001 10000010 45 Fi=Xi⊕Yi⊕Cn+i Cn+i+1=XiYi+YiCn+i+Cn+iXi S0、S1、S2、S3 是用来控制逻辑函数发生器的输入 Ai 和 Bi,逻辑函数发生器的输出 Xi 和 Yi 分别是受 S2S3 控制的 Ai 和 Bi 的组合函数和受 S0S1 控制的 Ai 和 Bi 的组合函数,其函数 关系如表 3-5 所示。 表 3-5 Xi、Yi 与控制信号(S0、S1、S2、S3)和数据输入(Ai、Bi)的关系 S0 S1 Yi S2 S3 Xi 0 0 iA 0 0 1 0 1 iA Bi 0 1 iA + iB 1 0 iA iB 1 0 iA +Bi 1 1 0 1 1 Ai 由表 3-5,可写出 Xi 和 Yi 的逻辑表达式 Xi=S2S3Ai+S2 3S ( iA +Bi)+ 2S S3 ( iA + iB )+ 2S 3S = iBASBAS i2ii3 + Yi= 0S 1S iA + 0S S1 iA Bi +S0 1S iA iB = iiBS BSA 10i ++ 结合一位全加器 FA 输出与输入之间的逻辑表达式,可得一位算术逻辑单元的一组逻辑 表达式: Xi= iBASBAS i2ii3 + Yi= iiBS BSA 10i ++ (3-13) Fi=Yi⊕Xi⊕Cn+i Cn+i+1=Yi+XiCn+i 2、四位算术逻辑单元 四位算术逻辑单元是由 4 个一位算术逻辑单元组成,其内部的一位算术逻辑单元之间的 进位关系可以是串行进位,也可以是并行进位。图 3-12 给出了串行进位的四位算术逻辑单 元。 图 3-12 四位 ALU 先行进位的四位算术逻辑单元(74181ALU)除产生 4 位的数据输出(F0F1F2F3)和 1 46 位进位输出 Cn+4 外,又多产生 2 个输出,一个是 G,进位发生输出;另一个是 P,进位传递 输出。根据式(3-13),74181ALU 内部采用先行进位的进位关系如下: 第 0 位向第 1 位的进位公式为:Cn+1=Y0+X0Cn Cn 是向第 0 位的进位 第 1 位向第 2 位的进位公式为:Cn+2=Y1+X1Cn+1= Y1+Y0X1+X1X0Cn 第 2 位向第 3 位的进位公式为:Cn+3=Y2+X2Cn+2= Y2+Y1X2+Y0X2X1+X2X1X0Cn 第 3 位的进位输出公式为:Cn+4=Y3+X3Cn+3= Y3+Y2X3+Y1X3X2+Y0X3X2X1+X3X2X1X0Cn 令 G= Y3+Y2X3+Y1X3X2+Y0X3X2X1 P= X3X2X1X0 则 Cn+4=G+P Cn (3-14) 综上所述,用 TTL 电路实现的四位算术逻辑单元(74181ALU)的逻辑电路如图 3-13 所示。M 为逻辑运算与算术运算的控制信号。当 M=1 时,封锁了各位的进位输出,进行的 是逻辑运算;当 M=0 时,所进行的是算术运算。74181ALU 有两种工作方式:一种是采用 正逻辑工作方式,另一种是采用负逻辑工作方式。无论哪一种工作方式都是等效的,都有 16 种逻辑运算和 16 种算术运算。表 3-6 列出了 74181ALU 正逻辑方式各种运算功能。 74181ALU 正、负逻辑的引脚图如图 3-14 所示。 图 3-13 74181ALU 逻辑电路 图 3-14 74181ALU 正、负逻辑的引脚图 47 表 3-6 正逻辑 74181ALU 算术/逻辑运算功能表 S3 S2 S1 S0 逻辑运算(M=1) 算术运算(M=0,Cn=1) 0 0 0 0 A A 0 0 0 1 BA + A+B 0 0 1 0 A B A+ B 0 0 1 1 逻辑 0 减 1 0 1 0 0 AB A+AB 0 1 0 1 B (A+B) 加 AB 0 1 1 0 A⊕B A 减 B 减 1 0 1 1 1 AB A B 减 1 1 0 0 0 A +B A 加 AB 1 0 0 1 BA ⊕ A 加 B 1 0 1 0 B (A+ B )加 AB 1 0 1 1 AB AB 减 1 1 1 0 0 逻辑 1 A 加 2A 1 1 0 1 A+ B (A+B)加 A 1 1 1 0 A+B (A+ B )加 A 1 1 1 1 A A 减 1 3、两级先行进位的 ALU 74181ALU 为了方便多个 74181ALU 的连接,特设置了 P 和 G 两个先行进位输出端。 如果将 4 个 74181ALU 的先行进位输出端(P0、G0,P1、G1,P2、G2,P3、G3)送到先行进 位部件 74182CLA,又可实现第二级的先行进位,即组与组之间的先行进位。 按照式(3-14)可得先行进位部件 74182CLA 的进位逻辑关系: Cn+x=G0+P0Cn Cn+y=G1+P1Cn+x= G1+G0P1+P1P0Cn Cn+z=G2+P2Cn+y= G2+G1P2+G0P2P1+P2P1P0Cn Cn+4=G3+P3Cn+z= G3+G2P3+G1P3P2+G0P3P2P1+P3P2P1P0Cn 令 G*= G3+G2P3+G1P3P2+G0P3P2P1 P*= P3P2P1P0 则 Cn+4=G*+P*Cn 图 3-15 74182CLA 的逻辑电路 48 用 TTL 电路实现的先行进位部件 74182CLA 的逻辑电路如图 3-15 所示。其中,G*称为 成组进位发生输出,P*称为成组进位传递输出。 由此可见,一个先行进位部件 74182CLA 可以连接 4 个 74181ALU,实现一个 16 位的 组间、组内都是先行进位的 ALU,如图 3-16 所示。 图 3-16 16 位全先行进位的 ALU 显然,用两个 16 位全先行进位的 ALU 进行级联,便可以组成了一个 32 位的 ALU。两 个 16 位全先行进位 ALU 之间的进位采用的是串行进位。如图 3-17 所示。 图 3-17 32 位 ALU 3.3.2 定点运算器的基本结构 1、单总线结构运算器 单总线结构运算器的特点是所有部件都连在一组总线上,在同一时间内,只能允许有一 个数据放在总线上,参与运算的两个数据无法同时送到 ALU,因此,在 ALU 的两个输入端 分别设置了 A、B 两个缓冲器。运算结束时,再通过单总线将结果存于目的寄存器。单总线 结构运算器的主要缺点是操作速度慢。单总线结构运算器如图 3-18 所示。 图 3-18 单总线结构运算器 49 2、双总线结构运算器 双总线结构运算器的特点是操作部件连接在两组总线上,可以通过这两组总线同时传输 数据,从而保证了在同一时间内将参与运算的两个数据送到 ALU 并进行运算,但运算结果 不能直接到总线,因为,此时的两组总线都被参与运算的两个数据占用着,所以,在 ALU 的输出端设置一个数据缓冲寄存器,运算结果通过缓冲寄存器再送到总线。显然,双总线结 构运算器的执行速度比单总线结构运算器的执行速度快。双总线结构运算器如图 3-19 所示。 图 3-19 双总线结构运算器 3、三总线结构运算器 三总线结构运算器的特点是操作部件连接在三组总线上,可以通过这三组总线同时传输 数据,不仅保证了在同一时间内将参与运算的两个数据送到 ALU 并进行运算,还可以将运 算结果直接送到总线上。与前两种结构的运算器相比较,三总线结构运算器的执行速度最快, 不过其控制也更复杂,在三总线结构运算器中,还设置一个总线旁路器,其目的是:当一组 总线上的数据不需操作时,可以通过总线旁路器将此数据直接送到其它总线上,而不必经过 ALU。三总线结构运算器如图 3-20 所示。 图 3-20 三总线结构运算器 3.3.3 定点运算器模型 运算器是由算术逻辑单元(ALU)、寄存器(通用寄存器、累加器、数据缓冲寄存器、 标志寄存器等)、数据多路选择器和数据总线等组成。如图 3-21 所示,给出了单累加器运算 器模型。该模型的核心是 ALU,实现对数据的算术运算和逻辑运算。AC 是累加器,实际上 它也是寄存器,只不过使用得较频繁而已,不仅来存放参与运算的数据,还用来存放 ALU 所运算的结果。在此模型中所有运算结果只能存放于 AC 中。STR 为状态寄存器,其内设置 有多个状态标志,例如零标志、进位标志、溢出标志、符号标志等,数据在 ALU 中运算的 过程中会对 STR 中的标志产生影响。DR 为数据缓冲积存器,运算器与存储器之间的数据交 换必需通过 DR,设置 DR 主要是解决速度匹配问题。 50 图 3-21 定点运算器模型 3.4 浮点数的算术运算与浮点运算器 3.4.1 浮点数的加减运算 设两个浮点数 x 和 y,它们分别为 x=Mx×2ex x表示为 Ex Mx x=My×2ey y表示为 Ey My 其中,Ex、Ey 分别是浮点数 x 和 y 的阶码机器数形式,通常采用移码;Mx、My 为 x 和 y 的尾数机器数形式,通常采用补码。令 z=x±y,则 z=x±y=(Mx×2ex-ey± My)×2ey ex ≤ ey 浮点数加减运算步骤如下: (1)0 浮点数检查 如果加减运算中的两个浮点数 x 和 y 有一个为 0,则浮点数的加减运算就没有必要严格 按照上述步骤进行,从而节约了运算时间,因此,0 浮点数检查是十分必要的。 (2)对阶 阶码表示的是小数点的位置,对阶实际上是使小数点对齐。当两个浮点数的阶码不相同 时,将阶码小的浮点数的尾数右移△E(△E=∣ex-ey∣位,其阶码值增加△E,使两个浮点 数的阶码值相同,此操作称位对阶。因为浮点数的尾数右移时丢失的是低位数值位,这样造 成的浮点数误差较小。 (3)尾数加减 对阶完成后,即可进行尾数的加减。不论是加法还是减法,都必须按加法进行运算。 (4)结果规格化 尾数的加减运算结果未必满足浮点数的规格化条件,有必要进行左规或右规。下面以变 补形式的尾数为例来讨论左规、右规和舍入处理。 当尾数加减运算结果的双符号位不同时,并不表示运算结果的溢出,因为影响浮点数大 小的主要因素是阶码而不是尾数,仅表示尾数加减运算结果的绝对值大于 1,向左破坏了规 格化,因此,需要将尾数加减运算结果右移并相应地提高阶码来实现规格化,这种实现规格 化的方法称为右规;当尾数加减运算结果的双符号位相同,且符号位与最高数值位相同时, 尾数的加减运算结果不符合浮点数的规格化条件,因此,需要将尾数加减运算结果左移并相 应地降低阶码来实现规格化,这种实现规格化的方法称为左规;当尾数加减运算结果的双符 51 号位相同,且符号位与最高数值位不相同时,尾数的加减运算结果符合浮点数的规格化条件, 因此,不需要左规或右规。 (5)舍入处理 在对阶和右规时,需要将浮点数的尾数和尾数加减运算结果进行右移,被右移的低位部 分会因此而丢失,从而造成一定的误差,因此,需要进行舍入处理。最简单的舍入处理方法 有: 1)“0 舍 1 入”法:如果右移时被丢掉的数值位的最高位为 0,则舍去;否则,在数值 的最低位加 1。 2)“恒 1”法:只要有数值位被丢掉,则在数值的最低位置“1”。 (6)溢出判断 浮点数加减运算结果的溢出判断取决于阶码的溢出。如果阶码没有溢出,浮点数加减运 算结果不会溢出;如果阶码溢出,则需要进行相应地处理。 阶码上溢:是指阶码超出了其所能表示的最大正数,一般认为结果是±∞。 阶码下溢:是指阶码超出了其所能表示的最小负数,一般认为结果是 0。 【例 3-10】 已知 x=2010×(-0.110100) y=2100×(0.101011),求 x+y。 解:(1)对阶(阶码和尾数均采用补码表示) [x]浮=00.010;11.001100 [y]浮=00.100;00.101011 浮点数 x 的阶码小,将 x 的尾数右移 2 位,x 的阶码增 2。即 [x]浮=00.100;11.110011 (2)尾数求和 11.110011 + 00.101011 100.011110 (3)规格化 ∵尾数求和的结果为 00.011110,符号位与数值最高位相同。 ∴需进行左规,即尾数向左移 1 位,阶码减 1,可得:00.011;00.111100 (4)舍入处理 采用“0 舍 1 入”法,由于左规时移出一位 0,所以,舍去 0。 (5)溢出判别 由于运算结果的阶码未发生溢出,所以运算结果未溢出。 x+y=2011×(+0.111100) 3.4.2 浮点数的乘法和除法运算 1、浮点数的乘法和除法运算规则 设两个浮点数 x 和 y,它们分别为 x=Mx×2ex x表示为 Ex Mx y=My×2ey y表示为 Ey My 其中,Ex、Ey 分别是浮点数 x 和 y 的阶码机器数形式,通常采用移码,Mx、My 为 x 和 y 的尾数机器数形式,通常采用补码。则浮点数的乘法和除法运算规则: 浮点数的乘法运算规则:x×y=(Mx+My) ·2(ex+ey) 浮点数的除法运算规则:x÷y=(Mx÷My) ·2(ex-ey) 2、浮点数的乘法和除法运算步骤 浮点数的乘法和除法运算大体分为六步:第一步,0 浮点数检查;第二步,阶码的加/ 52 减运算;第三步,尾数乘/除运算;第四步,结果规格化;第五步,舍入处理;第六步,溢 出判断。由于浮点数加减结果规格化、舍入处理也适用于浮点数的乘法和除法运算,尾数乘 /除运算与定点数的乘/除类似,所以在此只讨论阶码的加/减运算及溢出判断和舍入处理。 (1)阶码运算 对阶码的运算有+1、-1、求和、求差四种,运算的同时还需要检查阶码是否溢出。由于 阶码通常采用补码、移码形式,而补码的运算和溢出判别在前面已讲过,所以在此只讨论阶 码的加/减运算及溢出判断。 1)移码运算 根据移码定义,对于 n+1 位的移码(1 位符号和 n 位数值),则:[x]移=2n+x,-2n≤x<2n, [x]移+[y]移=2n+x+2n+y =2n+(2n+(x +y)) =2n+[x+y]移 即直接用移码求阶码之和时,结果的最高位多了一位 1,要得到正确的移码形式结果, 必须对结果的符号位取反。 当混合使用移码和补码时,由于[y]补=2n+1+y (mod 2n+1),则: [x]移+[y]补=2n+x+2n+1+y =2n+1+(2n+(x+y)) =2n+1+[x+y]移 即 [x+y]移=[x]移+[y]补 (mod 2n+1) 同理 [x-y]移=[x]移+[-y]补 (mod 2n+1) 2)溢出判断 如果阶码运算的结果溢出,则上述各式均不成立。为了便于判断阶码运算的结果溢出, 使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用 0 参与运算, 则溢出条件是结果的最高符号位为 1。此时,若两符号位为 10,表示结果上溢;若两符号位 为 11,表示结果下溢;若两符号位为 00,表示结果为负;若两符号位为 01,表示结果为正。 【例 3-11】 已知 x=+011 y=+110,求[x+y]移和[x-y]移,并判断是否溢出。 解:[x]移=01011,[y]补=00110,[-y]补=11010, [x+y]移=[x]移+[y]补=01011+00110=10001,双符号为 10,结果上溢。 [x-y]移=[x]移+[-y]补=01011+11010=00101,双符号为 00,结果正确。 (2)舍入处理 舍入处理的目的是尽量减少误差,其方法有截断处理和修正处理。截断处理也称为恒舍 法,是无条件地丢掉正常尾数最低位之后的全部数值。修正处理是保留右移过程中移出的若 干高位的值,然后再按某种规则,用所保留的高位值来修正尾数。其舍入规则有: 1)只要尾数的最低位为 1 或移出丢掉的几位中有 1,把尾数的最低位置 1,否则保持原 来的 0 2)最低位恒置 1 3)0 舍 1 入 当失去的最高位的值为 1 时,把该 1 加到最低数值位上进行修正,否则, 舍去丢掉的各位的值。 【例 3-12】 已知[x]补=11.01100000,[x2]补=11.01100001,[x3]补=11.01111001, 求执行只保留 小数点后 4 位有效数字的舍入操作值。 解:执行舍入处理后,其结果分别为[x]补=11.0110(不舍不入) [x2]补=11.0110(舍) [x3]补=11.1000(入) 53 【例 3-13】 已知 x=2-5×0.0110011 y=23×( -0.1110010),阶 码 用 4 位移码表示,尾数(含 数符)用 8 位补码表示,求 x×y。要求用补码完成尾数乘法运算,运算结果的尾数保留高 8 位,并用尾数低位字长的值处理舍入操作。 解:阶码采用双符号移码,尾数采用双符号补码,则 [Mx]补=00.0110011,[My]补=11.0001110 [Ex]移=00011,[Ey]移=01.011,[Ey]补=00011 [x]浮=00011,00.0110011,[y]移=01.011,11.0001110 (1)求阶码和 [Ex+Ey]移=[ Ex]移+[Ey]补=00011+00011=00110,其真值为-2。 (2)尾数乘法运算可采用补码一位乘实现,即 [Mx]补×[My]补=00.0110011×11.0001110=11.10100101001010 (3)规格化处理 乘积的尾数符号位与最高数值位相同,不符合规格化要求,需进行左规,即尾数左移一 位,阶码减 1,此时,阶码为:00101(-3),尾数为:11.01001010010100。 (4)舍入处理 尾数为负数,取尾数高位字长,按舍入规则,舍去低位字长,故尾数为:1.0100101。 [x×y]浮=00101,11.0100101 x×y 的真值为:23×(-0.1011011) 3.4.3 浮点运算器 由于浮点数的运算是对阶码和尾数分别进行的运算,阶码是定点整数,尾数是定点小数, 所以,浮点运算器实质上是两个定点运算器构成的,其工作原理结构图如图 3-22 所示。 图 3-22 浮点运算器 阶码运算部件用来对阶码进行加减运算,由寄存器(E1、E2)、计数器 EC、并行加法器 Fe 组成。其中 E1、E2 用于存放与 R0、R1 中尾数相对应的阶码。 1、尾数运算部件 尾数运算部件用来对尾数进行加、减、乘、除运算,由寄存器(R0、R1、MQ)、并行加 法器 Fm 组成。其中 R0、R1 用于存放操作数,R0 还用来存放运算结果;MQ 是乘商寄存器, 用来进行乘除运算;R0、MQ 具有联合左移、右移功能;R1 具有右移功能,用于实现对阶的 移位。 2、工作原理 (1)浮点数的加减运算 阶码运算部件 尾数运算部件 E1 EC Fe E2 R0 MQ Fm R1 ±1 +1 +1 54 1)阶码运算部件求出阶差△E=E1-E2,并存放于 EC 中,EC 根据符号判断出哪个浮点 数的阶码小,控制将其相应的尾数(R0 或 R1)进行右移。若△E 为正,则 E2 小,控制 R1 进行右移,且每右移一位,EC-1;若△E 为负,则 E1 小,控制 R0 进行右移,且每右移一位, EC-1。一直控制移位到 EC=0,完成浮点数的对阶操作; 2)尾数运算部件完成对尾数的加减,并将结果存于 R0 中; 3)判别运算结果,进行规格化。在规格化处理过程中,每将 R0 左移(或右移)一位, 应将 E1、E2 中的较大者减 1(加 1)。规格化处理结束后,将其作为结果的阶码。 (2)浮点数的乘除运算 在进行浮点数的乘除运算时,阶码运算部件和尾数运算部件独立工作,阶码运算部件只 做阶码的加减运算,尾数运算部件完成尾数的乘除运算,运算结束后对结果进行规格化处理。 关 联 运算器 定点运算器 浮点运算器 定点数算术 运算与实现 逻辑运算与移位 算术逻辑单元 ALU 浮点数算术运算 浮点运算器组成 定点数加减运算 定点数乘运算 定点数除运算 溢出判别法 浮点数加减运算 浮点数乘除运算 原码一位/二位乘法 补码一位/二位乘法 阵列乘法器 加减交替除法 恢复余数除法 单符号判别法 双符号判别法 进位判别法 55 习 题 3.1 已知[x]补、[y]补、计算[x+y]补和[x-y]补。 (1)[x]补=0.11011,[y]补=0.00011 (2)[x]补=0.10111,[y]补=1.00101(3)[x]补=1.01010, [y]补=1.10001 3.2 已知[x]补、[y]补、计算[x+y]变补和[x-y]变补。 (1)[x]补=100111,[y]补=111100 (2)[x]补=011011,[y]补=110100(3)[x]补=101111,[y]补=011000 3.3 设某机字长为 8 位,给定十进制数:x=+49,y=-74,试按补码运算规则计算下列各题。 (1)[x]补+[y]补 (2)[x]补-[y]补 (3)[-x]补+[ 2 1 y]补 (4)[2x- 2 1 y]补 (5)[ 2 1 x+ 2 1 y]补 (6)[-x]补+[2y]补 3.4 分别用原码一位乘法和补码一位乘法计算[x×y]原和[x×y]补。 (1)x=0.11001,y=0.10001 (2)x=0.01101,y=-0.10100 (3)x=-0.10111,y=0.11011 (4)x=-0.01011,y=-0.11010 3.5 用补码两位乘法计算[x×y]原和[x×y]补。 (1)x=0.11001,y=0.10001 (2)x=0.10101,y=-0.01101 (3)x=-0.01111,y=0.11101 (4)x=-0.01001,y=-0.10010 3.6 分别用原码不恢复余数法和补码不恢复余数法计算[x/y]原和[x/y]补。 (1)x=0.01011,y=0.10110 (2)x=0.10011,y=-0.11101 (3)x=-0.10111,y=-0.11011 (4)x=+10110,y=-00110 3.7 在进行浮点加减运算时,为什么要进行对阶?说明对阶的方法和理由。 3.8 已知某模型机的浮点数据表示格式如下: 15 14 13 8 7 0 数符 阶符 阶 码 尾 数 其中,浮点数尾数和阶码的基值均为 2,均采用补码表示。 (1)求该机所能表示的规格化最小正数和非规格化最小负数及其所对应的十进制真值。 (2)已知两个浮点数的机器数表示为 EF80H 和 FFFFH,求它们所对应的十进制真值。 (3)已知浮点数的机器数表示为: [x]补=1111100100100101,[y]补=1111011100110100 试按浮点加减运算,计算[x±y]补。 3.9 已知某机浮点数表示格式如下: 11 10 9 7 6 0 数符 阶符 阶 码 尾 数 其中,浮点数尾数和阶码的基值均为 2,阶码用移码表示,尾数用补码表示。设: x=0.110101×2-001 y=-0.100101×2+001 用浮点运算规则,计算 x+y、x-y、x×y、x/y (要求写出详细运算步骤,并进行规格化)。 3.10 下图给出了实现补码乘法的部分硬件框图。 (1)请将图中逻辑门 AND1 和 AND2 的输入信号填写正确。 56 题图 3.10 补码乘法部分框图 (2)按补码乘法规则,将下列乘法运算算式完成,写出 x×y 的真值。 00.00000 →00.00000 00.11001 1001100 0100110 00.11001 →00.01100 →00.00110 1010011 0101001 (3)根据(2)中的乘法算式,将乘法运算初始和结束时,三个寄存器中的数据填入下列表 格中。 寄存器 A B C 运算初始 运算结束 3.11 说明定点补码和浮点补码加减运算的溢出判断方法。 3.12 设有一个 16 位定点补码运算器,数据最低位的序号为 1。运算器可实现下述功能: (1)A±B→A (2)B×C→A、C(乘积高位在 A 中) (3)A÷B→C(商在 C 中) 请设计并画出运算器第 4 位及 A、C 寄存器第 4 位输入逻辑。加法器本身逻辑可以不画。 3.13 设一个 8 位寄存器的内容为十六进制数 0C5H,连续经过一次算术右移、一次逻辑左移、 一次大循环右移、一次小循环左移。写出每次移位后寄存器的内容和进位标志 C 的状态。 3.14 选择题 (1)运算器的核心部分是( )。 A、数据总线 B、累加寄存器 C、算术逻辑运算单元 D、多路开关 (2)在浮点运算中下面的论述正确的是( )。 A、对阶时应采用向左规格化 B、对阶时可以使小阶向大阶对齐,也可以使大阶向小阶对齐 C、尾数相加后可能会出现溢出,但可采用向右规格化的方法得出正确结论 D、尾数相加后不可能得出规格化的数 (3)当采用双符号位进行数据运算时,若运算结果的双符号位为 01,则表明运算( )。 A、无溢出 B、正溢出 C、负溢出 D、不能判别是否溢出 (4)补码加法运算的规则是( )。 57 A、操作数用补码表示,符号位单独处理 B、操作数用补码表示,连同符号位一起相加 C、操作数用补码表示,将加数变补,然后相加 D、操作数用补码表示,将被加数变补,然后相加 (5)原码乘除法运算要求( )。 A、操作数必须都是正数 B、操作数必须具有相同的符号位 C、对操作数符号没有限制 D、以上都不对 (6)进行补码一位乘法时,被乘数和乘数均用补码表示,运算时( )。 A、首先在乘数 yn 后增设附加位 yn+1,且初始 yn+1=0,依照 ynyn+1 的值确定下面的运算 B、首先在乘数 yn 后增设附加位 yn+1,且初始 yn+1=1,依照 ynyn+1 的值确定下面的运算 C、根据乘数符号位,决定乘数 yn 后附加位 yn+1 的值,依照 ynyn+1 的值确定下面的运算 D、不在乘数 yn 后增设附加位 yn+1,而直接根据乘数的末两位 yn-1yn 确定下面的运算 (7)下面对浮点运算器的描述中正确的是( )。 A、浮点运算器由阶码部件和尾数部件实现 B、阶码部件可实现加、减、乘、除四种运算 C、阶码部件只能进行阶码的移位操作 D、尾数部件只能进行乘法和加法运算 (8)若浮点数的阶码和尾数都用补码表示,则判断运算结果是否为规格化数的方法是( )。 A、阶符与数符相同为规格化数 B、阶符与数符相异为规格化数 C、数符与尾数小数点后第一位数字相异为规格化数 D、数符与尾数小数点后第一位数字相同为规格化数 (9)已知[x]补=1.01010,[y]补=1.10001,下列答案正确的是( )。 A.、[x]补+[y]补=1.11011 B、[x]补+[y]补=0.11011 C、[x]补-[y]补=0.11011 D、[x]补-[y]补=1.11001 (10)下列叙述中概念正确的是( )。 A、定点补码运算时,其符号位不参加运算 B、浮点运算中,尾数部分只进行乘法和除法运算 C、浮点数的正负由阶码的正负符号决定 D、在定点小数一位除法中,为了避免溢出,被除数的绝对值一定小于除数的绝对值 3.15 填空题 (1)在补码加减运算中,符号位与数据▁▁▁▁参加运算,符号位产生的进位▁▁▁▁。 (2)在采用变形补码进行加减运算时,若运算结果中两个符号位▁▁▁▁,表示发生了溢 出。若结果的两个符号位为▁▁▁▁,表示发生正溢出;为▁▁▁▁,表示发生负溢出。 (3)浮点乘除法运算的运算步骤包括:▁▁▁▁、▁▁▁▁、▁▁▁▁、▁▁▁▁和▁▁▁▁。 (4)在浮点运算过程中,如果运算结果的尾数部分不是▁▁▁▁形式,则需要进行规格化 处理。设尾数采用补码表示形式,当运算结果▁▁▁▁时,需要进行右规操作;当运算结果 ▁▁▁▁时,需要进行左规操作。 (5)浮点运算器由▁▁▁▁和▁▁▁▁两部分组成,它们本身都是定点运算器。 3.16 是非题 (1)运算器的主要功能是进行加法运算。( ) (2)加法器是构成运算器的主要部件,为了提高运算速度,运算器中通常都采用并行加法 器。( ) (3)在定点整数除法中,为了避免运算结果的溢出,要求︱被除数︱<︱除数︱。( ) 58 (4)浮点运算器中的阶码部件可实现加、减、乘、除运算。( ) (5)根据数据的传递过程和运算控制过程来看,阵列乘法器实现的是全并行运算。( ) (6)逻辑右移执行的操作是进位标志位移入符号位,其余数据位依次右移 1 位,最低位移 入进位标志位。( ) 59 第 4 章 存储器系统 【内容摘要】 存储器是计算机的重要组成部分之一,是用来存放程序和数据的。为了解决存储器的容 量大、速度快、价格低三方面的矛盾,计算机往往采用多级存储体系结构(即 Cache、主 存、 辅存结构),从而使各种存储器构成一个有机整体,称之为存储器系统。其中主存是一种半 导体存储器,包括只读存储器、随机存储器、闪速存储器和并行存储器等,它是本章的一个 重点;Cache 是一种高速缓冲存储器,是为了解决 CPU 与主存之间的速度匹配问题而采用 的一种硬件技术,并发展为多级 Cache 体系,分为指令 Cache 和数据 Cache;辅存是一种虚 拟存储器,可以分为段式、页式、段页式虚拟存储器。 【学习要点】 ● 存储器的分类和技术指标 ● 半导体存储器工作原理与扩展方法 ● 闪速存储器、双端存储器和多体交叉存储器 ● Cache 地址映射方法 ● 虚拟存储器基本概念及其地址变换过程 4.1 存储器概述 4.1.1 存储器分类 存储器随着计算机的发展进步较快,种类繁多,其分类方法也有多种。 1、按存储器在系统中的作用进行分类 (1)主存储器 主存储器是用来存放当前运行的程序和数据的,可以被 CPU 直接访问的半导体存储器。 它位于主机内部,又称内存储器,简称内存或主存。 (2)辅助存储器 辅助存储器是为解决主存容量不足而设置的存储器,是用来存放 CPU 暂不执行的程序和 数据,它可以是硬盘、U 盘、光盘等,其特点是存储容量大。辅助存储器又称外存储器,简 称外存或辅存。辅存是不能被 CPU 直接访问的,当需要运行存放在辅存中的程序时,必须 将辅存中的程序调入内存,然后再由 CPU 去执行。近年来,大容量半导体存储器如 FLASH 存储器的价格迅速下降,用闪存制成的“优盘”成为了一种很受欢迎的外存。 (3)高速缓冲存储器 高速缓冲存储器是介于 CPU 与主存之间,用来解决 CPU 与主存之间的速度匹配问题而 设置的高速小容量的存储器,简称 Cache。它可以做在 CPU 内部,称内部 Cache,也可以位 于 CPU 之外,称为外部 Cache。 2、按存取方式进行分类 (1)随机存储器 随机存储器简称为 RAM(Random Access Memory),是指存储单元既能被 CPU 读, 又能被 CPU 写,CPU 对存储单元的读、写都是随机的,且读、写时间与存储单元的物理位 置无关。一般主存主要是由 RAM 组成。 (2)只读存储器 只读存储器简称为 ROM(Read Only Memory),是指存储单元只能被 CPU 随机地进 行读,而不能进行写。只读存储器可以作为主存的一部分,用来存放不变的程序和数据,例 如计算机的加电诊断程序、系统引导程序等。 (3)顺序存储器 60 顺序存储器简称 SAM(Sequential Access Memory),是指存储器的内部信息排列有 序的,CPU 对存储器的读或写是按顺序进行的,并且 CPU 对存储器的读或写时间与信息在 存储器中的物理位置有关。 2、按存储介质进行分类 (1)半导体存储器 半导体存储器是一种利用半导体器件来进行存储二进制信息的存储器。计算机的内存一 般是由半导体存储器组成,根据半导体存储器的制造工艺不同,可以将半导体存储器分为双 极型和 MOS 型。 (2)磁表面存储器 磁表面存储器是利用涂在基体表面上的一层磁性材料来存储二进制信息的存储器,例如 磁盘等。 (3)光存储器 光存储器是采用光学原理制成的存储器,它是通过能量高度集中的激光束照在基体表面 而引起的物理或化学的变化来记忆二进制信息。 4.1.2 存储器系统结构 不管计算机的主存容量有多大,总是无法满足人们的期望。为了解决存储器的容量大、 速度快、价格低三方面的矛盾,计 算机往往采用多级存储体系结构, 如图 4-1 所示。最上层(即第一层) 是 CPU 的内部寄存器,数量是有 限的,其访问时间是几个 ns;第 二 层是 Cache,存储容量在 32KB~几 十 MB,其访问时间是十几个 ns; 第三层是主存,存储容量几十 MB~ 几个 GB,其访问时间是几十个 ns; 第四层是辅存,存储容量在几个 GB ~几十 GB,其访问时间是 10ms 以上,如果是光盘,其驱动时间加 图 4-1 多级存储体系结构 加上访问时间就需要用秒来衡量了。 4.1.3 主存储器的技术指标 主存储器一般是半导体存储器,主存储器的技术指标也是指半导体存储器的技术指标。 半导体存储器的组成结构如图 4-2 所示。存储体是存储二进制信息的主体,是由很多存储单 元组成,为了区别不同的存储单元,就需要对存储体中每一个存储单元进行统一编号,这个 编号我们称之为存储单元的地址。于是,存储单元与其地址之间建立了一一对应的关系,一 旦给出一个单元的地址就能唯一确定一个存储单元。存储单元所存储的二进制信息称之为存 储单元的内容,由此可见,存储单元的地址与存储单元的内容是两个不同的概念,但两者又 存在一定的关系,即存储单元的内容可以用存储单元的地址来表示。这种通过存储单元的地 址来访问存储单元的方法称为编址方法,可以分为按字节编址和按字编址。按字节编址是指 与存储单元的地址相对应的存储单元内容是一个字节,即最小寻址单位是一个字节,目前大 多数计算机采用的是按字节编址。按字编址是指与存储单元地址相对应的存储单元内容是一 个字。 1、存储容量 存储容量是存储器主要性能指标,存储容量越大,所能存储的信息量就越多。存储容量 的大小常用 B、KB、MB、GB 和 TB 为单位表示。其中,1KB=210B=1024B;1MB=1024KB 61 =220B;1GB=l024MB=230B;1TB=1024GB=240B。 2、存取时间 存取时间是指从启动一次存储器操作到完成该操作所经历的时间。例如,读出时间是指 从 CPU 向存储器发出有效地址和读命令开始,直到将被选单元的内容读出为止所用的时间。 显然,存取时间越小,存取速度越快。 3、存储周期 连续启动两次独立的存储器操作(如连续两次读操作)所需要的最短间隔时间称为存储 周期。它是衡量主存储器工作速度的重要指标。一般情况下,存储周期略大于存取时间。 4、存储器带宽 存储器带宽是指在单位时间内从存储器中所存取的信息量,是衡量数据传输速率的重要 技术指标,通常以位/秒或字节/秒做度量单位。 5、可靠性 可靠性一般指存储器对外界电磁场及温度等变化的抗干扰能力。存储器的可靠性用平均 故障间隔时间 MTBF(Mean Time Between Failures)来衡量。MTBF 可以理解为两次故障之间 的平均时间间隔,MTBF 越长,可靠性越高,存储器正常工作能力越强。 6、性能/价格比 性能/价格比(简称性价比)是衡量存储器经济性能好坏的综合指标,它关系到存储器的 实用价值。性能包括前述的各项指标,其中存取时间、存储周期、存储器带宽都反映了主存 速度的指标,而价格是指存储单元本身和外围电路的总价格。 图 4-2 存储器组成结构 4.2 半导体存储器 4.2.1 半导体存储器分类 半导体存储器是目前被广泛应用于主存的一种存储器,按其读写性能可分为:随机读写 存储器(RAM)和只读存储器(ROM)两大类,如图 4-3 所示。 1、RAM RAM 是可读、可写的存储器,又称为读写存储器,其特点是:系统断电后会自动丢失 其中存储的信息。根据制造工艺,RAM 可分为双极型和 MOS 型两种,其中 MOS 型 RAM 62 按信息存放方式不同,可分为静态 RAM(Static RAM,简称 SRAM)和动态 RAM(Dynamic RAM,简称 DRAM)。 2、ROM 只读存储器 ROM 是非易失性存储器,其 特点是:系统断电后其中所存储的信息不会丢 失。只读存储器种类繁多,在此只能对几种 ROM 进行简单地介绍。 (1)PROM PROM(Programmable ROM)称为可编 程 ROM,是由用户把要写入的信息“烧”入 PROM 中,对 PROM 的“烧”入操作,需要 一个 ROM 编程器的特殊设备。 (2)EPROM EPROM(Erasable PROM)称为紫外线擦除 PROM,用紫外光照射 EPROM,可实现对 EPROM 图 4-3 半导体存储器分类 中信息的擦除,所有 EPROM 芯片都有一个窗口用于接收照射它的紫外线。 (3)EEPROM EEPROM(Electrically EPROM)称为电擦除 PROM,它与 EPROM 相比,存在很多优 势:其一,它是采用电擦除,可以实现瞬间擦除,而 EPROM 需要 20 分钟左右的擦除时间; 其二,用户可以对 EEPROM 进行有选择地擦除,而 EPROM 是对整个芯片所有内容进行擦 除;其三,用户可以直接在电路板上对 EEPROM 进行擦除和编程,而不需要额外的设备。 (4)FE2PROM FE2PROM(Flash EEPROM)称为闪烁可编程可擦除 ROM,简称闪存,也是半导体存 储器,它既吸收了 EPROM 结构简单、编程可靠的优点,又保留了 E2PROM 用隧道效应擦 除快捷的特性,而且集成度可以做得很高。 4.2.2 存储元电路 存储元电路是指存储一位二进制信息“1”或“0”的电路,又称存储细胞或基本单元电 路。结合半导体存储器的分类,下面分别介绍几种存储元电路。 1、六管静态存储元 六管静态存储元是由六只 NMOS 管(T1~T6)组成, 如图 4-4 所示。其中 T1 与 T2 构成一个反相器,T3 与 T4 构成另一个反相器,两个反相器的输入与输出交叉连接 构成双稳态触发器,利用稳态来存储一位二进制信息“1” 或“0”。当 T1 导通、T3 截止时为 0 状态;当 T3 导通、 T1 截止时为 1 状态。在不掉电的情况下,存储元所存储 的一位二进制信息是不会改变的。T5、T6 是门控管(行 选通管),由 Xi 线控制其导通或截止。当 Xi=1 时,T5、 T6 导通;当 Xi=0 时,T5、T6 截止。T7、T8 也是门控管 (列选通管),其导通与截止受 Yi 线控制。当 Yj=1 时, T7、T8 导通;当 Yj=0 时,T7、T8 截止。T7、T8 是用来 控制位线与数据线之间连接状态,并不是每个存储元都 需要这两只管子,所以称为六管 NMOS 静态存储元。 只有当存储元所在的行、列对应的 Xi、Yj 线均为 1 时,该存储元才与数据线接通,才 能对它进行读或写,这种状态称为选中状态。 T TT T TT TT X Y 存储单元 位 线 B 位 线 B D D 数据线 V V 1 2 3 4 56 78 DD G i j 图 4-4 六管静态存储元 易失性 存储器 非易失性 存储器 半 导 体 存 储 器 只读 存储器 ROM 随机读写 存储器 RAM 掩膜ROM 可编程 ROM (PROM) 可擦除 ROM (EPROM) 电擦除ROM (E2PROM) 静态RAM (SRAM) 动态RAM (DRAM) 快速擦写存储器 (Flash Memory) 63 2、单管动态存储元 单管动态存储元只有一个电容和一个 MOS 管组成,如图 4-5 所示。一位二进制信息存 储依靠的是 MOS 管栅极与源极之间的极间电容,若极间电容有电荷,表示所储存的信息为 “1”;否则,表示所储存的信息为“0”。在保持状态下,行选择信号线为低电平,V 管截止, 电容 C 不存在充放电回路(当然还有一定的泄漏),其上的电荷状态将保持不变(有电荷表 示存“1”,无电荷表示存“0”)。 (1)读出 在对存储元进行读操作时,行选择线为高电平,使 V 管导通,于是刷新放大器读取对应电容 C 上的电压值,只有 当列选择信号有效时,存储元才可以输出信息。刷新放大器 的灵敏度很高,放大倍数很大,并且能将读取电容上的电压 值转换为逻辑“0”或者逻辑“1”。因此在读出的过程中, 存储元中的电容将会受到影响,为了在读出信息之后存储元 仍能保持原有的信息,刷新放大器在读取电容上的电压值之 后又立即进行重写,使每次读出后电容 C 上的电荷保持不 变,这就是所谓的“再生”或“刷新”。 (2)写入 在对存储元进行写操作时,行选择线为高电平,使 V 管导通,如果列选择信号也为高 电平,则存储元被选中,于是由数据输入/输出线送来的信息通过刷新放大器和 T 管送到电 容 C。 (3)刷新 由于晶体管 V 存在漏电流,平时电容 C 上的电荷将逐渐泄漏掉,不能长期保存,将使 存入的信息消失。为此,需要周期性地对电容进行充电,以补充泄漏的电荷,通常把这种补 充电荷的过程叫刷新或再生。随着器件工作温度的增高,放电速度会变快。刷新时间间隔一 般要求在 1~100 mS。工作温度为 70℃时,典型的刷新时间间隔为 2mS,因此,2mS 内必 须对存储的信息刷新一遍。 3、只读存储器存储元 (1)EPROM 存储元 初期的 EPROM 存储元是浮栅雪崩 注入 MOS,记为 FAMOS。它的集成度 低,用户使用不方便,速度慢,因此很 快被性能和结构更好的叠栅注入 MOS (SIMOS)取代。 SIMOS 管结构如图 4-6(a)所示。它 属于 NMOS,与普通 NMOS 不同的是: 它有两个栅极,一个是控制栅 CG,另 一 个是浮栅 FG。FG 在 CG 的下面,被 SiO2 所包围,与四周绝缘。单个SIMOS 管构成一个 EPROM 存储元,如图 4-6(b)所示。 与 CG 连接的线 W 称为字线,读出和编程时作选址用。漏极与位线 D 相连接,读出或 编程时输出、输入信息。源极接 VSS(接地)。当 FG 上没有电子驻留时,CG 开启电压为正 常值 Vcc,若 W 线上加高电平,源、漏间也加高电平,SIMOS 形成沟道并导通,称此状态 为“1”;当 FG 上有电子驻留,CG 开启电压升高超过 Vcc,这时若 W 线加高电平,源、 漏间仍加高电平,SIMOS 不导通,称此状态为“0”。人们就是利用 SIMOS 管 FG 上有无 电子驻留来存储二进制信息“1”或“0”。因 FG 上电子被绝缘材料包围,不获得足够能量 D DS FG CG W VSS(地) (b)(a) N+ 3~4 μm N+ P-Si SiO2 S CG FG D (a) SIMOS 管结构; (b) SIMOS EPROM 存储元 图 4-6 SIMOS 型 EPROM 行选择信号 V C 刷新 放大器 列选择信号 数据输入 / 输出线 图4-5 单管动态存储元 64 很难跑掉,所以可以长期保存信息,即使断电也不丢失。 SIMOS EPROM 芯片出厂时 FG 上是没有电子的,即都是“1”信息。对它编程就是在 CG 和漏极都加高电压,向某些元件的 FG 注入一定数量的电子,把它们写为“0”。EPROM 封装方法与一般集成电路不同,需要有一个能通过紫外线的石英窗口,擦除时将芯片放入擦 除器的小盒中,用紫外灯照射约 20 分钟,若读出各单元内容均为 FFH,说明原信息已被全 部擦除,恢复到出厂状态。写好信息的 EPROM 为了防止光线长期照射而引起的信息破坏, 常用遮光胶纸贴于石英窗口上。EPROM 的擦除是对整个芯片进行的,不能只擦除个别单元 或个别位,擦除时间较长,且擦和写均需离线操作,使用起来不方便,因此,能够在线擦写 的 E2PROM 芯片近年来得到广泛应用。 (2)FE2PROM 存储元 闪存是新一代电信号擦除的可编程 ROM,它既吸收了 EPROM 结构简单、编程可靠的 优点,又保留了 E2PROM 用隧道效应擦除快捷的特性,而且集成度可以做得很高。 图 4-7(a)是闪存采用的叠栅 MOS 管示意图。其 结构与 EPROM 中的 SIMOS 管相似,两者区别在于 浮栅与衬底间氧化层的厚度不同,在 EPROM 中氧 化层的厚度一般为 30~40nm,在闪存中仅为 10~ 14nm,而且浮栅和源区重叠的部分是源区的横向扩 散形成的,面积极小,因而浮栅与源区之间的电容很 小,当 Gc 和 S 之间加电压时,大部分电压将降在浮 栅与源区之间的电容上,闪存的存储元就是用这样 一只单管组成的,如图 4-7(b)所示。 闪存存储元的写入方法和 EPROM 相同,即利用雪崩注入的方法使浮栅充电。在读出状 态下,字线加上+5V,若浮栅上没有电荷,则叠栅 MOS 管导通,位线输出低电平;如果浮 栅上充有电荷,则叠栅管截止,位线输出高电平。擦除方法是利用隧道效应进行的,类似于 E2PROM 写 0 操作。在擦除状态下,控制栅处等于 0 电平,同时在源极加入幅度为 12V 左 右、宽度为 100mS 的正脉冲,在浮栅和源区间极小的重叠部分产生隧道效应,使浮栅上的 电荷经隧道释放,但由于片内所有叠栅 MOS 管的源极连在一起,所以擦除时是将全部存储 单元同时擦除,这是不同于 E2PROM 的一个特点。 4.2.3 存储器芯片 1、半导体存储器芯片组成与结构 每一个存储器芯片都具 有一定的存储容量,通常表 示为 N×m(bit),其中 N 是 存储器芯片的字数,一般为 2 的 n 次幂(N=2n),m 是存储器 芯片的位数,一般为 1、4、8 等。由此可见,一个存储器 芯片内部包含 N×m 个存储 元电路,将 N×m 个存储元 电路排列成矩阵,即构成存 储矩阵,也称之为存储体。 存储体是存储器芯片的核 心,它与外围电路(地址译码 图 4-8 半导体存储器芯片基本结构 电路、读/写控制电路、输入/输出控制电路等)集成在一块硅片上,称为存储器组件。 DS Gc Gf N+ N+ P 隧道区 D Gc S Gc 位 线字线 D S Wi USS Di (a)(b) (a) 叠栅 MOS 管; (b) 存储单元 图 4-7 快闪存储器 65 存储器组件经过各种形式的封装,引出地址线、数据线、控制线和电源与地线等,即制成了 半导体存储器芯片。半导体存储器芯片基本结构如图 4-8 所示。半导体存储器芯片根据位数 m 的不同,可以将存储器芯片分为字片式结构(m≠1)和位片式结构(m=1)。 (1)字片式结构半导体存储器芯片 图 4-9 所示是 16×8 位的字片式结构半导体存储器芯片结构图。图中每一个小方块表示 一个存储元电路,存储矩阵的每一行由 8 个存储元电路组成一个存储单元,存放一个 8 位的 存储字。一行中所有存储元电路的字线连在一起,与地址译码器的某一个输出端相连;所有 存储单元相同的位组成一列,一列中所有存储元电路的两条位线分别连在一起,并使用同一 个读写放大电路,读写放大电路与双向数据线相连。若存储器芯片接到地址信息为 A3A2A1A0=1111 时,A3A2A1A0 经地址译码器译码后字线 15 有效,即选中 15 号字线相应的 存储单元,从而实现对该单元中所有的存储元电路同时进行读/写。这种对地址仅进行一个 方向上的译码方式称为单译码方式或一维译码方式。由于字片式结构半导体存储器芯片采用 单译码方式,芯片内有多少个存储单元就需要多少个译码驱动电路,所需译码驱动电路较多, 电路复杂,为此,大多数存储器芯片都采用双译码方式,既位片式结构。 图 4-9 字片式结构存储器芯片 (2)位片式半导体存储器芯片 图4-10 所示是 1K×1 位的位片式结构半导体存储器芯片结构图。采用多字 1 位结构, 即 1024 个字排列成 32×32 的矩阵,中间每一个小方块代表一个存储元电路。 图 4-10 位片式结构存储器芯片 66 为了方便存取,给它们编上号,32 行的编号为 X0、X1、…、X31,32 列的编号为 Y0、 Y1、…、Y31。这样每一个存储元电路便组成一个存储单元,都有一个唯一的固定编号(Xi 行、Yj 列),这个编号称为存储单元的地址。地址译码器是将地址信息转换成有效的行选信 号(Xi)和列选信号(Yj),从而选中某一存储单元。对于图 4-10 所示双译码方式的存储器芯片, 行地址译码器采用 5∶32 译码器,即 5 条地址线 A0、A1 、…、A4 作为译码器的输入,译 码器的输出为 X0、X1、…、X31;列地址译码器也采用 5∶32 译码器,地址线 A5、A6、…、 A9 作为译码器的输入,译码器输出为 Y0、Y1、…、Y31,这样共有 10 条地址线用来寻址 1K 字(210=1K)。例如,输入地址为 A9A8A7A6A5A4A3A2A1A0=0000000001,则行选信号 X1=1 和列选信号 Y0=1,所以选中第 X1 行、第 Y0 列存储单元中的 1 个存储元电路,从而实现对 该单元中的这一个存储元电路进行读/写。 2、半导体存储器芯片工作原理 (1)半导体存储器芯片内部控制电路 1)读/写控制 对于被选中的存储单元,究竟进行读操作还是写操作,是由读/写控制逻辑电路进行控 制。如果是读操作,则被选中存储单元中的数据经数据线、输入/输出线传送出去;如果是 写操作,则将数据经过输入/输出线、数据线存入被选中单元中的各个存储元电路。 2)输入/输出控制 被选中的存储单元通过输入/输出端进行交换 数据,读出时它是输出端,写入时它是输入端,即 一线二用,由读/写控制信号控制。图 4-11 给出了 一个简单的输入/输出控制电路。 当选片信号CS=1 时,G5、G4 输出为 0,三态 门 G1、G2、G3 均处于高阻状态,输入/输出(I/O) 端与存储器内部完全隔离,存储器禁止读/写操作, 即不工作。 当选片信号CS=0 时,芯片被选通,如果 W/R =1 时,G5 输出高电平,G3 被打开,于是被选中单元中所存储的数据出现在 I/O 端,存储器 执行读操作;如果 W/R =0 时,G4 输出高电平,G1、G2 被打开,此时加在 I/O 端的数据以 互补的形式出现在内部数据线上,并被存入到所选中的存储单元中,存储器执行写操作。 输入/输出端数据线的条数与被选中存储单元所存储的位数相同,例如 1024×1 位的位 片式结构半导体存储器芯片,一个地址只能选中由 1 个存储元电路组成的存储单元,因此只 有 1 条输入/输出线;对于 256×4 位的半导体存储器芯片,一个地址只能选中由4 个存储元 电路组成的存储单元,所以有 4 条输入/输出线。但也有半导体存储器芯片的数据输入线和 输出线是分开的。 3)片选控制 一个半导体存储器芯片的存储容量总是有 限的,计算机的主存往往是由一定数量的半导体 存储器芯片按某种方式进行连接组合而成。当访 问存储器时,一次只能访问主存中的某一片(或 几片)半导体存储器芯片,为了方便实现对存储 器芯片选择的控制,半导体存储器芯片往往设置 有一条或几条片选信号(CS或CE)线 。当 芯 片 的片选信号有效时,该芯片被选中;当芯片的片 选信号无效时,该芯片未被选中。存储器芯片的片选信号通常是由地址译码器的输出信号与 & & G G G CS R/W 3 4 5 1 D G I/O 2 D G 图 4-11 输入/输出控制电路 图 4-12 存储器读操作时序 67 一些控制信号(读写命令)来形成。 (2)半导体存储器芯片工作时序 1)读操作时序 读操作时序如图 4-12 所示。具体过程如下: ①欲读出单元的地址送地址总线 AB ②待地址稳定后形成有效的选片信号CS ③在W/R 线上加高电平,经过一段延时后,所选择单元的内容出现在 I/O 端。 ④使选片信号CS无效,I/O 端呈高阻态,本次读出过程结束。 由于地址缓冲器、译码器及输入/输出电路存在延时,所以在地址信号加到存储器上之 后,必须等待一段时间,数据才能稳定地传输到数据输出端,这段时间称为地址存取时间, 记为 tAA。如果在存储器芯片的地址输入端已经有稳定地址的条件下,加入选片信号,从选 片信号有效到数据稳定输出,这段时间间隔记为 tACS。显然在进行存储器读操作时,只有在地址和选 片信号加入,且分别等待 tAA 和 tACS 以后,被读单元 的内容才能稳定地出现在数据输出端。图中 tRC 为读 周期,它表示该芯片连续进行两次读操作必须的时 间间隔。 2)写操作时序 写操作时序如图 4-13 所示。具体过程如下: ①将欲写入单元的地址送地址总线 AB ②在选片信号CS端加上有效电平,选中 SRAM 芯片 ③将待写入的数据加到数据输入端 ④在W/R 线上加入低电平,进入写工作状 态 ⑤使选片信号无效,数据输入线回到高阻状 态 由于地址改变时,新地址的稳定需要经过一 段时间,如果在这段时间内加入写控制信号(即 W/R 变低),就可能将数据错误地写入其他单 元。为防止这种情况出现,在写控制信号有效前, 地址必须稳定一段时间,这段时间称为地址建立 时间,记为 tAS。同时在写信号失效后,地址信 号至少还要维持一段写恢复时间(tWR),为了保 证速度最慢的存储器芯片的写入,写信号有效的 时间不得小于写脉冲宽度(tWP)。此外,对于写 入的数据,应在写信号 tDW 时间内保持稳定,且 在写信号失效后继续保持 tDH 时间。在时序图中 还给出了写周期 tWC,它反应了连续进行两次写 操作所需要的最小时间间隔。对大多数静态半导 体存储器来说,读周期和写周期是相等的,一般 为十几到几十 nS。 3、半导体存储器芯片实例 (1)静态存储器芯片(SRAM) Intel 2114 SRAM 芯片的容量为 1K×4 位, tWC 写入单元的地址ADD tWP CS R/W I/O 写入数据 ASt WRt DWt DHt 图 4-13 存储器写操作时序 A3 A4 A5 A6 A7 A8 行 地 址 译 码 存储矩阵 64×64 列选择 A0 A1 A2 A9 … 输入 数据 控制 I/O1 & 1 & 2 I/O2 I/O3 I/O4 CS WE 列I/O电路 图 4-14 Intel 2114 内部结构 Intel 2114 1 2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 18 Intel 2114 A6 A5 A4 A3 A0 A1 A2 GND CS WE I/O4 I/O3 I/O2 I/O1 A9 A8 A7 VCC (a) A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 WE CS (b) I/O2 I/O3 I/O4 I/O1 (a) 引脚;(b) 逻辑符号 图 4-15 Intel 2114 引脚及逻辑符号 68 芯片内部结构如图 4-14 所示。该芯片采用 18 脚封装,+5V 电源,芯片的实际引脚图和逻辑 符号如图 4-15 所示。 由于 1K×4=4096,所以 Intel 2114 SRAM 芯片有 4096 个基本存储电路,将 4096 个 基本存储电路排成 64 行、64 列的存储矩阵,每根列选择线同时连接 4 位列线,对应于并行 的 4 位(位于同一行的 4 位应作为同一单元的内容被同时选中),从而构成了 64 行 16 列=1K 个存储单元,每个单元存储 4 位二进制信息。由于有 1K 个存储单元(210=1K),所以 Intel 2114 SRAM 芯片应有 10 条地址输入信号线 A0…A9。由于芯片采用双译码方式,6 条地址 A3…A8 作为行地址译码输入,经行译码产生 64 条行选择线,其余 4 条 A0、A1、A2 和 A9 用于列地 址译码输入,经过列译码产生 16 条列选择线。10 条地址线 A0…A9 送来的地址信号分别送 到行、列地址译码器,经译码后选中一个存储单元(有 4 个存储元电路)。当片选信号CS=0, WE =0 时,数据输入三态门打开,I/O 电路对被选中单元的 4 个存储元电路进行写入操作; 当CS=0, WE =1 时,数据输入三态门关闭,而数据输出三态门打开,I/O 电路将被选中 单元内的 4 个存储元电路所存储的 4 位信息被读出并送数据线;当CS=1,即CS无效时, 不论 WE 为何种状态,各三态门均为高阻状态,芯片不工作。 (2)动态存储器芯片(DRAM) DRAM 芯片的结构大体与 SRAM 芯片相似,是由存储矩阵和外围电路构成。不过 DRAM 芯片集成度高,存储容量大,导致芯片的地址引脚多,给制造芯片带来较大的难度,为此, DRAM 芯片的地址采用分时复用技术,即地址分两次送的方法,从而将地址线减少一半; 另外 DRAM 芯片还需要刷新电路。 1)Intel 2164A DRAM 芯片 DRAM 芯片 Intel 2164A 芯片 的存储容量为 64K×1 位,采用单 管动态存储元电路,每个存储单元 只有一个存储元电路,即一个存储 单元只能存储 1 位数据,其内部结 构如图 4-16 所示。Intel 2164A 芯 片的存储体本应构成一个 256× 256 的存储矩阵,为提高工作速度 (需减少行列线上的分布电容),将 存储矩阵分为 4 个 128×128 矩阵, 每个 128×128 矩阵配有 128 个读出 图 4-16 Intel 2164A 芯片内部结构 放大器,各有一套 I/O 控制(读/写控 制)电路。64K 字(216=64K)容量本需 16 条地址线,由于采用分时复用技 术,芯片的地址线只需 8 条 A7…A0, 其引脚如图 4-17 所示。在行地址选 通信号RAS控制下,先将 8 位行地 址 A7…A0 送入行地址锁存器,经译 码后产生两组行选择线,每组 128 根。然后在列地址选通信号CAS控制下,将 8 位列地址 A7…A0 送入列地址锁存器,经译码 后产生两组列选择线,每组 128 根。行地址与列地址选择 4 个 128×128 矩阵之一,因此,16 位地址是分成两次送入芯片的,对于某一地址码,只有一个 128×128 矩阵和它的 I/O 控制 电路被选中。A7~A0 这 8 根地址线还用于在刷新时提供行地址,因为刷新是一行一行进行 的。 1 2 3 4 5 6 7 89 10 11 12 13 14 15 16NC DIN VSS A0 A2 A1 VDD DOUT A6 A3 A4 A5 A7 WE CAS RAS DINA7 A0 … CAS RAS DOUT WE A7~A0 CAS RAS WE VSS VDD 地址输入 列地址选通 行地址选通 写允许 +5 地 (a) (b) 图 4-17 Intel 2164A 引脚与逻辑符号 (a) 引脚;(b) 逻辑符号 69 Intel 2164A 读/写操作由 WE 信号来控制。读操作时, WE 为高电平,选中单元的内容 经三态输出缓冲器从 DOUT 引脚输出;写操作时,WE 为低电平,DIN 引脚上的信息经数据输 入缓冲器写入选中单元。Intel 2164A 没有片选信号,实际上用行地址和列地址选通信号 RAS 和CAS作为片选信号,可见,片选信号已分解为行选信号与列选信号两部分。 2)动态存储器刷新方式 动态存储器的刷新方式有集中式、分散式和异步式三种。如图 4-18 所示。 图 4-18 动态存储器刷新时间分配图 ①集中式刷新 所谓集中式刷新,是指在允许的最大刷新周期内,根据存储容量的大小和存取周期的长 短,集中安排一段刷新时间,在刷新时间内停止读写操作。例如,某一动态 RAM 由 128×128 存储矩阵组成,存取周期为 0.5μs,连续刷新 128 行,共需 128 个读周期,即一次刷新的总 时间为 64μs。若刷新周期为 2ms,那么,2ms 内有 4000 个读写操作。在这 4000 个读写操作 内,前面 3872 个周期用来进行读写或维持信息,后面 128 个周期用来刷新。集中式刷新时 间分配图如图 4-18(a)所示。由此图可以看出,在读写操作时,不进行刷新操作,因此, 读写操作不受刷新操作影响,读写速度较高。但在刷新时,必须停止读写操作。这段不能进 行读写操作的时间称为“死区”。在本例中,这段“死区”占 4000 个周期中的 128 个,故死 时间率为 3.2%。“死区”随存储矩阵行数的增加而增加,对于 256×256 存储矩阵来说,死 时间率增加一倍。为了减少“死区”的时间,对于大容量的动态 RAM 芯片,可以采用在一 个刷新周期内同时刷新多行的方法,以减少刷新周期数。 ②分散式刷新 分散式刷新是指把每行存储单元的刷新分散到每个读写周期内进行,即把系统对存储器 的访问周期分为两段,前一段用来读写数据或使存储器处于保持状态,后一段用来对存储矩 阵的一行进行刷新。分散式刷新时间分配图如图 4-18(b)所示。这种刷新方式增加了系统 对存储器的存储时间,如动态存储器芯片的存储时间为 0.5μs,则系统对存储器的存储时间 为 1μs。对于前述 128×128 存储矩阵的芯片来说,这个存储器刷新一遍需要 128μs,就是以 128μs 作为间隔时间。这种刷新方法避免了“死区”,但加长了存储器的存储时间,降低了 70 整机的处理速度。而且刷新时间过于频繁,没有充分利用所允许的最大刷新间隔时间。这种 方式不适用于高速存储器。 ③异步式刷新 异步式刷新是上述两种方法的结合,它充分利用最大间隔时间并使“死区”缩短。对于 128×128 存储矩阵的芯片来说,每行的刷新间隔时间是 2ms/128,即每隔 15.6μs 刷新一行。 在 2ms 内分散地对 128 行轮流刷新一遍,刷新一行是只停止一次读写操作时间。分散式刷 新时间分配图如图 4-18(c)所示。这样,对每一行来说,刷新时间仍为 2ms,而“死区” 的长度则缩短为 0.5μs。 消除“死区”的方法,还可以采用不定期的刷新方法。即可以把刷新时间安排在 CPU 不 访问内存的时间内进行。这种刷新方法没有单独占用 CPU 的时间,也没有“死区”,效率最 高,但是,刷新的控制线路较复杂。 3)DRAM 芯片的存取模式 ①标准模式的 DRAM 芯片 由 Intel 2164A DRAM 芯片可知,标准模式 DRAM 芯片的访问步骤:先给出所要访问存 储单元的行地址并保持稳定,然后给出有效的行地址选通信号RAS,将行地址锁存到行地 址译码器,此后再给出所要访问存储单元的列地址并保持稳定,然后给出有效的列地址选通 信号CAS,将列地址锁存到列地址译码器,通过行、列地址译码器的译码,找到相应的存 储单元,在读/写控制信号 W/R 作用下,实现对该存储单元的读或写操作。标准模式 DRAM 芯片的访问时间是指从芯片地址引脚上给出行地址开始,到可以使用出现在芯片数据引脚上 的数据为止所需的时间。由于RAS信号失效后 DRAM 芯片尚需一个预充时间 tRP,以便为下 次访问做准备。所以,DRAM 芯片存取周期比访问时间要长,至少要长 tRP 时间,这也是 DRAM 芯片与 SRAM 芯片的不同之处。为了消除 DRAM 芯片的预充时间所带来的负面影 响,采用交错内存连接方法,即将两个内存条安排在一起使用,交替地访问两个内存条。当 访问一个内存条的同时,另一个内存条执行预充操作,从而将预充时间隐藏在访问时间之中。 ②页模式 DRAM 芯片 芯片内存储元电路组成的存储矩阵是芯片的核心,存储矩阵中的一行所包含的存储元电 路的个数称为一页。由于绝大多数情况下对存储器的访问是连续的,所以没有必要像对标准 模式 DRAM 芯片的访问,每次都要给出行地址和列地址。对页模式 DRAM 芯片的访问,如 果所访问的存储元电路与上次访问的存储元电路在同一页中,只给出列地址,行地址保持不 变,便可以选中并访问该存储元电路,与标准模式 DRAM 芯片比较,可以看出,第二次访 问时间比第一次访问时间要短了许多。 ③静态列模式 DRAM 芯片 静态列模式 DRAM 芯片与页模式 DRAM 芯片相似,访问某一行的第一个存储元电路 所需要的时间是标准的RAS访问时间。当给出所要访问存储单元的行地址并保持稳定,然 后给出有效的行地址选通信号RAS,将行地址锁存到行地址译码器,行地址在访问本行中 的存储元电路的过程中保持不变,接着给出列地址,并给出有效的片选信号CS,然后,列 地址在存储器芯片之外的一个增量寄存器中不断增量,并将每次增量后的地址信号送往存 储器芯片,作为列地址译码器的输入,列地址译码器不断译码以确定要访问的存储单元。 这样,只要RAS和CS始终保持低电平,同一行中各个存储元电路所存储的数据就连续地 出现在静态列模式 DRAM 芯片的数据输出端,直到这一行中的最后一个存储元电路所存储 的数据出现在数据输出端为止。 ④半字节模式 DRAM 芯片 在对半字节模式 DRAM 芯片访问时,先给出行地址,并辅以有效的RAS信号,将行地 址锁存,然后再给出列地址,同时CAS信号有效,将第一个列地址锁存。然后RAS信号保 71 持有效,行地址不再变化,而CAS信号在有效和无效之间不停地切换,连续读出一行中的 四位。可见半字节模式 DRAM 芯片类似于页模式 DRAM 芯片,只是页模式 DRAM 芯片一 次要连续读出一行中的所有位,而半字节模式 DRAM 芯片只是读出一行中连续的 4 位。除 此之外,半字节模式 DRAM 芯片与页模式 DRAM 芯片和静态列模式 DRAM 芯片的不同之 处是:半字节模式 DRAM 芯片不需要设置列地址计数器电路。 ⑤EDO DRAM 芯片 EDO DRAM 芯片是后期研发的一种高速存储器芯片,EDO DRAM(Extended Data-Out DRAM)称为扩展数据输出 DRAM,有时也称超级页模式 DRAM,事实上它是 页模式 DRAM 的超级版本,为解决页模式 DRAM 芯片的局限性而研制开发的。 ⑥同步 DRAM 芯片(SDRAM) 当 CPU 总线速度超过 75Hz 时,即使是 EDO DRAM 芯片也不能满足 CPU 速度的要求, 所以人们开发了同步 DRAM。在所有传统 DRAM 芯片中(包括页模式 DRAM 芯片、EDO DRAM 芯片),DRAM 的时序与 CPU 的时序是不同步的,即 CPU 和 DRAM 芯片间没有一 个公共的参考时钟。如果 CPU 访问 DRAM 时,DRAM 不能及时给出数据,它会发出 NOT READY 信号告知 CPU,CPU 通过在总线时序中插入等待周期来响应 NOT READY 信号。 而 SDRAM 芯片,CPU 与 SDRAM 芯片间存在一个公共时钟信号,任何操作都与公共时钟 信号同步,CPU 无需等待,从而实现突发模式操作。突发模式既可用于读操作,也可以用 于写操作,为简便起见,在此只讨论突发模式的读操作。在突发读模式中,CPU 像正常情 况一样提供第一个欲访问单元的地址,先给出 RAS信号,接着给出CAS信号。由于 CPU 读 SDRAM 的内容用于填充 Cache,所以要一次读几个连续的单元(所读单元的个数取决 于 Cache 结构)。因此,CPU 在给出第一个单元的地址后,后续单元的地址就无需再给出 了,从而节省了建立地址和保持信息的时间。即可简单地通过编程把 SDRAM 设置为突发 模式,告诉它一次要连续读的单元个数就可以了。每次突发读出的单元个数称为突发长度 (Burst Length),可以是 1、2、4、8、16、256(整页)。为了进一步提高性能,SDRAM 芯片内部采用交错连接,即存储元电路的安排是遵循交错方式,从而实现了在访问一组存 储元电路的同时刷新另一组存储元电路。如果 SDRAM 芯片融合了突发模式和交错连接两 种技术,那么由 SDRAM 芯片构成的内存可用于总线频率高达 124MHz,若总线频率超高 125MHz,SDRAM 也不能满足性能要求了,只能采用速度更高的 DDR SDRAM(Double Data Rate SDRAM)。由于篇幅的限制,在此不再讨论,感兴趣的同学可以看相关的参考书。 (3)只读存储器芯片 半导体只读存储器芯片种类较多,就 EPROM 芯片而言,存在多种型号,常用的有 2716(2K×8)、2732(4K×8)、2764(8K×8)、 27128(16K×8)、27246(32K×8)等。 1)Intel 2716 EPROM 芯片 ①Intel 2716 芯片的内部结构和外部引脚 Intel 2716 EPROM 芯片采用 NMOS 工艺 制造,双列直插式 24 引脚封装。其引脚、逻 辑符号及内部结构如图 4-19 所示。11 条地址 输入线 A10…A0,其中 7 条用于行译码,4 条 用于列译码。 O7…O0:8 位数据线。编程写入时是输入 线,正常读出时是输出线。 Intel 2716 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 GND O3 O4 O5 O6 O7 PD/PGM A10 VCC A8 A9 VPP CS (a) Intel 2716 石英窗口 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 PD/PGM O0 O1 O2 O3 O4 O5 O6 O7 CS (b) 列译码 行译码 A10~A0 地址输入 读出放大 2 K×8位 存储矩阵 输出缓冲器 数据输出端 O7~O0 … … 片选,功率下降 和编程逻辑 CS PD/PGM (c) VPP GND VCC 图 4-19 Intel 2716 的引脚、逻辑符号及内部结构 (a)引脚;(b) 逻辑符号;(c) 内部结构 72 CS:片选信号。当CS=0 时,允许 2716 读出。 PD/PGM:待机/编程控制信号,输入。 VPP:编程电源。在编程写入时,VPP=+25V;正常读出时, VPP=+5V。 VCC:工作电源,为+5V。 ②Intel 2716 芯片的工作方式 Intel 2716 芯片的工作方式如表 4-1 所示。 读出方式:当CS=0 时,此方式可以将选中存储单元的内容读出。 未选中:当CS=l 时,不论 PD/PGM 状态如何,Intel 2716 芯片均未被选中,数据线呈 高阻态。 待机(备用)方式:当 PD/PGM=1 时,Intel 2716 芯片处于待机方式。这种方式和未选中 方式类似,但其功耗由 525mW 下降到 132mW,下降了 75%,所以又称为功率下降方式,此 时数据线呈高阻态。 编程方式:当 VPP=+25V,CS=l,并在 PD/PGM 端加上 52mS 宽的正脉冲时,可以将 数据线上的信息写入指定的地址单元。数据线为输入状态。 校验编程内容方式:此方式与读出方式基本相同,只是 VPP=+25V。在编程后,可将 Intel 2716 芯片中的信息读出,与写入的内容进行比较,以验证写入内容是否正确。数据线 为输出状态。 禁止编程方式:此方式禁止将数据总线上的信息写入 Intel 2716 芯片。 表 4-1 Intel 2716 工作方式 工作方式 PD/PGM CS 电压(V) 数据线 读出 0 0 +5 输出 未选中 × 1 +5 高阻 待机 1 × +5 高阻 编程 正脉冲 1 +25 输入 校验编程 0 0 +25 输出 禁止编程 0 1 +25 高阻 2)Intel 2816 E2PROM 芯片 Intel 2816 芯片是 2K×8 位的 E2PROM 芯片,有 24 条引脚,单一+5V 电源。其引 脚如图 4-20 所示。其工作方式如表 4-2 所示。 读出方式:当CE=0,OE =0,并 且 VPP 端加+4~+6V 电压时,Intel 2816 芯片处于正 常的读工作方式,此时数据线为输出状态。 待机(备用)方式:当CE=1,OE 为任意 状态,且 VPP 端加+4~+6V 电压时,Intel 2816 芯片处于待机状态。与 Intel 2716 芯片一样,待机状态下芯片的功耗将下降。 字节擦除方式:当CE=0,OE =1,数据线(I/O0~I/O7)都加高电平且 VPP 加幅度为+2lV、 宽度为 9~15mS 的脉冲时,Intel 2816 芯片处于以字节为单位的擦除方式。 整片擦除方式:当CE=0,数据线(I/O0~I/O7)都为高电平,OE 端加+9~+15V 电压及 VPP 加 21V、9~15mS 的脉冲时,约经 10mS 可擦除整片的内容。 字节写入方式:当CE=0,OE =1,VPP 加幅度为+2lV、宽度为 9~15 mS 的脉冲时,来 自数据线(I/O7~I/O0)的数据字节可写入 Intel 2816 芯片的存储单元中。可见,字节写入和字 节擦除方式实际是同一种操作,只是在字节擦除方式中,写入的信息为全“1”而已。 Intel 2816 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24A7A6 A5 A4 A3A2 A1 A0 I/O0 GND A10 VCCA8 A9 WE I/O1 I/O2 OE CE I/O7I/O6 I/O5 I/O4I/O3 A10~A0 OE I/O7~I/O0 CE WE 地址引脚 输出允许 数据输入/输出 片选信号 写允许 图 4-20 Intel 2816 的引脚 73 禁止方式:当CE=1,VPP 为+4~+22V 时,不管OE 是高电平还是低电平,Intel 2816 芯片都将进入禁止状态,其数据线(I/O0~I/O7)呈高阻态,内部存储单元与外界隔离。 表 4-2 2816的工作方式 CE OE Vpp/V 数据线状态 读出 0 0 4V~6V 输出 备用 1 X 4V~6V 高阻 字节擦除 0 1 21V 输入全 1 字节写入 0 1 21V 输入 整片擦除 0 +9~+14 21V 输入全 1 擦写禁止 1 X 4V~22V 高阻 4.2.4 存储器的扩展与应用 无论哪种存储器芯片,CPU 对存储器的访问,首先通过地址总线给出所要访问存储单 元的地址,经地址译码器译码后,选中所要访问的单元,然后发出相应的读/写控制信号, 最后才是数据在数据总线上进行传送。所以,存储器芯片与 CPU 的连接主要是存储器芯片 上地址信号线、数据信号线和控制信号线与系统总线(地址总线 AB、数据总线 DB、控制 总线 CB)的连接。由于一个存储器芯片的容量(N×M 位)总是有限的,因此,内存总是 由一定数量的存储器芯片构成。面对种类繁多的存储器芯片,首先要考虑如何选择合理的芯 片和需要多少芯片问题,其次是如何把这些芯片连接起来,最后是与系统总线的连接问题。 存储器芯片的选择通常要考虑存储器芯片的存取速度、存储容量、电源电压、功耗及成 本等多个因素。确定某一存储器芯片后,根据内存容量大小,计算出所需存储器芯片的数量。 假设存储器芯片的容量为 N×M 位,内存的容量为 K×L 位,由于内存容量要比一个存储器 芯片的容量大得多,所以,K≥N、L≥M,所需存储器芯片的数量可按式(4-1)进行计算。 芯片数 = × (4-1) 式(4-1)中,K 和 N 分别是内存的字数 (单元数)和芯片的字数(单元数),L 和 M 分别是内存中一个字的位数和芯片中一个字 的位数。字数 K 和 N 一般为 2 的整次幂,且 K≥N;内存中一个字的位数 L 与机器的字长 相关,一般是字节的整数倍,而芯片中一个字 的位数 N 可以是 1、4、8 等不等。所以,使 用存储器芯片构成内存时,需要在字、位两方 面进行扩展,具体扩展方法可以分为位扩展、 字扩展和字位扩展。 1、存储芯片的扩展 (1)位扩展 位扩展是指存储器芯片的字(单元)数满 足要求而位数不够,即 K=N、L>M,需对每 个存储单元的位数进行扩展。图 4-21 给出了 使用 8 片 8K×1 位的 RAM 芯片位扩展构成 8K×8 位存储器系统的连线图。由于存储器的 I/O 8 I/O 7 I/O 6 I/O 5 I/O 4 I/O 3 I/O 2 8 K×1 I/O 1 CS WR … D7 … D0 数据总线 CS WR 控制总线 … A0 A12 地址总线 图 4-21 位扩展连接方式 2-4 译 码 器 0 1 2 3 A15 A14 16×8 (1) CE WE … 16×8 (2) CE WE … 16×8 (3) CE WE … 16×8 (4) CE WE … A0 A13 … WE D7~D0 图 4-22 字扩展连接方式 74 字数与存储器芯片的字数一致,8K=213,故需 13 根地址线 A12…A0 对各芯片内的存储单元 进行寻址。每一个芯片只有一条数据线,所以需要 8 片这样的芯片,将它们的数据线分别接 到数据总线 D7…D0 上。因此,每一条地址线有 8 个负载,每一条数据线有一个负载。 位扩展法中,所有芯片都应同时被选中,各芯片CS端可直接接地,也可并联在一起, 根据地址范围的要求,与高位地址线译码产生的片选信号相连。若地址线 A12…A0 为全 0, 即选中了存储器 0 号单元,该单元的 8 位信息是由各芯片 0 号单元的 1 位信息共同构成的。 可以看出,位扩展的连接方式是将各芯片的地址线、片选CS、读/写控制线进行并联,而数 据线分别接到数据总线 D7…D0 上。 (2)字扩展 字扩展用于存储芯片的位数满足要求而字数不够的情况,即 K>N、L=M,需对存储单 元数量的扩展。图 4-22 给出了用 4 个 16K×8 位的存储芯片构成一个 64K×8 位存储器连接 图。 图 4-22 中 4 个芯片的数据线与数据总线 D7…D0 相并连;地址总线的低位地址 A13…A0 与各芯片的 14 位地址线连接,用于进行片内寻址;为了区分 4 个芯片的地址范围,还需要 2 根高位地址线 A14、A15,经 2:4 译码器产生 4 个输出信号,分别与 4 个芯片的片选端相 连。采用如此连接后,各芯片的地址范围如表 4-3 所示。 可以看出,字扩展的连接方式是将各芯片的地址线、数据线、读/写控制线进行并联, 将地址总线中的低位地址线直接与各芯片地址线相连,以选择片内的某个单元,即实现片内 寻址;而剩余的高位地址线用来产生片选信号,连接到各芯片的片选端,以选择某一个芯片, 即实现对芯片的寻址。剩余的高位地址线如何用来产生片选信号呢?具体方法有:全译码法、 部分译码法和线选法。 1)全译码法 所谓全译码法是指剩余的所有高位地址线都作为译码器的输入,其输出作为片选信号。 也就是说,除了已经连接到存储器芯片上的地址线外,其他高位的地址线都被送入译码电路, 以产生片选信号。采用全译码法所构成的存储器,存储单元的地址将是唯一的,不会出现地 址重叠。 2)部分译码法 所谓部分译码法是指剩余的一部分高位地址线作为译码器的输入,其输出作为片选信 表 4-3 各个芯片的地址空间分配情况 芯片 A15A14 A13A12……A1A0 地址范围 1 0 0 0 0………0 0 ┇ ┇ ┇ 1 1 1 1 0000H ┇ 03FFH 2 0 1 0 0………0 0 ┇ ┇ ┇ 1 1 1 1 4000h ┇ 07FFH 3 1 0 0 0………0 0 ┇ ┇ ┇ 1 1 1 1 8000h ┇ 0BFFFH 4 1 1 0 0………0 0 ┇ ┇ ┇ 1 1 1 1 0C000h ┇ 0FFFFH 75 号。由于有些地址线未参与译码,则该地址线是“0”或“1”将不影响芯片的选中与否。采用 部分译码法所构成的存储器,存储单元的地址将不再是唯一的,会出现一定程度的地址重叠。 3)线选法 所谓线选法是指剩余的高位地址线直接作为芯片的片选信号。也就是说,不在存储器芯 片上的高位地址线直接作为存储器芯片的片选信号。使用线选法的好处是译码电路简单。但 线选不仅导致一个存储单元有多个地址,还有可能一个地址同时选种多个单元,会引起数据 总线的冲突。 (3)字位扩展 在实际应用中,往往会遇到字数和位数 都需要扩展的情况。若使用 N×M 位的存储 器芯片构成一个容量为 K×L 位 (K>N, L>M)的存储器,那么这个存储器共需要 (N/K)×(M/L)个存储器芯片。连接时可将这 些芯片分成 N/K 个组,每组有 M/L 个芯片。 组内采用位扩展法,组间采用字扩展法。例 如用 Intel 2114 RAM 芯片(1K×4)构成 4K×8 存储器,其存储器连接方法如图 4-23 所示。其中 8 片 Intel 2114 芯片分成 4 组 (RAM1、RAM2、RAM3 和 RAM4),每组 2 片。组内采用位扩展法构成 1K×8 的存储模块,4 个存储模块用字扩展法连接成 4K×8 的 存储器。用 10 根地址线 A9…A0 对每组芯片进行片内寻址,同组芯片应被同时选中,因此, 同组芯片的片选信号应并联在一起。2:4 译码器对两根高位地址线 A11A10 进行译码,产生 4 个输出信号分别与各组芯片的片选端相连。 (4)用不同规格的存储器芯片扩展存储器 用不同规格的存储器芯片扩展存储器,地址范围的分配问题较为复杂,除了考虑字扩展 和位扩展外,还要考虑如何选择合理的芯片和采用怎样的结构,关于结构问题将在 4.2.5 并 行存储器中进行讨论,在此以具体的例子来说明地址译码器和存储器片选信号的连接。 【例 4-1】试用现有存储器芯片 EPROM(8K×8 位)和 SRAM(16K×1 位、2K×8 位、4K×8 位、8K×8 位)去构成主存储器,具体要求是:0~8191(8KB)为系统程序区,由只读存 储器芯片组成;8192~32767(24KB)为用户程序区;最后 2KB 地址空间为系统程序工作区。 若系统的地址总线 16 条 A15…A0,双向数据总线 8 条(D7…D0),控制总线与主存有关的信 号有 MERQ 、 W/R 。试从上述芯片中选择适当芯片设计该计算机主存储器,并画出主存储 器逻辑框图。 解:根据主存储器的具体要求,8KB 的系统程序区可用 1 片 8K×8 位的 EPROM 芯片 组成;24KB 的用户程序区可以用 SRAM 芯片组成,由于 SRAM 芯片种类较多,究竟选用 哪一种芯片较合理,不仅要看芯片的位数与系统的数据总线是否匹配,还要看组成存储器的 芯片所需的片选信号是否最少,只有这样,存储器的译码电路才能是最简单的,因此,这 24KB 的用户程序区可选用 3 片 8K×8 位的 SRAM 芯片组成;最后 2KB 的系统程序工作区 可选用 1 片 2K×8 位的 SRAM 芯片组成。各个芯片的地址空间范围如表 4-4 所示。 表 4-4 存储器各个芯片地址范围 A15A14A13 A12A11 A10………………………A0 各个芯片的地址范围 0 0 0 0 0 ┇ 1 1 0…………………………0 ┇ 1…………………………1 0000H~1FFFH (8KB EPROM) 0 0 0…………………………0 I/O1~I/O4 RAM1 2114 A9~A0 2-4 译码器 A11 A10 D3~D0 A9~A0 RAM1 2114 I/O1~I/O4 WE CS WE CS I/O1~I/O4 RAM2 2114 A9~A0 A9~A0 RAM2 2114 I/O1~I/O4 WE CS WE CS I/O1~I/O4 RAM3 2114 A9~A0 A9~A0 RAM3 2114 I/O1~I/O4 WE CS WE CS I/O1~I/O4 RAM4 2114 A9~A0 A9~A0 RAM4 2114 I/O1~I/O4 WE CS WE CS D7~D4 WR A9~A0 图 4-23 字位扩展连接方式 76 0 0 1 ┇ 1 1 ┇ 1…………………………1 2000H~3FFFH (8KB SRAM) 0 1 0 0 0 ┇ 1 1 0…………………………0 ┇ 1…………………………1 4000H~5FFFH (8KB SRAM) 0 1 1 0 0 ┇ 1 1 0…………………………0 ┇ 1…………………………1 6000H~7FFFH (8K×8 SRAM) 1 1 1 1 1 0…………………………0 ┇ 1…………………………1 F800H~FFFFH (2KB SRAM) 结合表 4-4 的地址分配情况,考虑到多数芯片是 8K×8 位的,所以选用地址总线中的低 16 位地址线 A12…A0 作为片内寻址,高 3 位地址线 A15A14A13 作为译码器的输入,其输出 作为片选信号。对于 2K×8 的 SRAM 芯片片选信号需要另加门电路解决。主存储器连接图 如图 4-24 所示。 【例 4-2】试用 4 片 4K×4 位的芯片和 3 片 8K×8 位的芯片扩展 32KB 主存储器。若系统的 地址总线 16 条 A15…A0,双向数据总线 8 条(D7…D0),控制总线与主存有关的信号有: MERQ 、 W/R 。 解:扩展 32KB 的主存储器需要 15 条地址线 A14…A0、8 条数据线 D7…D0 和相关控制 信号线。4 片 4K×4 位的存储器芯片构成 8KB 的主存,采用字位扩展法,每两片为一组, 每组构成 4KB 的主存;3 片 8K×8 的存储器芯片构成 24KB 的主存储器,采用字扩展法。这 32KB 的主存储器的地址范围分配如表 4-5 所示。 存储器的具体连接要考虑控制线、数据线和地址线的连接。具体而言: 控制线的连接:控制线的连接较简单,只要将控制总线的读写控制信号 WE 与每一存储 器芯片的读写控制线 WE 直接相连即可。 数据线的连接:3 片 8K×8 位 SRAM 芯片为 8 位数据宽度,将对应 8 位数据线与系统数 据总线相连即可;4 片 4K×4 位 SRAM 芯片,分成两组,每组两片,每片数据宽度为 4 位。, 将每组其中一片 4 位数据线连接到系统数据总线 D7…D4 上,另一片连接到 D3…D0 上。 地址线的连接:不同规格芯片的连接,关键在于译码器输入与输出的选择。对于输入线 来说,通常以容量最小的芯片为基础。因此,容量大的芯片其片内高位地址线也要参加译码。 表 4-5 32K×8 位主存储器地址范围 A15A14A13 A12 A11………………………A0 各个芯片的地址范围 0 0 0 0 ┇ 1 0…………………………0 ┇ 1…………………………1 0000H~1FFFH (第三组 8KB 主存) 0 0 1 0 ┇ 1 0…………………………0 ┇ 1…………………………1 2000H~3FFFH (第四组 8KB 主存) 0 1 0 0 ┇ 1 0…………………………0 ┇ 1…………………………1 4000H~5FFFH (第五组 8KB 主存) 0 1 1 0 0…………………………0 ┇ 1…………………………1 6000H~6FFFH (第一组 4KB 主存) 77 0 1 1 1 0…………………………0 ┇ 1…………………………1 7000H~7FFFH (第二组 4KB 主存) 本例以最小容量 4K×4 位的存储器芯片为基础,32K 是 4K 的 8 倍,故选用 74LS138 译码器。用 3 条地址线 A14、A13、A12 作为译码器的输入,其译码器的输出有 8 个信号,由 上到下,000 选择第一组芯片,001 选择第二组芯片,第三组至第五组为 8K×8 位的芯片, 有 8K 个单元,是第一、第二组芯片 4K 个单元的两倍,需用两条译码输出线选择,故各增 加与门一个,由 010 和 011 共同选择第三组芯片,由 100 和 101 共同选择第四组芯片,110 和 111 共同选择第五组芯片。另外,由于系统地址总线有 16 条,而 32KB 主存储器需要 15 条地址线 A14…A0,A15 地址线如果不参加译码,它可随机出现 0、1 两种情况,将其加于 A14…A0 决定的任何一个地址码上,可以出现两种不同的地址码,这种现象称为地址的重合, 局部译码时必定会出现地址重合或覆盖现象。为避免地址重合或覆盖现象,必须采用全译码, 实现全译码在此只需将 A15 与 74LS138 的 G1 相连,此时 A15 为 1;或将 A15 与 74LS138 的 G2a 或 G2b 相连,A15 为 0,本例采用后者连接,32KB 主存储器具体连接如图 4-25 所示。 图 4-24 36KB 主存储器 图 4-25 32KB 主存储器 78 4.2.5 并行存储器 随着软件规模的增大和系统性能要求的提高,对主存的要求是容量要大,速度要快。尽 管主存的存取速度在不断地提高,但它的速度与 CPU 的速度相比,仍存在较大的差距,主存 的存取速度是整个计算机系统速度的瓶颈。为了解决这个问题,存储器系统采用了层次结构, 用虚拟存储器的方式扩大主存的存储容量,用高速缓冲存储器提高存取速度。除此以外,调 整主存的组织结构来提高存取速度,也是一种行之有效的方法。在常规主存储器设计中,访 问地址采用顺序方式,如图 4-26(a)所示。主存储器容量为 32 字,分成 4 个模块 M0…M3, 每个模块存储 8 个字。访问地址按顺序分配给一个模块后,接着再按顺序为下一个模块分配 访问地址。由此可见,在对顺序方式中的某个模块进行访问时,其他模块是不工作的,一旦 某一模块出现故障,对其他模块不会造成影响。但由于各个模块是一个接一个串行工作,将 会限制存储器的带宽。为了提高存储器的带宽,实现多模块流水式并行工作,访问地址采用 交叉方式,如图 4-26(b)所示。地址的分配方法与顺序方式不同:先将 4 个线性地址 0,1,2, 3 依次分配给 M0,M1,M2,M3 模块,再将线性地址 4,5,6,7 依次分配给 M0,M1,M2, M3 模块……直到全部线性地址分配完毕为止。可以看出,连续地址分布在相邻的不同模块 内,而同一个模块内的地址都是不连续的,因此,对于连续字的块传送,交叉方式的存储器 可以实现多模块流水式并行存取,从而大大提高存储器的带宽。 图 4-26 并行存储器 1、多体顺序并行存储器 前面所讨论的存储器,一个存取周期只能访问一个存储单元,无法实现并行操作,要想 进行对存储器的并行处理,必须改变存储器的组织结构,将大容量的存储器分成若干个存储 体,每个存储体都有自己的读写线路、地址寄存器和数据寄存器,并能以同等的方式与 CPU 交换信息。另外,每个存储体容量相等,它们既能同时工作又能独立编址。图 4-27 是多体 顺序并行存储器原理图。 图 4-27 多体顺序并行存储器原理图 79 主存由 n 个容量相等的存储体组成,其中 MAR 为存储体地址寄存器,MDR 为存储体数 据寄存器,主存地址寄存器的高位表示不同的存储体,低位表示存储体内单元地址,各体内 地址寄存器指示存储单元的内容。这种结构使得各个存储体内相邻单元的地址是连续的,从 而体现多体“顺序”这一特点,有利于并行处理,能够实现 n 个存储体的并行操作,即一次 能访问并处理 n 个字。 2、多体交叉并行存储器 多体交叉并行存储器类似于多体顺序并行存储器,都是由多个相对独立的存储体组成, 所不同的是多体交叉并行存储器的主存地址的高位表示存储体内单元地址,低位用于选择不 同的存储体,这种组织形式使得各个存储体内相邻单元的地址是不连续的,而相邻存储体之 间相同位置的单元地址是连续的,从而体现多体“交叉”这一特点。下面以一个四体交叉并 行存储器为例,来说明多体交叉并行存储器的工作原理。如图 4-28 所示是一个四体交叉并 行存储器,该存储器由 4 个独立的存储体 M0、M1、M2、M3 组成,低位地址用于选择不同的 存储体,高位地址表示存储体内单元地址。 n 体交叉并行存储器的编址规则如下: 规则 1,地址连续的两个单元分布在相邻的两个存储体中,地址按存储体方向顺序编号。 规则 2,同一存储体内相邻的两个单元地址之差等于 n。例如在四体交叉并行存储器中, 同一存储体内相邻的两个单元地址之差等于 4。 图 4-28 多体交叉并行存储器原理图 规则 3,任何一个存储单元地址编号的末 log2n 位正好指示该单元所属存储体的编号, 访问主存时只要判断这几位就能决定访问的是哪个存储体。在四体交叉并行存储器中,M0 存储体中每个单元地址的最后两位都是“00”,M1 存储体中每个单元地址的最后两位都是 “01”,M2 存储体中每个单元地址的最后两位都是“10”,M3 存储体中每个单元地址的最 后两位都是“11”。 规则 4,同一存储体中每个单元地址除去存储体编号后的高位地址正好是存储体中单元 的顺序号,由此就可决定访问单元在存储体中的位置。 多体交叉并行存储器地址交叉排列的目的是为了便于各个存储体同时工作。假设 CPU 要取 4 条长度为一个字长的指令,这 4 条指令分别存放在地址为 0、1、A、B 的 4 个单元中, 这 4 个单元分别在 M0、M1、M2、M3 四不同的存储体中。为了在一个存取周期内能访问 4 个指令字,在多体并行主存系统中采用了分时工作的方法,目前普遍采用的是分时读出法, 即每个存储体每次读写一个字,各存储体分时启动,即每隔四分之一存取周期启动一个存储 体,其时序如图 4-29 所示,M0 存储体在第一个主存周期开始读写,经过 1/4TM 启动 M1 存储 体,M2 和 M3 存储体分别在 1/2TM、3/4TM 时刻开始它们各自的读写操作,4 个存储体以 1/4TM 的时间间隔进入并行工作状态。 80 图 4-29 四体交叉并行存储器工作时序 4.3 高速缓冲存储器 4.3.1 Cache 基本原理 1、Cache 与程序访问的局部性 虽然 CPU 主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于 CPU, 还与系统架构、存储部件的存取速度、信息在各个部件之间的传送速度、指令结构等因素有 关,特别是主存的存取速度。如果 CPU 工作速度较高,而主存的存取速度较低,必然会造 成 CPU 的等待,从而降低了 CPU 的处理速度和效率。如 400MHz 的 PIII,一次指令执行时 间为 2nS,与其相配的主存 SDRAM 存取时间为 10nS,比前者慢了 5 倍。如何解决 CPU 与 主存之间的速度匹配问题?一种方法是在基本总线周期中插入等待,尽管能处理好速度匹配 问题,但无法保证 CPU 较高的工作速度;另一种方法是采用存取速度较快的 SRAM 做主存, 却又大幅度提升了系统成本。如何在不大增加系统成本的前提下又能保证系统性能的提升? 人们开始对大量典型程序运行情况进行分析,结果表明:在一个较短的时间间隔内,由程序 产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续 的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然具有时 间上集中分布的倾向。数据分布的集中倾向虽不如指令明显,但对数组的存储和访问以及工 作单元的选择,都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而 对此范围以外的地址访问甚少的现象,称之为程序访问的局部性。根据程序访问的局部性原 理,在主存和 CPU 之间设置一个高速的、容量相对较小的存储器,该存储器包括管理在内 的全部功能都由硬件实现,如图 4-30 所示。把正在执行的指令地址附近的一部分指令或数 据从主存调入这个存储器,起到缓冲作用,以实现速度匹配。这种方法既保证了系统成本增 加不大,又保证了系统性能的有效提升,是目前计算机普遍采用的一种行之有效的技术。为 此,我们把介于 CPU 和主存之间的高速、小容量、起缓冲作用的存储器称作高速缓冲存储 器(Cache)。基于目前大规模集成电路技术和生产工艺,在 CPU 芯片内部做成一定容量的 Cache,称之为一级(L1)Cache,CPU 外部由 SRAM 构成的 Cache 称为二级(L2)Cache。 最新的 CPU 内部已经出现二级甚至三级 Cache。 图 4-30 Cache 与主存的关系 81 2、Cache 的工作原理 CPU 与 Cache 之间的数据交换是以字为单位,而 Cache 与主存之间的数据交换是以块 为单位,一个块由若干个字组成的。当 CPU 读取主存中一个字时,便发出此字的内存地址 到 Cache 和主存,Cache 控制逻辑根据地址判断此字当前是否在 Cache 中。如果在 Cache 中, 我们称之为命中,命中时 CPU 通过访问 Cache 把此字读出送给 CPU;如果不在 Cache 中, 我们称之为不命中,不命中时 CPU 用主存读周期把此字从主存读出送到 CPU,与此同时, 把含有这个字的整个数据块从主存读出送到 Cache 中。系统正是依据此原理,不断地与当前 指令集相关联的一个不太大的后继指令集从内存读到 Cache,然后再与 CPU 高速传送,从 而达到速度匹配。CPU 对存储器进行数据请求时,通常先访问 Cache,由于局部性原理不能 保证所请求的数据百分之百地在 Cache 中,这里便存在一个命中率,即 CPU 在任一时刻从 Cache 中获取数据的几率。命中率越高,从 Cache 中获取数据的可能性就越大,一般来说, Cache 的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过 大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地 增长。只要 Cache 的空间与主存空间在一定范围内保持适当比例的映射关系,Cache 的命中 率还是相当高的。一般规定 Cache 与主存空间比为 4:1000,即 128KB Cache 可映射 32MB 主存、256KB Cache 可映射 64MB 主存,在这种情况下,命中率都在 90%以上。至于没有命 中的数据,CPU 只好直接从主存获取,获取的同时,也把它拷贝到 Cache,以备下次访问。 4.3.2 Cache 的结构 Cache 通常由相联存储器实现。相联存储器的每一个存储块都具有额外的存储信息,称 为标签 Tag。当访问相联存储器时,将地址和每一个标签进行比较,从而对标签相同的存储 块进行访问。为了说明 Cache 的结构,设块的大小为 2b 个连续的字,将整个主存按块的大 小进行分块,共分为 2m 个块,其块号用 j 表示,其中 j=0,1,2,…,2m -1;将 Cache 也按 块的大小进行分块,共分为 2c 个块,其块号用 i 表示,其中 i=0,1,2,…,2c -1。地址映 射是指把主存地址空间映射到Cache地址空间的规则,即主存块与Cache 块之间的对应关系, 此规则可以表示为 i 与 j 之间的函数关系,根据 i 与 j 之间的函数关系(映射方式)的不同, 可以将 Cache 的结构分为全相联映射 Cache、直接映射 Cache、组相联映射 Cache 三种基本 结构。不同结构的 Cache 必然有与之对应的地址变换方法,所谓地址变换是指程序在实际运 行过程中,如何把主存地址变换成 Cache 地址的方法。 1、全相联映射 在全相联映射 Cache 中,地址映射函数关系为:i=j,即主存中的任意一块 j 可以映射到 Cache 中任何一块位置上。全相联映射方式如图 4-31 所示。全相联映射方式的地址变换如 图 4-32 所示。主存地址包括主存块号 j 和块内地址 w。主存块号 j 作为相联查找的关键字段, 与目录表中的主存块号字段进行比较,若找到一个与主存块号 j 相同的主存块号,并且有效 位为 1 时,则取其 Cache 块号 i 与块内地址 w 拼接在一起,形成一个 Cache 地址。如果在相 联查找中没有发现与主存块号 j 相同的主存块号,表明该主存块尚未装入 Cache,则调入该 主存块到 Cache 中,并修改目录表。 由于任何一个主存块可以存放在任何一个空闲 Cache 块的位置上,因此,全相联映射方 式发生两个主存块争用一个 Cache 块位置的冲突概率较低,Cache 的空间利用率也因此较高。 但是由于全相联映射方式的地址变换需要容量为 C 个存储字的相联存储器来存放目录表, Cache 越大,要求相联存储器的容量也越来越大,过大的相联存储器不仅价格昂贵,而且也 会降低地址变换的速度。 82 图 4-31 全相联映射方式 图 4-32 全相联映射方式的地址变换 【例 4-3】假设某计算机系统中 Cache 容量为 32KB,块大小是 16 个字节,主存容量为 1MB, 地址映射为全相联映射方式。 (1) 主存地址多少位?如何分配? (2) Cache 地址多少位?如何分配? (3) 目录表的格式和容量? 解:(1)主存地址共 20 位,1MB=220B。主存可分为 4MB/16B=216 个块,主存地址为: 块号(16 位)、块内字地址(4 位) (2)Cache 地址为 15 位:块号(11 位)、块内字地址(4 位) (3)目录表的格式为:主存块号(16 位)+Cache 块号(11 位)+有效位(1 位)。 目录表容量为 Cache 的块数,即 2KB。 2、直接映像 直接映像 Cache 中,地址映射函数关系为:i=j mod 2c,即主存中的任意一块 j 可以映射 到 Cache 中满足 i=j mod 2c 的块位置上。C 为 Cache 的块容量,将主存按 Cache 块容量大小 进行分区,可分为 P=M/C 个区,其区号用 k 表示,k=0,1,…,P-1。在直接映射方式中, 83 主存的一个区与整个 Cache 相对应,因此,Cache 的地址与主存地址中除区号外的低位地址 完全相同。主存地址由区号 k、块号 j、块内地址 w 组成,用块号 j 去访问区表存储器,把 从中读出的区号与主存地址中区号 k 进行比较,如果区号相同,并且有效位为 1 时,则命中, 主存地址中块号 j 与块内地址 w 直接作为 Cache 地址,从而访问 Cache;如果区号相同,但 有效位为 0 时,则表示 Cache 中虽然已有要访问的块,但该块与已经被修改的主存副本块内 容不一致,是一个作废的块,需要再从主存中调入并重写该块,并且重写后将有效位置 1。 如果区号不相同,并且有效位为 1 时,则表示没有命中,但该块为有效块,需要把该块调出, 写入主存,并修改主存中相应的副本块;如果区号不相同,并且有效位为 0 时,则表示没有 命中,可以直接调入所需要的新块。 直接映射方式的地址变换如图 4-33 所示。主存地址由三部分组成,末 b 位为字块内地 址,中间 c 位为 Cache 字块地址,高 t 位(t=m-c)是主存字块标记,也就是记录在相应 Cache 字块标记中的内容,当有效位为“1”时,表明该数据块是主存中一块数据的副本。Cache 在接收到 CPU 送来的主存地址和读写命令后,用中间 c 位字段找到对应的 Cache 中字块, 然后将其标记与主存地址的高 t 位比较,如果两者相等,而且有效位为“1”,则可根据 b 位块内地址,从 Cache 中取得所需的指令或数据;如果两者不相等,或者有效位为“0”, 就从主存读出新的字块替换 Cache 中旧的字块,同时修改 Cache 中标记,并将数据送给 CPU。 图 4-33 直接映射方式地址变换 直接映射方式映射函数简单,实现的硬件简单,地址变换速度快,一旦命中且有效,主 存地址中除区号外的低位地址直接变换成 Cache 的地址。但也存在比较突出的缺点,Cache 的利用率不高,其原因是,当两个以上的主存块映射到相同的 Cache 块位置而发生冲突时, 即使其他 Cache 块位置空闲也不能被利用。 【例 4-4】假设某计算机系统中 Cache 容量为 64KB,块大小是 16 个字节,主存容量为 4MB, 地址映射为直接映射方式。 (1) 主存地址多少位?如何分配? (2) Cache 地址多少位?如何分配? (3) 目录表的格式和容量? 解:(1)主存地址共 22 位,4MB=222B。主存可分为 4MB/64KB=64 个区,每个区的块 84 数为:64KB/16=4KB,因此,主存地址为:区号(6 位)、块号(12 位)、块内字地 址(4 位)。 (2)Cache 地址为 16 位:块号(12 位)、块内字地址(4 位) (3)目录表的格式为:区号(6 位)+有效位(1 位)。目录表容量与缓冲块容量相同, 4KB。 3、组相联映射 组相联映射 Cache 是介于全相联映射 Cache 和直接映射 Cache 之间的一种结构,是目前 采用较多的一种地址映射方式。组相联映射方式是把整个主存按 Cache 的容量 C 进行分区, 区号为 k,每个区和 Cache 再按同样大小划分成数量相等的组,组号为 g,组内再划分成块, 主存的组到 Cache 的组之间采用直接映射方式,对应组内各个块之间采用全相联映射方式。 用于地址变换的块表容量与 Cache 的块容量相等,块表的字长包含主存地址的区号、组内块 号、Cache 地址的组内块号、1 位有效位。组相联映射方式的地址变换如图 4-34 所示。主存 地址由区号 k、组号 g、组内块号 j、块内地址 w 组成,用组号 g 去访问块表存储器,从中 读出一组字,字数为组内的块容量。把这些字中的区号和块号与主存地址中区号 k 和块号 j 进行相联比较,如果发现有相等的,则表示 Cache 中已有要访问的块,若有效位为 1,则命 中,从这个字中取出 Cache 的块号 i 与主存地址中的组号 g 与块内地址 w 拼接起来形成 Cache 地址;如果相联比较不等或有效位为 0,则不命中,应调入新块。 图 4-34 组相联映射方式的地址变换 【例 4-5】假设某计算机系统中 Cache 容量为 32KB,块大小是 64 个字节,缓存共分 128 个 组,主存容量为 1MB,地址映射为组相联映射方式。 (1) 主存地址多少位?如何分配? (2) Cache 地址多少位?如何分配? (3) 块表的格式和容量? 解:(1)主存地址共 20 位,1MB=220B。主存可分为 1MB/32KB=25 个区,区号为 5 位; Cache 共分 128 个组,组号为 7 位;块内地址 w 为 6 位;块号为 32KB/128/64=22,即 2 位。 (2)Cache 地址为 16 位:组号(6 位)、块号为(2)、块内字地址(6 位) 85 (3)目录表的格式为:区号(5 位)+主存组内块号(2)+Cache 组内块号(2)+有效 位(1 位)。块表容量与 Cache 的块容量相同,即:组数×组内块数=128×4=512。 4.3.3 Cache 的读写过程 1、Cache 的读过程 当 CPU 发出读请求时,如果 Cache 命中,通过地址变换,就可以直接对 Cache 进行读 操作,不需要对主存进行读操作;如果 Cache 未命中,则 CPU 直接对主存进行读操作,同 时将相应的块调入到 Cache,若此时 Cache 已满,如何将 Cache 中的某块调出,把新块调入? 这就需要替换策略。常用的替换算法有以下四种。 (1)随机算法(Random,RAND) 随机算法是一种最简单的替换算法,不考虑 Cache 中块的过去、现在和将来的使用情况, 随机地选择一块进行替换。 (2)先进先出算法(First-In First-Out,FIFO) 先进先出算法是按调入 Cache 的先后顺序,在需要替换时将最先调入 Cache 中的块替换 掉。这种方法容易实现,而且系统开销较小。 (3)最近最少使用算法(Least Recently Used,LRU) 最近最少使用算法是根据块的使用情况,将 CPU 最近最少使用的块作为被替换的对象。 这种替换方法需要随时记录 Cache 中各个块的使用情况,以便确定 Cache 中哪一个块是最近 最少使用的块。LRU 算法相对比较合理,但实现起来较为复杂。为此,有人提出最久未使 用算法(Least Frequently Used,LFU),将“使用的多少”问题转换为“有没有使用”, 从而把算术问题转换成逻辑记录问题,简化了算法的实现过程,从而被广泛应用。 (4)最优化算法(OPTimization,OPT) 最优化算法是一种以将来使用最少作为替换目标的算法,该算法是一种理想化算法,现 实中很少使用,它常被用来评价其他替换算法优劣的标准。 2、Cache 的写过程 当 CPU 发出写请求时,如果 Cache 未命中,则 CPU 直接对主存进行写操作,与 Cache 无关;如果 Cache 命中,就会出现如何保持 Cache 中的内容与主存中内容的一致性问题,一 般的处理方法有如下两种。 (1)写直达法(Write-Through) CPU 同时写主存和 Cache,以保证主存的数据能同步地更新。这种方法实现简单,但可 能增加多次不必要的主存写入。 (2)回写法(Write-Back) 将 CPU 要写的信息暂时只写入 Cache,并用标志将该块注明,直到该块从 Cache 中替 换出去时才一次写回主存。这种方法操作速度快,但因主存中的字块未经随时修改而有可能 出错。 4.4 虚拟存储器 4.4.1 概述 1、虚拟存储器 虚拟存储器(Virtual Memory)是建立在主存—辅存的物理结构基础之上,不断发展 完善,逐步形成的。早期具有辅存的存储系统并不是虚拟存储器,这是因为用户最多只允许 使用主存容量,而实际上用户编程所用空间要比主存容量小的多。用户编程要想超出可使用 的主存空间范围,就必须对程序进行对准分段。对于哪段存放在主存、哪段存放在辅存、何 时从辅存调入主存、又何时从主存调出到辅存、存储空间如何分配、地址如何编写等一系列 问题,都要求编程人员认真考虑并事先在程序中安排;在多道程序和多用户分时系统的运行 86 情况下,还往往会发生用户竞争存储空间的矛盾;随着计算机规模的扩大和复杂程度的增加, 用户的负担日益加重。如何让用户从繁重的负担中解脱出来,不再去考虑主存空间大小、主 存与辅存的差别等,用户编程可以随意使用存储空间,在用户心目中,计算机系统有一个大 容量、高速度、可满足要求、使用方便的存储器,而没有主存、辅存之分,于是便产生了虚 拟存储器的概念。所谓虚拟存储器是指主存—辅存层次,它以透明的方式给用户提供了一个 比实际主存空间大得多的程序地址空间。 2、虚地址与实地址 用户编程时所用的地址称虚拟地址或逻辑地址,简称虚地址。虚地址的全部集合构成的 地址空间称为虚拟地址空间或逻辑空间,实际的主存地址称为物理地址或实地址,实地址对 应的空间为主存空间或物理空间,其容量为主存容量或实存容量。对于虚拟存储器,程序运 行中每次访问主存时,都必须进行虚、实地址的变换。 3、虚拟存储器与 Cache 的比较 主存—辅存层次与 Cache—主存层次是两种不同的层次,有很多相似之处,他们所采用 的地址变换、地址映射方式、替换策略等,在原理上看是相同的,都是基于程序局部性原理, 而不同之处在于:Cache 用于弥补主存与 CPU 之间的速度差距,而虚拟存储器用来弥补主 存与辅存之间的容量差距;Cache 与主存之间每次传送是以块为单位,块的大小只有几十个 字节,而虚拟存储器的信息传送单位可以是页、段等,长度很大,几百至几百 K 字节;主 存的访问速度比 Cache 慢 5~10 倍,而辅存比主存要慢上千倍,因此,CPU 访问未命中时, 系统的相对性能损失有很大不同,在虚拟存储器中未命中时性能损失远远大于 Cache 中未命 中性能损失。 4、虚拟存储器的管理方式 由于主存—辅存层次的基本信息传送单位可以采用段、页、段页几种不同方案,因此, 虚拟存储器的存储管理方法也就相应存在段式管理、页式管理和段页式管理。 (1)段式管理 段式管理是把主存按段分配的存储管理方式。段是指逻辑结构相对独立的部分,例如子 程序、数据表等。段作为独立的逻辑单位可以被其他程序段调用,形成规模较大的程序。因 此,段作为基本信息单位在主存—辅存之间传送和定位是比较合理的。段的逻辑独立性易于 编译、管理、修改和保护,也便于多道程序的共享;某些类型的段(堆栈、队列)具有动态 可变长度,允许自由调度以便有效利用主存空间。但由于段的长度各不相同,段的起点和终 点不定,给主存空间分配带来麻烦,而且容易在段间留下许多空余的零碎存储空间不好利用 而造成浪费。各个段在主存的位置是由段表指示的,段表包括段起址、段长和控制位组成。 (2)页式管理 针对段式管理会在主存中各个段之间留下一些不好利用的空余零碎空间,有人提出了页 式管理方式。所谓页式管理是指把主存的物理空间和辅存的逻辑空间按页(一定长度的区域) 划分并进行管理。各个页在主存中的位置由页表指示,页表包括实页号和控制位组成。页作 为主存—辅存之间基本信息传送单位,唯一可能造成浪费的是程序最后一页零头的页内空 间。由于页不是逻辑上独立的实体,所以,处理、保护、共享都不及段式管理方便。 (3)段页式管理 段页式管理兼顾前两种管理方式的优点,是将程序按模块分段,段再分页,进入主存仍 以页为基本信息传送单位,用段表和页表进行两级定位的管理方式。 4.4.2 页式虚拟存储器 在页式虚拟存储器中,设虚拟空间分成 m 个逻辑页,其逻辑页号为 0,1,2,…,m-1; 主存空间也按同样大小分成 n 个物理页,其物理页号为 0,1,2,…,n-1。显然,m>n, 由于页的大小都为 2 的整数幂个字,所以,页的起点都落在低位字段为零的地址上。因此, 87 虚地址分为两个字段:高位字段为逻辑页号,低位字段为页内行地址。同样,实地址也分为 两个字段:高位字段为物理页号,低位字段为页内行地址。由于页面大小相同,所以虚地址 与实地址中页内行地址是相同的。 虚地址到实地址的变换是通过页表来实现的。在页表中,每一个逻辑页号都对应一个表 目,表目内容包括该逻辑页所在主存的物理页号和一些控制位,用其中的物理页号与虚地址 中的页内行地址拼接成实地址,据此来访问主存。页式虚拟存储器的地址变换如图 4-35 所 示。 图 4-35 页式虚拟存储器的地址变换过程 通常页表中的一些控制位包括装入有效位、修改位、替换控制位等,其中如果装入有效 位为 1,表示该逻辑页已在主存;如果装入有效位为 0,表示该逻辑页尚未调入主存,CPU 如果访问该页,就会页面失效中断,启动输入输出系统,将辅存中的逻辑页调入到主存;修 改位用来指示主存页面中的内容是否被修改过,若修改位为 1,表示该物理页修改过,在该 物理页被替换时必须写回主存;替换控制位是用来指出需替换的页。 假设页表已保存或已调入主存,在访问存储器时,首先要查页表,即使页表命中,也得 先访问一次主存去查页表,形成实地址后再访问一次主存才能取出数据,相当于访问两次主 存。如果页面失效,还要进行页面替换、页面修改,访问主存的次数将会更多。因此,把页 表的最活跃部分存放在一个高速存储器中组成一个快表,这是减少时间开销的一种方法。一 种由快表和慢表组合实现地址变换如图 4-36 所示。快表由硬件组成,它比页表小得多,仅 仅是慢表的一个小小副本。查表时,由逻辑页号同时去查快表和慢表,当在快表中找到此逻 辑页号时,就能很快地形成实地址,并使慢表的查找作废;如果在快表中找不到此逻辑页号, 那就要访问一次主存去查慢表,形成实地址,同时将此逻辑页号和对应的物理页号送入快表, 替换快表中的内容,这也要用到替换算法。 4.4.3 段式虚拟存储器 在段式虚拟存储器中,段是按程序的逻辑结构划分的,各个段的长度因程序而异,因此 虚地址是由段号和段内地址组成。虚地址到实地址的变换是通过段表来实现的。在段表中, 每一个段号都对应一个表目,表目内容包括段起址、段长和一些控制位,用其中段起址与虚 地址中的段内地址相加成实地址,据此来访问主存。段式虚拟存储器的地址变换如图 4-37 所示。 88 图 4-36 快表和慢表组合实现地址变换 图 4-37 段式虚拟存储器地址变换过程 4.4.4 段页式虚拟存储器 段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合,是把程序按逻辑单位进 89 行分段,再把每个段分成固定大小的页。程序对主存的调入调出是按页面进行的,但它又可 以按段实现共享和保护。因此,它兼备了段式虚拟存储器和页式虚拟存储器的优点。其缺点 是地址变换过程中需要多次查表。在段页式虚拟存储器中,每道程序是通过一个段表和一组 页表来进行定位的。段表中的每一个表目对应一个段,表目的内容包括该段的页表起始地址 和该段的控制保护信息。由页表指明该段的各个页在主存中的位置以及是否装入、已修改等 状态信息。 多道程序的每一道程序需要一个基号(用户标志号、程序标志号),由它指明该道程序 的段表起始地址(存放在基址寄存器中),因此,虚地址由基号、段号、页号、页内地址组 成。下面通过举例来说明虚地址到实地址的变换过程。 【例 4-6】假设有三道程序(用户标志号为 A、B、C),其基址寄存器内容分别为 SA、SB、 SC,虚地址到实地址的变换过程如图 4-38 所示。在主存中每道程序都有一张段表,A 程序 有 4 段,C 程序有 3 段。每段应有一张页表,段表的每行就表示页表的起始位置,而页表的 每行为相应的物理页号。 解:①根据基号 C,执行 SC+段号(1)操作,得到段表相应的行地址,其内容为页表 的起始地址 b ②执行 b+页号(2),得到物理页号的地址,其内容为物理页号(10) ③物理页号与页内地址拼接成物理地址 由此可见,段页式虚拟存储器由虚地址到实地址的变换至少需要查两次表,一次段表和 一次页表。段、页表构成表层次,表层次并不只是段页式存在,页表也存在,这是因为整个 页表是连续存储的,当一个页表的大小超过一个页面大小时,页表就可能分成几个表,分存 于几个不连续的主存页面中,然后,将这些页表的起始地址又放入一个新的页表中,从而形 成了二级表层次。一个大的程序可能需要多级页表层次。对于多级页表层次,在程序运行时, 除了第一级页表需驻留在主存外,整个页表中只需有一部分是在主存中,大部分可存于外存, 需要时再由第一级页表调入,从而减少每道程序占用的主存空间。 图 4-38 段页式虚拟存储器地址变换过程 4.4.5 替换算法 在 Cache 中我们讨论过替换算法,在虚拟存储器中仍然存在替换问题,当 CPU 访问主 存而产生页面失效(缺页)时,若主存页面已全部被占满,必须采用替换算法将主存中的某 页进行替换。虚拟存储器中的替换与 Cache 中的替换有很多相似之处,但也存在明显的不同, 90 主要表现在两个方面,一是缺页至少要涉及一次磁盘存取,以读取所缺的页,因此缺页使系 统蒙受的损失比 Cache 未命中大得多;二是页面替换的选择余地大,属于一个进程的页面都 可替换。为了换取更高的命中率,虚拟存储器中的替换策略一般采用 LRU 算法、LFU 算法、 FIFO 算法。 对于将被替换出去的页面是否要进行某些处理?由于主存中的每一个页在辅存中都留 有副本,假如该页调入主存后没有被修改过,那么就不必进行处理,否则,应该把该页重新 写入辅存,以保证辅存中数据的正确性。为此,页表中专门设置有修改控制位,当该页刚调 入主存时,此控制位为 0;当对该页进行写操作时,此控制位置 1。在该页被替换时,检查 其修改控制位是否为 1,如果为 1,则先将该页从主存写入辅存,然后再从辅存接收新的一 页;如果为 0,直接从辅存接收新的一页。 在虚拟存储器中,为了实现逻辑地址到物理地址的转换,并在页面失效时进行合理有效 的管理,专门设置了由硬件实现的存储器管理部件 MMU。 关 联 存储器 半导体存储器 (主存) 高速缓冲存储器 (Cache) 虚拟存储器 (辅存) 存储元 存储器 芯 片 主存扩展 方 法 动态存储元 只读存储元 芯片组成与结构 静态存储器芯片(SRAM) 动态存储器芯片(DRAM) 只读存储器芯片(ROM) 位扩展法 字扩展法 字位扩展法 局部性原理 映射方式 替换与写策略 管理方式 地址变换 直接映射 全相联映射 组相联映射 段式虚拟存储器 页式虚拟存储器 段页式虚拟存储器 静态存储元 91 习 题 4.1 判断题 (1)外存比内存的存储容量大、存取速度快。( ) (2)动态 RAM 和静态 RAM 都是易失性半导体存储器。( ) (3)Cache 是内存的一部分,它可由指令直接访问。( ) (4)引入虚拟存储系统的目的,是为了加快外存的存取速度。( ) (5)多体交叉存储器主要是为了解决扩充容量问题。( ) (6)数据引脚和地址引脚越多,芯片的容量越大。( ) (7)存储芯片的价格取决于芯片的容量和速度。( ) (8)要访问 DRAM,应首先给出RAS地址,之后再给出CAS地址。( ) 4.2 选择题 (1)内存储器用来存放( )。 A、 程序 B、 数据 C、 微程序 D、 程序和数据 (2)某一静态 RAM 芯片,其容量为 64K×1 位,则其地址线有( )。 A、 64 条 B、 64000 条 C、 16 条 D、 64436 条 (3)需要定期刷新的存储芯片是( )。 A、EPROM B、DRAM C、SRAM D、EEPROM (4)( )存储芯片是易失性的。 A、 SRAM B、 UV-EPROM C、 NV-RAM D、 EEPROM (5) 有RAS和CAS引脚的存储芯片是( )。 A、 EPROM B、 DRAM C、 SRAM D、三者都不是 (6)下面叙述不正确的是( )。 A、半导体随机存储器可随时存取信息,掉电后信息丢失 B、在访问随机存储器时,访问时间与单元的物理位置无关 C、内存储器中存储的信息均是不可改变的 D、随机存储器和只读存储器可以统一编址 (7)动态 RAM 与静态 RAM 相比,其优点是( )。 A、动态 RAM 的存储速度快 B、动态 RAM 不易丢失数据 C、在工艺上,比静态 RAM 的存储密度高 D、控制比静态 RAM 简单 (8)某 512×8 位 RAM 芯片采用一位读/写线控制读写,该芯片的引脚至少有( )。 A、17 条 B、19 条 C、21 条 D、22 条 (9)下列存储器中,存取速度最慢的是( )。 A、 半导体存储器 B、 光盘存储器 C、 磁带存储器 D、 硬盘存储器 (10)在主存储器和 CPU 之间增加 Cache 的主要目的是( )。 A、 降低整机系统的成本 B、 解决 CPU 和主存之间的速度匹配问题 C、 扩大主存容量 D、 替代 CPU 中的寄存器工作 (11)采用虚拟存储器的主要目的是( )。 A、 提高主存储器的存取速度 B、 扩大主存储器的存储空间,并能进行自动管理和调度 C、 提高外存储器的存取速度 92 D、 扩大外存储器的存储空间 (12)某计算机的字长是 32 位,其存储容量是 32MB,若按字编址,它的寻址范围是( )。 A、 0~8MB B、 0~32M C、 0~32MB D、 0~8M (13)在 Cache 的地址映射中,若主存储器中的任意一块均可映射到 Cache 内的任意一块的 位置上,则这种方法称为( )。 A、 直接映射 B、 组相联映射 C、 全相联映射 D、 混合映射 4.3 填空题 (1)采用 4K×4 位的静态 RAM 存储芯片扩展 32KB 的存储模块,需要存储芯片数为▁▁▁▁ 片。 (2)存储器的技术指标有▁▁▁▁、▁▁▁▁、▁▁▁▁和▁▁▁▁等。 (3)CPU 能直接访问▁▁▁▁和▁▁▁▁,但不能直接访问▁▁▁▁。 (4)Cache 存储器的主要作用是解决▁▁▁▁▁。 (5)存储器的取数时间是衡量主存▁▁▁▁的重要指标,它是从▁▁▁▁到▁▁▁▁的时 间。 (6)某存储器数据总线宽度为 32 位,存取周期为 250ns,则其带宽是▁▁▁▁▁ (7)Cache 的地址映像方式有▁▁▁▁▁、▁▁▁▁▁和▁▁▁▁▁三种。 (8)虚拟存储器处于▁▁▁▁▁层次,它给用户提供了一个比实际▁▁▁▁空间大得多的 ▁▁▁▁空间。 4.4 静态 MOS 存储器与动态 MOS 存储器存储信息的原理有何不同?为什么动态 MOS 存储 器需要刷新?一般有哪几种刷新方式? 4.5 某一动态 RAM 芯片(64K×1 位),采用地址复用技术,则除了电源和地引脚外,该芯片 还有哪些引脚?各为多少位? 4.6 在页模式 DRAM 中,“打开一页”指什么?在打开一页的操作中,信号RAS和CAS的 作用是什么? 4.7 DRAM 的 tRC 和 tRAC 指什么?两者有何不同? 4.8 假设某存储器地址为 22 位,存储器字长为 16 位,试问: (1)该存储器能存储多少字节信息? (2)若用 64K×4 位的 DRAM 芯片组成该存储器,则需多少片芯片? (3)在该存储器的 22 位地址中,多少位用于片间寻址?多少位用于片内寻址? 4.9 某 8 位计算机采用单总线结构,地址总线 17 根(A16…A0,),数据总线 8 根,双向(D7…D0), 控制信号 W/R (高电平为读,低电平为写)。已知该机存储器地址空间从 0 连续编址,其 地址空间分配如下:最低 8KB 为系统程序区,由 ROM 芯片组成;紧接着 40KB 为备用区, 暂不连接芯片;而后 78KB 为用户程序和数据空间,用静态 RAM 芯片组成;最后 2KB 用于 I/O 设备(与主存统一编址)。现有芯片如题图 4.9 所示。 SRAM:16K×8 位,其中CS为片选信号,低电平有效;WE 为写控制信号,低电平写,高 电平读。 ROM:8K×8 位,其中CS为片选信号,低电平有效;OE 为读出控制,低电平读出有效。 译码器:3-8 译码器,输出低电平有效; EN 为使能信号,低电平时译码器功能有效。其他 与、或等逻辑门电路自选。 93 CS WE CS WE EN 0Y 1Y 2Y 3Y 4Y 5Y 6Y 7Y 题图 4.9 (1)请问该主存需多少 SRAM 芯片? (2)试画出主存芯片与 CPU 的连接逻辑图。 (3)写出各芯片地址分配表。 4.10 已知某 8 位机的主存采用 4K×4 位的 SRAM 芯片构成该机所允许的最大主存空间,并 选用模块板结构形式,该机地址总线为 18 位,问: (1)若每个模块板为 32K×8 位,共需几个模块板? (2)每个模块板内共有多少块 4K×4 位的 RAM 芯片?画出一个模块板内各芯片连接的逻 辑框图。 (3)该主存共需要多少 4K×4 位的 RAM 芯片?CPU 如何选择各个模块板? 4.11 64K×1 位 DRAM 芯片通常制成两个独立的 128×256 阵列。若存储器的读/写周期为 0.5 μ s,则对集中式刷新而言,其“死区”时间是多少?如果是一个 256K×1 位的 DRAM 芯片,希望能与上述 64K×1 位 DRAM 芯片有相同的刷新延时,则存储阵列应如何安排? 4.12 访问主存的地址是 20 位(A19…A0),数据总线为 8 位,分别计算下列各种情况下标识 cache 和数据 cache 的大小,并画出对应的结构框图。 (1)全相连映像,内容 cache 大小为 1024 (2)直接映像,A15…A0 作为索引 (3)2 路组相连映像,A14…A0 作为索引 (4)4 路组相连映像,A13…A0 作为索引 (5)8 路组相连映像,A12…A0 作为索引 94 第 5 章 指令系统 【内容摘要】 指令系统是指计算机所能执行的全部指令的集合,也称为指令集,它不仅是计算机硬件 设计的依据,还是软件设计的基础,因此,一台计算机指令系统的优劣直接影响着计算机系 统的性能和功能。本章将围绕机器指令探讨指令的格式和长度、操作码编码技术、地址码寻 址技术,结合指令的分类和功能,剖析复杂指令系统和精简指令系统。 【学习要点】 ● 指令的基本格式 ● 固定长度的操作码编码和可变长度的操作码编码 ● 指令的寻址方式和操作数的寻址方式 ● 复杂指令系统和精简指令系统 5.1 指令系统与性能 5.1.1 指令与指令系统 指令是指示计算机去执行某种操作的命令。如果命令是二进制代码形式,则相应的指令 为机器指令,机器指令是计算机能直接识别并执行的指令,而用任何其他形式的指令或语言 所编写的程序必须通过“翻译”或“编译”,编译成机器语言程序,才能在计算机中运行。 指令系统则是指计算机所有机器指令的集合,也称指令集(Instruction Set)。它是面向机器 的,不同的计算机具有不同的指令系统,反过来讲,不同的指令系统决定了计算机不同的性 能和功能。随着计算机的发展和应用领域的不断扩大,指令系统越来越丰富,机器指令的数 量成倍增长,多达成百上千条指令,如此庞大的指令系统我们称之为复杂指令系统(CIS), 具有复杂指令系统的计算机称为复杂指令系统计算机(CISC)。CISC 就是采用复杂的指令 系统,来达到增强计算机的功能、提高速度的目的。经过对 CISC 指令使用频率的测试分析, 发现只有占指令系统 20%的指令是常用的,剩余 80%的指令在程序中出现的概率大约 20%。 测试结果表明:花费巨大代价所增加的复杂指令只有 20%左右的使用率,这将造成计算机 硬件资源的巨大浪费。为此,人们开始考虑能否用最常用的 20%左右的简单指令来组合实 现不常用的 80 %的指令,于是,出现了精简指令系统(RIS)和精简指令系统计算机(RISC)。 精简指令系统(RIS)是对复杂指令系统(CIS)进行简化和优化,使机器结构简化的同时, 有效地提高机器的性能、速度和性能价格比。 5.1.2 指令系统的性能 指令系统的性能将决定计算机的基本功能,因此,指令系统的设计是计算机系统设计的 一个核心问题,它不仅与计算机的硬件紧密相关,而且直接影响到用户的使用。一个完善的 指令系统应满足以下几个方面的要求: 第一是完备性:要求机器的指令系统丰富,且功能齐全。 第二是有效性:有效性是指用指令系统中的指令所编写的程序能被高效率地运行。高效 率表现在程序所占存储空间小、执行速度快。 第三是规整性:规整性包括指令系统的对称性、均匀性、一致性。对称性是指寄存器与 存储器的对称,能对寄存器操作的指令同样能对存储器操作。均匀性是指各种数据类型适用 于一种操作性质的指令。一致性是指指令长度和数据长度通常是字节的整数倍。 第四是兼容性:兼容性是指“向上兼容”,即抵挡机上运行的软件可以在高档机上运行。 第五是可扩展性:可扩展性是指保留一定余量的操作码空间,便于扩展指令使用。 95 5.2 机器指令 5.2.1 机器指令的格式 根据指令的概念,一条机器指令形式上是一串二进制代码,我们通常把表示机器指令的 这一串二进制代码称为指令字。作为一个指令字,不仅要表示出指令所进行的某种具体操作, 还要表示出指令对谁操作以及操作结果的去向,即指令的操作对象。因此,任何一条机器指 令都有两部分组成:一部分是操作码,另一部分是地址码。其格式如图 5-1 所示。 操作码(OP) 地址码(A) 图 5-1 机器指令的基本格式 操作码 OP:是指令所进行的具体操作的编码。不同的指令相应的操作和功能不同,则 需要用不同的操作码来表示。因此,操作码的长度与机器所能执行操作的多少有关。 地址码 A:是指令操作对象的地址编码。它是一个广义的概念,它不仅可以是操作对象 的存储地址,还可以是操作对象本身。因此,地址码的长度与存储器的容量、寄存器的多少、 机器的长度有关。 5.2.2 指令字的长度 指令字的长度是指一个指令字所包含的二进制代码的位数。结合机器指令的格式,指令 字的长度取决与操作码的长度、地址码的长度和地址码的个数,因此,影响指令字长度的因 素有多种,不同指令系统的指令长度各不相同,同一个指令系统的不同指令其长度也不尽相 同,但为了便于存储,指令字的长度与机器字长之间具有一定的匹配关系,通常指令长度设 计为字节的整数倍。例如 8086/8088CPU 的指令系统,最短的指令长度为 1 个字节,最长的 指令长度为 6 个字节;再如奔腾系列机的指令系统,最短的指令长度为 1 个字节,最长的指 令长度为 12 个字节。由于指令的长度不尽相同,我们不仅可以将指令按其长度进行分类, 还可以将指令系统进行分类。如果指令的长度等于机器的字长,这样的指令称为单字长指令; 如果指令的长度等于两倍的机器字长,这样的指令称为双字长指令;还可以分为更多倍字长 的指令以及半字长指令等。如果指令系统中各种指令字的长度均固定,则称为定长指令字结 构;如果指令系统中各种指令字的长度随指令功能而异,则称为可变长指令字结构。 定长指令字结构:结构简单,指令的译码时间短,有利于硬件控制系统的设计,多用于 机器字长较长的大、中型计算机和精简指令系统计算机。但指令字的长度普遍较长,冗余现 象严重,不利于指令扩展。 可变长指令字结构:结构灵活,能充分利用指令中的每一位,信息冗余少,平均指令长 度短,易于指令的扩展。但指令格式不规整,硬件控制系统复杂。 5.2.3 机器指令的分类 机器指令不仅可以按其长度划分为单字指令、双字指令和多字指令,还可以按指令中地 址码的多少将机器指令划分为:零地址指令、单地址指令、双地址指令和多地址指令。 1、零地址指令 零地址指令的指令字中只有操作码,而没有地址码。其格式为: OP 零地址指令有以下两种情况: 第一是指令不需要操作对象,也就不需要地址码,例如停机指令、空操作指令等。 第二是指令需要一个操作对象,但这个操作对象可以隐含,从而指令的地址码也隐含, 例如对堆栈、累加器操作的指令。指令功能为:OP(AC)→AC。 2、单地址指令 单地址指令的指令字中只有一个地址码 A,也称为一地址指令。其格式为: OP A 96 单地址指令有以下两种情况: 第一是指令有一个操作对象,并且这个操作对象不能隐含,必须用一个地址码表示,例 如加 1 指令、减 1 指令等。指令功能为:OP(A)→A。 第二是指令有两个操作对象,其中一个操作对象隐含,通常指累加器(AC),另一个用 一个地址码表示,例如加法指令、减法指令等。指令功能为:(AC)OP(A)→AC。 3、双地址指令 双地址指令的指令字中有二个地址码 A1 和 A2,也称为二地址指令。其格式为: OP A1 A2 双地址指令的指令功能为:(A1)OP(A2)→A1 或(A1)OP(A2)→A2 双地址指令可以分为三种指令类型: (1)S—S 型指令 即存储器—存储器型指令,是指指令中两个操作对象都是存储器,用地址码 A1 和 A2 进行表示, A1、A2 为主存地址。 (2)R—R 型指令 即寄存器—寄存器型指令,是指指令中两个操作对象都是寄存器,用地址码 R1 和 R2 进行表示, R1、R2 为寄存器地址。 (3)R—S 型指令 即寄存器—存储器型指令,是指指令中两个操作对象一个是寄存器,一个是存储器,用 地址码 R 和 A 进行表示, R为寄存器地址,A 为主存地址。 在以上三种指令类型中,R—R 型指令在被执行过程中不需要访问存储器,执行速度最 快,因此是双地址指令中最常用的一种指令格式,尤其在 RISC 中,所有运算指令均为 R— R 型指令。 4、三地址指令 三地址指令的指令字中有三个地址码 A1、A2 和 A3,也称为多地址指令。其格式为: OP A1 A2 A3 三地址指令的指令功能为:(A1)OP(A2)→A3 三地址指令的指令字较长,多用于字长较长的大、中型计算机中,小型机和微型机很少 使用。 5.3 操作码的编码方法 操作码是机器指令的重要组成部分,是对指令所执行操作的编码,指令不同其操作码也 不同,具体表现在:操作码长度相同,操作码不同或操作码长度不同。所以,按指令字中操 作码的长度是否相同或固定,可以将操作码的编码分为固定长度的定长编码和可变长度的变 长编码两种。 5.3.1 定长编码 定长编码是最简单的操作码编码方法。由于操作码的长度和位置在指令字中是固定的, 有利于简化指令结构和减少指令的译码时间,适用于字长较长的大、中型计算机。例如 IBM370 机,其字长是 32 位,指令分为半字长、单字长、1.5 倍字长指令类型,无论哪一种 类型的指令,其操作码的长度和位置都是固定的,由于操作码的长度固定为 8 位,指令系统 所能允许的指令条数最多为 28=256,实际上 IBM370 机只有 183 条指令,剩余的操作码编码 为非法的操作码。如果操作码的编码采用定长编码,指令字中的操作码长度取决于指令系统 中的全部指令条数。例如若指令系统中有 m 条指令,则操作码的长度 n 应满足式(5-1) n≥log2 m (5-1) 97 5.3.2 变长编码 变长编码是指指令字中操作码的长度和位置不固定,随指令的不同而存在差异。采用变 长编码方法,可以有效地压缩操作码的平均长度,在小型机和微机中被广泛采用。如小型机 PDP-11,机器字长为 16 位,指令分为单字长、双字长、三字长等指令类型,操作码占 5~6 位,且遍及整个指令字长度范围。但由于操作码长度和位置的不固定,增加了指令译码和分 析的难度,使硬件设计复杂化。 1、操作码扩展技术 在不增加指令字长度的情况下,通过采用操作码扩展技术,使操作码的长度随地址码 的减少而增加,这样一来,对于地址码个数不同的指令,可以具有不同长度的操作码,从而 可以充分利用指令字的地址码,使有限的指令字长度可以表示更多的指令。 设机器指令字长度为 16 位。其中操作码为 4 位,地址码为 4 位。指令格式为: OP A1 A2 A3 如果采用定长编码,4 位操作码只能表示 16 条三地址指令。如果指令系统中除三地址 指令外,还有二地址、一地址和零地址指令,且要求有 15 条三地址指令、15 条二地址指令、 15 条一地址指令和 16 条零地址指令,则采用定长编码方法是无法满足上述要求的,这就需 要采用变长编码方法,操作码的长度随地址码的减少而增加,具体操作码扩展如下: 【例 5-1】某机器指令字长度为 16 位。其中地址码长度为 4 位。如果指令系统中三地址指 令有 11 条、二地址指令有 72 条、零地址指令有 64 条。问最多还能设计多少条一地址指令? 解:对于三地址指令:地址码共占 12 位,指令字中还剩 4 位用于操作码,其编码最多 为 24=16 个,由于实际只有 11 条三地址指令,所以还剩下 16-11=4 个编码,可用于二地址 指令。 对于二地址指令:地址码共占 8 位,指令字中还剩 8 位用于操作码,扣除三地址指令用 过的操作码,其编码最多为 5×24=80 个,由于实际只有 72 条二地址指令,所以还剩下 80-72=8 个编码,可用于一地址指令。 对于一地址指令:地址码共占 4 位,指令字中还剩 12 位用于操作码,扣除三地址指令 三地址指令操作码的编码 二地址指令操作码的编码 一地址指令操作码的编码 零地址指令操作码的编码 0000 ×××× ×××× ×××× 0001 ×××× ×××× ×××× ┇ 1110 ×××× ×××× ×××× 1111 0000 ×××× ×××× 1111 0001 ×××× ×××× ┇ 1111 1110 ×××× ×××× 1111 1111 0000 ×××× 1111 1111 0001 ×××× ┇ 1111 1111 1110 ×××× 1111 1111 1111 0000 1111 1111 1111 0001 ┇ 1111 1111 1111 1111 15 条三地址指令 15 条二地址指令 15 条一地址指令 16 条零地址指令 98 和二地址指令用过的操作码,其编码最多为 8×24=128 个,如果这 128 个编码都表示一地址 指令,那么指令系统中就不存在零地址指令,实际上存在有零地址指令,所以,这 128 个编 码并不都是一地址指令。究竟一地址指令还能设计多少条,这就取决于实际存在的零地址指 令条数。由于系统要求有 64 条零地址指令,而 4 位操作码只能最多表示 16 条指令,所以, 需要一地址指令提供 64/16=4 个操作码编码用于零地址指令,以保证零地址指令有 64 条。 因此,指令系统中一地址指令最多还能设计 128-4=124 条指令。 2、Huffman 编码法 Huffman 编码法是根据各种指令使用的频率不同,采用优化技术,将使用频率最高的指 令用最短的编码表示,而对于使用频率较低的指令用较长的编码表示,从而缩短操作码的平 均长度。采用 Huffman 编码法所得到的操作码的平均长度为: H =∑ = n i 1 Pi×Li 其中 Pi 是第 i 条指令使用的频率,Li 是第 i 条指令操作码的长度,n 是指令总数。 下面以 10 条指令的机器为例来说明 Huffman 编码过程。 已知 10 条指令的使用频率如表 5-1 所示。 表 5-1 指令的使用频率 指令 使用频率(pi) I0 0.30 I1 0.20 I2 0.16 I3 0.09 I4 0.08 I5 0.07 I6 0.04 I7 0.03 I8 0.02 I9 0.01 (1)Huffman 树 根据指令的使用频率,画出 Huffman 树,具体步骤: 1)按频率大小进行排列,频率相同的可任意排列。 2)把出现频率最小的两项进行合并,将其频率相加,再把相加后的频率进行重新排序。 3)重复步骤 2),直至只剩下最后两个频率,再将其合并,便形成 Huffman 树。如图 5-2 所示。 图 5-2 Huffman 树 0.15 1.00 0.39 0.19 0.10 0.06 0.03 0.31 0.61 0.010.020.030.040.070.080.090.16 0.20 0.30 99 (2)Huffman 编码过程 根据 Huffman 树,从根节点(最后两个频率形成的节点)开始编码,左分支编码为“1”, 右分支编码为“0”;各个子节点也同根节点一样,左分支编码为“1”,右分支编码为“0”, 直到末节点为止。各条指令的编码便是从根节点开始到末节点结束的一个二进制代码。如表 5-2 所示。 表 5-2 Huffman编码结果 指令 Huffman 编码法 长度 2-5-6 扩展编码法 长度 I0 11 2 11 2 I1 01 2 01 2 I2 101 3 1010 4 I3 001 3 0010 4 I4 1001 4 1001 4 I5 1000 4 1000 4 I6 0001 4 0001 4 I7 00001 5 000010 6 I8 000001 6 000001 6 I9 000000 6 000000 6 则采用 Huffman 编码法所得到的操作码平均长度为: H =∑ = n i 1 Pi×Li = (0.30+0.20)×2 + (0.16+0.09+0.08+0.07+0.04)×4 + (0.03 +0.02+0.01)×6 = 1 + 0.75 + 0.76 + 0.15 + 0.18 = 2.85 若采用定长编码,由于指令有 10 条,所以操作码的长度为 4。可见,采用 Huffman 编 码法更有效地缩短了操作码的平均长度。 3、扩展编码法 采用 Huffman 编码法能更有效地缩短操作码的平均长度,但这种编码方法所形成的操 作码很不规整,将会给译码造成极大的困难,不利于软件的编译。于是,采取了一种折中的 方案,将 Huffman 编码法与定长编码法进行有效结合,在缩短操作码平均长度的基础上, 使操作码更加规整。这种编码方法称为扩展编码法。扩展编码结果如表 5-2 所示。采用扩展 编码法所得到的操作码平均长度: H =∑ = n i 1 Pi×Li=(0.30+0.20)×2+(0.16+0.09)×3+(0.08+0.07+0.04)×4+0.03×5+(0.02+0.01)×6 = 1 +1.76 +0.36 = 3.12 5.4 地址码的寻址方式 寻址方式是指在指令被执行的过程中,根据指令字中的地址码去寻找操作对象的方式。 如果地址码所表示的操作对象是数据信息,这样的操作对象称为操作数,对应的寻址方式为 操作数寻址方式;如果地址码所表示的操作对象是指令信息,相应的寻址方式为指令寻址方 式。 5.4.1 指令寻址方式 指令寻址方式又可分为顺序寻址方式和跳转寻址方式。如图 5-3 所示。 100 1、顺序寻址方式 顺序寻址方式是采用 PC 增量的方式形成下一条指令地址。具体寻址过程如图 5-3(a) 所示,PC 称为程序计数器,是用来跟踪程序的执行并指向下一条将要被执行的指令。由于 程序在内存中是连续存放的,当程序顺序执行时,PC 的内容加上一定的增量,便形成下一 条将要被执行指令的地址,至于增量是多少,取决于指令所占存储单元的个数。 2、跳转寻址方式 跳转寻址方式是指当程序发生转移时,下一条将要执行的指令地址不再是 PC 的内容, 而是根据转移指令字中的地址码 A 去形成下一条将要执行的指令地址。具体寻址过程如图 5-3(b)所示,如果是地址码直接形成 PC,记作 A→PC,这种跳转寻址方式也称为绝对跳 转;如果是当前 PC 的内容(现行 PC 加上增量)加上地址码形成 PC,记作(PC)+A→PC, 这种跳转寻址方式也称为相对跳转。 图 5-3 指令的寻址方式 5.4.2 操作数寻址方式 操作数的存放不象指令的存放有规律,它既可以存放在寄存器、存储器和外设中,也可 以存放在指令中,因此表示操作数的地址码尽管形式上都是二进制代码,但所表示的含义各 不相同,有时代表的是地址,有时代表的是数据,往往比较复杂,一般讨论寻址方式时,主 要是讨论操作数寻址方式。下面以一地址指令为例,介绍几种最常用的基本寻址方式。一地 址指令格式如图 5-4 所示。 OP 寻址方式 MOD 形式地址 A 图 5-4 一地址指令格式 由于操作数寻址方式种类较多,所以在指令字中设置一个寻址方式 MOD 字段,用来指 明具体的寻址方式。当操作数存放在存储器中时,指令字中的地址码并不是内存的实际地址, 因此我们把它称为形式地址。形式地址必须转换成内存的实际地址,然后才能访问存储器。 内存的实际地址也称为有效地址(EA)。所以,EA 是 A 的一个函数,记为:EA=ƒ(A)。 函数ƒ不同,其寻址方式也不同。 1、立即寻址 立即寻址方式是指指令字中的地址码本身就是操作数,即操作数是 D,D 也称为立即数。 OP 立即寻址 D 立即寻址的优点:由于从存储器中取出指令的同时,操作数也被取出了,因为操作数是 101 在指令字中,所以在执行指令时,不必再次访问存储器,从而提高了指令的执行速度。但由 于指令字长度的限制,D 的位数限制了立即数的大小。 2、直接寻址 直接寻址方式是指指令字中的地址码 D(形式地址)就是操作数的有效地址,即 EA=D。 如图 5-5 所示。 图 5-5 直接寻址方式 直接寻址简单直观,便于硬件实现。但由于指令字长度的限制,形式地址 D 限制了指 令的寻址范围,随着内存容量不断扩大,要想寻址整个内存空间,势必造成指令字长度的增 加。另外在编程时,如果使用了直接寻址指令,一旦操作数地址发生变化,就必须修改指令 中的 D,给编程带来不便。 3、间接寻址 间接寻址方式是指指令字中的地址码 D(形式地址)不是操作数的有效地址,而是操作 数的有效地址的有效地址,即 EA=(D)。如图 5-6 所示。 图 5-6 间接寻址方式 与直接寻址相比,间接寻址比直接寻址灵活,使用较短的地址码可以访问较大的存储空 间。另外有利于编程,如果使用了间接寻址指令,当操作数地址发生变化时,可不必修改指 令,只需修改存放有效地址的单元内容即可。其缺点比较明显,指令的执行时间较长,因为 需要多次访问存储器。 4、寄存器直接寻址 寄存器直接寻址方式也称寄存器寻址方式,是指指令字中的地址码 R(形式地址)是某 一寄存器的编号,其寄存器的内容为指令所需的操作数,即 EA=(R)。如图 5-7 所示。 图 5-7 寄存器直接寻址方式 由于寄存器寻址方式的操作数位于寄存器中,采用寄存器寻址方式的指令在被执行时, 无需访问内存,从而减少了指令的执行时间;另外,由于内部寄存器数量有限,指令字中的 102 地址码较短,有效地缩短了指令字长度。因此,寄存器寻址方式在计算机中得到了广泛的应 用。 5、寄存器间接寻址 寄存器间接寻址方式是指指令字中的地址码 A(形式地址)是某一寄存器的编号,其寄 存器的内容不是指令所需的操作数,而是指令所需操作数的有效地址,即 EA=((R))。如 图 5-8 所示。 图 5-8 寄存器间接寻址方式 指令采用寄存器间接寻址方式时,由于操作数的有效地址存放在寄存器中,此指令在被 执行时,只需访问两次存储器,比间接寻址速度快。 6、变址寻址 变址寻址方式是指指令字中的地址码 A(形式地址)加上指令中指定的变址寄存器的内 容形成操作数的有效地址,即 EA=A+(Ri)。如图 5-9 所示。 图 5-9 变址寻址方式 指令采用变址寻址方式时,如果操作数地址发生变化时,可不必修改指令,只需按一定 增量修改变址寄存器的内容,方便实现循环程序设计。 7、基址寻址 基址寻址方式是指指令字中的地址码 D(形式地址)加上指令中指定的基址寄存器的内 容形成操作数的有效地址,即 EA=D+(Rb), 基址寄存器通常是专用的寄存器。如图 5-10 所示。 图 5-10 基址寻址方式 103 基址寻址与变址寻址有效地址的形成过程很相似,但两者的应用有着本质的区别。基址 寻址是面向系统的,用于将用户程序的逻辑地址转换成物理地址,以便实现程序的再定位, 基址寄存器的内容通常是由操作系统进行设置,不允许进行增量或减量,并对用户是透明的。 8、相对寻址 相对寻址方式是将当前 PC 的内容(现行 PC 加上增量)加上地址码(形式地址)形成 操作数的有效地址,即 EA=(PC)+D→PC,D 称为位移量,是定点整数的补码。如图 5-11 所示。 图 5-11 相对寻址方式示意图 指令采用相对寻址方式时,编程时不需要用指令的绝对地址,可以将程序放在内存的任 何地方。 9、隐含寻址 隐含寻址是指指令字中的地址码 A 隐含的。对于一地址指令而言,指令格式中地址码 A 就缺省了,尽管没有地址码,但操作数是存在的,并规定为累加器 AC。 5.5 典型的指令系统 5.5.1 复杂指令系统 1、指令类型 不同机器的指令系统是各不相同的,CISC 的指令系统一般有上百种指令,按照指令的 功能对指令进行归类,一个较完善的复杂指令系统应该包含以下 8 种指令类型。 (1)数据传送指令 数据传送指令主要包括取数指令、存数指令、传送指令、交换指令、对堆栈操作的指令 等,用来实现存储器与寄存器、堆栈之间、寄存器与寄存器、堆栈之间的数据传送。 (2)算术运算指令 算术运算指令主要包括二进制定点数的四则运算指令、十进制数的四则运算指令、浮点 数的四则运算指令、算术移位指令、比较指令、求补和求反指令等。这类指令主要用于定点 数和浮点数的算术运算。 (3)逻辑运算指令 逻辑运算指令主要包括逻辑与、逻辑或、逻辑非、逻辑移位等指令,主要用于无符号数 的位操作、代码转换、逻辑判断。 (4)串操作指令 串操作指令包括串传送指令、串比较指令、串搜索指令、串替换指令等。主要用于对字 符串和数据串的处理。 104 (5)转移指令 转移指令也称程序控制指令,主要包括无条件转移指令、条件转移指令、调用与返回指 令、中断与返回指令等,主要用来控制改变程序的执行顺序。 (6)输入输出指令 输入输出指令主要用来控制外设、检测外设的工作状态、实现对外设的数据传送。 (7)特权指令 特权指令是指具有特殊权限的指令,只用于操作系统,一般不会直接提供给用户。 (8)其它指令 其他指令主要指复位指令、停机指令、空操作指令、对状态寄存器的置位和复位指令。 综上所述,CISC 指令系统的特点有: 1)指令系统复杂庞大。表现在指令条数较多 2)指令格式多样。表现在指令字长不固定,寻址方式种类较多 3)指令的执行时间差别较大 4)大多数 CISC 采用微程序控制器 2、8086CPU 指令格式 8086CPU 指令长度可以是 l ~ 6字节,其指令格式如图 5-12 所示。其中 B1 和 B2 为基 本字节,B3 ~ B6 将根据不同指令做不同的定义。 图 5-12 8086 指令格式 (1)B1 字节各字段定义 1)OP:表示指令操作码 2)D:表示方向。D=1 时寄存器为目的操作数;D=0 时寄存器为源操作数。 3)W:表示字节或字处理方式。W=0 表示字节处理指令;W=1 表示字处理指令。 (2)B2 字节各字段定义 1)MOD:表示指令的寻址方式。8086 的一条指令中,最多可使用两个操作数,它们 不能同时位于存储器中,最多只能有一个是存储器操作数。当 MOD≠11 时为存储器方式, 即有一个操作数位于存储器中;MOD=00,没有位移量。MOD=01,只有低 8 位位移量, 需将符号扩展 8 位,形成 16 位。MOD=10 有 16 位位移量。当 MOD=11 时,为寄存器方 式,两个操作数均为寄存器。 2)REG:表示指令中只有一个操作数,这个操作数为寄存器。 3)R/M:R/M 受 MOD 制约。当 MOD=11(即寄存器方式时),由此字段给出指令中第 二个操作数所在的寄存器编码;当 MOD≠11 时,此字段用来指出应如何计算指令中使用的 存储器操作数的有效地址。MOD 和 R/M 字段表示的有效地址 EA 计算方法。 (3)B3 ~ B6 字节 1)这四个字节一般是给出存储器操作数地址的位移量(即偏移量)或立即操作数。位 移量可为 8 位,也可为 16 位,这由 MOD 来决定。8086 规定 16 位的字位移量的低位字节 放于低地址单元,高位字节放于高地址单元。 2)若指令中只有 8 位位移量,8086 在计算有效地址时,自动用 8 位位移量的符号将其 105 扩展成一个 16 位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。指令 中的立即操作数位于位移量的后面。若 B3B4 有位移量,立即操作数就位于 B5B6。若指令中 无位移量,立即操作数就位于 B3B4 字节。总之,指令中缺少的项将由后面存在的项向前顶 替,以减少指令的长度。 5.5.2 精简指令系统 1、RISC 指令系统的特点 结合表 5-3 所列出的典型 RISC 指令系统的基本特征,我们可以看出 RISC 指令系统的 最大特点: 第一是指令条数少,所选取的指令都是使用频率较高的简单指令; 第二是指令字长固定,且指令格式种类少; 第三是只有取数/存数指令可以访问存储器,其它指令的操作都在寄存器之间进行。 表 5-3 典型 RISC 指令系统的基本特征 机器型号 指令数 寻址方式 指令格式 通用寄存器数 主频/MHz RISC-1 31 2 2 78 8 MIPS 55 3 4 16 4 SPARC 75 5 3 120~136 25~33 MIPSR3000 91 3 3 32 25 i860 65 3 4 32 50 2、SPARC 机指令系统 SPARC 机是 RISC 最典型代表,机器的字长为 32 位,其指令系统有 75 条指令。 (1)指令类型和指令格式 1)SPARC 机指令类型 ① 算术运算/逻辑运算/移位指令 ② 取数(LOAD)/存数(STORE)指令 ③ 控制转移指令 ④ 读/写专用寄存器指令 ⑤ 浮点运算指令 ⑥ 协处理器指令 2)SPARC 机指令格式 SPARC 机有三种指令格式,如表 5-4 所示。 表 5-4 SPARC指令格式 31 30 29 28 0 格式 1 CALL 指令 OP Disp 30(偏移量) 31 30 29 28 25 24 22 21 0 OP a Cond OP2 Disp 22(偏移量) 格式 2 Branc 指令 SETH 指令 OP Rd OP2 imm 22(立即数) 31 30 29 25 24 19 18 15 13 12 5 4 0 OP Rd OP3 Rs1 iAs1 Rs2 OP Rd OP3 Rs1 iSimm13 格式 3 其他指令 OP Rd OP3 Rs1 OPf Rs2 其中 OP、OP2、OP3 为指令操作码,OPf 为浮点指令操作码。为了增加立即数和偏移量 的长度,调用指令 CALL、转移指令 BRANCH 和 SETHI 指令操作码缩短了,其中 SETHI 指令是将 22 位的立即数(imm22 )左移 10 位,送到 Rd 所指示的寄存器中,然后再执行一条 加法指令,以补充后面 10 位数据,从而形成 32 位字长的数据。 106 Rs1、Rs2 为通用寄存器地址,用作源操作数寄存器地址或地址寄存器地址。 Rd 为目的寄存器地址,用来保存运算结果或从存储器取来的数据。 Simm13 是 13 位扩展符号的立即数。运算时如果 Simm13 最高位是 1,则最高位前面的所 有位都扩展为 1;否则,最高位前面的所有位都扩展为 0。 i 是用来选择第二个操作数。当 i=0,第二个操作数在 Rs2 中;当 i=1,第二个操作数为 Simm13。 (2)指令功能与寻址方式 1)算术逻辑运算指令 功能:将 Rs1、Rs2 的内容(或 Simm13)按操作码规定的操作运算后结果送 Rd。 当 i=0 时,(Rs1)OP(Rs2)→Rd 当 i=1 时,(Rs1)OP Simm13→Rd 2)取数/存数指令 功能:取数指令 LOAD 将存储器中的数据送往 Rd;存数指令 STORE 将 Rd 中的数据送 往存储器。 存储器地址的计算方法如下(寄存器间接寻址): 当 i=0 时,存储器地址=(Rs1)+(Rs2) 当 i=1 时,存储器地址(Rs1)+ Simm13 3)控制转移指令 条件转移(BRANCH):由 Cond 字段决定程序是否转移,用相对寻址方式形成转移地址。 转移并连接(JMPL):将本指令的地址保存在 Rd 所指示的寄存器中,以备程序返回使用。 用寄存器间接寻址形成转移地址。 调用(CALL):采用相对寻址方式形成转移地址。 陷阱(TRAP):采用寄存器间接寻址形成转移地址。 TRAP 程序返回(RETT):采用寄存器间接寻址形成转移地址。 4)读/写专用寄存器指令 SPARC 有 4 个专用寄存器(PSR、Y、WIM、TBR),其中 PSR 称为程序状态寄存器, 其内容反映并控制机器的运行状态,非常重要,因此,读/写 PSR 指令一般是特权指令。 综上所述,对于 SPARC 机的指令系统,由于采用 RIS 技术,该机器的指令系统只设置 了 75 条指令,还有一些指令并没有选入指令系统,但很容易用指令系统中的指令去替代实 现。如表 5-5 所示。其中,表的左边列出了 6 条指令,表的右边给出了替代指令及实现方法。 (SPARC 约定 R0 的内容恒为 0) 表 5-5 RISC指令的替代与实现 指令 功能 替代指令 实现方法 MOVE 寄存器间数据传送 ADD Rs+R0→Rd INC 寄存器内容加 1 ADD imm13=1,为操作数 DEC 寄存器内容减 1 SUB imm13=-1,为操作数 NEG 求补 SUB R0-Rs→Rd NOT 逻辑非 XOR imm13=-1,为操作数 CLR 清除寄存器 ADD R0+R0→Rd 107 关 联 108 习 题 5.1 什么叫指令?什么叫指令系统?指令通常有哪几种地址格式? 5.2 什么叫指令地址?什么叫形式地址?什么叫有效地址? 5.3 什么叫寻址方式?有哪些基本的寻址方式?简述其寻址过程。 5.4 基址寻址方式和变址寻址方式各有什么不同? 5.5 设某机指令长为 16 位,每个操作数的地址码为 6 位,指令分为单地址指令、双地址指 令和零地址指令。若双地址指令为 K 条,零地址指令为 L 条,问最多可有多少条单地址指 令? 5.6 设某机指令长为 16 位,每个地址码长为 4 位,试用扩展操作码方法设计指令格式。其 中是三地址指令有 10 条,二地址指令为 90 条,单地址指令 32 条,还有若干零地址指令, 问零地址指令最多有多少条? 5.7 设某机字长为 32 位,CPU 有 32 个 32 位通用寄存器,有 8 种寻址方式,包括直接寻址、 间接寻址、立即寻址、变址寻址等,采用 R-S 型单字长指令格式,共有 120 条指令,试问: (1)该机直接寻址的最大存储空间为多少? (2)若采用间接寻址,则可寻址的最大存储空间为多少?如果采用变址寻址呢? (3)若立即数为带符号的补码整数,试写出立即数范围。 5.8 一种单地址指令格式如下所示,其中 I 为间接特征,X 为寻址模式,D 为形式地址。I、 X、D 组成该指令操作数的有效地址 E。设 R 为变址寄存器,R1 为基址寄存器,PC 为程序 计数器,请在下表中第一列位置填写适当的寻址方式。 OP I X D 寻址方式 I X 有效地址 E ① 0 00 E=D ② 0 01 E=(PC)+ D ③ 0 10 E=(R)+ D ④ 0 11 E=(R1)+ D ⑤ 1 00 E=(D) ⑥ 1 11 E=((R1)+ D),D=0 5.9 简述 RISC 的主要特点。 5.10 选择题 (1)计算机系统中,硬件能够直接识别的指令是( )。 A、机器指令 B、汇编语言指令 C、高级语言指令 D、特权指令 (2)指令系统中采用不同的寻址方式的主要目的是( )。 A、增加内存的容量 B、缩短指令长度,扩大寻址范围 C、提高访问内存的速度 D、简化指令译码电路 (3)在相对寻址方式中,若指令中地址码为 X,则操作数的地址为( )。 A、X B、(PC)+X C、X+段基址 D、变址寄存器+X (4)在指令的地址字段中直接指出操作数本身的寻址方式,称为( )。 A、隐含地址 B、立即寻址 C、寄存器寻址 D、直接寻址 (5)在一地址指令格式中,下面论述正确的是( )。 A、只能有一个操作数,它由地址码提供 B、一定有两个操作数,另一个是隐含的 C、可能有一个操作数,也可能有两个操作数 109 D、如果有两个操作数,另一个操作数一定在堆栈中 (6)在变址寄存器寻址方式中,若变址寄存器的内容是 4E3CH,给出的偏移量是 63H,则 它对应的有效地址是( )。 A、63H B、4D9FH C、4E3CH D、4F9FH (7)程序控制类指令的功能是( )。 A、进行算术运算和逻辑运算 B、进行主存与 CPU 之间的数据传送 C、进行 CPU 和 I/O 设备之间的数据传送 D、改变程序执行的顺序 (8)算术右移指令执行的操作是( )。 A、符号位填 0,并顺次右移 1 位,最低位移至进位标志位 B、符号位不变,并顺次右移 1 位,最低位移至进位标志位 C、进位标志位移至符号位,顺次右移 1 位,最低位移至进位标志位 D、符号位填 1,并顺次右移 1 位,最低位移至进位标志位 (9)下列几项中,不符合 RISC 指令系统的特点是( )。 A、指令长度固定,指令种类少 B、寻址方式种类尽量多,指令功能尽可能强 C、增加寄存器的数目,以尽量减少访存次数 D、选取使用频率最高的一些简单指令以及很有用但不复杂的指令 5.13 填空题 (1)一台计算机所具有所有机器指令的集合称为该计算机的▁▁▁▁。它是计算机与 ▁▁▁▁之间的接口。 (2)在指令编码中,操作码用于表示▁▁▁▁,n 位操作码最多可以表示▁▁▁▁条指令。 地址码用于表示▁▁▁▁。 (3)在寄存器寻址方式中,指令的地址码部分给出的是▁▁▁▁,操作数存放在▁▁▁▁。 (4)采用存储器间接寻址方式的指令中,指令的地址码字段中给出的是▁▁▁▁所在的存 储器单元地址,CPU 需要访问内存▁▁▁▁次才能获得操作数。 (5)操作数直接出现在指令的地址码字段中的寻址方式称为▁▁▁▁寻址;操作数所在的 内存单元地址直接出现在指令的地址码字段中的寻址方式称为▁▁▁▁寻址。 5.14 判断下列各题的正误 (1)利用堆栈进行算术/逻辑运算的指令可以不设置地址码。( ) (2)指令中地址码所指定寄存器的内容是操作数有效地址的寻址方式称为寄存器寻址。( ) (3)一条单地址格式的双操作数加法指令,其中一个操作数来自指令中地址字段指定的存 储单元,另一个操作数则采用间接寻址方式获得。( ) (4)在计算机的指令系统中,真正必需的指令种类并不多,很多指令都是为了提高机器速 度和便于编程而引入的。( ) (5)RISC 系统的特征是使用了丰富的寻址方式。( ) 110 第 6 章 控制器 【内容摘要】 控制器是计算机的一个重要组成部分,是计算机的指挥和控制中心,它与 CPU 密不可 分。本章我们从 CPU 功能出发,探讨其内部组成与结构,揭开 CPU 这个神秘的面纱,围绕 控制功能的实现,重点介绍微程序控制器、组合逻辑控制器和门阵列控制器的设计思想和方 法;结合典型 CPU 案例,体会采用新技术后的高性能微处理器。 【学习要点】 ● 控制器的组成及结构 ● 控制方式与指令周期 ● 控制器的设计(逻辑控制器和微程序控制器) ● 新技术(指令流水线技术、MMS 技术) 6.1 CPU 功能和组成 6.1.1 CPU 的功能 大家知道 CPU 是由运算器和控制器两大部分组成,其基本任务是执行程序,而程序是 指令的有序集合,因此,CPU 的基本功能体现在两个方面:一方面是如何保证程序中指令 执行顺序的正确,另一方面是如何实现一条指令的功能。具体控制如下: 1、指令控制 按照冯·诺依曼“存储程序”思想,程序被装入主存后,计算机应能按其预先设定的要 求有条不紊地执行指令,才可完成具体的任务。因此,严格控制程序的执行顺序,是 CPU 的首要任务。指令控制能实现对程序中指令的执行顺序进行控制。由于程序中的指令有两大 类,一是顺序执行的指令,二是转移指令。对于顺序执行的指令,当 CPU 执行完此指令后, 该指令下面的一条指令便是 CPU 要执行的下一条指令,由于程序的连续存放,可以通过设 置一个程序计数器 PC 或指令指针(Program counter)进行控制,且 PC 具有自动加 1 的功 能,因此,PC 始终指向的是下一条 CPU 将要执行的指令。对于转移指令,当 CPU 执行完 此指令后,将转移的目的指令所在的地址送 PC,便实现转移指令的正确转移。 2、操作控制 对于一条指令的执行,要涉及到计算机中的若干个部件。指令不同,控制完成指令的功 能所涉及的部件不同。如何控制这些部件,就需要各种不同的操作控制信号。因此,一条指 令对应一组操作控制信号。指令不同,指令的操作码不同,指令所对应的一组操作控制信号 也不同。因此,操作控制是对指令的操作码进行译码来产生该指令所需要的一组操作控制信 号。 3、时序控制 在操作控制的基础上,需要对各种操作控制信号的产生时间、稳定时间、撤销时间及相 互之间的关系进行严格控制。因为指令所对应一组操作控制信号并不是同时作用于相应的各 个部件。这种对操作控制信号施加时间上的控制,称为时序控制。实现时序控制需要设置时 序产生器和操作控制器。只有严格地进行时序控制,才能保证各功能部件组合构成有机的计 算机系统。 4、数据加工 数据加工是对数据进行算术运算和逻辑运算,它是 CPU 的根本任务,也是运算器的基 本功能,而运算器是 CPU 组成的一个部分,因此,数据加工不可避免地会涉及到运算器和 寄存器。 111 6.1.2 CPU 的基本组成 CPU 是运算器和控制器的总称,它既具有运算器的功能,又具有控制器的功能。欲实 现控制器的功能,作为控制器应由程序计数器 PC(Program counter)、指令寄存器 IR (Instrack Register)、指令译码器、时序产生器和操作控制器组成。欲实现运算器的功能, 作为运算器应由算术逻辑单元 ALU、累加寄存器简称累加器 AC(Accunulator)、数据缓冲 寄存器 DR(Data Register)、状态寄存器 STR(Stru Register)组成。具体 CPU 模型如图 6-1 所示。 图 6-1 CPU 主要组成部件逻辑结构示意图 1、指令的执行过程 (1)取指令 根据指令所在存储器单元的地址(由程序计数器 PC 提供),将 PC 中的指令地址送地址 寄存器 AR,此后,PC 自动加 1,地址寄存器 AR 的内容经地址总线和地址译码器选中指令 所在的存储单元,CPU 发出读命令,将该指令从主存中取出,经数据总线送到数据缓冲寄 存器 DR,由于所取的是指令而不是数据,因此,再将数据缓冲寄存器 DR 中的指令送往指 令寄存器 IR,从而完成取指令。由此可见: 1)所有指令的取指令阶段是完全相同的 2)CPU 当前正在执行的指令是指令寄存器 IR 中的指令 3)程序计数器 PC 始终指向的是下一条 CPU 将要执行的指令 (2)分析指令 对指令寄存器 IR 中指令的操作码进行译码分析,产生该指令所需要的一组操作控制信 号(译码信号),再经时序产生器和操作控制器形成时序控制信号(控制命令);通过对指令 寄存器 IR 中指令的地址码进行分析,形成操作对象(操作数)的有效地址,并按此地址去 读取操作数,或形成转移地址,以实现程序的转移。 (3)执行指令 时序控制信号(控制命令)作用于相应的各个部件,使各个部件产生相应的动作,从而 112 完成指令的功能,并根据需要,保存操作结果。 一条指令执行结束,若没有异常情况和特殊请求,则按程序顺序,再去取出并执行下一 条指令。控制器就是按取指令、分析指令、执行指令这样的步骤进行周而复始的控制过程, 直到完成程序所规定的任务并停机为止。 2、CPU 内部主要寄存器 CPU 内部寄存器是用来保存运算和控制过程中的中间结果、最后结果和控制、状态信 息。不同的 CPU,其内部寄存器可能有所差异,但不论哪一种 CPU,其内部寄存器至少要 有一下 6 类寄存器。 (1)数据缓冲寄存器(DR) 数据缓冲寄存器用来暂时存放由内存储器读出的一条指令或一个数据字;反之,当向内 存存入一条指令或一个数据字时,也暂时将它们存放在数据缓冲寄存器中。 缓冲寄存器的 作用是 :  1)作为 CPU 和内存、外部设备之间信息传送的中转站  2)补偿 CPU 和内存、外围设备之间在操作速度上的差别 3)在单累加器结构的运算器中,数据缓冲寄存器还可兼作为操作数寄存器 (2)指令寄存器(IR) 指令寄存器用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到 缓冲寄存器中,然后再传送至指令寄存器。指令划分为操作码和地址码字段,由二进制数字 组成。为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。 指令 译码器就是做这项工作的。指令寄存器中操作码字段的输出就是指令译码器的输入。操作码 一经译码后,即可向操作控制器发出具体操作的特定信号。  (3)程序计数器(PC) 为了保证程序中指令的执行顺序的正确,CPU 必须设置一个计数器,用来指示 CPU 将 要执行的下一条指令,起这种作用的计数器通常称为指令计数器,简称 PC。在程序开始执 行前,必须将程序的起始地址装入 PC,即程序的一条指令所在内存单元地址送入 PC。当执 行指令时,CPU 将自动修改 PC 的内容,使其保持的总是将要执行的下一条指令的地址,由 于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对 PC 加 1。但是,当 遇到转移指令时,那么后继指令的地址(即 PC 的内容)必须从指令的地址码取得,在这种情 况下,下一条从内存取出的指令将由转移指令来规定,不同于顺序指令只是简单的对 PC 加 1。因此,程序计数器的结构应当是具有寄存和计数两种功能的结构。 (4)地址寄存器(AR) 地址寄存器用来保存当前 CPU 所访问的内存单元的地址。由于在内存和 CPU 之间存在 着操作速度上的差别,所以,必须使用地址寄存器来保持地址信息,直到内存的读/写操作 完成为止。当 CPU 访问主存时,即 CPU 对主存存/取数据或者 CPU 从主存中读出指令时, 都要使用地址寄存器和数据缓冲寄存器。同样,当 CPU 访问外设时,同样要使用地址寄存 器和数据缓冲寄存器。 (5)累加器(AC) 累加器是累加寄存器的简称,它是一个通用寄存器。其功能是:当运算器进行算术或逻 辑运算时,一方面作为 ALU 一个输入端,为 ALU 提供一个操作数;另一方面作为 ALU 一 个输出端,用来存放 ALU 运算的结果。显然,运算器中至少要有一个累加器,当运算器内 部只有一个累加器时,我们称为单累加器结构的运算器或 CPU。目前,CPU 中的累加器多 达 16 个、32 个、甚至更多,当使用多个累加器时,就变成通用寄存器堆结构,其中任何一 个既可存放源操作数,也可存放目的操作数。 (6)状态寄存器(SR) 113 状态寄存器也称为程序状态字,简称 PSW,用来保存 CPU 在执行算术指令和逻辑指令 时建立的各种条件码内容,如运算结果进位标志(C),运算结果溢出标志(V),运算结果为 零标志(Z),运算结果为负标志(N)等等。这些标志位通常分别由 1位触发器保存。除此之外, 状态寄存器还保存中断和系统工作状态等信息,以便使 CPU 和系统能及时了解机器工作状 态和程序运行状态。因此,状态寄存器是一个由各种状态条件标志拼凑而成的寄存器。 3、控制器的分类 根据时序控制信号或控制命令产生方法不同,可以将控制器分为组合逻辑控制器、微程 序控制器和门阵列控制器三种。本章将重点讨论微程序控制器和组合逻辑控制器。 (1)组合逻辑控制器 组合逻辑控制器是采用组合逻辑技术来产生控制命令,它是分立元件时代的产物,其最 大优点是速度快,但结构不规整,设计、调试和维修较困难,难以实现设计自动化,目前只 有一些巨型机和 RISC 机为了追求高速度仍采用组合逻辑控制器。 (2)微程序控制器 微程序控制器是采用存储逻辑来产生控制命令,它是将控制命令代码化,机器指令转化 成一段微程序,并存于控制存储器中,通过执行控存中的微程序来产生机器指令所需的一组 控制命令。它与组合逻辑控制器的设计思想截然不同,微程序控制器设计规整,调试、维修 以及更改、扩充指令方便,易于实现自动化设计,已成为当前控制器的主流。 (3)门阵列控制器 门阵列控制器实质上也是一种组合逻辑控制器,但它与传统的组合逻辑控制器不同,它 是程序可编的,它吸收了前两种控制器的设计思想,被广泛应用于嵌入式系统。 6.2 控制器的时序系统和控制方式 6.2.1 有关周期的基本概念 1、指令周期 指令周期是指从取指令、分析指令到执行完该指令所需的全部时间。一个指令周期一般 包含若干个 CPU 周期。由于指令的操作功能不同,有的简单,有的复杂,因此,不同指令 的指令周期不尽相同。 2、CPU 周期 一个 CPU 周期又称一个机器周期,与机器的一个基本操作相对应,结合机器的基本操 作,一般机器的 CPU 周期有取指周期、取数周期、执行周期、中断周期等。由于 CPU 内部 的操作速度较快,而 CPU 访问一次内存所花的时间较长,因此,通常用从内存读取一条指 令字的最短时间来规定 CPU 周期。 3、节拍 在一个 CPU 周期内要完成一个基本操作,由于一个基本操作又包含若干个微操作,这 些微操作不但需要占用一定的时间,而且有一定的先后次序。因此,需要把一个 CPU 周期 等分成若干个时间小段,每一小段称为一个节拍,一个节拍对应一个电位信号,控制一个或 几个微操作的执行。 4、脉冲 在一个节拍内,有时还需要设置一个或几个工作脉冲,工作脉冲也称为时钟周期或 T 周期。 上述指令周期、CPU 周期、时钟周期之间的关系如图 6-2 所示。一个指令周期包含两个 CPU 周期,每个 CPU 周期包含四个时钟周期。 6.2.2 时序信号与体制 时序信号是对操作控制信号实施时间控制而形成的信号,是利用定时脉冲的顺序和不同 114 的脉冲间隔,有条理、有节奏地指挥机器的动作,规定在这个脉冲到来时做什么,在那个脉 冲到来时又做什么,给计算机各部分提供工作所需的时间标志。为此,需要采用周期、节拍、 脉冲多级时序体制。至于计算机内存中所存放的二进制形式的指令和数据的区分问题,我们 可以从两个层面上进行区分,一是从时间上来说,取指令是发生在指令周期的第一个 CPU 周期中,即发生在“取指令”阶段,而取数据是发生在指令周期的后面几个 CPU 周期中, 即发生在“执行指令”阶段。二是从空间上来说,如果取出的代码是指令,那么一定送往指 令寄存器,如果取出的代码是数据,那么一定送往运算器。由此可见,时间控制对计算机来 说是十分重要,计算机的协调动作需要时间标志,而时间标志则是用时序信号来体现的,控 制器所产生的各种控制信号都是时间因素(时序信号)和空间因素(部件)的函数。 时序信号最基本的体制是电位─脉冲制,该体制下最容易理解的例子是寄存器之间的数 据传送,数据加在触发器的电位输入端,用电位的高低来表示数据是“1”还是“0”;而打 入数据的控制信号加在触发器的时钟输入端,且要求打入数据的控制信号到来之前,电位信 号必须是稳定的,只有电位信号先建立,打入到寄存器中的数据才是可靠的。 在组合逻辑控制器中,时序信号的体制往往采用周期─节拍─脉冲三级体制,即一个 CPU 周期包含多个节拍,每个节拍又允许包含多个脉冲。在图 6-5 中,一个 CPU 周期包含 4 个节拍,每个节拍又包含 1 个脉冲。 在微程序控制器中,时序信号比较简单,一般采用节拍─脉冲二级体制。 图 6-2 指令周期、CPU 周期、时钟周期间的关系 6.2.3 时序信号发生器 时序信号发生器的电路是不尽相同的,组合逻辑控制器的时序电路复杂,而微程序控制 器的时序电路简单,但无论哪一种控制器,其内部的时序信号发生器最基本的构成是一样的, 都是由时钟源、环形脉冲发生器、节拍脉冲和读写时序译码逻辑、启停控制逻辑等部分组成。 如图 6-3 所示。 1、时钟源 时钟源用来为环形脉冲发生器提供频率稳定且电平匹配的方波时钟脉冲信号。它通常由 石英晶体振荡器和与非门组成的正反馈振荡电路组成,其输出送至环形脉冲发生器。  2、环形脉冲发生器 环形脉冲发生器是用来产生一组有序的间隔相等或不等的脉冲序列,以便通过译码电路 来产生最后所需的节拍脉冲。为了在节拍脉冲上不带干扰毛刺,环形脉冲发生器通常采用循 环移位寄存器形式。典型的环形脉冲发生器及其译码如图 6-4 所示。 假设时钟源产生的时钟信号为 5MHz(时钟周期 200ns),当控制台发出总清信号(CLR), 使触发器 C4 置“1”,门 3 打开,第一个正脉冲 Φ 通过门 3,使触发器 C1~C3 清“0”。经过 半个脉冲周期(100ns)的延迟,触发器 C4 由“1”状态翻到“0”状态,再经半个脉冲周期 (100ns)的延迟,第二个正脉冲的上升沿(即第一个Φ 的后沿)作移位信号,使触发器 C1~C3 115 变为“100”状态。此后,第二个Φ 、第三个Φ 连续通过门 2 形成移位信号,使触发器 C1~C3 相继变为“110”、“111”状态。当 C3 变为“1”状态时,对应第四个正脉冲,其状态便反映 图 6-3 时序信号发生器 图 6-4 环形脉冲发生器及其译码逻辑 到触发器 C4 的 D 端,因而第四个正脉冲的下降沿又将 C4 置“1”,门 3 再次打开,第五个正 脉冲便通过门 3,形成清“0”脉冲,使触发器 C1~C3 清“0”。于是下一个循环再度开始。 其过程如图 6-5 所示。 3、节拍脉冲和读写时序的译码 节拍脉冲和读写时序的译码逻辑如图 6-4 的上半部。假设一个 CPU 周期产生 4 个等间 116 隔的节拍,根据图 6-5 节拍与脉冲之间的时序关系,其译码逻辑可表示为: 图 6-5 节拍与脉冲之间的时序关系 T1 0=C1· 2C T2 0=C2· 3C T3 0=C3 T4 0= 1C RD°=C2·RD´ WE°=C3·WE´ 值得注意的是: (1)节拍脉冲间逻辑关系 节拍 T1 0、T2 0、T3 0、T4 0 与图 6-5 中的节拍 T1、T2、T3、T4 在逻辑关系上是完全相同, 只是后者是经过启停控制逻辑中的与门输出的。 (2)节拍脉冲宽度 一个 CPU 周期为 800ns,在周期─节拍─脉冲三级体制中,一个 CPU 周期包含 4 个节 拍,每一个节拍包含一个脉冲(时钟周期),因此,节拍 T1 0、T2 0、T3 0、T4 0 的脉冲宽度均为 200ns。 (3)读写控制信号 由图 6-5 可以看出:信号 RD´/WE´的持续时间为一个 CPU 周期。根据图 6-4 可知,信 号 RD°/WE°受控于信号 RD´/WE´,只有当 RD´/WE´有效后才会产生 RD°/WE°,结 合图 6-6,读写信号RD / WE 是 RD°/WE°经过启停控制逻辑中的与非门输出的。 4、启停控制逻辑 启停控制逻辑电路如图 6-6 所示。其核心是触发器 Cr,当触发器 Cr 为“1”时,原始 的节拍 T1 0、T2 0、T3 0、T4 0 和读/写时序信号 RD°/WE°通过门电路转变为 CPU 真正需要的 节拍 T1、T2、T3、T4 和读/写时序信号RD / WE ;否则,当触发器 Cr 为“0”时,将关闭时 序信号发生器。为了保证时序信号发生器产生完整的脉冲,在 T1 的前沿启动时序信号发生 117 器,在 T4 的后沿关闭时序信号发生器,在触发器 Cr 的下面加上一个 RS 触发器,且用 o 4T 作 为触发器 Cr 的时钟控制端。 图 6-6 启停控制逻辑 6.2.4 控制方式 控制方式是指对各种操作在时间上所进行的控制,其实质反映了时序信号的定时方式。 常用的控制方式有同步控制、异步控制、联合控制。 1、同步控制方式 同步控制方式是指任何指令的执行或指令中各个具体操作的执行均由确定统一的时间 基准信号所控制,尽管指令功能不同,但在同步控制方式下,指令在执行时所需的机器周期 数和时钟周期数都固定不变,即完全同步控制方式,此方式的优点是时序关系简单,控制方 便,但会造成大量时间的浪费。这是因为大多数简单指令的很多节拍是不用的,处于等待状 态。因此,在实际应用中往往采取折中的方案。常用的方法有: (1)采用中央控制与局部控制相结合的方法 根据周期─节拍─脉冲三级体制,一个 CPU 周期包含多个节拍。大多数指令的 CPU 周 期均采用统一的节拍,称为中央控制,对于少数在统一节拍内不能完成的指令,需要延长节 拍或增加节拍,使之在延长节拍内完成指令,并再返回到中央控制,这种通过延长节拍或增 加节拍来控制完成指令称为局部控制。 (2)采用不同的机器周期和延长节拍的方法 不同指令的指令周期可以划分为若干个 CPU 周期,如取指、取数、执行等周期,根据 执行指令的需要,可选取不同的 CPU 周期数。在节拍安排上,每个 CPU 周期划分为固定的 节拍,每个节拍都可根据需要延长一个节拍。 118 (3)采用分散节拍的方法 分散节拍是指根据操作的实际需要,需要多少节拍,时序发生器就产生多少节拍,这样 可以做到完全避免节拍轮空,是提高指令运行速度的有效方法,但这种方法会使时序发生器 复杂化,同时也无法解决节拍内那些简单操作因等待所浪费的时间。 2、异步控制方式 异步控制方式是根据每条指令或每个操作的实际需要,需要多少时间就分配多少时间。 这意味着每条指令的指令周期可由多少不等的机器周期数组成;也可以是当控制器发出某一 操作控制信号后,等待执行部件完成操作后发“回答”信号,再开始新的操作。显然,用这 种方式形成的操作控制序列没有固定的 CPU 周期数(节拍电位)或严格的时钟周期(节拍脉 冲)与之同步。  3、联合控制方式 联合控制方式是同步控制与异步控制相结合的方式。现代计算机中没有完全采用同步或 完全采用异步的控制方式,大多数都采用联合控制方式。即在功能部件内部采用同步控制方 式或以同步控制方式为主的控制方式,在功能部件之间采用异步控制方式。 6.3 指令流程图 指令流程图是控制器设计的基础,它是用方框图语言来表示的指令周期。结合图 6-1 CPU 的结构模型,分析常用指令的指令周期,并在此基础上划出指令流程图。 6.3.1 五类典型指令的指令周期分析 五类典型指令包括非访内指令(CLA 指令)、直接访内指令(ADD 指令)、写存指令(STA 指令)、转移指令(JMP 指令)和空操作指令(NOP 指令)。这些指令的存储见表 6-1。 表 6-1 五条典型的指令 八进制地址 八进制内容 助记符 020 021 022 023 024 ┇ 030 031 ┇ 040 250 000 030 000 020 040 000 000 140 021 ┇ 000 006 000 040 ┇ 存和数单元 CLA ADD 30 STA 40 NOP JMP 21 ┇ 数据 数据 ┇ 数据 1、CLA 指令周期 CLA 指令是一条非访内指令,此类指令的指令周期需要两个 CPU 周期,第一个 CPU 周期完成取指和译码操作,第二个 CPU 周期用作指令的执行操作。CLA 指令周期如图 6-7 所示。非访内指令包括寄存器之间的数据传送指令、对累加器操作的指令和其他一些零地址 指令,下面以 CLA 指令为例来说明非访内指令的两个 CPU 周期所进行的具体操作。 (1)取指周期 CLA 指令的第一个 CPU 周期为取指周期,此周期完成取指令并对指令的操作码进行译 码。假设程序计数器 PC 的内容为 020Q,正指向 CLA 指令,则取指周期所进行的具体操作 如图 6-8 所示。操作步骤如下: ①将程序计数器 PC 的内容 020Q 送入地址寄存器 AR (PC→AR) ②程序计数器 PC 的值加 1,使 PC 指向下一条 CPU 将要执行的指令 (PC+1) 119 ③将地址寄存器 AR 的内容送到地址总线上 (AR→ABUS) ④CPU 发出读命令,将所选主存地址为 020 的单元内容“250 000”读出,经过数据总 线,传送给数据缓冲寄存器 DR ( W/R =1) ⑤数据缓冲寄存器的内容“250 000”送给指令寄存器 IR (DR→IR) 图 6-7 CLA 指令的指令周期 指令译码器 ID 对指令寄存器中操作码进行译码,产生出该指令所需的所有控制信号, 以便执行指令操作。由于所有指令的指令周期中第一个 CPU 周期都是取指周期,该周期所 进行的操作都相同,因此,取指周期作为指令流程图的公共部分,任何一条指令执行结束时 必须返回到取指周期,以便继续取下一条指令。 (2)执行周期 CLA 指令的第二个 CPU 周期为执行周期,此周期完成对累加器 AC 的清 0。其具体操 作如图 6-9 所示。操作步骤如下: ①操作控制器送 CLA 相应的控制信号给算术逻辑单元 ALU (0→AC) ②ALU 响应该控制信号,将累加器 AC 的内容清零 (AC=0) 图 6-8 CLA 取指周期阶段 120 图 6-9 CLA 执行周期 2、ADD 指令周期分 ADD 指令是一条直接访内指令,此类指令的指令周期需要三个 CPU 周期,第一个 CPU 周期完成取指和译码操作,第二个 CPU 周期将指令寄存器 IR 中的地址码送往地址寄存器, 第三个 CPU 周期从内存中取出操作数并完成相加操作。ADD 指令周期如图 6-10 所示。 图 6-10 ADD 指令的指令周期 121 (1)取指周期 在取得前一条指令 CLA 后,程序计数器 PC 的值已经加 1,修改为 021Q,正指向当前 ADD 指令。经 ADD 指令的第一个 CPU 周期后,取出 021Q 单元的内容 “030 030”( ADD 30 指令)送指令寄存器 IR,PC 的值加 1,即 PC 的值修改为 22,指向下一条 CPU 将要执 行的指令,经指令译码器得出该指令的功能,即将累加器的内容和主存 030 单元的内容相加。 由于 ADD 指令的取指、译码操作过程与 CLA 指令的第一个 CPU 周期完全相同,在此不作 重复。 (2)指令寄存器 IR 中的地址码装入地址寄存器 AR(IRAddr→AR) ADD 指令的第二个 CPU 周期完成指令寄存器 IR 中的地址码(030)装入地址寄存器 AR,表示为 030→AR,其中 030 为内存中存放操作数的地址。具体操作如图 6-11 所示。 图 6-11 指令寄存器 IR 中的地址码(030)装入地址寄存器 AR 根据图 6-1CPU 模型,对于单累加器结构的 CPU,一个操作数必然隐含在累加器 AC 中, 另一个操作数只能来源于数据缓冲寄存器 DR,因此,对于直接寻址指令而言,都会面临一 个相同的操作,即将指令寄存器 IR 中的地址码装入地址寄存器 AR(IRAddr→AR),在此, 我们将此操作理解为一个机器周期或 CPU 周期。 (3)两操作数相加 ADD 指令的第三个 CPU 周期主要完成取操作数并执行加法操作。其具体操作如图 6-12 所示。操作步骤如下: ①把地址寄存器 AR 中的操作数的地址(30)送地址总线; (AR→ABUS) ②CPU 发出读命令,将主存地址为 30 的单元内容 6 读出,经过数据总线送给数据缓冲 寄存器 DR; ( W/R =1) ③执行加法运算。数据缓冲寄存器的内容 6 为算术逻辑单元提供一个操作数,累加器为 ALU 提供另一个操作数,两个操作数经 ALU 相加,并把加法的结果送给累加器,此时,累 加器的内容为 6。 (“+”) 122 图 6-12 两操作数相加 3、STA 指令周期 STA 指令是一条间接访内指令,该指令的指令周期由 4 个 CPU 周期组成,如图 6-13 所 示。第一个 CPU 周期完成取指和译码操作,第二个 CPU 周期将指令寄存器 IR 中指令的地 址码送往地址寄存器,第三个 CPU 周期从内存中取出操作数的地址并送往地址寄存器,第 四个 CPU 周期将累加器 AC 的内容写入内存单元。 (1)取指周期 STA 指令的第一个 CPU 周期仍为取指周期,将当前 PC 所指的主存单元中的指令“STA I 30”(机器码为“021031”)取出并译码,PC 的值加 1,指向下一条 CPU 将要执行的指 令。由于 STA 指令的第一个 CPU 周期与 CLA、ADD 指令的第一个 CPU 周期的操作完全相 同,所以在此不再重复。 (2)指令寄存器 IR 中的地址码装入地址寄存器 AR(IRAddr→AR) STA 指令的第二个 CPU 周期将指令寄存器 IR 中的地址码(031)装入地址寄存器 AR (031→AR)。由于 STA 指令的第二个 CPU 周期与 ADD 指令的第二个 CPU 周期的操作完 全相同,所以在此也不再重复。只是强调:ADD 指令中的地址码 030 是操作数所在内存单 元的地址,而 STA 指令中的地址码 31 并不是操作数所在内存单元的地址,而是操作数所在 内存单元的地址所在的内存单元的地址。简单地讲,STA 指令中的地址码 31 是操作数所在 内存单元地址的地址。 123 图 6-13 STA 指令的指令周期 (3)取操作数的地址并送往地址寄存器 STA 指令的第 3 个 CPU 周期主要完成从内存单元地址为 31 的单元中取出操作数地址 40,其具体操作如图 6-14 所示。操作步骤如下: 图 6-14 取操作数的地址并送往地址寄存器 ①地址寄存器的内容 31 发送到地址总线; (AR→ABUS) ②CPU 发出读命令,将选中的地址为 31 内存单元的内容 40 读到数据总线上;( W/R =1) ③把数据总线上的内容装入地址寄存器 AR。于是 40 进入地址寄存器,替代原来的内 容 31。(DBUS→AR) (4)累加器 AC 的内容写入内存单元 STA 指令的第 4 个 CPU 周期主要完成累加器 AC 的内容写入内存单元。其具体操作如图 6-15 所示。操作步骤如下: ①累加器 AC 的内容 6 送给数据缓冲寄存器 DR;(AC→DR) ②把地址寄存器 AR 的内容 40 送到地址总线上;(AR→ABUS) ③把数据缓冲寄存器 DR 的内容 6 发送到数据总线;(DR→DBUS) ④ CPU 发出写命令,将数据总线上的内容写入到所选的主存单元中,即将数据 6 写入地 124 址为 40 的主存单元。( W/R =0) 图 6-15 累加器 AC 的内容写入内存单元 4、JMP 指令周期 JMP 指令可以是直接寻址,也可以是间接寻址。在本例中,JMP 指令采用直接寻址, 该指令的指令周期需要两个 CPU 周期,第一个 CPU 周期完成取指和译码操作,第二个 CPU 周期将指令寄存器 IR 中指令的地址码送往地址寄存器 AR 和程序计数器 PC。JMP 指令的指 令周期如图 6-16 所示。 图 6-16 JMP 指令的指令周期 (1)取指周期 125 JMP 指令的第一个 CPU 周期仍为取指周期,即将当前 PC 所指的主存单元中的指令 “JMP 21”(机器码为“140 021”)取出并译码,PC 的值加 1。由于 JMP 指令的第一个 CPU 周期与 CLA、ADD、STA 指令的第一个 CPU 周期的操作完全相同,所以在此不再重 复。 (2)指令寄存器 IR 中的地址码装入地址寄存器 AR 和程序计数器 PC(IRAddr→AR、PC) JMP 指令的第二个 CPU 周期将指令寄存器 IR 中的地址码(021)装入地址寄存器 AR 和程序计数器 PC(IRAddr→AR、PC)。类似于 ADD、STA 指令的第二个 CPU 周期,所不同 的是,指令寄存器 IR 中的地址码(021)不仅装入地址寄存器 AR,还要装入程序计数器 PC, 从而代替了 PC 原来的内容 24,这样,下一条 CPU 将要执行的指令不是 24 单元中的指令, 而是 21 单元中的指令,从而改变了程序原来的执行顺序,实现了程序的转移。 5、NOP 指令周期 NOP 指令是一条空操作指令,也是非访内指令,此指令的指令周期由两个 CPU 周期组 成,第一个 CPU 周期完成取指和译码操作,第二个 CPU 周期用作指令的执行操作。由于 NOP 指令是一条空操作指令,所以,在第二个 CPU 周期中不产生任何控制信号。NOP 指令 的指令周期与 CLA 指令的指令周期相同,在此不再重复。 6.3.2 指令周期流程 通过分析典型指令的指令周期,对每一条指令的取指过程和执行过程有了较为深刻的印 象。为了便于进行控制器的设计,指令周期可以采用类似程序流程图的形式进行描述。指令 周期流程主要由方框、棱形框、有向线段和公共操作符~组成。其中,一个方框代表一个 CPU 周期,表示某些具体的操作;棱形框表示某种判断或测试,不单独占用一个 CPU 周期; 有向线段表示时间的先后顺序;公共操作符~表示一条指令执行结束,转入公操作。由于所 有指令的取指令阶段完全相同,并且是指令的第一个 CPU 周期,因此,取指令可以作为公 操作。指令不同只是指令的执行阶段不同,可以根据指令的操作码转向不同指令的执行阶段。 我们把 CLA、ADD、STA、JMP 四条典型指令的指令周期进行归纳,划出了指令周期流程 图。如图 6-17 所示。 图 6-17 指令周期流程图 126 图 6-17 中,对于 ADD、STA、JMP 指令,由于指令的寻址方式不同,可以采用直接寻 址,也可以采用间接寻址,因此,指令流程图出现了分支,请读者来分析哪一个分支是直接 寻址,哪一个分支是间接寻址。 【例 6-1】图 6-18 所示为双总线结构机器的数据通路,IR 为指令寄存器,PC 为程序计数器 (具有自增功能),M 为主存(受 R/ W 信号控制),AR 为地址寄存器,DR 为数据缓冲寄存 器,ALU 由加、减控制信号决定完成何种操作,控制信号 G 控制的是一个门电路。另外, 线上标注有小圈表示有控制信号,例中 yi 表示 y 寄存器的输入控制信号,R1o 为寄存器 R1 的输出控制信号,未标字符的线为直通线,不受控制。 (1)画出“ADD R0,R2 ”的指令周期流程图,并列出相应的操作控制信号序列。假设该 指令的地址已放入 PC 中。 (2)画出“SUB R1,R3 ”的指令周期流程图,并列出相应的操作控制信号序列。假设该 指令的地址已放入 PC 中。 图6-18 双总线结构机器的数据通路 解:(1)“ADD R0,R2 ”指令是一条加法指令,其功能为(R0)+(R2)→R0,根据 给定的数据通路,“ADD R0,R2 ”的指令周期流程如图 6-19(a)所示,该图的右侧注明 了相应的操作控制信号序列。 (2)“SUB R1,R3 ”指令是一条减法指令,其功能为(R1)-(R3)→R3,其指令周 期流程如图 6-19(b)所示,该图的右侧注明了相应的操作控制信号序列。 图 6-19 指令周期流程图 IR PC AR M DR R0 R1 R2 R3 X Y A L U IRi PCi ARi R/W DRi R0i R3i Xi + - G YiR3oR0oPCoIRo A 总线 B 总线 127 6.4 微程序控制器 微程序控制器具有规整性、灵活性、可维护性等一系列优点而被广泛应用。早在 1951 年,英国剑桥大学的 M.V.Wilkes 教授提出了微程序设计,微程序设计的实质是用程序设计 的思想方法来组织操作控制逻辑,把各条指令的微操作序列编制成微程序,并存放在控制存 储器中,执行机器指令时,通过读取并执行相应的微程序来实现这条机器指令的功能。 6.4.1 基本概念 1、微命令和微操作 我们可以把组成计算机的各个部分划分为两大类,一类是控制部件,另一类是执行部件。 控制器就是控制部件,而运算器、存储器、外围设备相对控制器来讲,就是执行部件,控制 部件与执行部件之间的联系依靠的是控制信号线,我们通常把控制部件通过控制信号线向执 行部件发出各种控制命令称为微命令,由此可见,微命令是构成控制信号序列的最小单位。 而执行部件接受微命令后所进行的操作称为微操作,微操作是执行部件中最基本的操作。微 操作可以分为相容性和相斥性两种。所谓相容性的微操作,是指在同时或同一个 CPU 周期 内可以并行执行的微操作。所谓相斥性的微操作,是指不能在同时或不能同一个 CPU 周期 内可以并行执行的微操作。 图 6-20 所示给出了一个简单运算器模型,其中 ALU 为算术逻辑单元,R1、R2、R3 为三 个寄存器,三个寄存器的内容可以通过多路开关从 ALU 的 X 输入端或 Y 输入端送至 ALU, 而 ALU 的输出可以送往任何一个寄存器或同时送往 R1、R2、R3 三个寄存器。多路开关的每 个控制门是一个常闭的开关,它的一个输入端代表来自寄存器的信息,而另一个输入端是控 制端,一旦两个输入端都有输入信号,多路开关则处于开的状态,才会产生输出。图中每一 个开关门都有相应的微命令来控制,例如,开关门 4 由编号为 4 的微命令控制,开关门 5 由编号为 5 的微命令控制,如此等等。三个寄存器 R1、R2、R3 分别由 1、2、3 微命令控制, 以便在 ALU 运算完毕时,将运算结果打入到某一寄存器。另外,ALU 只有+、-和 M 三种 操作。Cy 为进位触发器,只有 ALU 产生进位时该触发器的状态为“1”。 图 6-20 简单运算器模型 128 由此可见,ALU 的操作(+、-、M)在同一个 CPU 周期中只能选择一种,所以,+、-、 M 三个微操作是相斥性的微操作。另外,4、6、8 三个微操作是相斥性的微操作,5、7、9 三个微操作也是相斥性的微操作。微操作 1、2、3 是可以同时进行的,所以是相容性的微操 作。另外,ALU 的 X 输入微操作 4、6、8 分别与 Y 输入的微操作 5、7、9 任意两个微操作 都是相容性的微操作。 2、微指令和微程序 微指令是指在一个 CPU 周期中能够实现一定操作功能的一组微命令。而微程序则是微 指令序列。我们知道一条机器指令的指令周期包含多个 CPU 周期,根据微指令的概念,一 个 CPU 周期对应一条微指令,因此,一条机器指令的功能是由多条微指令组成的序列来实 现的。作为微指令,一方面要形成后继微地址,即执行完某一条微指令后,必须给出下一条 微指令的地址,下一条微指令的地址也称为后继微地址,以便当前微指令执行完毕后能正确 取出下一条微指令;另一方面要产生一组微命令。因此,微指令的格式应至少包含操作控制 字段和顺序控制字段两部分。操作控制字段用来产生微命令,顺序控制字段用来形成后继微 地址。某一具体微指令格式如图 6-21 所示。其微指令长度为 23 位,包含操作控制字段和顺 序控制字段两部分。其中操作控制字段占 17 位,每一位表示一个微命令。当操作控制字段 某一位为“1”时,则表示发出该位相应的微命令;否则,则表示不发出该位相应的微命令。 例如,当微指令第一位为“1”时 ,表 示 发 出 LDR´1 微命令,运算器执行 ALU→R1 的微操作。 同样,当微指令第 10 位为“1”时,表示向 ALU 发出“+”微命令, ALU 则执行“+”微 操作。 图 6-21 微指令格式 微指令的顺序控制字段占 6 位。其中 4 位(20~23)用来直接形成后继微地址,第 18、 19 位两位作为判断测试标志。当此两位都为“0”时,表示不进行测试,直接将微指令中第 20~23 位作为后继微地址;当微指令的第 18 位或第 19 位为“1”时,表示要进行 P1 或 P2 的判断测试,根据测试结果,需要对微指令中第 20~23 位的某一位或某几位进行修改,将 修改后的地址作为后继微地址。 3、机器指令与微指令 机器指令与微指令的关系如图 6-22 所示。 (1)机器指令与微指令所处的位置不同 机器指令在程序中,位于主存储器内,该机器指令的第一个 CPU 周期完成取指和译码, 即将机器指令从主存中取出,并送到指令寄存器 IR 中,再对 IR 中的指令操作码进行译码, 从而识别出是什么机器指令。而微指令在微程序中,位于控制存储器内,在一个微周期中完 成从控制存储器取出微指令,并存放于微指令寄存器 µIR,再执行 µIR 中的微指令。 (2)机器指令与微程序的对应关系 一条机器指令对应一个微程序,也就是说,一条机器指令是由一个微程序负责解释执行 的。 129 在控制存储器中存在着所有机器指令的微程序,如 何实现不同的机器指令转去执行相应的微程序呢?在机 器指令的第一个 CPU 周期完成取指和译码后,由于机器 指令不同,其指令的操作码也不同,因此,可以根据指 令寄存器 IR 中的指令操作码去产生该机器指令相应的 微程序入口地址。具体而言,可以把机器指令的操作码 直接作为该机器指令相应的微程序入口地址,也可以通 过映像存储器来实现操作码与微程序入口地址之间的转 换。产生出该机器指令相应的微程序入口地址后,将该 微程序入口地址送到微地址寄存器 µAR,从而实现机器 指令正确转移到相应的微程序。 (3)公共的取指微指令 由于所有机器指令的第一个 CPU 周期所进行的操 作都完全相同,结合微指令的定义可知,一个 CPU 周期 对应一条微指令,因此,所有机器指令相应微程序的第 一条微指令完全相同,为了节约控制存储器的存储容量, 将微程序的第一条微指令(即取指微指令)设置为公共 微指令,任何一个微程序执行完毕后都转到该公共的取 指微指令,以完成下一条机器指令的读取操作。 图 6-22 机器指令与微指令的关系 6.4.2 微程序控制器基本原理 1、微程序控制器的组成 微程序控制器的组成与结构如图 6-23 所示。它主要由控制存储器、微指令寄存器和微 指令地址形成部件三大部分组成。 图 6-23 微程序控制器的组成与结构 (1)控制存储器(CM) 控制存储器是用来存放指令系统所对应的全部微程序,它是一种读出时间较快的只读存 储器,其容量视指令系统而定,其字长由控制命令的多少、微指令的编码格式以及下址字段 130 的宽度而定。 (2)微指令寄存器(µIR) 微指令寄存器是用来存放从控制存储器读出的一条微指令。微指令由操作控制字段和顺 序控制字段构成,其中顺序控制字段用来产生将要执行的下一条微指令的地址,操作控制字 段则用来产生一组微命令。 (3)微指令地址形成部件 微指令地址形成部件又称微指令地址发生器或后继微地址形成部件,是用来形成将要执 行的下一条微指令的地址(简称后继微地址)。一般情况下,下一条微指令的地址由上一条 微指令的顺序控制字段直接决定。当微程序出现分支时,将由状态条件的反馈信息去形成转 移地址;当取指令公共操作完成后,可以根据指令的操作码去产生微指令入口地址。图 6-24 仅给出了上述三种后继微地址的形成方式,根据计算机规模不同,还可以有更多的后继微地 址形成方式。 2、微程序的执行过程 微程序的执行过程类似于 CPU 对程序的执行,一方面要控制微程序中微指令的执行顺 序,另一方面要控制执行微指令,其具体过程如下: (1)读取并执行公共的“取指令”微指令 从控制存储器中取出一条公共的“取指令”微指令,并送到微指令寄存器 µIR。由于这 是一条公用的微指令,一般存放在控制存储器的 0 号或 1 号地址单元。CPU 在执行微指令 寄存器 µIR 中的微指令时,操作控制字段产生相关的微命令,这些微命令实现从主存中读取 机器指令并将其送到指令寄存器 IR。 (2)形成微程序入口地址 根据指令寄存器 IR 中的指令操作码,通过微地址形成线路产生相应的微程序入口地址, 并将微程序入口地址送往微地址寄存器 µAR。 (3)执行微程序 根据微地址寄存器 µAR 中的微地址,取出微程序中第一条微指令并送入微指令寄存器 µIR,开始执行 µIR 中的微指令,操作控制字段产生微命令,顺序控制字段形成后继微地址。 该微指令执行结束时,将顺序控制字段所形成的后继微地址再送入微地址寄存器 µAR,去 读取下一条微指令。如此重复,直至微程序中的最后一条微指令。 (4)实现返回 执行完一条机器指令对应的一段微程序后,返回0号或1号微地址单元,读取并执行“取 指令”微指令。 由此可见,微程序控制器的工作过程涉及到两个层面:一个层面是程序员所看到的传统 机器级,包括指令、程序、主存储器;另一个层面是设计者所看到的微程序级,包括微指令、 微程序、控制存储器(相对程序员是“透明”的)。 6.4.3 微程序设计 微程序设计的关键是如何设计微指令的结构,与微指令结构相关的因素较多,除机器硬 件外,还要考虑如何缩短微指令字的长度,如何提高微程序的执行速度,如何有利于对微指 令的修改,以便提高微程序设计的灵活性。 1、微命令编码 微命令编码是指对微指令中的操作控制字段所进行的编码,其编码方法有直接表示法、 编码表示法、混合表示法。 (1)直接表示法 操作控制字段中的每一位代表一个微命令的编码方法称为微命令的直接表示法。直接表 示法对微命令不需要译码。其优点是简单、直观,输出可直接用于控制,一条微指令可以定 131 义并执行多个并行的微命令。微指令的直接表示法如图 6-24 所示。显然,当微指令中的微 命令增多时,会导致微指令字加长,使控制存储器的容量加大。因此,直接表示法只适用于 微命令数量不多的 CPU。对于微命令较多的 CPU 而言,常采用编码表示法。 图 6-24 微命令直接表示法 (2)编码表示法 编码表示法把一组相斥性的微命令组成一个字段,然后通过微命令译码器对每一个字段 进行译码,译码输出作为微命令。编码表示法的微指令结构如图 6-25 所示。采用编码表示 法,可以用较少的二进制信息位表示较多的微命令。例如,某一个 3 位的二进制信息字段, 经译码后可以表示 8 个微命令;4 位的二进制信息字段,经译码后可以表示 16 个微命令。 与直接表示法相比,编码表示法可使微指令字大大缩短,但由于增加了译码电路,编码表示 法比直接表示法的速度要慢一些。 图 6-25 微命令的编码表示法 (3)混合表示法 混合表示法把直接表示法和编码表示法相混合使用,以便能综合考虑微指令字长、灵活 性和执行速度等方面的要求。 另外,在微指令中还增加一个常数字段,该字段可作为操作数送入 ALU 运算,也可作 为计数器的初值用来控制微程序循环次数。 2、后续微地址的形成方法 微指令执行的顺序控制问题,实际上是如何确定下一条微指令的地址问题。通常,产生 后续微地址的方法有计数器方式、增量方式与断定方式结合、多路转移方式三种。 (1)计数器方式 这种方式与用程序计数器 PC 来产生后续指令地址的方法类似。计算机加电后执行的第 一条微指令地址(微程序入口)来自专门的硬件电路,控制实现取指令操作,然后由指令操 作码产生后续微地址。若是顺序执行微指令,则将现行微地址(在微地址计数器 μPC 中) 132 加 1 产生后续微地址;若遇到转移类微指令,则由 μPC 与形成转移微地址的逻辑电路组合 成后续微地址,例如利用该逻辑电路的输出与 μPC 低位进行逻辑加,形成后续微地址。这 种方式可使微指令的下址字段很短,仅起选择作用。其缺点是微程序转移不灵活,使得微程 序在控制存储器中的空间分配较困难。计数器方式的原理如图 6-26 所示。 图 6-26 计数器方式 在图 6-26 中,μPC 兼作控制存储器的地址寄存器,其输入有 4 个。下址字段仅有两位, 其功能是选择 3 个输入源的一个作为 μPC 的输入,而微程序入口是由专门的硬件电路产生, 不受下址字段控制。 计数器方式的基本特点是:微指令的顺序控制字段较短,微地址产生机构简单。但是多 路并行转移功能较弱,速度较慢,灵活性较差。 (2)增量方式与断定方式的结合 在这种方式中,微指令顺序控制字段又分为条件选择字段和转移地址字段两部分,其中 条件选择字段用来规定“条件转移”微指令要测试的外部条件;转移地址字段可用作后继微 地址,当转移条件满足时,用它作下一个微地址,即将“转移地址”送给微程序计数器 μPC; 当转移条件不满足时,则使用微程序计数器 μPC 提供下一条微指令的地址。增量方式与断 定方式结合形成后续微地址的原理图如图 6-27 所示。 图 6-27 增量方式与断定方式结合形成后续微地址的原理图 133 μPC 是微程序计数器,具有计数和并行接受数据的功能;μIR 是微指令寄存器。当 μIR 中的转移条件(条件选择)字段指出一次转移时,微指令“转移地址”字段的内容就被送入 μPC。“条件选择”字段用来控制一个多路开关,根据外部的状态条件信息,多路开关将所 选的某一路数据并行打入 μPC 中。 假设必须测试的两个状态条件变量为 V1 和 V2,故需使用一个 2 位的条件选择字段 S1S0: ①当 S1S0 =00 时,微程序不转移。②当 S1S0 =01 时,如果 V1=1 则转移,否则顺序执行。③ 当 S1S0 =10 时,如果 V2=1 则转移,否则顺序执行。④当 S1S0 =11 时,无条件转移。与此对 应,多路开关有 4 个输入 X0、X1、X2、X3,其中 X0=0,X1=V1,X2=V2,X3=1。因此,当 S1S0 =i 时,它选通多路开关输出 Xi。从而控制“转移地址”字段的内容送入或不送入 μPC。 (3)多路转移方式 在执行一条微指令时,可能会遇到从若干个微地址中选择一个作为后续微地址的情况, 这种转移方式称为多路转移。例如,微指令在执行时,有时要根据某些硬件状态来决定后续 微地址,属于这些状态的可以是根据运算结果所置的标志位、计数器状态、数据通道状态等。 一种状态(0 或 1)可以用来选择两个微地址之一,即两路转移;而两种状态可以用来选择 4 个微地址之一,即四路选择。微程序设计实践表明,实现两路转移的情况较多,其次是四 路转移,而四路以上转移的情况比较少见。 两路转移只涉及微地址的一位;四路转移涉及微地址的两位,一般就定在微地址的最后 两位,也就是说,当执行转移微指令时,根据条件可转移到 4 个微地址中的一个,这 4 个微 地址的高位部分相同,仅是最低两位不同。实现多路转移可以减少微指令的长度,对于一般 条件转移微指令(相当于两路转移)来说,需要两条微指令来完成上述四路转移的功能。 多路转移方式的特点是: 能与较短的顺序控制字段配合,实现多路并行转移,灵活性好, 速度快,但转移地址逻辑需要用组合逻辑方法实现。 3、微指令的格式 微指令的格式大体分成两类:水平型微指令和垂直型微指令。 (1)水平型微指令 水平型微指令是指一次能定义并执行多个并行操作微命令的微指令。 其一般格式如下: 控制字段 条件测试字段 下址字段 按照控制字段的编码方法不同,水平型微指令可分为直接表示水平型微指令、字段译码 水平型微指令和混合表示水平型微指令,这些微指令在介绍微命令表示法时已作叙述,在此 不作重复。 (2)垂直型微指令 微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能 , 称为垂直型微指令。其格式类似于机器指令,它有操作码,在一条微指令中只有 1~2 个微 命令,每条微指令的功能简单,因此,实现一条机器指令的微程序要比水平型微指令编写的 微程序长得多,它是采用较长的微程序结构去换取较短的微指令结构。下面介绍 4 条垂直型 微指令。设微指令字长为 16 位,微操作码 3 位。 1)寄存器─寄存器传送型微指令 其功能是把源寄存器中的数据传送到目标寄存器。15~13 位为微操作码,源寄存器和 目标寄存器编址各 5 位,可指定 32 个寄存器。 2)运算控制型微指令 15 13 12 8 7 3 2 0 0 0 0 源寄存器编址 目的寄存器编址 其他 134 其功能是选择 ALU 的左、右两个输入源,按 ALU 字段所指定的运算功能(8 种操作) 进行处理,并将结果送入暂存器中。左、右输入源编址可指定 32 种信息源之一。 3)访存微指令 其功能是将主存中一个单元的信息送入寄存器或者将寄存器的数据送往主存。存储器编 址是指按规定的寻址方式进行编址。第 2 位指定读操作或写操作 4)条件转移微指令  其功能是根据测试条件决定是转移到D 所指定的微地址单元,还是顺序执行下一条 微指令。9 位 D 字段不足以表示一个完整的 微地址,但可以用来替代现行 μPC 的低位地 址。 测试条件字段有 4 位,可规定 16 种测 试条件。 由此可见,水平型微指令和垂直型微指 令各有所长。第一,水平型微指令并行操作 能力强,效率高,灵活性强,而垂直型微指 令则较差;第二,水平型微指令执行一条指 令的时间短,而垂直型微指令执行时间长; 第三,水平型微指令编写的微程序较短,而 垂直型微指令编写的微程序较长;第四,水 平型微指令用户难以掌握,而垂直型微指令 与机器指令相似,相对来说,比较容易掌握。 6.4.4 微程序设计举例 我们知道微程序设计的关键是设计微 指令的结构,而微指令的结构设计又取决于 控制器和运算器的结构。在此我们以图 6-20 所示的运算器、图 6-21 所示的微指令格式为 例,来具体说明 “十进制加法”指令的微 程序设计过程。 1、十进制加法指令的功能 十进制加法指令的功能是用 BCD 码来 完成一位十进制数的加法运算。当两个一位 十进制数进行相加运算时,如果和数大于 9, 图 6-28 十进制加法指令的微程序流程 15 13 12 4 3 0 0 0 0 D 测试条件 15 13 12 8 7 3 2 1 0 0 0 0 寄存器编址 存储器器编址 读写 其他 15 13 12 8 7 3 2 0 0 0 0 左输入源编址 右输入源编址 ALU 0000 0001 0000 1001 1000 0000 RD 0000 Cy=0 Cy=1 PC→AR→ABUS DBUS→DR→IR , PC+1 P1 R1+R2→R2 R2+R3→R2 P2 R2-R3→R2 135 其运算结果是错误的,必须对错误的结果进行加 6 修正,方可得到正确的结果;如果和数小 于或等于 9,十进制运算的结果是正确的,无须进行修正。 2、十进制加法指令的微程序流程图 假设两个一位十进制数 a 和 b 已存放在图 6-20 中的 R1 和 R2 寄存器中,数 6 存放在 R3 寄存器中。其算法采用先进行 a+b+6 运算,再判断结果有无进位,若有进位 Cy=1,不减 6; 若无进位 Cy=0,减去 6。因此,完成十进制加法指令的微程序流程如图 6-28 所示。 3、十进制加法指令的微程序 根据图 6-28 可知,十进制加法指令的微程序由 4 条微指令组成。 第一条微指令是完成取指操作,该微指令所在控制存储器该微指令所在控制存储器的地 址为 0000,其编码为: 000 000 000 000 11111 10 0000 这条微指令在执行时,一方面操作控制字段产生 5 个微命令,他们分别是 LDAR´、RD´、 LDDR´、LDIR´、PC+1。LDAR´执行 PC→AR;PC+1 执行 PC+1→PC;RD´和 LDDR´执行 M→DR;LDIR´执行 DR→IR。假设十进制加法指令的操作码为 1000,那么指令寄存器 IR 中的指令操作码是 1000。另一方面,顺序控制字段指明下一条微指令的地址为 0000。由于 判断字段中 P1=1,表示测试的“状态条件”是指令寄存器 IR 中的指令操作码 1000,即用指 令操作码 1000 作为下一条微指令的地址,因此,此微指令的下址 0000 并不是下一条微指令 的真正地址。下一条微指令的真正地址是指令的操作码 1000,于是,微地址寄存器 µAR 的 内容修改为 1000。 第二条微指令是完成 a+b 运算操作,该微指令的微地址为 1000,其编码为: 010 100 100 100 00000 00 1001 根据微地址寄存器 µAR 的内容 1000,取出第二条微指令并执行。执行时,一方面操作控制 字段产生 4 个微命令,他们分别是 R1→X、R2→Y、+、LDR2´。于是,运算器完成 R1+R2→R2 的操作。另一方面,顺序控制字段中判断测试字段 P1 和 P2 均为 0,表示不进行测试,于是, 该微指令的下址字段 1001 直接作为下一条微指令的地址,并传送到微地址寄存器 µAR。 第三条微指令是完成 a+b+6 运算操作,该微指令的微地址为 1001,其编码为: 010 001 001 100 00000 01 0000 根据微地址寄存器 µAR 的内容 1001,取出第三条微指令并执行。执行时,一方面操作控制 字段产生 4 个微命令,他们分别是 R2→X、R3→Y、+、LDR2´。于是,运算器完成 R2+R3→R2 的操作。另一方面,顺序控制字段中判断测试字段 P2 为 1,表 示 对 P2 进行测试,测试的“状 态条件”为进位标志 Cy,根据进位标志 Cy 的状态来修改微地址寄存器 µAR 的最后一位: 若 Cy=0 时,下一条微指令的地址为 0001;若 Cy=1 时,下一条微指令的地址为 0000。由此 可见,该微指令的下址 0000 并不是下一条微指令的真正地址。下一条微指令的真正地址是 对下址 0000 的修改。在此假设 Cy=0,则要执行的下一条微指令的地址为 0001,送到微地址 寄存器 µAR。 第四条微指令是完成 a+b-6 运算操作,该微指令的微地址为 0001,其编码为: 010 001 001 001 00000 00 0000 根据微地址寄存器 µAR 的内容 0001,取出第四条微指令并执行。执行时,一方面操作控制 字段产生 4 个微命令,他们分别是 R2→X、R3→Y、-、LDR2´。于是,运算器完成 R2-R3→R2 的操作。另一方面,顺序控制字段中判断测试字段 P1 和 P2 均为 0,表示不进行测试,于是, 该微指令的下址字段 0000 直接作为下一条微指令的地址,并传送到微地址寄存器 µAR,按 该地址取出的微指令为“取指”微指令。 如果第三条微指令进行测试时 Cy=1,那么,下一条微指令的地址为 0000,将不执行第 四条微指令,而是直接由第三条微指令就转向“取指”微指令,便开始从内存中取第二条机 136 器指令,再转去执行该机器指令相应的微程序。 【例 6-2】设某运算器的结构如图 6-29(a)所示,其中 ALU 为 16 位算术逻辑单元,SA、SB 为 16 位暂存器,4 个通用寄存器由 D 触发器组成其读写控制功能见表 6-2。机器采用串行微 程序控制方式,其微指令周期如图 6-29(b)所示。其中读 ROM 是从控制存储器中读出一条微 指令的时间,为 1µs;ALU 做加法运算时间为 500ns;m1 是读寄存器的时间为 500ns;m2 是 写寄存器的工作脉冲宽度为 100ns。 表 6-2 通用寄存器读写控制功能 读控制 写控制 R RA0 RA1 选择 W WA0 WA 1 选择 1 1 1 1 0 0 0 1 1 × 0 1 0 1 × R0 R1 R2 R3 不读出 1 1 1 1 0 0 0 1 1 × 0 1 0 1 × R0 R1 R2 R3 不写入 微指令字长为 12 位,其格式如下:(未考虑顺序控制字段) 0 1 2 3 4 5 6 7 8 9 10 11 RA0RA1 WA 0WA 1 R W LDSA LDSB SB→ALU BS →ALU Reset ~ 其中 RA0RA1:读 R0──R3 的选择控制 WA 0WA 1:写 R0──R3 的选择控制 R:寄存器读命令 W:寄存器写命令 LDSA:打入 SA 的控制信号 LDSB:打入 SB 的控制信号 SB→ALU:传送 SB 的控制信号 BS →ALU:传送 BS 的控制信号并使 ALU 最低位加 1 Reset:清暂存器 SB 为 0 的信号 ~:一段微程序结束,转入取指令的控制信号 图 6-29 16 位的运算器 要求用二进制代码写出一下机器指令的微程序: (1)ADD R0 ,R1 ;(R0)+(R1)→R1 137 (2)SUB R2 ,R3 ;(R3)—(R2)→R3 (3)MOV R2 ,R3 ;(R2)→(R3) 解:首先根据机器指令的功能,画出三条机器指令的微程序流程图,如图 6-30 所示。 其中未考虑公共的取指周期和顺序控制问题,在每方框的右上角仅用数字标号表示微指令的 顺序。其次根据机器指令的微程序流程图,设计微程序,表 6-3 给出了三条机器指令的微程 序见。其中×表示任意设置(0 或 1 均可)。可以看出:ADD 和 SUB 指令的微程序由 3 条微 指令构成,MOV 指令的微程序由 2 条微指令构成。 图 6-30 微程序流程图 表6-3 三条机器指令的微程序 机器指令 微程序的二进制代码 ADD R0 ,R1 1.00××10100000 2.01××10010000 3.××0101001001 SUB R2 ,R3 4.11××10100000 5.10××10010000 6.××1101000101 MOV R2 ,R3 7.10××10100000 8.××1101001011 6.4.5 微程序控制器设计步骤 微程序控制器设计的最主要任务是编写所有机器指令对应的微程序。具体微程序控制器 设计步骤如下: 1、设计微指令的结构 设计微程序结构时,首先分析机器的组成结构,拟定微命令集,找出相容性和相斥性微 命令,选择以微指令的执行方式(串行方式还是并行方式),确定微命令的编码方式和字段 的划分;其次分析测试条件,以确定后续微地址的形成方法(增量方式、断定方式)。 2、画出微程序流程图 在分析所有机器指令的功能基础上,合理安排控制存储器中的微程序,画出微程序流程 ADD SUB MOV PC→AR→ABUS,PC+1 RD,DBUS→DR→IR R3→SA R2→SB SA-SB→R3 R0→SA R1→SB SA+SB→R1 R2→SA,0→SB SA+SB→R3 P 138 图。 3、编制微程序 根据微指令格式和微程序流程图编写微程序,并对所有微程序进行优化和代码化。 4、写控制存储器 将指令系统中所有机器指令的微程序进行二进制编码,并写入控制存储器。如果控制存 储器采用只读存储器,一旦写入,其内容将不会改变,此控制器为静态微程序控制器;如果 控制存储器采用随机存储器,则为动态微程序控制器。 6.5 组合逻辑控制器 组合逻辑控制器也称为硬布线控制器,是早期设计计算机的一种方法,这种方法是把控 制部件看作为产生专门固定时序控制信号的逻辑电路,而此逻辑电路以使用最少元件和取得 最高操作速度为设计目标,一旦控制部件构成后,除非重新设计和物理上对它重新布线,否 则要想增加新的控制功能是不可能的,这种缺陷使得组合逻辑控制器的设计和调试变得非常 复杂,而且代价巨大,所以,组合逻辑控制器后来被微程序控制器所取代。但随着新一代计 算机和 VLSI 技术的发展,组合逻辑控制器又得到了重视,如 RISC 精简指令系统计算机广 泛使用这种控制器。 组合逻辑控制器由组合逻辑线路、模 k 时序产生器和 1/k 译码器等部件组成,其原理如 图 6-31 所示。 图 6-31 组合逻辑控制器原理框图 其中,组合逻辑线路的输入信号有:来自指令译码器的输出 Im、来自执行部件的反馈 信息 Bj、来自时序产生器的节拍脉冲信号 Tk;组合逻辑线路的输出信号就是微操作控制信 号,用来对执行部件进行控制。某一微操作控制信号 Cn 是指令操码译码器的输出 Im、节拍 脉冲信号 Tk 和反馈信息 Bj 的逻辑函数,即 Cn=ƒ(Im,Tk,Bj)。为了说明组合逻辑控制器的工作 原理,假设简化的 CPU 模型为如图 6-32 所示。指令的执行过程如图 6-33 所示。其中前 3 139 步为取指令,对所有指令来说是相同的,后 3 步为执行指令,随指令功能的差异而变化。根 据指令 ADD、AND、STA、LDA、JMP、JMPZ、COM 的功能,我们可以画出指令的流程 图,如图 6-34 所示。图中微操作决定了在 CPU 中所需的控制信号和控制点。 我们假定读主存和写主存的操作在两个单位时间内完成,其他微操作都可以在一个单位 时间内执行完毕。由指令流程图可以看出,ADD、AND、STA、LDA 指令需要 8 个单位时 间,其中取指周期需要 4 个单位时间,执行周期需要 4 个单位时间;而 JMP、JMPZ、COM 指令只需 5 个单位时间,4 个单位时间用于取指,一个单位时间用于执行。假定一个单位时 间用一个节拍脉冲的时序信号来体现,因此需要一个模 8 计数器。 显然,根据指令流程图,可以确定在指令周期中各时刻必须激活某一指令的某些操作信 号。例如,对引起一次内存读操作的操作信号 C3 来说,当 T2=1,取指令时被激活;而当 T6=1, 3 条指令(LDA、ADD、AND)取操作数时也被激活,此时,指令译码器的 LDA、ADD、 AND 输出为“1”,因此,C3 的逻辑表达式为: C3=T2+T6(LDA+ADD+AND) 一般来说,控制信号 Cn=∑(Ti∑Im) 。其 中,Im 为指令译码器的输出。在要求 i95%的 PCI-E 通道数据占用率。这样的传输受益于增加的传输通道, 但大多数应用程序如 USB 或以太网络控制器会把传输内容拆成小的数据包,同时还会强制 加上确认信号。这类数据传输由于增加了数据包的解析和强制中断,降低了传输通道的效率。 这种效率的降低并非只出现在 PCI-E 上。 3、PCI Express 总线的特点 (1)易于布线、减少串扰,多方式连接 PCI Express 导线数量比 PCI 减少近 75%,数据不需要同步,在同一系统内能够以不同 频率运行,而且能够延伸到系统之外,采用专用线缆可将各种外设直接与系统内的 PCI Express 总线连接在一起。这是 PCI 无法做到的。 (2)PCI Express 数据传输速率快每个通道带宽为 2.5Gb/s(可提升到 5Gb/s),理论上最高 连接带宽可达 8-10GB/s。 (3)兼容 PCI 和 PCI-X (4)其它功能 PCI Express 接口标准可以支持不同的信令协议;采用先进电源管理技术,支持热插拔 功能;可以对所有的接入设备进行实时监控;采用独特的纠错机制保证整个系统的稳定运行。 9.6.2 USB 总线 USB(Universal Serial Bus)称为通用串行总线,是在 20 世纪 90 年代中期由 Compaq、DEC、 IBM、Intel、Microsoft 和 NEC 等多家美国和日本公司共同提出的新一代接口标准总线。1994 年,Intel、Digital、IBM、Microsoft、NEC、Northern Telecom 等几家世界著名的计算机和通 信公司成立了 USB 论坛,花了近两年的时间形成了统一的意见,于 1995 年 11 月正式制定 了 USB0.9 通用串行总线规范,1997 年,真正符合 USB 技术标准的外设出现了。1999 年初 在 Intel 的开发者论坛大会上,与会者介绍了 USB2.0 规范,该规范的支持者除了原有的 Intel、 Microsoft 和 NEC 等成员外,还有惠普、朗讯和飞利浦三个新成员。USB2.0 向下兼容 USB1.1, 传输率将达到 480Mbps,还支持宽带数字摄像设备及下一代扫描仪、打印机及存储设备。 USB 总线接口如图 9-10 所示。 214 图 9-10 USB 总线接口 USB 总线是为了适应微机系统应用的日益广泛,需要连接的外部设备不断增加,解决 微机端口短缺而产生的。它和 IEEE1394 同样是一种连接外围设备的机外总线。从性能上看, 最初 USB 总线在很多方面不如 IEEE1394,但是却拥有 IEEE1394 无法比拟的价格优势,在 一段时期内,它和 IEEE1394 总线并存,分别管理低速和高速外设。随后由于廉价的 USB 总线具有热插拨的魅力,使得 USB 大量出现在主板上,出现在打印机、扫描仪、摄像头、 优盘,甚至是显示器等设备上。 USB 是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB 接口支持设 备的即插即用和热插拔功能。 USB 使用一个四针的插头作为标准插头,采用菊花链形式可以把所有的外设连接起来。 USB 接口可用于连接多达 127 种外设,如鼠标、调制解调器和键盘等。USB 自从 1996 年推 出后,已成功替代串口和并口,并成为当今个人电脑和大量智能设备的必配的接口之一。 1、USB 总线的性能 USB 是一条串行总线,传统的串行端口是各自独立的,例如,键盘端口只能连接键盘, 鼠标器端口只能连接鼠标器,它们相互间并不连通。但在 USB 总线上,各 USB 端口是互相 关联的,除连接自己的外设外,也同时连接到 USB 提供的 4 根连线上,其中 2 根为信号传 输线,2 根为电源连接线。但是,同其他总线的工作相似,在某一特定的时间,信号传输线 只能与某一特定的外设相连通。也就是说,在同一时间内只能有一台外设获得 USB 的控制 权,以确保各台外设传送的信号互不干扰。 区别于传统端口一个端口只能连接一台外设,USB 端口连接的外设可以有两类:一类 是单个的外设,在 USB 术语中称为“功能单元”(Function);另一类是“集线器”(Hub), 它带有连接其他外设的 USB 端口,使 USB 可经过它再连接到其他外设上。由于集线器具有 多路转换的功能,所以不论有多少台外设连到集线器上,在同一时刻只有一台外设可以通过 集线器与 USB 相连。采用集线器之后,USB 的拓扑结构将呈现树状结构,其连接的外设总 台数可以达到 127 台。 2、USB 总线的特点 特点一,可以热插拔,这就让用户在使用外接设备时,不需要重复“关机将并口或串口 电缆接上再开机”这样的动作,而是直接在 PC 开机时,就可以将 USB 电缆插上使用; 特点二,标准统一,大家常见的是 IDE 接口的硬盘,串口的鼠标键盘,并口的打印机 扫描仪,可是有了 USB 之后,这些应用外设统统可以用同样的标准与 PC 连接,这时就有 了 USB 硬盘、USB 鼠标、USB 打印机,等等; 特点三,可接入多达 127 个设备,目前计算机外设越来越多,PC 机内有限的插槽和接 口已经不能满足要求,USB 缓解了这一矛盾; 特点四,携带方便,USB 设备大多以“小、轻、薄”见长,对用户来说,同样 20G 的 硬盘,USB 硬盘比 IDE 硬盘要轻一半的重量,在想要随身携带大量数据时,当然 USB 硬盘 会是首要之选了; 特点五,可即插即用; 特点六,适用于低速外设的连接。 3、USB 的应用 215 随着计算机硬件飞速发展,外围设备日益增多,键盘、鼠标、调制解调器、打印机、扫 描仪早已为人所共知,数码相机、MP3 随身听接踵而至,这么多的设备,如何接入个人计 算机?USB 就是基于这个目的产生的。USB 是一个使计算机周边设备连接标准化、单一化 的接口,其规格是由 Intel、NEC、Compaq、DEC、IBM、Microsoft、Northern Telecom 联系 制定的。 USB1.1 标准接口传输速率为 12Mbps,但是一个 USB 设备最多只可以得到 6Mbps 的传 输频宽。因此若要外接光驱,至多能接六倍速光驱,无法再高。而若要即时播放 MPEG-1 的 VCD 影片,至少要 1.5Mbps 的传输频宽,这点 USB 办得到,但是要完成数据量大四倍的 MPEG-2 的 DVD 影片播放,USB 可能就很吃力了,若再加上 AC-3 音频数据,USB 设备就 很难实现即时播放了。 不过,并非所有的 Windows 系统都支持 USB。目前,Windows 系统中有许多不同的版 本,在这些版本中,只有 Windows98 以上版本的系统对 USB 的支持较好,而其他的 Windows 版本并不能完整支持 USB。例如 Windows95 的零售版是不支持 USB 的,只有后来与 PC 捆 绑销售的 Windows95 版本才支持 USB。 目前 USB 设备虽已被广泛应用,但比较普遍的却是 USB1.1 接口,它的传输速度仅为 12Mbps。举个例子说,当你用 USB1.1 的扫描仪扫一张大小为 40M 的图片,需要 4 分钟之 久。 这样的速度,让用户觉得非常不方便,如果有好几张图片要扫的话,就得要有很好的 耐心来等待了。 用户的需求,是促进科技发展的动力,厂商也同样认识到了这个瓶颈。这时, COMPAQ、 Hewlett Packard、Intel、Lucent、Microsoft、NEC 和 PHILIPS 这 7 家厂商联合制定了 USB 2.0 接口标准。USB 2.0 将设备之间的数据传输速度增加到了 480Mbps,比 USB 1.1 标准快 40 倍左右,速度的提高对于用户的最大好处就是意味着用户可以使用到更高效的外部设备,而 且具有多种速度的周边设备都可以被连接到 USB 2.0 的线路上,而且无需担心数据传输时发 生瓶颈效应。 所以,如果你用 USB 2.0 的扫描仪,就完全不同了,扫一张 40M 的图片只需半分钟左 右的时间,一眨眼就过去了,效率大大提高。 而且,USB2.0 可以使用原来 USB 定义中同样规格的电缆,接头的规格也完全相同,在 高速的前提下一样保持了 USB 1.1 的优秀特色,并且,USB 2.0 的设备不会和 USB 1.X 设备 在共同使用的时候发生任何冲突。 USB2.0 兼容 USB1.1,也就是说 USB1.1 设备可以和 USB2.0 设备通用,但是这时 USB2.0 设备只能工作在全速状态下(12Mbit/s)。USB2.0 有高速、全速和低速三种工作速度,高速是 480Mbit/s,全速是 12Mbit/s,低速是 1.5Mbit/s。其中全速和低速是为兼容 USB1.1 而设计的, 因此选购 USB 产品时不能只听商家宣传 USB2.0,还要搞清楚是高速、全速还是低速设备。 USB 总线是一种单向总线,主控制器在 PC 机上,USB 设备不能主动与 PC 机通信。为解决 USB 设备互通信问题,有关厂商又开发了 USB OTG 标准,允许嵌入式系统通过 USB 接口 互相通信,从而甩掉了 PC 机。 随着 USB2.0 协议的推出,USB 总线的应用会更加广泛。USB 2.0 将设备之间的数据传 输速度增加到了 480Mbps,比 USB1.1 标准快 40 倍左右,速度的提高对于用户的最大好处 就是意味着用户可以使用到更高效的外部设备,而且具有多种速度的周边设备都可以被连接 到 USB2.0 的线路上,而且无需担心数据传输时发生瓶颈效应。而且,USB2.0 可以使用原 来USB 定义中同样规格的电缆,接头的规格也完全相同,在高速的前提下一样保持了USB1.1 的优秀特色。USB 2.0 设备在和 USB 1.X 设备共同使用的时候也不会发生任何冲突。 3、USB3.0 简介 216 英特尔公司(Intel)和业界领先的公司一起携手组建了 USB 3.0 推广组,旨在开发速度 超过当今 10 倍的超高效 USB 互联技术。该技术是由英特尔,以及惠普(HP)、NEC、NXP 半导体以及德州仪器(Texas Instruments)等公司共同开发的,应用领域包括个人计算机、 消费及移动类产品的快速同步即时传输。随着数字媒体的日益普及以及传输文件的不断增大 ——甚至超过 25GB,快速同步即时传输已经成为必要的性能需求。 USB 3.0 具有后向兼容标准,并兼具传统 USB 技术的易用性和即插即用功能。该技术 的目标是推出比目前连接水平快 10 倍以上的产品,采用与有线 USB 相同的架构。除对 USB 3.0 规格进行优化以实现更低的能耗和更高的协议效率之外,USB 3.0 的端口和线缆能够实 现向后兼容,以及支持未来的光纤传输。 从逻辑上说 USB 3.0 将成为下一代最普及的个人电脑有线互联方式,英特尔技术战略师 Jeff Ravencraft 说道:“数字时代需要高速的性能和可靠的互联来实现日常生活中庞大数据 量的传输,USB 3.0 可以很好地应对这一挑战,并继续提供用户已习惯并继续期待的 USB 易用性体验。” 关 联 ISA AGP PCI Express IEEE1394 RS232C USB PCI EISA 217 习 题 9.1 判断题 (1)总线是专门用于完成数据传送的一组信号线。( ) (2)无条件式的 I/O 是按先读状态口,再读数据口的顺序传送数据的。( ) (3)计算机使用总线结构主要优点是便于实现模块化,同时减少了信息传输线的数目。( ) (4)在计算机的总线中,地址信息、数据信息和控制信息不能同时出现。( ) (5)内部总线是指 CPU 内部连接各逻辑部件的一组数据传输线,它用三态门和多路开关来 实现。( ) (6)USB 提供的 4 根连线中有 2 根信号线,每一条信号线可以连通一台外设,因此,在某 一时刻,可以同时有 2 台外设获得 USB 的控制权。( ) (7)组成总线不仅要有传输信息的传输线,还应有实现总线传输控制的器件,它们是总线 缓冲器和总线控制器。( ) (8)总线的发展是和 CPU 的发展紧密相连的,CPU 的速度提高后,总线的数据传输率如 果不随之提高,势必妨碍整机性能的提高。( ) 9.2 选择题 (1)现代计算机的运算器一般通过总线结构来组织,下述总线结构的运算器中,( )的操 作速度最快,( )的操作速度最慢。 A、单总线结构 B、双总线结构 C、三总线结构 D、多总线结构 (2)把总线分成数据总线、地址总线、控制总线三类是根据( )来分的。 A、总线所处的位置 B、总线传送的内容 C、总线的传送方式 D、总线的传送方向 (3)CPU 与 I⁄O 设备间传送的信号有( )。 A、数据信息 B、控制信息 C、状态信息 D、以上三种都是 (4)将处理器、内存储及 I/O 接口连接起来的总线是( )。 A、片总线 B、外总线 C、系统总线 D、内部总线 (5)计算机中地址总线的作用是( )。 A、 用于选择存储单元 B、用于选择进行信息传输的设备 C、 指定存储单元和 I/O 设备接口电路的选择地址 D、 用于确定操作对象 (6)计算机使用总线结构便于增减外设,同时( )。 A、 减少了信息的传输量 B、提高了信息的传输量 C、 减少了信息传输线的条数 D、增加了信息传输线的条数 (7)在计算机中将各个主要组成部件连接起来,组成一个可扩充基本系统的总线称之为 ( )。 A、 外部总线 B、 内部总线 C、 局部总线 D、 系统总线 (8)状态信息是通过( )总线进行传送的。 A、数据 B、地址 C、控制 D、外部 (9)下列总线中,属于局部总线的是( )。 A、ISA B、EISA C、MCA D、PCI (10)为协调计算机系统各部件工作,需有一种器件来提供统一的时钟标准,这个器件是 ( )。 A、总线缓冲器 B、总线控制器 C、时钟发生器 D、操作命令产生器 9.3 填空题 (1)在链式查询、计数器定时查询、独立请求三种总线控制判优方式中,响应时间最快的 是▁▁▁▁方式;对电路故障最敏感的是▁▁▁▁方式。 218 (2)在单总线、双总线、三总线三种系统中,从信息流传送效率的角度看,▁▁▁▁的工 作效率最低;从吞吐量来看,▁▁▁▁最强。 (3)连接在单总线上的设备均以▁▁▁▁或▁▁▁▁的形式申请使用总线。 (4)在单总线结构的计算机系统中,每个时刻只能有两个设备进行通信,在这两个设备中, 获得总线控制权的设备叫▁▁▁▁,由它指定并与之通信的设备叫 ▁▁▁▁。 (5)标准微机总线中,PC/AT 总线是 ▁▁▁▁位总线,MCA 总线是 ▁▁▁▁位总线, EISA 总线是▁▁▁▁位总线,PCI 总线是▁▁▁▁位总线。 (6)AGP 总线不同于通用的 PCI 局部总线,它是供 ▁▁▁▁专用的。它在▁▁▁▁与系 统内存之间提供了一条直接的访问途径。 (7)USB 串行接口通过使用▁▁▁▁,可以使一台 PC 机连接的外部设备数多达▁▁▁▁ 台。 (8)在计算机系统中根据总线所传输的信息内容的不同,总线可分为▁▁▁▁、▁▁▁▁ 和▁▁▁▁。任何类型计算机的总线都包含有这三种总线。 9.4 什么叫总线?为什么各种计算机系统中普遍采用总线式结构? 9.5 总线按照功能分类可分为哪几类,各完成什么功能? 9.6 总线的结构类型有哪些,都有什么特点? 219 第 10 章 并行处理和互连网络 【内容摘要】 并行处理(Parallel Processing)是计算机系统中能同时执行两个或更多个处理机的一种 计算方法,是提高系统性能的主要手段,是信息处理的一种有效形式。互连网络已成为并行 处理系统的核心组成部分,它对并行处理系统的性能起着决定性的作用。 【学习要点】 ● 并行处理概念、基本结构和特点 ● 典型 SIMD 计算机结构和应用 ● 互连网络的概念和互连函数 ● 静态和动态互连网络 ● 互连网络消息传递机制和死锁 10.1 并行处理的概念 10.1.1 并行性 研究改进计算机系统结构的一个主要方面是如何开发出并行性。并行性(Parallelism) 是指问题中具有可同时进行运算或操作的特性。如在同一时刻或同一时间间隔内完成两种或 两种以上性质相同或不同的任务为并行性。开发并行性的目的是为了能予以并行处理,以提 高解题效率。 并行性有两个含义:一是同时性(Simultaneity),是指两个或多个事件在同一时刻发生 在多个资源中;二是并发性(Concurrency),指两个或多个事件在同一时间间隔内发生在多 个资源中。 并行处理是一种有效的强调开发计算过程中并行事件的信息处理方式,是提高系统性能 的主要手段之一。如在运算器中采用串行结构运算,每次进行一位运算,那么完成 n 位数据 的运算要花费 n 个时间单位,如果采用并行结构,设置一个 n 位运算器,则用 1 个时间单位 就可完成(理想状态下)。可以看出,在元器件速度相同的条件下,后者的速度几乎是前者 的 n 倍。可见,并行处理能大幅度的提高计算机系统的运行速度。 11.1.2 并行性的等级和分类 从不同的角度看,并行性有不同的类型。 1、从计算机系统处理数据的角度 从计算机系统处理数据的角度看,并行性等级由低到高,分别是位串字串(串行单处理 机,无并行性)、位并字串(传统并行单处理机)、位片串字并、全并行。 2、从计算机信息加工的各个步骤和阶段的角度 从计算机信息加工的各个步骤和阶段的角度,并行性等级可分为如下 4 种: (1)存储器操作并行性 存储器操作并行性如并行存储器和相连处理机,可采用单体多字,多体交叉存取等方式, 在一个存储周期内访问多个字。 (2)处理器操作步骤并行 处理器操作步骤并行如流水线处理机,指令处理器在执行取指令、分析指令、执行指令 等过程中的并行。 (3)处理器操作并行 处理器操作并行如阵列并行处理机,为支持向量、数组运算、可以通过重复设置处理单 元进行。 (4)指令、任务、作业的并行 220 这种并行称为高级并行,指令级以上并行是指多个处理机同时对多条指令及有关的数据 进行处理。如多指令流多数据流多处理机、分布处理系统和计算机网络等。 3、从计算机系统中执行程序的角度 从计算机系统中执行程序的角度看,并行性等级由低到高,分别是指令内各微操作之间 的并行、多条指令之间的并行、多个任务或进程之间的并行和多个作业或程序之间的并行。 4、从系统结构发展的角度 从系统结构发展来看,并行性等级由低到高,分别是高性能的单处理机、SIMD 并行处 理机、多处理机和多计算机系统、非冯·诺依曼计算机。 按照 Flynn 分类法归纳的并行计算机体系结构图谱可如图 10-1 所示。 图 10-1 并行计算机的 Flynn 分类图 10.1.3 开发并行性的途径 提高计算机系统的并行性,可通过多种技术途径来实现。通常以时间重叠、资源重复和 资源共享为开发并行性的三个主要途径。 1、时间重叠(Time Interleaving) 时间重叠是在并行性概念中引入时间因素,让多个处理过程在时间上相互错开,轮流重 叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度,如指令内部各操作步骤 采用重叠流水的工作方式。 一条指令的解释分为取指、 分析、执行三大步骤,分别在相应 的硬件上完成。只要不出现相关,则每过一个△t 时间,就可以流出结果,从而加快了程序 的执行速度。这种时间重叠技术原则上不需要增加更多的硬件设备就可以提高计算机系统的 性能价格比。 2、资源重复(Resource Replication) 资源重复是在并行性中引入空间的因素。它是靠重复设置硬件资源来提高可靠性或性 能,如通过使用两台或多台完全相同的处理器或计算机完成同样的任务来提高性能。典型的 例子是双工系统、相连处理机和阵列处理机等。 3、资源共享 资源共享是用软件方法让多个用户共用同一套资源,通过提高系统资源的利用率来提高 系统的性能和效率。典型的例子是多道程序分时系统、它是利用共享 CPU、主存资源以降 低系统价格来提高设备利用率的一个实例。例子还包括计算机网络和分布处理系统等。 沿时间重叠途径,多个处理机进行流水线构成的多处理机,一般都是非对称型或异构型 的;沿资源重复途径,构成的相联处理机和阵列处理机都是对称型或同构型的多处理机;沿 资源共享途径发展的多处理机则既可以是同构型的,也可以是异构型的。 221 10.2 并行处理机基本结构 并行处理机也称阵列机,是采用资源重复的并行性措施实现。它是指将大量重复设置的 多个处理单元 PE(Processing Element)按一定方式互连成阵列,在统一的控制部件 CU(Control Unit)控制下,对各自所分配的不同数据并行执行同一指令规定的操作,是操作 并行的 SIMD(单指令流多数据流)计算机。它采用资源重复的措施开发并行性,是以 SIMD 方式工作的。这里的 PE 是指不带指令控制部件的算术逻辑运算单元。 10.2.1 并行处理机的两种典型结构 并行处理机通常由一个控制器 CU(Control Unit,CU)、N 个处理器单元 PE(Processing Element,PE)、M 个存储模块以及一个互连网络部件(Inter Connection Network,ICN)组成。 根据其中存储器模块的分布方式,并行处理机可分为两种基本结构:分布式存储器的并行处 理机和共享存储器的并行处理机。这两种结构的共同特点是在整个系统中设置多个处理单 元,各个处理单元按照一定的连接方式交换信息,在统一的控制部件作用下,各自对分配来 的数据并行地完成同一条指令所规定的操作。下面分别对这两种基本结构进行介绍。 1、分布式存储器结构并行处理机 分布式存储器结构并行处理机具备 4 个特点:○1 包含重复设置的多个同样的处理单元 PE,通过数据寻径网络以一定方式互相连接;○2 各 PE 都拥有自己的局部存储器 PEM (Processing Element Memory),存放被分配的数据并只能被本处理单元直接访问;○3 在统一 的阵列控制部件作用下,实现并行操作;○4 程序和数据通过主机装入控制存储器。由于通过 控制部件的是单指令流,所以指令的执行顺序还是和单处理机一样,基本上是串行处理。其 结构图如图 10-2 所示。 主机 I/O 接口 I / O 设备 PEM0 PEM1 PEMN-1 PE 0 PE1 PEN-1 互连网络 控制部件存储器 CU 控制 数据总线 控 制 控制总线 … … 图 10-2 分布式存储器的并行处理机结构图 这种结构的并行处理机种处理单元的数目和存储体的数目是相同的,每个处理单元仅和 自己的存储体之间相连,直接交换数据。在实现时,为了有效地进行高速处理,数据应在各 存储体间合理分配,使各处理单元都可以依靠自身存储体中的数据进行运算。各数据单元之 间交换数据是经过两条途径相互联系:一条是直接通过互连网络;另外一条是如果在某个存 储体中存有各处理单元都需要的公共数据,则可以通过将处理单元局部存储体 PEM 读入控 制单元,然后通过公共数据总线“广播”到全部处理单元中。在处理单元很多的并行处理机 中,PE 之间的互连网络只能是有限而固定的连接。 ILLIAC-IV 是这种结构的 SIMD 机器,它由 64 个本地存储器的 PE 组成,PE 间通过 8×8 222 环绕连接网格实现互连,因而也称为阵列处理机,其处理速度达每秒 150×106 次 64 位浮点 加法运算。各种 SIMD 机器的主要差别在于进行 PE 之间互相通信的数据寻径网络不同。目 前的大部分并行处理机是基于分布式存储器模型的系统。 2、共享存储器并行处理机 共享存储器并行处理机结构有 M 个存储体构成统一的并行处理机存储器,经过互连网 络 ICN 连接,为全部处理单元 PE0~PEn-1 所共享,其结构图如图 10-3 所示。 主机 CU I/O -CH PE 0 PE 1 PE N -1 SM 0 SM 1 SM N -1 互连网络 控制 … … I /O 系统 存储器 控制 … 图 10-3 共享存储器的并行处理机结构图 为了使各处理单元能同时对向量的各个元素进行并行处理,一般都使存储体的数量 M 大于或等于处理单元的数量 n。同时,在存储体之间合理分配数据,使各处理单元数据能来 自不同的存储体,从而最少化受存储器冲突的影响。从图 10-3 中可以看出,在这种结构中, 互连网络是处理单元和存储器之间交换数据的通道。它提供多种连接方式,使每个处理单元 之间的数据传送在大多数向量运算不受影响的情况下是非常重要的。同时也可以看到,这种 互连网络是复杂的,因此,这种结构在处理单元数量不大的情况下是很理想的。如 Burroughs 公司和伊利诺斯大学在 1979 年研制的科学处理机 BSP,就属于这种结构,它有 16 个处理单 元,17 个存储体,最高的向量运算速度可达 50×106 次浮点加法运算。 11.2.2 并行处理机的特点 并行处理机利用多个处理单元对向量或数组所包含的各个分量同时进行运算,从而易于 获得很高的处理速度。与同样擅长于向量处理的流水线处理机相比,并行处理机有如下特点: 1、多处理单元的互连网络连接 互连网络是并行处理的最有特色的一个组成部分,它规定了处理单元的连接方式,决定 了并行处理能适应的算法类别,对系统整体的各项性能指标产生了重要的影响。 2、依靠资源重复并行措施 并行处理机获得高速度的主要原因就是使用大量的处理单元对向量所包含的各个分量 进行运算,每一个处理单元要负责多种处理功能,相当于向量处理机中的多功能流水线部件, 但其效率要比单个的功能流水线低。因此,只有在硬件价格降低和系统结构不断改进,并行 处理机才具有较好的性能价格比。 3、同时性 它的每个处理单元在同一时刻要同等地担负起各种运算功能,相当于向量处理机的多功 223 能流水线部件那样,但其效率(设备利用率)可能没有多个单功能流水线部件那样高。 4、运算速度高 主要是靠增大处理单元个数,与依靠缩短时钟周期地向量流水线处理机来说,速度提高 的潜力要大得多。 正像并行处理机的特点描述一样,并行处理机主要是由处理单元代替了向量处理机中的 流水线,用设备的重复设置达到高速运算的目的。事实上,SIMD 计算机正是属于多处理单 元的这一类,下面将重点介绍 SIMD 计算机的结构与设计。 10.3 SIMD 计算机基本结构 SIMD 计算机属于多处理机单元范畴,它含一个控制单元,多个处理单元,取指令在控 制单元的作用下进行,取出的指令经分析译码后送给个处理器协作完成任务,也就是说指令 流是单独的,数据流是多倍的。下面着重以典型 SIMD 计算机为例介绍其发展进程、结构和 设计。 10.3.1 SIMD 计算机模型 SIMD 计算机的抽象模型可以理解为:在同一个控制部件管理下,有多个处理单元,所 以处理单元均收到从控制部件广播来的同一条指令,但操作对象是不同的数据。 H.J.Siegel 提出了 SIMD 计算机的操作模型,如图 10-4 所示。 图 10-4 SIMD 计算机的操作模型 SIMD 计算机的操作模型可用五元组表示:M=(N,C,I,M,R),其字母所代表的含义如下: N 为机器的处理单元(PE)数。例如,IlliacIV 采用 64 个 PE,连接机(Connection Machine)CM-2 采用 65536 个 PE。 C 为由控制部件(CU)直接执行的指令集,包括标量和程序流控制指令。 I 为由 CU 广播至所有 PE 进行并行执行的指令集,它包括算术运算、逻辑运算、数据 寻径、屏蔽以及其它由每个活动的 PE 对它的数据所执行的局部操作。 M 为屏蔽方案集,其中每种屏蔽将 PE 集划分为允许操作和禁止操作两种子集。 R 是数据寻径功能集,说明互连网络中 PE 间通信所需要的各种设置模式。 10.3.2 SIMD 计算机发展过程 Illiac IV 是最先采用 SIMD 计算机结构的计算机。它分成两个分支,一个是为用位片 PE 制造的 SIMD 计算机,如 Goodyear MPP、AMT/DSP610 和 TMC/CM-2,CM-5 是以 SIMD 224 模式运行的同步 MIMD 计算机;另外一个是用字宽运算 PE 的中粒度 SIMD 计算机,如 BSP 是 16 台处理机和 17 个存储模块同步工作的共享存储 SIMD 计算机,MasPar MP-1 是中粒度 SIMD 计算机。SIMD 计算机的发展过程如图 10-5 所示: 图 10-5 SIMD 计算机的发展过程图 10.3.3 Illiac IV 计算机 Illiac IV 阵列机是世界上最早采用 SIMD 结构设计的计算机,由美国宝来公司 (Burroughs)和伊利诺斯大学合作 1965 年研制,并与 1972 年生产。Illiac IV 系统的原理总 框图如图 10-6 所示。 图 10-6 Illiac IV 的系统结构框图 总体由两大部分组成,即 Illiac IV 阵列和 Illiac IV 输入输出系统。具体来讲,它是有三 种类型处理机联合组成的多机系统:一是专门对付数组运算的处理单元阵列(Processing element array);二是阵列控制器(array control unit),它既是处理单元阵列的控制部分,又 可以看作一台相对独立的小型标量处理机;三是一台标准的 Burrouths B6700 计算机,担负 Illiac IV 输入输出系统和操作系统管理功能。 1、Illiac IV 阵列 Illiac IV 阵列处理器采用分布式存储器结构。每个处理单元配有专用的存储器模块,共 由 64 个处理单元、64 个处理单元存储器和存储器逻辑部件所组成。这个阵列的 64 个处理 部件 PU0~PU63 排列成 8×8 的方阵,每一个 PUi 只和其东、西、南、北四个近邻 PUi+1 (mod 64)、PUi-1(mod 64)、PUi+8(mod 64)和 PUi-8(mod 64)有直接连接。按照此规 则,南北方向上同一列的 PU 两端相连成一个双向环,东西方向上每一行的东端 PU 与下一 行的西端 PU 双向相连,最下面一行的东端 PU 则与最上面一行的西端 PU 双向相连,从而 225 8 行构成一个闭合螺线形状。因此,Illiac IV 的阵列结构又称为闭合螺线阵列。如图 10-7 所 示。 这种连接方式即便于一维长向量(最多 64 个元素)的处理,又便于两维数组运算,从 而缩短处理单元之间数据传送的路径距离。在这个阵列中,任意两个单元之间的数据传送步 距不超过 7 步。一般来讲,这种闭合螺线结构的连接方式,有 n×n 个单元组成的阵列中, 任意两个处理单元之间的最短距离不会超过(n-1)步。例如,从 PU10 到 PU45 的距离以下列 路径为最短: PU10→PU1→PU57→PU56→PU48→PU47→PU46→PU45 图 10-7 Illiac IV 各处理单元阵列结构的闭合螺线连接方式 处理单元数组处理的运算部分,它可对 64 位、32 位和 8 位操作数进行多种算术和逻辑 操作,包括 48 位、24 位或 8 位定点运算。处理单元存储器 PEM 分属每一个处理单元,各 有 2048×64 位的存储容量和不大于 350ns 的取数时间。64 个 PEM 联合组成阵列存储器,存 放数据和指令。PE 和 PEM 之间经过存储器逻辑部件 MLU 相连,这些部件用于处理机与存 储模块接口的逻辑电路,它包含存储器信息寄存器和有关控制逻辑线路,用于实现 PEM 分 别和 PE、CU 以及 I/O 之间的信息传送。 2、阵列控制器 阵列控制器 CU 实际上是一台小型控制计算机。它除了对阵列的处理单元实行控制以 外,如发控制信号、广播公共地址、广播公共数据,还能利用本身的内部资源执行一整套指 令,用以完成标量操作,在时间上与各 PE 的数组操作重叠起来。因此,控制器的功能有以 下五个方面: 第一,对指令流进行控制和译码,包括执行一整套标量操作指令; 第二,向各处理单元发出执行数组操作指令所需的控制信号; 第三,产生和向所有处理单元广播公共的地址部分; 第四,产生和向所有处理单元广播公共的数据; 第五,接收和处理由各 PE(如计算出错时)、系统 I/O 操作以及 B6700 所产生的陷阱中 断信号。 IlliacIV 阵列控制器 CU 与处理单元阵列之间的信息联系有以下四条信息通路: (1)CU 总线 处理单元存储器 PEM 经过 CU 总线把指令和数据送往阵列控制器,以 8 个 64 位字为一 信息块。这里指令是指分布存放在阵列存储器中用户程序的指令;而数据可以是处理所需的 公共数据,先将它们送到 CU,再利用 CU 的广播功能送到各处理单元。 (2)公共数据总线 CDB (Common Data Bus) 这是 64 位总线,用作向 64 个处理单元同时广播公共数据的通路。 PU0 PU8 PU56 PU1 PU9 PU57 PU7 PU15 PU63… … … 226 (3)模式位线( mode bit line) 每一个单元都可以经过模式位线把它的模式寄存器(mode register)状态送到 CU 中来,送 来的信息中也包括该处理单元的"活动"状态位。只有那些处于"活动"状态的处理单元才执行 单指令流所规定的公共操作。 (4)指令控制线 处理单元微操作控制信号和处理单元存储器地址、读/写控制信号都经过约 200 根指令 控制线由 CU 送到阵列处理单元 PE 和存储器逻辑部件 MLU 中来。 3、输入输出系统 Illiac IV 输入/输出系统由磁盘文件系统 DFS(Disk File System)、I/O 分系统和 B6700 处理机组成。 磁盘文件系统 DFS 是两套大容量并行读写磁盘系统及其相应的控制器。I/O 分系统又输 入输出开关 IOS(Input Output Switch)、控制描述字控制器 CDC(Control Description Word Controller)和输入输出缓冲存储器 BIOM(Buffer of Input and Output Memory)三个部分组成 IOS 的功能有二:一是作为名副其实的开关,用以把 DFS 或可能连上的实时装置转接到阵 列存储器,进行大批数据的 I/O 传送;二是作为 DFS 和 PEM 之间的缓冲,以平衡两边不同 的数据宽度。CDC 的功能是对阵列控制器的 I/O 请求进行管理。BIOM 处在 DFS 和 B6700 之间,是为了取得二者之间传送频带的匹配用到的缓冲。 B6700 管理计算机的基本组成部分是:一般配置一个 CPU(另一 CPU 可选)、32K 字内 存(最大可扩充至 512K 字)和经过多路开关控制的一大批外围设备(包括一台容量为 1012 位 的激光外存储器以及 ARPA 网络接口)。B6700 的作用是管理全部系统资源,完成用户程序 的编译或汇编,为 Illiac IV 进行作业调度、存储分配、产生入/出控制描述字送至 CDC、处 理中断,以及提供操作系统所具备的其它服务等。 10.3.4 Burroughs BSP 计算机 BSP(BSP—Burroughs Scientific Processor)是美国 Burroughs 公司和伊里诺大学合作设计 的用于科学计算的并行处理机,于 1979 年生产。与 Illiac IV 不同,这台计算机是采用共享 集中式主存结构的计算机,是共享存储器 SIMD 结构的典型代表。BSP 计算机系统组成如图 10-8 所示。它由系统管理计算机 B7700/B7800 和 BSP 处理机两大部分组成 。 图 10-8 BSP 科学计算机系统结构图 BSP 不能够单独工作,而是作为管理机 B7700/B7800 的后台机工作的。BSP 大部分与 分布式相同,区别是它的系统的存储器是由 K 个存储体(M0~Mk-1)集中在一起构成,经过互 227 连网络 ICN 为全部 N 个处理单元(PE0~PEN-1)所共享。 这种结构形式中,为使各处理单元对长度为 N 的向量中的各个元素都能同时并行处理, 存储体的体数 K 通常总是等于或多于处理单元的个数 N。为了各处理单元在访问主存时, 尽可能避免发生分体冲突,也要求有合适的算法能够将数据按一定规律合理地分配到各个存 储体中。与分布式存储器结构另一个不同之处在于互连网络 ICN 的作用不同。集中式主存 的结构形式中,互连网络是用来连接处理单元和存储器分体之间的数据通路的,希望能让各 个处理单元可有高速、灵活的方式连到不同的存储体上。因此有的并行处理机系统上将其称 为对准网络(Alignment Network)。 BSP 系统采用了全面并行化操作, 即把资源重复和时间重叠两种并行性技术结合起来, 有人称为第二代并行处理机。BSP 科学处理机系统由系统管理机(又称系统资源机)和科学 处理机两大系统构成。前者担负 BSP 编译,任务调度,数据通讯,外部设备管理等任务; 而科学处理机本身又包括控制处理机、文件存储器及并行处理机三大部分。 1、BSP 处理机的组成 BSP 处理机可分为 4 个部分,即并行处理机、控制处理器、文件存储器和对准网络。 (1)并行处理机 并行处理机包含 16 个算术单元、由 17 个存储模块(与 16 最接近的质数)组成的一个 无冲突访问的并行存储器和一套对准网络。 并行机中每个处理器以 160ns 的时钟周期进行向量计算。所有 16 个算术单元 AE 对不 同的数据组(从并行处理机控制器广播来)进行同一种指令操作,大部分的算术运算能在 2 个时钟周期(320ns)内完成。进行向量运算的数据是存在 17 个并行存储器模块中,每个模块 的容量可达 512 千字,17 个存储器模块的组织形成了一个无冲突访问存储器,它容许对任 意长度以及跳距不是 17 倍数的向量实现无冲突存取。 (2)控制处理器 控制处理器是一台用于控制的计算机,其核心是标量处理单元,处理机的时钟频率是 1MHz。它除了用以控制并行处理机以外,还提供了与系统管理机相连的接口。标量处理机 则处理存储在控制存储器中的全部操作系统和用户程序的指令,即指令/控制存储器。 (3)文件存储器 文件存储器是一个半导体辅助存储器,是一个高速大容量外存储器,是置于 BSP 直接 控制下的唯一外围设备。BSP 的计算任务文件是从系统管理机加载到它上面,然后对这些任 务进行排队,由控制处理机取出并加以执行。BSP 在运行过程中产生的输出文件和中间结果 也都暂存于文件存储器中,由于读写速度较快,可很好的解决处理机和外设之间的带宽瓶颈。 (4)对准网络 对准网络包涵完全交叉开关以及用来实现数据从一个源广播至几个目的地以及当几个 源寻找一个目的地址时能分解冲突的硬件。这就需要在算术单元阵列和存储器模块之间具备 通用的互连特性,而存储模块和对准网络的组合功能则提供了并行存储器的无冲突访问能 力。算术单元也利用输出对准网络来实现一些诸如数据压缩和扩展操作以及快速傅立叶变换 算法等专用功能。 2、BSP 的并行存储器 BSP 并行存储器又称为质数存储系统,由 17 个存储模块组成,存储周期为 160ns。BSP 并行存储器的无冲突访问是它的一个独特的技术性能。其实现的硬件技术包括:质数个存储 器端口(BSP 并行存储器的存储体数是一个质数 17)、存储器端口和 AE 之间的完全交叉开 关(对准网络)、以及特殊的存储器地址生成机构。 3、BSP 的并行流水技术 BSP 系统采用了全面的并行性技术,它并不依靠提高时钟频率获得高速,而是依靠并行 228 性。在 BSP 中,存储器-存储器型的浮点运算是流水进行的。BSP 的流水线组织由 5 个功 能级组成,尤其是并行处理机包括有 16 个处理单元、17 个存储器模块和 2 套互连网络(亦 称对准网络)组合在一起,就形成了一条五级的数据流水线,使连续几条向量指令能在时间 上重叠起来执行。其结构示意图如图 10-9 所示,五级的功能作用依次是: ①由 17 个存储器模块并行读出 16 个操作数; ②经对准网络 NW1 将 16 个操作数重新排列成 16 个处理单元所需要的次序; ③将排列好的 16 个操作送到并行处理单元完成操作; ④所得的 16 个结果经过对准网络 NW2 重新排列成 17 个存储器模块所需要的次序; ⑤写入存储器。 两套对准网络 NW1/2 的作用分别是在读与写存储器时,使得并行存储器中为保证无冲 突访问而错开存放的操作数顺序能够与算术单元并行处理要求的正常顺序一致。整个流水线 由统一的指令译码和控制部件进行控制。这种流水线结构是很新颖的,对提高系统处理效率 起着很大的作用。 图 10-9 BSP 数据流水线结构示意图 BSP 还有一个高效率的 FORTRAN 编译程序,具有很强的向量化功能,对程序中隐含 的并行性保证有较高识别率。向量程序不但能够处理明显的数组操作,还能处理线性递归, 循环内部的条件分支等进程,并产生明显的加速效果。 10.3.5 CM-2 计算机 CM-2 是 Thinking Machines Co-operation 于 1987 年推出的 Connection Machine 系列机中 的一台高档机,是一台细粒度的 SIMD 计算机,它由数千个位片 PE 组成,它的峰值处理速 度超过 10Gflops,它的系统结构如图 10-10 所示。 所有程序从前端开始执行,当需要并行数据操作时,发送微指令到后端处理阵列。定序 器(sequencer)分解这些微指令并且把它们广播给阵列中的所有数据处理器(data processor)。前 端机和处理阵列之间有三条交换数据计算结果的通路:广播总线(broadcasting)、全局组合总 线(global combining)和标量存储器总线(scalar memory bus),其组成部分介绍如下。 229 图 10-10 CM-2 的系统结构图 1、处理阵列 CM-2 是一台数据并行计算的后端机。处理阵列包含 4K 到 64K 个位片数据处理器(或 PE),所有数据处理器都由定序器控制。定序器对来自前端机的微指令进行译码,然后把毫 微指令广播到阵列中各个处理器。所有处理器可以同时访问它们的存储器,它们以锁步方式 执行广播来的指令。 处理器之间通过寻径、NEWS 网格(NEWS gird)或扫描机构(scanning mechanism)相互交 换数据。这些网络也与 I/O 接口相连。称为数据穹(data vault)的大容量存储器子系统与 I/O 相连,它可存储多达 60G 字节的数据。 2、寻径器、NEWS 网格和扫描机构 CM-2 处理机间能够快速高效的通信,主要是通过下列技术构造的互联网络来实现。 (1)寻径器 每个处理器芯片包含一个用于处理器之间数据寻径的专门硬件。把所有处理器芯片上的 寻径器结点用线连在一起形成一个布尔 n-立方体。在 CM-2 最大配置时,所有处理器芯片上 共有 4096 个寻径器结点,连成一个 12 维的超立方体。 (2)NEWS 网格 每个处理器芯片中的 16 个物理处理器可以排列成 8×2,1×16,4×4,4×2×2 或 2×2×2×2 等形式的网格。规定每个物理处理器有 64 个虚拟处理器。可以想象这 64 个虚拟处理器在芯 片中排列成 8×8 网格。 (3)扫描机构 除了通过超立方体寻径器可以动态地重构 NEWS 网格外,CM-2 还有专门的硬件支持对 整个 NEWS 网格的扫描或传播。这些都是很有效的并行操作,在整个阵列中进行快速的数 据组合和传播。 3、输入输出系统 Connection Machine 不但强调计算的大规模并行性,还强调计算结果的可视化。2 到 16 条高速 I/O 通道用于数据和/或图象 I/O 操作。连接到 I/O 通道的外围设备包括数据穹、 CM-HIPPI 系统、CM-IOP 系统和 VME 总线接口控制器,如图 0-13 所示。数据穹(Data Vault) 是基于磁盘的海量存储系统,用来存放程序文件和大数据库。 CM-2 已经用于解决几乎所有 MPP 所面临的具有重大挑战性的应用问题。特别是 Connection Machine 系列已经用于借助相关反馈技术的文档检索、基于记忆的推理,如用在 230 医疗诊断系统 QUACK 中摸拟诊断疾病以及处理工作量很大的自然语言等。CM-2 的其它应 用包括 SPICE 的 VLSI 电路分析和布线、计算流体动力学、信号/图象/视觉处理和集成、神 经网络模拟和连接模型、动态规划,上下文无关文法分析、射线追踪图以及计算几何等问题。 10.4 SIMD 计算机的应用 本节主要结合 SIMD 计算机的特点给出几种基本的数据处理算法。 10.4.1 计算模型及有限差分 哈辛诺在 1986 年将物理计算模型分成连续模型和离散模型(粒子模型)。 连续模型是指所有计算的时间和空间是连续变化的物理量,且这些物理量是一定范围内 的平均值。典型的参数如电荷密度、温度和压力等。粒子模型则将世界看成是由离散的粒子 组成的,这些物理量反映单个粒子的当前状态,典型的参数如速度、力和动量等。两种模型 只是对同一问题的两种不同观察方法而已。 连续模型和离散模型的主要区别表现在连续模型符合偏微分方程。按离散形式处理时, 方程式中所有变量的变化都是其近邻变量的函数,远程变量没有直接的影响。先通过作用于 近邻变量,近邻变量再作用于随后的近邻变量,由此向前非直接地作用于整个媒质,也就是 通过局部作用而将作用传送到整个媒质。离散模型(粒子模型)允许粒子受远程粒子的影响。 任何粒子在任何时刻都与模型中的其它粒子有关。 应用有限差分方法求解连续模型对于并行计算具有很大的吸引力。有限差分方法是求解 偏微分方程的一种有效方法,它把一个有规则的网格履盖在整个模型域上,用网格点上变量 值写出差分方程组以代替连续模型的偏微分方程来进行计算。作为连续模型,在解决物理问 题时,我们考察描述平面域的拉普拉依方程。 将这个方程离散化,即在 x 和 y 方向上每隔一个相同的距离 h 取一个样值点,这个微分 方程就可以用差分方程的形式表示。下面的就是二阶偏导数表示为差分形式,式中(x, y)为 平面直角坐标,h 为网格间距。 把上述差分方程代入原方程,则可得有限差分计算公式: Illiac IV 的阵列结构特别适用于计算这种在网格上定义的有限差分函数。这是因为,根 据拉普拉依方程,任一网格点(x, y)上的函数值可由其四周邻近点的函数值计算出来,这一 要求正好反映了阵列处理机每一处理单元与其 4 个近邻连接的性质。实际计算时,应利用张 弛法进行。每一网格点上的函数值用求其四邻平均值的方法计算,经多次迭代,逐次逼近其 最终的平均值。网格边缘的函数值是已知的,由场域的边界条件决定;而对于内部各点的函 数值,开始时可选择为零,然后根据拉普拉依方程多次迭代求 U(x, y)值,直至连续二次迭 代所求值的差小于规定误差为止(已知迭代过程是收敛的)。 IlliacIV 在计算时,是把内部网格点分配给各个处理单元的。因此,上述计算过程可以 231 并行地完成,从而可几十倍地提高处理速度。由于实际问题中所遇到的内部网格点数目往往 是很大的,因此需要将其分成许多子网格,然后才能在 Illiac IV 上求解。 10.4.2 阵列处理机的几种基本算法 1、矩阵加 在阵列处理机上,实现矩阵加的算法是最简单的一维数组运算。设 A 和 B 是 n×n 阶矩 阵,A、B 相加的和矩阵为 C,它也是 n×n 阶矩阵。矩阵加的算法为 A + B = C;其中 cij = aij + bij 2、矩阵乘 设 A 和 B 是 n×n 阶矩阵,A、B 的乘积矩阵 C 也是 n×n 阶矩阵。矩阵乘的传统串行算 法为 A×B = C;其中 其中 0≤i≤n-1 且 0≤j≤n-1。 3、累加和 累加和并行算法是将 N 个数的顺序相加过程变为并行相加过程。串行求和的 FORTRAN 程序如下: C(-1)=0 DO 10 I=0, N 10 C(I)=C(I-1)+A(I) 在并行处理机上,采用递归加法,FORTRAN 程序如下: DO 10 I=0,log2N-1 10 A=A+SRL(A, 2**I) ;把 A 向量逻辑右移 2i 个 PE,只需做 log2N 次加法。 例如,当 N=8 时,在 SISD 计算机要用 8 次加法时间。如果在并行处理机上,采用成对 递归相加的算法,则只需 log2 8=3 次加法时间就够了。首先,原始数据 A(I),0> Teraflops, 就是说目前限制 并行程序性能的因数主要来自 I/O 瓶颈,提高 I/O 性能的方法较之提高 CPU 速度更能增强 并行系统的性能。 由于网络技术的发展,通信延迟越来越小,网络访问比本地磁盘访问要快得多。在 155Mbits/s 的 ATM 网络上,读取其他结点的内存 100MBytes 的时间是读取本地磁盘的五分 之一。现在的工作站和高档 PC 机都配有相当多的内存(32Mbytes ~64MBytes),整个机群系 统的全部内存是一个很大的资源,利用其他结点的空闲内存作为本地结点的虚拟内存和文件 缓存,可以节省相当多的访盘时间。据 UC Berkeley 的实验统计,对需要经常访盘的应用程 序,使用这种方式可以比使用本地磁盘快 5~10 倍。 除了这几个主要方面的研究之外,还有许多特定应用方面的研究,比如,广播、多播等 全局操作的高效实现、DSM 并行模型的支持、并行 I/O 的研究等。 5、机群负载平衡技术 在并行处理系统中,一个大的任务往往由多个子任务组成,这些子任务被分配到各个处 理结点上并行执行,称之为负载。由于由各结点处理机结构不同,处理能力不同,使得各种 子任务在其上运行时间和资源占有率不同。当整个系统任务较多时,各结点上的负载可能产 生不均衡现象,就会影响整个系统的利用率。这就是负载不平衡问题,这个问题解决好坏直 接影响到系统性能,因此它就成为并行处理中的一个重要问题。 为了充分利用高度并行的系统资源,提高整个系统的吞吐率,就需要负载平衡技术的支 持,负载平衡技术的核心就是调度算法,即将各个任务比较均衡地分布到不同的处理结点并 行计算,从而使各结点的利用率达到最大。 在机群系统上,负载平衡要解决的问题主要表现为系统资源使用不均和多用户系统资源 分配问题。 11.3.3 提高通信系统的性能 通信子系统是并行计算机系统的重要组成部分,它完成系统中各结点之间数据传递的功 能,其性能的好坏直接影响到并行计算的加速比和效率。这是因为并行计算时间是由各结点 计算时间和结点间数据通信时间两部分组成,如果通信时间所占的比例过大,则必然使得并 行计算的加速比下降,整个系统的效率也不会高。 并行机群系统是基于高性能工作站或高档微机和局域网(LAN)而发展起来的新系统, 它是一个由若干微机或工作站通过普通 LAN 互联而成的松耦合计算机系统,这与大规模并 行计算机(MPP)有较大差别,MPP 则通常是采用专用网络以紧耦合方式进行结点间的互 联。与 MPP 相比,机群系统具有可扩展性好、性能/价格比高的特点,但网络带宽通常较低, 如,使用广泛的传统以太网的带宽只有 10Mb/s,即使是新出现的一些高速网络的带宽也只 不过上百 Mb/s,另外,局域网 LAN 所使用的通信协议通常是 TCP/IP 协议,这种协议处理 270 开销比较大,影响了网络硬件特性的发挥;而 MPP 的内部网络带宽通常都在数百 Mb/s 以上, 而且是采用专用的通信协议,如 Paragon XP/S 的网络带宽可达到 1.4Gb/s,其通信协议是 NX 通信库。可见,机群系统中性能过低的通信系统会影响到整个并行计算效率的提高,因此要 大力发展并行机群系统,一个关键的问题是对其通信技术进行深入的研究,以期大幅度地提 高网络通信系统的性能。 1、影响通信系统性能的因素 机群系统下的通信子系统的性能是整个系统的薄弱环节,在介绍提高通信系统性能的方 法措施之前,先从网络硬件、通信软件两方面分析影响通信系统性能的主要因素。 (1)网络带宽低 机群系统使用的网络是普通的局域网,而局域网的带宽通常都比较低,如传统以太网的 带宽只有 10Mb/s。局域网的带宽之所以低,原因主要是局域网是为长距离的数据通信而设 计的,由于通信距离较长,限制了通信速度的提高,因为信号的频率越高,它能够传输的距 离也越短。另外一个原因是出于价格上的考虑。为了降低网络系统布线所需的成本,大多数 LAN 是共享一根信号总线进行数据传输,因此这也在很大程度上影响了网络系统的性能, 特别是在网络负载较重时,由于各结点都要抢占信号总线,很容易造成通信阻塞,使得实际 通信带宽比其最大带宽要小得多。 (2)传统 TCP/IP 协议的多层次结构带来了很大的处理开销 TCP/IP 协议是面向低速率、高差错和大数据包传输而设计的,它是一个多层次的软件 结构,按自底向上的顺序划分,可分为四层:网络接口层、网络层(IP)、传输层(TCP) 和应用层。由于协议层次多,在进行数据传输时,数据需要经过多次拷贝才能从应用层传递 到网络接口或从网络接口传送到应用层,而多次的拷贝带来了很大的网络延迟时间。另外, 在多层协议的实现中,各层还重复实现了很多相同的功能,比如从 IP 层到传输层都要进行 差错控制、从网络接口层到应用层都要进行协议的处理机调度、从 IP 层到应用层都要进行 流量控制、从 IP 层到应用层都要进行数据包组装和定序的缓冲。 这些冗余的功能虽然可确保数据的无差错传送,但确限制了数据及时提交给应用程序处 理。可见,多层次的协议结构是造成通信瓶颈的主要原因之一,合并某些层次,删除冗余的 处理,设计一种轻型通信协议,是提高通信性能的重要方法。 (3)协议复杂的缓冲管理增加了网络延迟 网络协议处理包括很多功能,如流量控制、差错控制、出错重发机制、拥塞控制等,而 这些功能的实现都与缓冲管理密切相关。缓冲管理的作用是完成数据的分组和组装,缓冲区 可看成一种网络资源,这种资源是有限的,对它的管理很重要。不过通常的缓冲管理机制都 比较复杂,缓冲管理带来的网络延迟也很大,因此如何简化协议复杂的缓冲管理也是通信技 术研究的主要内容。 (4)操作系统额外开销不可忽视 操作系统提供的系统调用和原语是网络协议实现的底层软件支持。在网络协议实现中涉 及到上下文切换、调入/调出页面、启动 I/O 设备、中断响应等操作系统处理,有时这些开 销可能比协议本身的处理开销还大。因此,要提高通信系统的性能,降低网络延迟,应当尽 量减少网络协议对主机操作系统的服务请求,最大限度地使通信与计算重叠。 2、提高通信系统性能的方法措施 (1)采用新型高速网络,提高网络带宽 为了提高机群系统的网络带宽,必须采用新型的高速网络来取代 10Mb/s 以太网。由于 多媒体应用、实时网络系统、大规模并行计算等应用对高速网络的需求,推动了网络技术的 飞速发展,目前出现了多种新型的高速网络,如快速以太网、ATM、Myrinet。这些新型网 络的传输速度是传统以太网的十倍或更高。由于高速网络的运用,使得影响通信系统性能的 271 瓶颈已从过去的网络硬件转移到网络通信软件上,因为虽然高速网络降低了网络的传输延 迟,但并没有减少通信协议的处理开销。由于通信协议处理开销过大,在很大程度上阻碍了 高速网实际性能的提高。 (2)设计新的通信协议,降低通信延迟 为了获得高带宽、低延迟的网络通信,必须对传统的通信协议作较大的修改,以克服传 统协议的弊病,使高速网络的优越性能得以充分展现。主要方案有在用户空间实现通信协议、 精简通信协议和利用 Active Message 通信机制。 为了减少操作系统的额外开销,一个重要的方法是在用户空间实现一个用户态的协议 层,使得此协议层能够旁路操作系统的影响,直接对网络硬件设备进行操作,这样就可减少 数据拷贝次数,提高通信效率;把协议实现放在用户空间的另一优点是可以减少操作系统调 用的时间开销,而且通讯协议能够与用户的实际应用密切结合,可减少协议不必要的冗余, 同时也不有损它的灵活性。不过,把通信协议放在用户空间实现,必须解决好两个问题:一 个是多进程复用网络的问题;另一个是在没用核心参与的情况下,如何管理有限网络资源的 问题。只有这样,用户态通信协议才能得以有效地实现。 前面的分析说明,通信的开销很大程度上是由于协议层次多、数据拷贝频繁引起的,另 外,通用的网络接口和协议为满足各种用户的需求,增加了很多与数据传输无关的服务,这 些服务也带来了额外的开销。而在并行机群系统中,有些功能是不必要的,完全可以进行精 简,以降低通信开销。所谓精简,它包括两部分内容:一部分是功能的精简,就是删除不必 要和冗余的功能;第二部分是协议层次的精简,合并各层的功能,使得通信协议变为一层, 以达到减少数据拷贝次数的目的。比如,在操作系统 Solaris 2.4 中,通信协议由网络驱动程 序、数据链路层、IP 层、TCP 层和 Socket 接口组成,由于数据链路层 DLPI 已经提供了不 保证数据包无差错传送的基本数据通信功能,因此可以在它基础上实现一个保证数据可靠传 送的模块以取代复杂的 TCP/IP 协议层和 Socket 接口,这样新的通信协议不论从结构上看, 还是从功能上分析,都比原有的协议要简单得多。 通信协议的用户态实现以及协议的精简这两种方法都是针对传统通信协议在实现方法 上所做的改进,而 Active Message 则是一种全新的通信机制,能够更为有效地提高通信系统 的性能。 11.3.4 几种典型系统 目前国内外许多科研机构都在对机群系统下的通信技术进行深入的研究,如 UCB (University of California, Berkeley)提出的 NOW 计划,Cornell 大学研制的 U-Net 系统,清 华大学提出的精简通信协议 RCP 等,如表 11-1 所示列举了在机群系统中实现的几种典型的 通信子系统。 表 11-1 典型通信机群子系统 系统名称 网络类型 实现技术 往返延迟时间 (ms) 峰值宽度(Mb/s) RCP(清华大学) 10Mbps Ethernet 精简通信协议 950(TCP 为 1438) 8.98(TCP 为 8.92) FMP(清华大学) 1.28Gbps Myrinet 快速消息传递 24.8(TCP 为 220) 360(TCP 为 252) Fast ocket(UCB) 640Mbps Myrinet 精简通信协议 80 96 FM(UIUC) 640Mbps Myrinet Active Message 50 130 AM(UCB) 640Mbps Myrinet Active Message 31.5 152 U-Net(Cornell) 155Mbps ATM Active Message 65(TCP 为 1285) 120(TCP 为 80) HPAM(UCB) 100Mbps FDDI Active Message 29(TCP 为 2000) 96(TCP 为 43) 这些系统从实现技术上看,可以分成两类:一类是采用精简通信协议的方法;另一类是 使用 Active Message 通信机制。对比这两类系统的性能可知,采用 Active Message 通信机制 272 实现的系统性能比用精简通信协议实现的系统一般来说要好一些。 关 联 Cache I/O MPP SMP CM-5 SGI Origin 2000 273 习 题 11.1 解释下列概念 机群系统 共享存储多处理机 监听协议 基于目录的协议 Cache一致性 MPP SMP S2MP UMA NUMA COMA 11.2 试比较多处理机系统与并行处理机系统在结构、工作方式及其应用范围方面的差同点。 11.3 共享存储器的多处理机系统有哪几种结构形式?画出它们的结构框图,并说明每种结 构的主要特点。 11.4 多处理机系统为什么会出现 Cache 不一致的问题?两种解决不一致问题的方法各用在 什么场合? 11.5 简要说明监听协议如何保证 Cache 的一致性。 11.6 比较集中共享与分布式存储器系统在结构上的特点,并说明它们各自的优缺点及适用 场合。 11.7 简述 MPP 和 SMP 之间的区别。 11.8 什么是机群系统?发展机群系统的关键技术是什么? 11.9 提高机群系统的通信性能的途径有哪些?为什么要精简通信协议? 11.10 以 Origin 2000 为例,说明为什么分布式共享存储器系统有很好的可扩展性? 参考文献 1. Andrew S. Tanenbaum 著,刘卫东,徐恪译.结构化计算机组成原理.北京:机械 工业出版社,2001 2. Gary B.Shell,Thomas J.Cashman,Misty E.Vermaat.Discovering Computers 2004, A Gateway to Information.THOMSON Course Technology,2003 3. 白中英.计算机组成原理(第三版)北京:科学出版社,2001 4. 张功萱,顾一禾等.计算机组成原理.北京:清华大学出版社,2005 5. 蒋本珊.计算机组成原理.北京:清华大学出版社,2003 6. 张五一,张道光.微型计算机原理与接口技术.郑州:河南科学技术出版社,2006 7. 贾金玲.微型计算机原理与接口技术.重庆:重庆大学出版社,2001 8. 王爱英.计算机组成与结构(第三版).北京:清华大学出版社,2000 9. 郑玮民,汤志忠.计算机体系结构(第二版).北京:清华大学出版社,1998 10. 马礼.计算机组成原理与系统结构.北京:人民邮电出版社,2004 11. 孙强南,孙昱东.计算机系统结构.北京:科学出版社,2000 12. Hennessy,J.L.等著,白跃彬译.计算机系统结构-量化研究方法(第四版).北 京:电子工业出版社,2007 13. 张钧良.计算机外围设备.北京:清华大学出版社,2005
还剩282页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

wxyuan2007

贡献于2015-12-29

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf