Jeg forstår ikke hvorfor 74181 fungerer slik den gjør. Det gjør gi hele settet med logikkfunksjonalitet (AND, NAND, OR, NOR, XOR, shift), men dens aritmetiske funksjoner er ikke så klare. For eksempel inneholder den ikke A - B
og A + B
i samme modus.
Kan du gi litt historisk bakgrunn om hvordan den ble designet?
Kommentarer
- godt spørsmål, men jeg tror ikke ' t noen av oss chiphacker-brukere vil vite noe av TI-motivene utover det som er i databladet eller på wikipedia no.wikipedia.org/wiki/74181
- @Jason: takk for kommentaren din. hvor er det gode stedet for dette spørsmålet?
- ikke sikker … sjekk med en TI-salgsrepresentant? kanskje de kan ta kontakt med en av de gamle timere som jobbet på 74181 tilbake i 1970 ' s.
Svar
Jeg vet at dette er et gammelt spørsmål, men jeg utviklet nylig 74181 og kan forklare i detalj hvorfor den har funksjonene det gjør det.
74181 er en 4-bit ALU-brikke som gir 16 logiske funksjoner og 16 aritmetiske funksjoner på operandene A og B. Mange av de logiske funksjonene er det du kan forvente (AND, OR, XOR), men det er også uvanlige som A ELLER IKKE B. De aritmetiske funksjonene er enda merkeligere. Mens du har A PLUS B, og A MINUS B, virker noen som (A ELLER B) PLUS (A OG IKKE B) ganske tilfeldige.
Det er faktisk en grunn til dette settet med operasjoner. De logiske funksjonene gir alle de 16 boolske funksjonene f (A, B). De aritmetiske funksjonene koker ned til A PLUS f (A, B) PLUS innføring.
Gå tilbake for å se hvorfor det er 16 Hvis du har en boolsk funksjon f (A, B) på en-bits innganger, er det 4 rader i sannhetstabellen. Hver rad kan sende ut 0 eller 1. Så det er 2 ^ 4 = 16 mulige funksjoner. Utvid disse til 4 biter, og dette er nøyaktig de 16 logiske funksjonene til 74181, fra trivielle 0 og 1 til forventet logikk som A OG B til konstruerte operasjoner som IKKE A OG B.
De aritmetiske funksjonene er ganske enkelt disse 16 funksjoner lagt til A med innføringen lagt til. For eksempel, hvis f (A, B) = B, får du A PLUS B PLUS innføring. Hvis f (A, B) = IKKE B, får du A PLUS NOT B PLUS carry-in, som i to «s-komplementlogikk blir til A MINUS B MINUS 1 PLUS-carry-in.
Annet aritmetisk fu funksjoner tar litt mer analyse. Anta at f (A, B) = IKKE (A ELLER B). Da vil hver bit av A PLUS f (A, B) alltid være 1 bortsett fra i tilfelle A er 0 og B er 1. Resultatet er A ELLER IKKE B. Selv om du gjør tillegg, er resultatet et logisk funksjon. De andre merkelige aritmetiske funksjonene kan forklares på samme måte.
En ting å merke seg er at PLUS A gir deg venstre skift, men det er ingen måte å gjøre høyre skift på 74181.
I implementeringen har 74181 fire utvalgte linjer som velger hvilken av de 16 f (A, B) funksjonene som brukes. Den første halvdelen av brikkens kretsløp beregner de fire 1-bits summen av A med f (A, B). (Spesielt skaper den genererer og formerer signalene som brukes til carry lookahead . Dette lar 74181 arbeide parallelt, i stedet for å bruke en ringbære.) Den andre halvdelen av chipens kretsløp genererer alle bærene parallelt og beregner den endelige summen.
Internt blir logikkfunksjonene implementert ved å utføre tillegg med de interne bæringene som alle er tvunget høyt av M-linjen: A PLUS f (A, B) med alle bæringer. Det er greit å se at dette fremdeles genererer 16 unike logiske funksjoner. Det tillater imidlertid rekkefølgen, og det er grunnen til at hvis du ser på databladet, er det ingen åpenbar sammenheng mellom de logiske funksjonene og de aritmetiske funksjonene.
Hvis du vil forstå 74181 «s internaler, må du først se på 7483 4-biters adder, som kom ut to år tidligere. Den bruker samme bæreberegningsteknikker, men er enklere å forstå da den gir en funksjon, ikke 32. Du kan tenke på 74181 som generaliseringen av 7483.
Svar
A minus B minus 1
brukes til subtraksjon, og komplementet til bæreflagget kan sees på som et låneflagg.
Kommentarer
- Faktisk bruker selv AVR-er dette – de har ikke en umiddelbar instruksjon (bare substraherer umiddelbar), siden du enkelt kan konvertere hverandre til hverandre. Hvis begge verdiene kommer fra registre da begge su b og add er fine og raske, men en er fortsatt ikke strengt nødvendig.
- Ja, se stackoverflow.com/questions/1337831/…