Skip to content

Commit

Permalink
adder
Browse files Browse the repository at this point in the history
  • Loading branch information
andreamazzai authored Nov 1, 2024
1 parent 5b0341d commit 1de4053
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions docs/_docs/97-bin-math.md
Original file line number Diff line number Diff line change
Expand Up @@ -786,54 +786,54 @@ Possiamo ora scrivere le espressioni per i Carry In di tutti gli stadi. L'espres
C<sub>1</sub> = g<sub>0</sub> + p<sub>0</sub>\*C<sub>0</sub>, cioè\
C<sub>1</sub> = A<sub>0</sub>*B<sub>0</sub> + (A<sub>0</sub>+B<sub>0</sub>)\*C<sub>0</sub>

Si noti che questa espressione dipende dunque dai soli input A, B e C<sub>0</sub>.\
Si noti che questa espressione dipende, dunque, dai soli input A, B e C<sub>0</sub>.\
Andiamo ora a scrivere l'espressione per il Carry In del terzo Adder:

C<sub>2</sub> = g<sub>1</sub> + p<sub>1</sub>\*C<sub>1</sub>, cioè, sostituendo C<sub>1</sub>:\
C<sub>2</sub> = g<sub>1</sub> + p<sub>1</sub>\*(g<sub>0</sub> + p<sub>0</sub>\*C<sub>0</sub>), che significa che C<sub>2</sub> non dipende dal risultato dell'Adder precedente, ma solo dagli input A e B dell'Adder precedente e da C<sub>0</sub>. Applicando la proprietà distributiva, si ottiene:\
C<sub>2</sub> = g<sub>1</sub> + p<sub>1</sub>\*g<sub>0</sub> + p<sub>1</sub>\*p<sub>0</sub>*C<sub>0</sub>

Si noti che questa espressione dipende dunque dai soli input A, B e C<sub>0</sub>.\
Si noti che questa espressione dipende, dunque, dai soli input A, B e C<sub>0</sub>.\
Andiamo ora a scrivere l'espressione per il Carry In del quarto Adder:

C<sub>3</sub> = g<sub>2</sub> + p<sub>2</sub>\*C<sub>2</sub>, cioè, sostituendo C<sub>2</sub>:\
C<sub>3</sub> = g<sub>2</sub> + p<sub>2</sub>\*(g<sub>1</sub> + p<sub>1</sub>\*C<sub>0</sub> + p<sub>1</sub>\*p<sub>0</sub>\*C<sub>0</sub>), che significa che C<sub>3</sub> non dipende dal risultato dell'Adder precedente, ma solo dagli input A e B degli Adder precedenti e da C<sub>0</sub>. Applicando la proprietà distributiva, si ottiene:\
C<sub>3</sub> = g<sub>2</sub> + p<sub>2</sub>\*g<sub>1</sub> + p<sub>2</sub>\*p<sub>1</sub>\*C<sub>0</sub> + p<sub>2</sub>\*p<sub>1</sub>\*p<sub>0</sub>\*C<sub>0</sub>

Si noti che questa espressione dipende dunque dai soli input A, B e C<sub>0</sub>.\
Si noti che questa espressione dipende, dunque, dai soli input A, B e C<sub>0</sub>.\
Andiamo ora a scrivere l'espressione per C<sub>4</sub>, che è il Carry Out del quarto Adder:

C<sub>4</sub> = g<sub>3</sub> + p<sub>3</sub>\*C<sub>3</sub>, cioè, sostituendo C<sub>3</sub>:\
C<sub>4</sub> = g<sub>3</sub> + p<sub>3</sub>\*(g<sub>2</sub> + p<sub>2</sub>\*g<sub>1</sub> + p<sub>2</sub>\*p<sub>1</sub>\*C<sub>0</sub> + p<sub>2</sub>\*p<sub>1</sub>\*p<sub>0</sub>\*C<sub>0</sub>), che significa che C<sub>4</sub> non dipende dal risultato dell'Adder precedente, ma solo dagli input A e B degli Adder precedenti e da C<sub>0</sub>. Applicando la proprietà distributiva, si ottiene:\
C<sub>4</sub> = g<sub>3</sub> + p<sub>3</sub>\*g<sub>2</sub> + p<sub>3</sub>\*p<sub>2</sub>\*g<sub>1</sub> + p<sub>3</sub>\*p<sub>2</sub>\*p<sub>1</sub>\*C<sub>0</sub> + p<sub>3</sub>\*p<sub>2</sub>\*p<sub>1</sub>\*p<sub>0</sub>\*C<sub>0</sub>

Si noti che questa espressione dipende dunque dai soli input A, B e CC<sub>0</sub>.
Si noti che anche questa espressione dipende, dunque, dai soli input A, B e C<sub>0</sub>.

Andiamo ora a realizzare un Carry Look Ahead Adder, ma prima modifichiamo i Full Adder considerando quanto visto sopra e creiamo dei Modified Full Adder.

![Modified Full Adder](../../assets/math/modifified-full-adder-1.png){:width="100%"}
![Modified Full Adder](../../assets/math/modifified-full-adder-1.png){:width="20%"}

*Modified Full Adder.*

La somma **Q**, come sempre, corrisponde ad A<sub>0</sub>⊕B<sub>0</sub>⊕C<sub>0</sub>. Aggiungiamo al Full Adder una porta OR e una porta AND con il solo scopo di ottenere i termini p<sub>0</sub> (cioè A<sub>0</sub>+B<sub>0</sub>) e g<sub>0</sub> (cioé A<sub>0</sub>*B<sub>0</sub>).

Vediamo la logica del Carry C1 = gC<sub>0</sub> + pC<sub>0</sub>\*CC<sub>0</sub>:

![Logica del Carry del Modified Full Adder](../../assets/math/modifified-full-adder-2.png){:width="100%"}
![Logica del Carry del Modified Full Adder](../../assets/math/modifified-full-adder-2.png){:width="20%"}

*Logica del Carry del Modified Full Adder.*

Si noti che il Carry Out C1 del primo Adder si trova al livello 3, che significa che il percorso più lungo è rappresentato da una OR che ha in ingresso AC<sub>0</sub> e BC<sub>0</sub>, il cui output pC<sub>0</sub> entra in una AND, il cui output entra in una OR finale dalla quale si ottiene C1. In effetti, a questo punto, siamo come nel RCA, il cui C1 veniva generato al 3° livello.

Aggiungendo il prossimo Modified Full Adder, si verifica che la somma è computata al 4° livello, mentre il Carry è, come nell'adder precedente, computato ancora al 3° livello.

![Modified Full Adder a due stadi](../../assets/math/modifified-full-adder-3.png){:width="100%"}
![Modified Full Adder a due stadi](../../assets/math/modifified-full-adder-3.png){:width="40%"}

*Modified Full Adder a due stadi.*

Proseguendo con il terzo e con il quarto Modified Full Adder, la somma permane al 4° livello, mentre il Carry continua ad essere generato al 3° livello.

![Modified Full Adder a quattro stadi](../../assets/math/modifified-full-adder-4.png){:width="100%"}
![Modified Full Adder a quattro stadi](../../assets/math/modifified-full-adder-4.png){:width="80%"}

*Modified Full Adder a quattro stadi.*

Expand Down

0 comments on commit 1de4053

Please sign in to comment.