CPU的功能和组成

CPU组成

计算机的工作过程就是计算机执行程序的过程。程序是一个指令序列,这个序列明确告诉计算机应该执行什么操作,在什么地方能够找到用来操作的数据。

一旦把程序装入主存储器,计算机就可以自动执行取出指令和执行指令的任务。专门用来完成此项工作的计算机部件称为中央处理器(Central Processing Unit,CPU),做成单片集成电路的CPU通常又称为微处理器(Microprocessor)。图3-1为陶瓷PGA封装的Intel 80486 DX2 CPU。

(a) 顶视图(b) 底视图
图3-1 陶瓷PGA封装的Intel 80486 DX2 CPU

计算机工业从1960年代早期开始使用CPU这个术语。迄今为止,CPU从形态、设计到实现都已发生了巨大的变化,但是其基本工作原理却一直没有大的变化。

早期的CPU通常是为大型、特定的应用而定制的。目前,这种为特定应用而设计定制CPU的昂贵方法,在很大程度上已经让位于开发可大规模生产的通用处理器。这种标准化趋势,大致始于分立晶体管大型计算机(Mainframe)和小型计算机(Minicomputer)年代,并且随着集成电路(IC)的普及而大大加速。集成电路可以把日益复杂的CPU设计制造在很小的空间里。CPU的小型化和标准化,大大增加了这些数字器件在现代生活中的应用范围,远远超出了专用运算机器这一有限的应用。现代微处理器已经随处可见,从汽车到手机,甚至儿童玩具。



3.1 CPU的功能和组成

3.1.1 指令系统的发展

指令是计算机硬件能够识别并直接执行操作的命令,一台计算机中所有指令的集合构成了该计算机的指令系统。指令系统是表征一台计算机性能的重要因素,其格式与功能不仅直接影响到机器的硬件结构,也直接影响到系统软件,影响到机器的适用范围。因此,设计一个合理有效、功能齐全、通用性强并且丰富的指令系统是至关重要的。

从计算机组成的层次结构来说,计算机的指令分为微指令、机器指令和宏指令三类。微指令是微程序级的命令,属于硬件;宏指令是由若干条机器指令组成的软件指令,属于软件;机器指令,也就是我们通常所说的指令,介于微指令与宏指令之间,每条指令可完成一个独立的算术运算或逻辑运算。

回顾计算机的发展历史,指令系统的发展经历了从简单到复杂的演变过程。早在1950-1960年代,计算机大多数采用分立元件的晶体管或电子管组成,其体积庞大,价格也很昂贵,因此计算机的硬件结构比较简单,所支持的指令系统也只有十几至几十条最基本的指令,而且寻址方式简单。到1960年代中期,随着集成电路的出现,计算机的功耗、体积、价格等不断下降,硬件功能不断增强,指令系统也越来越丰富。1960年代后期,开始出现系列计算机,即基本指令系统相同、基本体系结构相同的一系列计算机。

在1970年代,高级语言已成为大、中、小型机的主要程序设计语言,计算机应用日益普及。计算机设计者们利用当时已经成熟的微程序技术和飞速发展的VLSI技术,增设各种各样复杂的、面向高级语言的指令,使指令系统越来越庞大,按这种方法设计的计算机系统称为复杂指令系统计算机(Complex Instruction Set Computer),简称CISC。如此庞大的指令系统不仅使计算机的研制周期变长,难以保证正确性,不易调试维护,而且采用了大量使用频率很低的复杂指令而造成硬件资源的浪费。为此,人们又提出了便于VLSI技术实现的精简指令系统计算机(Reduced Instruction Set Computer),简称RISC,它是一种计算机体系结构的设计思想,是近代计算机体系结构发展史中的一个里程碑。1990年代初,IEEE的Michael Slater对于RISC的定义做了如下描述: RISC处理器所设计的指令系统应使流水线处理能高效率执行,并使优化编译器能生成优化代码。



3.1.2 指令系统的性能要求

指令系统的性能决定了计算机的基本功能,其设计是计算机系统设计的一个核心问题,不仅关系到计算机的硬件结构,同时关系到用户的使用需要。一个完善的指令系统应满足以下四个方面的要求:

1. 完备性

指令系统的完备性是指用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。一台计算机中最基本和必不可少的指令构成了指令系统的完备性。而其他一些指令可以通过基本的指令来实现,或者直接通过硬件来实现,两者只是在执行时间和编写程序的难易程度上有差别。在指令系统中采用硬件指令,是为了提高程序执行的速度以及便于用户编写程序。

2.有效性

有效性是指利用该指令系统所提供的指令编写的程序能够高效率的运行。高效率主要表现在程序占据存储空间小、执行速度快。通常,一个功能完善的指令系统必定有很好的有效性。

3.规整性

规整性是指指令系统的对称性、匀齐性、指令格式和数据格式的一致性。

指令的对称性是指在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式,这对提高程序的可读性和简化程序设计带来了便利之处。

指令的匀齐性是指一种操作性质的指令可以支持各种数据类型,例如算术运算指令可支持字节、字和双字整数运算、十进制数运算和单、双精度浮点运算等。因此程序设计者无须考虑数据类型而选用指令,提高了编程效率。

指令的格式和数据格式的一致性是指指令长度和数据长度有一定的关系,以方便处理和存取。

4.兼容性

兼容性是指计算机的体系结构设计基本相同,计算机之间具有相同的基本结构、数据表示和共同的基本指令集合,因此指令系统是兼容的,即同一个软件可以不加修改就在其他系统结构相同的机器上使用。目前,除了系列计算机的指令系统兼容之外,新推出机种的指令系统包含所有旧机种的全部指令,实现了 “向上兼容”,即低档机上运行的软件不需任何修改便可在高档机上运行。

作为控制并执行指令的部件,CPU对整个计算机系统的运行是极其重要的,它不仅要与计算机的其它功能部件进行信息交换,还要控制这些功能部件的操作。

当用计算机解决某个问题时,应当首先编写相应的程序,把程序连同原始数据预先通过输入设备送到主存储器中保存起来。计算机工作时,按顺序逐条取出指令,分析指令,执行指令,并自动地转入下一条指令。计算机一条一条地执行指令,实现预先设计的程序控制,直到程序规定的任务完成。



3.1.3 CPU的基本功能

CPU控制整个程序的执行,它具有以下基本功能:

(1)程序控制

程序控制就是控制指令的执行顺序。

程序是指令的有序集合,这些指令的相互顺序不能任意颠倒,必须严格按程序规定的顺序执行。

保证计算机按一定顺序执行程序是CPU的首要任务。

(2)操作控制

操作控制就是控制指令进行操作。

一条指令的功能往往由若干个操作信号的组合来实现。因此,CPU管理并产生每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行操作。

(3)时间控制

时间控制就是对各种操作实施定时控制。

在计算机中,各种指令的操作信号和一条指令的整个执行过程都受到严格定时。只有这样,计算机才能有条不紊地工作。

(4)数据加工

数据加工就是对数据进行算术、逻辑运算。

完成数据的加工处理,是CPU的根本任务。



3.1.4 CPU的基本组成

传统上,CPU由控制器和运算器这两个主要部件组成。

随着集成电路技术的不断发展和进步,新型CPU纷纷集成了一些原先置于CPU之外的分立功能部件,如浮点处理器、高速缓存(Cache)等,在大大提高CPU性能指标的同时,也使得CPU的内部组成日益复杂化。

CPU主要组成部分的逻辑结构如图3-2所示:

图3-2 CPU主要组成部分逻辑结构图

1.控制器

控制器是整个计算机系统的指挥中心。在控制器的指挥控制下,运算器、存储器和输入/输出设备等部件协同工作,构成了一台完整的通用计算机。

控制器根据程序预定的指令执行顺序,从主存取出一条指令,按该指令的功能,用硬件产生所需的带有时序标志的一系列微操作控制信号,控制计算机内各功能部件的操作,协调和指挥整个计算机完成指令的功能。

控制器通常由程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、时序发生器和操作控制器组成。其主要功能包括:

  1. 从主存中取出一条指令,并指出下一条指令在主存中的位置;
  2. 对指令进行译码,并产生相应的操作控制信号,以便启动规定的动作;
  3. 指挥并控制CPU、主存和输入/输出设备之间数据流动的方向。

2.运算器

运算器是计算机中用于实现数据加工处理等功能的部件,它接受控制器的命令,负责完成对操作数据的加工处理任务,其核心部件是算术逻辑单元(Arithmetic Logic Unit,ALU)。

相对控制器而言,运算器接受控制器的命令而进行动作,即运算器所进行的全部操作都是由控制器发出的控制信号来指挥的,所以它是执行部件。

运算器由算术逻辑单元(ALU)、累加寄存器(AC)、数据寄存器(DR)和程序状态字寄存器(PSW)组成。它有两个主要功能:

  1. 执行所有的算术运算;
  2. 执行所有的逻辑运算,并进行逻辑测试。



3.1.5 CPU中的主要寄存器

在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。

这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。

下面详细介绍这些寄存器的功能与结构。

1.数据寄存器(DR)

数据寄存器(Data Register,DR)主要作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。

数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一个数据字时,也暂时将它们存放在数据寄存器中。

数据寄存器的作用是 :

  1. 作为CPU和主存、外围设备之间信息传送的中转站;
  2. 弥补CPU和主存、外围设备之间在操作速度上的差别;
  3. 在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。

2.指令寄存器

指令寄存器(Instruction Register,IR)用来保存当前正在执行的一条指令。

当执行一条指令时,先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。

一条指令被划分为操作码和地址码2个字段。为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。指令译码器(Instruction Decoder,ID)就是完成这项工作的。

指令译码器对来自指令寄存器的操作码部分进行译码,以产生操作性质的控制电位,并将其送到微操作控制线路上,在时序部件定时信号作用下,产生具体的操作控制信号。

指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。

3.程序计数器

程序计数器(Program Counter,PC)用来指出下一条指令在主存储器中的单元地址。

在程序执行之前,首先必须将程序的首地址,即程序的第一条指令所在的主存单元地址送入PC。因此PC的内容即是从主存提取的第一条指令的地址。

当执行指令时,CPU能自动递增PC的内容,使其始终保持将要执行的下一条指令的主存地址,为取下一条指令做好准备。若为单字长指令,则(PC)+1PC,若为双字长指令,则(PC)+2PC,以此类推。

但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段指定,而不是像通常那样通过顺序递增PC的内容来取得。

因此,程序计数器的结构应当是具有寄存信息和计数两种功能的结构。

4.地址寄存器

地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。

由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。

当CPU和主存进行信息交换,即CPU向主存存入/取出数据时,或者CPU从主存中读出指令时,都要使用地址寄存器和数据寄存器。

同样,如果我们把外围设备的设备地址作为像主存的地址单元那样来看待,那么,当CPU和外围设备交换信息时,我们同样要使用地址寄存器和数据寄存器。

5.累加寄存器

累加寄存器通常简称累加器(Accumulator,AC),是一个通用寄存器。

累加器的功能是:当运算器的算术逻辑单元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。

显然,运算器中至少要有一个累加寄存器。

6.程序状态字寄存器

程序状态字(Program Status Word,PSW)用来表征当前运算的状态及程序的工作方式。

程序状态字寄存器保存由算术指令和逻辑指令运行或测试的结果所建立起来的各种条件码内容,如运算结果进/借位标志(C)、运算结果溢出标志(O)、运算结果为零标志(Z)、运算结果为负标志(N)、运算结果符号标志(S)等,这些标志位通常分别用1位触发器来保存。

除此之外,程序状态字寄存器还保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。

因此,程序状态字寄存器是一个保存各种状态条件标志的寄存器。



3.1.6 操作控制器和时序发生器

1.微操作与数据通路

控制器在实现一条指令的功能时,总是把每一条指令分解成一系列时间上先后有序的最基本、最简单、不可再分的操作控制动作,这种最基本、最简单、不可再分的操作称为微操作(Microoperation)。

我们通常把许多寄存器之间传输信息的通路称为数据通路(Data Path),它控制信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器。

在数据通路中,微操作通过自身的控制作用和彼此之间的密切配合,使指令流、数据流等信息流按照预定的路径流动,以实现指令的功能。每一条指令的功能决定了它所需要的一系列带时序的微操作信号。

2.操作控制器

控制器的基本功能是负责指令的读出、识别和解释,并指挥协调各功能部件执行指令。

操作控制器是CPU中完成取指令和执行指令全过程的部件,其主要功能是根据指令操作码和时序信号的要求,产生各种操作控制信号,以便在各寄存器之间正确地建立数据通路,从而完成取指令和执行指令的控制。

操作控制器有组合逻辑控制器和微程序控制器两种,二者的差别在于其中的控制信号形成部件不同,进而反映出不同的设计原理和方法。

根据设计方法不同,又可将组合逻辑控制器进一步细分为硬连线控制器和门阵列控制器。

3.时序信号发生器

CPU中除了操作控制器外,还必须有时序信号发生器。

由于计算机的高速工作,每一个动作的时间必须非常严格,不能有任何差错。时序发生器的作用,就是对操作控制器产生的各种控制信号实施时间上的严格控制,产生各功能部件所需要的定时控制信号。

Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.