Bedste svar
En sandhedstabel er en tabel, der giver dig output af en boolsk funktion til enhver mulig kombination af indgange. En fuld adder er en boolsk funktion (eller et stykke hardware, der implementerer den), der gives to 2-bit heltal giver dig summen af disse heltal inklusive overførsel. (En halvtæller tilføjer kun tallene, men ignorerer overførslen). Hvis du har to 2-bit heltal som input, er der 16 mulige input, så din tabel vil have 16 rækker. Her kan det se ud, hvis dine indgange er a og b med bits, output er xabx 00 00 000 00 01 001 00 10 010 00 1 1 011 01 00 001 01 01 010 01 10 011 01 11 100 11 00 011 10 01 011 10 10100 10 11 101 11 00 011 11 01 100 11 10 101 11 11 110
Svar
Glib-svaret er “hvad designeren ønsker det”.
Da jeg begyndte at kigge på computerdesign i slutningen af 1970erne, havde jeg en baggrund inden for matematik og i mindre grad inden for computerprogrammering. Noget af det tidlige arbejde, jeg udførte, var design og implementering af instruktionssæt, og især de aritmetiske operationer. Alt dette krævede, at jeg var nødt til at opbygge en forståelse af computereitmetik, og på grund af baggrunden gjorde jeg det fra et lidt abstrakt, matematisk synspunkt. Dette var i modsætning til det, der blev lagt i en masse elektronik- og computerdesignbøger, der beskriver funktioner (f.eks. tilføjere) og deres implementering, men som ikke altid gav motivation.
Motivet ion til implementering af en adderer er at tage to sæt bits (“ord”), der repræsenterer tal, og at producere en output, der repræsenterer summen af disse bits. Der er tre vigtige spørgsmål at stille her. For det første, hvad er de tal, som vi prøver at repræsentere. For det andet, hvordan er disse tal repræsenteret som bits. Og for det tredje, hvad der skal ske, hvis summen af de to tal ikke kan repræsenteres som et sæt bits.
En almindelig situation (N-bit, lille endian, usigneret heltal) er, at N-bit ord bruges til at repræsentere heltal [0,2^N-1],
og ordet B[N-1]...B[0]
repræsenterer værdien ΣB[i]2^i: i in [0,N-1].
Det tredje spørgsmål er et spørgsmål – summen af de to input kan være i området [0,2*(2^N-1)]
og så er der resultater, som ikke kan repræsenteres.
A Enkel lærebogsimplementering af en “N-bit adderer” bygger den fra N “1-bit fulde tilføjere”. Ud over de 2 sæt N operandbits er der en carry-in bit (tvunget til nul) og en carry-out bit. Hvis det matematiske resultat af tilføjelsen kan repræsenteres, så vil N-bitene fra resultatet fra optælleren være den korrekte repræsentation af resultatet, og udførelsen vil være 0. Hvis derimod det matematiske resultat af tilføjelsen kan ikke repræsenteres, så vil N-bits af resultatet fra addereren være den korrekte repræsentation af resultatet modulo 2 ^ N, og udførelsen vil være 1. For at opsummere, producerer denne adder altid det korrekte resultat modulo 2 ^ N og en udførelse angiver, at det korrekte resultat ikke kan repræsenteres. Nogle computersystemer vil gerne behandle dette som en fejl, måske optage det i et flag eller forårsage en undtagelse.
En anden almindelig situation (N-bit, lille endian, signeret tos komplement heltal) er, at en N-bit ord bruges til at repræsentere heltalene [-2^(N-1),2^(N-1)-1],
og ordet B[N-1]...B[0]
repræsenterer værdien -B[N-1]*2^N + ΣB[i]2^i: i in [0,N-1]*.
Igen er der resultater, som ikke kan repræsenteres. Den tidligere beskrevne adder producerede det korrekte resultat for alle de repræsentative resultater (det er derfor, to komplement aritmetik bruges). Imidlertid indikerer gennemførelsen ikke, om resultatet er repræsentativt. (Overvej -1 + 1 = 0, der producerer en gennemførelse, og 0 + 0 = 0, som ikke gør det). For to komplement er den betingelse, der repræsenterer et upræsenterbart resultat (ofte kaldet “overløb”), at sign-bit (mest signifikante bit) af resultatet er “uventet” – det vil sige, at summen af to negative tal ser ud til at være positiv, eller summen af to positive tal synes at være negativ (øvelse for læseren for at vise, at summen af to antal forskellige tegn altid kan repræsenteres).
Nogle andre repræsentationer kan muligvis bruge de samme tilføjere som underskrevne og usignerede heltal. For brøkrepræsentationer, hvor værdien af et ord er værdien af ordet, behandlet som et heltal, divideret med en styrke på to, producerer optælleren det korrekte resultat, når værdien er repræsentativ. Imidlertid er det i systemer, der bruger disse repræsentationer, undertiden den ønskede adfærd, at resultaterne “mætter” – det vil sige, at resultatet er uden for området, summen er den mest positive eller mest negative værdi, alt efter hvad der er relevant. Andre systemer 2 en af værdierne (typisk 10… 0) til brug som en fejlværdi, som derefter vil sprede sig gennem yderligere operationer. I dette tilfælde er der brug for en speciel adder.
* Denne formulering gør eksplicit de to komplementform – den underskrevne værdi af ordet er den usignerede værdi af ordet minus 2 ^ N gange den øverste bit (tegnbit). Tilsvarende kan værdien skrives -B[N-1]*2^(N-1) + ΣB[i]2^i: i in [0,N-2]
, der svarer til den øverste bit, der repræsenterer 0 eller -1 i stedet for 0 eller +1.