2.4定点除法运算
2.4.1原码除法算法原理
两个原码表示的数相除时,商的符号由两数的符号按位相加求得,商的数值部分由两数的数值部分相除求得
设有n位定点小数(定点整数也同样适用):
被除数x,其原码为 [x]原=xf .xn-1 ... x1 x0
除数y,其原码为 [x]原=yf .yn-1 ... y1 y0
则有商q=x/y,其原码为 [q]原=(xf ⊕ yf)+(0 .xn-1 ... x1 x0 / 0 .yn-1 ... y1 y0)
机器运算方法:
①恢复余数法
机器不会心算,必须先做减法,若余数为正,才知道够减;若余数为负,才知道不够减。不够减时必须恢复原来的余数,以便再继续往下运算,这种方法称为恢复余数法
②加减交替法
特点是运算过程中如出现不够减,则不必恢复余数,根据余数符号,可以继续往下运算,因此步数固定,控制简单
2.4.2并行除法器
(1)可控加法/减法(CAS)单元
图b中 xi(i=1,2,...,6)为被除数,yi(i=1,2,3)为除数
沿对角方向进入阵列的原因:
在除法中所需的部分系数左移替代为让余数保持固定将除数沿对角线右移
(2)加减交替的阵列除法器
例:
2.5定点运算器的组成
2.5.1逻辑运算
(1)逻辑非(求反)
设一个数x表示成: x=x0 x1 x2 ... xn
对于x求逻辑非,则有: x'=z=z0 z1 z2 ... zn
zi = x'i,i=0,1,2,...,n
例:
(2)逻辑加(按位求”或“)
设两个数x和y,它们表示为 x=x0 x1 x2 ... xn
y=y0 y1 y2 ... yn
若 x+y=z=z0 z1 z2 ... zn
则 zi = xi + yi,i=0,1,2,...,n
例:
(3)逻辑乘(按位求”与“)
设两个数x和y,它们表示为 x=x0 x1 x2 ... xn
y=y0 y1 y2 ... yn
若 x · y=z=z0 z1 z2 ... zn
则 zi = xi · yi,i=0,1,2,...,n
例:
(4)逻辑异(按位求模2和)
设两个数x和y,它们表示为 x=x0 x1 x2 ... xn
y=y0 y1 y2 ... yn
若逻辑异为z x ⊕ y=z=z0 z1 z2 ... zn
则 zi = xi ⊕ yi,i=0,1,2,...,n
例:
2.5.2多功能算术/逻辑运算单元(ALU)
(1)基本思想
算术/逻辑运算单元的逻辑表达式为
Fi=Xi ⊕ Yi ⊕ Cn+i
Cn+i=Xi Yi + Yi Cn+i + Cn+i Xi
式中进位下标用n+i 代替原来一位全加器中的i,i代表集成在一片电路上的ALU的二进制位数,对于4位一片的ALU,i=0,1,2,3。n代表若干片ALU组成更大字长的运算器时每片电路的进位输入,如当4片组成16位字长的运算器时,n=0,4,8,12
(2)逻辑表达式
设 G=Y3 + Y2X3 + Y1X2X3 + Y0X1X2X3
P=X0X1X2X3
则 Cn+4 = G + PCn
这样,对一片ALU来说,可有三个进位输出。其中G称为进位发生输出,P称为进位传输出。在电路中多加这两个进位输出的目的,是为了便于实现多片(组)ALU之间的先行进位,为此还需一个配合电路,称为先行进位发生器(CLA)
(3)算术逻辑运算的实现
图中除了S0~ S3四个控制端外,还有一个控制端M,它用来控制ALU进行算术运算还是进行逻辑运算。
当M=0时,M对进位信号没有任何影响。此时Fi不仅与本位的被操作数Yi和操作数Xi有关,而且与向本位的进位值Cn+i有关,因此M=0时,进行算术操作
当M=1时,封锁了各位的进位输出,即Cn+i=0,因此各位的运算结果Fi仅与Yi和Xi有关,故M=1时,进行逻辑操作
表列出了74181ALU的运算功能表,它有两种工作方式。
对正逻辑操作数来说,算术运算称高电平操作,逻辑运算称正逻辑操作(即高电平为“1”,低电平为“0")。对于负逻辑操作数来说,正好相反。
由于S0~S3有16种状态组合,因此对正逻辑输入与输出而言,有16种算术运算功能和16种逻辑运算功能。同样,对于负逻辑输入与输出而言,也有16种算术运算功能和16种逻辑运算功能。
注意,表中算术运算操作是用补码表示法来表示的。其中“加”是指算术加,运算时要考虑进位,而符号“+”是指“逻辑加”。
其次,减法是用补码方法进行的,其中数的反码是内部产生的,而结果输出“A 减 B 减 1”,因此做减法时须在最末位产生一个强迫进位(加1),以便产生“A减B"的结果。
另外,“A=B"输出端可指示两个数相等,因此它与其他ALU的“A=B"输出端按“与”逻辑连接后,可以检测两个数的相等条件。
(4)两级先行进位的ALU
假设4片(组)74181的先行进位输出依次为P0,G0,P1,G1,P2,G2,P3,G3,那么参考式的进位逻辑表达式,先行进位部件74182CLA所提供的进位逻辑关系如下:
Cn+x = G0 + P0Cn
Cn+y = G1 + P1Cn+x = G1 + G0P1 + P0P1Cn
Cn+z = G2 + P2Cn+y = G2 + G1P2 + G0P1P2 + P0P1P2Cn
Cn+4 = G3 + P3Cn+z = G3 + G2P3 + G1P2P3 + G0P1P2P3 + P0P1P2P3Cn = G*+ P*Cn
其中
P* = P0P1P2P3(成组进位传送输出)
G* = G3 + G2P3 + G1P2P3 + G0P1P2P3(成组进位发生输出)
补充:
单工通信:只能一端传输到另一端
双工通信:两端可以同时传输
半双工通信:只能由一端传输到另一端,同时另一端到一端的传输暂停
2.5.3内部总线
根据总线所处的位置,分为内部总线和外部总线。
内部总线:CPU内各部件的连线
外部总线:系统总线,即CPU与存储器、I/O系统之间的连线
按总线的逻辑结构来说,总线可分为单向传送总线和双向传送总线
单向总线:信息只能向一个方向传送
双向总线:就是信息可以向两个方向传送,既可以发送数据,也可以接收数据。
图中是带有缓冲驱动器的4位双向数据总线。其中所用的基本电路就是三态逻辑电路
当“发送”信号有效时,数据从左向右传送。反之,当“接收”信号有效时,数据从右向左传送。这种类型的缓冲器通常根据它们如何使用而叫做总线扩展器、总线驱动器、总线接收器等等
2.5.4定点运算器的基本结构
运算器包括ALU、阵列乘法器、寄存器、多路开关、三态缓冲器、数据总线等逻辑部件
运算器大体有三种结构形式:
(1)单总线结构的运算器
在同时间内,只能有一个操作数放在单总线上。为了把两个操作数输入到AlU,需要分两次来做,而且还需要A、B两个缓冲寄存器。
例如,执行一个加法操作时,第一个操作数先放入A缓冲寄存器,然后再把第二个操作数放入B缓
冲寄存器。只有两个操作数同时出现在AlU的两个输入端,ALU才执行加法。当加法结果出现在单总线上时,由于输入数已保存在缓冲寄存器中,它并不会打扰输入数。然后,再由第三个传运动作,以便把加法的“和"选通到目的寄存器中。
由此可见,这种结构的主要缺点是操作速度较慢。虽然这种结构中输入数据和操作结果需要三次串行的选通操作,但它井不会对铝科指令都增加很多执行时间
(2)双总线结构的运算器
在这种结构中,两个操作数同时加到ALU进位运算,只需要一次操作控制,而且马上就可以得到运算结果。
图中,两条总线各自把其数据送至ALU的输入端。专用寄存器分成两组,它们分别与条总线交换数据。 这样,通用寄存器中的数就可以进入到任一组专 用寄存器中去,从而使数据传送更为灵活
ALU的输出不能直接加到总线上去。这是因为,当形成操作结果的输出时,两条总线都被输入数占据,因而必须在ALU输出端设置缓冲寄存器。
为此,操作的控制要分两步来完成:
第一步,在ALU的两个输入端输入操作数,形成结果并送入缓冲寄存器
第二步,把结果送入目的寄存器。假如在总线1、2和ALU输入端之间再各加一个输入缓冲寄存器,并把两个输入数先放至这两个缓冲寄存器,那么,ALU输出端就可以直接把操作结果送至总线1或总线2上去
(3)三总线结构的运算器
在三总线结构中,ALU的两个输入端分别由两条总线供给,而ALU的输出则与第三条总线相连。
这样,算术逻辑操作就可以在一步的控制之内完成。由于ALU本身有时间延迟,所以打入输出结果的选通脉冲必须考虑到这个延迟。
另外,设置了一个总线旁路器(桥)。如果一个操作数不需要修改,而直接从总线2传送到总线3,那么可以通过总线旁路器把数据传出;如果一个操作 数传送时需要修改,那么就借助于ALU
三总线运算器的特点是操作时间快。
2.6浮点运算方法和浮点运算器
2.6.1浮点加法、减法运算
完成浮点加减运算的操作过程大体分为四步:
(1)0操作数检查
浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一.系列操作,以节省运算时间。0操作数检查步骤则用来完成这一功能
(2)比较阶码大小并完成对阶
两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若两数阶码不同,表示小数点位置没有对齐,此时必须使两数的阶码相同,这个过程叫做对阶。
对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移(相当于小数点左移),每右移一位,其阶码加1,直到两数的阶码相等为止
(3)尾数加减运算
方法与定点加减运算完全一样
(4)结果规格化
在浮点加减运算时,两符号位不相等,这在定点加减运算中称为溢出,是不允许的
但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将尾数运算结果右移以实现规格化表示,称向右规格化,即尾数右移1位,阶码加1。当尾数不是1.M时须向左规格化
(5)舍入处理
在对阶或向右规格化时,尾数要向右移位,放右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理
舍入处理提供了四种可选办法:
①就近舍入(通常的“四舍五入”)
②朝0舍入(朝数轴原点方向舍入)
③朝+∞舍入(对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说,则是简单的截尾)
④朝-∞舍入(与方法③相反)
(6)溢出处理
①阶码上溢;②阶码下溢;③尾数上溢;④尾数下溢
补充:
(1)提高浮点运算方法:
①提高芯片计算的时钟频率;②增加芯片的计算核心数量;③通过多流水线技术;④乘加融合
(2)实现超算的两种途径:
①网格计算;②把处理器组织为关系紧密的集群
2.6.2浮点乘法、除法运算
(1)步骤
(2)例
2.6.3浮点运算流水线
(1)流水线原理
(2)流水线浮点加法器