Digital Design IE1204 F5 Digital aritmetik I william@kth.se
IE1204 Digital Design F1 F3 F2 F4 Ö1 Booles algebra, Grindar MOS-teknologi, minimering F5 F6 Ö2 Aritmetik Ö3 KK1 LAB1 Kombinatoriska 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 bygger på varandra! Ta alltid igen det Du missat! Läs på i förväg delta i undervisningen arbeta igenom materialet efteråt!
Detta har hänt i kursen Talsystem: Decimala, hexadecimala, oktala, binära (175,5) ( AE.8) (256.4) (10101110.1) 10 16 8 2 AND OR NOT EXOR EXNOR Sanningstabell, mintermer Maxtermer PS-form SP-form demorgans lag Bubbelgrindar Fullständig logik NAND NOR CMOS grindar, standardkretsar Minimering med Karnaughdiagrammet 2, 3, 4, 5, 6 variabler
Talrepresentation 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)
Heltal Positiva Heltal: 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = 12 6 + 12 5 + 12 3 + 12 2 + 12 0 = 109
Positiva heltal Dator-register är ringar. Figuren visar ett fyrabitarsregister. Om man adderar 1 till det högsta talet 15 hamnar man på 0. ( 15+1=0 )
Carry flagga Om 15+1 0 Är det bra att bli varnad! Carry biten brukar sparas för sig som en Carry flagga som visar att svaret av additionen blev felaktigt. Kanske bättre att svara med 15+1=15? ( Saturation ).
Utöka registret Carry Utökar registret (9) + (9) (2) 1 1 1001 + 1001 0010 10010 (18) Om resultatet av en addition blir för stort för registret så får man en Carry bit. Den kan användas till att utöka registret, och ger då rätt svar som 5 bitstal.
Seriell addition Carry Addera Hexadecimalt direkt! FEC 1DB 11C7 F E C 1 D B C OUT C IN
Seriell addition Carry FEC 1DB 11C7 1 F E C 1 D B 7 C B 1 C OUT C IN 0 7
Seriell addition Carry FEC 1DB 11C7 1 1 F E C 1 D C B 7 E D 1 C OUT C IN 1 C
Seriell addition Carry FEC 1DB 11C7 1 1 1 F E C 1 1 1 D C B 7 F 1 1 C OUT C IN 1 Även en liten processor kan räkna med stora tal! 1
Positiva Heltal: Heltal med tecken 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = 12 6 + 12 5 + 12 3 + 12 2 + 12 0 = 109 Men hur representerar vi negativa tal???
( Sign-magnitude ) Heltal: S 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = - (12 5 + 12 3 + 12 2 + 12 0 ) = - 45 Magnituden (beloppet) av talet Tecken-bit Nackdel: två nollor (+/-) 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
( 1-komplement ) De negativa talen är komplementet av de positiva talen. Bit för i det positiva talet bit inverteras för att ge den negativa motsvarigheten. 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) Nackdelar: Två nollor (+/-) 0. Vid vissa additioner krävs justering av resultatet.
2-komplement heltal Representation med 2-komplement B=b N-1 b N-2...b 1 b 0 där b i {0,1} Tecken-Bit (Sign Bit) Decimalvärde: b N-1 b N-2... b 1 b 0 D(B)= - b N-1 2 N-1 +b N-2 2 N-2 +...+b 1 2 1 +b 0 2 0 Detta är den vanligaste representationen av tal med tecken.
2-komplement heltal Omvandlingsexempel: B=b N-1 b N-2...b 1 b 0 där b i {0,1} 1 1 1 1 1 1 1 1 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 = -128 + 127 = -1 Det är alltid det största talet som motsvarar -1.
Talkonvertering positivt tal till negativt Tvåkomplementmetoden 01111 +15 10000 invertera 10001 lägg till ett 10001-15
Talkonvertering negativt tal till positivt Tvåkomplementmetoden 10001-15 01110 invertera 01111 lägg till ett 01111 +15 Samma procedur i bägge riktningarna!
2-komplementet snabbt För att lätt ta fram 2-komplementet av ett binärtal kan man använda följande förfarande: Börja från högra sidan Kopiera alla bitar som är 0 och fram till och med den första 1:an Invertera Invertera därefter alla andra bitar Kopiera Exempel: 2-komplement från 0110 är 1010
Sign-extension Vid beräkningar i datorer behöver man ofta öka antalet siffror (bitar) inför någon beräkning hur gör man det med negativa tal? Heltal: -2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 = -12 6 + 12 5 +12 3 + 12 2 + 12 0 = - 45 Teckenbiten har negativ vikt -2 n-1 2 n-2 1 1 2 7 1 2 6 2 5 2 4 2 3 2 2 2 1 2 0 1 1 0 1 1 0 1 Om man vill utvidga talområdet genom att använda flera bitar kopierar man teckenbiten till de nya bitarna!
En Snabbfråga Talet +5 representeras med 0101 om vi använder 4 bitar. Vilket tal motsvarar -5 om vi använder 8 bitars två-komplement representation? a: 1111 1011 b: 1111 1010 c: 1000 0101
2-komplement heltal Dator-register är ringar. Figuren visar ett fyrabitarsregister. När man räknar med tal med tecken är de negativa talen den vänstra halvan av ringen. Negativa tal Positiva tal
Addition (BV: sida 264) (+5) + (+2) (+7) 0101 + 0010 0111
Addition (BV: sida 264) Används ej (+5) + (-2) (+3) 1 1 0101 + 1110 0011 Teckengräns Carry-biten används ej!
Addition (BV: sida 264) Används ej (-5) + (-2) (-7) 1 11 1011 + 1110 1001 Teckengräns Carry-biten används ej!
Overflow! Overflow teckenbiten stämmer inte överens med ingående tal... (+5) + (+5) (-6) 1 1 0101 + 0101 1010 Teckengräns
Overflow 2 Används ej Overflow teckenbiten stämmer inte överens med ingående tal... (-5) + (-5) (+6) 1 11 1011 + 1011 0110 Teckengräns Carry-biten används ej!
Subtraktion (BV: sida 265) Låna ett (+5) - (+2) (+3) 10 0101-0010???? Hur gör man subtraktionen på ett enkelt sätt?
Subtraktion (BV: sida 265) Används ej (+5) - (+2) 0101-0010 1 1 0101 + 1110 (+3)???? 0011 Gör en addition med 2-komplementet i stället! Carry-biten används ej!
Subtraktion (BV: sida 265) Används ej (-5) - (+2) 1011-0010 111 1011 + 1110 (-7)???? 1001 Teckengräns Carry-biten används ej!
Subtraktion (BV: sida 265) (+5) - (-2) (+7) 0101-1110???? 0101 + 0010 0111 Teckengräns
Subtraktion (BV: sida 265) (-5) - (-2) (-3) 1011-1110???? 1 1011 + 0010 1101 Teckengräns
2-komplement sammanfattning Område: -2 N-1 upp till 2 N-1-1 Negation: Invertera varje bit (det boolska komplementet), addera sedan 1. Expansion av bit-längd: Lägg till ytterligare bit positioner till vänster om teckenbiten, med samma värde som teckenbiten. Overflow-regeln: Om två tal med samma tecken adderas, så har det blivit overflow om resultatet har ett motsatt tecken. Subtraherings-regeln: För att subtrahera B från A, ta tvåkomplementet av B och addera till A.
Hur kan Carry biten användas vid 2-komplementtal? Vid teckenutvidgning genererar efterföljande Carry den utvidgade summans teckenbitar. Samma! (+7) + (-2) (+5) 1 1 1 0111 + 1110 0101 teckenbit 1 1 1 1 0 0111 + 1 1110 0 0101 1 1 1 1 1 0 0 0111 + 1 1 1110 0 0 utökade teckenbitar 0101 teckenbit
Alternativt sätt att detektera overflow (BV: sida 271) Vid overflow kan summan inte teckenutvidgas med hjälp av Carry! (+7) + (+2) (-7) Inte samma! c 4 =0 c 3 =1 0 1 1 0111 + 0010 1001 Overflow eftersom c 4 och c 3 är olika!
Alternativt sätt att detektera overflow (BV: sida 271) c 4 =0 c 3 =0 (-7) + (+2) (-5) 0 0 1001 + 0010 1011 Inte Overflow eftersom c 4 och c 3 är lika!
Alternativt sätt att detektera overflow (BV: sida 271) c 4 =1 c 3 =1 (+7) + (-2) (+5) 1 1 1 0111 + 1110 0101 Inte Overflow eftersom c 4 och c 3 är lika!
Alternativt sätt att detektera overflow (BV: sida 271) c 4 =1 c 3 =0 (-7) + (-2) (+7) 1 0 1001 + 1110 0111 Overflow eftersom c 4 och c 3 är olika!
Logik för att detektera overflow För 4-bit-tal Overflow om c 3 och c 4 är olika Annars är det inte overflow XOR testar olikhet Overflow = c 3 c 4 c 3 c 4 c 3 c 4 För n-bit-tal Overflow = c n1 c n Overflow biten kan användas som overflow flagga
När är overflow ett problem? För en 32-bitars dator är talområdet 2147483648 stort, då kan inte overflow vara något stort problem! Vem ansvarar? Du som programmerare ser till att använda variabeltyper som minst rymmer så stora tal som används av programmet. Annorlunda är det med digital hårdvara som utför beräkningar på signaler i realtid här använder man ogärna fler bitar än vad som verkligen är nödvändigt. Då måste man se upp med overflow! Radarsignaler behöver bearbetas i realtid
Mättning (Saturation) Overflow. En positiv summa har blivit negativ, byt till det största möjliga positiva värdet. s3 s2 s1 s0 C 4 0 C 1 3 00 10 11 sum will pass 01 sum 0111 0 1 1 1
Mättning (Saturation) Underflow. En negativ summa har blivit positiv, byt till det största möjliga negativa värdet. s3 s2 s1 s0 C 4 1 C 0 3 00 01 11 sum will pass 10 sum 1000 1 0 0 0
1939 heladderare med kontaktnät Konrad Zuse Dual rail carry full adder Demo
1939 heladderare med kontaktnät Demo
Hårdvara för aritmetik Nu när Hastighet/Komplexitet har betydelse!
Halv-adderaren (Half adder) a b HA s c 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 0 0 + 0 0 0 + 1 0 1 + 0 1 1 + 1 c = ab a b s = a b s c 0 1 1 0
Hel-adderaren ( Full adder ) a b c in FA s cut 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 a b c in s c ut c in c in 0 1 ab 00 01 11 10 0 1 0 1 1 0 1 0 s = a b c in 00 01 11 10 0 0 0 1 0 1 0 1 1 1 c ut = a b + c in a + c in b
Summafunktionen? c in 00 01 11 10 0 1 0 1 1 0 0 1 1 0 s = a b c in
Summa = Udda paritet Heladderarens summafunktion är den udda -paritetsfunktionen. Detta är XOR-funktionens naturliga utökning för fler variabler än två. Udda paritet är när antalet 1:or på ingångarna är ett udda tal. b 0 a XOR 0 1 0 1 Udda paritet a b c ab Udda paritet 00 01 11 10 1 1 0 a b c Udda paritet 0 1 0 1 1 0 0 1 1 0
( XOR odd parity ) b a b a b a b a c b a c b a c b a c ab ab c ab ab c cab cab cab cab ) ( ) ( ) ( ) ( ) ( XOR-2 XOR-3
) ( ) ( a b dc ba ba c d ) ( ) ( a b dc ba ba c d ) ( ) ( a b dc ba ba dc ) ( ) ( a b dc ba ba c d ( XOR odd parity ) a b c d a b c d ) ( ) ( XOR-4 ) )( ( ) )( ( ) )( ( ) )( ( ) ( ) ( ) ( ) ( a b c d a b c d a b dc dc a b dc dc a b dc a b dc a b dc a b dc
Carryfunktionen? 00 01 11 10 0 1 0 0 0 1 1 0 1 1 Majoritetsfunktionen. Utgången antar det värde 1/0 som flest av ingångarna har. M
Hel-adderaren med två ½ -adderare Vi kan även konstruera en hel-adderare mha två halv-adderare och en OR-grind a b c in FA s cut a b c in HA HA s cut Dekomposition innebär att man ser kretsen som sammansatt av byggblock. Med hjälp av sådana kända byggblock kan man sedan bygga helt nya system Komposition.
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 Hel-adderaren ½+ ½ = 1 c in a b c in a b HA Man kan använda (ab) till både s och c ut! HA s cut s c ut c in c in ab ab 00 01 11 10 0 0 0 1 0 1 0 1 1 1 (a b)c in c ut = (a b)c in + ab ab 00 01 11 10 0 0 1 0 1 1 1 0 1 0 s = a b c in
Populär tatuering? Tatueringar är för evigt! Men, tyvärr är detta inte den bästa adderarkretsen, inte om man vill ha snabba datorer. Spännande fortsättning om adderarkretsar följer
( Paritetsfunktionen trevägs ljuskontroll ) c in 0 1 00 01 11 10 0 1 0 1 1 0 1 0 Udda paritet. s = a b c in
Trevägs ljuskontroll - revisited Brown/Vranesic: 2.8.1 Antag att vi behöver kunna tända/släcka vardagsrummet från tre olika ställen. Lösningen är paritetsfunktionen. Paritetsfunktionen x 3 x 2 f x 1 x 2 x 3 Udda paritet f x 1
XOR eller NAND? x 1 x 2 x 3 Udda paritet f Den tidigare lösningen baserades på NAND-grindar. XOR-grindar blir mycket effektivare än NAND grindar! x 1 x 2 x 3 f x x 2 x 3 1 00 01 11 10 f 0 1 0 1 1 0 0 1 1 0
Enklare med XOR-grindar Med XOR-grindar: x 1 x 2 x 3 f 7486 ( Med NAND-grindar: )
Enklare med XOR-grindar x 1 x 2 x 3 f
( Paritetscheck ) Med paritetsfunktioner kan man kontrollera om data blivit stört eller ej. 0 P U 1 0 1 0 Data - orginal Störning! Data som överförs har alltid jämn paritet! LARM! En bit ändrad! Data har störts! 1 P U? 0 1 0 1 0 0 1 1 1 0 1 1 1 0 Paritetsbit läggs till Paritetscheck kontrollerar om udda antal 1:or Data ev fel
Mer komposition Komposition kan även användas för att konstruera n-bit-adderare F6aritmetik2.pdf Man behöver n hel-adderare för att konstruera en n-bit-adderare ( eller 2n halvadderare ) Inte ovanligt med 128-bits adderare!
(Vem behöver en 128 bit adderare?) 2 128 = 34028236692093846346337460743177 Kronor? VLIW Very Long Instruction Word. Kompilatorn parar ihop lämpliga instruktioner och packar ihop dem för att exekveras samtidigt. Matteläxa: a) addera 12+74 b) addera 27+39 Varför inte göra hela matteläxan, uppgifterna a och b, på en och samma gång? Den här tekniken används i Intel Svar: a) 86 och b) 66 Itanium ( EPIC, Explicit Parallel Instruction Code ).
Ripple-Carry Adderare (RCA) a 1 b 1 a 0 b 0 c ut1 FA c in1 c ut0 FA c in0 s 1 s 0 + c ut1 c ut0 b 1 a 1 s 1 c in0 b 0 a 0 s 0
Ripple-Carry Adderare (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 A FA area för en Fulladder t FA fördröjning genom en Fulladder c utn-1 n-bit ADD s n-1... s 0 c in0 Tidsfördröjning från c in0 till c outn-1 blir hela nt FA Totala arean blir na FA
Ripple-Carry Adderare (RCA) a0 b0 c in0 s0 Critical path a1 b1 s1
Ripple effect = efterdyningar Carry måste rippla igenom hela adderaren!
Heladderarens & AND-OR Carry-funktion A AND-OR = 36+18= 26 MOS T AND-OR = 3T NAND & NAND-NAND & >1 & & & A NAND-NAND =34+16= =18 MOS T NAND-NAND = 2T NAND & Viktig fördröjning eftersom Carry är längs the critical path
XOR med NAND & & & & a b a b Area: A XOR =16 MOS Delay: T XOR =3T NAND b a ab ab b a b b a a b a b b a a b a b b a a ) ( ) ( ) ( ) ( ) ( ) (
XOR (3) med NAND S Area: A XOR =32 MOS Delay: T XOR =6T NAND Mindre viktig fördröjning eftersom S inte är längs the critical path
Kan vi konstruera en snabbare adderare? Fördröjningen i en rippleadderare växer proportionellt med antalet bitar För 32 bitar kan fördröjningen blir mycket stor (65 gate delays)
generate- och propagate- funktionerna Carry-kedjan kan beskrivas med två funktioner: Generate g i (carry-out c i+1 = 1 ifall g i = 1) g i x i y i Propagate p i (carry-out c i+1 = 1 ifall c i = 1 och x i = 1 eller y i = 1 ) c i x i y i 0 1 c i1 x 00 01 11 10 0 0 0 1 i y i x i y i c i 1 0 1 1 c ( x i i x i c y i ) i y i p i x i y i p x y i Fungerar också! i i c i1 g i p i c i c i x i y i 00 01 11 10 0 0 0 1 0 1 0 1 1 1 c x y c ( x y i1 i i i i i )
Carry-look-ahead funktion Carry-bit c 0 Carry-bit c 1 c 1 g 0 p 0 c 0 c 2 g 1 p 1 c 1 g 1 p 1 (g 0 p 0 c 0 ) Propagate funktionen från föregående bitar kan snabbas upp genom att genereras parallellt g i x i y i p i x i y i g 1 p 1 g 0 p 1 p 0 c 0 Bara två logiknivåer behövs
Carry-kedjan i ripple-adderaren #1 ½ + ½ OR eller XOR kan användas till p funktionen! p 0 c 0 g 0 p 1 g 1 #3 #2 #4 c 2 #5 p 2 #6 c1 g 2 6 grindnivåer c 3
Snabbare implementering av Carry-kedjan (med g och p) p 0 #1 #2 c 0 g 0 p 1 #2 c 1 g 1 #1 c 2 c 1 = g 0 +p 0 c 0 c 2 = g 1 +p 1 g 0 +p 1 p 0 c 0 Två-nivåers nät
(n = 8) med två logiknivåer c 1 =g 0 +p 0 c 0 c 2 =g 1 +p 1 g 0 +p 1 p 0 c 0.. Snabbt, men otympligt med så här många ingångar! c 8 =g 7 +p 7 g 6 +p 7 p 6 g 5 +p 7 p 6 p 5 g 4 +p 7 p 6 p 5 p 4 g 3 + + p 7 p 6 p 5 p 4 p 3 g 2 +p 7 p 6 p 5 p 4 p 3 p 2 g 1 + + p 7 p 6 p 5 p 4 p 3 p 2 p 1 g 0 + p 7 p 6 p 5 p 4 p 3 p 2 p 1 p 0 c 0 Det behövs nog specialgrindar till detta Ooops!
c Carry-lookahead adder (CLA) 8-bit adder 8s7s6s5s 4s3s2s1s 0 a7a6a5 a4a3a2a 1a0 b7b 6b5b 4b3b 2b1 b0 a 7 b 7 a 6 b 6 a 5 b 5 a 4 b 4 a 3 b 3 a 2 b 2 a 1 b 1 a 0 b 0 1-bit Full Adder 1-bit Full Adder 1-bit Full Adder 1-bit Full Adder 1-bit Full Adder 1-bit Full Adder 1-bit Full Adder 1-bit Full Adder c 0 s 7 s 6 s 5 s 4 s 3 s 2 s 1 s 0 c 8 p 7 g 7 c 7 p 6 g 6 c 6 p 5 g 5 c 5 p 4 g 4 c 4 p 3 g 3 Carry look ahead unit c 3 p 2 g 2 c 2 p 1 g 1 c 1 p 0 g 0 P 0 G 0 c 8 =g 7 +p 7 g 6 +p 7 p 6 g 5 +p 7 p 6 p 5 g 4 +p 7 p 6 p 5 p 4 g 3 +p 7 p 6 p 5 p 4 p 3 g 2 +p 7 p 6 p 5 p 4 p 3 p 2 g 1 + + p 7 p 6 p 5 p 4 p 3 p 2 p 1 g 0 + p 7 p 6 p 5 p 4 p 3 p 2 p 1 p 0 c 0
c 32 Hierarkisk expansion (BV sid 277) a 31-24 b 31-24 Block 3 CLA a 23-16 b 23-16 Block 2 CLA 32-bit adder a 15-8 b 15-8 Block 1 CLA a 7-0 b 7-0 Block 0 CLA G 3 P 3 S 31-24 G 2 P 2 S 23-16 G 1 P 1 S 15-8 G 0 P 0 S 7-0 c 24 c 16 c 8 PG PG PG P 3 3 2 2 1 1 0G0 c 0 PG PG P 2 2 1 1 0G0 c 0 PG P 1 1 0G0 c 0 P 0 G 0 c 0 c 0 32-bits adderare. Varje block består av en 8-bits CLA. First level four 8-bit adders with Carry lookahead Second level four Carry lookahead units
Hierarkisk expansion nivå 2 Carry-bitar från en andra nivåns Carry lookahead enheter C 8 = G 0 +P 0 c 0 C 16 = G 1 +P 1 G 0 +P 1 P 0 c 0 C 24 = G 2 +P 2 G 1 +P 2 P 1 G 0 +P 2 P 1 P 0 c 0 C 32 = G 3 +P 3 G 2 +P 3 P 2 G 1 +P 3 P 2 P 1 G 0 +P 3 P 2 P 1 P 0 c 0 etc. Med Carry lookahead enheter i flera nivåer kan adderare med fler bitar konstrueras. Med flera nivåer kan också grindar färre ingångar användas, men varje nivå bidrar med extra grindfördröjningar.
( Carry look ahead 3 level hierarchy ) 5-ingångars grindar med 2 nivåer 5-ingångars grindar med 2 nivåer 16-bit LCU 64-bit adder 5-ingångars grindar med 2 nivåer 64-bit LCU Totalt sex grindnivåer
Carry-Select-Adder (CSA) Idé Man delar upp en adderare i två steg med samma antal bitar För att snabba upp processen så räknar man ut resultatet av det andra steget i förväg för två fall Carry-in = 0 Carry-in = 1 När beräkningen av carry-biten är klar för det första steget, så väljer man resultatet av det andra steget beroende på carry-bitens värde!
8-bit (4+4) ripple carry Adder b[7:4] a[7:4] a[3:0] b[3:0] a b a+b = s c c 4 c 0 8 Add Add s[7:4] s[3:0] s
4+4/4 bit Carry-Select-Adder c 8-high b[7:4] b[7:4] a[3:0] b[3:0] 1 0 Add Add Add Mux c c 8 a[7:4] c 8-low Mux c a[7:4] c 4 s[7:4] s[3:0] s c 0 a b a+b = s Dubbla hastigheten 1/3 extra area
Ripple-Carry Adder Jämförelser T(n)= n*2.5*t NAND, A = n*12.5a NAND T(4)= 14T NAND, A(4) = 50 A NAND Carry-Lookahead Adder (4 bits) T(4)= ~8T NAND, A(4)= 43A NAND +4*4*A NAND = ~60A NAND Carry-Select Adder (8 bits) T(8)= ~(8+4)T NAND, A(8)= ~(120+20)A NAND
Vilken är den bästa adderaren? Det finns inget entydigt svar! Ripple-adderaren tar minst plats men är långsam Carry-lookahead-adderaren tar mycket plats men är snabb Carry-select-adderaren är en kompromiss Man måste göra en trade-off mellan area och speed
Subtraktion Subtraktion kan göras genom addition med två komplementet Invertera alla bitar av den andra operanden Addera 1
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
Add
Sub
Arithmetic Logic Unit (ALU) Funktionsväljare f 0 f 1 AU LU A/L MUX Ex. ALU specification f 0 f 1 A/L x ALU y c in Processorer brukar alltid ha en ALU, inte bara en adderare. A/L f1 f0 Funktion 0 0 0 x+y 0 0 1 x+y+c in 0 1 0 x-y 0 1 1 x-y-c in 1 0 0 x or y 1 0 1 x and y 1 1 0 x xor y 1 1 1 inv x
Komparator och flaggor Komparatorn, = jämförelse, implementeras som en subtraktionskrets Flaggor:???
Komparator Komparatorn, = jämförelse, implementeras som en subtraktionskrets Flaggor: På övningen får Du veta hur > < jämförelser görs.
Sammanfattning Addition och subtraktion av heltal Två-komplementet Subtraktion av ett tal implementeras som addition med dess två-komplement Trade-Off: Area mot Speed Olika Adder-strukturer Ripple-Carry Adder (RCA) Carry-Lookahead Adder (CLA) Carry-Select Adder (CSA)
Just for fun Halvadderarkrets med Dominobrickor
Just for fun 4 bits adderare med Dominobrickor