Digital Aritmetik Unsigned Integers Signed Integers" Slides! Per Lindgren! EISLAB! Per.Lindgren@ltu.se! Original Slides! Ingo Sander! KTH/ICT/ES! ingo@kth.se!
Talrepresentationer" Ett tal kan representeras binärt på många sätt.! De vanligaste taltyperna som skall representeras är:! Heltal, positiva heltal (eng. integers)! ett-komplementet, två-komplementet, sign-magnitude! Decimala tal med fix tal-område! Fix-tal (eng. fixed-point)! Decimala tal i olika talområden! Flyt-tal (eng. floating-point)! 2!
Positiva Heltal" Positiva Heltal: 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = 1*2 6 + 1*2 5 + 1*2 3 + 1*2 2 + 1*2 0 = 109 3!
Addition" Carry-out = 0 resultatet OK 5 + 2 7 C 4 =0 0101 + 0010 0111 4!
Addition" Carry-out = 1 resultatet fel 7 0111 +14 + 1110 111 21 10101 c 4 =1 c 3 =1 5!
Heltal" Positiva Heltal: 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = 1*2 6 + 1*2 5 + 1*2 3 + 1*2 2 + 1*2 0 = 109 Men hur representerar vi negativa tal??? 6!
Två-komplementet" X x X R 0 00 000 0 1 00 001 1 2 n-1-01 111 2 n-1-1 1-2 n-1 10 000 2 n-1-2 11 110 2 n -2-1 11 111 2 n -1 Talområde: -(2 n-1 )..+(2 n-1-1) Decimal komplementering (2 siffror): - 49 10 2-49=51 Binär komplementering (5 siffor): -15 2 5-15=17 Vid två-komplementering inverteras ingående digits, och talet 1 läggs till, dvs (d 1 d 0 ) i basen b representeras som (b-1-d 1 )(b-1-d 0 )+1. Två-komplementet har den egenskapen att addition och subtraktion enkelt kan utföras. Tecken-bit Fördel: En nolla. Nackdel: Risk för overflow 7!
Talkonvertering Positiva till Negativa tal" 01111 +15 10000 invertera 10001 Lägg till ett 10001-15 8!
Talkonvertering Negativa till Positiva tal" 10001-15 01110 Invertera 01111 Lägg till ett 01111 +15
Talkonvertering Positiva till Negativa tal" 01001 +9 10!
Talkonvertering Negativa till Positiva tal" 10111-9
Heltal (2-komplement)" Representation med 2-komplement! B=b N-1 b N-2...b 1 b 0 där b i {0,1} b N-1 b N-2... b 1 b 0 Tecken-Bit (Sign Bit) Decimalvärde D(B)=-b N-1 2 N-1 +b N-2 2 N-2 +...+b 1 2 1 +b 0 2 0 12!
Heltal: (2-komplement)" 000 111 0 001-1 1 110-2 2 010-3 3 101-4 011 100 13!
Sign-extension" Heltal: -2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = -1*2 6 + 1*2 5 +1*2 3 + 1*2 2 + 1*2 0 = - 45-2 n-1 2 n-2 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 Teckenbiten har negativ vikt 1 1 1 1 1 0 1 1 0 1 Kopiera teckenbiten för att utvidga talområdet genom att använda flera bitar! 14!
Addition av två heltal" X x X R 0 00 000 0 1 00 001 1 2 n-1-01 111 2 n-1-1 1-2 n-1 10 000 2 n-1-2 11 110 2 n -2-1 11 111 2 n -1 X R =x mod 2 n Y R =y mod 2 n ADD(x,y)= x+y mod 2 n = X R +Y R mod 2 n 1111111 01111111 + 01111111 11111110 Overflow uppkommer om additionen hamnar utanför talområdet 15!
Addition" (+5) + (+2) (+7) 0101 + 0010 0111 16!
Addition" (-5) + (+2) (-3) 1011 + 0010 1101 17!
Addition" (+5) + (-2) (+3) 0101 + 1110 1 0011 Carry-biten kan ignoreras! 18!
Addition" (-5) + (-2) (-7) 1011 + 1110 1 1001 Extra carry-biten kan ignoreras! 19!
Overflow" (+5) + (+5) (-6) 0101 + 0101 1 1 1010 Overflow teckenbiten stämmer inte överens med ingående tal... 20!
Overflow (2)" (-5) + (-5) (+6) 1011 + 1011 011 1 0110 Overflow teckenbiten stämmer inte överens med ingående tal... 21!
För 4-bit-tal! Logik för att detektera overflow" Overflow om a 3 = b 3 och b 3 r 3!! Overflow = a 3 b 3 r 3 + a 3 b 3 r 3 Overflow = a n 1 b n 1 r n 1 + a n 1 b n 1 r n 1 22!
Subtraktion" Hur gör man subtraktionen på ett enkelt sätt? A - B = A +(-B)= A +(2 s complement B) = A +(NOT B) + 1 23!
Subtraktion" (+5) - (+2) (+3) 0101-0010???? 0101 + 1101 1 0011 I stället för subtraktion, gör en addition med 2-komplementet! 24!
Subtraktion" (-5) - (+2) (-7) 1011-0010???? 1011 + 1110 1001 25!
Subtraktion" (+5) - (-2) (+7) 0101-1110???? 0101 + 0010 0111 26!
Subtraktion" (-5) - (-2) (-3) 1011-1110???? 1011 + 0010 1101 27!
Tvåkomplementsrepresentation, en sammanfattning" Område: -2 N-1 upp till 2 N-1 1! Negation: Invertera varje bit (det boolska komplementet), addera sedan 1.! Expansion av bitlängd: Lägg till ytterligare bit positioner till vänster om teckenbiten, med samma värde som teckenbiten.! Overflow-regeln: Om två nummer med samma tecken adderas, så har det blivit overflow om resultatet har ett motsatt tecken.! Subtraktionsregeln: För att subtrahera B från A, ta två-komplementet av B och addera till A." 28!
(Alternativt sätt att detektera overflow)" (+7) + (+2) (+9) c 4 =0 c 3 =1 0111 + 0010 011 1001 Overflow eftersom c 4 och c 3 är olika! 29!
(Alternativt sätt att detektera overflow)" (-7) + (+2) (-5) c 4 =0 c 3 =0 1001 + 0010 000 1011 Inte overflow eftersom c 4 och c 3 är lika! 30!
(Alternativt sätt att detektera overflow)" (+7) 0111 + (-2) + 1110 111 (+5) 10101 c 4 =1 c 3 =1 Inte overflow eftersom c 4 och c 3 är lika! 31!
(Alternativt sätt att detektera overflow)" (-7) 1001 + (-2) + 1110 100 (-9) 10011 c 4 =1 c 3 =0 Overflow eftersom c 4 och c 3 är olika! 32!
För 4-bit-tal! (Logik för att detektera overflow)" Overflow om c 3 och c 4 är olika! Annars är det inte overflow!! Overflow = c 3 c 4 + c 3 c 4 = c 3 c 4 För n-bit-tal! Overflow = c n 1 c n 33!
Aritmetisk Hårdvara" 34!
Halv-adderaren (eng. Half adder)" c 0a + 0b cs a b c s 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 a b 0 1 0 1 0 0 0 1 a b 0 1 0 1 0 1 1 0 c = a b s =a b a b HA s c a b s c 35!
Hel-adderaren (eng. Full adder)" c ut c in 0 a + 0 b c ut s a b c in c ut s 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 c in c in ab 00 01 11 10 0 0 0 1 0 1 0 1 1 1 c ut = a b + c in a + c in b ab 00 01 11 10 0 0 1 0 1 a b c in FA s c ut 1 1 0 1 0 s = a b c in 36!
Hel-adderare Komposition med halv-adderare" Vi kan även konstruera en hel-adderare mha två halv-adderare och en ELLERgrind! a b c in FA s c ut a b c in HA HA s cut Komposition tillåter att konstruera nya system med hjälp av kända byggblock! 37!
Hel-adderaren (eng. Full adder)" c ut c in 0 a + 0 b c ut s a b c in c ut s 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 c in c in ab 00 01 11 10 0 0 0 1 0 1 0 1 1 1 c ut = a b + c in a + c in b ab 00 01 11 10 a b c in FA s c ut a b c in HA (s) (c ut ) HA s cut 0 1 0 1 0 1 1 0 1 0 s = a b c in 38!
Mer komposition" Komposition kan även användas för att konstruera n-bit-adderare! Man behöver n hel-adderare för att konstruera en n-bit-adderare! 39!
Ripple-Carry Adderaren (RCA) " a n-1 b n-1 a 1 b 1 a 0 b 0 c utn-1 FA c inn-1 FA c in1 c ut0 FA c in0 s n-1 s 1 s 0 a n-1 b n-1... a 0 b 0 c utn-1 n-bit ADD c in0 T D =n*t FA (c in -> c out ) A=n*A FA s n-1... s 0 40!
Subtraktion" Subtraktion kan göras genom addition med två komplementet! Invertera alla bitar av den andra operanden! Addera 1! 41!
Add/sub-enheten" y n 1 y 1 y 0 Add/Sub = 0: Addition Add/Sub = 1: Subtraktion Add Sub control x n 1 x 1 x 0 c n n -bit adder c 0 s n 1 s 1 s 0 42!
EXEMPEL" y n 1 y 1 y 0 Add/Sub = 0: Addition Add/Sub = 1: Subtraktion Add Sub control x n 1 x 1 x 0 c n n -bit adder c 0 s n 1 s 1 s 0 x = 1010 y = 0110 Add = 0 (addition) 43!
EXEMPEL" y n 1 y 1 y 0 Add/Sub = 0: Addition Add/Sub = 1: Subtraktion Add Sub control x n 1 x 1 x 0 c n n -bit adder c 0 s n 1 s 1 s 0 x = 1010 y = 0110 Add = 1 (subraktion) 44!
Arithmetic Logic Unit (ALU)" Funktionsväljare f 0 f 1 AU LU A/L MUX f 0 f 1 A/L x ALU y c in A/L f1 f0 Funktion 0 0 0 x+y 0 0 1 x-y 1 0 0 x and y 1 0 1 x or y 1 1 0 x xor y 1 1 1 x nor y 45!
EXEMPEL" Funktionsväljare f 0 f 1 AU LU A/L MUX f 0 f 1 A/L x ALU y c in x = 1001 y = 0110 A/L f1 f0 Funktion 0 0 0 x+y 0 0 1 x-y 1 0 0 x and y 1 0 1 x or y 1 1 0 x xor y 1 1 1 x nor y 46!
(Komparator)" Komparatorn implementeras som subtraktionskrets! 47!
A<B (unsigned)" A < B -> A B < 0 R = A B -> A + (-B)! Inspektera Carry-out, 1 -> A<B false e.g 7<2! (+7) 0111 + (-2) + 1110 111 (+5) 10101 c 4 =1 48!
A<B (unsigned)" A < B -> A B < 0 R = A + (-B)! Inspektera Carry-out, 0 -> A<B true e.g 2<7! (+2) 0010 + (-7) + 1001 0 (+5) 01011 C 4 =0 49!
A<B (signed)" A < B -> A B < 0 R = A + (-B)! Inspektera N, 1 -> A<B true e.g 2<7! (+2) 0010 + (-7) + 1001 0 (+5) 01011 N=1 50!
A<B (signed)" A < B -> A B < 0 R = A + (-B)! Inspektera N, 1 -> A<B true, men det stämmer inte (+7) 0111 e.g 7< -5! + (-(-5)) + 0101 0 (+5) 01100 N=1 51!
A<B (signed)" Vi måste även ta hänsyn till overflow! Dvs, A<B -> A-B<0, N xor V = 1! V=1 (A,B samma tecken R motsatt tecken) (+7) + (-(-5)) (+5) 0111 + 0101 0 01100 N=1 52!
A<B " Olika beteende om vi betraktar talen som signed eller unsigned! Unsigned, kolla carry-out! Signed, kolla V xor N! Därför två olika instruktioner i MIPS! SLTU (unsigned)! SLT (signed)! (se MIPS instruktionsuppsättning för fler varianter)! 53!
Sammanfattning" Addition och subtraktion av heltal! Två-komplementet! Subtraktion av ett tal implementeras som addition med dess två-komplement! ALU utför både! aritmetiska (ADD,SUB, SLT/SLTU etc.) och! logiska operationer (AND, OR, etc.)!! D0011E, Digitalteknik!