• 内容讲解

运算器是数据的加工处理部件,是CPU的重要组成部分。

运算器的主要功能是对数据进行加工处理,包括对数值数据的算术运算,如执行加、减、乘、除运算,变更数据的符号等,同时也包括对各种数据的逻辑运算,如进行与、或、非等运算。因此,实现对数据的算术和逻辑运算是运算器最重要的功能。

运算器通常由算术逻辑单元(Arithmetic Logic Unit,ALU)、寄存器、数据总线和其他逻辑部件组成。ALU是具体完成算术与逻辑运算的单元,是运算器的核心,由加法器及其他逻辑运算单元组成。寄存器用于存放参与运算的操作数,其中的累加器是一个特殊的寄存器,除了可以存放操作数外,还用于存放中间结果和最后结果。数据总线用于完成运算器内部的数据传送。

无论计算机的功能、规模有多大差异,其运算器的基本结构总是包括以下几个部分:

(1)能实现算术和逻辑运算的功能部件ALU。

(2)存放待加工信息或加工后信息的通用寄存器组。

(3)按操作要求控制数据输入的部件,如多路开关或数据锁存器,可以接收来自外部设备或存储器的数据,也可以暂存通用寄存器的数据。

(4)按操作要求控制数据输出的部件,如输出移位开关和多路开关,可以将ALU的输出结果根据要求进行移位,并经总线送往其他部件,或作为中间结果送给通用寄存器,以便作为ALU的输入进行下一次运算。

(5)计算机与其他部件进行信息传输的总线,以及总线接收器和发送器。总线接收器和发送器通常是由三态门构成的。

下面介绍运算器的各个组成部分:

1. ALU

算术逻辑单元ALU,不仅具有多种算术运算和逻辑运算的功能,而且具有先行进位逻辑,从而能实现高速运算。

特定ALU所支持的算术运算,可能仅局限于加法和减法,也可能包括乘法、除法,甚至三角函数和平方根。有些ALU只支持整数,而其他ALU则可以使用浮点来表示有限精度的实数。但是,能够执行最简单运算的任何计算机,都可以通过编程,把复杂的运算分解成它可以执行的简单步骤。所以,任何计算机都可以通过编程来执行任何算术运算,如果其ALU不能从硬件上直接支持,则该运算将用软件方式实现,但需要花费较多的时间。

超标量(Superscalar)计算机包含多个ALU,可以同时处理多条指令。图形处理器和具有单指令流多数据流SIMD和多指令流多数据流MIMD特性的计算机,通常提供可以执行矢量和矩阵算术运算的ALU。

2. 数据总线

除了运算器的核心部件ALU之外,运算器中还包括各种寄存器、多路选择器、移位器等部件,它们之间的数据传送非常频繁。为了减少运算器内部的数据传送线同时便于控制,通常将一些寄存器之间的数据传送通路加以归并,组成总线结构,使不同来源的信息在此总线上分时传送。

根据总线所处的位置,总线可以分为内部总线和外部总线。内部总线是指CPU内各部件的连线;外部总线是指系统总线,即CPU与存储器、I/O系统之间的连线。运算器内部的总线属于内部总线。

按照总线的逻辑结构,总线可以分为单向传送总线和双向传送总线。所谓单向传送总线,就是信息只能向一个方向传送,传送地址信息或控制信息的总线通常是单向传送总线;而双向传送总线,就是信息可以向两个方向传送,数据总线一般是双向传送总线,既可以发送数据,又可以接收数据。有时为了简化数据线的管理,也可以有只用于发送数据或者只用于接收数据的数据总线。

3. 运算器的基本结构形式

运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果来进行的。在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和单片机中还要考虑在硅片上制作总线的工艺。

运算器的基本结构形式如图2-8所示。

220.gif

1单总线结构的运算器

单总线结构的运算器如图2-8(a)所示,所有部件都连接到同一条总线上,所以数据可以在任何两个寄存器之间,或者在任一个寄存器和ALU之间传送。

这种总线结构的运算器内部只有一组数据总线,优点是总线的控制电路比较简单,有利于提高大规模集成电路的集成度。但是由于总线的分时性,同一时间内只能有一个操作数放到总线上。把两个操作数输入到ALU,需要分两次来做,而且还需要A、B两个缓冲寄存器。因此,这种结构的主要缺点是操作速度较慢,执行一个双操作数的运算,一般需要三次数据传送,花费三个单元时间。

以加法运算为例,首先把第一个操作数通过总线送往缓冲寄存器A暂存;再把第二个操作数通过总线送往缓冲寄存器B暂存;最后一步是将两个操作数从缓冲寄存器A和B送往ALU,并将运算结果通过总线送往相应的通用寄存器。

2双总线结构的运算器

双总线结构的运算器如图2-8(b)所示,有两条总线同时连接ALU的两个输入端,可以与通用寄存器双向传送数据。为了防止总线冲突,在ALU的输出端设置缓冲寄存器。特殊寄存器分为两组,分别与两条总线相连。

在这种结构中,两个操作数同时加到ALU进行运算,只需要一次操作控制,而且马上就可以得到运算结果。ALU的输出不能直接加到总线上去,这是因为,当形成操作结果的输出时,两条总线都被输入数占据,因而必须在ALU输出端设置缓冲寄存器。总之,双总线结构运算器比单总线结构运算器速度快,执行一个双操作数的运算,一般只需要两次数据传送,花费两个单元时间。当然,总线控制电路要相对复杂些。

还是以加法运算为例,首先将两个操作数分别送往总线1和总线2,由于总线1和总线2直接连接ALU的输入端,因此可以直接运算,并把运算结果送往ALU输出端的缓冲寄存器;第二步把缓冲寄存器中存放的运算结果通过总线1送往相应的通用寄存器。   

3三总线结构的运算器

三总线结构的运算器如图2-8(c)所示,共有三条总线。由于三总线结构的总线控制电路复杂,为了简化设备,每条数据总线都设计成单向总线。寄存器可以输出数据至总线1和总线2,而总线1和总线2的数据分别送往ALU的两个输入端;与之相反,ALU的输出端只能送往总线3,而寄存器也只能接收来自总线3的数据。

在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。显然,三总线结构运算器的速度是最快的,双操作数运算可以一步完成。当然,总线控制也是最复杂的。

仍然以加法运算为例,可以将两个操作数通过总线1和总线2分别送往ALU,同时将ALU的运算结果通过总线3送往相应的通用寄存器。

因为在三总线结构运算器中,每条总线都是单向传输数据,因此给寄存器之间的数据传送带来一定困难。为了避免寄存器之间的数据传送也要用到ALU从而降低速度,在三总线结构运算器中还专门设置了总线旁路器,只要开通总线旁路器,总线2的数据就可以直接送往总线3而不需要经过ALU,这样就可以大大提高寄存器之间的数据传送速度。

4. 寄存器

寄存器一般指的是通用寄存器,多通用寄存器是现代计算机系统的结构特点之一。利用多个寄存器,可以存放运算过程的中间结果,使存取数据的速度提高,从而缩短指令周期,加快机器速度。

通用寄存器是指这些寄存器的用途广泛,除了用于存放操作数和运算结果外,还可以作为变址寄存器存放变址值,作为堆栈指示器存放堆栈指针等,可以被程序员直接使用。除了通用寄存器外,还有一些专用寄存器,它们对于程序员而言是透明的,不能直接使用,硬件系统在完成某项工作时会用到相关的专用寄存器。

除此之外,累加器是运算器中与ALU直接相连、使用频繁的一种寄存器,每次运算的操作数或运算的中间结果大多存放在累加器中。所以,累加器是与很多指令都相关的通用寄存器。