Digital Design IE1204 F6 Digital aritmetik II william@kth.se
IE1204 Digital Design F1 F3 F2 F4 Ö1 Booles algera, Grindar MOS-teknologi, minimering F5 F6 Ö2 Aritmetik Ö3 KK1 LAB1 Kominatoriska kretsar F7 F8 Ö4 F9 Ö5 Multiplexor KK2 LAB2 Låskretsar, vippor, FSM F10 F11 Ö6 KK3 LAB3 FSM, VHDL introduktion F12 Ö7 F13 Asynkron FSM Ö8 F14 tentamen Minnen Föreläsningar och övningar ygger på varandra! Ta alltid igen det Du missat! Läs på i förväg delta i undervisningen areta igenom materialet efteråt!
Detta har hänt i kursen Decimala, hexadecimala, oktala och inära talsystemen AND OR NOT EXOR EXNOR Sanningstaell, mintermer Maxtermer PS-form Booles algera SP-form demorgans lag Buelgrindar Fullständig logik NAND NOR CMOS grindar, standardkretsar Minimering med Karnaughdiagram 2, 3, 4, 5, 6 varialer Registeraritmetik tvåkomplementrepresentation av inära tal Additionskretsar
Talrepresentation Ett tal kan representeras inä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)
Heltal Positiva Heltal: -2 7 0 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 Negativa Heltal: -2 7 1 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = -1 2 7 +1 2 6 + 1 2 5 + 1 2 3 + 1 2 2 + 1 2 0 = -19
Multiplikation av två positiva heltal 0 0 1 0 * 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 + 0 0 1 0 0 0 1 0 1 1 0 2 *11 Skifta, addera multiplikanden eller 0 =22
Multiplikation med teckenit Teckeniten har negativ vikt! => Två-komplementera! 0 0 1 0 2 * 1 0 1 1-5 0 0 1 0 0 0 1 0 0 0 0 0 + 1 1 1 0 1 1 1 0 1 1 0-10
Teckeniten på det andra stället Teckenförläng! (Sign Extension, här till 7 itar) 1 0 1 1-5 * 0 0 1 0 2 0 0 0 0 1 1 1 0 1 1 0 0 0 0 + 0 0 0 0 1 1 1 0 1 1 0-10
Multiplikation av två negativa tal Teckenförläng! Teckeniten har negativ vikt! => Två-komplementera! 1 0 1 1-5 * 1 0 1 1-5 1 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 0 + 0 1 0 1 0 0 1 1 0 0 1 +25 Svar 7-itar med tecken Det här verkade komplicerat
Eller så gör vi det enkelt för oss Använd enart positiva tal i multiplikationen Konvertera till positiva tal Håll reda på resultatets tecken Två-komplementera till negativt tal om nödvändigt ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( + + + + + +
Enkel lösning, forts Sign A Sign A F correct A N-1 A N-2 A 0 Sign B 0 1 0 1 0 1 1 0 Sign B 0 0... 0 F correct =Sign A Sign B FA FA... FA Korrektionen sker genom att man invertera itarna och lägg till 1 2 s complement of Product, when correction is needed.
Multiplikation (två positiva tal) ( a 3a2a1a0 ) ( 32 10 ) = ( q7q6q5q4q3q2q1q0 ) AND AND FA, carry AND FA, carry AND FA, carry
Multiplikation (två positiva tal) ( a 3a2a1a0 ) ( 32 10 ) = ( q7q6q5q4q3q2q1q0 ) AND AND FA, carry AND FA, carry AND FA, carry
Multiplikation (två positiva tal) ( a 3a2a1a0 ) ( 32 10 ) = ( q7q6q5q4q3q2q1q0 ) AND AND FA, carry AND FA, carry AND FA, carry
Multiplikation (två positiva tal) ( a 3a2a1a0 ) ( 32 10 ) = ( q7q6q5q4q3q2q1q0 ) AND AND FA, carry AND FA, carry AND FA, carry
Multiplikation (två positiva tal) ( a 3a2a1a0 ) ( 32 10 ) = ( q7q6q5q4q3q2q1q0 ) AND AND FA, carry AND FA, carry AND FA, carry
( aaaa)( ) = ( qqqqqqqq) 3 2 1 0 3 2 1 0 7 6 5 4 3 2 1 0 Multiplikation (två positiva tal) Skiftning av multiplikatorn sker genom att den förs ett steg till vänster i nätet för varje nivå a 3 a 3 a 3 a 2 a 2 a 1 a2 a1 a0 a 1 a 0 a 0 0 1 2 a 3 a2 a1 a0 q7 q6 q5 q4 q3 q2 q1 q0 3 12 FA för 4 4 itar
( aaaa)( ) = ( qqqqqqqq) 3 2 1 0 3 2 1 0 7 6 5 4 3 2 1 0 Multiplikation (två positiva tal) T MUL ~(3*N-4)*T FA a 3 a 3 a 2 a 2 a 1 a 1 a 0 a 0 0 1 a 3 a2 a1 a0 2 a 3 a2 a1 a0 q7 q6 q5 q4 q3 q2 q1 q0 3 Carryfördröjs genom 8 steg!
Kan itarna adderas i någon annan ordning?
Ripple Carry-adderaren: a3 3 Snafråga C in3 a2 2 C in2 a1 1 C in1 a0 0 C in0 Vad händer om man förväxlar ledningarna a C in? Här har någon rört till det ordentligt med ledningarna! a 3 3 C in3 C out3 C out3 s 3 s 3 a2 2 C out 2 C out 2 C in2 C out1 a1 1 C in1 C out0 a0 0 a) Katastrof! ) Don t care! C in0 Diskutera fram svaret tillsammans med din änkgranne! s 2 s 2 C out1 s 1 s 1 C out0 s 0 s 0
Snafråga a 3 3 C in3 a2 2 C in2 a1 1 C in1 a0 0 C in0 C out3 s 3 C out 2 s 2 C out1 s 1 C out0 s 0 ) Don t care! Summaiten är lika med udda paritet av initarna. Carry out är lika med majoritetsvärdet av initarna. I ingendera fallen har itarnas inördes ordning någon som helst etydelse.
Kan itarna adderas i någon annan ordning? Så här får q 2 samma resultat men med en annan itordning! Carry förs nu direkt till andra raden!
( aaaa)( ) = ( qqqqqqqq) 3 2 1 0 3 2 1 0 7 6 5 4 3 2 1 0 En snaare lösning - Carry- Save Multiplier (BV: sida 311) Figure 5.45 Multiplier carry-save array.
( aaaa)( ) = ( qqqqqqqq) 3 2 1 0 3 2 1 0 7 6 5 4 3 2 1 0 Save Multiplier (BV: sida 311) T MUL ~(2*N-2)*T FA Minskar fördröjningen eftersom carry utgången kopplas direkt till nästa steg! En snaare lösning - Carry- Carryfördröjs nu genom 6 steg! Figure 5.45 Multiplier carry-save array.
( aaaa)( ) = ( qqqqqqqq) 3 2 1 0 3 2 1 0 7 6 5 4 3 2 1 0 En snaare lösning - Carry- Save Multiplier (BV: sida 311) Extra tips: sna Carrylook ahead adderare här! Figure 5.45 Multiplier carry-save array.
Multiplikation med två 0101*2 = 1010 (5*2=10) 1010*2 = 10100 (-6*2=-12) 01010101*2 = 010101010 (85*2=190) 10010101*2 = 100101010 (-107*2=-214) jmfr multiplikation med 10 i asen 10: 63*10 = 630, -63*10 = -630 etc.
Multiplikation med 2 n 0101*2 = 1010 (5*2=10) 0101*2 2 = 10100 (5*4=20) 0101*2 3 = 101000 (5*8=40) 0101*2 4 = 1010000 (5*16=80) jmfr multiplikation med 10 i asen 10: 6*10 = 60, 6*100 = 600, 6*1000 = 6000 etc.
Multiplikation med 2 n En multiplikation med 2 n kan göras med genom att skifta alla itar n steg till vänster och att fylla på med nollor 13 8 kan eräknas genom att skifta (01011) tre itar till höger Resultat: 01011000 motsvarar (104) 10 Oservera att man ehöver flera itar för att representera resultatet!
Barrel-shifter 0 1 2 3 B 0 B 1 Multiplexor A 0 A 1 A 2 A 3 MUX 0 0 0 0 0 0 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 B 0 B 1 Multiplikation med (2 0, 2 1, 2 2, 2 3 ) dvs 1, 2, 4, 8 ( S 6 S 5 S 4 S 3 S 2 S 1 S 0 ) = ( A 3 A 2 A A 1 0 ) 2 ( B B 1 0 )
Division mellan två positiva heltal (BV sid 693 fig 10.21 ) 0 1 0 1 1 0 1 0 1 1-1 0 0 0 1-0 0 0 1 1-1 0 1 11/2 = 5 Rest = 1 a = q + r
Lite mer detaljerat 0 1 0 1 1 0 0 1 0 1 1-0 0 1 0-1 0 0 0 1-0 0 0 1 1-1 0 1 11/2 = 5 Rest = 1 a = q + r
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 a: 0 1 0 1 1 r: : 1 0 q:
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 a: 0 1 0 1 1 r: : -1 0 q: 0
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 a: 0 1 0 1 1 r: : -1 0 q: 0 0
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 a: 0 1 0 1 1 r: : -1 0 q: 0 0 1
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 a: 0 0 0 1 1 r: : -1 0 q: 0 0 1 0
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 a: 0 0 0 1 1 r: : -1 0 q: 0 0 1 0 1
Lite mer detaljerat a = q + r 11 2 = 5 + 1 2 0 0 0 0 1 r: 1 q: 0 0 1 0 1
Dividend 1011 2 = 11 10 Divisor 10 2 = 2 10 0 1 sutract - restore sutract + keep Quotient 0101 2 = 5 10 sutract a = q + r 11 2 = 5 + 1 2 0 - restore sutract 1 Remainder 1
q 3 sign 0 0 FA 0 1 a3 0 1 0 1 0 0 1 a2 0 FA FA FA FA Sutraction! 1 FA a = 1 3 a2a1a q 1 3 0 1 1 0 q q q = 0 + r1 r 1 0 0 q 2 sign 1 0 1 0 0 1 a1 0 FA FA FA 1 q 1 sign 1 0 1 0 0 a 1 0 0 Sutract/Restore Divider q 0 sign FA FA FA 1 0 1 0 r 1 r 0 1
q 3 Not needed! 0 sign q 2 FA 0 0 1 a3 0 1 0 1 0 0 1 a2 0 sign FA FA 1 0 FA FA 1 1 0 FA a = 1 3 a2a1a 0 1 a1 0 q 1 3 0 1 1 0 q q q = 0 + r1 r 1 0 0 FA FA FA 1 q 1 sign 1 0 1 0 0 a 1 0 0 Sutract/Restore Divider q 0 sign FA FA FA 1 0 1 0 r 1 r 0 1
Using a multiplier and a ROM Q=A/B=A (1/B) Properties - Fast - VERY ig multiplicator! for division 8-itarstal A Bara heltalsdelen 11111111.00000000 B ROM 1/B MUL Q 8-itarstal Bara fraction 00000000.11111111 16 16 multiplikator Hur många Byte måste ROM innehålla om A och B är 8 itars tal?
Using a multiplier and a ROM for division a = 25 5 = 25 1 5 = 25,0 0,2 = 5,00 a 25 25 5 20 2 3 4 6 7 50 33 25 20 17 14 (0,50) (0,33) (0,25) (0,20) (0,17) (0,14) 1 The Pentium ug was aout wrong value in a lookup tale! 500
Division med negativa heltal Division med negativa tal är ganska knepigt. Ett sätt att utföra divisionen ändå Konvertera till positiva tal Håll reda på resultatets tecken Två-komplementera till negativt tal om nödvändigt ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( + + + + + +
Division med 2 0 1 01010/2 = 00101 (10/2 = 5) 10100/2 = 11010 (-12/2 = -6) jmfr division med 10 i asen 10: 630/10 = 63, -630/10 = -63 etc.
Logiskt och Aritmetisk shift höger Man skiljer mellan logisk och aritmetiskt shift Logisk shift höger shiftar ara till höger. Bitarna skall ej tolkas som ett tal. Man fyller ara på med 0:or. Aritmetisk shift höger ehandlar itarna som ett tal. Teckeniten ehålls vid shift. Man fyller på till vänster med teckeniten.
Division med 2 n 1010/2 = 101 (10/2=5) 10100/2 2 = 101 (20/4=5) 101000/2 3 = 101 (40/8=5) 1010000/2 4 = 101 (80/16=5) jmfr division med 10 i asen 10: 60/10 = 6, 600/100 = 6, 6000/1000 = 6 etc.
Division med 2 n En division med 2 n kan göras med genom att skifta alla itar n steg till höger och att fylla på med nollor Oservera att resultatet inte nödvändigtvis är korrekt, eftersom man egentligen ehöver itar efter kommatecknet (det är heltalsdivision). 17/4 motsvarar att skifta 010001 2-itar till höger Resultat: 000100 = (4) 10 Eftersom (0.25) 10 inte kan representeras är resultatet inte korrekt!
Barrel-shifter A 0 A 1 A 2 A 3 A 4 A 5 A 6 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 B 0 B 1 Division med (2 0, 2 1, 2 2, 2 3 ) dvs 1, 2, 4, 8 ( S S S S S S S ) = ( A 6 5 4 3 2 1 0 7 A 6 A 5 A 4 A 3 A 2 A A 1 0 ) / 2 ( B B 1 0 )
Fix-tal (Fixed-point numers) Två-komplementsrepresentation B= N-1. N-2... 1 0 where i {0,1} N-1 N-2... 1 0 Sign Bit Decimalt värde FiP(B)=- N-1 2 0 + N-2 2-1 +...+ 1 2 -(N-2) + 0 2 -(N-1) Detta format kallas också för Q N-1 -format eller fractional representation
Fixed-Point Q2-Representation 000 Se detta som ett pedagogiskt exempel: Tre-itars fixpunktstal 110 111-0.5-0.25 0 0.25 001 0.5 010 Ett talsystem med ara 8 tal är ju i praktiken oanvändart! -0.75 0.75 101-1 100 011
Fixed-Point Q2-Representation 000 0.11 0.10 0.01 0.00 1.11 1.10 1.01 1.00 0,75 0,5 0,25 0 0,25 0,5 0,75 1.0 111 0 001-0.25 0.25 110-0.5 0.5 010-0.75 0.75 101-1 011 100 1... 0... + 1
Maximalt kvantiseringsfel Q2-1 100-0.75 101-0.375 MQE: 0.125 0.6-0.5 110-0.25 111 0 000 0.25 001 0.5 010 QE: 0.1 0.75 011 Maximum Quantization Error: Since not all numers can e represented, quantization errors occur.
Multiplikation i Q-formatet Multiplikation orsakar inte overflow i Q-formatet, men kan resultera i förlust av precision (1.10) 2 (0.11) 2 = (1.1010) 2 (Q4-format) = (1.10) 2 (Q2-format) Generellt: 2 1 0 Q2 2 1 0 Q2 Utökade teckenitar 5 4 3 2 1 0 ehålles Q4 kan vara smart att avrunda
Q-formatet Fixpunktsmultiplikation och fixpunktsdivision utnyttjar samma hårdvara som heltalsmultiplikation och heltalsdivision. Användning: Digitala filter tex. ljudkortet
Flyt-tal (eng. Floating-Point Numers) Ett flyt-tal representeras med en tecken-it, exponent-itar och en mantissa ( fraktionsitar) S Exponent Mantissa Sign-Bit exp m Värdet eräknas som FlP(B) = (-1) s * (1.m) * 2 ±exp Ofta är exp iaserad (har en offset), vilket då ger FlP(B) = (-1) s * (1.m) * 2 exp-(ias)
IEEE-754 Flyttals-standarden IEEE-754 definierar ett 32- it flyttal som S 2 7 exp 2 0 2-1 m 2-23 Exponent Mantissa 31 30 exp 23 22 m 0 Värdet eräknas för en 8-itars exponent enligt nedan FlP(B) = (-1) s * (1.m) * 2 exp-(127) Specialla it pattern har reserverats för att representera negativ och positiv nolla
Floating-Point Numers (IEEE) Exponent Values 1 to 254: normalized non-zero floating-point numers; iased exponent (-126...+127) Exponent of zero and fraction of zero: positive or negative zero Exponent of ones and fraction of zero: positive or negative infinity Exponent of zero and fraction of non-zero: Denormalized numer (true exponent is 126), represent numers from 0 to 2-126 FlP(B) = (-1) s * (0.m) * 2-126 Exponent of ones with a non-zero fraction: NotANumer (Exception Condition) There is also a standard for a 64-it numer
IEEE 32 it float Tecken 1 it, exponent 8 itar, signifikand (mantissa) 23 itar. Genom att exponenteten skrivs exess 127 kan flyttal storlekssorteras med vanlig heltalsaritmetik! Behandlas igen i Datortekniken
Decimalt additionsexempel a = 123456.7 = 101.7654 normalized = 1.234567 10 = 1.017654 10 5 2 aligned = 0.001017654 10 Det tal som är minst (här ) skiftas (align) så åda talen får samma exponent. c = a + + 1.234567 10 0.001017654 10 1.235584654 10 Svaret kan ehöva normaliseras (skiftas). 5 5 5 Flyttalsoperationer är mycket krävande, om man inte har specialiserad hårdvara - addition kan vara mer krävande än multiplikation! 5
Addition med flyttal Givet två flyttal: c = = a + ( a ( + ( + ( a a = = a 2 2 frac frac ( a ( 2 2 a a exp exp Summan av dessa tal är: frac frac frac frac exp exp exp exp ) ) ))*2 ))*2 a exp exp,, Det tal som är minst skiftas if if a exp exp a exp exp
Sutraktion med flyttal Givet två flyttal: a = = frac frac 2 2 Differensen mellan dessa tal är: c = a = ( a ( frac frac ( ( a frac frac a 2 2 ( a ( exp exp a a exp exp exp exp ) ) ))*2 ))*2 a exp exp,, Det tal som är minst skiftas if if a exp exp a exp exp
Decimalt multiplikationsexempel c a c c = a = 4,734612 10 = 4,734612 5,417242 10 = 2,564854 10 3 9 = 5,417242 10 3+ 5 normalisera 5 Resultatet har fler siffror än vad som ryms avrunda. = 25,648538980104 10 8 Multiplikation inneär att man gör en addition av exponenterna, och en multiplikation med fraktionsdelarna. Svaret måste sedan normaliseras (skiftas).
Multiplikation med flyttal Givet två flyttal: a = = a a* frac frac 2 2 Produkten av dessa tal är: c = = a exp exp ( * 2 ) a + a frac frac exp Enklare! exp
Givet två flyttal: Division med flyttal a = frac frac 2 2 Kvoten mellan dessa tal är: c = = = a a / a exp exp ( / 2 ) a a frac frac exp exp
Uppstädning efter flyttalsoperationer... När en flyttals-operation är klar måste den normaliseras Mantissans skiftas tills dess första it är 1 För varje skift-steg så räknas exponenten upp eller ned med ett. Mantissans itar till höger om den första ettan sparas FlP(B) = (-1) s * (1.m) * 2 exp-(127) Om exponenten är noll är mantissans första it 0 FlP(B) = (-1) s * (0.m) * 2 -(126)
Flyttalsenhet Det krävs mycket kod och eräkningstid för att utföra flyttalsoperationer med en dator som saknar hårdvarustöd för detta. PC-datorerna har haft inyggda flyttalsenheter från och med 486 (1989).
Dyraste mjukvaruuggen? ESA rocket crashes at launch - 1996 doule (64-itars flyttal) Översättningen lev fel rymdes inte! signed short int (16-itars 2-komplementtal) Användes i systemet för horisontel ias Någon hade sovit under föreläsningen aritmetik2!
Fixed-Point vs. Floating-Point Fixed-Point operationer fungerar pss som heltals-operations och är snaare Fixed-point värden ehöver skalas, vilket ofta leder till förlust av precision Kostnaden för att ygga hårdvara är signifikant större för flyttalsprocessorer/räknare
Sammanfattning Multiplikation och division av heltal Konvertera negativa tal till sitt positiva dito. Utför multiplikationen eller divisionen Håll reda på vilket tecken resultatet skall ha Konvertera positivt resultat till sitt negativa dito om resultatet skall vara negativt Multiplikation med potenser av 2 (mul med 2 k) Implementeras som ett skift till vänster med k steg Division med potenser av 2 (div med 2 k) Implementeras som ett (aritmetiskt) skift till höger med k steg. Teckeniten kopieras till vänster.
Addition vid La1 74283
Addition vid La1 C OUT 74283 B4 A4 B3 A3 B2 A2 B1 A1 C IN S4 S3 S2 S1
Addition vid La1 74283
Simulera addition
Sutraktion vid La1 74283 Inverteringen sker med en kontakt i stället för med XORgrindar! Rita klart
Multiplikation med konstant 74283? Antag att vi ehöver multiplicera ett tal x med 3. Det kan man göra som 2 x + 1 x = 3 x. Multiplikation med den jämna 2-potensen 2, sker genom att man "skiftar" anslutningarna för talets initar ett steg åt vänster. Eller som 2 (x + 0,5 x) = 3 x Smartare!