Professional Documents
Culture Documents
Giovanni Stea
a.a. 2013/14
Ultima modifica: 06/12/2013
1.2.1
1.2.2
Complemento ..................................................................................................................... 13
Circuito logico per loperazione di complemento ......................................................... 14
Moltiplicazione e divisione per una potenza della base..................................................... 16
2.2.1
2.2.2
2.2.3
Modulo k....................................................................................................................... 18
2.3
2.4
Addizione ........................................................................................................................... 19
2.4.1
2.4.2
2.4.3
Incrementatore ............................................................................................................... 25
2.4.4
2.4.5
2.4.6
2.5
Sottrazione ......................................................................................................................... 27
2.5.1
2.5.2
2.6
Moltiplicazione .................................................................................................................. 30
2.6.1
2.6.2
2.6.3
Esercizio ......................................................................................................................... 35
2.7
Divisione ............................................................................................................................ 36
2.7.1
2.7.2
2.7.3
3.2
3.2.1
4
4.3
4.4
4.4.1
4.5
4.5.1
4.6
Somma ............................................................................................................................... 62
4.7
Sottrazione ......................................................................................................................... 65
4.7.1
4.8
4.8.1
4.8.2
Moltiplicazione .............................................................................................................. 67
4.8.3
Divisione ........................................................................................................................ 68
4.9
4.9.1
Valore assoluto................................................................................................................... 54
4.2
4.3.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
Soluzione........................................................................................................................ 84
Esercizio Gennaio 2008 (numeri naturali) ...................................................................... 85
6.2.1
6.3
Soluzione........................................................................................................................ 86
Esercizio Febbraio 2005 (numeri naturali) ..................................................................... 87
6.3.1
6.4
Soluzione........................................................................................................................ 87
Esercizio Giugno 2004 (numeri interi) ........................................................................... 88
6.4.1
6.5
Soluzione........................................................................................................................ 89
Esercizio Settembre 2012 (numeri interi) ....................................................................... 89
6.5.1
Soluzione........................................................................................................................ 90
Version history
-
06/12/13: Aggiunto lesercizio 2.7.3 svolto a lezione. Modifiche cosmetiche su cose dette
a lezione.
A = ai i .
i=0
Notazione posizionale significa che, nella rappresentazione di un numero naturale, una cifra contribuisce a determinare il numero in modo differente a seconda della propria posizione. Infatti, a
seconda della propria posizione sar moltiplicata per una differente potenza della base.
La notazione posizionale non lunico modo possibile di rappresentare i numeri. Fino al 1200 in
Europa sono stati usati i numeri romani, nei quali ogni simbolo ha un valore indipendente dalla
propria posizione (sistema additivo). Fu peraltro un pisano, Leonardo Fibonacci, ad introdurre in
Europa la notazione posizionale, avendola appresa dagli Arabi.
Esempio: sistema numerico decimale
= 10 . Le cifre sono {0,1,2,3, 4,5,6,7,8,9} . ( 2042 )10 = 2 100 + 4 101 + 0 102 + 2 103
A ben guardare, quando dico il numero 54 sto in realt menzionando contemporaneamente:
- il numero naturale, quale concetto intuitivo
- la sua rappresentazione in base 10 in notazione posizionale.
Dovremmo tener distinte le due cose, a rigor di logica. In pratica impossibile, e quindi non lo
faremo.
Esempio: sistema numerico esadecimale
(1A2 F )16 = ( F )16 (160 )10 + ( 2 )16 (16 )10 + ( A)16 (162 )10 + (1)16 (163 )10
= (15 )10 (160 ) + ( 2 )10 (16 )10 + (10 )10 (162 ) + (1)10 (163 )
10
10
10
Dimostrazione
Esistenza: Dimostriamo che una coppia di numeri con queste caratteristiche esiste sempre. Si prende lasse dei numeri interi e lo si divide in blocchi n , ( n + 1) , n .
n = 1
n = 2
2
n =1
n=0
n=2
2
Linsieme di questi intervalli ricopre tutto quanto lasse dei numeri interi. n , ( n + 1) .
n
Pertanto, il numero x fa parte di un intervallo, sia il q -simo. Allora q x < ( q + 1) . Definisco allora r = x q , ed ho garanzia che 0 r < . Ho quindi dimostrato che una tale coppia
esiste sempre.
( q2 , r2 )
( q1 q2 ) = r2 r1 .
( q1, r1 )
r modulo beta
x
1) x + k = x , k . Infatti x = + x , e quindi x + k = + k + x . Ma
x
+ k sempre un numero intero, e x sempre un numero compreso tra 0 e 1 . Quindi,
per lunicit del teorema della divisione con resto, quelli sono quoziente e resto della divisione per
di x + k .
2) x = x
+A
x y =
(x
. Infatti,
+ qx ) ( y + q y ) = x y + ( x q y ) + ( y qx ) + qx q y 2
= x y + k
A = ai i .
i=0
Le trovo applicando iterativamente il teorema del resto (algoritmo delle divisioni successive, o
MOD & DIV):
A = q1 + a0
q1 = q2 + a1
...
qn 1 = 0 + an 1
Mi fermo, ovviamente, quando lultimo quoziente nullo. A quel punto, la n-upla di resti, letta dal
basso verso lalto, costituisce linsieme di cifre che rappresentano lintero A in base . Vediamo
di dimostrarlo:
Sostituendo a qi la propria definizione, si ottiene:
A = a0 + q1 = a0 + a1 + ( a2 + (...) )
n 1
E quindi A = ai i .
i =0
Inoltre, il teorema della divisione con resto garantisce anche che la n-upla di cifre che ho trovato
unica.
Infatti,
supponiamo
per
assurdo
che
ne
esistano
due
A ( an 1an 2 ...a1a0 ) ,
A ( bn 1bn 2 ...b1b0 ) . Supponendo quindi che esistano A ( an 1an 2 ...a1a0 ) , A ( bn 1bn 2 ...b1b0 ) ,
tali che
n 1
n 1
i =0
i=0
ai i = bi i , si ottiene che:
n2
n2
a0 + ai +1 i = b0 + bi +1 i
i =0
i =0
n2
a0 + ai +1 i = b0 + bi +1 i
i=0
i =0
n 2
n 2
i =1
i =1
a1 + ai +1 i 1 = b1 + bi +1 i 1
Ma allora anche a1 = b1 , e cos via per tutti gli altri. Pertanto la rappresentazione unica.
Peraltro, quella trovata prima una maniera algoritmica di trovare le cifre della rappresentazione di
un numero naturale in una qualunque base.
Quante cifre servono?
A
A A a + a + 2 q2 a0 + a1
qi = i . Infatti, q1 = , 2 = 0 1 2
=
+ q2 = q2 etc.
2
Quindi, se 2 , n : qn = 0 . Il che conferma che lalgoritmo termina sempre. Basta sempre un
numero finito di cifre. Prendiamo il pi piccolo n che verifica quella propriet, cio quello per cui
qn 1 0, : a questo punto, n 1 A < n . Ho quindi bisogno di n cifre per rappresentare A in base
, quello che ottengo quando tutte le cifre hanno valore massimo, cio ai = 1 . Infatti, si
ottiene:
n 1
n 1
n 1
n 1
i=0
i=0
i=0
i =1
i =0
A = ( 1) i = i +1 i = i i = n 1
Questo un modo di rappresentare n 1 . Ma visto che rappresentazione unica, la rappresentazione di n 1 .
A 3 = 0 se e solo se
n 1
i =0
sue cifre.
3) Estendere la precedente dimostrazione al caso di numero A in base > 2 generica: sia
A = ( an 1 a0 ) un numero naturale rappresentato su n cifre in base , > 2 , dimostrare che
A = 0 se e solo se
n 1
a
i =0
Si osservi che, per = 10 , si ricava il (noto) criterio di divisibilit per tre dei numeri naturali.
4) Dato A in base su n cifre dimostrare che A ( +1) = 0 se e solo se
n 1
( 1) a
i=0
= 0 . Si
( +1)
osservi che, per = 10 , si ricava il (probabilmente poco noto) criterio di divisibilit per undici
dei numeri naturali.
Nota: per risolvere i punti 2, 3, 4, pu far comodo avvalersi della (nota) formula dello sviluppo di
binomio di Newton, qui richiamata per facilitare lo studente:
n n
n
a
+
b
=
(
) a n k b k
k = 0 k
Soluzione
10
Che tipo di reti logiche saranno quelle che andr a costruire? Saranno reti combinatorie, in quanto
ad ogni stato di ingresso (operandi di unoperazione) corrisponder uno stato di uscita (risultato
delloperazione).
Se > 2 , ci vorranno un certo numero di variabili logiche per codificare una cifra in base
stringa di 4 bit.
J x3 x2 x1 x0
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
stato di uscita: 0001 0000 (codifica BCD delle due cifre del risultato)
Questo circuito non ha eseguito la somma in base 2 degli ingressi. Se lo avesse fatto, avrebbe
dovuto produrre
-
unuscita pari a 01010 , che effettivamente la somma degli ingressi, considerati come numeri in base 2.
Per poterlo fare, necessario dotarsi di una notazione indipendente dalla base.
Per rappresentare graficamente il fatto che un numero A individuato da una serie di n cifre in base
, scriveremo:
Ciascuna di queste doppie frecce rappresenta il numero di variabili logiche necessario a codificare
una cifra in base . Per esempio, per = 10 avremmo quattro variabili logiche per cifra. Nel caso
particolare = 2 useremo invece frecce singole, perch una cifra in base 2 pu essere codificata da
una variabile logica.
12
J x3 x2 x1 x0
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
2.1 Complemento
unoperazione particolarmente ricorrente, anche se a prima vista sembra inutile. Dato un numero
A ( an 1an 2 ...a1a0 ) , rappresentato in base su n cifre, 0 A < n , definisco complemento di A
n 1
n 1
i =0
i =0
i =0
A = ( 1) i ai i = ( 1 ai ) i
n 1
Ma:
Basta quindi che sappia fare una rete che fa il complemento di una singola cifra. Vediamo come
sono fatte le reti nelle varie basi.
In base =2, tale rete estremamente semplice. Infatti, la rete elementare che:
-
se la cifra 1 ritorna 0
se la cifra 0 ritorna 1
Cio la porta elementare NOT. In base 2 il complemento di un numero su n cifre si fa con una
barriera di n invertitori. Ci accade perch le cifre in base 2 (0, 1) sono codificate in termini di una
singola variabile logica.
Vediamo adesso di ragionare in base 10. Scegliamo una codifica, e vediamo come si sintetizza la
rete che realizza il complemento di una singola cifra in quella codifica. Scegliamo lunica che
conosciamo, cio la BCD (detta anche 8421, dal peso associato a ciascuna cifra).
14
X
J x3 x2 x1
0 0 0 0
1 0 0 0
2 0 0 1
3 0 0 1
4 0 1 0
5 0 1 0
6 0 1 1
7 0 1 1
8 1 0 0
9 1 0 0
Vediamo di affrontarne la sintesi. Per fare le
X
x0 z 3 z 2 z 1 z 0
0 1 0 0 1
1 1 0 0 0
0 0 1 1 1
1 0 1 1 0
0 0 1 0 1
1 0 1 0 0
0 0 0 1 1
1 0 0 1 0
0 0 0 0 1
1 0 0 0 0
cose bene andrebbe
J
9
8
7
6
5
4
3
2
1
0
usata 4
naugh (una per ciascuna uscita). Per mi interessa arrivare ad una sintesi qualunque, non fare quella
a costo minimo, e quindi posso procedere a occhio, a rischio di fare una sintesi non ottima:
-
si vede al volo che z2 = x1 x2 (posso scriverlo perch ci sono degli stati non specificati)
Quindi, per fare il complemento di una cifra in base 10 codificata BCD si deve usare un po di
logica. Non troppa, ma un po s.
Ai fini della realizzazione del complemento in modo efficiente, si possono pensare altre codifiche
per la base 10, dette autocomplementanti. Una codifica si dice autocomplementante quando il
complemento della rappresentazione uguale alla rappresentazione del complemento, quando cio posso ottenere il complemento di una cifra semplicemente facendo il complemento delle
variabili logiche che la codificano. La codifica BCD non autocomplementante.
X
J x3 x2 x1 x0
0 0 0 1 1
1 0 1 0 0
2 0 1 0 1
3 0 1 1 0
4 0 1 1 1
5 1 0 0 0
6 1 0 0 1
7 1 0 1 0
8 1 0 1 1
9 1 1 0 0
2
J x3
0 0
1 0
2 0
3 0
4 0
5 1
6 1
7 1
8 1
9 1
X
4 2 1
x2 x1 x0
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Per tali due posso utilizzare circuiti di complemento fatti da una barriera di invertitori, pi semplici dei precedenti.
Osservazione (importante):
-
Come faccio il complemento di una cifra in base dipende dalla base e dalla codifica.
Nel seguito di questa parte del corso descriveremo propriet della notazione posizionale che consentono, come quella vista adesso, di scindere problemi complessi in sottoproblemi pi semplici,
in maniera indipendente dalla base e dalla codifica.
Quando, in base 10, devo calcolare 25x1000, faccio forse i conti? No, metto tre zeri in fondo
al numero.
Quando devo calcolare 2562/100, resto e quoziente, faccio forse i conti? No: il resto 62, ed
il quoziente 25.
n 1
n 1
i =0
i =0
i=0
i =1
che ho appena dimostrato che sta su n+1 cifre, dalla precedente uguaglianza ottengo:
Y ( yn yn 1... y0 ) ( xn 1 xn 2 ...x0 0 ) . Quindi, si ottiene:
1 i n
x
yi = i 1
i=0
0
Questa una soluzione della precedente uguaglianza. Visto che la rappresentazione di un numero in
una data base unica, allora questa lunica soluzione. Quindi: Y ( xn 1 xn 2 ...x0 0 ) . La rete che
implementa questa cosa a complessit nulla (shift). Cos come il procedimento mentale per
ottenere i risultati di complessit nulla, possiamo sintetizzare una rete di complessit nulla che
esegue questo procedimento.
17
k i n + k 1
0 i k 1
Su quante cifre sta il risultato? X n 1 Y n 1 1 < n 1 , cio Y rappresentabile sicuramente su n-1 cifre
n 1
n 1
i
i
x
x
+
n 1
i 0 xi x n 2
n2
i =1
=
= 0 + xi +1 i = xi +1 i . Lultimo pasX = xi i Y = i = 0
i =0
i =0
i =0
saggio deriva dal fatto che x0 < 1 e la sommatoria un numero intero. Quindi, si ottiene:
yi = xi +1 , 0 i n 2
Anche in questo caso loperazione richiede una rete di complessit nulla:
Ed anche in questo caso, il tutto si generalizza alla divisione per k . Il numero risultante ha n k ,
cifre, corrispondenti alle n k cifre pi significative di X .
yi = xi + k , 0 i n 1 k
2.2.3 Modulo k
Dato X ( xn 1 xn 2 ...x0 ) , definisco Y = X
-
X n 1 Y n 1
18
X = xi i Y =
i =0
n 1
xi i
i=0
=
k
k 1
n 1
i=0
i =k
xi i + xi i
=
k
k 1
n 1 k
i=0
i =0
xi i + k
k 1
= xi i .
xi + k i
k
i=0
Quindi, si ottiene: yi = xi , 0 i k 1
Anche in questo caso loperazione richiede una rete di complessit nulla:
Quindi, dati due numeri Y e Z , rispettivamente a k ed n-k cifre, loperazione di concatenamento X = Z k + Y , che produce un numero su n cifre, di complessit nulla.
Allo stesso modo, ha complessit nulla loperazione inversa di scomposizione di un numero su n
cifre in due blocchi di k ed n-k cifre. Useremo spesso queste due operazioni.
2.4 Addizione
Riprendere la somma in base 10. Algoritmo imparato alle elementari.
19
Il riporto vale sempre 0 o 1. Per la prima coppia di cifre (quelle meno significative), possiamo assumerlo
nullo.
Dimostriamo adesso che lutilizzo di questo algoritmo non dipende dalla base di rappresentazione, ma soltanto dal fatto che usiamo una notazione posizionale. Pu pertanto essere usato per
sommare numeri in base qualunque.
Dati X , Y in base su n cifre, quindi 0 X , Y n 1 , e dato Cin , 0 Cin 1 , voglio calcolare
il numero Z = X + Y + Cin . Il termine Cin , che a prima vista non sembra essere di una qualche
utilit, gioca invece un ruolo fondamentale, in quanto consente di rendere loperazione modulare.
0 X + Y + Cin 2 n 1 n +1 1 , visto che 2 . Quindi, Z rappresentabile sempre su n+1
Ma, visto che Z 2 n 1 , per lunicit della rappresentazione deve essere Cout < 2 . Quindi, visto
che un numero naturale, abbiamo che Cout {0,1} , e questo vero indipendentemente dalla
base.
Quindi: la somma di due numeri naturali espressi in base su n cifre, pi un eventuale riporto entrante che vale zero o uno, produce un numero naturale che sempre rappresentabile
con n+1 cifre in base , l(n+1)sima delle quali, detta riporto uscente, pu essere soltanto zero o
uno.
Posso quindi pensare di costruire un circuito che fa la somma di due numeri in base su n cifre.
Y
n
Cout
Cin
Frecce singole
(sono bit)
n
S
Questo circuito una rete combinatoria. Ovviamente, se n elevato, o se > 2 , sar molto complessa da sintetizzare. Vediamo di scomporre il problema della somma in sottoproblemi pi
semplici.
Scompongo le rappresentazioni di X ed Y in due parti distinte (operazione a costo nullo):
X = Xh l + Xl
Y = Yh l + Yl
Con X l , Yl su l cifre, e X h , Yh su n-l cifre, 1 l n .
3
4
Ch n l + Sh = X h + Yh + Cl
Cl l + Sl = X l + Yl + Cin
Posso allora scrivere la somma finale come:
X + Y + Cin = ( X h + Yh ) l + X l + Yl + Cin
= ( X h + Yh ) l + Cl l + Sl
= ( X h + Yh + Cl ) + Sl
l
= ( Ch n l + S h ) l + S l
2
3
= Ch n + ( S h l + S l )
= Cout n + S
4
5
Posso quindi scomporre la somma in base su n cifre in somme in base su un minor numero di cifre, purch:
- esegua le somme partendo dai gruppi di cifre meno significativi
- sia in grado di propagare il riporto tra un gruppo ed il successivo.
Il circuito disegnato sopra si chiama, appunto, ripple carry (propagazione del riporto)
Tirando tutto questo alle sue estreme conseguenze, posso realizzare un sommatore in base su n
cifre utilizzando n sommatori in base ad una cifra (full adder) e propagando il riporto in uscita
dallo stadio j-simo in ingresso allo stadio j+1.
se il riporto zero, la somma rappresentabile su n cifre, cio sul numero di cifre degli
operandi
Listruzione macchina ADD, infatti, setta il CF quando il risultato non un numero naturale rappresentabile su n cifre.
22
Xi
Yi
Cout
Cin
Si
xi
0
0
0
0
1
1
1
1
yi cin
0 0
0 1
1 0
1 1
0 0
0 1
1 0
1 1
-
si cout
0 0
1 0
1 0
0 1
1 0
0 1
0 1
1 1
cin
0
xiyi
si
00
01
11
10
cin
xiyi
cout
00
01
11
10
0
C
B
1
Per quanto riguarda la produzione del riporto uscente, non ci sono problemi: si pu fare in
forma SP con 3 porte AND a 2 ingressi ed una porta OR a tre ingressi.
Per quanto riguarda la produzione della somma si, osservo che essa ad uno se e solo se il
numero di 1 in ingresso dispari.
Per questultimo, esiste una semplice realizzazione, fatta tramite porte XOR. Mettere pi porte
XOR in cascata (eventualmente ad albero) consente di fare circuiti che riconoscono un numero
dispari di 1, che cio danno 1 quando lo stato di ingresso ha un numero dispari di 1.
( n 1)
In totale, lultimo bit del risultato e lultimo riporto uscente vengono prodotti ad un istante n .
lo stesso problema che si sperimenta quando si fanno le somme a mano. Se dobbiamo sommare
numeri a 50 cifre, la 50ma somma pu essere fatta solo quando ho il riporto della 49-ma.
Lalgoritmo di somma scomponibile, ma purtroppo non parallelizzabile.
Si pu fare qualcosa? Certo che s. Possiamo investire risorse per aggiungere un circuito che, presi
in ingresso i j bit meno significativi di entrambi i numeri produce il riporto j-simo in uscita.
Questo circuito combinatorio, pur complesso, lo posso sintetizzare a due livelli di logica. In questo modo, la parte alta del circuito pu iniziare prima il proprio lavoro, in quanto dispone del
riporto entrante allistante = 2 invece che j ).
24
ovvio che:
- dovr sintetizzare un circuito complesso (che ha, in questo caso, 9 ingressi ed 1 uscita), ed in
teoria non strettamente necessario (in quanto il carry j-simo sarebbe comunque prodotto).
- questo circuito mi consente di anticipare la generazione del carry per gli stadi successivi.
Quanto mi conviene fare grande il lookahead? Ci sono ovvi limiti di fattibilit (un lookahead a 32
bit non troppo pi semplice da sintetizzare che un sommatore a 32 bit). Farlo pi grande della
met del numero di bit non serve, perch la parte pi grande del circuito fa il passo.
2.4.3 Incrementatore
Un incrementatore un circuito combinatorio che somma
Cin (che vale 0 o 1) ad un numero dato. Possiamo pensare
che tale incremento sia un caso particolare di somma con
riporto tra due addendi ad n cifre, in cui uno dei due
addendi nullo. Pertanto, lo possiamo realizzare scomponendo il tutto in n moduli full adder. Per questi moduli
hanno un ingresso (yi) che sempre nullo. Quindi posso
semplificarli.
Questo un circuito pi semplice del full adder (ad un solo livello di logica).
25
Soluzione
Soluzione
26
b=0
b =1
La variabile c vale 1 se il risultato delloperazione scritta tra i non rappresentabile su una cifra in
base 5 e 0 altrimenti.
c
00
01
11
10
x1 x0
b x2
00
00
01
01
11
11
10
10
y2 y1 y0
00
01
11
10
2) Sintetizzare la sottorete che genera y0 a costo minimo sia a porte NAND sia a porte NOR
3) Calcolare il costo delle due realizzazioni (sia a porte che a diodi), e specificare quale delle due
sia di costo minore.
Soluzione
2.5 Sottrazione
Riprendere la differenza in base 10. Algoritmo imparato alle elementari.
27
Il prestito vale sempre 0 o 1. Per la prima coppia di cifre (quelle meno significative), possiamo assumerlo
nullo.
Questo algoritmo non dipende dalla base di rappresentazione, ma soltanto dal fatto che usiamo
una notazione posizionale. Pu pertanto essere usato per sottrarre numeri in base qualunque.
Dati X , Y naturali in base su n cifre, quindi 0 X , Y n 1 , e dato bin , 0 bin 1 , voglio
calcolare il numero naturale Z = X Y bin .
Tanto per cominciare, n X Y bin n 1 . Quindi, Z pu anche non essere un numero
naturale, cosa che sappiamo bene dallaritmetica (i naturali non sono un insieme chiuso rispetto
alla sottrazione). Comunque, X Y bin diviso per n d quoziente al minimo -1. Pertanto definisco:
X Y bin
bout =
, D = X Y bin
n
ed ottengo che bout {0,1} , ancora una volta indipendentemente dalla base. Quindi, posso scrivere
Z = bout n + D = X Y bin
Quindi: la differenza di due numeri naturali espressi in base su n cifre, meno un eventuale
prestito entrante, produce un numero che, se naturale, sempre rappresentabile su n cifre in
base . Pu inoltre produrre un numero non naturale, nel qual caso c un prestito uscente.
In ogni caso il prestito uscente pu valere soltanto zero o uno.
(1 bout ) n + D = X + Y + (1 bin )
Come si interpreta questa equazione? Dicendo che:
+
bout
+
bin
bout
bin
n
D
n
D
la possibilit di scomporre il tutto in blocchi pi semplici (fino ad una cifra), in quanto sia il
complemento che la somma possono essere scomposti fino ad una cifra,
Per il circuito sopra disegnato, se cmd=0 le porte XOR sono elementi neutri. Se cmd=1 fungono
invece da invertitori. Pertanto, se cmd=1 questo circuito esegue una sottrazione.
2.6 Moltiplicazione
Anche in questo caso ripartiamo dallalgoritmo imparato alle elementari, detto di shift e somma.
-
Come al solito, lalgoritmo e le propriet sopra menzionate valgono indipendentemente dalla base
in cui si lavora. Vediamo di impostare il problema in modo formale, e di sintetizzare la rete logica
che lo risolve. Dati:
- X , C numeri naturali in base su n cifre, tali quindi che 0 X n 1, 0 C n 1
- Y numero naturale in base su m cifre, tali quindi che 0 Y m 1
30
P = X Y + C .
(Ormai chiaro il perch introduco un termine in pi nelloperazione: cos come una somma
(sottrazione) con riporto (prestito) entrante su n cifre pu facilmente essere scomposta in somme
(sottrazioni) su un numero minore di cifre, allo stesso modo introdurre il termine C a sommare mi
servir per scomporre un prodotto in pi prodotti pi semplici).
Osserviamo che, dalle due ipotesi sopra menzionate, discende che:
P = X Y + C ( n 1) ( m 1) + ( n 1) = m ( n 1) < n + m 1
La rete sopra disegnata si chiama moltiplicatore con addizionatore per naturali. Vediamo come
si realizza in termini di reti pi semplici. Usiamo la consueta tecnica di scomposizione del problema.
1) Si scompone Y (attenzione, soltanto Y, non X) in due blocchi: Y = Yh l + Yl , con Yh , Yl rispettivamente quoziente e resto della divisione per l .
2) Posso allora scrivere:
P = ( X Yl + C ) + X Yh l = Pl + X Yh l
Il primo termine un prodotto su n per l cifre, che posso svolgere con un circuito analogo
a quello disegnato sopra, ma pi semplice (con un numero inferiore di ingressi).
3) Il risultato di questo primo prodotto sar un numero che posso scomporre (a costo nullo) in
quoziente e resto della divisione per l .
31
. P = Pl
P
+ ll l + X Yh l = Pl
+ ll + X Yh l
4) Ma adesso, il secondo termine un numero su n cifre, e quindi lultimo termine tra parentesi
quello che produce in uscita un moltiplicatore con addizionatore a n per (m-l) cifre.
5) Posso sommare i due prodotti parziali cos ottenuti per formare il prodotto finale. Attenzione, per, ch la somma fatta su intervalli di cifre disgiunti. Lultimo addendo, infatti, ha
concatenamenti, scomposizioni, quozienti e moltiplicazioni per potenze della base (costo nullo)
Ovviamente, quello che faccio per via algebrica lo posso fare anche per via circuitale:
Posso iterare questa scomposizione tante volte quante sono le cifre di Y. Quindi, posso realizzare
la moltiplicazione utilizzando soltanto moltiplicatori (con addizionatore) ad n per una cifra.
C
Pi = yi X + C =
X + C
yi = 0
yi = 1
Quindi la sintesi di questo circuito particolarmente semplice: un circuito che, sulla base del
valore di yi, deve sommare a C o X oppure zero.
Il multiplexer a sinistra, in realt, rappresenta
n multiplexer 2 to 1 in parallelo, ciascuno dei
quali relativo alla coppia corrispondente di
bit. Vediamo pi in dettaglio come fatto
ciascuno di questi multiplexer.
Yi
E una rete che fa passare o 0 o un
ingresso, a seconda che Yi sia 0 o 1.
Quindi banalmente una porta AND
P = X Y + C .
- X , C numeri naturali in base su n cifre, tali quindi che 0 X , C n 1
- Y numero naturale in base su m cifre, tali quindi che 0 Y m 1
Pongo:
Questa la formalizzazione dellalgoritmo che usiamo
P0 = C
Pi +1 = yi i X + Pi
= X yi i + C = X Y + C
i=0
una rete sequenziale che realizzi questa operazione piuttosto complessa (poi forse vedremo
come si fa).
Pi +1 m i = yi i X m i + Pi m i
Pi +1 ' = yi m X + Pi '
yi m X + Pi '
Pi +1 ' =
una rete sequenziale che realizzi questa operazione meno complessa della precedente. Infatti,
nella prima versione (shift e somma) richiesto ad ogni passo una moltiplicazione per i , cio
34
2.6.3 Esercizio
Sintetizzare una rete combinatoria che, ricevendo in ingresso un numero naturale in base 10 a due
cifre, generi in uscita il corrispondente numero binario su ? bit. Si supponga che le due cifre decimali siano codificate 8421 (BCD).
Su quante cifre sta il risultato? Visto che z 99 , bastano 7 bit. Le due cifre di ingresso sono x1 e x0,
e sono codificate BCD. Pertanto la loro rappresentazione (come singole cifre) coerente con la
rappresentazione di un numero naturale in base 2 a 4 cifre. Quindi, il risultato da calcolare :
Y = 10 x1 + x0
Ma un circuito che faccia questa operazione lo so sintetizzare:
Volendo, esiste un modo pi furbo per fare la stessa cosa. Basta osservare che:
Y = 10 x1 + x0 = 8 x1 + 2 x1 + x0
Allora si tratta di fare 2 somme pi due shift, che sono a costo nullo.
35
x0
x1
0
+
0
x1
0
za
+
0
2.7 Divisione
Dati:
- X numero naturale in base su n+m cifre (dividendo), tale che 0 X m + n 1
- Y numero naturale in base su m cifre (divisore), tale che 0 Y m 1
Voglio calcolare i due numeri Q ed R tali che:
X = Q Y + R .
Q ed R sono il quoziente ed il resto, e sono unici per il teorema del resto. Su quante cifre saremo
in grado di rappresentare Q ed R?
-
Per il quoziente non posso dire molto. Infatti, se Y=1, allora Q=X, e quindi alla peggio sta
su n+m cifre.
Voglio rappresentare il quoziente su n cifre. Assumere che Q stia su n cifre implica che:
X = Q Y + R ( n 1) Y + (Y 1) = n Y 1
Quindi, lipotesi aggiuntiva che mi garantisce che il quoziente stia su n cifre : X < n Y .
Il modulo divisore deve testare la fattibilit della divisione con le ipotesi date. Se il quoziente non
sta su n cifre, deve settare una variabile logica no_div che dice che la divisione non fattibile.
Il rivelatore di fattibilit si fa con un comparatore ad n+m cifre (sottrattore), che ha in ingresso
X , n Y e ha come no _ div = bout . Dora in avanti non lo disegniamo per semplicit.
Posso realizzare il tutto con un circuito a 2 livelli di
logica (che non sono, per, in grado di sintetizzare
perch troppo complesso), o posso cercare di
scomporre il tutto in moduli pi semplici. La scomposizione in moduli pi semplici, come al solito, si
ottiene traducendo in forma circuitale lalgoritmo
che si usa per eseguire la divisione a mano.
37
2
Q
6
R
Il quoziente ottenuto dal concatenamento dei quozienti parziali (tutti su una cifra)
X = Xh l + Xl
Q = Qh l + Ql
Con X l , Ql su l cifre; X h su n+m-l cifre; Qh su n-l cifre, sotto lipotesi X < n Y .
Da X = Q Y + R ottengo:
X h l + X l = Qh l Y + Ql Y + R
Posso quindi ottenere Qh dalla divisione di X h per Y. Ottengo anche un resto R' .
Per andare avanti, sostituisco ad X h lespressione trovata
( Q Y + R )
'
+ X l = Qh l Y + Ql Y + R
R ' l + X l = Ql Y + R
Questultima operazione consiste nel
-
In termini circuitali:
39
Spingendo al massimo la scomposizione, per eseguire una divisione di un dividendo su n+m cifre
per un divisore su m cifre, basta:
-
saper eseguire una divisione base di un dividendo su 1+m cifre per un divisore su m cifre
Ricapitolando: per eseguire la divisione di un numero su m+n cifre per un numero su m cifre, uso
n divisori elementari in cascata. Ciascuno di questi divisori divide un numero su m+1 cifre per un
numero su m cifre. Sotto lipotesi che X < n Y , ciascuno di questi divisori produce un quoziente
che sta su una sola cifra, e quindi il quoziente finale lo ottengo come giustapposizione dei quozienti parziali. Tale ipotesi ( X < n Y ) equivalente a dire che le m cifre pi significative del dividendo rappresentano un numero pi piccolo del divisore.
resto su m cifre
Ma per stabilire se X sia minore di Y, basta che li sottragga e controlli leventuale prestito uscente.
Da dove si vede, in questo circuito, che necessaria lipotesi che X < 2Y ? lipotesi che mi garantisce la riducibilit del numero X (o della differenza) su m cifre. Infatti
-
Soluzione
41
7 n
7
2 1) 1 (in quanto 2 n 1 di sicuro non multiplo di 8, e quindi ( 2 n 1) non intero).
(
8
8
moltiplicare X per una potenza della base (8=23) unoperazione che so fare, ed a costo
nullo.
calcolare il quoziente della divisione di un naturale per una potenza della base
unoperazione che so fare, ed a costo nullo.
Quindi:
42
8 8
multiplo di 8. Infatti:
- X=16: entrambi i lati fanno 14.
- X=13: il lato sx fa 12, il lato destro fa 11.
MUL
n+3
44
X
n
n+1
X
n
0
n
n+1
A = ai i
i=0
n 1
A = ai i
i =0
Preso un insieme di n numeri interi, posso sempre trovare una legge biunivoca che gli fa corrispondere un insieme di n numeri naturali.
n 1
A = ai i
i =0
46
stabilisco innanzitutto di lavorare su campi finiti, cio avendo a disposizione un numero limitato di cifre in base , noto a priori.
Quindi posso associare un insieme di n cifre in base ad un numero intero. Questa sar la
rappresentazione del numero naturale che gli faccio corrispondere. Parlo in senso lato di
rappresentazione di un numero intero.
A = L ( a ) , a = L1 ( A)
Posso scrivere:
L
a A ( an 1an 2 ...a1a0 )
A dire che quella a destra la rappresentazione del numero intero a su n cifre in base .
Esempio
-4
-3
-2
-1
00
01
02
10
11
12
20
21
22
(a1a0)3
L-1()
Stabilisco una legge (arbitraria) che mi fa corrispondere ad ogni numero intero dellinsieme che ho
scelto un numero naturale, del quale so dare rappresentazione in base su n cifre. Posso dire che
Nota: Perch sto facendo tutti questi conti? Per non usare un simbolo in pi? Pi che altro, perch
se la legge di corrispondenza la scelgo in maniera furba, posso ottenere dei vantaggi implementativi. Conosco infatti la maniera di realizzare reti che svolgono operazioni sui numeri naturali. Vedremo poi che, a seconda di come scelgo la corrispondenza tra interi e naturali (cio la legge L() ),
posso riciclare gran parte di ci che so fare per lavorare con gli interi. Posso cio realizzare dei
circuiti che producono risultati corretti sia interpretando le cifre come rappresentazioni di naturali,
sia interpretandole come rappresentazioni di interi.
Questo perch avere un intervallo non simmetrico limita la possibilit di eseguire operazioni (ad
esempio, calcolare lopposto di un numero). Ci pone dei vincoli su come scelgo il dominio della
legge L (
n
2
n
2
Per 2J+1 numeri sono un numero dispari di numeri, che pu essere messo in corrispondenza
biunivoca con un insieme di n numeri soltanto se dispari, il che accade raramente (noi
lavoriamo sempre con pari a 2, 8, 10, 16).
Nel caso in cui sia pari, dovremo accettare di rappresentare un numero positivo o negativo in
pi. La scelta che opereremo sar di rappresentare sempre lintervallo di interi
n n
, 1
2 2
48
n n
L :
,
1 0, n 1
2 2
di possibilit. Cerco quindi di sfruttare questa libert per fare le cose nel modo pi semplice possibile. Vediamo alcune leggi usati nella pratica.
Traslazione
L: A= a+
n
2
Es: = 2, n = 8
a
A
128
0
127
1
1
127
0
128
1
129
126
254
127
255
In questultimo caso si possono avere rappresentazioni in traslazione con fattori di polarizzazione diversi da
n 2
n 2 1 ).
49
n
0a<
a
2
L: A=
n
n + a a < 0
2
Es: = 2, n = 8
a
A
128
128
127
129
1
255
0
0
1
1
126
126
127
127
n 1
radice.
n 2
n 2 1
n 2
n 2 1
Questa la legge usata allinterno dei calcolatori, ed quella su cui ci focalizzeremo dora in avanti.
Modulo e segno
Tramite questa legge si fa corrispondere ad un numero intero non gi un numero naturale, ma una
coppia costituita da un numero naturale (modulo) e da una variabile logica (segno).
( s, M ) a
0 a 0
s=
, M = abs ( a ) .
1 a < 0
Questo tipo di rappresentazione non ricade nella trattazione scritta prima. Infatti, non si mette in
corrispondenza un intervallo di interi con un intervallo di naturali.
0 A<
a<0
n
2
A< n
...
...
...
2 1 1 ... 1 1
Quindi:
= 10 4 2 1
= 2, n = 8 n 2 1 ( 01111111)2
= 28 2 1
Per capire se la rappresentazione un numero naturale maggiore o minore di n 2 basta guardare la cifra pi significativa della rappresentazione. Infatti:
an 1
an 1
0 A<
n
2
A< n
an 1 = 0
a<0
an 1 = 1
Legge inversa
Si ottiene banalmente per sostituzione:
51
n
0a<
a
A
2
1
L: A=
L
:
a
=
n
n + a a < 0
A n
0 A<
n
2
A< n
semplificare le condizioni a destra, che possono essere scritte guardando la cifra + significativa
di A
A
1
L : a=
A + 1
an 1 <
an 1
Esempio:
= 10, n = 3
A ( 852 )10 . Visto che la cifra pi significativa maggiore di 2 1 = 4 , il numero rappresentato negativo. Quindi, per trovarlo devo calcolare A (147 )10 , sommargli uno e cambiare il segno: a = 148
= 2, n = 4
A (1011)2 . Visto che la cifra pi significativa 1, il numero negativo. Quindi:
a = ( 0100 + 1) 2 = (101) 2 = 5
A (1111) 2 . Visto che la cifra pi significativa 1, il numero negativo. Quindi:
a = ( 0000 + 1)2 = (1) 2 = 1
n
a
0
a
<
2
L: A=
n
n + a a < 0
A = a n
se
n
2
a<
n
2
52
q = 0
a = 0 + a n
n
Attenzione: quanto appena scritto vero solo se a rappresentabile su n cifre in base in complemento alla radice, cio se appartiene a n 2 , n 2 1 . E facile scordarselo, e questa cosa
fonte di errori gravi. In particolare, se a non appartiene allintervallo scritto sopra, a n esiste ed
un numero su n cifre in base (ovviamente), ma quel numero non ha niente a che vedere con la
rappresentazione di a in complemento alla radice (che invece non esiste su n cifre in base ).
Soluzione
53
a a0
ABS (a ) =
.
a a < 0
Conosco un modo semplice per stabilire il segno di a guardandone la rappresentazione A, ed un
modo semplice per calcolare a usando il complemento della sua rappresentazione (far riferimento alla legge inversa).
an 1 < 2
A
B = ABS (a ) =
A + 1 an 1 2
Esempi:
= 10, n = 3 :
= 2, n = 4 :
54
55
56
Con ow segnale di overflow, che deve essere messo ad 1 se loperazione non possibile, a 0 altrimenti. Per adesso, assumiamo che a n 2 inizialmente, poi verificheremo lipotesi.
In questo caso abbiamo:
(*) se a lestremo inferiore, la prima
disuguaglianza non vera.
(*)
B = a n
= 1 n a n
= A A
= n + 1 + A
= ( n 1) A
A = n 1 A
= A n
n
= 1+ A
Uso il complemento:
A=10000000
In questo caso il valore in uscita non corretto (si ottiene ancora B=10000000). Del resto, A n 2 , e quindi lopposto
non rappresentabile.
A=00000000
In questo caso si avrebbe un riporto in uscita dallINC.
Richiamo sullassembler: esiste unistruzione NEG, che interpreta una sequenza di bit come la
rappresentazione di un numero intero, e produce la rappresentazione dellopposto se questo esiste.
Altrimenti setta il flag di overflow OF. La parte di circuito che produce lingresso da dare al registro che contiene il flag di overflow labbiamo appena descritta.
57
a A EST ( an ' an 1 ' an 2 '...a1 ' a0 ' ) su n+1 cifre. Ovviamente, il problema ha sempre soluzione
Ln+1 : AEST
<
a
0
a
A
an 1 <
2
1
=
, ed inoltre Ln : a =
n
n +1 + a a < 0
A + 1 = n + A a
n 1
Quindi:
AEST
A
an 1 <
=
( 1) n + A a
n 1
an 1 < 2
0
0 i n 1 , an ' =
1 an 1 2
Cio, le n cifre meno significative sono identiche, la n+1-sima diversa a seconda che il numero
rappresentato sia positivo o negativo.
Quindi lestensione di campo dei numeri interi, a differenza di quella dei naturali, richiede in
generale della logica.
In base 2 il tutto molto pi semplice: an' = an 1
Richiamo sullassembler: esistono istruzioni CBW, CWD, CDQ, che interpretano una sequenza
di bit come la rappresentazione di un numero intero (su 8, 16, 32 bit), e producono la rappresentazione dello stesso numero estesa su 16, 32, 64 bit. Per contro, non esiste nessuna istruzione dedicata allo stesso scopo per i naturali: per i naturali lestensione si fa aggiungendo degli zeri in testa.
58
Soluzione
59
n+1 2
n +1
2
n +1
2
an = 1 an 1 2
RID
n+1
ow
n-1
XOR
n-1
Ov
ow
ARID
numero (importante) che le due cifre pi significative siano uguali. Il che significa che posso,
Il circuito che riconosce la non riducibilit
60
Soluzione
n
b = a
0a<
2
L: B =
, da cui la tesi.
n
n+1 + b = n+1 + a = n + a
(
) 2 a<0
a n+1
a
= a n +1 n +
B = =
n
n
n
A
A
= =
n
Anche per gli interi, moltiplicare e dividere per una potenza della base unoperazione di costo
nullo, e si fa nello stesso modo che con i naturali.
shift logical left (right) corrisponde alla moltiplicazione (divisione) per 2k di un naturale
shift arithmetic left (right) corrisponde alla moltiplicazione (divisione) per 2k di un intero
61
Infatti, per moltiplicare per due un intero devo compiere le seguenti azioni:
1) avendo a disposizione solo n bit, devo stabilire se il nuovo numero sta su n bit. Questo equivalente a stabilire se il vecchio numero sta su n-1 bit, il che si pu fare usando un detettore di riducibilit, la cui uscita associata alloverflow.
2) Una volta salvata in OF la memoria della fattibilit delloperazione, la moltiplicazione si fa
come con i naturali, cio shiftando ogni cifra a sinistra
Pertanto, i due shift sinistri potrebbero essere svolti con la stessa operazione macchina, lasciando al
programmatore il compito di guardare il flag rilevante alla luce dellinterpretazione del contenuto
del registro.
Per dividere un intero per due, devo compiere le seguenti azioni.
1) estenderne la rappresentazione ad n+1 cifre, il che si fa ripetendo la cifra pi significativa
2) prendere le n cifre pi significative della rappresentazione estesa, buttando via lultima.
Pertanto, i due shift destri compiono operazioni intrinsecamente differenti. Questo il motivo per
cui esistono due istruzioni di shift destro differenti (e, per simmetria, due di shift sinistro differenti)
per naturali ed interi.
4.6 Somma
Dati a A e b B , con A,B in base su n cifre voglio calcolare S s tale che s = a + b , con
S su n cifre. Il problema che n s n 2 , e quindi la somma pu non essere rappresentabile su n cifre. Per lo sicuramente su n+1 cifre, in quanto n +1 2 n .
62
S = s n = a + b n = a n + b n
= A + B n
Il che significa che potrei ricavare la rappresentazione della somma come somma delle rappresentazioni modulo n . Questa una propriet estremamente importante, che da sola motiva
lutilizzo della rappresentazione in complemento alla radice dei numeri interi. Del resto, le altre
tre operazioni fondamentali (sottrazione, moltiplicazione, divisione) si fanno usando il sommatore
come circuito di base.
Ricordiamo che, presi due naturali A e B , il
B
n
Cout
Cin
Il nostro problema, adesso, scoprire se la somma tra interi rappresentabile su n cifre. A questo
scopo, il riporto uscente non di nessun aiuto. Consideriamo infatti i seguenti esempi:
- A = n 1, B = 1 S = 0, Cout = 1
Ma se S = n 2 , allora s S + 1 = 2 , che non pu essere la somma di due numeri positivi. Ciononostante, Cout = 0
Quindi, quando la somma tra naturali, il riporto uscente mi dice se rappresentabile. Quando la
somma tra rappresentazioni di interi, il riporto uscente non offre nessuna informazione riguardo alla rappresentabilit.
Abbiamo gi osservato come la rappresentabilit della somma sia garantita se ho a disposizione n+1
cifre. Allora possiamo procedere come segue
1) faccio
la
somma
su
n+1
cifre,
n +1
estendendo
= AEST + B EST
gli
addendi.
Calcolo
cio
n+1
63
Se realizzo il sommatore in modo modulare (usando full adder) in teoria mi ci vorrebbe un modulo
in pi per produrre loverflow. Vediamo se se ne pu fare a meno:
XOR
commutativo
e associativo
Quindi in realt basta prendere i riporti degli ultimi due full adder, senza aggiungere niente.
In sostanza con la stessa circuiteria con la quale faccio somme tra naturali, posso fare somme tra
interi. Basta aggiungere uno XOR come rilevatore di overflow.
Richiamo sullAssembler: in Assembler esiste una sola istruzione ADD, che somma numeri naturali secondo lalgoritmo visto a suo tempo. Il risultato di tale somma corretto anche se quei numeri sono in realt la rappresentazione di numeri interi. La rappresentabilit del risultato si stabilisce:
64
guardando se OF=0, nel caso in cui i numeri sommati siano rappresentazioni di interi
Visto che lunico a saperlo il programmatore, la ADD setta sia CF che OF, e sar poi il programmatore a testare la condizione giusta, coerentemente con quella che sa essere linterpretazione
corretta. Tipicamente, listruzione che segue una ADD sar una JC/JNC nel caso di somma di
naturali, oppure una JO/JNO nel caso di somma di interi.
4.7 Sottrazione
Per la sottrazione il discorso del tutto simile a quello della somma. Al solito, sempre possibile su
n+1 cifre. Dati a A e b B , voglio calcolare D d = a b . Il tutto lavorando in base su n
cifre. Sar allora:
(*)
D= d
= a b n = a n b n
= A B n = A + B +1
Ma, sicuramente:
D EST = d
n +1
n +1
= AEST B EST
n +1
= AEST + B EST + 1
n +1
65
n
2
n
2
1 per luscita.
pertanto necessaria unuscita in pi, che mi dice se loperazione fattibile o meno. Tale uscita la
chiamo ow, segnale di overflow, che deve essere messo ad 1 se loperazione non possibile, a 0
altrimenti.
Quando abbiamo problemi di fattibilit come in questo caso, il modo di procedere standard: si
suppone che loperazione sia fattibile, e si calcola luscita di conseguenza. Se loperazione non
fattibile, luscita sar priva di significato, ma ci sar la linea di ow a segnalarlo.
Se loperazione fattibile,
ABS _ a n
A = a n =
ABS _ a n
sgn_ a = 0
ABS _ a
=
sgn_ a = 1 ABS _ a + 1 n
sgn_ a = 0
sgn_ a = 1
Che si fa con un multiplexer ed un circuito per il calcolo dellopposto, quindi quello visto prima.
Per quanto riguarda loverflow, abbiamo:
ow = 1 ( ABS _ a > n 2 ) or ( ABS _ a = n 2 and sgn_ a = 0 )
66
4.8.2 Moltiplicazione
Dati a A e b B , con A su n cifre e B su m cifre, voglio calcolare P p = a b , con P su
n+m cifre. Si vede velocemente che n + m 4 p n + m 4 , il che vuol dire che non ci sono problemi di rappresentabilit per il risultato.
Si osservi che nella rete finale il segnale di overflow pu essere trascurato, perch abbiamo gi
accertato che non ci sono problemi di rappresentabilit del risultato.
67
4.8.3 Divisione
Dati a A su n+m cifre e b B su m cifre, voglio calcolare Q q e R r , rispettivamente
su n ed m cifre, tali che a = q b + r . Si deve tener conto del fatto che q pu non essere rappresentabile su n cifre, e quindi Q pu non esistere.
n
n+m
IDIV
R
no_idiv
Quando abbiamo enunciato il teorema della divisione con resto, abbiamo considerato soltanto il
caso di divisore naturale. In tal caso, il teorema garantisce che il risultato unico se 0 r b 1 .
Nel caso di divisione tra interi, il vincolo sopra scritto non vuol dire nulla. Deve essere adottato un
vincolo che generalizzi il precedente.
Si potrebbe pensare di usare il seguente vincolo: ABS ( r ) < ABS ( b ) , che di fatto racchiude il precedente nel caso di numeri naturali.
Attenzione, perch questo vincolo non basta a rendere il risultato della divisione univoco. Infatti,
Dato un numero intero a, se la divisione ha resto non nullo posso scriverlo come
x b + r1
a=
( x + 1) b + r2
r1 > 0
r2 < 0
Ed in entrambi i casi ABS ( r ) < ABS ( b ) . Quindi devo aggiungere unaltra condizione. La condizione che si sceglie che il resto abbia il segno del dividendo. In questo caso sono in grado di
discriminare sempre tra i due casi. Le ipotesi che rendono unico il risultato sono quindi:
ABS ( r ) < ABS ( b )
sgn ( r ) = sgn ( a )
x 0 , e -1 altrimenti. Quindi,
x = sgn ( x ) ABS ( x )
Si osservi che questipotesi vuol dire che nella divisione tra interi il quoziente approssimato per
troncamento, quindi q b sempre pi vicino allorigine rispetto ad a.
68
sgn ( a ) ABS ( a ) = q sgn ( b ) ABS ( b ) + sgn ( r ) ABS ( r ) , con sgn ( a ) = sgn ( r ) per lipotesi che ho
appena fatto. Moltiplicando entrambi i membri per sgn ( a ) , si ottiene:
ABS ( a ) = q sgn ( b ) sgn ( a ) ABS ( b ) + ABS ( r )
Che una divisione tra naturali. Infatti, se il dividendo ed il divisore sono naturali, lo sar anche
il quoziente. Peraltro, q sarebbe negativo solo nel caso di segni discordi tra a e b, nel qual caso
lespressione tra parentesi quadre comunque positiva. Chiamo q sgn ( b ) sgn ( a ) = ABS ( q ) .
Posso calcolare ABS ( r ) e ABS ( q ) utilizzando un modulo divisore tra naturali, purch ABS ( q )
sia un numero (naturale) rappresentabile su n cifre. Per testare se questo vero, dobbiamo
controllare se
(1)
il che si fa con un sottrattore ad n+m cifre (lo stesso che useremmo per testare la fattibilit di una
divisione naturale). Se il risultato di questa disuguaglianza falso, il quoziente della divisione
naturale di sopra un numero naturale che sta su pi di n cifre, quindi ABS ( q ) n . In questo
caso, il quoziente q della divisione intera o q n (se q positivo), oppure q n (se negativo). In ogni caso, il quoziente q non un numero intero rappresentabile su n cifre se ABS ( q )
non un naturale rappresentabile su n cifre.
Quindi, la fattibilit della divisione naturale tra valori assoluti condizione necessaria per la
fattibilit della divisione intera.
69
A questo punto, posso trovare Q ed R abbastanza facilmente, visto che ne ho i moduli (come uscita
dal divisore naturale) ed i segni (ottenuti banalmente da quelli degli operandi della divisione).
Il problema che nella conversione di Q da MS a CR posso avere overflow. Infatti, il fatto che la
divisione naturale sia fattibile non implica che
n
2
n
2
1,
(2)
70
102
= 88 + 1 102 = 89 .
101
Il naturale che rappresenta lintero a dipender dalla base. In particolare, se a un numero negativo
certo che i due naturali saranno diversi. Il problema che voglio risolvere : data una rappresentazione, trovare laltra. Voglio cio trovare una legge f tale che A = f ( AB ) .
Il primo problema quello della rappresentabilit. Sono sicuro che il numero rappresentabile
nella nuova base se m n . La condizione sufficiente, ma non necessaria. Per abbiamo gi
detto che non vogliamo sapere qual il numero a, e quindi quanto di meglio possiamo fare. Da
questa si deriva:
71
L1
A
: a=
n + A
an 1 <
an 1
n
m
0a
1
1
a
2
2
L : A =
m
n
m + a a < 0
2
2
L : A =
m n + A
an1 <
an1
Esempio:
a = 951 + 1 = ( 048 + 1) = 49
Tra laltro, 49 un numero rappresentabile su 2 cifre in base 10. Questo confermato dal fatto
che la rappresentazione riducibile, in quanto am 1 = 1 = 9 am 2 2 = 5 .
Soluzione
72
A =
n 1
n 1
i =0
i =1
ai i = a0 + ai [ ]
= a0
dove , \ {0} per ipotesi. Lultimo passaggio dovuto al fatto che il secondo addendo
certamente multiplo di , in quanto naturale.
2) Partendo dalla rappresentazione di A , il risultato dimostrato dalla seguente sequenza di uguaglianze:
A3 =
n 1
n 1
ai 4i = a0 + ai (1 + 3)
i =0
i =1
n 1
i i
= a0 + ai 1i k 3k .
i =1
k =0 k
3
Tutti i termini dello sviluppo del binomio di Newton, tranne quello per k = 0 , sono numeri naturali
che contengono un fattore 3 a moltiplicare. Pertanto, posso scrivere quei termini come 3 i , per i
numero naturale. Quindi, abbiamo:
n 1
A 3 = a0 + ai (1 + 3 i )
i =1
n 1
n 1
i =1
i =1
= a0 + ai + 3 ai i
=
3
n 1
a
i =0
i
3
n 1
a
i =0
n 1
= a0 + ai 1 + ( 1)
i =1
n 1
n 1
i i
k
= a0 + ai 1i k ( 1) = a0 + ai (1 + ( 1) i )
i =1
i =1
k =0 k
n 1
n 1
i =1
i =1
= a0 + ai + ( 1) ai i
n 1
a
i=0
Dove il penultimo passaggio dipende dal fatto che 1 multiplo di per ipotesi.
4) Il risultato si dimostra come segue:
73
A =
n 1
ai i
i =0
n 1
( +1)
= a0 + ai ( 1) + ( + 1)
i =1
( +1)
n 1
i i
i k
k
= a0 + ai ( 1) ( + 1)
i =1
k =0 k
( +1)
n 1
i
i
i
i k
k
= a0 + ai ( 1) + ( 1) ( + 1)
i =1
k =1 k
( +1)
Lultimo passaggio si ottiene isolando dalla sommatoria pi interna il termine per k = 0 . Da qui si
evince che il secondo addendo della somma tra parentesi quadre multiplo intero di + 1 , e quindi
pu essere scritto come ( + 1) i per un qualche intero i :
n 1
n 1
A = a0 + ( 1) ai + ai i ( + 1)
i
i =1
n 1
i =1
( +1)
n 1
= a0 + ( 1) ai + ( + 1) ai i
i
i =1
i =1
n 1
= a0 + ( 1) ai
i =1
( +1)
n 1
( +1)
( 1) a
i
i =0
( +1)
x2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
x1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
x0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
cout
0
0
0
0
0
0
0
0
0
0
0
0
0
1
-
z2
0
0
0
0
1
1
1
0
0
0
1
1
1
0
-
z1
0
0
1
1
0
0
1
0
1
1
0
0
1
0
-
z0
0
1
0
1
0
1
0
1
0
1
0
1
0
0
-
00
01
11
10
00
01
1-
11
10
74
Da cui si ricava la mappa per z2 , nella quale sono indicati anche gli implicanti principali.
A = x2 x1 , B = cin x2 , C = x2 x0
D = cin x1 x0 , E = x2 x1 x0 , F = cin x2 x1 , G = cin x1 x0
x1x0
cinx 2
00
01
00
01
11
10
0-
11
B
10
Lunico implicante essenziale A, E assolutamente eliminabile e tutti gli altri sono semplicemente eliminabili. Le liste di copertura irridondanti sono quelle riquadrate nel disegno sottostante:
A,C,D,F
A,C,D
G?
A,C,D,G
B?
A,B,G
A,B
C?
A,B,C,F
A,B,C
La lista di copertura di costo minimo rispetto al criterio a diodi {A,B,G}, il cui costo 10. La
sintesi di costo minimo a porte NOR per z2 la seguente:
z2 = x2 x1 + cin x2 + cin x1 x0
) (
z2 = x2 + x1 + cin + x2 + cin + x1 + x0
La sintesi secondo la lista di copertura di costo minimo soggetta ad alee statiche del primo ordine
sul livello 1 per le transizioni 0010 1010 , 1000 1010 . Tali alee possono essere rimosse inserendo limplicante C nella lista di copertura.
) (
) (
z2 = x2 + x1 + cin + x2 + cin + x1 + x0 + x2 + x0
)
75
y1y0
cin=0
00
01
11
10
x1x0
00
01
11
10
y1y0
cin=1
00
01
11
10
00
01
11
10
2) In un sommatore a N=2n bit con il circuito di lookahead a 2 bit, il riporto si propaga in tempo
2 per ogni blocco di 2 full adder. Allultimo di tali blocchi di due full adder il riporto entrante
sar pronto al tempo 2 ( n 1) . Quindi, lultimo full adder potr fornire il risultato al tempo
2 ( n 1) + 4 = 2 ( n + 1) .
3) Gli implicanti principali sono i seguenti (quelli ottenibili luno dallaltro per simmetria sono
riportati nel medesimo colore):
x1 y1 , cin x1 y0 , cin y1 x0 , cin x1 x0 , cin y1 y0 , x1 x0 y0 , y1 y0 x0
Si vede senza difficolt che gli IP sopra menzionati sono tutti essenziali. Quindi, la sintesi SP di
costo minimo : z = x1 y1 + cin x1 y0 + cin y1 x0 + cin x1 x0 + cin y1 y0 + x1 x0 y0 + y1 y0 x0 .
76
x1 x0
b x2
y2 y1 y0
00
01
11
10
00
000
010
001
100
----
01
011
----
----
----
----
----
11
000
----
----
----
10
001
010
100
011
00
01
11
10
00
01
----
----
11
----
10
2) Dalla mappa sopra scritta si ricava immediatamente la sintesi SP, e da questa quella a porte
NAND:
c = x2 + b x1 x0
c = x2 b x1 x0
y2 = b x1 x0 + b x1 x0
)(
y2 = b x1 x0 b x1 x0
y1 = x1 x0 + b x2 + b x1 x0
)
( )( )(
y = (b x x ) (b x ) (b x x )
y0 = b x2 x0 + b x2 + b x1 x0
y1 = x1 x0 b x2 b x1 x0
0
)(
c = ( x2 + x1 ) x1 + x0 b + x2
c = x2 x1 + x1 x0 + b x2
)(
y2 = x1 + b x0 + b x0
y2 = ( x1 ) b + x0 b + x0
y1 = b x1 + x1 x0 + b x2 + x2 x1 x0
y1 = b + x1 x1 + x0 b + x2 ( x2 + x1 + x0 )
y0 = b x2 + x1 x0 + b x0 + b x2 x0
y0
( )(
)( )
= (b + x ) ( x + x ) (b + x ) (b + x
2
+ x0 )
) (
c = x2 + x1 + x1 + x0 + b + x2
( ) ( )
y = (b + x ) + ( x + x ) + (b + x ) + ( x + x + x )
y = (b + x ) + ( x + x ) + (b + x ) + (b + x + x )
( )
y2 = x1 + b + x0 + b + x0
1
4) la realizzazione a porte NAND di y0 costa 4 a porte e 11 a diodi, mentre quella a porte NOR
costa 5 a porte e 13 a diodi. Pertanto, la prima ha costo minore.
77
Il criterio di divisibilit per 3 richiede invece di conoscere la somma delle cifre in base 10. Si noti
4
a
i =0
a0
0
a3
z3
a2
a1
0
4
a4
78
X
x=
n
X
se X n 1 < 2
se X n 1 2
X + n 2 se X n 1 < 2
Y =
n
X 2 se X n 1 2
e considerando che n 2 = n 1 2 , si ottiene rapidamente
( X + 2, X n 2 ,..., X 0 ) se X n 1 < 2
Y = n 1
( X n 1 2, X n 2 ,..., X 0 ) se X n 1 2
(1.3)
Dove la rete R modifica la cifra di peso pi significativo, in accordo allespressione scritta sopra.
2) Siano d2d0 i tre bit che rappresentano la cifra X n 1 , e z2z0 i tre bit che rappresentano Yn 1 .
Il circuito che realizza la (1.3) in base 6 si trova come sintesi minima sulla seguente mappa di Karnaugh:
La cui sintesi a costo minimo la seguente:
z2 = d1 d 0 + d 2 d1 d 0
z1 = d 2 d 0 + d 2 d1 d 0
z0 = d 0
3) Siano d3d0 i quattro bit che rappresentano la cifra X n 1 , e z3z0 i quattro bit che rappresentano la cifra Yn 1 . La relazione richiesta z3 = d3 , zi = di per i = 0,1, 2 , in quanto un numero in
base 16 in codifica 8421 su n cifre ha la stessa rappresentazione di un numero in base 2 su 4n cifre,
ed nota dalla teoria dei convertitori la relazione tra la rappresentazione in complemento alla radice
79
a1 a0
a3 a2
00
01
11
10
01
11
10
----
1001 1001
----
----
----
----
11
10
z3z2z1z
0
a1 a0
00
01
C
00
D
01
1
E
B
F
11
----
----
----
----
10
----
----
z3 = z0 = a3 a2 + a3 a1 a0
) (
z3 = z0 = a3 + a2 + a3 + a1 + a0
z3
a3 a2
a1 a0
00
01
11
10
00
01
11
----
----
----
----
10
----
----
z3 = z0 = a3 + a2 a0 + a2 a1
= a3 + ( a2 a0 ) + ( a2 a1 )
= a3 ( a2 a0 ) ( a2 a1 )
z3
h1h0
00
01
11
10
00
01
l1l0
h1h0
00
01
11
10
00
01
1
B
A
11
11
1
C
10
10
Gli implicanti principali per z sono elencati a destra, e sono tutti semplicemente eliminabili. Si
osserva che non esistono liste di copertura con due implicanti, quindi la lista di copertura a costo
minimo deve includerne almeno tre. Le liste di copertura irridondanti sono le seguenti: ABC,
ABC, AACC, AABB, BBCC, AACB, AABC. Quelle di costo minimo sono ABC,
ABC, dalle quali si ricava:
z = h1 h0 + h1 l1 + h0 l1
z = h1 h0 + h1 l1 + h0 l1
( ) ( ) ( )
= (h + h ) + (h + l ) + (h + l )
z = h1 h0 + h1 l1 + h0 l1
1
( ) ( ) ( )
= (h + h ) + (h + l ) + (h + l )
z = h1 h0 + h1 l1 + h0 l1
1
In entrambe le sintesi a porte NOR si individuano alee statiche del 1 ordine sul livello 0, in corrispondenza delle seguenti transizioni:
-
ABC:
ABC:
2 [ 104,102 ]
,
2
2
Quindi, in generale, la somma di due numeri interi in base 12 ed in base 8 su due cifre non rap-
presentabile in base 10 su due cifre. Il che non impedisce che il risultato di questa somma sia
rappresentabile.
Il numero i un numero qualunque, che va da 0 a B. Pi grande i, pi grande il numero (negativo) rappresentato. Quindi, per discutere sulla rappresentabilit del risultato, dovrei osservare se la
somma rappresentabile nel caso in cui x sia il numero pi piccolo (pi negativo) possibile. In quel
caso, ottengo xmin = ( A0 )12
Che numero la somma? Applico la regola inversa per calcolare i numeri interi xmin ed y e li sommo
{(
S = A0
{
= {( 20 )
12
( )
+ 1 + 46 + 1
8
+ ( 32 )8
= {[ 24 ] + [ 26]} = 50
Quindi, la somma un numero negativo, ma sempre superiore a -50. Quindi la somma sempre
rappresentabile su 2 cifre in base 10.
Passiamo adesso a cercare la rappresentazione. Per farlo, fissiamo un valore per i ,
i = 10 , e
82
X 10 = 103 122 + X 12 = 1000 144 + ( AA)12 = 1000 144 + (130 )10 = 986
Il numero 986 in base 10 riducibile, perch la sua cifra pi significativa 9 e la seconda maggiore o uguale di 5, e quindi X 10 = 86 , corrispondente a x = (13 + 1) = 14 .
Per trovare Y10 applico lo stesso procedimento. Mi bastano 2 cifre in base 10, stavolta.
( )
83
6.1.1 Soluzione
Si indichi con A, B, C, la rappresentazione su n bit dei numeri a, b, c. Il bit di uscita dei tre comparatori a 1 quando, rispettivamente, a<b, b<c, c<a. Confrontando le uscite dei comparatori si possono produrre, tramite la rete combinatoria RC, i due bit di comando di un multiplexer 4 to 1 che
sceglie tra A, B, C.
b0 = x AB
b1 = xBC xCA
84
usando le variabili di uscita dei tre comparatori come variabili di comando di un multiplexer
8 to 1, agli 8 ingressi del quale connettere A, B, C in modo ovvio.
Comparando prima due numeri (e.g., A e B), e facendo uscire il massimo dei due con un
multiplexer a due vie, e comparando questultimo con il terzo numero (C). In questo caso
servono due comparatori (invece che tre) e due multiplexer a due vie (invece che uno a quattro vie), e nessuna logica di raccordo.
85
6.2.1 Soluzione
Luscita area sta su 2n-1 bit.
Per produrre luscita ret, bisogna stabilire se il triangolo rettangolo o meno. Un triangolo rettangolo quando i suoi lati verificano il teorema di Pitagora: ci significa che deve esistere una permutazione dei tre lati A, B, C, per cui L12 + L2 2 = L32 . Questo possibile solo quando L3 il lato pi
lungo dei tre. Per poter testare se il triangolo rettangolo, quindi, necessario decidere quale dei tre
lati ha lunghezza massima. Questo pu essere fatto usando la rete MAX3 dellesercizio precedente,
nel seguente modo.
0
ipo
0
MUL
2n+1
2n
0
COMP.
2n+1 bit
ORDINA
cat1
cat2
0
MUL
2n
2n+1
SOMM.
2n+1bit
ret
2n+1
0
MUL
2n
2n+1
Dove la rete ORDINA pone sulluscita ipo il valore max(A,B,C), e sulle altre due uscite gli altri due
valori. ORDINA fatta come segue:
86
cat1
2n-1
area
MUL
2n
cat2
Ovviamente, se il triangolo non rettangolo, luscita area contiene un valore che non ha nulla a che
vedere con larea del triangolo stesso.
n 1
a
i =0
=0,
i
3
6.3.1 Soluzione
Prima la parte facoltativa. Il risultato dimostrato dalla seguente sequenza di uguaglianze:
A3 =
n 1
a 4
i =0
n 1
= a0 + ai (1 + 3)
i =1
n 1
n 1
i i
= a0 + ai 1i k 3k = a0 + ai (1 + 3 i ) =
i =1
i =1
k =0 k
3
3
n 1
n 1
i =1
i =1
= a0 + ai + 3 ai i
=
3
n 1
a
i=0
i
3
n 1
a
i =0
i
3
Dove il terzultimo passaggio dipende dal fatto che tutti i termini dello sviluppo del binomio di
Newton, tranne quello per k = 0 , sono numeri naturali che contengono un fattore 3 a moltiplicare.
Un possibile circuito che soddisfa la specifica il seguente:
87
Si
pu
usare
anche il carry in
uscita e fare la
somma su n-1 bit
Le cifre della rappresentazione di A sono codificate usando la rappresentazione in base due su due
bit - dei valori delle cifre stesse. Si noti che la condizione X < nY , che esprime la garanzia di
correttezza di funzionamento del divisore, sempre rispettata, essendo, in questo caso, Y = 3 ,
= 2 , n = 3 e X 15 .
6.4.1 Soluzione
Poich 32 a < 31 , si ha 148 < b 167 . Sono quindi necessarie n = 9 cifre per rappresentare b
in complemento alla radice.
Una possibile soluzione riportata nello schema in figura, ottenuto ridefinendo la relazione aritmetica fra a e b come b = ( 7 a ) 4a , ovvero b = c d con c = 7 a e d = 4a .
Calcolate allora le rappresentazioni (vedi poco sotto) C e D di c e d, si ha B = C + D + 1 .
Le rappresentazioni (su 9 cifre) C e D si ottengono da A utilizzando propriet note della rappresentazione in complemento. In particolare, la differenza fra due numeri, da cui C = 7 + A + 1 , ed il
prodotto per una potenza della radice, da cui D = 2 2 A .
6
5
A =B001110
7
C =B1111001
+
1
D=B00111000
B =B111000001
7
8
6
7
9
9
+
+
1
6.5.1 Soluzione
1) Il risultato da ottenere il seguente:
m = 2ax + b . Il numero minimo di bit richiesto
2) Come si vede dalla figura, m0 dipende soltanto dal bit meno significativo dei due ingressi del
sommatore. Uno di questi due bit vale zero, quindi m0 = b0 . Per quanto riguarda m1, questo dipende
da b1 e dal bit meno significativo di Y, y0. Per capire quanto vale y0 in funzione degli ingressi,
necessario osservare che il bit meno significativo di un numero intero vale 0 se il numero pari ed
1 se dispari, indipendentemente dal segno del numero. Quindi, y0 se e solo se entrambi i numeri a
e x sono dispari (altrimenti il loro prodotto pari), cio y0 = a0 x0 . Quindi, m1 = b1 + a0 x0 . La rete
combinatoria richiesta ha quindi tre ingressi, a0, x0, b1, ed unuscita, m1, ed la seguente:
90
91