Digital- och datorteknik Föreläsning #8 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik halmers tekniska högskola Vi har sett att man bör kunna bygga en komponent (ett grindnät) för addition av en enskild t, och sedan seriekoppla (kaskadkoppla) n stycken sådana komponenter för att erhålla en n-tars adderare. Ett grindnät för taddition som inte tar hänsyn till inkommande minnesffra kallas för en halvadderare ( half adder ). Ett grindnät för taddition som tar hänsyn till inkommande minnesffra kallas för en heladderare ( full adder ). c n c n- c i c c c n- x x + y n- y i y y s n- s s Härledning av grindnät för en halvadderare: Samma som halvadderare för c i = y i c i y i = c i AND-funktion XOR-funktion y i y i c i Villkorlig inverterare XOR-funktion för c i = NXOR-funktion för c i =
Samma som halvadderare för c i = Samma som halvadderare för c i = c i y i + c i ( + y i ) Men: denna t blir även om vi väljer XOR i stället för OR. Och vi har ju faktiskt redan denna XOR-funktion i halvadderaren. c i y i + c i ( ) y i c i c i y i = c i y i c i y i c i O + c i ( ) Konstruktion av 4-tars adderare: Vi kan nu kaskadkoppla fyra heladderare och få en an- an-2......a an- an-2 a... augendffror...a a 4-tars adderare. + bn- bn-2 Flera... 4-tars...b adderare b addendffror kan sedan sn sn- sn-2... sn...s sn- sn-2 s... summaffror...s s på samma sätt kopplahop för att bygga adderare för 8, 6 eller 32 tars närtal. x y c in rincipen och grindnät rincipen för addition och grindnät av rincipen två för n-tars addition och grindnät tal av två för n-tars addition tal av två n-tars tal O s cn cn- cn-2...ci+ cn ci...c cn- cn-2...ci+ minnesffror cn ci...c cn- cn-2...ci+ minnesffror ci...c minnesffror an- an-2... augendffror...a a augendffror + bn- bn-2... +...b bn- bn-2 b... addendffror...b b addendffror sn sn- sn-2... summaffror...s s summaffror För att addera två n-tars För tal att krävs addera det två enligt n-tars uppställningen För tal att krävs addera det två ovan enligt n-tars n uppställningen grindnät tal krävs som det ovan ldar enligt n uppställningen grindnät som ovan ldar n st grindnät som ldar utgnalerna och ci+ av utgnalerna ingnalerna och, ci+ och av utgnalerna ci, ingnalerna dvs n st heladderare och, ci+ och av ci, med ingnalerna dvs symbol n st heladderare och, och ci, med dvs symbol n st heladderare och med symbol och funktionstabell y x nedan. funktionstabell nedan. funktionstabell nedan. y 2 x 2 y 3 x 3 ci O ci+ ci O ci ci+ O ci+ c 4 Heladderare s Heladderare Heladderare s 2 s 3 ci+ ci ci ci+ Ur funktionstabellen får Ur man funktionstabellen fram och ci+ får på Ur S man funktionstabellen normal fram form: och ci+ får på S man normal fram form: och ci+ på S normal form: ci ci+ = a i'b i'c i + a i'b ic i' + a ib i'c i' = + a i'b a ib i'c ic i + a i'b ic i' (4.2 + ibkm) i'c i' = + a i'b a ib i'c ic i + a i'b ic i' (4.2 + ibkm) i'c i' + a ib ic i = a i'b ic i + a ib i'c i + a ib ic i' + = a ib i'b ic ic i i + a ib i'c (4.3 i + i akm) ib ic i' + = a ib i'b ic ic i i + a ib i'c (4.3 i + i akm) ib ic i' + a ib ic i (4.2 i KM) (4.3 i KM) 2 = (a i b i) c i = (a i b i) c i (4.4 i KM) = (a i b i) c i (4.4 i KM) = a ib i + (a i b i)c i = a ib i + (a i (4.5 b i)c i i KM) = a ib i + (a i (4.5 b i)c i i KM) Motsvarande grindnät: Motsvarande grindnät: Motsvarande grindnät: (4.4 i KM) (4.5 i KM)
Konstruktion av 4-tars adderare: Vi kan nu kaskadkoppla fyra heladderare och få en 4-tars adderare. Flera 4-tars adderare kan sedan på samma sätt kopplahop för att bygga adderare för 8, 6 eller 32 tars närtal. x y c in y x y 2 x 2 y 3 x 3 Vad bestämmer löptiden för adderaren? s rincipen och grindnät för addition av två n-tars tal cn cn- cn-2...ci+ ci...c minnesffror an- an-2......a a augendffror + bn- bn-2......b b addendffror sn sn- sn-2......s s summaffror För att addera två n-tars tal krävs det enligt uppställningen ovan n st grindnät som ldar utgnalerna och ci+ av ingnalerna, och ci, dvs n st heladderare med symbol och funktionstabell nedan. O O ci O ci+ ci O ci+ c 4 s Heladderare s 2 s 3 ci ci+ Konstruktion av 4-tars subtraktionsenhet: Det vore praktiskt om vår 4-tar adderare också kunde användas för subtraktion. Och vi har faktiskt redan sett hur detta skulle kunna gå till: -komplement Y 2-komplement = 2 n Y = 2 n + Y = (2 n Y) + X Y = X + ( Y) = X + Y 2 komplement = X + Y komplement + carry-in Vi kan alltså erhålla subtraktionen X Y genom att addera X till de inverterade tarna i Y (-komplementet) samt lägga till till summan via adderarens carry-in. Ur funktionstabellen får man fram och ci+ på S normal form: = a i'b i'c i + a i'b ic i' + a ib i'c i' + a ib ic i = a i'b ic i + a ib i'c i + a ib ic i' + a ib ic i (4.2 i KM) (4.3 i KM) = (a i b i) c i = a ib i + (a i b i)c i (4.4 i KM) (4.5 i KM) Motsvarande grindnät: Aritmetik i digitala system & & & Konstruktion av 4-tars addition/subtraktionsenhet: ci+ ci Vi kan nu konstruera en enhet för både addition och subtraktion genom att ansluta tarna för Y via villkorliga inverterare. De villkorliga inverterarna styrs av gnalen SUB som väljer om kretsen skall utföra addition (SUB = ) eller subtraktion (SUB = ) med Y. Signalen SUB sätter också rätt värde på carry-in : vid addition och vid subtraktion. Vi återkommer strax till den villkorliga inverteringen vid. ci ci+ Tolkning av resultat Vi har alltså en enhet för både addition och subtraktion som kan arbeta med såväl tal utan tecken som tal med tecken. Fråga: Hur vet enheten vilken typ av tal som används? Svar: Det vet den inte! Den måste därför alltid generera resultat som kan användas för endera typen av tal. 3
Tolkning av resultat Vi har en enhet som kan ge spill vid operationer på tal både med och utan tecken. Fråga: Hur vet man om resultatet har gett spill eller ej? Svar: Enheten måste generera information om spill för båda typer av tal. Det är sedan upp till användaren att tolka resultaten på rätt sätt. Denna information om spill finn s k flaggtar. Flaggtar: Flaggtar användnte bara för att detektera spill utan också för att indikera andra egenskaper hos ett resultat. Som vi skall se senare kan programvaran i en dator konstrueras så att den vidtar olika åtgärder beroende på vilka egenskaper ett resultat har. De vanligast förekommande flaggtarna i ett digitalt system är Z (zero): Z-flaggan indikerar om resultatet av en operation blev. N (negative): N-flaggan indikerar om resultatet av en operation blev negativt (oftast bara av intresse vid aritmetik på tal med tecken) (carry): -flaggan indikerar om resultatet av en operation mellan tal utan tecken resulterade i spill. V (overflow): V-flaggan indikerar om resultatet av en operation mellan tal med tecken resulterade i spill. Z-flaggan: Baserat på resultatet från en aritmetisk operation skall Z-flaggan sättas till när alla tar s n-, s n-2,, s, s i resultatet är lika med. Z = s n s n 2 s s N-flaggan: Baserat på resultatet från en aritmetisk operation skall N-flaggan sättas till när resultatet är mindre än. Då vi använder 2-komplementaritmetik vet vi att resultatet är mindre än när teckenten s n- =. N = s n 4
-flaggan: Vi såg tidigare att carry-out c n = indikerar spill från en n-tars addition av tal utan tecken. Vi såg också att carry-out c n = indikerar spill från en n-tars subtraktion av tal utan tecken när man använder 2-komplementaritmetik. -flaggan: Vi såg tidigare att carry-out c n = indikerar spill från en n-tars addition av tal utan tecken. Vi såg också att carry-out c n = indikerar spill från en n-tars subtraktion av tal utan tecken när man använder 2-komplementaritmetik. Vi kan alltså erhålla -flaggan genom att använda en villkorlig invertering av carry-out c n från additionen, styrd av gnalen SUB. = c n SUB adderas. Resultatet kommer aldrig närmare talområdets gränser än vad något av de två talen gör. gränser än vad något av de av tallinjen. Detta ger oss två möjligheter till spill:. adderas. Addition Resultatet av två potiva kommer tal ger aldrig ett närmare negativt talområdets resultat. gränser än vad något av de två talen gör. gränser än vad något av de av tallinjen. Villkor för spill: x n y n s n 5
Detta ger oss två möjligheter till spill:. adderas. Addition Resultatet av två potiva kommer tal ger aldrig ett negativt närmare resultat. talområdets gränser än 2. vad Addition något av två de två negativa talen gör. tal ger ett potivt resultat. gränser än vad något av de av tallinjen. Villkor för spill: x n y n s n Genom adderas. att Resultatet komnera kommer de två fallen aldrig får vi närmare ett slutligt talområdets villkor för spill gränser vid addition. än vad något av de två talen gör. gränser än vad något av de V av = tallinjen. x n y n s n + x n y n s n Vid subtraktion av tal med samma tecken kan spill aldrig uppträda. För att inse detta påminner vi oss om att subtraktion X Y utförs medelst additionen X + Y 2-komplement. Då måste de två talen som adderas ha olika tecken, vilket vi vet inte kan ge spill. Vid subtraktion av tal med olika tecken kan spill uppträda. Med ett liknande resonemang inser vi att de två talen som adderas har samma tecken, vilket vi vet kan orsaka spill. Vid subtraktion av tal med samma tecken kan spill aldrig uppträda. För att inse detta Vi påminner får alltså vi samma oss om villkor att subtraktion för spill vid X Y subtraktion utförs medelst som additionen vid addition. X + Y 2-komplement. Då måste de två talen som adderas ha olika tecken, vilket vi vet inte kan ge spill. Vid subtraktion av tal med olika tecken kan spill uppträda. Med ett liknande resonemang inser vi att de två talen som adderas har samma tecken, V vilket = x n vi vet y n kan s n orsaka + x n spill. y n s n 6
Aritmetik-/logikenhet (ALU) Aritmetik-/logikenhet (ALU) Ett nytt komnatoriskt nät: Vår adderare kan nu, tillsammans med en uppsättning logikgrindar, användas för att bygga upp en aritmetik- och logikenhet (ALU). Detta nya komnatoriska nät är nödvändigt för att kunna utföra beräkningar i datorn. Gränssnittet mot grindnätet utgörs av ett antal operationsgnaler (F), ett par datngångar (D och E), en datautgång (U) samt fyra flaggtar (Z, N, och V). D (d7,d6,d5,d4, d3,d2,d,d) E (e7,e6,e5,e4, e3,e2,e,e) komnatorik in F (f3,f2,f,f) N V Z U (u7,u6,u5,u4, u3,u2,u,u) ALU tslice : Varje t U i på datautgången ansluts till en väljare ( multiplexer ) som, styrd av operationsgnalerna F, levererar en t av resultatet (en s k tslice ) från den valda operationen. Exempel på operationer i en ALU: addition och subtraktion tvis XOR tvis OR tvis AND tvinvertering tkonstanter och Exempel: Väljare för tslice med åtta operationer. "" INV i AND i OR i XOR i SUB i ADD i "" f f f 2 U i D(8) E(8) Funktion (f3f2ff) in ALU Flaggor Aritmetik-/logikenhet (ALU) U(8) ALU för laboration : f 3 f 2 f f U = f(d,e,f, in ) Operation Resultat Bitvis nollställning D E Bitvinvertering Dk Bitvinvertering Ek Bitvis OR D OR E Bitvis AND D AND E Bitvis XOR D XOR E Den ALU ni möter i laboration arbetar med 8-tars maskintal, och innehåller de operationer vi visade för vår enkla tslice, samt ytterligare ett par varianter av addition. D + + in D + in D + FFH + in D + in D + E + in D + E + in D + D + in 2D + in D +Ek + in D E + in Bitvis nollställning Bitvis nollställning Bitvis ettställning FFH 7