Vad är resonemanget för de aritmetiska funktionerna på 74181?

Jag förstår inte varför 74181 fungerar som det gör. tillhandahålla hela uppsättningen logiska funktioner (AND, NAND, OR, NOR, XOR, shift), men dess aritmetiska funktioner är inte så tydliga. Till exempel innehåller den inte A - B och A + B i samma läge.

Kan du ge historikbakgrund om hur den designades?

Kommentarer

  • bra fråga, men jag tror inte ' t tror att någon av oss chiphackeranvändare skulle veta något av TI-motiven utöver vad som finns i databladet eller på wikipedia sv.wikipedia.org/wiki/74181
  • @Jason: tack för din kommentar. var är då bra stället för denna fråga?
  • inte säker … kolla med en TI-säljare? kanske de kunde kontakta dig med en av de gammaldags som arbetade på 74181 redan 1970 ' s.

Svar

Jag vet att det här är en gammal fråga, men jag har nyligen ombyggt 74181 och kan förklara i detalj varför den har funktionerna det gör det.

74181 är ett 4-bitars ALU-chip som tillhandahåller 16 logiska funktioner och 16 aritmetiska funktioner på dess operander A och B. Många av de logiska funktionerna är vad du kan förvänta dig (AND, OR, XOR), men det finns också ovanliga som A ELLER INTE B. De aritmetiska funktionerna är ännu främmande. Medan du har A PLUS B och A MIN B, verkar vissa som (A ELLER B) PLUS (A OCH INTE B) ganska slumpmässiga.

Det finns faktiskt en anledning till denna uppsättning operationer. Logikfunktionerna ger alla 16 booleska funktioner f (A, B). De aritmetiska funktionerna kokar alla ner till A PLUS f (A, B) PLUS-inmatning.

Gå tillbaka för att se varför det finns 16 funktioner. Om du har en Boolean-funktion f (A, B) på enbitsingångar finns det fyra rader i sanningstabellen. Varje rad kan mata ut 0 eller 1. Så det finns 2 ^ 4 = 16 möjliga funktioner. Utöka dessa till 4 bitar, och detta är exakt de 16 logiska funktionerna i 74181, från trivial 0 och 1 till förväntad logik som A OCH B till konstruerade operationer som INTE A OCH B.

De aritmetiska funktionerna är helt enkelt dessa 16 funktioner läggs till A med inmatningen tillagd. Till exempel, om f (A, B) = B får du A PLUS B PLUS inmatning. Om f (A, B) = INTE B får du A PLUS NOT B PLUS carry-in, som i två ”s-komplementlogik förvandlas till A MINUS B MINUS 1 PLUS-carry-in.

Annat aritmetiskt fu funktioner tar lite mer analys. Antag att f (A, B) = INTE (A ELLER B). Då kommer varje bit av A PLUS f (A, B) alltid att vara 1 utom i fallet A är 0 och B är 1. Så resultatet är A ELLER INTE B. Även om du gör tillägg är resultatet ett logisk funktion. De andra konstiga aritmetiska funktionerna kan förklaras på samma sätt.

En sak att notera är att A PLUS A ger dig vänster shift, men det finns inget sätt att göra rätt shift på 74181.

74181 har i sin implementering fyra valda rader som väljer vilken av de 16 f (A, B) funktionerna som används. Den första halvan av chipets kretsar beräknar de fyra 1-bitarsummorna av A med f (A, B). (Specifikt skapar den generera och propagera signaler som används för bär lookahead . Detta låter 74181 arbeta parallellt snarare än att använda en krusningsbärning.) Den andra halvan av chipets kretsar genererar alla bärningar parallellt och beräknar den slutliga summan.

Internt implementeras logikfunktionerna genom att utföra addition med de interna bärningarna som tvingas högt av M-linjen: A PLUS f (A, B) med alla bärningar. Det är enkelt att se att detta fortfarande genererar 16 unika logiska funktioner. Det tillåter dock ordningen, det är därför om du tittar på databladet ingen uppenbar koppling mellan de logiska funktionerna och de aritmetiska funktionerna.

Om du vill förstå 74181 ”s internaler, titta först på 7483 4-bitars adderaren, som kom ut två år tidigare. Den använder samma bärberäkningstekniker, men är enklare att förstå eftersom den ger en funktion, inte 32. Du kan tänka på 74181 som generaliseringen av 7483.

Svar

A minus B minus 1 används för subtraktion och komplementet till bärflaggan kan ses som en låneflagga.

Kommentarer

  • I själva verket använder även AVR detta – de har inte någon omedelbar instruktion (endast subtraherar omedelbar) eftersom du enkelt kan konvertera varandra till varandra. Om båda värdena kommer från register sedan båda su b och add är trevliga och snabba men en är fortfarande inte absolut nödvändig.
  • Ja, se stackoverflow.com/questions/1337831/…

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *