Teoria architettura dei calcolatori A.A. 2013 – 20..
Prof. Scafuri e Prof. Salvi
Appunti a cura di Giacomo Gargiulo
Università degli Studi di Napoli Parthenope
Per tutte le info o osservazioni: giacomo.gargiulo.made4Core@gmail.com
Introduzione
Un calcolatore è un sistema complesso le cui funzioni basi, in termini generali, sono:
- Elaborazione dei dati (data processing);
- Memorizzazione dei dati (data storage);
- Trasmissione dei dati (data movement);
- Controllo (control).
Il primo calcolatore elettronico digitale al mondo è stato ENIAC (Electronic Numerical Integrator and Computer), il cui contratto di costruzione fu siglato il 5 Giugno 1943. Il processo di predisporre e modificare i programmi per ENIAC era tedioso, esso sarebbe potuto essere semplificato se il programma fosse stato rappresentato in una forma adatta per la memorizzazione come per i dati. Questa idea, nota come concetto di programma memorizzato (stored-program concept), è attribuita a John Von Neumann.
La struttura generale di quest'idea rappresenta l'elaboratore in moduli:
- Memoria centrale, che contiene i dati e le istruzioni;
- Unità aritmetico-logica, in grado di operare su dati binari (ALU);
- Unità di controllo che interpreta le istruzioni in memoria e le invia in esecuzione;
- Dispositivi di I/O, azionati dall'unità di controllo.
Ad oggi, con rare eccezioni, tutti i calcolatori sono forniti di questa struttura architettonica, in cui sia l'ALU sia l'unità di controllo contengono dei circuiti di memorizzazione detti registri:
- Memory Buffer Register (MBR): contiene una parola che è pervenuta o che deve essere immagazzinata in memoria;
- Memory Address Register (MAR): specifica l'indirizzo della parola di memoria in cui scrivere o trasferire il contenuto della MBR;
- Instruction Register (IR): questo registro ha il compito di accogliere dalla memoria, durante la fase di fetch, l'istruzione da eseguire, quella cioè puntata dal program counter, una volta in questo registro, l'istruzione deve essere interpretata dall'unità di controllo, per procedere alla eventuale fase di preparazione degli operandi ed alla fase di esecuzione;
- Instruction Buffer Register (IBR): contiene temporaneamente l'istruzione "destra" (ricordiamo che i bit più a destra di un'istruzione rappresentano l'istruzione) di una parola di memoria;
- Program Counter (PC): contiene l'indirizzo della prossima coppia di istruzioni da caricare dalla memoria;
- Accumulator (AC) e Multiplier Quotient (MQ): contengono temporaneamente gli operandi e i risultati parziali delle operazioni effettuate dalla ALU.
Durante il ciclo di prelievo (fetch cycle), il codice operativo della successiva istruzione viene caricato nell'IR e la porzione di indirizzo viene caricata nel MAR. Questa istruzione può essere letta dall'IBR o può essere ottenuta dalla memoria caricando una parola nel MBR e poi a seguire nell'IBR, nell'IR e nel MAR. Quando il codice operativo è stato registrato nell'IR, ha inizio il ciclo di esecuzione (execute cycle). Il circuito di controllo interpreta il codice operativo ed esegue l'istruzione, impostando i segnali di controllo appropriati per trasferire i dati o per fare eseguire un'operazione dalla ALU.
Riassumendo: Ad alto livello, un calcolatore consiste della CPU, della memoria e dei componenti di I/O, essi sono interconnessi fra loro per compiere la funzione base dei calcolatori: eseguire programmi, scomposti in un insieme di istruzioni registrate in memoria. Nella sua forma più semplice, l'esecuzione delle istruzioni si divide in due passi: il processore legge le istruzioni dalla memoria una alla volta e le esegue. L'esecuzione si ferma solo se la macchina registra un evento di cui è impossibilitata a reagire, come una divisione per zero, o la mancanza improvvisa della fornitura elettrica.
Logica digitale
Le operazioni di un calcolatore digitale si basano sulla memorizzazione e sull'elaborazione di dati binari. La progettazione è basata su uno strumento matematico, noto come algebra di Boole, che è efficace per:
- L'analisi: cioè la descrizione in modo economico delle funzioni dei circuiti digitali;
- La progettazione: cioè data una certa funzione, l'algebra di Boole può essere impiegata per sviluppare un'implementazione semplificata.
Porte logiche
Ogni porta presenta uno o più input e un unico output. Le porte AND, OR, NOT, costituiscono un insieme di porte funzionalmente completo, in quanto rappresentano le principali operazioni booleane, in quanto possono essere sintetizzate a partire dalle altre, con l'applicazione del teorema di De Morgan:
- A + B = !(!A * !B) A OR B = NOT((NOT A) AND (NOT B))
- A * B = !(!A + !B) A AND B = NOT((NOT A) OR (NOT B))
Una rete combinatoria consiste di n inputs binari e m output, essi possono essere semplificati in tre modi:
- Tavola di verità: per ciascuna delle 2n combinazioni di ingresso, viene elencato il valore binario di ciascuno degli m output;
- Simboli grafici: mostrano lo schema di interconnessione delle porte;
- Equazioni booleane: si esprime ogni segnale come funzione booleana dei valori in ingresso.
Quindi ogni funzione booleana può essere realizzata mediante porte logiche. Per ogni funzione, esistono svariate realizzazioni. Si consideri ad esempio la funzione, rappresentata dalla tabella:
| A | B | C | F |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 |
Possiamo esprimere tale funzione dettagliando le combinazioni dei valori assunti da A, B, C, che alla funzione F stessa danno come output 1, quindi, F = (!AB!C) + (!ABC) + (AB!C). Questa forma di espressione è nota come somma di prodotti (SOP), evidenzia che l'output è 1 se è vera almeno una delle combinazioni in input che producono 1. Si può quindi affermare che l'output vale 1 se non è vera nessuna delle combinazioni che producono in output 0, quindi avremo che:
F = !(!A!B!C) * !(!A!BC) * !(A!B!C) * !(A!BC) * !(ABC).
Ciò può essere riscritto utilizzando una generalizzazione del teorema di De Morgan:
!(X * Y * Z ) = !X + !Y + !Z
Si tratta della forma nota come prodotto di somme (POS), applicando questa generalizzazione alla nostra funzione iniziale avremo:
F = (A + B + C) * (A + B + !C) * (!A + B + C) * (!A + B + !C) * (!A + !B + !C)
Quindi la SOP ha un termine per ogni 1 e la POS, presenta un termine per ogni 0.
Implementazione NAND e NOR
Spesso è auspicabile implementare una funzione booleana unicamente con porte NAND o NOR, che grazie al vantaggio della regolarità, permette di semplificare il processo produttivo, sebbene non sia una implementazione minimale. Si consideri l'equazione: F = B(!A + !C), dato che la negazione della negazione di un valore coincide con il valore originario: F = B(A + C) = 0!( ( !AB ) + ( B!C)), applicando il teorema di De Morgan si ottiene: F = ![ ! ( !AB ) * ! ( B!C ) ], che in forma circuitale presenta tre porte NAND.
Multiplexer
Un multiplexer, collega più ingressi a una sola uscita e solo uno degli input viene trasferito in output. Essi sono utilizzati per controllare l'indirizzamento dei segnali e dei dati. E' un multiplexer 4:1, in cui sono presenti, come si può delineare dall'immagine, quattro linee di input e una di output per la funzione F, in cui per scegliere una delle linee, sono necessari due bit di selezione, provenienti dalle linee chiamate in questo esempio S1 e S2. L'implementazione del multiplexer con le porte AND, OR, NOT, deve essere fatta in maniera che essendo S1 e S2, connessi alle porte, invii il segnale in uscita il valore della linea selezionata costituito da 1 o 0.
Decodificatori
Un decodificatore (decoder) è un circuito combinatorio dotato di più linee di uscita, di cui solo una è assegnata in ogni dato istante, in generle un decoder presenta n input e 2n output. Un esempio di utilizzo è la decodifica degli indirizzi di memoria. Si supponga di voler costruire una memoria da 1 kbyte usando 256 chip di RAM da 8 bit.
Ogni chip richiede 8 linee indirizzo, fornite 8 bit meno significativi dell'indirizzo. I 2 bit più significativi dell'indirizzo a 10 bit vengono utilizzati per selezionare uno dei chip. Con una linea d'ingresso aggiuntiva si può usare un decodificatore come demultiplexer, che esegue la funzione inversa di un multiplexer, ovvero collega un singolo input a svariati output.
Differenza tra macchine combinatorie e sequenziali
Un circuito digitale combinatorio è un sistema le cui uscite dipendono, istante per istante, dai valori degli ingressi. Ad esempio, se consideriamo il circuito come quello in figura 1.1 che effettua la somma di due bit x1, x2, possiamo dire che le sue uscite s1 e s2 dipendono dai valori istantanei degli ingressi, e che il circuito non tiene conto in alcun modo dei valori passati di x1 ed x2.
Consideriamo ora il circuito di figura 1.2; la sua uscita si porta a livello ogni qualvolta applichiamo una stringa costituita da una coppia di bit alti in ingresso. Dato che l'uscita dipende sia dall'ingresso attuale che dalla storia degli ingressi passati, possiamo affermare che questo sistema possiede la capacità di memorizzazione (seppur parziale) della sua storia passata. Infatti questo circuito deve essere in grado di memorizzare l'ultimo bit ricevuto, per poter decidere, in base al bit attualmente presente in ingresso, se l'uscita deve essere a livello alto oppure a livello basso. Un circuito, come quest'ultimo, in cui l'uscita dipende dalla storia passata degli ingressi ad esso applicati, è detto circuito (o automa) sequenziale.
Macchina sequenziale
Definisce un automa a stati finiti, le due macchine principali sono:
- Maely: l'uscita dipende dallo stato e dagli ingressi;
- Moore: l'uscita è associata allo stato.
Una macchina sequenziale è caratterizzata dalla quintupla I, U, S, t e w; dove:
- I = insieme dei simboli in ingresso;
- U = insieme dei simboli in uscita;
- S = insieme finito e non vuoto degli stati;
- t = funzione stato prossimo, determina lo stato futuro in funzione dello stato presente e degli ingressi;
- w = funzione d'uscita, genera il simbolo di uscita.
Per effettuare la sintesi di una rete sequenziale occorre definire gli insiemi I, U, S e le funzioni t e w. Occorre quindi effettuare la sintesi di 2 reti che realizzano t e w, la funzione stato prossimo dipende dai bistabili utilizzati mentre le funzioni di uscita.
Array logici programmabili (PLA)
Un maggiore livello di integrazione ha reso possibile inserire più porte in un singolo chip ed effettuare le interconnessioni dei componenti sul chip stesso. Sorge, però, il problema di progettazione per ogni funzione logica, con perdite di costi e di tempo. Quindi è diventato d'interesse lo sviluppo di un chip generico in grado di adattarsi a scopi specifici. Questo è appunto lo scopo degli array logici programmabili (PLA), essi si basano sul modo di rappresentazione di ogni singola funzione booleana, che può essere espressa in forma SOP. Ogni ingresso del chip viene fatto passare attraverso una porta NOT, in modo che ogni input e il suo complemento siano disponibili ad ogni componente AND. L'output di ogni porta AND è disponibile a ciascun componente OR, che rappresenta un'uscita dal chip.
Memoria di sola lettura (ROM)
Le reti combinatorie vengono dette circuiti privi di memoria, dato che le loro uscite dipendono solo dai loro ingressi senza tener traccia della storia degli input precedenti. Esiste un tipo di memoria, però, che viene implementata, con circuiti combinatori, cioè read only memory (ROM). Pertanto, un dato input alla ROM (linee degli indirizzi) produce sempre lo stesso output (linee dei dati), e quindi, essa è di fatto un circuito combinatorio. Si può implementare una ROM tramite un decodificatore e un insieme di porte OR.
Sommatori
Con i sommatori, non siamo interessati ad effettuare l'addizione solo su una singola coppia di bit, vogliamo sommare due numeri composti da n bit. Ciò si può realizzare assemblando un insieme di sommatori in modo che il riporto (carry), proveniente da un sommatore costituisca l'ingresso per un sommatore successivo.
| C (IN) | A | B | SOMMA | C (OUT) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
I due output posso essere espressi come:
- SOMMA: ( !A!BC ) + ( !AB!C ) + ( ABC ) + ( A!B!C )
- RIPORTO: AB + AC + BC
Nel caso della realizzazione di un sommatore a 32 bit o oltre, si accumula un ritardo nel passaggio di bit in maniera crescente. Se i valori di riporto potessero essere determinati senza dover passare per tutti gli stadi precedenti, allora ciascun sommatore a bit singolo potrebbe funzionare in modo indipendente evitando l'accumulo del ritardo di propagazione. Il seguente risultato può essere ottenuto con un approccio noto come previsione di riporto (carry look ahead). Per comprendere questa tecnica, consideriamo per esempio un sommatore di a 4 bit:
Abbiamo: C = A B ;
C = A B + A A B + B A B ;
C = A B + A A B + A A A B + A B A B + B A B + B A A A + B B A B ;
Ogni termine di riporto può essere espresso nella forma SOP in funzione degli input originari, indipendentemente dai riporti. Si verificano, pertanto, solo due livelli di ritardo di porta, senza alcuna influenza da parte della lunghezza del sommatore.
Letch e Flip-Flop
I latch e i flip-flop sono circuiti digitali sequenziali che hanno il compito di memorizzare un bit. Un circuito digitale si dice sequenziale se l'uscita dipende dagli ingressi applicati e dallo stato precedente della stessa uscita. Un circuito sequenziale, pertanto, deve ricordare il suo stato precedente e quindi deve possedere uno o più elementi di memoria. I circuiti digitali si dividono in due fondamentali categorie:
- Combinatori (il valore dell'uscita dipende solo dal valore dei bit applicati in ingresso);
- Sequenziali (il valore dell'uscita dipende anche dal suo stato precedente).
I latch e i flip-flop sono noti, anche, come multivibratori bistabili perché ciascuno degli stati logici 0 e 1 può essere reso stabile nel tempo. I multivibratori si dividono in:
- Astabili (nessuno stato stabile - ad esempio i generatori di onde quadre);
- Monostabili (un solo stato stabile - ad esempio i temporizzatori);
- Bistabili (due possibili stati stabili - ad esempio una cella di memoria).
LATCH SR (Set-Reset)
Il più semplice dispositivo di memoria è il latch Set-Reset. Esso possiede due ingressi denominati Set e Reset ed una uscita indicata con Q. Occorre precisare, che in un dispositivo di memoria, l'uscita dipende non solo dalla particolare combinazione assunta dalle variabili di ingresso ma anche dallo stato precedente assunto dall'uscita Q.
LATCH SR con porte NOR
Alla luce di quanto detto si mostra in figura 1 il simbolo logico, la tabella della verità e la soluzione circuitale a porte logiche NOR di un latch S-R.
Combinazione SR=00: Essa è nota come combinazione di riposo poiché l'uscita conserva lo stato precedente (Qn+1 = Qn).
Combinazione SR=01: Ponendo R=1, l'uscita Q si porta a 0 indipendentemente dallo stato precedente, l'azione effettuata sarà quella di reset.
Combinazione SR=10: Ponendo S=1, l'uscita Q si porta a 1 indipendentemente dallo stato precedente, l'azione effettuata sarà quella di set.
Combinazione SR=11: Tale combinazione va evitata poiché da un punto di vista logico è una incongruenza: infatti non ha senso comandare il latch per memorizzare lo 0 (R=1) oppure l'1 (S=1). Conseguenze: le due uscite, in questo caso, non sono più l'una il complemento dell'altra, ed inoltre portando contemporaneamente S ed R a 0 entrambe le uscite si porteranno ad 1 e poi a 0 e così via. In realtà, a causa dei diversi tempi di ritardo di propagazione del segnale elettrico in ciascuna porta, uno dei due NOR propagherà l'1 in uscita prima dell'altra porta. In conclusione diventa aleatorio il valore dell'uscita Q che, pertanto, potrà trovarsi o a 0 o a 1. Anche per questo motivo è bene evitare l'applicazione dell'ultima combinazione della tabella della verità: S=...
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Domande di Teoria di Calcolatori Elettronici
-
Teoria dei segnali - Teoria
-
Economia teoria
-
Teoria "teoria dei segnali"