Bästa svaret
En sanningstabell är en tabell som ger dig utdata från en boolesk funktion för alla möjliga kombinationer av ingångar. En fullständig adderare är en boolsk funktion (eller en hårdvara som implementerar den) som ges två 2-bitars heltal ger dig summan av dessa heltal inklusive överföring. (En halvaddare lägger bara till siffrorna men ignorerar överföringen). Om du har två 2-bitars heltal som ingång finns det 16 möjliga ingångar, så din tabell kommer att ha 16 rader. Så här kan det se ut om dina ingångar är a och b med bitar är utgången 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 är ”vad designern vill att det ska vara”.
När jag började titta på datordesign i slutet av 1970-talet hade jag en bakgrund i matematik och, i mindre utsträckning, i datorprogrammering. Några av de tidiga arbetena jag gjorde var att utforma och implementera instruktionsuppsättningar, och i synnerhet de aritmetiska operationerna. Allt detta krävde att jag var tvungen att bygga en förståelse för dataritmetik, och på grund av bakgrunden gjorde jag det ur en lite abstrakt, matematisk synvinkel. Detta var i motsats till vad som var i en hel del elektronik- och datordesignläroböcker som beskriver funktioner (t.ex. tillägg) och deras implementering, men som inte alltid gav motivation.
Motivet jon för att implementera en adderare är att ta två uppsättningar bitar (”ord”), som representerar tal, och att producera en utgång som representerar summan av dessa bitar. Det finns tre viktiga frågor att ställa här. Först, vilka siffror som vi försöker representera. För det andra, hur representeras dessa tal som bitar. Och för det tredje, vad som ska ske om summan av de två siffrorna inte kan representeras som en uppsättning bitar.
En vanlig situation (N-bit, litet endian, osignerat heltal) är att en N-bitord används för att representera heltal [0,2^N-1],
och ordet B[N-1]...B[0]
representerar värdet ΣB[i]2^i: i in [0,N-1].
Den tredje frågan är en fråga – summan av de två ingångarna kan ligga i intervallet [0,2*(2^N-1)]
och så finns det resultat som inte kan representeras.
A Enkel lärobokimplementering av en ”N-bit adderare” bygger den från N ”1-bitars fulla tillägg”. Förutom de två uppsättningarna N operandbitar finns det en inmatningsbit (tvingad till noll) och en utmatningsbit. Om det matematiska resultatet av tillägget kan representeras kommer N-bitarna av resultatet från adderaren att vara den korrekta representationen av resultatet, och genomförandet blir 0. Om å andra sidan det matematiska resultatet av tillägget kan inte representeras, då kommer N-bitarna av resultatet från adderaren att vara den korrekta representationen av resultatet modulo 2 ^ N, och genomförandet blir 1. Sammanfattningsvis ger denna adderare alltid rätt resultat modulo 2 ^ N och en utförande indikerar att det korrekta resultatet inte är representativt. Vissa datorsystem vill behandla detta som ett fel, kanske spela in det i en flagga eller orsaka ett undantag.
En annan vanlig situation (N-bit, liten endian, signerad tvås komplement heltal) är att en N-bitord används för att representera heltal [-2^(N-1),2^(N-1)-1],
och ordet B[N-1]...B[0]
representerar värdet -B[N-1]*2^N + ΣB[i]2^i: i in [0,N-1]*.
Återigen finns det resultat som inte kan representeras. Den tidigare beskrivna adderaren gav rätt resultat för alla representerbara resultat (det är därför som två komplement aritmetik används). Genomförandet indikerar dock inte om resultatet är representativt. (Tänk på -1 + 1 = 0 som ger en genomföring och 0 + 0 = 0 som inte gör det). För två komplement är villkoret som representerar ett oförutsägbart resultat (vanligtvis kallat ”överflöde”) att signbiten (viktigaste biten) för resultatet är ”oväntad” – det vill säga summan av två negativa tal verkar vara positivt, eller summan av två positiva tal verkar vara negativ (öva för läsaren att visa att summan av två antal olika tecken alltid kan representeras).
Vissa andra representationer kan använda samma adders som signerade och osignerade heltal. För fraktionerade representationer där värdet på ett ord är värdet på ordet, behandlat som ett heltal, dividerat med en kraft på två, ger adderaren rätt resultat när värdet är representerbart. Men i system som använder dessa representationer är det önskade beteendet ibland att resultaten ”mättas” – det vill säga resultatet är utanför intervallet, summan är det mest positiva eller det mest negativa värdet, beroende på vad som är lämpligt. Andra system 2 ett av värdena (vanligtvis 10 … 0) för användning som ett felvärde som sedan sprids genom ytterligare operationer. I det här fallet behövs en speciell adderare.
* Denna formulering klargör de två komplementformen – ordets signerade värde är det osignerade värdet av ordet minus 2 ^ N gånger toppbiten (signbit). Likvärdigt kan värdet skrivas -B[N-1]*2^(N-1) + ΣB[i]2^i: i in [0,N-2]
vilket motsvarar toppbiten som representerar 0 eller -1 istället för 0 eller +1.