Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Elettronica dei Sistemi Programmabili
A.A. 2013-2014
Microcontrollori
Esercizi
2/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Registro speciale APSR: flag della ALU
Flag della ALU
N (b31) : copia di b31 del risultato. '1' se negativo, '0' se posivo o zero
Z (b30) : '1' se il risultato è pari a zero. '1' anche nel caso di confronto tra due numeri uguali
C (b29) : riporto per il risultato. Per una addizione senza segno '1' se c'è stato overflow. Per una sottrazione senza segno, è l'inverso del prestito d'uscita.
V (b28) : overflow per il risultato. '1' se c'è stato un overflow dopo una addizione o una sottrazione con segno.
3/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Uso delle flag della ALU
nelle operazioni di addizione
4/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
5/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +
6/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =
7/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
1110111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
riporti intermedi
8/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
0
no riporto d'uscita C = 0
9/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
0
no riporto d'uscita C = 0
risultato negativo N = 1
10/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
0
no riporto d'uscita C = 0
risultato negativo N = 1
Z = 0risultato ≠ 0
11/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 1 addizione a 32 bit
0x70000000 + 0x70000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
no riporto d'uscita C = 0
risultato negativo N = 1
0
risultato ≠ 0 Z = 0
somma da pos. a neg. → overflow V = 1
12/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 2 addizione a 32 bit
verificare che: N Z C V
0x90000000 + 0x90000000 = 0x20000000 0 0 1 1
0x80000000 + 0x80000000 = 0x00000000 0 1 1 1
0xFFFFFFF8 + 0x00000007 = 0xFFFFFFFF 1 0 0 0
13/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Come viene usato il carry d'uscita
per le addizioni a più cifre?
14/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Uso delle flag della ALU
Esempio: addizione a 64 bitSuddivisa come somma di “due cifre” a 32 bit
ADDS r0, r0, r2ADCS r1, r1, r3
r0r1
r2r3
r0r1
+
=
r0r1
r2r3
r0r1
+
=
C
15/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 3 addizione a 64 bit
0x7000000070000000 + 0x7000000070000000 =
0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
0 +0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0000
C=0
= 0xE0000000E0000000
Ok anche se deve essere segnalato l'overflow
2x[ 7 x 1615 + 7 x 167 ] = 14 x 1615 + 14 x 167
E E
16/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 4 addizione a 64 bit
0x7000000090000000 + 0x7000000070000000 =
1001 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =0000 0000 0000 0000 0000 0000 0000 0000
1 +0111 0000 0000 0000 0000 0000 0000 0000 +0111 0000 0000 0000 0000 0000 0000 0000 =1110 0000 0000 0000 0000 0000 0000 0001
C=1
= 0xE000000100000000
Ok anche se deve essere segnalato l'overflow
[7 x 1615 + 9 x 167 ] + [7 x 1615 + 7 x 167 ] =
14 x 1615 + 1 x 168
17/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Uso delle flag della ALU
nelle operazioni di sottrazione
18/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 5 sottrazione a 32 bit
0x00001234 - 0x00001000
0000 0000 0000 0000 0001 0010 0011 0100 -0000 0000 0000 0000 0001 0000 0000 0000 =
19/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 5 sottrazione a 32 bit
0x00001234 - 0x00001000 = 0x00000234
0000 0000 0000 0000 0001 0010 0011 0100 -0000 0000 0000 0000 0001 0000 0000 0000 =0000 0000 0000 0000 0000 0010 0011 0100
0prestito
20/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 5 sottrazione a 32 bit
0x00001234 - 0x00001000 = 0x00000234
0000 0000 0000 0000 0001 0010 0011 0100 -0000 0000 0000 0000 0001 0000 0000 0000 =0000 0000 0000 0000 0000 0010 0011 0100
no prestito d'uscita C = 1
risultato positivo N = 0
risultato ≠ 0 Z = 0
no overflow V = 0
☜
0
21/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 6 sottrazione a 32 bit
0x00000004 - 0x00000005
0000 0000 0000 0000 0000 0000 0000 0100 -0000 0000 0000 0000 0000 0000 0000 0101 =1111 1111 1111 1111 1111 1111 1111 1111
1abbiamo prestito in uscita
-1-1-1-1 -1-1-1-1 -1-1-1-1 -1-1-1-1 -1-1-1-1 -1-1-1-1 -1-1-1-1 -1-1-1
22/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 6 sottrazione a 32 bit
0x00000004 – 0x00000005 = 0xFFFFFFFF
0000 0000 0000 0000 0000 0000 0000 0100 -0000 0000 0000 0000 0000 0000 0000 0101 =1111 1111 1111 1111 1111 1111 1111 1111
prestito d'uscita C = 0
risultato negativo N = 1
Z = 0
no overflow V = 0
☜
1-1 in complemento a 2
risultato ≠ 0
23/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Come viene usato il carry d'uscita
per le sottrazioni a più cifre?
24/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Uso delle flag della ALU
Esempio: sottrazione a 64 bitSuddivisa come operazione a “due cifre” a 32 bit
SUBS r0, r0, r2SBCS r1, r1, r3
r0r1
r2r3
r0r1
-
=
r0r1
r2r3
r0r1
-
=
C
serve per segna-lare il prestito
25/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Esempio n. 7 sottrazione a 64 bit
0x0000000100000001 - 0x0000000000000003 =
0000 0000 0000 0000 0000 0000 0000 0001 -0000 0000 0000 0000 0000 0000 0000 0011 =1111 1111 1111 1111 1111 1111 1111 1110C=0
= 0x00000000FFFFFFFE
-10000 0000 0000 0000 0000 0000 0000 0001 -0000 0000 0000 0000 0000 0000 0000 0000 =0000 0000 0000 0000 0000 0000 0000 0000
232 + 1 – 3
= 232 - 2
26/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Per quale motivo nelle sottrazioni
il carry d'uscita è negato?
27/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Complemento a 2
0x0000000100000001 - 0x0000000000000003 =
0000 0000 0000 0000 0000 0000 0000 0001 -0000 0000 0000 0000 0000 0000 0000 0011 =1111 1111 1111 1111 1111 1111 1111 1110
0000 0000 0000 0000 0000 0000 0000 0001 +1111 1111 1111 1111 1111 1111 1111 1100 + 1 =1111 1111 1111 1111 1111 1111 1111 1110
equivale a :
nego e aggiungo 1
0xFFFFFFFE
deve venire: 0x00000000FFFFFFFE
28/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Complemento a 2
0x0000000100000001 - 0x0000000000000003 =
0000 0000 0000 0000 0000 0000 0000 0001 -0000 0000 0000 0000 0000 0000 0000 0011 =1111 1111 1111 1111 1111 1111 1111 1110
0000 0000 0000 0000 0000 0000 0000 0001 +1111 1111 1111 1111 1111 1111 1111 1100 + 1 =1111 1111 1111 1111 1111 1111 1111 1110
equivale a :
nego e aggiungo 1
1 Cin
no prestito
0Cin
si prestito0xFFFFFFFE
-1
deve venire: 0x00000000FFFFFFFE
29/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Complemento a 2
0x0000000100000001 - 0x0000000000000003 =
0000 0000 0000 0000 0000 0000 0000 0001 -0000 0000 0000 0000 0000 0000 0000 0000 =0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0001 +1111 1111 1111 1111 1111 1111 1111 1111 + 0 =0000 0000 0000 0000 0000 0000 0000 0000
equivale a :
0 Cin
si prestito
1Cin
no prestito (utile per altre cifre)
0xFFFFFFFE
-1 prestito
0x00000000 c.d.d.
deve venire: 0x00000000FFFFFFFE
non agg. 1: tengo conto del prestito
30/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Sottrazione
Semplificato notevolmente lo schema logico della ALU:
32-bit FULL ADDER Cin
Cout
NEG SUB
OP1 OP2
Carry in
così è calcolato il complemento a 2RIS
31/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Sottrazione
Il complemento a 1 si realizza con le XOR:
32-bit FULL ADDER Cin
Cout Carry in
RIS
SUB
OP2
b31
b30
b0
OP1
32/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Negazione ecomplemento a 2
Lo schema della ALU è piuttosto semplificato
Servono però 32 XOR
La sintesi di una XOR non occupa poco spazioserve qualche idea per risparmiare spazio
33/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Note su XOR
16 MOS per ogni XOR!
x32
512 MOS per il blocco di negazione!
Schema logico della XOR singola:
34/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Note su XOR
0
1Y
s
A
B
A⊕B
Per risparmiare spazio possiamo ricorrere al MUX:
A B Y0 0 01 0 10 1 11 1 0
esce A
esce A
Un MUX CMOS richiede 6 MOS
passiamo a 8 x 32 = 256 MOS
A
B
A
35/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Note su XOR
Risparmiamo altri 2 MOS per ogni XOR con lo schema:
Y = A se B è '0' B A A
Y
B
Y = A se B è '1'
A B Y0 0 01 0 10 1 11 1 0
esce A
esce A
se B = '0' l'inverter non può attivarsi!se B = '0' l'inverter si attiva.
36/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Note su XOR
16 x Lg
2.9 um @ 180 nm
tot: 92 um
B A A
Y
B
1
2
3
1
2
3
4
5
6
B
AY
5
6 4
37/37Elettronica dei Sistemi Programmabili – marzo 2014 – S. Salvatori
Altri esercizi
2
*
(*) no prestito(**) si prestito
**
N.B. sul libro, correggere il risultato della seconda riga