第 八 章 运 算 方 法
DESCRIPTION
第 八 章 运 算 方 法. 执行算术和逻辑运算的指令以及微操作是任何 CPU 的一个必不可少的重要部分。. 1. 几种 常用数据格式 的 算术运算算法 和它们的 硬件实现 。包括 定点数 表示及其加、减、乘、除过程和硬件实现, 二 — 十进制 (或 BCD ) 码 的格式和操作。. 2. 提高算术操作性能的 专用硬件 。 (流水线、查找表、华莱士树). 3. 介绍 浮点数 的格式和它们的算术操作。包括浮点数的格式,性质,以及加、减、乘、除过程和硬件实现,还有 IEEE 754 浮点数标准。. 8.1 无符号表示法. - PowerPoint PPT PresentationTRANSCRIPT
-
1. BCD 2. 3. IEEE 754 CPU
-
8.1 0n0 02n-112n -2n-12n-1-11000211
-
-5450101101011011
88.1
-
8.1.1 XY8 ADDXX+Y 02n-12-2n-12n-1-1 8.1 XX+Y
-
8255 +11111 1111 + 0000 0001 1 0000 000098
-
8.2 acbd
-
X YX +-YY Y YXX Y[X Y]=[X]+[-Y]SUBXXY8.3 XXY
-
2n-10120000 0001+1111 1110 = 1111 1111255bdac 8.4 2 XYX +Y 01
-
8.1.2 nnxy z = 0 FOR i = 1 TO y DO { z = z + x } xyx y x = 2 7 y = 2 5 3 8 1 1 3 5 5 4 6 8 3 1
-
x = 2 7 y = 2 5 3 8 1 1 3 5 1 4 3 1 5 4 6 8 3 1
-
x = 27 y = 253 81 81 1 135 1431 1431 3 1 54 6831 6831
-
010X0 = 0X1 = X nXY nUV UnVn C U = 0 FOR i = 1 TO n DO { IF Y0 = 1 THEN CU = U + X CUV Y }
-
131111011011 X = 1101Y = 1011
-
RTLi = 0Z = 1123123 1 U0in Y02 CUU + X 2 ii-1 3 shr(CUV)cir(Y) Z3 GOTO 2 Z 3 FINISH1 8.31311RTLX = 1101Y = 10118.38.2
-
8.3 RTL
-
RTL X n YUV n SHR i n CFINISH RTL iZi0i = 0Z1
-
8.5 3
-
8.5RTL START1State CounterFINISHDecoderDecoder1Uni State Counter101 Decoder2i1Y0 = 1U + XCUY0 = 0CU State Counter110 Decoder3CUVZ = 0State Counter01 Decoder2GOTO 2
Z = 1FINISH1Decoder0123
-
YVUVX VVV01RTL
1 U0in V02 CUU + X 2 ii-1 3 shr(CUV) Z3 GOTO 2 Z 3 FINISH1 CUU + XY02V02cir(Y) CULDV02Y8.5
-
RTL13 118.4 RTL VY8.3
-
8.1.2.1 13 11 1101 10113-5+151000 1111 113 IF < 0 THEN - IF < 0 THEN - IF THEN -
-
booths booths11111 U = 0Y-1 = 0FOR i = 1 TO n DO {IF 1 THEN U = U X= U + X + 1 IF 1 THEN U = U + X UV YY0Y-1 } boothsUVXYUVXYnY-11
-
Y1YYY0 1011 0101 111 00 1Y-10Y1
8.5X = -31101Y = -510110000 1111+15
-
8.5 booths 1
-
RTLSTARTFINISHUVXYnY-1in0
1 U0Y-1 0in Y0Y-1 2 UU + X + 1 Y0Y-1 2 UU + X 2 ii-1 3 ashr(UV)cir(Y)Y-1 Y0 Z3 GOTO 2 Z 3 FINISH1
Y0Y-11Y0Y-11
Y0Y-12UU +XY0+ Y0
-
RTL35X1101Y1011 8.6 boothsRTL YVY
-
RTL8.6 booths 31
-
8.1.3 z = xy
Z0 WHILE xy DO { zz1xxy }
z 096 71 6827 639 437 426 11 716871680
-
096 71 6827 00 68 71 0 682 682 639 682 71 9 437 437 426 437 71 6 11 6871
-
68272nn7196nnnn
7827714278 > 7132
0
-
0110 UVUnVnnXYUC1U U X THEN Y = 0C = 0 FOR i = 1 TO n DO { CUV Y IF CU X THEN {Y0 = 1U = CU X}} 1127n =4UV = 0111 0000X = 0111UX0111161 000001 00004Y
-
14713U = 1001V = 0011X = 1101n = 4 8.7
-
RTLXUVYnCOVERFLOW1i = 0Z = 1UXG = 1FINISHI11234 G 1 FINISH1OVERFLOW1 2 Y0C0OVERFLOW0in 3 shl(CUV)shl(Y)ii-1C + G4 Y0 1UU + X + 1 Z4 GOTO 3 Z 4 FINISH1 RTL CUX UXGC =1C + GU U + X + 1U = CU X
-
RTL14713U = 1001V = 0011X = 1101n = 4 8.8 RTL
-
8.7
-
CU XU U XCU XCUXCU < XU U + XU CUXCU XU CU XU U XCU < XU U + XU
-
UVXYUUVXYnC1 CU = U + X + 1 U = U + XIF C = 1 THEN Y = 0 FOR i = 1 TO n DO { CUV Y IF C = 1 THEN { U= U+ X +1} ELSE{ CU= U+ X +1 } IF C = 1 THEN { Y0 = 1} ELSE { U = U + X } } CUXC = 1CUXU U + X + 1C1CU XC = 0CU U + X + 1CU XC1U = U XCU XC10
-
CUX
C U = U + X + 1U = U X UXU XC1C0 abC1U X
cC0U < X 8.8 C U = U + X + 1UXabc
-
UXU XU U + X + 1C1C0UY CUVY U = U XCUXCU XC = 1 C = 1CU XY01C = 0CU < XU C = 1CUXU U + X + 1C1CU XC = 0CU U + X + 1CU XC1U = U XCU XC10
-
225138.9aX = 1101n = 4C122513 = 17 4171 00014U 8.9 a 147138.9bY
-
14713114 8.9 b / YU
-
RTL
OVERFLOW110 FINISH11FINISH1RTL in0i = 0Z = 1 GOTO11122341421112141424
-
11 CUU + X + 1 12 UU + X C 12 FINISH1OVERFLOW1 2 Y0OVERFLOW0in 3 shl(CUV)shl(Y)ii-1 C 41 UU + X + 1 C41 CUU + X + 1 C 42 Y0 1 C42 UU + X Z 42 FINISH1 Z42 GOTO 3 CU = U + X + 1 U = U + XIF C = 1 THEN Y = 0 FOR i = 1 TO n DO { CUV Y IF C = 1 THEN { U= U+ X +1} ELSE{ CU= U+ X +1 } IF C = 1 THEN { Y0 = 1} ELSE { U = U + X } }
-
8.10 RTL 14713
-
GU + XU X6 8.9 42
-
IF < 0 THEN - IF < 0 THEN - IF THEN -
-
8. 2 signed_magnitude notationsigned_twos complement notation8.2.1 signed_magnitude notation 1001n XsX Xs1Xn +3-33+300011-310011
-
8.2.1.1 UsUXsXYsYASAS =0 =1PM =XsASYsXsASYs8PMX =3Y =5X =5Y =38 8.11 PM
-
PMXYX > YX = YX < YPM = 0PM = 1 PM = 0 XY Xs UsXsUX + Y CUX + YUX + YC PM = 0RTL
PM1UsXsCUX + Y PM2OVERFLOWC
-
PM = 1 XYX > YUX Y X + Y + 1X < YX YY X2X Y + 1CUX + Y + 1XYCX Y 0X = YCUX + Y + 1U = 0C = 10 +00 XY8.11X > YUsXsX < YUsXs
-
PM = 1RTL
X > YC = 1Z = 0X = YC = 1Z = 1X < YC = 0OVERFLOW0PM = 1
PM 1CUX + Y + 1OVERFLOW0 CZPM 2UsXs CZ PM 2Us0 CPM 2UsXsUU + 1 CZC = 1Z = 0X > YUX YXsUs CZC = 1Z = 1X = YU00 +0 CC = 0X < YUX YY XXs
-
RTLPM = 0PM = 1 PM1UsXsCUX + Y PM 1CUX + Y + 1OVERFLOW0 PM2OVERFLOWC CZPM 2UsXs CZ PM 2Us0 CPM 2UsXsUU + 1 2FINISH1 8.12XsXYsYRTLPM = 0PM = 1X > YPM = 1X = YPM = 1X < Y
-
8.12
-
RTL 8.10
-
8.2.1.2 CUXYRTLXsXYsY 1UsXsYsVsXsYsU0in Y02CUU + X 2 ii-1 3 shr(CUV)cir(Y) Z3 GOTO 2 ZT 3 Us0Vs0 Z 3 FINISH1 UV = 0T = 1T = 0i = 0Z = 1
-
RTL-13+11 8.13 RTL 1311UsVs
-
RTL RTLRTL
RTL
-
8.2.2 signed_twos complement notation 1nXsX2 +530010111101 +500101500101
-
n + 1
booths
-
8.3 BCDbinary coded decimal BCDbinary coded decimalBCDBCD
-
8.3.1 BCD BCD40000010019 BCD9410101111 nn4270010 01110001 1011 BCD01 : +27: 00010 0111 27: 10010 0111
-
8.3.2 BCDBCD BCDBCD968.11BCDBCDBCD 5 + 6 = 0101 + 0110 = 1011 8 + 9 = 1000 + 1001 = 1000111 BCD9999 99n9110BCD
-
8.11 BCD Adder 1S3S2S1S0BCDS3S2 = 1S3S1 = 1X + YCout1 =1160110S3S2S1S0 XY06BCD
-
BCD9BCD9 8.12 9 6319999 631 = 36810368 + 1 = 369210BCD
-
BCD BCD9YPM 1UCPM 2Xs1CPM 2Xs9Xs RTL PM1UsXsCUX + Y PM 1CUX + Y + 1OVERFLOW0 PM2OVERFLOWC CZPM 2UsXs CZ PM 2Us0 CPM 2UsXsUU + 1 2FINISH1
-
RTLPMX > YX = YX < Y 8.14 BCD
-
BCD 8.13 BCD
-
8.3.2 BCDBCDBCD
BCD9BCD BCD0 ~ 99 1BCD4dshr Cd1BCD1
-
BCDBCDUsUVXsXYsYRTL nYYd0YBCD4Yd0 = 0ZY0 = 1i = 0Z = 1 1UsXsYsVsXsYsU0inCd0ZY0 2CdUCdU + XYd0Yd0 1GOTO 2 ZY0 2ii 1 3dshr(CdUV)dshr(Y) Z3GOTO 2 ZT 3Us0Vs0 Z 3FINISH1 CdCdYd03dshr
-
BCD7123
RTL8.15 BCD RTL
-
8.4 Wallace 8.4.1 throughput
-
FOR i =1 TO 100 DO {A[i] (B[i]C[i]) +D[i]}
10 nsA[i]20 ns2000 ns A[i]1010 ns 10 nsB[1]C[1]10 nsD[1]A[1]B[2]C[2]10 nsB[3]C[3]A[2]
-
speedupSnnk T1TkkTkT1 = 20 nsTk = 10 ns Sn = n T1 (k + n 1) Tk T1 nn * T1kkTknk + n 1
-
S100 = n T1 = 10020ns =1.98 (k + n 1) Tk (2 + 100 1)10ns n
S = T1 / Tk
S = T1 = T1 = k Tk (T1 / k) T1 / kT1 / kTkTk > T1 / k
-
2 ns S100 = n T1 = 10020ns =1.65 (k + n 1) Tk (2 + 100 1)12ns A[1]1 S1 = n T1 = 120ns =0.83 (k + n 1) Tk (2 + 1 1)12ns 11CPU
-
8.4.2 ROMROMROM 41ROM2 ROMROMROMXYROM
-
ROMUVXYXYXYUV UVXY4XY 82561011 11011000 1111143101111110113 8.16
-
ROM8.168.5 ROM4ROM2568864K16ROM 8.4.3 Wallace WallaceWallace
-
S8.17 SiXiYiZiCi+1SC X = 0111Y = 1011Z = 0010S = 1110C = 00110 SC101002001117+ 101111+ 00102SiCi+1SC
-
x = 111 y = 110 000 PP0 111 PP1 111 PP2 101010 Y10X0 PP2Y2X1112PP211100PP1Y11 8.18
-
8.18 Wallace
-
5PP0PP1PP2SCXY 8.19 33
-
10111110PP0 = 000 0000PP1 = 001 0110PP2 = 010 1100PP3 = 101 1000S = 011 1010C = 0000 1000S = 0110 1010C = 0 0011 00001001 1010 PP0PP1PP2PP3 SC 8.20 44Wallace
-
Wallace8Wallace
-
8.5 8.5.1 1234.5678 1.23456781031.234567893 102 01234.567.12345671041.2345671031234567.10-3
-
000 /NaNNaNNaN 1XXSXFXE XSXFXE1234.5678= 1.2345678104 XS = 1XF = 12345678XE = 4
-
XE878XE8 8 + 8 = 0 000077 + 8 = 15 = 1111 0+/- NaN1
-
8.5.2 88CPU .1011 1010232.1011 101123.1011 100123.0000 000123 = 2-5X2X E precision 814 8 ~ 7 .1111 111127 ~ .1111 111127 127.5 ~ +127.5
-
1812823IEEE 754 23 .111 1111 1111 1111 1111 11112127 ~ .111 1111 1111 1111 1111 111121271.7 1038 ~ +.71038 .121272127 23= 2104 .1 2-1282-128 23= 2 -151 848 .126 .125 .01211 = .12107 +/- NaN1
-
0.12-6.12-5 .12 -120 .12 80 CPU816 .1011 01014 .1100 +/- 0.5LSBLSB
-
8.16 + - 121
-
.101123-.110022101111001 .110022 .0110238.5.3 0NaN0 //0NaN
-
XYUXYXYAS = 0AS = 1 1IF Y = 0THEN UX0 = XUX ELSE 2IF X = 0YNaNTHEN U0Y IF AS = 0 THEN UYUY ELSE 3IF X = NaNTHEN UX= NaN ELSE 4IF Y = NaNTHEN UY= NaN ELSE 5IF X = THEN UX ELSE 6IF Y = THEN AS = 0UYU Y ELSE 7U 8.17
-
31USnUFmUE IXNY + NX + ZY 1UXFINISH1NYZX ZY +IXIYNX1U(YSAS)YFYEFINISH1 IY NX + NXNY1UYFINISH1 EXY2shr(YF)YEYE + 1GOTO 2 EYX2shr(XF)XEXE + 1GOTO 2 PM3CUFXF + YF PM 3CUFXF + YF + 1 3USXSUEXECE0 CPM 4shr(CUF)CEUEUE + 1 CE PM5UUS PM 5FINISH1 CPM 4USUSUFUF + 1 ZUCEUF(n 1) PM 5shl(UF)CEUEUE 1GOTO 5 (ZU + CE)PM 5U0FINISH1 CEUF(n 1)PM5FINISH1 AS = 0AS = 1PM =XSASYSREGXY= NaNNREG = 1REG = 0 ZREG = 1REG = IREG = 1XE > YE EXY = 1YE > XEEYX = 1
-
1XY0NaN 21X = .110125Y = .100023 YUF2Y2YF = 0010YE = 5 .001025 3 PM = 0C11.xxxx18.18.110123+.111022PM = 0
-
8.18 X = .110123+Y = .111022RTL 1 2XE > YE EXY = 1YY12XE = YE XE = YE EXY EXY 03 PM = 03CCE 0 41.xxxxC114 5 FNISH1 .110123+.111022=.1010246.5 + 3.5 =10 PM = 0
-
PM = 1C0UF UF + 1US US44 .0xxx .1xxx 0UFn-113UFn-1= 1UF = 0CE = 10 8.19.110123.111022
-
123 4 505 .110123.111022=.1100226.53.5 = 38.19 X = .110123Y = .111022RTL PM = 1
-
8.5.4 .1xxx .01xx .01xx.01 .1000.1000 = .01xx 1 0NaN 000NaNNaN0NaN
-
.110123.111022811=3+810=2+821821313 = 21 8213211102113255 = 13 8 10 0
-
RTLURUGUTUUE < 0 ME = 1i = 0Zi = 1 ZX + ZY1U0FINISH1 NX + NYZXZY1UNaNFINISH1NXNYZXZYIX+IY1U(XSYS) FINISH1 NXNY ZXZYI X IY1CEUEXE + YE biasUSXSYS CE2UUS FINISH1 ME2U0FINISH1 3UF0in YF(0) 4CUFUF + XF 4ii 1 5shr(CUFURUG)UTUGUTshr(YF) Zi 5GOTO 4 UF(n 1) 6UFUF + ((UR(UGUT))(UF(n 1)UR))FINISH1 UF(n 1) 6shl(UFURUGUT)UEUE 1 ME 7U0FINISH1 ME7UFUF + ((UR UG) (UF(0) UR) )FINISH1 1XY0NaN8.17 RTL
-
2345 UFn-1= 1611x1011 UF= .1011 0011UR =1UG =1UT =0 .1011 0011 110 .1011 0100UG = 0UT = 0 .1011 0011 10010UF01 .01xx610 .110123.1110226.53.50XS = 0XF = .1101XE = 0011YS = 0YF = .1110YE = 00108.20
-
8.20 X = .110123Y = .111022RTL
-
123UF45XF YF46.101125 = 2222.754 X > YXF > YFXF XE1
-
8.6 IEEE 754 70 IEEE 754 IEEE 754CPU8.6.1 IEEE 754
-
321823 112 127 126 +1270000 0000= -1271111 1111= +1288.21a+ 19.510011.11.0011124112741000 0011131 641115211023 1022 +1023 1023 +1024
-
0 NaN0001 + -NaN01 IEEE 7548.6.2 1IEEE 754008.21
-
8.21 IEEE 754ab 0 0000 0001= -126000 0000 0000 0000 0000 0000=1.011.02126 1100 0000 0000 0000 0000 00000.12 126 = 2 127000 0000 0000 0000 0000 00012 126 = 2 1492 1074 ab
-
8.7 boothsRTL BCD
-
ROMWallace