I databehandling er den aritmetiske logiske enheten eller den aritmetiske-logiske enheten , også kjent som ALU , en digital krets som utfører aritmetiske operasjoner (addisjon, subtraksjon) og logiske operasjoner (HVIS, OG, ELLER, IKKE) mellom verdiene til argumentene (ett eller to)
De klart mest komplekse elektroniske kretsene er de som er innebygd i moderne mikroprosessorbrikker . Derfor har disse prosessorene i seg en veldig kompleks og kraftig ALU. Faktisk kan en moderne mikroprosessor (og stormaskiner ) ha flere kjerner , hver kjerne med flere utførelsesenheter , hver med flere ALUer.
Mange andre kretser kan inneholde en aritmetisk logikkenhet inni: grafikkbehandlingsenheter som de som finnes i moderne GPUer , FPUer som den gamle 80387 matematiske koprosessoren og digitale signalprosessorer som de som finnes i lydkort , CD-spillere og HDTVer . Alle disse har flere kraftige og komplekse ALUer inni seg.
Matematiker John von Neumann foreslo konseptet med ALU i 1945 , da han skrev en rapport om grunnlaget for en ny datamaskin kalt EDVAC (Electronic Discrete Variable Automatic Computer). Senere, i 1946, jobbet han sammen med kollegene sine og designet en datamaskin for Princeton Institute of Advanced Studies (IAS). IAS-maskinen ble prototypen for mange senere datamaskiner . I dette forslaget skisserte von Neumann hva han mente ville være nødvendig i maskinen hans, inkludert en ALU.
Von Neumann forklarte at en ALU er et grunnleggende krav for en datamaskin fordi den må utføre grunnleggende matematiske operasjoner: addisjon, subtraksjon, multiplikasjon og divisjon. [ 1 ] Derfor mente han at det var «rimelig at en datamaskin skulle inneholde spesialiserte organer for disse operasjonene». [ 1 ]
En ALU må behandle tall med samme format som resten av den digitale kretsen. For moderne prosessorer er dette formatet nesten alltid representasjonen av de tos komplementære binære tall . Tidlige datamaskiner brukte et bredt utvalg av tallsystemer, inkludert ens komplement , fortegnsstørrelsesformat , og til og med ekte desimalsystemer , med ti rør per siffer.
ALU-ene for hvert av disse tallsystemene viste forskjellige design, og dette påvirket den nåværende preferansen for to-komplement, siden dette er den enkleste representasjonen, for den elektroniske kretsen til ALU, for å beregne addisjoner, subtraksjoner, etc. .
ALU består i utgangspunktet av: Operasjonell krets , inngangsregistre , akkumulatorregister og et statsregister , et sett med registre som gjør det mulig å utføre hver av operasjonene.
De fleste handlingene til datamaskinen utføres av ALU. ALU henter data fra prosessorregistrene . Disse dataene blir behandlet og resultatene av denne operasjonen lagres i utgangsregistrene til ALU. Andre mekanismer flytter data mellom disse registrene og minnet. [ 2 ]
En kontrollenhet kontrollerer ALU, ved å sette kretser som forteller ALU hvilke operasjoner som skal utføres.
Bildet beskriver en 2- bits ALU med to innganger (operander) kalt A og B: A[0] og B[0] tilsvarer den minst signifikante biten og A[1] og B[1] tilsvarer den mest signifikante biten .
Hver bit av ALU behandles identisk, med unntak av adressen til bærebiten . Håndteringen av denne biten er forklart senere.
Inngangene A og B går til de fire portene til høyre, fra topp til bunn, XOR , AND , OR . De tre første portene utfører XOR-, AND- og OR-operasjoner på data A og B. Den siste XOR-porten er startporten til en full adderer.
Det siste trinnet i operasjonene på hver bit er multipleksing av dataene. 3-bits OP-inngangen, OP[0], OP[1] og OP[2] (fra kontrollenheten ) bestemmer hvilke av funksjonene som skal utføres:
Det er tydelig at de andre fire multiplekserinngangene er ledige for andre operasjoner (subtraksjon, multiplikasjon, divisjon, IKKE A, IKKE B, osv.). Selv om OP[2] for øyeblikket ikke brukes i dette oppsettet (til tross for at det er inkludert og tilkoblet), vil det bli brukt når du utfører andre operasjoner i tillegg til de 4 operasjonene som er oppført ovenfor.
Inn- og utføringsdataene, kalt flagg, er vanligvis koblet til et slags statusregister .
De fleste ALU-er kan utføre følgende operasjoner:
En ingeniør kan designe en ALU for å beregne enhver operasjon, uansett hvor kompleks den er. problemet er at jo mer kompleks operasjonen er, jo dyrere vil ALU være, jo mer plass vil den bruke i prosessoren, og jo mer kraft vil den spre osv.
Derfor beregner ingeniører alltid et kompromiss, for å gi prosessoren (eller andre kretser) en ALU som er kraftig nok til å beregne raskt, men ikke av en slik kompleksitet at det gjør en ALU økonomisk uoverkommelig. Tenk deg at du må regne ut for eksempel kvadratroten av et tall; den digitale ingeniøren vil undersøke følgende alternativer for å implementere denne operasjonen:
De beste alternativene spenner fra raskeste og dyreste til tregeste og billigste. Derfor, mens selv den enkleste datamaskinen kan beregne den mest kompliserte formelen, vil de enkleste datamaskinene vanligvis ta lang tid fordi flere av trinnene i å beregne formelen vil involvere alternativene #3, #4 og #5 ovenfor.
Komplekse prosessorer som Pentium IV og AMD Athlon 64 implementerer alternativ #1 for de mest komplekse operasjonene og tregere #2 for ekstremt komplekse operasjoner. Det er muliggjort av muligheten til å bygge svært komplekse ALUer på disse prosessorene.
Inndataene til ALU er dataene som operasjonene skal utføres på (kalt operander ) og en kode fra kontrollenheten som indikerer hvilken operasjon som skal utføres. Utgangen er resultatet av beregningen av operasjonen.
I mange design tar eller genererer ALU også som innganger eller utganger et sett med tilstandskoder til eller fra et statusregister . Disse kodene brukes til å indikere tilfeller som bære inn eller ut, overløp , dele på null , etc. [ 2 ]
En flytepunktsenhet , Floating Point Unit ( FPU ), utfører også aritmetikk mellom to verdier, men den gjør det for tall i flytende kommarepresentasjon , som er mye mer komplisert enn de tos komplementrepresentasjon som vanligvis brukes i en ALU. For å gjøre disse beregningene har en FPU flere komplekse kretser innebygd, inkludert noen interne ALUer.
Kretser som utfører aritmetiske operasjoner i heltallsformater (som to-komplement og BCD ) kalles vanligvis ALU-er av ingeniører, mens kretser som beregner i mer komplekse formater som flytende komma , komplekse tall , etc., vanligvis gis et mer komplekst navn. spesifikke, for eksempel FPU.