En aritmetisk og logisk enhet eller aritmetisk-logisk enhet ( akronym ALU , fra engelsk " a rithmetic and l ogic unit " eller " a ritmetic- l ogic nit "), i informatikk , er en spesiell type digital prosessor som aritmetiske eller logiske operasjoner .
ALU er en grunnleggende komponent i CPU , GPU og DSP , og finnes både i von Neumann-arkitekturen ( maskinvarearkitekturen som de fleste moderne datamaskiner er basert på) og i den mindre utbredte Harvard-arkitekturen . For øyeblikket er ALU vanligvis implementert som en del av en monolitisk mikroprosessor . Moderne CPUer og GPUer er utstyrt med svært sofistikerte ALUer, og en enkelt mikroprosessor kan inneholde enda mer enn én ALU.
Matematiker John von Neumann foreslo konseptet ALU i 1945 mens han utviklet grunnlaget for EDVAC -datamaskinen .
I 1946 jobbet von Neumann sammen med sine kolleger på utviklingen av en datamaskin for Princeton Institute of Advanced Studies (IAS). IAS-maskinen var et system som ble brukt som eksempel av de fleste senere datamaskiner . Under utviklingen skisserte von Neumann den generiske arkitekturen til maskinen, arkitekturen inkluderte konseptet ALU.
Von Neumann utviklet konseptet ALU for å la datamaskinen utføre grunnleggende aritmetiske operasjoner som addisjon, subtraksjon, divisjon og multiplikasjon. Von Neumann fant det rimelig å utvikle en spesialisert enhet for formålet. [1]
ALU må behandle tall ved å bruke det samme nummersystemet som brukes av resten av datamaskinkomponentene. I moderne datamaskiner er dette praktisk talt alltid binær tos komplementnotasjon . Imidlertid brukte tidlige datamaskiner et veldig bredt utvalg av nummereringssystemer som desimalnotasjon , signert notasjon og enkomplement .
Avhengig av representasjonssystemet som brukes, kan ALU-ordningen variere betydelig.
Mange av operasjonene som utføres av datamaskinen utføres av ALU, som henter dataene fra prosessorregistrene , behandler dataene i akkumulatoren og lagrer resultatet i utgangsregisteret. Andre strukturer overfører dataene fra registrene til hovedminnet. [2]
En kontrollenhet styrer ALUen gjennom kontrollsignaler som aktiverer enhetene som er inneholdt i ALUen.
De fleste ALU-er er i stand til:
En elektronisk ingeniør kan designe en ALU som er i stand til å utføre alle de logiske og matematiske operasjonene man kan tenke seg, men dette vil føre til enorme problemer da enheten vil være veldig dyr og treg. Så ingeniørene må ta valg for å prøve å lage kraftige, men samtidig ikke for komplekse enheter. For eksempel, for å utføre kvadratrotoperasjonen, finner ingeniører seg i stand til å følge følgende stier:
Alternativene som er oppført spenner fra de raskeste (og dyreste) til de minst raske (og billige). Så selv enkle ALUer er i stand til å utføre komplekse operasjoner, men krever mange klokkesykluser for å utføre operasjonene mens komplekse ALUer utfører operasjoner i en enkelt klokkesyklus.
Dataprosessorer implementerer alternativ 1 for enkle operasjoner, alternativ 2 for de fleste operasjoner, og alternativ 3 for ekstremt komplekse og sjeldne operasjoner. Dette tillates av tilstedeværelsen av svært komplekse ALU-er, i stedet implementerer enkle prosessorer, for eksempel for innebygde applikasjoner, ofte løsning 3 selv for operasjoner med middels kompleksitet mens de ikke naturlig administrerer komplekse operasjoner og overlater dem til programmereren (alternativ 5).
Inngangene (inngangene) til ALU er dataene som skal behandles (operanden) og koden som aktiverer kontrollenheten som administrerer ALU. Utgangen er resultatet av operasjonene.
ALUene er designet for også å generere noen utganger som signaliserer bestemte oppnådde resultater. Disse utgangene, kalt flagg, samles vanligvis i et statusregister og brukes til å indikere tilstedeværelsen av rest, divisjon med null, overløp , resultat lik null osv. [2] Disse flaggene brukes til å endre flyten av programkjøring gjennom betingede hopp. Så typen resultat som er oppnådd kan brukes til å kontrollere forhold: for eksempel ved å trekke fra to tall får jeg resultatet null hvis de er like. Nullflagget er aktivert, og en påfølgende hoppinstruksjon kan utføre hoppet hvis nullflagget er aktivert, eller fortsette uten hopp hvis nullflagget ikke er aktivert. If..then ... else, looper og andre programmeringskonstruksjoner er basert på kombinasjonen av flaggmekanismen og betingede hopp.
FPU er en enhet designet for å utføre aritmetiske operasjoner på flyttall . Siden flyttallsrepresentasjonen er mye mer kompleks enn de tos komplementrepresentasjon som vanligvis brukes av ALUer. Faktisk har FPUer en tendens til å være mye mer komplekse enn ALUer, de inkluderer veldig komplekse kretser og ofte enda flere ALUer.
Vanligvis har ingeniører en tendens til å definere ALUer som enheter som er i stand til å utføre operasjoner på heltall, mens enheter som utfører operasjoner på flyttall, komplekse tall, etc. de får mindre generiske navn.