arch i - primo compitino.pdf

43
Architettura modulo 1 1 Legge Di Moore La legge di Moore dice che ogni 18 mesi raddoppiano: 1. Le prestazioni 2. Il numero di transistor 3. Le capacità delle memorie (DRAM) La velocità di accesso alla memoria cresce molto più lentamente. Architettura Di Riferimento L’architettura di riferimento è rappresentata dal modello proposto nel 1946 da JOHN VON NEUMANN ed è quello impiegato per tutti gli elaboratori convenzionali. Il "cuore" dell' elaboratore è costituito da due componenti: 1. La memoria, che contiene il programma da eseguire e i dati da esso utilizzati, 2. Il processore, cioè l'esecutore. Il processore opera ripetendo ciclicamente le seguenti operazioni: 1. Preleva dalla memoria la prossima istruzione da eseguire (FASE DI FETCH) 2. Interpreta l' istruzione, cioè ne riconosce il significato (FASE DI DECODE) 3. Esegue le operazioni corrispondenti all'istruzione (FASE DI EXECUTE) Possiamo subito osservare che le istruzioni da eseguire, e dunque i programmi, devono essere scritti in un linguaggio comprensibile dal processore, detto linguaggio macchina. Inoltre il processore non è in grado di elaborare direttamente i dati contenuti nella memoria centrale, ma può operare solo su dati che si trovano all'interno di appositi registri contenuti nel processore stesso. Pertanto, per effettuare un 'operazione su dati contenuti nella memoria, è necessario trasferire i dati dalla memoria nei registri del processore, effettuare l' operazione utilizzando i registri e trasferire il risultato nella memoria. Struttura Di Un Elaboratore Gli elementi principali di un elaboratore: 1. Unità centrale di elaborazione (Central Processing Unit- CPU). 2. Memoria di lavoro o memoria principale (Main Memory - MM) e dischi. I collegamenti principali di un calcolatore sulla motherboard: 1. Bus di sistema (dati, indirizzi, controllo) 2. Interfacce per i dispositivi di Input/Output - I/O: il terminale, la memoria di massa (di solito dischi magnetici), le stampanti, … CPU La CPU provvede ad eseguire le istruzioni che costituiscono i diversi programmi elaborati dal calcolatore. Eseguire un’istruzione vuol dire operare delle scelte, eseguire dei calcoli a seconda dell’istruzione e dei dati a disposizione. Gli elementi principali della CPU (Unità centrale di elaborazione): 1. BANCO DI REGISTRI (Register File) ad accesso rapido, in cui memorizzare i dati di utilizzo più frequente. Il tempo di accesso ai registri è circa 10 volte più veloce del tempo di accesso alla memoria principale. Il register file è evoluto in cache + registri.

Upload: jbruiser

Post on 05-Aug-2015

84 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arch I - Primo Compitino.pdf

Architettura modulo 1

1

Legge Di Moore La legge di Moore dice che ogni 18 mesi raddoppiano:

1. Le prestazioni 2. Il numero di transistor 3. Le capacità delle memorie (DRAM)

La velocità di accesso alla memoria cresce molto più lentamente.

Architettura Di Riferimento L’architettura di riferimento è rappresentata dal modello proposto nel 1946 da JOHN VON NEUMANN ed è quello impiegato per tutti gli elaboratori convenzionali. Il "cuore" dell' elaboratore è costituito da due componenti:

1. La memoria, che contiene il programma da eseguire e i dati da esso utilizzati, 2. Il processore, cioè l'esecutore.

Il processore opera ripetendo ciclicamente le seguenti operazioni: 1. Preleva dalla memoria la prossima istruzione da eseguire (FASE DI FETCH) 2. Interpreta l' istruzione, cioè ne riconosce il significato (FASE DI DECODE) 3. Esegue le operazioni corrispondenti all'istruzione (FASE DI EXECUTE)

Possiamo subito osservare che le istruzioni da eseguire, e dunque i programmi, devono essere scritti in un linguaggio comprensibile dal processore, detto linguaggio macchina. Inoltre il processore non è in grado di elaborare direttamente i dati contenuti nella memoria centrale, ma può operare solo su dati che si trovano all'interno di appositi registri contenuti nel processore stesso. Pertanto, per effettuare un 'operazione su dati contenuti nella memoria, è necessario trasferire i dati dalla memoria nei registri del processore, effettuare l' operazione utilizzando i registri e trasferire il risultato nella memoria.

Struttura Di Un Elaboratore Gli elementi principali di un elaboratore:

1. Unità centrale di elaborazione (Central Processing Unit- CPU). 2. Memoria di lavoro o memoria principale (Main Memory - MM) e dischi.

I collegamenti principali di un calcolatore sulla motherboard:

1. Bus di sistema (dati, indirizzi, controllo) 2. Interfacce per i dispositivi di Input/Output - I/O: il terminale, la memoria di massa (di solito dischi

magnetici), le stampanti, …

CPU La CPU provvede ad eseguire le istruzioni che costituiscono i diversi programmi elaborati dal calcolatore. Eseguire un’istruzione vuol dire operare delle scelte, eseguire dei calcoli a seconda dell’istruzione e dei dati a disposizione. Gli elementi principali della CPU (Unità centrale di elaborazione):

1. BANCO DI REGISTRI (Register File) ad accesso rapido, in cui memorizzare i dati di utilizzo più frequente. Il tempo di accesso ai registri è circa 10 volte più veloce del tempo di accesso alla memoria principale. Il register file è evoluto in cache + registri.

Page 2: Arch I - Primo Compitino.pdf

Architettura modulo 1

2

a. Registro Program Counter (PC). Contiene l’indirizzo dell’istruzione corrente da aggiornare durante l’evoluzione del programma, in modo da prelevare dalla memoria la corretta sequenza di istruzione;

b. Registro Instruction Register (IR). Contiene l’istruzione in corso di esecuzione.

2. UNITÀ PER L’ESECUZIONE DELLE OPERAZIONI ARITMETICO-LOGICHE (Arithmetic Logic Unit - ALU). I dati forniti all’ALU provengono direttamente da registri interni alla CPU. Possono provenire anche dalla memoria, ma in questo caso devono essere prima trasferiti in registri interni alla CPU. Dipende dalle modalità di indirizzamento previste;

3. UNITÀ AGGIUNTIVE PER ELABORAZIONI PARTICOLARI COME UNITÀ ARITMETICHE PER DATI IN VIRGOLA MOBILE (Floating Point Unit – FPU), sommatori ausiliari, ecc.;

4. UNITÀ DI CONTROLLO. Controlla il flusso e determina le operazioni di ciascun blocco

Ciclo Di Esecuzione Di Un Istruzione MIPS

LETTURA DELL’ISTRUZIONE (FETCH) Istruzioni e dati risiedono nella memoria principale, dove sono stati caricati attraverso un’unità di ingresso. L’esecuzione di un programma inizia quando il registro PC punta alla (contiene l’indirizzo della) prima istruzione del programma in memoria. Il segnale di controllo per la lettura (READ) viene inviato alla memoria. Trascorso il tempo necessario all’accesso in memoria, la parola indirizzata (in questo caso la prima istruzione del programma) viene letta dalla memoria e trasferita nel registro IR. Il contenuto del PC viene incrementato in modo da puntare all’istruzione successiva. DECODIFICA DELL’ISTRUZIONE L’istruzione contenuta nel registro IR viene decodificata per essere eseguita. Alla fase di decodifica corrisponde la predisposizione della CPU (apertura delle vie di comunicazione appropriate) all’esecuzione dell’istruzione. In questa fase vengono anche recuperati gli operandi. Nelle architetture MIPS gli operandi possono essere solamente nel Register File oppure letti dalla memoria.

Architetture a registri: 1. Se un operando risiede in memoria, deve essere prelevato caricando l’indirizzo dell’operando nel

registro MAR della memoria e attivando un ciclo di READ della memoria. 2. L’operando letto dalla memoria viene posto nel registro della memoria MDR per essere trasferito

alla ALU, che esegue l’operazione. Nelle architetture MIPS, l’operando viene trasferito nel Register file nella fase di Scrittura.

Architetture LOAD/STORE:

1. Le istruzioni di caricamento dalla memoria sono separate da quelle aritmetico/logiche. CALCOLO DELL’ISTRUZIONE (ESECUZIONE) Viene selezionato il circuito / i circuiti combinatori appropriati per l’esecuzione delle operazioni previste dall’istruzione e determinate in fase di decodifica. Tra le operazioni previste, c’è anche la formazione dell’indirizzo di memoria da cui leggere o su cui scrivere un dato. LETTURA / SCRITTURA IN MEMORIA In questa fase il dato presente in un registro, viene scritto in memoria oppure viene letto dalla memoria un dato e trasferito ad un registro. Questa fase non è richiesta da tutte le istruzioni!

Page 3: Arch I - Primo Compitino.pdf

Architettura modulo 1

3

Nel caso particolare di Architetture LOAD/STORE, quali MIPS, le istruzioni di caricamento dalla memoria sono separate da quelle aritmetico/logiche. Se effettuo una Lettura / Scrittura, non eseguo operazioni aritmetico logiche sui dati. Sistema di memoria “sganciato” dalla coppia register-file + CPU. SCRITTURA IN REGISTER FILE (WRITEBACK) Il risultato dell’operazione può essere memorizzato nei registri ad uso generale oppure in memoria. Non appena è terminato il ciclo di esecuzione dell’istruzione corrente (termina la fase di Write Back), si preleva l’istruzione successiva dalla memoria.

Page 4: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 1I

1

La rappresentazione in virgola mobile standard IEEE 754 a singola precisione (32 bit):

• la rappresentazione del valore zero è data da un'esponente uguale a zero mantissa uguale a zero

• La rappresentazione dei numeri in virgola mobile ha come esponente un valore compreso tra 1 e 254 e come mantissa un qualsiasi numero diverso da 0.

• la rappresentazione dei valori +∞ -∞ ha come esponente il valore massimo (255 quindi in binario 11111111) e come mantissa 0 e naturalmente come segno 1 o 0 a seconda se è più o meno infinito.

• Lo standard IEEE 754 ha anche un simbolo per il risultato di una operazione non consentita, come

0/0 o la sottrazione di infinito da infinito. Questo simbolo è NaN, che sta per NotANumber (Non-Numero).La sua rappresentazione abbiamo il campo dell'esponente riempito di "1" e un numero diverso da zero nel campo della mantissa.

Usando il formato IEEE 754 standard, in prossimità dello zero avremo un cambiamento nella linearità della quantizzazione: da 0 al più piccolo numero positivo rappresentabile ci sarà un salto dell’ordine di 10-38 mentre per passi successivi i salti saranno dell’ordine di 10-45. La rappresentazione in formato IEEE 754 standard del più piccolo numero positivo è: <0,00000001,00000000000000000000000> Usando il formato IEEE 754 denormalizzato, in prossimità dello zero la quantizzazione risulta lineare: da 0 al più piccolo successivo ci sarà un salto dell’ordine di 10-45 La rappresentazione in formato IEEE 754 denormalizzato del più piccolo numero positivo è: <0,00000000,00000000000000000000001> Perciò nel tentativo di spremere ogni bit di precisione lo standard permette ad alcuni numeri di essere rappresentati in forma non normalizzata. Essi hanno lo stesso esponente dello zero, ma una mantissa non-nulla.

Page 5: Arch I - Primo Compitino.pdf

MINTERMINE: un implicante che contiene tutte le N variabili della funzione IMPLICANTE: prodotto delle variabili (in forma naturale o negata) per le quali la funzione vale 1 L' OVERFLOW è dovuto a delle operazioni aritmetiche che generano un risultato di valore troppo grande per essere rappresentato all'interno dei bits a disposizione CODIFICA BINARIA INTERA: La proprietà caratteristica della codifica intera è la distanza costante tra due numeri RAPPRESENTAZIONE IN VIRGOLA FISSA (FIXED-POINT): La rappresentazione in virgola fissa consiste nel rappresentare un numero reale con segno tramite N bit, supponendo fissa la posizione della virgola. In un numero rappresentato in virgola fissa a N bits, viene utilizzato un bit per il segno, I bits per rappresentare la parte intera e D bits per rappresentare la parte decimale (ovviamente sarà N = I + D +1). Questo metodo di rappresentazione dei numeri reali macchina non è conveniente in quanto i valori rappresentabili sono relativamente pochi e la precisione che si ottiene non è elevata. Il limite della rappresentazione in virgola fissa risiede proprio nella rigidità della posizione assegnata alla virgola. Infatti è stato visto che nella rappresentazione in Virgola Fissa, il numero di bits assegnati per codificare la parte intera e quelli assegnati per codificare la parte frazionaria sono fissi. Quindi, se per esempio si fissa la virgola in modo tale che la gran parte dei bits è dedicata per codificare la parte intera, allora la precisione nel codificare numeri piccoli sarà molto bassa. campo di valori rappresentabili relativamente ristretto - valori rappresentabili distribuiti uniformemente - ⇒ errori di approssimazione costanti in tutto l’intervallo rappresentato RAPPRESENTAZIONE IN VIRGOLA MOBILE (FLOATING-POINT): 32 bit (singola precisione) 1 bit per segno, 8 bits per l’esponente, 23 bits mantissa 64 bit (doppia precisione) 1 bit per segno, 11 bits per l’esponente, 52 bits mantissa Utilizza la cosiddetta notazione scientifica (esponenziale) Permette di rappresentare numeri con ordini di grandezza molto differenti utilizzando per la rappresentazione un insieme limitato di cifre. Il numero di cifre usate per l’esponente determina di quante posizioni posso spostare la virgola rispetto alla posizione ‘standard’ (a sinistra della cifra più significativa della mantissa) Lo spostamento della virgola può avvenire sia verso destra che verso sinistra. Quando il numero di cifre necessarie per una rappresentazione corretta del risultato di un’operazione è maggiore del numero di cifre a disposizione (overflow), il numero viene troncato: si trascurano cioè le cifre meno significative per le quali “non c’è spazio”. Nella codifica IEEE 754 standard, in prossimità dello zero avremo un cambiamento nella linearità della quantizzazione: da 0 al più piccolo numero positivo rappresentabile ci sarà un salto dell'ordine di 10-38 mentre per passi successivi i salti saranno dell'ordine di 10-45. Usando il formato IEEE 754 DENORMALIZZATO, in prossimità dello zero la quantizzazione risulta lineare: da 0 al più piccolo successivo ci sarà un salto dell'ordine di 10-45 così come per passi successivi. il salto tra 0 ed il primo positivo successivo risulta minore e quindi migliore in termini di precisione ottenibile nei calcoli, rispetto al formato IEEE 754 standard. Lo svantaggio maggiore del formato denormalizzato rispetto al formato standard è che richiede per l'esecuzione dei calcoli aritmetici di algoritmi più complicati.

Page 6: Arch I - Primo Compitino.pdf

CONFIGURAZIONI NOTEVOLI: 0 Mantissa: 0 Esponente: 00000000 +∞ Mantissa: 0 Esponente: 11111111 NaN (not a number) Mantissa: ≠0 Esponente: 11111111 Numero denormalizzato Mantissa: ≠0 Esponente: 00000000

Page 7: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 3

1

L'algebra di BOOLE, sviluppata nel 1854 da George BOOLE, un matematico inglese (1815-1864), assume un ruolo importante in vari ambiti, in particolare nella logica matematica e nell'elettronica digitale. l'algebra di BOOLE, anche detta algebra BOOLEANA, è un ramo dell'algebra astratta che opera con solo due variabili 0 e 1 (Falso, Vero), dette BOOLEANE o logiche. Qualunque funzione BOOLEANA (logica) può essere espressa combinando opportunamente tre operazioni logiche elementari.

AND

OR

NOT

Si dice anche che AND, OR, NOT formano un set completo. Il valore di una funzione logica (BOOLEANA) può essere rappresentato in 3 modi: Circuito Tabella della verità Espressione simbolica [es. F = (A and B) or (B and not(c)) ] Operatore NOT L'operatore NOT restituisce il valore inverso a quello in entrata. Una concatenazione di NOT è semplificabile con un solo NOT in caso di dispari ripetizioni o con nessuno nel caso di pari. Viene detto anche INVERTER LOGICO

A

Y

A è la variabile in ingresso Y è il valore calcolato dal nostro operatore se A è vero (TRUE=1), NOT A è falso (FALSE=0) _ Y=NOT A = A = !A simboli alternativi: ~,! ,Ā,¬ Le tabelle della verità sono tabelle matematiche usate nella logica per determinare se, attribuiti i valori di verità alle proposizioni che la compongono, una determinata proposizione è vera o falsa. Tabella della verità

Operatore AND L'operazione AND dà come valore 1 se tutti gli operandi hanno valore 1, mentre restituisce 0 in tutti gli altri casi. Tale operazione è anche detta PRODOTTO LOGICO.

A

Y

B A e B sono le variabili in ingresso Y è il valore calcolato dal nostro operatore Y = A AND B = A•B = AB simboli alternativi: *, AND, ^

A NOT A 0 1

1 0

Page 8: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 3

2

Tabella della verità

Operatore OR L'operazione logica OR restituisce 1 se almeno uno degli elementi è 1, mentre restituisce 0 in tutti gli altri casi. Tale operazione è anche detta SOMMA LOGICA

A

Y

B A e B sono le variabili in ingresso Y è il valore calcolato dal nostro operatore Y = A or B = A+B simboli alternativi: +, |, v Tabella della verità

Concatenazione del NOT

Inserire un cerchietto all’ingresso corrisponde a negare la variabile in ingresso. Inserire un cerchietto all’uscita corrisponde a negare (complementare) l’uscita. Operatore NOR L'operatore NOR (Operatore OR negato), la negazione del risultato dell'operazione OR, restituisce 1 se e solo se tutti gli elementi sono 0, mentre restituisce 0 in tutti gli altri casi.

A

Y B

A e B sono le variabili in ingresso Y è il valore calcolato dal nostro operatore ___ Y = A nor B = A+B = not(or(A,B)) simboli alternativi: ↓

A B A and B 0 0 0 0 1 0

1 0 0

1 1 1

A B A or B 0 0 0 0 1 1 1 0 1 1 1 1

Page 9: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 3

3

Tabella della verità

Operatore NAND

L'operatore NAND (Operatore AND negato), la negazione del risultato dell'operazione AND, restituisce 0 se e solo se tutti gli elementi sono 1, mentre restituisce 1 in tutti gli altri casi.

A

Y B

A e B sono le variabili in ingresso Y è il valore calcolato dal nostro operatore ___ Y = A nand B = A•B = not(and(A,B)) simboli alternativi: ↑ Tabella della verità

Nella concatenazione degli operatori gli stessi hanno priorità differenti.

In assenza di parentesi la negazione (NOT) ha la priorità su tutti e AND ha la priorità su OR. Anche sulle negazioni esiste una gerarchia: Es.

A+B·C = A+(B·C) NOT A·C = (NOT(A))·C

___ ____

_ _ _ _ A ·B·C = [(A) ·(B)]·C

Regole algebriche Doppia Inversione ~(~x) = x

AND OR Identità 1 x = x 0+x=x

Elemento nullo 0x=0 1+x=1 Idempotenza xx=x x+x=x

Inverso _

xx=0 _

x+x=1 Commutativa xy=yx x+y=y+x Associativa (xy)z=x(yz) (x+y)+z= x+(y+z)

AND rispetto a OR OR rispetto a AND

Distributiva x(y+z) = xy+xz x+yz = (x+y)(x+z) *Assorbimento x(x+y)=x x+xy=x

De Morgan

A B A nor B 0 0 1 0 1 0 1 0 0 1 1 0

A B A nand B 0 0 1 0 1 1

1 0 1

1 1 0

Page 10: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 3

4

Teoremi di De Morgan

* Teorema dell'assorbimento

Primo teorema dell'assorbimento:

A·(A+B) = A·A+A·B = A+A·B = A(1+B) = A

A+A·B = A(1+B) = A

Secondo teorema dell'assorbimento:

A+~A·B = (A+~A) ·(A+B) = 1·(A+B) = A+B

A·(!A+B) = A·~A+A·B = A·B

Semplificazioni notevoli

Principio di dualità • Nell’algebra di Boole vale il principio di dualità. Il duale di una funzione booleana si ottiene sostituendo AND ad OR, OR ad AND, gli 0 agli 1 e gli 1 agli 0. Esempi:

Identità 1 x = x 0 + x = x

Elemento nullo 0 x = 0 1 + x = 1

Page 11: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 3

5

XOR

L'operatore XOR, detto anche OR esclusivo o disgiunzione esclusiva, restituisce 1 se e solo se uno degli operandi è uguale a 1,

mentre restituisce 0 in tutti gli altri casi.

Il simbolo di una porta XOR è:

A

Y B

Tabella della verità

A XOR⊕B = (A·~B) + (A·~B) simboli alternativi: ⊕

XNOR

L'operatore XNOR, detto anche EX-NOR, è la negazione del risultato dell'operazione XOR; restituisce 1 se gli operandi sono uguali mentre restituisce o in tutti gli altri casi. Il simbolo di una porta XNOR è: Tabella della verità

composta da un NOT in serie ad un XOR. ~(A XOR B) = A XNOR B

A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0

A

Y B

A B A XNOR B 0 0 1 0 1 0

1 0 0

1 1 1

Page 12: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 4

1

2 Circuiti combinatori sono circuiti logici digitali in cui le operazioni (logiche) dipendono solo da una combinazione degli input. i Circuiti combinatori sono senza memoria. Ogni volta che si inseriscono in ingresso gli stessi valori, si ottengono le stesse uscite. I Circuiti combinatori descrivono delle funzioni Booleane (es. F = A B + B~C). Queste funzioni si ottengono combinando tra loro (in parallelo o in cascata) gli operatori logici: NOT, AND, OR. Il loro funzionamento può essere descritto dalla Tabella della Verità. Come nelle funzioni algebriche, il risultato è aggiornato immediatamente dopo il cambiamento dell’input (si suppone il tempo di commutazione trascurabile, tempo di attesa prima di guardare l’output sufficientemente ampio per permettere a tutti i circuiti la commutazione). é la combinazione di operatori logici che implementa la funzione Booleana è implementata . Ad ogni espressione logica è associato un ben preciso circuito. F = A B + B~C = (~A+~B)(~B+C) Ad ogni espressione logica corrisponde un circuito, ad ogni circuito corrisponde una tabella delle verità, ad ogni tabella della verità, in generale, non corrisponde un unico circuito possibile.

Regole algebriche Doppia Inversione ~(~x) = x

AND OR Identità 1 x = x 0+x=x

Elemento nullo 0x=0 1+x=1 Idempotenza xx=x x+x=x

Inverso x~x=0 x+~x=1 Commutativa xy=yx x+y=y+x

Associativa (xy)z=x(yz) (x+y)+z= x+(y+z)

AND rispetto a OR OR rispetto a AND Distributiva x(y+z) = xy+xz x+yz = (x+y)(x+z)

*Assorbimento x(x+y)=x x+xy=x

De Morgan X nand Y= ~X or ~Y

X nor Y= ~X and ~Y

Regole algebriche si più variabili

AND OR Commutativa x y z = y x z = z x y x+y+z=y+x+z=z+x+y

AND rispetto ad OR OR rispetto ad AND Distributiva x (yh+z) = xyh+xz xh + yz = (xh+y) (xh+z) De Morgan ~(XYZ) = ~X + ~Y + ~Z ~ (X+Y+Z) = ~X ~Y ~Z

Page 13: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 4

2

La prima forma canonica (SOP) Prendiamo una funzione logica come F =~AB~C + AB dove AB è l'IMPLICANTE cioè il prodotto delle variabili (in forma naturale o negata) per le quali la funzione vale 1 e dove ~AB~C è il MINITERMINE cioè un implicante che contiene tutte le variabili della funzione. Il percorso classico consiste nel:

• compilare la tabella della verità • trovare i minitermini • ricavo la SOP • semplificare (ottimizzazione)

La SOP è la prima forma canonica La forma canonica di una funzione è la somma dei suoi MINTERMINI. Qualunque funzione è esprimibile in forma canonica. Come si procede per determinare i minitermini di una funzione? Si compila la tabella della verità e in ogni caso in cui risulti vera la funzione si aggiunge un minitermine che è composto dal prodotto delle variabili e dove quest'ultime saranno in forma naturale o negata a seconda del valore che hanno assunto caso specifico. es. Primo passo compiliamo la tabella della verità per questa funzione: F =~AB~C + AB A B C F 0 0 0 0 0 0 1 0 0 1 0 1 Inserisco il minitermine (dove la variabile risulta 0 nel minitermine assumerà la forma negata) ~AB~C 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 Inserisco il minitermine (dove la variabile risulta 0 nel minitermine assumerà la forma negata) AB~C 1 1 1 1 Inserisco il minitermine (dove la variabile risulta 0 nel minitermine assumerà la forma negata) ABC quindi otterremo la SOP: F=~AB~C + AB~C + ABC La SOP si può ottenere mediante la manipolazione algebrica della funzione. F =~AB~C + AB dalla funzione notiamo che è la somma logica di un MINITERMINE e di un IMPLICANTE quindi dobbiamo trasformare l'implicante in minitermine. Sfruttando Il teorema dell'Identità (AB = AB1) per non modificare il valore di AB avremo: F =~AB~C + AB1 Sfruttando Il teorema dell' Inverso (C+~C=1): F =~AB~C + AB (C+~C) Semplificando otterremo la SOP: F=~AB~C + AB~C + ABC

Page 14: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 4

3

La SOP è una forma canonica perché è la Forma universale mediante la quale è possibile rappresentare qualunque funzione booleana. La forma canonica non è una forma ottima, ma un punto di partenza per l’ottimizzazione. E’ una funzione booleana a n ingressi che vale 1 in corrispondenza della sola iesima configurazione di ingresso. Al massimo, 2n MINTERMINI per ogni n variabili. Ogni MINTERMINE è rappresentabile con un AND con n ingressi.

Vantaggi della SOP Dalla forma canonica (somma di MINTERMINI) è facile passare al circuito: ogni MINTERMINE è un AND Tutti gli AND entrano in un OR. è un'implementazione regolare, a due livelli di porte.

Cammino Critico Gli elementi costruttivi sono porte a due ingressi. Quindi una porta a N ingressi è uguale a N-1 porte a 2 ingressi in serie. Ogni circuito logico è caratterizzato da un tempo di commutazione. Più porte devo attraversare, più è lungo il tempo della transizione del circuito nel suo complesso. Il CAMMINO CRITICO è rappresentato dal massimo numero di porte da attraversare da ingresso a uscita (porte in serie). Nel calcolare il cammino critico non si contano gli INVERTERS che sono inclusi nelle porte. es. calcoliamo numero di porte totali e cammino critico

Cammino critico pari a 11: cammino più lungo in circuiti con porte a 2 ingressi. Numero di porte: 35. Il cammino critico può essere ridotto attraverso la manipolazione algebrica della funzione.

Page 15: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 4

4

es. F = ~XY~Z~V + ~XY~ZV = ~XY~Z(~V +V) = ~XY~Z

Cammino critico pari a 10. Numero di porte pari a 30. Possiamo in questo caso ridurre il cammino critico riorganizzando gli OR

Cammino critico pari a 6. Numero di porte pari a 30.

Page 16: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 5

1

2 Circuiti combinatori I circuiti logici presenti nei sistemi digitali possono essere sequenziali o combinatori. I circuiti sequenziali impiegano elementi di memoria e le loro uscite sono in funzione sia dei valori assunti dagli ingressi sia dei valori immagazzinati negli elementi di memoria. Nei Circuiti combinatori le operazioni (logiche) dipendono solo da una combinazione degli input visto che sono circuiti senza memoria. Ogni volta che si inseriscono in ingresso gli stessi valori, si ottengono le stesse uscite. Il risultato non dipende dallo stato del circuito.

Date n variabili di ingresso, esistono 2n possibili combinazioni binarie in ingresso, per ciascuna delle quali il circuito genera gli m valori binari delle uscite. Di conseguenza, un circuito combinatorio può essere descritto da una tabella di verità che elenca i valori assunti dalle uscite per ogni combinazione delle variabili di ingresso. I circuiti combinatori descrivono delle funzioni Booleane. Queste funzioni si ottengono combinando tra loro (in parallelo o in cascata) gli operatori logici: NOT, AND, OR. Come nelle funzioni algebriche, il risultato è aggiornato immediatamente dopo il cambiamento dell’input (si suppone il tempo di commutazione trascurabile, tempo di attesa prima di guardare l’output sufficientemente ampio per permettere a tutti i circuiti la commutazione).

Funzioni in forma complementata Il complemento di una funzione F, indicato con ~F. si ottiene complementando i valori assunti da F nella tabella di verità. Il complemento di una funzione può anche essere derivato algebricamente applicando il teorema di DeMorgan. La forma generale di questo teorema stabilisce che il complemento di un'espressione si ottiene scambiando le operazioni AND e OR, complementando ogni variabile e constante e mantenendo, nella trasformazione, le precedenze implicite ed esplicite presenti. Una funzione booleana in forma algebrica, può essere espressa in molte forme tra loro equivalenti: alcune di queste vengono chiamate forme canoniche. Esistono 2 forme canoniche (equivalenti) che garantiscono di poter implementare una qualunque tabella di verità con solo due livelli di porte OR, AND e NOT. Prima forma canonica (SOP) La prima forma canonica è costituita dalla somma logica dei mintermini associati alle righe della tabella nelle quali l’uscita assume valore 1. I mintermini sono caratterizzati dal contenere tutte le variabili in ingresso tra loro moltiplicate, prese complementate se valgono 0 e non complementate se valgono 1. Per la definizione di somma logica, tale funzione — detta somma canonica— assume infatti valore 1 quando uno qualsiasi dei suoi addendi vale 1 (quindi in corrispondenza delle righe considerate) e valore 0 quando nessuno dei suoi addendi vale 1 (quindi in corrispondenza di tutte le altre righe). La prima forma canonica non è la rappresentazione più compatta della funzione, ma è facilmente ottenibile. Per ottenere una forma più compatta occorre semplificare.

Seconda forma canonica (POS) la seconda forma canonica è costituita dal prodotto logico dei maxtermini associati alle righe della tabella nelle quali l’uscita assume valore 0. I maxtermini sono caratterizzati dal contenere tutte le variabili in ingresso tra loro addizionate, prese complementate se valgono 1 e non complementate se valgono 0. Per la definizione di prodotto logico, tale funzione — detta prodotto canonico — assume infatti valore 0 quando uno qualsiasi dei suoi fattori vale 0 (quindi in corrispondenza delle righe considerate) e valore 1 quando nessuno dei suoi addendi vale 0 (quindi in corrispondenza di tutte le altre righe). La forma canonica può essere implementata facilmente da un algoritmo e si presta bene a essere mappata in un'architettura a 2 livelli.

Page 17: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 5

2

Le Logiche programmabili Sono dispositivi hardware che mettono a disposizione componenti logici più o meno complessi che possono essere connessi tra loro (programmazione delle connessioni) a seconda delle esigenze di progetto. Dispongono di Componenti logici (Porte logiche) e Linee di connessione Le Logiche programmabili a 2 livelli sono usate per realizzare funzioni a due livelli (SOP) Dispongono di Un numero di ingressi e di uscite fissato Un piano AND, per la costruzione dei mintermini Un piano OR, per la somma dei mintermini Sono tre i tipi principali di Logiche programmabili a 2 livelli:

PLA (Programmable Logic Array) Piani AND e OR programmabili Si costruiscono solo i mintermini necessari

PAL (Programmable Array Logic) Solo il piano AND programmabile Si costruiscono solo i mintermini necessari

ROM (Read-Only Memory) Piano AND pre-programmato mediante un decoder Sono disponibili tutti i mintermini

PLA

Le PLA sono architetture a 2 livelli con un certo numero di porte di entrata e di uscite. Nel primo livello avremo un numero di porte AND (K) in parallelo pari al numero di mintermini della SOP corrispondente al circuito che vogliamo realizzare. Sappiamo che se indichiamo con N il numero di entrate e con K il numero delle porte AND avremo che k dovrà essere minore di 2N. Nel secondo livello avremo un numero di porte OR pari al numero di uscite. Nella PLA c'è un dispositivo Hardware che seleziona le connessioni ovverosia brucia le connessioni che non servono. Questo significa che nelle porte AND arrivano i segnali delle varie entrate sia nella versione normale che nella versione negata quindi quando programmo la PLA vado a interrompere le connessioni che portano i segnali nella versione che non mi interessa. Stessa cosa succede per gli OR infatti agli OR arrivano tutte le uscite dei mintermini (AND), se un determinato OR dovesse riguardare solo alcuni mintermini le altre connessioni superflue verrebbero interrotte. Le PLA possono quindi realizzare qualsiasi circuito che rientri nel proprio budget.

DECODER (decodificatore) Il decoder è un circuito combinatorio dotato di N linee di input e di 2N linee di output. Per ciascuna delle possibili combinazioni di ingresso solo una delle uscite assume il valore 1 mentre le altre sono uguali a 0. l'uscita che assume il valore 1 ha come indice il valore decimale corrispondente al valore binario espresso dai bit di ingresso. es. decoder a 3-bit di ingresso

A B C Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1

Y0=~A~B~C Y1=~A~BC Y2=~AB~C Y3=~ABC

Y4=A~B~C Y5=A~BC Y6=AB~C Y7=ABC

Page 18: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 5

3

Il Decoder è fatto da 8 porte AND in parallelo visto che sono 8 mintermini in parallelo. Il Decoder è utilizzato per indirizzare la memoria (ROM).

ROM Una ROM (Memoria A Sola Lettura / Read Only Memory ) è detta "memoria" poiché dispone di un insieme di locazioni che possono essere lette; tuttavia il contenuto di tali locazioni è fisso, determinato al momento della creazione della ROM stessa. In una ROM, una configurazione di ingresso, denominata indirizzo, è associata una configurazione di uscita (m), denominata parola (ampiezza della ROM). La ROM è una Logica programmabile a 2 livelli dove il primo livello è costituito da un decodificatore di indirizzi (piano AND fissato) e il secondo livello costituito da una matrice di m porte OR (piano programmabile).

Il decodificatore degli indirizzi nelle memorie ROM realizza tutti i 2n mintermini (l'altezza della ROM), a partire da n variabili di ingresso (indirizzi). Una ed una sola uscita del decoder è attiva alla volta. Il numero totale di bit in una ROM è pari al prodotto tra altezza ed ampiezza; questi due parametri sono indicati complessivamente come la forma della ROM. es. Schema logico di una ROM a 3 ingressi e 4 uscite (non programmata).

Le ROM sono dispositivi completamente decodificati, ossia contengono un'intera parola di uscita per tutte le possibili combinazioni di ingresso, mentre le PLA sono solo parzialmente decodificate. Ciò significa che una ROM conterrà sempre più elementi: la ROM contiene gli elementi relativi a tutti i possibili ingressi, mentre la PLA contiene solo i termini prodotto utili. Al crescere del numero di ingressi, il numero di elementi di una ROM cresce esponenzialmente, mentre per la maggior parte delle funzioni logiche il numero di termini prodotto cresce molto più lentamente. Tale differenza rende in genere le PLA più efficienti ai fini della realizzazione delle funzioni logiche combinatorie. il vantaggio della ROM è quello di poter facilmente modificare il contenuto della ROM stessa se la funzione logica dovesse cambiare, poiché la dimensione della ROM resterà immutata.

Page 19: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 5

4

Condizioni Di Indifferenza Nell'implementazione della logica combinatoria nascono spesso delle situazioni in cui è indifferente il valore di qualche uscita. Tali situazioni vengono denominate condizioni di indifferenza e si rivelano molto importanti ai fini dell'ottimizzazione della realizzazione delle funzioni logiche. vengono rappresentate con delle X nella parte relativa alle uscite della tabella di verità. La minimizzazione delle funzioni logiche è fondamentale per ottenere delle implementazioni efficienti. es. Viste le condizioni di indifferenza si determini l'implementazione più efficiente.

A B C Y 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 X 1 0 1 0 1 1 0 X 1 1 1 1

Ho 4 possibilità: 1. La prima e la seconda X uguale a zero. Avremo la funzione Y = ~ABC + ABC = BC(~A+A) = BC 2. La prima X uguale a uno e la seconda X uguale a zero. Avremo la funzione Y = ~ABC + A~B~C + ABC = BC(~A+A) =

BC + A~B~C. 3. La prima X uguale a zero e la seconda X uguale a uno. Avremo la funzione Y = ~ABC + AB~C + ABC = ~ABC +AB =

B(~ AC+ A) = B(A+C) = AB + AC 4. La prima e la seconda X uguale a uno. Avremo la funzione Y = ~ABC+ A~B~C + AB~C + ABC = BC + A~C

L'implementazione più efficiente si ha ponendo la prima e la seconda X uguale a zero ENCODER (codificatore) Il codificatore (o encoder) è un circuito logico che calcola la funzione inversa del decodificatore, ricevendo N ingressi e producendo un numero di uscite pari al log2N. Il segnale di uscita indicherà (in binario) l` indice (espresso in decimale) della linea di ingresso che e stata attivata (gli indici delle linee in ingresso partono da 0 e vanno da destra a sinistra).

I3 I2 I1 I0 A B 0 0 0 0 X X 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 1 X X 0 1 0 0 1 0 0 1 0 1 X X 0 1 1 0 X X 0 1 1 1 X X 1 0 0 0 1 1 1 0 0 1 X X 1 0 1 0 X X 1 0 1 1 X X 1 1 0 0 X X 1 1 0 1 X X 1 1 1 0 X X 1 1 1 1 X X

Sarà cura del progettista di far in modo che nel circuito sarà attiva solo una linea di ingresso alla volta (e non meno di una) altrimenti il circuito non funzionerebbe. Tutte le altre combinazioni, come potete notare dalla tabella della verità, non si dovranno mai verificare e quindi saranno considerate condizioni di indifferenza. La funzione encoder sarà A = ~I3 I2~I1~ I0 + I3~ I2~I1~ I0 = ~I1~ I0(~I3 I2+ I3~ I2 ) = ~I1~ I0(I3 ⊕ I2 ) B = ~I3 ~I2 I1~ I0 + I3~ I2~I1~ I0 = ~I2~ I0(~I3 I1+ I3~ I1 ) = ~I2~ I0(I3 ⊕ I1 ) Viste le condizioni di indifferenza quale sarà l'implementazione migliore? A = I3 ⊕ I2 B = I3 ⊕ I1

MULTIPLEXER (MUX) Un multiplexer (selettore) è un circuito combinatorio in cui un segnale di selezione S (un segnale in ingresso) permette di portare sull'uscita y uno degli N segnali d'ingresso . I segnali di selezione che servono sono il log2N. Il segnale di selezione S apre la porta opportuna cioè chiude il cammino opportuno quindi il MUX si comporta come un interruttore.

Page 20: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 5

5

S X0 X1 Y

QUANDO S = 0 Y=X0

0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1

QUANDO S = 1 Y=X1

1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1

Dalla tabella della verità otteniamo i mintermini (m) e quindi la SOP: Y = m2+m3+m5+m7 Y = ~S X0 ~X1+ ~S X0 X1+ S ~X0 X1+ S X0 X1 Y= ~S X0 (~X1+ X1) + S X1 (~X0+ X0) Y= ~S X0 + S X1

Dalla tabella della verità otteniamo i maxtermini (m) e quindi la POS: Y= (S +X0 +X1)(S+ X0 +~X1)(~ S+ X0 +X1)(~ S+ ~X0 +X1) Definisco A = S +X0 B = ~S +X1 Y=(A +X1)(A +~X1)(B+ X0)(B+~X0) Y=(AA+A~X1+AX1+ X1~X1)(BB+B~X0+ BX0+ X1~X1) Y=(A+A~X1+AX1)(B+B~X0+ BX0) Y=[A+A(~X1+X1)][B+B(~X0+ X0)] Y=(A+A)(B+B) Y=AB Y=(S +X0)( ~S +X1) Y=S~S +~SX0+ SX1+X0X1 Y=~SX0+ SX1

MUX a più vie

COMPARATORE

Il Comparatore è un circuito combinatorio caratterizzato da 2 insiemi di N linee in ingresso ciascuno e un output.

La funzione fondamentale di un comparatore è quella di confrontare 2 insiemi di bit, segnalando quando hanno valori uguali.

Page 21: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 5

6

il Comparatore si realizza con una porta XNOR per confrontare i singoli bit, dove si ha come output 1 quando i due bit hanno ugual valore e 0 quando invece hanno valore diverso, e una porta AND dove entrano le uscite di tutte le porte XNOR. In tal modo se tutti confronti dei singoli bit risultano di uscita 1 (cioè bit uguali) si avrà come output del circuito 1 ciò significa che i due insiemi di bit risultano uguali.

A0 B0 C0

0 0 1

0 1 0

1 0 0

1 1 1

A1 B1 C1

0 0 1

0 1 0

1 0 0

1 1 1

C0 C1 C

0 0 0

0 1 0

1 0 0

1 1 1

________ C K= AK ⊕ BK

XNOR

C = C0 C1..... Cn-

1

Page 22: Arch I - Primo Compitino.pdf

F=AB+B!C Sop ABC+AB!C+!AB!C Pos (A+B+C) (A+B+!C) (A+!B+!C) (!A+B+C) (!A+B+!C) passaggio da Pos a Sop Pos (A+B+C) (A+B+!C) (A+!B+!C) (!A+B+C) (!A+B+!C) Inizio A Semplificare I Primi 2 Maxtermini (A+B+C) (A+B+!C) AA+AB+A!C+AB+BB+B!C+AC+BC+C!C A+AB+A!C+AB+B+B!C+AC+BC+C!C A+AB+A!C+B+B!C+AC+BC+C!C A+AB+A!C+B+B!C+AC+BC A+AB+A+B+B A+AB+B A(1+B)+B A+B Semplificare Il 4° Con Il 5° Maxtermini !A!A+!AB+!A!C+!AB+BB+B!C+!AC+BC+C!C !A+!AB+!A!C+!AB+B+B!C+!AC+BC !A+!AB+!A!C +B+B!C+!AC+BC !A+!AB+!A+B+B !A+!AB+ B !A(1+B)+B !A+B Procedo Semplificando Il Primo Termine Ottenuto Con Il Secondo (A+B)( !A+B) A!A+AB+!AB+BB AB+!AB+B B(A+!A)+B B+B B Infine Il Risultato Ottenuto Lo Moltiplico Con Il Maxtermine Rimanente B(A+!B+!C) AB+B!B+B!C AB+B!C AB(1)+B!C C+!C=1 ABC+AB!C+(1)B!C A+!A=1 ABC+AB!C+AB!C+!AB!C ABC+AB!C+!AB!C

Page 23: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 6

1

2 SOMMATORI BINARI Un circuito aritmetico è un circuito combinatorio che esegue operazioni aritmetiche quali addizioni, sottrazioni, moltiplicazioni e divisioni con numeri binari o con numeri decimali espressi in codice binario. Partendo dalla somma di due cifre binarie avremo quattro operazioni elementari:

0+0=0 0+1=1 1+0=1 1+1=10

Le prime tre operazioni producono una somma che necessita di un bit soltanto. Nell'ultimo caso, la somma di due bit con il valore 1 produce una somma binaria di due bit, un bit somma e un bit riporto (posizionati rispettivamente da destra verso sinistra). Il riporto ottenuto dalla somma di due bit è verrà aggiunto alla coppia successiva di bit da sommare.

HALF ADDER

Un Half Adder è un circuito aritmetico che costruisce la somma di due numeri binari a l bit. Il circuito possiede due ingressi, per i due bit addendi, e due uscite, di cui uno è il bit somma e l'altro il bit riporto. Procediamo con la compilazione della Tabella della Verità (TT) del circuito Half Adder.

A B S (somma) R (riporto) minitermini 0 0 0 0 m0 0 1 1 0 m1 1 0 1 0 m2 1 1 0 1 m3

Allora dalla tabella calcoliamoci la SOP della somma e del riporto S = m1 + m2 = ~AB + A~B = A ⊕ B R = m3 = AB

Cammino Critico (C.C.) = 1 Complessità (tot. porte) = 1 porta

Cammino Critico (C.C.) = 1 Complessità (tot. porte) = 1 porta

Page 24: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 6

2

FULL ADDER

Il Full Adder è un circuito combinatorio che esegue la somma di tre numeri da un bit, ovvero somma ai due addendi, da un bit ciascuno il riporto, sempre di un bit, eventualmente generato da una somma in una colonna precedente meno significativa. Procediamo con la compilazione della Tabella della Verità (TT) del circuito Full Adder.

A B Rin S (somma) R out(riporto) minitermini 0 0 0 0 0 m0 0 1 0 1 0 m1 1 0 0 1 0 m2 1 1 0 0 1 m3 0 0 1 1 0 m4 0 1 1 0 1 m5 1 0 1 0 1 m6 1 1 1 1 1 m7

Allora dalla tabella calcoliamoci la SOP della somma e del riporto

S = m1 + m2 + m4 + m7

S = ~AB~Rin + A~B~Rin +~ A~BRin + ABRin

S = ~ Rin (~AB + A~B) + Rin(~ A~B + AB) S =~Rin (A⊕B) + Rin~(A⊕B)

S = Rin ⊕ (A⊕B)

Rout = m3 + m5 + m6 + m7 R = AB~Rin + ~ABRin + A~BRin + ABRin

R = AB(~Rin+ Rin) + Rin (A~B +~AB ) R = AB+ Rin (A⊕B)

Cammino Critico (C.C.) = 2 Complessità (tot. porte) = 2 porta

Cammino Critico (C.C.) = 3 Complessità (tot. porte) = 4 porta

Page 25: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 6

3

SHIFTING (scorrimento) Durante l'esecuzione delle operazioni di moltiplicazione esistono dei passi intermedi che richiedono lo scorrimento verso destra oppure verso sinistra dei numeri. Lo SHIFTING di k posizioni verso sinistra di un numero in una determinata base (B) ha l'effetto di moltiplicare il numero per BK. Lo SHIFTING di k posizioni verso destra di un numero in una determinata base (B) ha l'effetto di moltiplicare il numero per B-K.

MOLTIPLICAZIONE BINARIA Il procedimento di moltiplicazione binaria tra due numeri di un solo bit è descritto dal prodotto logico (AND).

A B P (prodotto) 0 0 0 0 1 0 1 0 0 1 1 1

Il procedimento di moltiplicazione binaria tra due numeri positivi di più bit è analogo al processo manuale usato per la moltiplicazione tra numeri decimali basato sulla somma di prodotti parziali.

In pratica, dati il Moltiplicando e il Moltiplicatore si ottengono i prodotti parziali moltiplicando ogni bit del moltiplicatore (partendo dal bit meno significativo / posizione 0) per il moltiplicando. il tutto verrà incolonnato tenendo conto che per ogni prodotto parziale che si andrà a calcolare dovremo applicare lo SHIFTING che sarà pari alla posizione del bit del moltiplicatore che stiamo considerando.

Page 26: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 6

4

Si esegue quindi la somma dei prodotti parziali ottenendo il prodotto finale. Analogamente alla moltiplicazione decimale, anche per il caso binario si possono distinguere due fasi: la determinazione di una matrice dei prodotti parziali e la somma degli elementi di tale matrice. In binario i prodotti parziali sono degli AND. Prodotto = A X B es A e B numeri binari a 4 bit ciascuno

La matrice dei prodotti parziali di questi due numeri la potremmo rappresentare come nell' immagine qui a

fianco. Il Cammino Critico di questa matrice è uguale a 1 visto

che gli AND sono in parallelo. la Complessità di questa matrice è uguale a N2

[quando moltiplicando e moltiplicatore hanno stesso numero di bit altrimenti N*M (dove n è il numero di

bit del moltiplicando e m è il numero di bit del moltiplicatore)] visto che gli AND sono in parallelo.

In genere l'unità ALU può sommare solo due numeri binari alla volta.

Per questo motivo, i prodotti parziali formati durante la moltiplicazione non possono essere sommati tutti

insieme in una sola volta alla fine. Invece, essi vengono sommati due alla volta: cioè il primo viene aggiunto al secondo, la loro somma viene aggiunta

al terzo e così via come illustrato dalla sequenza qui a fianco.

Page 27: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 6

5

Piano Somma dei prodotti parziali è costituito dalla combinazione di circuiti Half Adder e Full Adder. continuando con l'esempio di prima.

Somma Parziale Tra 1° e 2° Prodotto Parziale

La Complessità del Piano di Somma dei prodotti parziali si può calcolare innanzitutto sapendo che la complessità del circuito Half Adder è pari a 2 mentre la complessità del circuito Full Adder è pari a 5.

Page 28: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 6

6

Sappiamo che la prima riga di sommatori è costituita da 2 HA e N-2 FA e che le altre righe sono costituite da 1 HA e da N-1 FA. Numero Porte Prima Riga = (N-2)*5 + (2*2) Numero Porte altre Righe = (M-2)*[(N-1)*5 + (2*1)] Complessità del Piano di Somma dei prodotti parziali = Numero Porte Prima Riga + Numero Porte altre Righe. {(N-2)*5 + (2*2)} +{(M-2)*[(N-1)*5 + (2*1)]} Il Cammino critico (c.c.) del piano di Somma dei prodotti parziali

Page 29: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

1

2

LA ALU

La ALU è integrata nel processore. All’inizio degli anni 90 è stata rivoluzionaria la sua introduzione con il nome di co-processore matematico. Esegue le operazioni aritmetico-logiche. E’ costituita da circuiti combinatori. Utilizza i blocchi di base già visti. Opera su parole (MIPS 32 bit). Le ALU non compaiono solamente nei micro-processori. Le problematiche di progetto sono quelle dei circuiti integrati: Noi vogliamo avere una ALU Veloce che non costi molto, che sia bene integrabile con gli altri componenti, che sia affidabile e che si possa debuggare cioè che esista una struttura per cui il progettista hardware se verifica un malfunzionamento, sopratutto in fase di progettazione, è in grado di capire dov'è quel malfunzionamento. Questo è anche uno dei motivi per cui anche per le ALU si usa una progettazione strutturata modulare. La ALU è in grado di svolgere operazioni diverse. La ALU ha un' architettura a due livelli dove entrano due dati su un certo numero di bit (ak e bk) e da dove esce il risultato su lo stesso numero di bit (sk) più un certo numero di segnali aggiuntivi (altre informazioni). Il primo livello è il livello di calcolo vero e proprio e il secondo livello è un livello di selezione.

Nella parte di calcolo vengono implementati i circuiti combinatori associati a tutte le funzioni che sono calcolate dalla ALU. La parte di selezione è un selettore, un Multiplexer, che manda in uscita uno dei risultati interni prodotti dai diversi circuiti di calcolo. Vista la presenza di un circuito di selezione ci sarà un segnale di selezione (SEL) che avrà h bit dove h log2 del numero di operazioni che sono implementate nella ALU. Ogni volta che c'è da fare un'operazione la ALU le fa tutte le operazioni visto che sono in parallelo.

ALU – 1 bit

Incominciamo a vedere una ALU che consente le operazioni logiche AND e OR e che lavora su un bit.

Page 30: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

2

Questa ALU sarà costituita da una porta AND, una OR e da un selettore (MUX) a un bit (visto che il segnale di selezione ha come numero di bit il log2 di 2 operazioni).

SEL = 0 S = a AND b

Tabella della verità a b a AND b a OR b 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 1

SEL = 1 S = a OR b

Ora vediamo una ALU che consente le operazioni logiche AND e OR e Somma Algebrica che lavora su un bit.

Questa ALU sarà costituita da una porta AND, una OR, e da un circuito Full Adder e da un selettore (MUX) a due bit (visto che il segnale di selezione ha come numero di bit il log2 di 3 operazioni). SEL = 0 0 S = a AND b SEL = 0 1 S = a OR b SEL = 1 0 S = a [FA] b Possiamo definire un cammino critico e una complessità per questo circuito. Come sappiamo la complessità la calcoliamo sommando tutte le porte logiche presenti nel circuito combinatorio: 1 and + 1 or + 5 [FA] + 4 [MUX] = 11 C.C. si calcola il numero massimo di porte che vengono attraversate: C.C. AND =1 C.C. OR =1 C.C. FA della somma = 2 C.C. FA della riporto = 3 C.C. MUX =2 Il cammino critico è dato dal C.C. FA della somma = 2 + C.C. MUX =2 quindi è 4

Page 31: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

3

ALU a 32 bit

Per ottenere un ALU mettiamo 32 ALU a 1 bit in serie/parallelo

Complessità della ALU a 32 bit è la complessità della ALU da 1 bit per 32. 11 X 32 = 352 Mentre il cammino critico della ALU 32 è dato dal riporto dei primi 31 FA + il cammino critico dell'ultima ALU. Il c.c. del riporto è 3 e si moltiplicherà per 31 e il prodotto lo sommeremo con 4. 31 X 3 = 93 93 + 4 = 97

SOTTRAZIONE

i numeri negativi in base due sono rappresentati in complemento a 2. In complemento a 2 diventa un’addizione A – B = A + (B� + 1) = (A + B�) + 1. Le ALU per implementare la sottrazione hanno bisogno di un inverter ( NOT) e in più l’ALU che calcola il bit meno significativo (ALU0) necessita di una costante 1. Per la costante 1 viene utilizzato il 𝑅0𝑖𝑛 (in ingresso nel primo FA) Occorre utilizzare un Full Adder anche per il bit meno significativo (ALU 0).

Page 32: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

4

Quindi la ALU iesima (bit intermedi) che consente le operazioni logiche AND e OR e Somma e Sottrazione ha la seguente struttura:

Il secondo bit in ingresso deve entrare nel circuito di somma sia in versione normale che in versione negata ciò permetterà di fare sia la somma che la sottrazione. Ecco perché verrà impiegata una porta NOT e un selettore (MUX) detto invertiB. Come detto prima per effettuare la sottrazione avremo anche bisogno nella ALU del bit meno significativo (ALU 0) di una costante 1 e per questo verrà utilizzato il R0 (Riporto in ingresso nel primo FA) Nella ALU0 l'invertiB entrerà anche in R0 in modo che nel caso della sottrazione R0 = InvertiB = 1 InvertiB e R0 sono lo stesso segnale, si può ancora ottimizzare. R0 entra solo in ALU0 InvertiB entra in tutte le ALUi

InvertiB= 1 = sottrazione InvertiB= 0 = somma

Operazioni SEL AND 00 OR 01

SOMMA 10 SOTTRAZIONE 10

E’ possibile programmare questa ALU per eseguire a AND ~b oppure: a OR ~b posizionando invertiB su 1 e il SEL su 00 oppure su 01.

Page 33: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

5

COMPARAZIONE - SET ON LESS THAN (SLT)

L’ operazione di confronto è fondamentale per dirigere il flusso di esecuzione (test, cicli....) . Sono istruzioni critiche per le CPU perché il risultato non si può sapere se non durante l’esecuzione. IF A < B THEN che verrà sviluppato come IF (A – B) < 0 THEN. Se A<B in uscita dovrò avere tutti 0 e un 1 nel bit meno significativo (FLAG). Mentre se A non è minore di B in uscita avrò tutti 0 e sarà 0 anche il bit meno significativo. Questa operazione di confronto si realizzerà in due tempi. In un primo momento calcoleremo (A – B) e la nostra ALU sarà già in grado di compiere questo tipo di operazione. In un secondo momento dovremo confrontare il risultato della sottrazione con zero. Sappiamo che se il risultato della sottrazione avrà segno negativo (A – B) sarà minore di zero, mentre se il risultato della sottrazione avrà segno positivo (A – B) sarà maggiore di zero. Visto che il bit di segno è il bit più significativo (-= 1 ; += 0) prenderemo il segnale in uscita dal FA della ALU31 e lo porteremo nella ALU0.

Le modifiche che dovremo apportare alla nostra ALU sono:

1. Il selettore (Mux) da 3 diventa a 4 uscite 2. La linea Less delle ALUi

e della ALU31 sarà collegata a zero ( ).

3. La linea Less della ALU0 sarà collegata all’uscita del FA della ALU31 (il bit + significativo esprime il segno)

Operazioni SEL AND 00 OR 01

ADD 10 SUB 10 SLT 11

Operazioni InvertiB AND 0 OR 0

ADD 0 SUB 1 SLT 1

Page 34: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

6

TEST DI UGUAGLIANZA

Il test di uguaglianza IF (A = B) THEN verrà sviluppato come IF (A - B) = 0 THEN. Anche qui In un primo momento calcoleremo (A – B), mentre in un secondo momento dovremo verificare che il risultato della sottrazione sia zero quindi tutti gli S (bit di uscita dal FA) dovrebbero essere zero. Il segnale di questo Test (detto ZERO) essendo molto importante per il funzionamento delle Architetture è un segnale che esce singolo (quindi senza passare dal Selettore). Il segnale viene generato prendendo le uscite dei FA dalla ALU0 alla ALU31 e facendole passare per una porta NOR

avendo così in uscita un segnale pari a 1 (FLAG) se A-B =0 e quindi A=B. Diversamente il segnale sarà pari a 0.

OVERFLOW

Quindi si ha OVERFLOW nella somma quando: 1. si sommano due numeri positivi e ottengo un numero negativo. 2. si sommano due numeri negativi e ottengo un numero positivo.

Il segno è indicato dal bit più significativo perciò il controllo dell’OVERFLOW viene fatto nella ALU31. Perciò gli attori principali sono A31 B31 S31. Per implementare il circuito di riconoscimento dell’OVERFLOW procedo compilando la tabella della verità.

A31 B31 S31 OVERFLOW 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 0

Condizione necessaria ma non sufficiente: che segni di A e B siano uguali. L’overflow c’è l’ho quando il segno di A e B è diverso dal segno di S.

𝐴31����� ∙ 𝐵31����� ∙ 𝑆31 + 𝐴31 ∙ 𝐵31 ∙ 𝑆31����

Page 35: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 7

7

Page 36: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 8

1

2

SOMMATORI AD ANTICIPAZIONE DI RIPORTO / CARRY LOOK-AHEAD ADDER

Il Full Adder con propagazione del riporto è lento: Infatti il riporto si propaga sequenzialmente perciò sia allungano i tempi di commutazione. Analisi del singolo stadio (FA).

RoutK= AK BK + (AK ⊕ BK) Rin

K

Quando si genera un riporto in uscita? 1. Quando sia A che B sono uguali a uno (A and B)

Questo primo termine viene chiamato GENERAZIONE (GK). GK = AK BK

2. Quando A o B, in maniera esclusiva, è uguale a uno viene propagato il segnale di riporto cioè se il riporto in ingresso sarà uguale a uno lo sarà anche il riporto in uscita. Tale condizione è identificata da (AK ⊕ BK) Rin

K Questo secondo termine viene chiamato PROPAGAZIONE (PK). PK=(AK ⊕ BK)

Posso scrivere Semplicemente Rout

K = GK + PK RinK

Con questa struttura ricavata dall’analisi della funzione di Rout possiamo costruire un circuito che si chiama Circuito Ad Anticipazione Di Riporto. Lo scopo sarà quello di pre-calcolare il riporto senza aspettare che fluisca su tutti gli stadi dei sommatori.

Rout

K= AK BK + (AK ⊕ BK) RinK

RoutK = GK + PK Rin

K

Rout

0 = G0 + P0 Rin0

Rout1 = G1 + P1 Rin

1

Dove Rin1= Rout

0

Rout1 = G1 + P1(G0 + P0Rin

0) = G1 + P1G0 + P1P0Rin

0

Rout

2 = G2 + P2 Rin2

Dove Rin2= Rout

1

Rout2 = G2 + P2 (G1 + P1G0 + P1P0Rin

0) = = G2 + P2G1 + P2P1G0 + P2P1P0Rin

0

Rout

3 = G3 + P3 Rin3

Dove Rin3= Rout

2

Rout3 = G3 + P3 (G2 + P2G1 + P2P1G0 +

P2P1P0Rin0) =

=G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0Rin

0

Determinazione del cammino critico di Rout

3 = G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0Rin0

4 FULL ADDER in serie, 3 C.C del singolo FA

Page 37: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 8

2

Ecco perché si adottano gli ADDIZIONATORI MODULARI dove la complessità del circuito viene tollerata A favore di minor tempo di commutazione del segnale. Sono dei moduli elementari a 4 bit che verranno collegati in cascata.

Cammino critico = 6 * N/4. Per 32 bit, 48. Senza parallelizzazione, per 32 bit, N * 3 = 96.

FIRMWARE

Nell’approccio firmware, viene inserita nella ALU una unità di controllo e dei registri. L’unità di controllo attiva opportunamente le unità aritmetiche ed il trasferimento da/verso i registri. Nella moltiplicazione utilizzando Somma e Shift utilizzerò un registro Prodotto (P) da 64 bit, inizializzato a 0. Il registro Prodotto (P) conterrà prima le somme parziali e al termine conterrà la somma totale, cioè il risultato del prodotto.

K = contatore n = numero di bit. In questo caso n = 5

Per l’implementazione circuitale di questo algoritmo abbiamo bisogno di 3 registri dove vengono memorizzati rispettivamente il:

1. Moltiplicando (A) 2. Moltiplicatore (B) 3. Prodotto (P) (memorizza prima le somme parziali)

Poi ci servirà una ALU (funzione di sommatore) e un’unità di controllo.

Page 38: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 8

3

L’unità di controllo inizializzerà k = 0. L’unità di controllo dovrà fare il test sul moltiplicatore (Bk=0?). quindi poi deve ricevere il moltiplicatore e farà il test.

Se il bit k è uguale a uno l’unità di controllo darà il comando di somma (P+A) e il risultato lo scrive in P. l’unità di controllo shifterà a sinistra di un bit A, incrementerà k di uno e farà anche il test k=n. Se k= n interromperà l’esecuzione altrimenti l’esecuzione riprenderà dal test sul moltiplicatore (Bk=0?). Se Bk=0 shifterà a sinistra di un bit A e incrementerà k di uno e farà il test k=n.

Dimensioniamo questi componenti . Segnale dall’unità di controllo al moltiplicando e quello alla ALU sono a 1 bit (segnali di controllo).

1. Registro Moltiplicatore (B) n bit 2. Registro Moltiplicando (A) 2·n bit perché a ogni passo shiftero a sinistra di un bit A, quindi a avrò

bisogno di spazio. 3. Registro prodotto 2·n bit. 4. La ALU Lavora su 2·n bit 5. bus che da B va all’unità di controllo ha n bit

Questo circuito è abbastanza inefficiente quindi occorre ottimizzarlo diminuendo il traffico sul bus interno che va da B all’unità di controllo qui voglio far passare un unico bit visto che il test Bk=0 lo faccio su un unico bit.

Posso modificare il circuito in modo che ogni volta che analizzo Bk non debba trasferire tutto B nell’ UC shiftando a destra di un bit il Moltiplicatore B. Il bit analizzato in precedenza non mi servirà più tanto vale eliminarlo. Così analizzerò sempre B0.

Page 39: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 8

4

È possibile ottimizzare ulteriormente il circuito rivalutando lo svolgimento della moltiplicazione. Ogni volta che shiftiamo a sx il Moltiplicando (A), nella somma successiva notiamo che nel PRODOTTO il bit a sinistra rispetto a quello allineato con il bit meno significativo di A non viene più modificato. Ciò ci suggerisce che potremmo utilizzare una minor capacità calcolo. Se noi shiftassimo a dx il PRODOTTO invece di shiftare a sx il Moltiplicando (A) otterremo gli stessi allineamenti e potremmo quindi risparmiare spazio nel Registro del Moltiplicando (A) passando da 2n bit a n bit. Potremmo utilizzare una ALU a n bit visto che andremo a sommare sempre gli n bit più significativi del Prodotto con gli n bit del moltiplicando (A). Il Registro del Prodotto avrà sempre 2·n bit per poterlo Shiftare. Il Registro del Prodotto sarà diviso in due. Una parte modificabile dove ci saranno gli n bit più significativi che verranno utilizzati dalla ALU per calcolare le somme parziali e una parte non modificabile di n bit utile allo shifting.

Visto che Il Moltiplicando (A) è allineato sempre ai N bit più significativi del Prodotto e a ogni iterazione, il prodotto si allarga nella stessa misura in cui il Moltiplicatore (B) si restringe è possibile utilizzare la parte non modificabile del Prodotto come registro del Moltiplicatore (B)

Page 40: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 8

5

Page 41: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 9

1

2

FIRMWARE DIVISIONE

Questo circuito avrà 3 registri:

1. Il Divisore (D) - 64 bit 2. Il resto (R) che all’inizio contiene 0 e

il dividendo - 64 bit 3. Il quoziente - 32 bit

Page 42: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 9

2

Ci sono N+1 passi di divisione, il primo darà sempre 0 e si potrebbe omettere. Occorre quindi effettuare: Shift quoziente a sx ad ogni passo. Scrittura di 1 o 0 nel registro quoziente. Shift del divisore verso dx ad ogni passo.. Utilizzo un unico registro per dividendo e resto, considerando che il primo resto parziale è uguale al dividendo.

OTTIMIZZAZIONE CIRCUITO

Il divisore si sposta verso DX di un bit ad ogni passo. Spostiamo il resto parziale a SX di un bit ad ogni passo e lasciando Fisso il divisore otterremo gli stessi allineamenti e potremmo quindi risparmiare spazio nel Registro del Divisore passando da 2n bit a n bit (da 64 a 32 bits). Potremmo utilizzare una ALU a n bit (32 bit). Il quoziente si sposta verso SX ad ogni passo. Inizializziamo il resto come RESTO = 0 | DIVIDENDO Ad ogni passo sposto il dividendo di una posizione a SX ed inserisco un bit del quoziente.

Page 43: Arch I - Primo Compitino.pdf

ARCHITETTURA - LEZIONE 9

3

Resto Divisore

Inizializzazione 0000|0111 0010

Shift sx Resto 0000|1110 0010

1 R=R-Divisore 1110|1110 0010

R < 0 - R=R+Divisore 0000|1110 0010 Shift sx Resto write 0 0001|1100 0010

2 R=R-Divisore 1111|1100 0010

R < 0 - R=R+Divisore 0001|1100 0010 Shift sx Resto write 0 0011|1000 0010

3 R=R-Divisore 0001|1000 0010

Shift sx Resto write 1 0011|0001 0010

4 R=R-Divisore 0001|0001 0010

Shift sx Resto write 1 0010|0011 0010 Bit

Terminati Shift dx della parte sx del Registro in uscita 0001|0011 0010

Esempio 7 : 2 = 3 Resto 1 0111 : 0010 = 0011 Resto 0001

IL SEGNO DELLA DIVISIONE

Dividendo = Quoziente * Divisore + Resto + + + + + - - + - - + - - + - -

Osserviamo che il quoziente è positivo se i segni di Divisore e Dividendo sono concordi. Il resto ha il segno del Dividendo.

SOMMA IN VIRGOLA MOBILE (IEEE 754)

1. Trasformare i due numeri in modo che le due rappresentazioni abbiano la stessa base. Cioè il numero che ha la base con l’esponente + basso nel numero con l’esponente più alto in modo da evitare di sforare la forma normalizzata.

2. Effettuare la somma delle mantisse. 3. Se il numero risultante è normalizzato termino qui. Altrimenti: 4. Normalizzare il risultato.