Tesina di fine corso
Argomento:
Arithmetic Logic Unit (1 bit ALU e 8 bit ALU)
Corso:
Fondamenti di informatica
Professore:
Gregorio Cosentino
Autori:
Enrico Santorio
Luca Macchi
Matteo Langeli
Pierluigi Abiuso
Alessio Calicchia
Carlo Marchetti
Prima di iniziare:
È importante ricordare le funzioni
degli operatori di base; in
particolare:
•Il NOT complementa la variabile in
entrata
•L’AND esegue il prodotto tra
variabili in entrata
•L’OR esegue la somma tra variabili
in entrata
•Il NAND complementa le funzioni
in uscita dell’AND
•Il NOR complementa le funzioni in
uscita dell’OR
•L’OR esclusivo rimanda 1 in uscita
se e solo se le variabili in entrata
sono diverse.
L'unità aritmetica logica (spesso noto come arithmetic logic unit o ALU) è un'unità digitale
preposta all'esecuzione di operazioni aritmetiche o logiche. L'ALU è un elemento fondamentale dei
moderni microprocessori che contengono almeno un'unità ALU al suo interno. Le moderne CPU e
GPU sono dotate di unità ALU molto sofisticate, un singolo processore spesso contiene più ALU.
Il matematico John von Neumann propose il concetto di ALU nel 1945 mentre sviluppava le basi
del computer EDVAC.
Nel 1946 von Neumann lavorò con i suoi colleghi allo sviluppo di un computer per il Princeton
Institute of Advanced Studies (IAS). L'IAS machine fu un sistema che fu utilizzato come
esempio dalla maggior parte dei computer successivi. Durante lo sviluppo delineò l'architettura
generica della macchina che comprendeva il concetto di ALU.
Egli ideò inoltre il concetto di ALU in modo da consentire al computer di eseguire le operazioni
aritmetiche elementari come somma, sottrazione, divisione e moltiplicazione ritenendo ragionevole
sviluppare un'unità specializzata allo scopo.
Sistema numerico :
L'ALU deve processare i numeri utilizzando lo stesso sistema numerico utilizzato dai rimanenti
componenti del computer. Nei moderni computer questa è praticamente sempre la notazione
binaria in complemento a due. I primi computer invece utilizzavano una varietà molto ampia di
sistemi di numerazione come la notazione decimale la notazione con segno e il complemento a uno.
A seconda del sistema di rappresentazione utilizzato lo schema deLL'ALU può variare
significativamente.
Operazioni basilari:
La maggior parte delle ALU sono in grado di eseguire:
Operazioni aritmetiche su numeri intero (addizione, sottrazione, e spesso moltiplicazione e
divisione a volte tramite l'utilizzo di sottrazioni o somme multiple).
Operazioni logiche (AND, OR, NOT).
Operazioni di scorrimento binarie tramite registri a scorrimento.
Operazioni complesse :
Un ingegnere elettronico può progettare un'ALU in grado di eseguire tutte le operazioni logiche e
matematiche immaginabili ma questo comporterebbe degli enormi problemi dato che l'unita
sarebbe molto costosa e lenta. Quindi gli ingegneri devono effettuare delle scelte cercando di
realizzare delle unità potenti ma nello stesso tempo non troppo complesse.
Anche le ALU semplici sono in grado di eseguire operazioni complesse ma richiedono molti cicli di
clock per svolgere le operazioni mentre le ALU complesse eseguono le operazioni in un solo ciclo di
clock.
Input e Output:
Gli input (ingressi) dell'ALU sono i dati da processare (gli operandi) e il codice che attiva l'unità
di controllo che gestisce l'ALU. L'output sono i risultati delle operazioni.
Spesso le ALU sono progettate per generare ingressi e uscite in funzione dei dati elaborati.
Questi dati vengono usualmente raccolti in un registro di stato e sono utilizzati per indicare la
presenza di resto, la divisione per zero, l'overflow etc.
1
1
1
1
Le funzioni F0 e F1
determinano
quale operazione
dovrà svolgere
l’ALU (in questo
caso somma),
disabilitando i fili
che vanno negli
AND degli altri
operatori (AND,
OR, NOT)
10
1 0
1 0
10
1
1
1
1
Essendo operatori “and”
che in input ricevono uno
zero, indipendentemente
dal secondo input, il
risultato sarà zero.
0
0
0
1
0
Il
decodificare
(decoder) ha
così svolto il
compito che
gli avevamo
assegnato,
ovvero quello
di disabilitare
operatori che
non fossero di
somma.
0
1
0
1
1
1
Supponiamo di
calcolare la somma
tra le variabili in
ingresso:
A=1
B=1
Ricordiamo che di
default:
1
EnA=1
EnB=1
InvA=0
0
1
1
1
0
Ricordiamo che
i valori entranti
dei tre
operatori della
logical unit
possono essere
trascurati,
perché
disabilitati.
1
0
1
1 0
1
1
0
0
111
1
1
Il full adder,
valutando le
variabili in
ingresso e non
dimenticandosi
del carry in,
elabora i
risultati relativi
al carry out e
sum che andrà
nell’OR finale.
0
1
0
1
1
11
1
1
1
Ecco così i
nostri
risultati!
Carry in: 1
Output: 1 + 1 =
1
Carry out 1 + 1 =
La tavola di verità
Con la tavola di verità si rappresentano tutte le possibili
combinazioni in uscita a partire dalle diverse variabili in entrata,
tenendo conto di eventuali carry in.
In particolare, studiamo il caso in cui il valore delle variabili in
ingresso non cambia, ma il carry in è uguale a “0”.
0
0
0
111
1
1
0
0
0
1
1
10
0
1
0
Carry in: 0
Output (1 + 1)=
1
Carry out (1 + 1)=
C.V.D.
8 bit ALU
VERSO DI LETTURA
Segnali di controllo (F0 F1 )
Ad ogni ALU arrivano le stesse istruzioni dei segnali di controllo
Variabili in ingresso ( A, B )
Le variabili in ingresso A e B si dividono in due famiglie che rappresentano i
due numeri da 8 digit che noi stiamo , per esempio, sommando. Tra tre slide
vedremo come ognuno di questi digit avrà un peso diverso nella funzione in
uscita.
I Valori di default: EnA, EnB, InvA
Tali valori vengono assunti di default come: InvA=0 EnA=1 EnB=1
Carry Out e Carry In
L’overflow è generato delle operazioni aritmetiche che danno un risultato troppo grande
per essere memorizzato nello spazio che il programmatore aveva messo a disposizione
per il risultato stesso.
Le funzioni di Carry in e Carry out si muovono tra coppie consecutive di ALU,
una volta che il primo Carry in è stato introdotto (di default=0).
Variabili in uscita (output)
Il valore finale delle variabili in uscita compone un numero di otto digit che, per
esempio, è il risultato di una somma. Ogni cifra, l’output di ciascun ALU, ha un peso
diverso all’interno del numero, ovvero rappresenta una diversa potenza di due in codice
binario. Quindi è importante il verso di lettura di un 8-bit ALU, perché ci da l’ordine
delle potenze.
Scarica

Tesina_ALU - Università degli Studi di Roma Tor Vergata