Hvad er begrundelsen for de aritmetiske funktioner på 74181?

Jeg forstår ikke, hvorfor 74181 fungerer som det gør. Det gør give det fulde sæt af logiske funktionaliteter (AND, NAND, OR, NOR, XOR, shift), men dets aritmetiske funktioner er ikke så klare. For eksempel indeholder den ikke A - B og A + B i samme tilstand.

Kunne du give noget historisk baggrund om, hvordan det blev designet?

Kommentarer

  • godt spørgsmål, men jeg tror ikke ' ikke nogen af os chiphacker-brugere ville kende nogen af TI-motiverne ud over hvad der findes i databladet eller på wikipedia da.wikipedia.org/wiki/74181
  • @Jason: tak for din kommentar. hvor er det gode sted at dette spørgsmål?
  • ikke sikker … tjek med en TI-salgsrepræsentant? måske kunne de kontakte dig med en af de gammeldags, der arbejdede på 74181 tilbage i 1970 ' s.

Svar

Jeg ved, at dette er et gammelt spørgsmål, men for nylig har jeg ombygget 74181 og kan forklare detaljeret, hvorfor den har funktionerne det gør det.

74181 er en 4-bit ALU-chip, der giver 16 logiske funktioner og 16 aritmetiske funktioner på dens operander A og B. Mange af de logiske funktioner er, hvad du kan forvente (AND, OR, XOR), men der er også usædvanlige som A ELLER IKKE B. De aritmetiske funktioner er endnu mere fremmede. Mens du har A PLUS B og A MINUS B, virker nogle som (A ELLER B) PLUS (A OG IKKE B) ret tilfældige.

Der er faktisk en grund til dette sæt operationer. De logiske funktioner giver alle 16 boolske funktioner f (A, B). De aritmetiske funktioner koger alle ned til A PLUS f (A, B) PLUS-indføring.

Gå tilbage for at se, hvorfor der er 16 funktioner. Hvis du har en boolsk funktion f (A, B) på en-bit-indgange, er der 4 rækker i sandhedstabellen. Hver række kan output 0 eller 1. Så der er 2 ^ 4 = 16 mulige funktioner. Udvid disse til 4 bits, og dette er nøjagtigt de 16 logiske funktioner i 74181, fra trivielt 0 og 1 til forventet logik som A OG B til konstruerede operationer som IKKE A OG B.

De aritmetiske funktioner er simpelthen disse 16 funktioner tilføjet A med indføringen tilføjet. For eksempel, hvis f (A, B) = B, får du A PLUS B PLUS indføring. Hvis f (A, B) = IKKE B, får du A PLUS IKKE B PLUS-indføring, som i to “s-komplementlogik bliver til A MINUS B MINUS 1 PLUS-indføring.

Anden aritmetisk fu nktioner tager lidt mere analyse. Antag f (A, B) = IKKE (A ELLER B). Så vil hver bit af A PLUS f (A, B) altid være 1 undtagen i det tilfælde hvor A er 0 og B er 1. Så resultatet er A ELLER IKKE B. Selvom du laver tilføjelse, er resultatet et logisk funktion. De andre mærkelige aritmetiske funktioner kan forklares på samme måde.

En ting at bemærke er, at PLUS A giver dig venstre skift, men der er ingen måde at udføre højre skift på 74181.

74181 har i sin implementering fire valgte linjer, der vælger hvilken af de 16 f (A, B) -funktioner, der bruges. Den første halvdel af chipets kredsløb beregner de fire 1-bit-summer af A med f (A, B). (Specifikt opretter det generer- og propagationssignalerne, der bruges til carry lookahead . Dette gør det muligt for 74181 at arbejde parallelt i stedet for at bruge en krusningsbære.) Anden halvdel af chipets kredsløb genererer alle bæringer parallelt og beregner den endelige sum.

Internt implementeres de logiske funktioner ved at udføre tilføjelse med de interne bæringer, der alle er tvunget højt af M-linjen: A PLUS f (A, B) med alle bæringer. Det er ligetil at se, at dette stadig genererer 16 unikke logiske funktioner. Det tillader dog rækkefølgen, hvorfor hvis du ser på databladet, er der ingen åbenbar forbindelse mellem de logiske funktioner og de aritmetiske funktioner.

Hvis du vil forstå 74181 “s internals, skal du først se på 7483 4-bit adder, der kom ud to år tidligere. Den bruger samme bærer beregningsteknikker, men er lettere at forstå, da den giver en funktion, ikke 32. Du kan tænke på 74181 som generaliseringen af 7483.

Svar

A minus B minus 1 bruges til subtraktion, og komplementet til carry-flag kan ses som et låneflag.

Kommentarer

  • Faktisk bruger selv AVRer dette – de har ikke en øjeblikkelig instruktion (kun subtraherer øjeblikkelig), da du nemt kan konvertere hinanden til hinanden. Hvis begge værdier kommer fra registre derefter begge su b og tilføj er pæne og hurtige, men man er stadig ikke strengt nødvendigt.
  • Ja, se stackoverflow.com/questions/1337831/…

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *