Sei sulla pagina 1di 12

CORSO DI LAUREA IN INGEGNERIA INFORMATICA

ELETTRONICA DIGITALE
- Relazione progetto -

Laddizionatore Carry Look-Ahead in linguaggio VHDL

Valerio Colamatteo

Matr.: 0040204

Introduzione.

Oggetto di queste brevi note di approfondimento sar laddizionatore elettronico CLA


(Carry Look-Ahead Adder), in grado, come si vedr, di risolvere alcune delle maggiori
criticit operative messe in evidenza dalle soluzioni alternative di maggiore diffusone, tra
cui, in particolare, il Ripple-Carry Adder (RCA)1.
In coda verranno poi presentati una implementazione in linguaggio VHDL2
accompagnata da alcuni dei risultati grafici di ritenuti di maggior rilievo per lanalisi tecnicoimplementativa scaturente, come si presume, a seguito della lettura attenta di tale lavoro di
sintesi.

La logica implementativa.

Si consideri il Ripple-Carry a 4 bit di seguito schematizzato, e lo si veda in termini


di sottoblocchi elementari Full-Adder (FA)3. il FA pi significativo (i=4) ricever quasi
subito i due bits delle parole da sommare (4 e 4 ), tuttavia il risultato della sua somma non
potr essere considerato attendibile fino a quando a tale FA non giunger anche il carry-in
( ) ad esso relativo, ossia il riporto prodotto allo stadio di appartenenza, il quarto in tal
caso. Ovviamente tale riporto potr essere reso disponibile, stante la conformazione
operativa delladdizionatore, solo allavvenuta ricezione dei carry-out ( ) prodotti,

Questultimo, come a breve evidente, offre performance linearmente dipendenti dalla lunghezza degli
operandi, essenzialmente a causa dei ritardi di propagazione conseguiti nel corso della generazione della catena
dei riporti.
2
VHSIC (Very High Speed Integrated Circuits) Hardware Description Language.
3
Si riportano sinteticamente le relazioni booleane di afferenza per il full-adder: = 1 ,
= + ( ) 1
1

sequenzialmente, dagli stati operativi precedenti.


I ritardi aumentano ovviamente con laumentare del numero di FA, ossia con
laumento della lunghezza delle parole da sommare.
Il CLA tenta di aggirare il problema in questione facendo in modo che ogni FA riceva
il proprio carry-in non dal FA precedente, bens da unapposita rete combinatoria in grado
di computarlo. Prende vita dunque, da tali premesse, il sommatore Carry Look-Ahead, un
sommatore elettronico digitale dalla velocit di calcolo estremamente elevata nonch
indipendente dalla lunghezza dei singoli addendi.
Il CLA si compone essenzialmente di due blocchi circuitali fondamentali:

Una catena di FA, atta a realizzare le varie somme tra le coppie di bit4;

Una rete combinatoria (Look Ahead Carry Generation Logic - LAC),


destinata al computo dei riporti da fornire in avanti ai vari FA.

Nel caso di specie, diagrammato schematicamente nella figura in basso (CLA-8 bit), sono necessari 8 FA.

Osservando linfo-grafica soprastante si apprezza come le parole da sommare


vengano sia cedute ai vari FA, sia alla catena superiore per il calcolo dei riporti, la quale si
serve, per lappunto, dei bit di tali parole per prevedere i riporti da fornire poi, in via
anticipata, a ciascun FA. Si noti, infatti, come le uscite dei vari FA non siano di fatto in
alcun modo impiegate, mentre gli ingressi prelevano i valori direttamente dalla logica
LAC5.
Non resta dunque che analizzare la costruzione logica del LAC. Il calcolo del riporto
da fornire allo stadio (i+1)-esimo passa attraverso le due funzioni logiche Generate e
Propagate. Pi dettagliatamente, a riguardo:

La funzione Generate. Quando entrambi e valgono 1, lo stadio i-esimo


dovr generare il riporto da propagare allo stadio successivo. Ovvero, se =
= 1, indipendentemente dal valore di (che influisce solo sul termine
) il riporto in uscita = deve valere necessariamente 1. Se poi
vale

1,

allora

acquisir

valore

1,

altrimenti

il

valore

0.

La funzione Generate indica pertanto quando lo stadio i-esimo genera esso


stesso il riporto da fornire allo stadio (i+1)-esimo, e vale perci:
=
Quando

= 1,

devessere

= 1,

cio

devessere

fornito

(indipendentemente dal valore di ) il riporto allo stadio successivo.


Il FA meno significativo chiaramente non ha bisogno di alcuna logica che ne calcoli lingresso carry-in.
Discorso analogo per il Ripple-Carry precedente.
5

Funzione Propagate. La casistica tale per cui = 0, non pu ad ogni modo


escludere la presenza di un riporto da propagare allo stadio successivo.
Supponiamo infatti che uno fra e valga 16. In tale fattispecie, il riporto
da fornire allo stadio (i+1)-esimo coinciderebbe col . Infatti, se
valesse 1, si avrebbe certamente = 0 e = 1. Viceversa ( = 0), si
avrebbe =1 e = 0.
La funzione Propagate assume dunque importanza proprio nel caso
esaminato, ovvero quando oppure valgono 1. Essa risulta essere quindi:
= +
La funzione segnala quando il riporto prodotto dallo stadio i-esimo non viene
generato da questultimo, bens da stadi precedenti, ed in tal caso viene
propagato dallo stadio i-esimo verso lo stadio successivo.
Quando cio = 1, la funzione di propagazione attiva, e dunque lo stadio
iesimo fornir come riporto allo stadio (i+1)-esimo quello che ricever dallo
stadio (i-1)-esimo.

Rimane da analizzare il caso in cui entrambi e valgono 0: in questa condizione,


entrambe le funzioni Generate e Propagate valgono 0. Ma questo ha un senso, perch in
effetti se entrambi e sono 0 il riporto in si esaurisce allo stadio i-esimo, ovvero
nessun riporto devessere fornito allo stadio successivo ( = 0).
Riassumendo, occorre per unequazione logica in grado di soddisfare le condizioni
seguenti:

deve valere 1 quando vale 1;

deve valere quando vale 0 e vale 1;

deve valere 0 quando entrambe e valgono 0.

La casistica in cui entrambi i valori in questione valgano uno si pu apriori escludere, poich se cos fosse
varrebbe automaticamente 1 anche la Generate, e quindi anche luscita .

In definitiva risulta:
= + +1 = + = 1 + 1 1

Il problema dei riporti.

La logica LAC, come mostrano le equivalenze appena mostrate, fa s che i vari riporti
possano essere agevolmente ricavati in via iterativa, ovvero, ad es. (ricordando che il carryin del primo FA coincide con il dellintero sommatore):
1 = ;
2 = 0 + 0 0 ;

= 1 + 1 1 ;
La struttura della logica LAC risulterebbe dunque essere di agevole complessit
elaborativa se si sfruttassero le funzioni 1 ai livelli i-esimi. Tuttavia, tali funzioni non
possono essere utilizzate, perch darebbero luogo al seguente problema di fondo:
Sebbene infatti il carry-in del livello i-esimo non dipenda pi dal carry-out del livello
(i-1)-esimo (come accadeva nel Ripple-Carry), esso verrebbe a dipendere dal carry-in del
livello (i-1)-esimo, da calcolare anchesso con conseguente perdita di tempo per lo stadio iesimo. I livelli di logica cos coinvolti nella funzione aumenterebbero di numero
allaumentare del valore dellindice i, con conseguente inevitabile aumento del tempo di
calcolo della funzione stessa. Entrambe le problematiche per possono essere risolte al
prezzo di aumentare la complessit del circuito: sufficiente infatti, a livello i-esimo, non
fare uso delle funzioni 1 fornite dai livelli precedenti, bens, banalmente, ricalcolarle
tutte.

Cos facendo si ottengono le seguenti funzioni:


0 = ;
1 = 0 +0 0 ;
2 = 1 +1 1 = 1 + 1 (0 + 0 ) = 1 + 0 1 + 0 1 ;
2 = 1 +1 1 = 1 + 1 (0 + 0 ) = 1 + 0 1 + 0 1 ;

7 = 6 +6 6 =
= 6 + 5 6 + 4 5 6 + 3 4 5 6 + 2 3 4 5 6 + 1 2 3 4 5 6
+ 0 1 2 3 4 5 6 + 0 1 2 3 4 5 6 ;

Le precedenti sono tutte funzioni a due livelli di logica (che diventano tre se
consideriamo anche il livello singolo delle funzioni Generate e Propagate), pertanto sono
estremamente veloci. Inoltre, le velocit di calcolo delle funzioni si equivalgono, ovvero
in prima approssimazione calcolare 1 richiede lo stesso tempo necessario per il computo
di 7 (poich entrambe sono funzioni a tre livelli appunto). Tuttavia, la complessit della
rete che realizza lultima funzione evidentemente molto maggiore di quella che realizza la
prima7. La complessit delle reti coinvolte nel calcolo dei riporti aumenta a dismisura con
laumentare della lunghezza delle parole da sommare, ma la velocit computazionale del
sommatore CLA si mantiene elevata ed indipendente da tale lunghezza. Ovvero, se
vogliamo, il funzionamento esattamente speculare di quello del sommatore Ripple-Carry,
dove allaumentare di N aumentava la lentezza ma rimaneva costante la complessit del
circuito (peraltro estremamente bassa).

infatti, 7 (per poter essere a 3 livelli di logica) richiede ben 7 porte AND ad ingressi via via crescenti (da
2 fino a 8), ed una porta OR da 8 ingressi.
7

La realizzazione in VHDL.

Si riporta, infine, il codice appositamente realizzato per laddizionatore CLA in


linguaggio VHDL. Unitamente ad esso vengono inserite anche le realizzazioni RTL e WWF8.
Urge infine sottolineare come, consapevolmente, il materiale seguente non sia
accompagnato da alcuna adeguata esplicativa supplementare.

Tutte le simulazioni saranno da intendersi con un tempo di clock di 10ns e un end-time fissato a 200ns.

Potrebbero piacerti anche