Beste svaret
En sannhetstabell er en tabell som gir deg utgangen av en boolsk funksjon for enhver mulig kombinasjon av innganger. En fulladder er en boolsk funksjon (eller en maskinvare som implementerer den) som gitt to 2-biters heltall gir deg summen av disse heltallene inkludert overføring. (En halvleder legger bare til tallene, men ignorerer overføringen). Hvis du har to 2-biters heltall som inngang, er det 16 mulige innganger, så bordet ditt vil ha 16 rader. Slik kan det se ut hvis inngangene dine er a og b med biter, utgangen 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 10 100 10 11 101 11 00 011 11 01 100 11 10 101 11 11 110
Svar
Glib-svaret er «hva designeren vil ha det til».
Da jeg begynte å se på datadesign på slutten av 1970-tallet, hadde jeg bakgrunn i matematikk og, i mindre grad, innen dataprogrammering. Noen av de tidlige jobbene jeg gjorde involverte design og implementering av instruksjonssett, og spesielt de aritmetiske operasjonene. Alt dette krevde at jeg måtte bygge forståelse for dataritmetikk, og på grunn av bakgrunn gjorde jeg det fra et litt abstrakt, matematisk synspunkt. Dette var i motsetning til det som ble lagt ut i mye elektronikk og datamaskindesignbøker som beskriver funksjoner (f.eks. addere) og implementering av dem, men som ikke alltid ga motivasjon.
Motivet ionet for å implementere en adderer er å ta to sett med bits («ord»), som representerer tall, og å produsere en utgang som representerer summen av disse bitene. Det er tre viktige spørsmål å stille her. For det første, hva er tallene vi prøver å representere. For det andre, hvordan blir disse tallene representert som biter. Og for det tredje, hva som skal skje hvis summen av de to tallene ikke kan representeres som et sett med bits.
En vanlig situasjon (N-bit, lite endian, usignert heltall) er at en N-bit-ord brukes til å representere heltallene [0,2^N-1],
og ordet B[N-1]...B[0]
representerer verdien ΣB[i]2^i: i in [0,N-1].
Det tredje spørsmålet er et problem – summen av de to inngangene kan være i området [0,2*(2^N-1)]
, og det er derfor resultater som ikke kan vises.
A Enkel lærebokimplementering av en «N-bit-adder» bygger den fra N «1-bit full adders». I tillegg til de 2 settene med N operandbiter, er det en innføringsbit (tvunget til null) og en gjennomføringsbit. Hvis det matematiske resultatet av tilsetningen kan representeres, vil N-bitene av resultatet fra addisjonen være den riktige representasjonen av resultatet, og gjennomføringen vil være 0. Hvis derimot det matematiske resultatet av addisjonen kan ikke representeres, da vil N-biter av resultatet fra adderen være den riktige representasjonen av resultatet modulo 2 ^ N, og gjennomføringen vil være 1. For å oppsummere, produserer denne addisjonen alltid det riktige resultatet modulo 2 ^ N og en gjennomføring indikerer at det riktige resultatet ikke er representativt. Noen datasystemer vil ønske å behandle dette som en feil, kanskje registrere det i et flagg, eller forårsake et unntak.
En annen vanlig situasjon (N-bit, liten endian, signert tos komplement heltall) er at en N-bit ord brukes til å representere heltallene [-2^(N-1),2^(N-1)-1],
og ordet B[N-1]...B[0]
representerer verdien -B[N-1]*2^N + ΣB[i]2^i: i in [0,N-1]*.
Igjen, det er resultater som ikke kan vises. Adderen beskrevet tidligere ga det riktige resultatet for alle de representable resultatene (det er derfor to komplement aritmetikk brukes). Imidlertid indikerer ikke gjennomføringen om resultatet er representativt. (Tenk på -1 + 1 = 0 som gir en gjennomføring og 0 + 0 = 0 som ikke gjør det). For to komplement er tilstanden som representerer et upresentabelt resultat (ofte kalt «overflow») at sign-biten (den viktigste biten) av resultatet er «uventet» – det vil si at summen av to negative tall ser ut til å være positiv, eller summen av to positive tall ser ut til å være negativ (øvelse for leseren for å vise at summen av to antall forskjellige tegn alltid kan representeres).
Noen andre representasjoner kan være i stand til å bruke de samme tilleggene som signerte og usignerte heltall. For brøkrepresentasjoner der verdien av et ord er verdien av ordet, behandlet som et heltall, delt med en styrke på to, produserer addisjonen det riktige resultatet når verdien er representabel. Imidlertid er det i systemer som bruker disse representasjonene noen ganger den ønskede oppførselen at resultatene «mettes» – det vil si at resultatet er utenfor området, at summen er den mest positive eller den mest negative verdien, alt etter behov. Andre systemer 2 en av verdiene, (typisk 10… 0) for bruk som en feilverdi som deretter vil forplante seg gjennom videre operasjoner. I dette tilfellet vil det være behov for en spesiell hugger.
* Denne formuleringen gjør eksplisitt de to komplementformen – den signerte verdien av ordet er den usignerte verdien av ordet minus 2 ^ N ganger toppbiten (signbit). Tilsvarende kan verdien skrives -B[N-1]*2^(N-1) + ΣB[i]2^i: i in [0,N-2]
som tilsvarer den øverste biten som representerer 0 eller -1 i stedet for 0 eller +1.