1 / 88

第三章、运算方法与运算器

版权所有,引用请注明出处. 第三章、运算方法与运算器. 原著 谭志虎. 主讲 ( 改编 ) 蒋文斌. Outline . 定点补码加 / 减法运算 定点乘法运算 浮点运算 运算器组织 运算器部件举例. 3.1 定点补码加 / 减法运算. 定点补码的加减法运算 [X] 补 + [Y] 补 = [X + Y] 补 [X] 补 - [Y] 补 = [X] 补 + [-Y] 补 =[X-Y] 补 - [Y] 补 = [-Y] 补 (规则来源于补码的特点,也即模运算的特点。存在模运算与溢出的关系问题).

bern
Télécharger la présentation

第三章、运算方法与运算器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 版权所有,引用请注明出处 第三章、运算方法与运算器 原著 谭志虎 主讲(改编) 蒋文斌

  2. Outline • 定点补码加/减法运算 • 定点乘法运算 • 浮点运算 • 运算器组织 • 运算器部件举例

  3. 3.1 定点补码加/减法运算 • 定点补码的加减法运算 [X]补+ [Y]补= [X + Y]补 [X]补- [Y]补= [X]补+ [-Y]补=[X-Y]补 - [Y]补= [-Y]补 (规则来源于补码的特点,也即模运算的特点。存在模运算与溢出的关系问题)

  4. 注意: 模运算与溢出的关系(例如, 4位2进制运算器): 0.111+1.100=10.011 (0.875-0.5=0.375) (多出一位丢掉) √ 0.111+0.010 =1.001 (0.875+0.25=1.125) (机器得到- 0.875) 1.001+1.100 =10.101 (-0.875-0.5= -1.325) (机器得到+0.625) 结论: 运算的实际结果没有超出字长可以表示的数值范围,取模的结果是正确。 超出范围则溢出,出现错误。判断方法: 正 + 正 得负 或 负 + 负 得正

  5. 0 .1 0 1 0 1 0 .0 1 0 0 0 + 1 .0 0 1 0 1 0 .1 0 1 0 1 1 .1 0 1 0 1 1 .1 1 0 0 0 + 0 .1 1 1 0 1 0 .1 1 0 0 0 1 .1 1 0 0 0 + + 1 0 .1 1 1 0 1 1 1 .0 1 1 0 1 1 .0 1 1 0 1 补码加法的几种情况及其溢出检测 符号位进位Cf (C0),最高位进位C1 正常结果 符号位进位舍去,正常结果 Cf = 0,C1 = 0 Cf = 1,C1 = 1 正正得负,正溢出 负负得正,负溢出 Cf = 0,C1 = 1 Cf = 1,C1 = 0 计算机如何识别运算结果是否溢出

  6. 单符号数溢出检测 V=Cf⊕C1 溢出信号V对应的真值表

  7. 0 0 .1 0 1 0 1 1 1 .1 0 1 0 1 0 0 .0 1 0 0 0 1 1 .1 1 0 0 0 + + 0 0 .1 1 1 0 1 1 1 1 .0 1 1 0 1 0 0 .1 0 1 0 1 1 1 .0 0 1 0 1 0 0 .1 1 0 0 0 1 1 .1 1 0 0 0 + + 0 1 .0 1 1 0 1 1 1 0 .1 1 1 0 1 双符号数溢出检测 f1 f2 Sf1 Sf2 符号位进位舍去,正常结果 正常结果 非正常符号位,溢出 非正常符号位,溢出 V=Sf1⊕Sf2

  8. 加法运算的逻辑实现 [X]补=X0 X1………Xn + [Y]补=Y0 Y1…….…Yn ?0 ? 1…….…?n 多位加法运算依赖于各位逐位相加的运算, 所以我们先讨论一位全加器

  9. 一位全加器 输入:加数Ai、Bi、低位进位输入Ci+1 输出: 和数Si,进位输出Ci

  10. = Å Å S A B C i i i i+1 = + Å C A B ( A B ) C i i i i i i+1 一位加法器逻辑表达式 注意:逻辑表达式可以变形,故电路形式不是唯一的。

  11. A A A A A A & =1 ≥1 =1 ≥1 & 1 B B B B B B A 与非 典型门 电路 或非 非 与 或 异或 异或非

  12. Ci Si Si FA Ci Ci+1 FA Ai Bi = + Å C A B ( A B ) C i i i i i i+1 Ci+1Ai Bi 一位全加器逻辑电路实现 一位全加器 一位全加器时间延迟

  13. 双符号补码加/减器电路实现 1、N个合起来; 2、M控制加减; 3、 串行行波加法器 V s0 s1 sn-1 sn C2 …Cn-1 C0 C1 Cn Cn+1 C Σn-1 Σn Σ0 Σ0 Σ1 M x0 y0 x1 y1 xn-1 yn-1 xn yn M由汇编语言中的加法指令add,以及sub等产生

  14. 快速加法器 • 能否提前产生各位的进位输入 • 使得各位的加法运算能并行起来 • 提高多位加法器运算速度

  15. 并行加法器进位链 • Si=Xi⊕Yi⊕Ci+1 (Xi⊕Yi) • Ci= XiYi + Ci+1 • Gi =XiYi • Pi=Xi⊕Yi Gi 进位产生函数/本地进位 Pi进位传递i函数,进位传递条件 • Ci =Gi+PiCi+1

  16. 并行加法器进位链 能否提前得到当前位的进位输入, 这样就可以完全并行,大大提高运算速度 • Cn =XnYn+(Xn⊕Yn)Cn+1=Gn+PnCn+1 • Cn-1 =Xn-1Yn-1+(Xn-1⊕Yn-1)Cn=Gn-1+Pn-1Cn • Cn-2 =Xn-2Yn-2+(Xn-2⊕Yn-2)Cn-1=Gn-2+Pn-2Cn-1 • …… • C2 =X2Y2+(X2⊕Y2)C3=G2+P2C3 • C1 =X1Y1+(X1⊕Y1)C2=G1+P1C2 高位的运算依赖于低位运算进位的产生,计算不能并行

  17. 并行加法器进位链 • Cn =XnYn+(Xn⊕Yn)Cn+1=Gn+PnCn+1 • Cn-1 =Gn-1+Pn-1Cn =Gn-1+Pn-1 (Gn+PnCn+1) =Gn-1+Pn-1Gn+Pn-1PnCn+1 • Cn-2 =Gn-2+Pn-2Cn-1= Gn-2+Pn-2(Gn-1+Pn-1Gn+Pn-1PnCn+1) =Gn-2+Pn-2Gn-1+Pn-2Pn-1Gn+Pn-2Pn-1PnCn+1 • …… C2 =G2+P2G3+P2P3G4…+P2 P3 …PnCn+1 C1 =G1+P1G2+P1P2G3+P1P2P3G4…+P1 P2 …PnCn+1

  18. C C C G4 P4 G3 P3 G2 P2 G1 P1 X1 Y1 X2 Y2 X3 Y3 X4 Y4 C 3 4 1 2 C 5

  19. G1 P1 G2 P2 G3 P3 G4 P4 与门异或门电路 X1 Y1 X2 Y2 X3 Y3 X4 Y4 C5 ⊕ ⊕ 先行进位电路CLA74182 先行进位的多功能算术/逻辑运算单元ALU74181 C1 C2 C3 C4 CLA74182 G1 P1 G2 P2 G3 P3 G4 P4 ⊕ ⊕ Si=Xi⊕Yi⊕Ci+1 S1 S2 S3 S4

  20. P1*G1* S1S2S3 S4 ALU74181 C1 C5 X1Y1X2Y2X3Y3X4Y4 16位组内先行进位,组间串行进位 P1*G1* S1 ~S4 P2*G2* S5 ~S8 P3*G3* S9 ~S12 S13 ~S16 P4*G4* C9 C5 C13 ALU74181 ALU74181 ALU74181 ALU74181 C1 C17 X1Y1~X4Y4 X5Y5~X8Y8 X9Y9~X12Y12 X13Y13~X16Y16 C1 =G1+P1G2+P1P2G3+P1P2P3G4…+P1 P2 …PnCn+1 成组进位发生输出G1* ,成组进位传送输出P1*

  21. 16位组内先行进位,组间先行进位 P*G* C5 C1 CLA (74182) P1 G1 C2 P2 G2 C3 P3 G3 C4 P4 G4 S9 ~S12 P1*G1* S1 ~S4 S5 ~S8 P3*G3* S13 ~S16 P4*G4* P2*G2* C9 C5 C13 ALU74181 ALU74181 ALU74181 ALU74181 C17 X1Y1~X4Y4 X5Y5~X8Y8 X9Y9~X12Y12 X13Y13~X16Y16 32/64位?

  22. Outline • 定点补码加/减法运算 • 定点乘法运算 • 浮点运算 • 运算器组织 • 运算器部件举例

  23. 3.2定点乘法运算 • 原码乘法运算方法 • 原码乘法运算实现 • 补码乘法运算方法 • 补码乘法运算实现

  24. a4b0 a3b0 a2b0 a1b0 a0b0 a4b1 a2b1 a1b1 a0b1 a3b1 a0b2 a3b2 a2b2 a1b2 a4b2 a2b3 a1b3 a0b3 a3b3 a4b3 a4b4 a2b4 a1b4 a0b4 a3b4 p8 p7 p6 p5 p4 a4a3a2a1a0 p9p8p7p6p5p4p3p2p1p0 x b4b3b2b1b0 + p9 p3 p2 p1 p0 • 多位乘法必须先计算一位乘法,然后累加求和

  25. 乘法运算实现方法 • 执行乘法运算子程序实现乘法运算 • 设置专用乘法器实现乘法运算 • 借助加法器配置相应部件实现乘法运算

  26. Xi Yi Output 0 0 0 0 1 0 1 0 0 1 1 1 乘法器 一位乘法电路实现 S=X*Y 一个与门就可以实现一位乘法

  27. 多位原码乘法 • 符号位直接异或即可得到乘积的符号 • 仅仅需要考虑其数值部分的计算 • 以定点小数为例进行讨论

  28. A = 0. a4 a3 a2 a1 a0 B = 0. b4 b3 b2 b1 b0 … … … & & & … a4b4 a1b0 a0b0 相加数产生部件 • 经过一级门电路延迟,即可得到所有的相加数

  29. 0 a4b0 a3b0 a2b0 a1b0 a0b0 COUT a4b1 a2b1 a1b1 a0b1 a3b1 0 COUT a2b2 a0b2 a4b2 a3b2 a1b2 0 a4b3 COUT a2b3 a1b3 a0b3 a3b3 0 COUT a4b4 a3b4 a2b4 a1b4 a0b4 0 p7 p5 p4 p3 p6 p9 p8 p1 p0 p2 5位无符号数阵列乘法器电路

  30. 0 0 0 0 a4b0 a3b0 a2b0 a1b0 a0b0 a4b1 a2b1 a1b1 a0b1 a3b1 a2b2 a0b2 a4b2 a3b2 a1b2 a4b3 a2b3 a1b3 a0b3 a3b3 a1b4 a4b4 a3b4 a2b4 a0b4 0 p8 p7 p5 p4 p1 p0 p3 p6 p9 p2 5位无符号数阵列乘法器电路

  31. … … an1bn1 a1b0 a0b0 … P2n1 P2n2 P2n3 P1 P0 Pf nn位原码乘法器框图 A = af.an1 an2…a1 a0 B = bf.bn1 bn2…b1 b0 相加数产生部件 n×n乘法阵列 =1 .

  32. 0 0 0 0 a2b1 a1b1 a0b1 a3b1 a4b0 a3b0 a2b0 a1b0 a0b0 a4b1 a2b2 a0b2 a4b2 a3b2 a1b2 a4b3 a2b3 a1b3 a0b3 a3b3 a1b4 a4b4 a3b4 a2b4 a0b4 0 p8 p7 p5 p4 p1 p0 p3 p6 p9 p2 4*5个全加器, 8个全加器延迟

  33. 原码阵列乘法器时间延迟 • n(n-1)个FA • 延迟时间 • (n-1)FA +(n-1)FA • 每一个FA包含三级门电路延迟T • 故总延迟为 • 2(n-1)*3T +T(相加数产生时间)

  34. … . Pf P2n1 P1 P0 补码乘法器原理图 [A]补 = af. an1 …a1 a0 [B]补 = bf. bn1 …b1 b0 n位求补器 n位求补器 数值同原码 相加数产生电路(同前) 相加数 乘法阵列(同前n×n阵列) =1 积绝对值 2n位求补器 (补码乘积)

  35. 乘法运算实现方法 • 执行乘法运算子程序实现乘法运算 • 设置专用乘法器实现乘法运算 • 借助加法器配置相应部件实现乘法运算 • 原码一位乘法的运算方法与逻辑实现 • 补码一位乘法的运算方法与逻辑实现

  36. 0 a4b0 a3b0 a2b0 a1b0 a0b0 COUT a4b1 a2b1 a1b1 a0b1 a3b1 0 COUT a2b2 a0b2 a4b2 a3b2 a1b2 0 a4b3 COUT a2b3 a1b3 a0b3 a3b3 0 COUT a4b4 a3b4 a2b4 a1b4 a0b4 0 p7 p5 p4 p3 p6 p9 p8 p1 p0 p2 5位无符号数阵列乘法器电路

  37. 0 0.a4a3a2a1a0 a4 a3 a2 a1 a0 0.p9p8p7p6p5p4p3p2p1p0 x 0.10101 COUT 0 COUT a2 a0 a4 a3 a1 0 0 COUT 0 0 0 0 0 COUT a4 a3 a2 a1 a0 0 p7 p5 p4 p3 p6 p9 0 0 0 0 0 p8 p1 p0 p2 5位无符号数阵列乘法器电路

  38. 0 a4 a3 a2 a1 a0 COUT 0 COUT a2 a0 a4 a3 a1 0 0 COUT 0 0 0 0 0 COUT a4 a3 a2 a1 a0 0 p7 p5 p4 p3 p6 p9 Σ=XYn Σ右移一位 0 0 0 0 0 Σ+=XYn-1 Σ右移一位 Σ+=XYn-2 Σ右移一位 Σ+=XYn-3 p8 p1 p0 p2 5位无符号数阵列乘法器电路

  39. 部分积累加的数学表示 部分积=XYn 部分积=XYn-1+XYn 2-1 部分积=XYn-2+(XYn-1+XYn*2-1)2-1 =XYn-2+XYn-12-1 +XYn2-2 =XY12-1+XY22-2+…XYn2-n X*Y=X[Y12-1+Y22-2+…Yn2-n]

  40. 开始 i = 0, 0→∑ 原码乘法 算法流程图 Yn=1 N Y ∑ + X→ ∑ ∑ + 0→ ∑ ∑ Y右移一位 i+1→i N i = n Y X0⊕Y0→P0 结束

  41. 例子 • 已知X=0.1101 Y=-0.1011 • 计算[X]原[Y]原

  42. 00.0000 00.1101 + 部分积 乘数 判断位 说明 P0=0 Y4=1,+|X| Y0.1011 00.1101 00.0110 00.1101 1 右移一位得P1 Y4=1,+ |X| Y0.101 + 01.0011 1 00.1001 11 00.0000 右移一位得P2 Y4=0,+0 Y0.10 + 00.1001 11 00.0100 111 00.1101 右移一位得P3 Y4=1,+ |X| Y0.1 + 01.0001 111 00.1000 1111 右移一位得P4=|X|·|Y| Y0

  43. R1 乘数Y Yn +1计数器 Σ→R0 移位控制 加法器Σ & X0被乘数X R2 原码乘法逻辑结构 计 数 器 R0 部分积∑ & 控制电路 ∑= ∑+YnX

  44. 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 0 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 0 0 0 1 1 1 1 0 乘数R1 部分积R0 Yn 判断位 + |X| |X|= 0.1101, |Y|= 0.1011 + |X| +0 + |X|

  45. 部分积累加的数学表示 部分积=XYn 部分积=XYn-1+XYn*2-1 部分积=XYn-2+(XYn-1+XYn*2-1)2-1 =XYn-2+XYn-12-1 +XYn*2-2 =XY1*2-1+XY2*2-2+…XYn*2-n X*Y= X[Y1*2-1+Y2*2-2+…Yn*2-n]

  46. 补码一位乘法 1) 被乘数[X]符号任意,乘数[Y]为正 [X]补=X0.X1X2…Xn [Y]补=0.Y1Y2…Yn [X]补[Y]补=(2+X)  Y=(2n+1+X)  Y =2n+1Y+XY =2  2n 0.Y1Y2…Yn+XY =2(Y1Y2…Yn)+XY =2+XY =[X  Y]补 [X  Y]补=[X]补[Y]补

  47. 补码一位乘法 1) 被乘数[X]符号任意,乘数[Y]为负数 [X]补=X0.X1X2…Xn[Y]补=1.Y1Y2…Yn [Y]补=2+Y Y= [Y]补-2 =0.Y1Y2…Yn-1 [X  Y]补=[X (0.Y1Y2…Yn - 1) ]补 =[X  0.Y1Y2…Yn - X ]补 =[X  0.Y1Y2…Yn]补- [X]补 =[X]补0.Y1Y2…Yn- [X]补 =[X]补0.Y1Y2…Yn - Y0[X ]补

  48. 补码一位乘法 [X  Y]补=[X]补0.Y1Y2…Yn-Y0 [X ]补 =[X]补(-Y0+0.Y1Y2…Yn) =[X]补(-Y0+Y12-1+Y22-2+…Yn 2-n) =[X]补[-Y0+(Y1-Y12-1)+(Y22-1-Y22-2)+…(Yn2-n+1-Yn2-n)] = [X]补[Y1-Y0+(Y2-Y1)2-1+(Y3-Y2)2-2+…(0-Yn)2-n] • XY= X  [ Y12-1 + Y22-2 + … Yn2-n] 原码乘法

  49. Yn Yn+1=? i=n+1 开始 i = 0, 0→ ∑ 01 10 00或11 ∑+ [X]补→∑ ∑不变 ∑ + [X]补→∑ Y 结束 N ∑、[Y]补右移一位 i + 1

  50. 例子 • 已知X=1.0101 Y=1.0011计算[X]补[Y]补 解: [-X]补=0.1011

More Related