Vous êtes sur la page 1sur 56

Sintesi di alcuni contenuti dei primi capitoli del libro:

Marco Vanneschi, Architettura degli Elaboratori, Edizioni PLUS, Universit di


Pisa, 2009
*****
Queste note, assieme ad una raccolta di testi di esercizi e quesiti, contengono il materiale strettamente
indispensabile per seguire il corso in attesa delluscita del suddetto libro.

1 Strutturazione a livelli di interpretazione


1.1

Macchine virtuali e supporti a tempo di esecuzione

Le funzionalit di un sistema di elaborazione nel suo complesso possono essere viste come ripartite, secondo
un certo numero di livelli, o macchine virtuali {MV0 , MV1, ,MVn }, come schematizzato in figura:

Il livello MV0 tipicamente quello dei componenti fisici (elettronici) a partire dai quali viene costruita una
astrazione, o virtualizzazione, sempre maggiore delle funzionalit di interesse per il sistema e degli oggetti
su cui esso destinato ad operare. Il livello MVn quello che possiamo chiamare delle applicazioni in
quanto fornisce la visione, di volta in volta ritenuta pi opportuna degli oggetti e degli e degli strumenti
mediante i quali il sistema viene utilizzato dall'esterno. Questo livello necessita normalmente, per potere
essere effettivamente implementato, di un procedimento di concretizzazione, o emulazione ottenuto
mediante uno o pi livelli intermedi {MVj | j = 1, , n-1}.
Nel seguito il livello MV0, e solo quello, sar detto della macchina hardware. Questa definizione potr
forse apparire riduttiva per chi abituato a considerare hardware tutto ci che riguarda la struttura ed il
funzionamento interno di un calcolatore. In effetti, al di l della genericit dei termini hardware e
software, ci che si vuole evidenziare che si assume l'esistenza di un livello (MV 0) le cui funzionalit
sono assunte come non ulteriormente emulabili. In questa sede non siamo cio interessati a definire il
linguaggio L0, mentre riteniamo essenziale definire il linguaggio di tutti i rimanenti livelli, compresi quelli
pi vicini alla macchina hardware.
In altri termini, la definizione di ogni livello coincide con la definizione del linguaggio in esso adottato: ci
caratterizza l'approccio ritenuto allo stesso tempo pi opportuno e pi rigoroso per lo studio dei sistemi di
elaborazione.
I livelli { MV0, , MVn} sono ordinati secondo una relazione gerarchica. Ci significa che ogni istruzione
primitiva Iki, o meccanismo del linguaggio Li (i > 0) implementata da un programma Pk, o politica, scritto
nel linguaggio Lj, come mostrato in figura:

dove:
a) 0 j < i: anche se il caso pi frequente quello in cui j = i 1, talvolta possono esistere varie
ragioni, legate alle prestazioni del sistema e/o al costo dell'implementazione, per le quali conviene
che sia j < i 1;
b) se Ik1i e Ik2i sono meccanismi distinti di Li , essi possono essere implementati da politiche scritte
rispettivamente con Lj1 e Lj2, dove j1 j2 , anche il caso pi frequente quello in cui j1 = j2:
valgono considerazioni analoghe al caso precedente.
In altri termini, il concetto che sta alla base della strutturazione a livelli il seguente:
1. per ogni livello MVi (i > 0) l'insieme dei livelli {MVj | 0 j < i} premette di implementare
complessivamente il supporto a tempo di esecuzione di Li, STE (Li ), cio una collezione di algoritmi e
strutture dati che provvedono all'interpretazione dei meccanismi di Li ;
2. tale supporto a sua volta strutturato in modo gerarchico (per i > 1), riconoscendo un livello pi alto
MVi-1 il cui supporto a tempo di esecuzione implementato dai livelli {MVh | 0 < h < i-1} e cos via.
Consideriamo inoltre che (come mostrato nella figura precedente):
i)

l'insieme degli oggetti Ri di MVi direttamente accessibile soltanto da parte dei meccanismi di Li, e

ii) ad un certo livello MVi non sono note le politiche adottate dai livelli inferiori per implementare STE
(Li).
Sempre con riferimento alla figura precedente, notiamo che per rendere possibile l'implementazione di un
meccanismo Iki, di MVi occorre definire con chiarezza una interfaccia nei confronti del livello MVj che lo
implementa. La natura di questa interfaccia sar di volta in volta dipendente dallo specifico livello
considerato, e talvolta la sua definizione ed implementazione costituir un problema tutt'altro che banale. Ci
che per ora interessa che essa deve permettere l'invocazione di Iki, con i relativi parametri, nei confronti di
STE (Li ) nei rispetti dei principi precedentemente enunciati.
Pu risultare conveniente pensare il meccanismo di invocazione come chiamata di procedura. Vedremo
comunque in varie architetture altre modalit di interfacciamento dei livelli.

1.2

Livelli tipici

Allo scopo di esemplificare i concetti introdotti nel paragrafo precedente, consideriamo la tipica
strutturazione a livelli di un sistema mostrata in figura:

MV4

: APPLICAZIONI
R4 = {oggetti astratti, qualunque tipo di dato definibile da utente}
L4 = {C, C++, Java, , ML, , linguaggi paralleli}

MV3

: SISTEMA OPERATIVO
R3 = {spazio di memoria principale e secondaria, processori, dispositivi di I/O, file,
programmi, }
L3 = un linguaggio di programmazione concorrente per esprimere processi / un
linguaggio sequenziale arricchito da librerie che implementano meccanismi di
concorrenza

MV2

: MACCHINA ASSEMBLER
R2 = {locazioni di memoria e di I/O, registri generali, }
L2 = linguaggio assembler

MV1

: MACCHINA FIRMWARE
R1 = {registri, operatori aritmetico-logici, strutture di interconnessione intra-unit e
inter-unit,}
L1 = linguaggio di microprogrammazione (microlinguaggio)

MV0

: MACCHINA HARDWARE
R0 = {porte logiche implementate da componenti elettronici, collegamenti
fisici,}
L0 = ?

1.2.1

Macchina firmware

Il livello MV1, della macchina firmware, interpretato direttamente dall'hardware ed quindi sempre
presente in qualunque tipo di sistema. A questo livello viene data la descrizione tanto del funzionamento
interno di ogni unit di elaborazione (ad esempio: un processore, un banco di memoria), quanto di quello pi
unit interagenti (ad esempio: un calcolatore nel suo complesso).
D'ora in poi, quando studieremo una certa architettura al livello firmware, intenderemo riferirci allo schema
del sistema di elaborazione come costituito da un certo numero di unit interconnesse ed interagenti. Ad
esempio:

calcolatore uniprocessor = {Memoria Principale (M), Processore (P), Unit di Ingresso-Uscita (I/O1,
, I/Ok), e relativi collegamenti};

multiprocessor = {Memoria principale condivisa M = {M1, , Mm}, {Processori P1, , Pn},


{Unit di ingresso-uscita o co-processori I/O1, , I/Ok}};

rete di calcolatori = {N1, , Nn}, dove ogni nodo di elaborazione Ni costituito da un calcolatore
convenzionale o da un multiprocessore o a sua volta da una rete di calcolatori.

La macchina hardware viene virtualizzata mediante un insieme di microprogrammi, cio di sequenze di


operazioni di trasferimento tra registri. Tali microprogrammi supportano l'esecuzione di istruzioni di
macchina (definite al livello MV2) e spesso anche di altri meccanismi, ad esempio di primitive di sistema
operativo o costrutti di linguaggi ad alto livello.

4
1.2.2

Macchina assembler

Il livello MV2 indicato, in genere, come macchina assembler. In effetti il linguaggio L2 (erroneamente
detto talvolta linguaggio macchina) un sottoinsieme di un linguaggio assembler, decurtato dalle
dichiarazioni o pseudo-istruzioni per lallocazione/gestione di risorse (ad esempio: aree di memoria
principale di I/O).
Si noti come il livello MV2 non di per s essenziale e, come approfondiremo nella prossima sezione, ha
come scopo fondamentale quello di fungere da linguaggio intermedio per la compilazione di programmi.
In effetti il vero linguaggio macchina va considerato il linguaggio di microprogrammazione a livello
firmware.

1.2.3

Sistema operativo

Il livello MV3, del sistema operativo, provvede a gestire le risorse fondamentali del sistema (spazi di
memorizzazione, processori, dispositivi di I/O, archivi) nei confronti dei programmi applicativi ottimizzando
l'uso di tali risorse nella maniera ritenuta pi conveniente per una certa architettura ed il relativo campo di
applicazioni. Da questo punto di vista, il sistema operativo un insieme di servizi, standard e preesistenti,
offerti alle applicazioni.
Nella figura seguente mostrato un tipico schema di MV3, ottenuto mediante una ulteriore decomposizione
in livelli sul cui significato strutturale torneremo nel seguito.

MV3.2 Funzioni di supervisione / gestione programmi


MV3.1 Gestione delle risorse fondamentali, eccetto processori
MV3.0 Gestione di processi e processori

Il livello MV3.0, detto nucleo del sistema operativo, provvede alla gestione del processore nei confronti di
attivit concorrenti (processi ) sia di utente che di sistema. Mentre i livelli MV2 ed MV1 realizzano una
astrazione di MV0 mediante la quale il sistema in grado di eseguire singoli programmi sequenziali
(scritti/tradotti in linguaggio macchina), il livello MV3.0 estende tali capacit per supportare l'esecuzione
concorrente di pi programmi sulla data architettura firmware: questo allo scopo di aumentare le prestazioni
del sistema e/o di ottimizzare l'uso delle risorse.
Il nucleo del sistema operativo costituisce dunque un livello fondamentale per ogni sistema, e spesso le scelte
architettoniche saranno guidate dalle esigenze di ottenere un nucleo il pi possibile efficiente ed affidabile.
In alcune situazioni particolarmente critiche, le funzionalit del nucleo sono implementate direttamente a
microprogramma e/o con l'aiuto di unit di elaborazione specializzate. Al livello MV3.1 (eventualmente
decomponibile a sua volta) ha luogo la gestione delle altre risorse fondamentali, su richiesta delle
funzionalit attive al livello MV3.2, usando i meccanismi implementati da MV3.0.
Il livello MV3.2 costituisce l'interfaccia nei confronti delle applicazioni. Esso ad esempio contiene
l'interprete del linguaggio dei comandi interattivo/batch, oppure realizza una macchina virtuale per ogni
linguaggio adottato dagli utenti del sistema, e spesso provvede alla schedulazione ad alto livello dei
processi derivanti dai programmi applicativi.

1.3

Compilazione e interpretazione

Il concetto di supporto a tempo di esecuzione legato alla comprensione di concetti fondamentali circa la
compilazione e linterpretazione di linguaggi: anche se questi aspetti sono studiati in diversi altri corsi, si
ritiene conveniente riportare, in questa sede, alcune considerazioni che aiutino ad acquisire la necessaria
sensibilit.
Il fine ultimo di un calcolatore quello di rendere possibile lesecuzione di programmi. Cominciamo con il
caratterizzare questa generica affermazione:
1.

i programmi vengono progettati mediante linguaggi ad alto livello. Per ragioni di efficienza e di
generalit, occorre prevedere una traduzione da linguaggio ad alto livello nella forma intermedia del
linguaggio assembler;

2.

i calcolatori a cui ci riferiamo devono permettere lesecuzione di qualunque programma: devono cio
essere general-purpose. Come sempre accade, coniugare generalit ed efficienza un problema
complesso: uno dei principali obiettivi dellArchitettura degli Elaboratori dare soluzioni ragionevoli
a questo problema;

3.

la traduzione dal programma sorgente (in gergo, codice sorgente) scritto in linguaggio ad alto
livello, nel programma oggetto o eseguibile (in gergo, codice oggetto o codice eseguibile),
espresso in linguaggio assembler, pu essere effettuata secondo una delle due ben note tecniche, la
compilazione e linterpretazione, o loro combinazioni. In entrambi i casi, il punto di partenza una
sequenza di comandi, costituenti il programma scritto nel linguaggio ad alto livello, operanti su
determinati insiemi di dati. Un compilatore o un interprete sono essi stessi dei programmi, gi
disponibili in forma eseguibile, che accettano come dato dingresso il programma sorgente (una
rappresentazione opportuna della sequenza di comandi e rispettivi dati) e producono come dato di
uscita il programma eseguibile;

4.

un traduttore di tipo interprete scandisce tale sequenza sostituendo ogni singolo comando con una
sequenza di istruzioni assembler nota, detta linterprete di quel comando. Questa forma di traduzione
effettuata dinamicamente, cio a tempo di esecuzione, da cui la dizione, equivalente a quella di
interprete di un linguaggio, di supporto a tempo di esecuzione di quel linguaggio;

5.

un traduttore di tipo compilatore sostituisce lintera sequenza del programma sorgente con una
sequenza di istruzioni assembler. Questa forma di traduzione effettuata staticamente, cio in fase di
preparazione prima che il programma passi in esecuzione. Anche il compilatore deve disporre di
regole per sostituire ogni comando del programma sorgente con il rispettivo supporto a tempo di
esecuzione, ma, a differenza dellinterpretazione:

la compilazione prende in esame tutto il programma sorgente,

per ogni comando del linguaggio sorgente, esistono pi sequenze eseguibili, tra le quali
selezionare quella pi indicata per tenere conto efficientemente del contesto in cui il comando si
trova ad essere inserito.

In generale nella traduzione da parte di un interprete, poich questa avviene passo passo, non viene
considerato il contesto in cui si trova il comando da interpretare a ogni passo, applicando sempre la stessa
regola di traduzione per uno stesso comando; invece, la traduzione da parte di un compilatore prende in
considerazione una sequenza, pi o meno ampia, in cui si trova inserito un comando e, per uno stesso
comando, sceglie tra regole di traduzione diverse allo scopo di ottimizzare le prestazioni (ad esempio, il
tempo di elaborazione del programma e/o loccupazione di memoria). La fase di ottimizzazione in effetti
quella che caratterizza pi pesantemente un compilatore: allo stato attuale della tecnologia, nel confronto tra
due calcolatori di costruttori diversi, quello con il compilatore migliore pu talvolta riuscire a colmare il gap
prestazionale dovuto ad un processore peggiore.
Una classe importante di ottimizzazioni a tempo di compilazione quella relativa la miglior sfruttamento
delle caratteristiche architetturali, ad esempio la memoria cache e/o larchitettura internamente parallela di
processori.
Sulle caratteristiche di compilatori e interpreti torneremo frequentemente nei vari capitoli. Vale fin da ora la
pena di rimarcare che:

a)

anche nel caso della pura interpretazione, sempre presente un minimo di compilazione, consistente
nelle rappresentazione del programma sorgente in un formato facilmente comprensibile allinterprete;

b)

raramente siamo in presenza di linguaggi soggetti a compilazione pura o a interpretazione pura. Ad


esempio, anche in linguaggi che facciano soprattutto uso di compilazione, il supporto di eventuali
comandi per esprimere strutture dati dinamiche in modo primitivo (come new o malloc)
necessariamente implementato mediante interpretazione;

c)

a livello assembler ed a livello firmware lunica forma di traduzione possibile linterpretazione. La


dimostrazione di questa importante affermazione emerger dai concetti studiati nelle varie parti del
testo.

1.4

Livelli di interpretazione e livelli funzionali

importante distinguere il caso in cui la gerarchia dei livelli effettivamente riflessa nella loro
implementazione, in accordo alla strutturazione definita nella sez. 1.1, da quello in cui la gerarchia ha
soltanto uno scopo funzionale di comodo.
Si ha una gerarchia di interpretazione se, dato il livello MVi, non esiste alcun meccanismo di {Lj | j < i}
che viene implementato da MVi. Ci equivale a dire che ogni livello sottostante ad MVi fa parte di STE(Li).
Si ha invece una gerarchia funzionale (in senso pi lato) tra due livelli MVi ed MVj quando non esiste una
relazione di ordinamento tra Li ed Lj : alcuni meccanismi di Li sono implementati da politiche di MV j ,
mentre per altri vale il viceversa.
Quando questo avviene, si ha in pratica che i livelli MVi ed MVj adottano lo stesso linguaggio.
Riferiamoci ad esempio alla strutturazione di un sistema operativo. I livelli MV3.1 ed MV3.2 possono essere
progettati usando uno stesso linguaggio (di programmazione concorrente) supportato da MV3.0. Le
invocazioni da parte di funzioni (processi) di MV3.2 ad MV3.1 sono effettuate usando gli stessi meccanismi
mediante i quali avviene la cooperazione all'interno MV3.1 ed MV3.2. poi in generale possibile che
funzioni di MV3.1 invochino funzioni di MV3.2. In questo caso, dunque, la decomposizione tra MV3.1 ed
MV3.2 esclusivamente funzionale mentre MV3.0 rappresenta effettivamente un livello distinto. Una
gerarchia di interpretazione si avrebbe se il linguaggio di MV3.2 fosse realmente diverso da quello di
MV3.1, nel qual caso STE (L3.2) includerebbe MV3.1.
Un caso ancora pi significativo quello delle applicazioni: il livello MV4 pu essere in relazione
funzionale con il livello MV3, invece che in relazione gerarchica. Come avremo modo di studiare trattando
la strutturazione a processi, le applicazioni vengono compilate in (uno o pi) processi che interagiscono con
le funzionalit del sistema operativo ai livelli MV3.1 e MV3.2 allo scopo di utilizzarne i servizi offerti. In
altri termini, ai processi applicativi vengono collegate (linking) le necessarie funzionalit di sistema
operativo. Questo linking pu essere implementato, nel modo pi immediato ed efficiente, descrivendo i
processi applicativi ed i processi di sistema con lo stesso linguaggio concorrente. La fotografia di un
sistema ai livelli MV4 e MV3, ad un certo istante, consiste in una rete di processi tra loro interagenti, alcuni
di sistema (preesistenti e sempre presenti), altri applicativi (creati dinamicamente).
Adottando la soluzione ora introdotta (come vedremo, non lunica possibile, ma certamente la pi chiara
concettualmente), non esiste, dunque, gerarchia di interpretazione tra MV4 e MV3, ma solo un gerarchia
funzionale dovuta al fatto che la versione eseguibile dei processi applicativi sfrutta i servizi messi a
disposizione da parte dei processi di sistema mediante, e ci avviene mediante interazioni con tali processi di
sistema.
Vale infine la pena di notare intuitivamente che la riduzione del numero dei livelli di interpretazione implica
in generale un aumento di prestazioni in termini di tempo di elaborazione.

2 Rappresentazione binaria delle informazioni


Nei sistemi di elaborazione, i numeri e, in generale, tutte le informazioni sono rappresentate come stringhe di
bit mediante il sistema binario. I normali numeri decimali consistono di una stringa di cifre decimali e, a
volte, di una virgola per la separazione dei decimali. Il sistema di numerazione basato sulla notazione
posizionale, ed il valore di un numero ottenuto con uno sviluppo polinomiale; ad esempio, per un numero
naturale in base 10:
5738 = 5 103 + 7 102+ 3 101+ 8 100

Lavorando con i calcolatori, spesso conveniente usare basi diverse da 10 e quelle pi frequentemente usate
sono la base 2, ed anche 8 e 16. I sistemi di numerazione basati su questi numeri sono rispettivamente
chiamati binario, ottale ed esadecimale.
Un sistema a base k richiede k simboli differenti per rappresentare le cifre da 0 a k - 1. Cos i numeri
decimali sono scritti usando le 10 cifre decimali: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Invece i numeri binari sono
costruiti esclusivamente con le due cifre binarie: 0, 1 (binary digit: bit). I numeri ottali sono costruiti con le
otto cifre ottali: 0, 1, 2, 3, 4, 5, 6, 7. Infine, per i numeri esadecimali, sono necessarie 16 cifre; cos si
richiedono sei nuovi simboli e, convenzionalmente, vengono usate le lettere maiuscole dalla A alla F per i sei
simboli che seguono il simbolo 9: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Il numero binario equivalente al
numero decimale 5738 (in breve nel seguito useremo l'espressione "5738 in binario" o il simbolo 5738 2) :
1011001101010 = 1 212 + 0 211 + 1 210 + 1 29 + 0 28 + 0 27 + 1 26 + 1 25 + 0 24 + 1 23 + 0 22 + 1
21 + 0 20 = 5738

2.1

Conversione decimale-binario e binario-decimale

Questi aspetti saranno di continua applicazione nei vari capitoli, ragion per cui necessario che siano del
tutto familiari e che vengano utilizzati con disinvoltura e rapidit. Anzitutto, necessario avere presente la
tabella delle potenze di 2 (funzione 2j, con j numero naturale):
j

11

21 210 = 2K

12

4K

20

210 210 = 1K 1K = 1M (Mega)

21

2M

16

30

210 220 = 1K 1M = 1G (Giga)

32

31

2G

64

32

4G

128

40

210 230 = 1K 1G = 1T (Tera)

256

41

2T

512

ecc.

ecc.

10

1024 = 1K (Kilo)

ecc.

ecc.

sufficiente ricordarsi le prime dieci righe e le potenze notevoli (Kilo, Mega, Giga, Tera, ), dopo di che
qualunque numero si ottiene mediante facili prodotti di potenze note.
La conversione da binario in decimale si effettua, nel modo pi semplice, applicando lo sviluppo
polinomiale, come nellesempio precedente di 57382.
La conversione da decimale in binario pu essere fatta in due modi:

1. il primo (del tutto generale) deriva direttamente dalla definizione di numero binario: dal numero
decimale viene sottratta la massima potenza di 2 minore del numero stesso e lo stesso processo
ripetuto sulla differenza risultante. Una volta decomposto il numero in potenze di 2, si ottiene il
numero binario ponendo 1 nelle posizioni di bit corrispondenti alla potenza di 2 usata nella
decomposizione e 0 nelle restanti posizioni;
2. l'altro metodo (valido per i soli numeri interi) consiste nel dividere ripetutamente il numero decimale
per 2, considerando i resti, finch si ottiene come quoziente il numero 0. Il numero binario dato
dalla stringa dei resti in ordine inverso rispetto a come sono stati ottenuti.

2.2

Prime nozioni di numeri binari con segno

Per la rappresentazione dei numeri con segno sono usati principalmente tre metodi. In tutti, il bit pi
significativo (anche) il bit del segno: 0 = +, 1 = .
a) Modulo e segno: i bit restanti, tolto il bit del segno, rappresentano il valore assoluto (modulo) del numero.
Ad esempio:
+ 25 = 011001
25 = 111001
Per quanto molto intuitivo, questo metodo non sempre il pi efficiente per laritmetica binaria. Pi spesso
si usano gli altri due metodi, ed in particolare il metodo in complemento a due.
b) Complemento a uno: se il numero positivo, il numero in complemento a uno uguale a quello modulo
e segno, mentre, se il numero negativo, si ottiene complementando bit a bit la rappresentazione modulo e
segno. Ad esempio:
+ 25 = 011001
25 = 100110
c) Complemento a due: se il numero positivo, il numero in complemento a due uguale a quello modulo e
segno, mentre, se il numero negativo, si ottiene sommando uno alla rappresentazione in complemento a
uno. Ad esempio:
+ 25 = 011001
25 = 100110 + 1 = 100111
L'eventuale riporto sul bit pi a sinistra semplicemente ignorato.
Sia il sistema modulo e segno che quello del complemento ad uno hanno due rappresentazioni possibili per il
valore zero, cio +0 e -0. Questa situazione altamente indesiderata. Il sistema del complemento a due non
ha questo problema perch il complemento a due di +0 ancora +0. Ma anche questo sistema presenta una
singolarit: il numero costituito da un 1 seguito da tutti 0 il complemento di s stesso e questo fatto rende
l'intervallo dei numeri positivi asimmetrico rispetto a quello dei negativi: esiste cio un numero negativo
senza il corrispondente controvalore positivo. Qualsiasi insieme di numeri reali con tanti numeri negativi
quanti sono i positivi ed un solo zero costituito da un numero dispari di elementi, mentre m bit consentono
di rappresentare un numero pari di elementi. Perci ci sar sempre o una configurazione di troppo o una di
meno, indipendentemente dal tipo di rappresentazione scelto. Questa configurazione in pi potr essere usata
per il valore per il massimo valore negativo, o per qualsiasi altra cosa, ma questo sar sempre e solo una
convenzione.

2.3

Prime nozioni di aritmetica binaria

La seguente tabella fornisce, in modo analogo rispetto a quanto siamo abituati nella numerazione decimale,
la definizione della funzione addizione di due bit:

addendo addendo somma riporto


0

Con questa regola, due numeri binari possono essere sommati, a partire dal bit pi a destra, sommando i
corrispondenti bit nei due addendi. L'eventuale riporto portato a sinistra di una posizione, proprio come
nella somma decimale.
Nell'aritmetica in complemento ad uno il riporto generato dall'addizione sul bit pi a sinistra aggiunto al bit
pi a destra; questo processo e' chiamato di "riporto circolare". Nell'aritmetica in complemento a due il
riporto generato dall'addizione sul bit pi a sinistra semplicemente scartato.
Se due addendi sono di segno opposto non pu capitare un errore di traboccamento (overflow), mentre se
sono di ugual segno e il risultato di segno opposto significa che si avuto un errore di overflow e il
risultato non corretto. Nell'aritmetica sia del complemento ad uno che del complemento a due l'errore di
overflow pu capitare se e solo se il riporto che arriva al bit di segno differisce dal riporto che esce dal bit di
segno. Normalmente in uscita da un addizionatore si ha anche sia il riporto sul bit del segno che uno speciale
bit di overflow.
Queste nozioni verranno integrate nei vari capitoli quando necessario o come esempio.

2.4

Propriet fondamentali

Una propriet fondamentale dei numeri binari la seguente:

Con k bit si possono rappresentare tutti i numeri naturali che vanno da 0 a 2k 1, estremi inclusi (cio,
il massimo numero naturale esprimibile con k bit uguale a 2k 1).

Altrettanto fondamentale la seguente propriet:

Sia un insieme di m oggetti dello stesso tipo. Vogliamo denotare ogni oggetto con un numero naturale
distinto, cio un identificatore unico delloggetto, rappresentato in binario. Il minimo numero di bit
necessario per rappresentare un qualunque identificatore

n lg 2 m
Queste propriet saranno applicate, ad esempio, con riferimento alle memorie e agli indirizzi di memoria,
come vedremo in una prossima sezione. Ad esempio, per un insieme di 1K oggetti, occorrono (almeno) 10
bit per identificarli univocamente tutti; per un insieme di 3000 oggetti, occorrono 12 bit.
Si osservi che lg 2 m il minimo numero di bit necessari per identificare un oggetto. In alcuni casi, potr
capitare che il numero di bit per rappresentare gli identificatori sia un vincolo del problema e che sia
ridondante rispetto al numero di oggetti: in tal caso, un qualunque identificatore avr un certo numero di bit
pi significativi uguale a zero, oppure alcune configurazioni di bit non saranno significative.

2.5

Alcune propriet utili

a) Quoziente e resto della divisione per potenze di 2


Siano A e B due numeri binari corrispondenti a numeri naturali, e sia B = 2h. In questa ipotesi, molto facile
il calcolo del quoziente della divisione intera e del resto (modulo):

10

il valore di A%B (A mod b) dato dagli h bit meno significativi di A,

il valore di A/B (A div B) dato dai rimanenti bit pi significativi di A.

Ad esempio sia A = 723 (A2 = 1011010011), e B = 16 = 24, per cui A%B = 3 0011 (rappresentato dai 4 bit
meno significativi di A) e A/B = 45 101101 (rappresentato dai rimanenti 6 bit pi significativi di A):

A
1

A % 24

A / 24
Come caso particolare notevole:

un numero binario pari (dispari) ha il bit meno significativo uguale a 0 (1).

b) Operazioni di traslazione (shift) e rotazione


Dato un numero binario naturale A, la sua traslazione destra (shift destro) di 1 bit

shR1 ( A)
il numero naturale che si ottiene spostando tutti i suoi bit a destra di una posizione e inserendo il valore 0
nel bit pi significativo; il vecchio bit meno significativo viene perso.
Dato un numero binario naturale A, la sua traslazione sinistra (shift sinistro) di 1 bit

shL1 ( A)
il numero naturale che si ottiene spostando tutti i suoi bit a sinistra di una posizione e inserendo il valore 0
nel bit meno significativo; il vecchio bit pi significativo viene perso.
Valgono le seguenti propriet, facilmente dimostrabili (ad esempio, a partire dalla propriet di mod e div):
1.

shR1 ( A) A / 2

2.

shL1 ( A) A * 2 mod 2n , dove n il numero di bit di A.

Le propriet sono generalizzabili alla traslazione di k posizioni, a destra shRk (A) ed a sinistra shLk (A) :
1.

shRk ( A) A / 2k

2.

shLk ( A) A * 2k mod 2n

Quello finora definito lo shift cos detto logico, applicato di regola a numeri naturali. Se i numeri sono con
segno, lo shift aritmetico quello che si applica a tutti i bit tranne il bit del segno.
Loperazione di rotazione (destra o sinistra) di k posizioni definita spostando circolarmente di k posizioni
tutti i bit del numero naturale (rotazione logica; oppure rotazione aritmetica se non viene interessato il bit del
segno). Loperazione di rotazione non comporta perdita di bit n inserzione di nuovi bit
c) Concatenamento di numeri binari
Sia A un numero naturale di n bit e B un numero naturale di m bit. La concatenazione di A e B

A B

11

il numero naturale di n +m bit, che ha gli n bit pi significativi uguali a quelli di A e gli m bit meno
significativi uguali a quelli di B.
Ad esempio: A = 100110, B = 01, A B = 10011001.
Per ricavare il valore di A B a partire dai valori di A e B, consideriamo le rappresentazioni di A e di B su n
+ m bit: quella di A (A) ha gli m bit pi significativi tutti uguali a 0, quella di B (B) ha gli n bit pi
significativi tutti uguali a zero:
A = 00 100110 ,

B = 000000 01

Trasliamo A a sinistra di m posizioni e sommiamo il risultato a B:

shLm (A' ) = 100110 00 +


B = 000000 01
ottenendo proprio A B . Dunque, in generale vale la seguente propriet:

A B A 2m B
d) Contatori
Nellimplementazione di loop a livello firmware, ci troveremo spesso nella situazione di valutare la
condizione di uscita da un for ripetuto per un numero di volte N.
Consideriamo prima il caso che N = 2n. Per scandire i passi del for, consideriamo una variabile I inizializzata
al valore 0 e incrementata ad ogni passo. I viene rappresentata su n + 1 bit. Quando I assume il valore 2n
significa che sono gi stati effettuati gli N passi. Per cercare un predicato il pi possibile semplice, abbiamo
che:

la condizione di uscita dal for che il bit pi significativo di I assuma il valore 1.

Se non vogliamo fare ipotesi su N, consideriamo I rappresentata su

lg 2 N

bit

inizializziamo I al valore N-1, e decrementiamola ad ogni passo. La condizione di uscita dal for che I
assuma il valore 1. Per cercare un predicato il pi possibile semplice, abbiamo ancora che:

la condizione di uscita dal for che il bit pi significativo di I assuma il valore 1 (ora si tratta del bit
del segno).

12

3 Reti logiche combinatorie


Una rete combinatoria una rete logica che ha n ingressi binari x1, , xn ed m uscite binarie z1, , zm. A
ciascuna combinazione dei valori degli ingressi corrisponde una ed una sola combinazione dei valori delle
uscite. x1, , xn e z1, , zm sono dette variabili logiche, di ingresso e di uscita rispettivamente. Tutte le
combinazioni possibili delle variabili logiche sono dette stati, di ingresso (in numero di 2n) e di uscita (in
numero di 2m) rispettivamente.
Per descrivere le propriet e la struttura interna delle reti combinatorie si usa unalgebra isomorfa allalgebra
della logica, chiamata algebra della commutazione.

3.1

Elementi di algebra booleana della commutazione

Lalgebra della commutazione un sistema algebrico in cui ogni variabile pu assumere uno solo tra due
valori, 0 e 1, nel quale sono applicate alle variabili le operazioni binarie di moltiplicazione logica e somma
logica e loperazione unaria di complementazione o negazione. Queste operazioni, anche dette funzioni
logiche base, sono chiamate AND (), OR () e NOT () e sono definite come indicato di seguito. Quando
non sorga ambiguit, al posto di A B (A B) verr usata la notazione semplificata AB (A+B).
A

A B = AB

A B = A+B

Queste definizioni costituiscono i postulati di base dellalgebra della commutazione. Altre propriet
notevoli, tutte ricavabili da questi postulati, possono essere enunciate mediante i seguenti teoremi:
1.

Complementazione:

A A 1

2.

Involuzione:

A A

3.

Potenza identica:

A A A

4.

Unione e intersezione

5.

Propriet commutativa:

AA 101A

AA0

AA A

A1 A
A0 0

A B B A

AB BA

13

6.

Propriet associativa:

A ( B C) ( A B) C

7.

Propriet distributiva:

A( B C) AB AC

8.

Teorema di De Morgan:

A B AB

A( BC ) ( AB)C
A ( BC ) ( A B)( A C)

AB A B

Il metodo pi semplice per dimostrare tali teoremi quello cosiddetto della perfetta induzione che consiste
nel verificare luguaglianza delle relazioni per tutte le combinazioni dei valori delle variabili. Questo metodo
si pu facilmente applicare perch ogni variabile pu assumere solo due valori.
Dalle relazioni che enunciano i teoremi precedenti notiamo che ciascuna di queste (tranne la seconda)
affiancata da unaltra relazione che si ottiene dalla prima sostituendo AND con OR e viceversa, ed ogni 0
con 1 e viceversa. Lalgebra della commutazione gode infatti della propriet, insita nella simmetria delle
operazioni di AND e OR, di poter trasformare, con la regola ora enunciata, una data relazione in unaltra
relazione chiamata duale.
Una funzione logica pu essere rappresentata sia da una tabella di verit, sia da una espressione algebrica.
Tuttavia, mentre c una sola tabella di verit per ogni funzione, vi sono molte espressioni che possono
rappresentare una stessa funzione.
Per esempio, le due espressioni:

xy z x y z
xz x y xz x y
rappresentano la stessa funzione, definita dalla seguente tabella di verit:
x y z

0 0 0

0 1 0

1 0 0

1 1 0

0 0 1

0 1 1

1 0 1

1 1 1

Due espressioni che rappresentano la stessa funzione sono chiamate equivalenti.


Tra tutte le espressioni equivalenti di una stessa funzione ve ne sono due di particolare interesse che hanno
forme ben definite. Chiamiamo lettera una variabile affermata o complementata e termine un prodotto di
lettere (termine prodotto) o una somma di lettere (termine somma) che compare in unespressione.
Chiamiamo mintermine un termine prodotto e maxtermine un termine somma che contengono un numero di
lettere di variabili distinte uguale al numero n delle variabili della funzione rappresentata dallespressione.
Indichiamo con SP e PS unespressione in Somma di termini Prodotto (o Somma di Prodotti) e Prodotti di
termini Somma (o Prodotti di Somma), rispettivamente. Chiamiamo infine forma normale la forma di
unespressione SP.
Chiameremo forma canonica di una funzione in n variabili lespressione in SP o PS in cui ogni termine un
mintermine o un maxtermine. Per esempio, lespressione

x y z x y z x yz x yz x yz xyz
la forma canonica della funzione definita nella tabella precedente. Si pu facilmente dimostrare che c una
sola forma canonica in SP ed una sola forma canonica in PS per ciascuna funzione.

14

3.2

Definizione di reti combinatorie, loro formalizzazione e comportamento

Una volta ricavata lespressione logica dalla tabella di verit, immediato realizzare lo schema logico
utilizzando i componenti hardware elementari, detti anche porte logiche, AND, OR, NOT. I simboli
convenzionali di tali porte sono ( mostrato il caso AND, OR a due ingressi):

ca

a
b

c = ab

Porta AND

c = a+b

Porta OR

Porta NOT

Partendo da una espressione logica in forma SP, la rete combinatoria ottenuta a due livelli di logica, con
questo intendendo che esiste un primo livello di porte AND operanti in parallelo, seguite da una porta OR
finale. Ad esempio, la rete logica corrispondente allespressione logica

f ab ac
data da:

a
b
c

3.3

Specifica di reti combinatorie

La specifica di una funzione logica, da implementare mediante una rete combinatoria, pu essere data
semplicemente a parole. Molto utile sar abituarsi a definire una funzione, e quindi a dare la specifica del
comportamento di una rete combinatoria, mediante un formalismo di tipo linguaggio di programmazione. In
effetti, agevole rendersi conto come la specifica in tale formalismo e lespressione logica, derivante dal
procedimento di sintesi, rappresentino niente pi che due diverse modalit sintattiche per dare la stessa
informazione. In pi, la specifica data con un formalismo di programmazione avr il vantaggio, essendo pi
sintetica, di permettere di guidare la progettazione di molte reti come composizione di reti gi note.
Le seguenti sono le specifiche di alcune reti combinatorie che supporremo standard, o primitive, cio
componenti che possibili usare (al pari delle porte AND, OR, NOT) come blocchi basici nella progettazione di
strutture pi complesse:1:

confrontatore ( ) a due ingressi x, y ed una uscita z (z vero se x, y sono diversi):


z = x y = not (x = y)

commutatore (K) a due ingressi primari x, y, un ingresso secondario o di controllo , ed una uscita z (z
assume il valore di x o di y a seconda che sia falso o vero rispettivamente):
z = if not then x else y

selezionatore, o selettore (S), a un ingresso primario x, un ingresso secondario o di controllo , e due


uscite z1, z2 (se falso z1 assume il valore di x e z2 vale falso (0), se vero z1 vale falso (0) e z2
assume il valore di x):
z1 = if not then x else 0
z2 = if not then 0 else x

Per il momento supporremo che ogni ingresso o uscita sia corrispondente ad una sola variabile logica booleana, cio
che corrisponda ad una informazione di 1 bit.

15

oppure
if not then (z1 = x, z2 = 0) else (z1 = 0, z2 = x)

operatori aritmetico-logici: addizione, sottrazione, traslazione (shift), rotazione, incremento


decremento, ecc, la cui specifica diretta. In questo testo interessa particolarmente considerare standard
anche reti aritmetico-logiche multifunzione, o ALU (Arithmetic Logic Unit), capaci di eseguire sulle
variabili di ingresso una delle operazioni suddette a seconda del valore assunto da un numero opportuno
(lg2 k, se k sono le operazioni previste) di variabili di controllo.

Ritorniamo sulla specifica del commutatore, e generalizziamola al caso di m ingressi, x0, x1, , xm-1., con v =
lg2 m variabili di controllo 0, 1 , , v-1.
La specifica la seguente:
z = case 0, 1 , , v-1 of
0 0 0 : x0
0 0 1 : x1

1 1 1 : xm-1
Questa scrittura piuttosto significativa, in quanto esprime il concetto di indirizzamento o indiciamento: dati
m oggetti ordinati, x0, x1, , xm-1, essi sono caratterizzati da altrettanti identificatori unici, detti indirizzi, aventi
valori decimali uguali agli indici loro assegnati (0, 1, , m1); ogni indirizzo espresso, in binario,
mediante lg2 m bit. Per conoscere il valore di un oggetto basta specificare il suo indirizzo o indice. Dunque:

ogni volta che avremo bisogno di implementare la funzione di indirizzamento o indiciamento per
conoscere una informazione, sar sufficiente utilizzare un commutatore, senza bisogno di realizzare
ex-novo la funzione stessa.

In modo analogo si specifica e si interpreta un selezionatore a m uscite.

3.4

Procedimento di sintesi

Una volta data la specifica di una rete (di una funzione logica), nel caso pi generale il procedimento di
sintesi della rete stessa il seguente:
1.

traduzione della specifica nella tabella di verit, per enumerazione di tutti i casi (2n, per n
variabili di ingresso);

2.

per ogni variabile di uscita, scrittura della espressione logica in forma canonica SP (i termini
AND corrispondono agli stati dingresso per i quali la variabile di uscita assume valore vero);

3.

eventuale riduzione delle espressioni logiche;

4.

traduzione di ogni espressione logica in uno schema di rete a due livelli di logica.

Questo procedimento ha complessit O(2n), ed quindi praticamente applicabile solo nei casi in cui il
numero degli ingressi n assuma un valore contenuto. Ad esempio, impraticabile applicarlo quando gli
ingressi della rete siano costituiti da una o pi parole. A maggior ragione, il passo 3 (riduzione o
minimizzazione) , in generale, di complessit esponenziale: si conoscono solo delle buone euristiche in casi
limitati.
Per i nostri scopi, sufficiente lapplicazione delle propriet dellalgebra di Boole per la riduzione delle
espressioni logiche nella sintesi di reti standard, in quanto ogni altra rete verr ricavata come composizione
di tali reti, oppure (come vedremo nella parte dedicata al firmware) utilizzando anche memorie viste esse
stesse come componenti standard.

16

Esempio: sintesi di un commutatore a 2 ingressi


Partendo dalla specifica data in precedenza, si ricava la tabella di verit:

Lespressione della variabile di uscita z in forma canonica SP :

z x y xy x y xy
Applicando le propriet distributiva, della complementazione e dellintersezione si ottiene:

z x( y y) y( x x) x y
Si noti come, al di l delle diversa sintassi, si sia ottenuto esattamente quanto espresso con la specifica data
con un formalismo di programmazione.
A questo punto immediato disegnare lo schema della rete a due livelli di logica.
Esempio: sintesi di un selezionatore a due uscite
Si ottiene subito:

z1 x
z2 = x
e quindi una rete ad un solo livello di logica.
Esempio: sintesi di un confrontatore
Anche in questo caso, senza bisogno di minimizzazioni, si ottiene:

z x y xy
cui corrisponde una rete a due livelli di logica.
Esempio: con riferimento ad un confrontatore, verificare che z z
Lespressione di z si ricava osservando, nella tabella di verit, tutti gli stati di ingresso cui corrisponde
uscita falsa:

z x y xy
da cui:

z ( x y) ( xy )
Applicando due volte il Teorema di De Morgan si ottiene:

17

z ( x y)( xy ) ( x y)( x y) ( x y)( x y)


Applicando le propriet distributiva, della complementazione e dellunione, si ottiene:

z x x xy x y y y xy x y z

3.5

Comportamento temporale delle reti combinatorie

I segnali corrispondenti ai valori assunti dalle variabili logiche sono tutti del tipo a livelli, cio subiscono
transizioni in istanti tra loro scorrelati 2.
Per valutare le prestazioni di un sistema, occorre cominciare a saper valutare le prestazioni di reti
combinatorie. Ogni rete reale caratterizzata da un ritardo tr, necessario affinch, in seguito ad una
variazione dello stato dingresso, si produca la corrispondente variazione dello stato di uscita. Solo dopo
questo tempo si dice che la rete si stabilizzata: durante lintervallo di durata tr, detto appunto anche tempo
di stabilizzazione, il comportamento della rete, in ogni suo punto, impredicibile ed, in particolare, il valore
delle uscite non significativo.
Se lo stato di ingresso varia durante lintervallo tr, a partire dallistante in cui si verificata tale variazione
occorre attendere un tempo tr per avere la stabilizzazione.
Nel seguito supporremo che
a)

le variazioni dello stato dingresso siano sincronizzate, cio che avvengano ad istanti discreti, ed
equidistanti, di una sequenza temporale. Ci significa che le eventuali variazioni delle variabili
dingresso avvengono contemporaneamente in tali istanti;

b)

gli istanti di tale sequenza temporale siano distanziati di un periodo tr.

Per una porta logica, indichiamo con tp il tempo di stabilizzazione. Allo stato attuale della tecnologia esso
assume valori dellordine di 1 nsec fino ascendere a circa 0,1 nsec. Nel seguito supporremo che le porte NOT
abbiano ritardo nullo, o meglio inglobato nel ritardo delle porte AND/OR connesse alle usci delle porte NOT.
E importante ricordare che tp il massimo valore che pu assumere il tempo di stabilizzazione di una porta,
e che non mai possibile ipotizzare di conoscere il valore preciso del ritardo entro tale massimo.
Dalle assunzioni a), b) deriva che il massimo tempo di stabilizzazione di una rete a L livelli di logica dato
da
tr = L tp
Il valore di tp dipende dal numero di ingressi n della porta. La funzione tp(n) ha un andamento monotono
crescente; la crescita relativamente lenta per n nc, tale da poter considerare tp costante, mentre molto pi
rapida per n > nc. Valori tipici di nc allo stato attuale variano da 4 a 8. Il valore di tp che si associa ad una
porta logica quello per n nc.
La conseguenza di questa caratteristica che, ove lespressione logica di una variabile di uscita contenga un
termine AND con pi di nc variabili dingresso, la porta AND della rete deve essere decomposta in pi porte in
cascata, ognuna con al pi nc ingressi. Lo stesso dicasi per una porta OR finale.
Ad esempio, il tempo di stabilizzazione di un commutatore 2tp solo se il numero di variabili di controllo
< nc .
Questa ora esposta una delle ragioni per le quali pu essere necessario realizzare reti mediante schemi a
pi di due livelli di logica. Laltra ragione principale la vedremo nella sez. successiva.

Al contrario, in un segnale impulsivo ogni transizione da 0 a 1 sempre seguita da una transizione da 1 a 0 a distanza
di un intervallo di tempo costante. Segnali impulsivi verranno usati solo per sincronizzare registri usati nelle reti
sequenziali.

18

3.6

Reti combinatorie operanti su parola

Nellapplicazione pratica che faremo delle reti combinatorie sar molto frequente il caso in cui le variabili di
ingresso e di uscita sono da considerare raggruppate in parole, cio la funzione che definisce la rete
applicata a parole di N bit (ad esempio, 32) invece che a semplici variabili booleane. Ne sono esempi:

commutatore a m ingressi ognuno dei quali a N bit. Luscita quindi su N bit, mentre le variabili di
controllo rimangono in numero di lg2 m;

analogamente per un selezionatore su parola di N bit;

confrontatore a N bit: il confronto eseguito su ogni coppia di bit corrispondenti dei due ingressi a N
bit, generando un bit delluscita a N bit;

addizionatore a N bit: vengono sommati due numeri interi su N bit, ottenendo il valore della somma su
N bit ed un bit di riporto finale.

In tutti questi casi, la complessit del procedimento di sintesi delle reti combinatorie impedisce di ricorre al
metodo generale basato sulla tabella di verit. Si cerca invece di comporre reti ad 1 bit, del tipo
corrispondente, per ottenere la rete ad N bit; ad esempio, realizzare un commutatore ad N bit utilizzando
commutatori ad 1 bit.
La complessit del procedimento di sintesi ora O(1), ovviamente ottimale a condizione che il risultato sia
accettabile in termini di prestazioni, cio che il tempo di stabilizzazione della rete ad N bit sia confrontabile
con quello della rete corrispondente a 1 bit.
a. Per alcune reti la composizione parallela: la rete ad N bit composta da N reti ad 1 bit tutte
indipendenti, cio nessuna utilizza in ingresso le uscite di altre. Il ritardo della rete ad N bit dunque
uguale a quello della rete ad 1 bit. E il caso del commutatore, selezionatore, confrontatore. Nel seguito
queste reti saranno assunte come standard.
b. Per altre reti, la composizione in cascata: la rete ad N bit composta da N reti ad 1 bit tali che le uscite
delli-esima costituiscono ingressi della (i+1)-esima. Il ritardo della rete ad N bit ora N volte quello
della rete ad 1 bit. E il caso delladdizionatore, a causa della propagazione del riporto.
possibile ottimizzare il ritardo delladdizionatore usando la cos detta tecnica del salto del riporto,
mediante la quale possibile ridurre da N ad un valore relativamente basso e costante il fattore per cui
va moltiplicato il tempo di stabilizzazione delladdizionatore ad 1 bit per ottenere il ritardo
delladdizionatore ad N bit. In pratica, il tempo di stabilizzazione di un tale addizionatore dellordine
di h tp, con h variabile tra 4 e 8. Nel seguito del testo assumeremo di disporre di addizionatori con salto
del riporto come reti standard.
La sintesi di ALU a N bit, esse stesse considerate standard nel seguito, si effettua applicando tutte le
conoscenze finora acquisite e la teoria sullaritmetica binaria.

19

4 Reti logiche sequenziali


4.1

Definizione di reti sequenziali, loro formalizzazione e comportamento

Un automa a stati finiti una macchina caratterizzata da

n variabili logiche di ingresso, e corrispondentemente h = 2n stati dingresso X1, , Xh;

m variabili logiche di uscita, e corrispondentemente k = 2m stati duscita Z1, , Zk;

r variabili logiche dello stato interno, e corrispondentemente p = 2r stati interni S1, , Sp;

una funzione di transizione dello stato interno:

: X S S
Tale funzione definisce la trasformazione dello stato interno dal valore presente al valore successivo in
corrispondenza del valore dello stato dingresso;

una funzione delle uscite:

: X S Z
Tale funzione definisce la trasformazione dello stato di uscita in corrispondenza del valore dello stato
dingresso e dello stato interno presente.
Una rete logica sequenziale implementa, a livello hardware, un automa a stati finiti.
In un modello strutturale ideale di rete sequenziale di tipo sincrono, le variazioni degli stati avvengono in
corrispondenza degli istanti di una sequenza temporale discreta to, t1, , tn, di intervallo (periodo)
costante ti+1 ti.
Si possono definire due distinti modelli matematici di automa, e quindi di rete sequenziale: il modello di
Mealy e il modello di Moore:

In entrambi i modelli, considerando il comportamento dellautoma al tempo t, lo stato interno


successivo S(t+1) 3 dipende tanto dallo stato dingresso al tempo t, X(t), quanto dallo stato interno
presente, S(t):
S(t+1) = (X(t), S(t))

Nel modello di Mealy, lo stato di uscita al tempo t, Z(t), dipende tanto dallo stato dingresso al tempo
t, X(t), quanto dallo stato interno presente, S(t):
Z(t) = (X(t), S(t))

Nel modello di Moore, Z(t) dipende solo da S(t):


Z(t) = (S(t))

Nel modello di Moore la dipendenza tra stati di uscita e stati di ingresso quindi espressa da:
Z(t) = (S(t)) = ( (X(t1), S(t1))) = 1 (X(t1), S(t1))
Ne discende che, dati due automi di Mealy e di Moore equivalenti, con stati interni iniziali equivalenti e per
la stessa sequenza dingresso si ha che la sequenza di uscita dellautoma di Moore ritardata, rispetto a
quella dellautoma di Mealy, di un intervallo della sequenza temporale.

4.2

Un esempio

Vediamo un esempio, tipico della problematica degli automi: un riconoscitore di sequenza.

Questo simbolo indica convenzionalmente lo stato interno successivo, che diverr stato presente al tempo t+ .

20

La specifica di un automa viene sempre data in termini di trasformazione da stati di ingresso a stati di uscita
e di caratteristiche dellautoma nei confronti delle sequenze di ingresso e di uscita; nel dare questa specifica
implicito il concetto di memoria dellautoma, o stato interno, anche se, da essa, non sempre
immediatamente evidente il numero ed il significato degli stati interni: questi devono essere ricavati durante
la sintesi dellautoma.
Consideriamo un automa avente una variabile di ingresso x ed una variabile di uscita z. Luscita assume
valore 1 se e solo se nella sequenza dingresso si presentano due 1 consecutivi senza sovrapposizioni (ad
esempio: se si verifica la sottosequenza di ingresso 01110 la corrispondente sottosequenza di uscita 00100;
se in ingresso si presenta 011110 in uscita si ha 001010).
Scegliamo inizialmente il modello matematico di Mealy.
Per realizzare lautoma, cominciamo a determinare gli stati interni 4. Abbiamo bisogno di ricordare le
seguenti situazioni: a) nella sequenza di ingresso si presentato uno 0, oppure lo stato iniziale; b) nella
sequenza di ingresso si presentato un 1.
Indichiamo con S0, S1 gli stati interni corrispondenti alle situazioni a), b) rispettivamente.
Levoluzione dellautoma pu essere rappresentata dal grafo di stato della figura seguente, secondo le
seguenti convenzioni: i nodi corrispondono a stati interni; gli archi corrispondono a transizioni tra stati
interni, ed a questo scopo sono marcati con lo stato dingresso che provoca la transizione e con lo stato di
uscita corrispondente (X / Z).

x=1/z=0
x=0/z=0

S0

S1

x x= =0 0/ z/ z= =0 0

x = 1Figura
/ z = 11
Per realizzare lautoma mediante una rete sequenziale, diamo una codifica degli stati interni mediante il
minimo numero di variabili ( lg2 2 = 1 ) Indichiamo con y la variabile dello stato interno presente e con Y
la variabile dello stato interno successivo; una possibile codifica :
stato int

S0

S1

Dobbiamo ora esprimere, mediante espressioni logiche, le due funzioni:

funzione delle uscite:


z = (x, y)

funzione di transizione dello stato interno:


Y = (x, y)

E possibile che, con il ragionamento iniziale, si riconoscano pi stati interni rispetto allo stretto necessario. Come
determinare formalmente eventuali stati equivalenti, e di conseguenza eliminare quelli ridondanti, descritto nel testo di
Gerace.

21

La realizzazione di tali funzioni mediante reti combinatorie dar luogo alla parte combinatoria della rete
sequenziale cercata, che verr completata con la richiusura dello stato interno per collegare Y a y (su
questultimo aspetto torneremo in seguito):

Dal grafo di stato si ricava la seguente tabella di verit per e :

Si ricavano quindi le espressioni logiche che definiscono le funzioni delle uscite e di transizione dello stato
interno:
z=xy
Y=x y
A questo punto immediato realizzare lo schema delle reti e (che, nel caso specifico, risultano ad un
solo livello di logica).
Realizziamo ora lo stesso riconoscitore di sequenza mediante un automa secondo modello matematico di
Moore. Il grafo di stato mostrato in figura:

x=1
x=0

S0
z =0

x=0

S1
x=0

x=1

S2
z=1

z=0

x=1

22

Poich nel modello di Moore lo stato di uscita univocamente associato allo stato interno presente, sono ora
necessari tre stati interni :

S0,

S1, con

S2;

con stato di uscita z = 0, del tutto equivalente a quello dellautoma di Mealy e considerato stato
iniziale;
stato di uscita z = 0, corrispondente allo stato S1 dellautoma di Mealy;

con stato di uscita z = 1, corrispondente alla situazione in cui stata riconosciuta la sottosequenza
dingresso 11. Si noti che lo stato S1 aveva il significato si presentato un 1 nella sequenza di
ingresso, ma, poich a S1 univocamente associato lo stato di uscita z = 0, nel caso si presenti in
ingresso ancora un 1, occorre passare ad uno stato interno cui corrisponda stato di uscita z = 1: questo
appunto S2.

In generale, il numero di stati interni dellautoma di Moore maggiore o uguale del numero di stati interni
dellautoma di Mealy equivalente. Nel nostro caso, si verificata la relazione, piuttosto frequente, di
strettamente maggiore.
Per procedere nella sintesi della rete sequenziale, diamo una codifica degli stati interni mediante il minimo
numero di variabili ( lg2 3 = 2 ). Indichiamo con y1, y2 le variabili dello stato interno presente e con Y1, Y2
le variabili dello stato interno successivo; una possibile codifica :
stato int

y1

y2

S0

S1

S2

Ricaviamo le due funzioni che definiscono lautoma:

funzione delle uscite: z = (y1, y2)

funzione di transizione dello stato interno: (Y1, Y2) = (x, y1, y2)

La realizzazione di tali funzioni mediante reti combinatorie dar luogo alla parte combinatoria della rete
sequenziale cercata. Questultima verr completata con le richiusure dello stato interno per collegare Y1, Y2
a y1, y2 come mostrato in figira:

Y1
y1

Y2

y2

Dal grafo di stato si ricava la seguente tabella di verit per e :

23

y1

y2

Y1

Y2

Si ricavano quindi le espressioni logiche che definiscono le funzioni delle uscite e di transizione dello stato
interno:
z = y1
Y1 = x y1 y2
Y2 = x y1 y 2 + x y1
Lespressione per Y2 stata ricavata specificando al valore 0 lentrata non specificata. Scegliendo, invece, di
specificarla al valore 1, si ottiene:
Y2 = x y1 y 2 + x y1 y2 + x y1 = x y1 ( y 2 + y2 ) + x y1 = x ( y1 + y1 ) = x
A questo punto immediato realizzare lo schema delle reti combinatorie e (nel caso specifico, la prima
a zero livelli di logica; la seconda a due livelli di logica usando la prima espressione di Y2, ad un solo
livello di logica usando la seconda espressione minimizzata).
Verifichiamo che, partendo da stati interni iniziali equivalenti e per la stessa sequenza dingresso, la
sequenza di uscita dellautoma di Moore ritardata, rispetto a quella dellautoma di Mealy, di un intervallo
della sequenza temporale. Ad esempio, per la stessa sequenza dingresso:
t0

t1

t2

t3

t0

t1

t2

t3

per la rete secondo il modello di Mealy: 0

per la rete secondo il modello di Moore:(0)

t4

le sequenze di uscita sono:

4.3

t4

Reti sequenziali reali di tipo sincrono

In questo capitolo daremo una caratterizzazione della realizzazione di reti sequenziali sincrone limitata agli
scopi di questo testo (studio di sistemi costituiti dallinterconnessione di unit di elaborazione).

Il modello strutturale ideale


Nel modello ideale le uscite Yi (variabili dello stato interno successivo) della rete combinatoria sono
collegate agli ingressi yi (variabili dello stato interno presente) della rete combinatoria e della rete
mediante elementi di memoria temporanea che introducono un ritardo di valore si vedano gli esempi
precedenti): il valore di ogni yi diviene uguale al valore di Yi dopo un intervallo di tempo

24

Nel modello ideale si assume che


a)

le funzioni e abbiano ritardo nullo,

b)

le variabili di ingresso della rete sequenziale varino, tra loro tutte contemporaneamente, a istanti
temporali discreti distanziati di

Di conseguenza, nel modello ideale tutti gli ingressi delle reti combinatorie e , siano essi di tipo xj
(variabili dingresso) che di tipo yi (variabili dello stato presente), variano contemporaneamente in
corrispondenza degli istanti della sequenza temporale, e solo in corrispondenza di questi.
Problemi del modello strutturale ideale
Il suddetto funzionamento deve fare i conti con il fatto che, nella realt, la precedente assunzione a) non
valida. Come discusso in F3, le reti combinatorie, come e nel nostro caso, sono caratterizzate da un certo
tempo di stabilizzazione, cio da un ritardo non nullo necessario per avere le uscite in forma stabile
(significativa) a partire dallistante in cui gli ingressi sono stabili. Abbiamo visto in F3 come questo ritardo
pu essere valutato per ogni rete combinatoria.
Il problema della stabilizzazione , nel caso delle reti sequenziali, molto pi serio che per le reti
combinatorie.
Si parta dalla situazione in cui, ad un certo istante t, tutti gli ingressi esterni xj e tutti gli ingressi dello stato
presente yi sono stabili: le uscite delle reti combinatorie e saranno stabili allistante t + tr, dove tr il
tempo di stabilizzazione delle reti combinatorie stesse 5.
Se, invece, gli ingressi yi variassero in istanti diversi rispetto agli xj , le reti combinatorie e potrebbero
non stabilizzarsi mai, in quanto le uscite della rete sono esse stesse ingressi delle due reti combinatorie, e
della in particolare. Continuando a mantenere la precedente assunzione b), potremmo allora pensare di
scegliere il valore di tale che:
= tr
Purtroppo, nemmeno in questo modo viene risolto il problema della stabilizzazione: come sappiamo dalla
F3, tr il massimo tempo di stabilizzazione di una rete combinatoria e non mai possibile ipotizzare di
conoscere il valore preciso del ritardo entro tale massimo. Di conseguenza, gli ingressi yi delle reti e
variano in istanti temporali non coincidenti con gli istanti della sequenza temporale, in corrispondenza dei
quali (e solo di quelli) si assume che varino gli ingressi esterni xj.
Verso il modello strutturale reale
La soluzione, che permetta comunque di mantenersi aderenti al modello di funzionamento sincrono, deve
essere basata su ritardi nelle richiusure che, invece che costanti ad un certo valore come nel modello ideale,
siano variabili.
Continuiamo a mantenere lassunzione b), caratterizzandola cos: le variabili di ingresso della rete
sequenziale variano, tra loro tutte contemporaneamente, a istanti temporali discreti distanziati di un intervallo
tr
Nelle richiusure dello stato interno inseriamo degli elementi di memoria funzionanti come cancelli
temporizzati: in qualunque istante varino le uscite Yi della rete combinatoria , i valori di yi assumono i
valori degli Yi solo in istanti temporali ben determinati (il cancello si apre solo in istanti ben determinati).
Il problema della stabilizzazione ora risolto imponendo che gli istanti della sequenza temporale siano
distanziati dello stesso intervallo di cui in precedenza.

Senza perdere in generalit, assumeremo che i ritardi delle due reti siano uguali. In realt, sufficiente considerare il
ritardo della rete .

25

Registri impulsati
Un elemento di memoria funzionante come un cancello temporizzato realizzato da un ulteriore
componente hardware standard, detto registro, o meglio registro impulsato.
Possiamo ora passare alla effettiva realizzazione del registro nella forma che verr utilizzata nel seguito del
testo.
Un registro R di un bit una rete sequenziale, assunta primitiva, avente un ingresso primario a, una uscita b,
ed un ingresso secondario p (lingresso enable). I segnali di a e b sono a livelli, il segnale di p periodico e
impulsivo ed detto comunemente impulso di clock. Il comportamento di R il seguente:
when p do b:= a
cio: quando sullingresso p presente impulso (valore 1 del segnale impulsivo), allora luscita assume il
valore presente sullingresso; si dice anche che, quando presente impulso, il valore di a viene scritto in R
(apertura del cancello).
Il simbolo ed il funzionamento di un registro sono illustrati nella figura seguente:

Registro impulsato
con ingresso e uscita a livelli

b
livello 1

livello 0

fronte di discesa dellimpulso

p
periodo

durata
impulso

b
commutazione: scrittura nel registro
La funzione di cancello temporizzato evidente dal fatto che non c nessuna relazione tra gli istanti in cui
varia lingresso a e quelli in cui varia luscita b; luscita, se varia, varia solo a istanti di tempo ben
determinati, e cio in corrispondenza dellimpulso di clock. Precisamente, poich la durata dellimpulso
non nulla, la scrittura in R avviene sul fronte di discesa dellimpulso.
Esistono vari tipi di registri, o flip-flop. Quello definito in precedenza di gran lunga il pi usato ed del
tutto sufficiente per i nostri scopi; chiamato flip-flop F o, nella documentazione tecnica, latch.
Un registro a N bit realizzato semplicemente mettendo in parallelo N registri da 1 bit, tutti impulsati dallo
stesso segnale di clock.

Corretta stabilizzazione dei registri


Come detto il segnale impulsivo p periodico. Nel periodo va contata anche la durata dellimpulso (che
comunque normalmente piuttosto piccola rispetto al periodo stesso). Occorre fare in modo che lingresso
del registro non vari durante lintervallo se ci avvenisse, luscita sarebbe indeterminata per un tempo
finito ma illimitato. Infatti, il registro esso stesso una rete sequenziale (realizzata secondo il modello
asincrono) ed il suo periodo di stabilizzazione proprio .
Il fenomeno detto dello stato metastabile dei registri impulsati.

26

Reti sequenziali sincrone LLC


A questo punto disponiamo del modello strutturale di rete sequenziale sincrona reale, mostrato nella figura
seguente per il modello di Mealy (rete con n variabili di ingresso, m variabili di uscita, k variabili dello stato
interno).

k
R

p
Esso comprende le due reti combinatorie reali (funzione delle uscite) e (funzione di transizione dello
stato interno), e le richiusure dello stato interno sono realizzate con k registri in parallelo impulsati dallo
stesso segnale di clock (registro di k bit).
Il modello detto LLC (Level input, Level output, Clocked), a significare che i segnali su cui si applicano le
funzioni e sono ancora a livelli, mentre lunico segnale impulsivo quello per la sincronizzazione dei
(per provocare la scrittura nei) registri.
Il periodo dellimpulso detto ciclo di clock della rete sequenziale.
Come visto, deve essere tr. In realt, per tenere conto della durata dellimpulso, e quindi per evitare il
fenomeno dello stato metastabile dei registri, si ha che il ciclo di clock della rete va determinato come
tr +
La durata dellimpulso di clock pu essere assunta dello stesso ordine di grandezza del tempo di
stabilizzazione tp di una porta logica. Ad esempio, se = 2 nsec, il generatore di impulsi di clock ha una
frequenza f = 1/ = 500 MHz (0,5 GHz).
Sincronizzazione degli ingressi
Rimane da chiarire come assicurare la validit dellassunzione sulla variabilit degli ingressi esterni solo in
corrispondenza di istanti ben determinati e distanziati di un intervallo .
1. In certi casi questa caratteristica assicurata dal comportamento delle reti che producono i valori
dingresso alla rete in questione: esiste cio una sincronizzazione implicita tra le reti interconnesse, che
assicura la reciproca stabilizzazione entro un intervallo di durata . Un caso notevole sar costituito
dallinterazione tra Parte Controllo e Parte Operativa allinterno del ciclo di clock complessivo dellunit
di elaborazione.
2. Quando non sia possibile adottare la soluzione precedente, si ricorre ancora alluso di registri come
sincronizzatori: sugli ingressi della rete sequenziale sono disposti altrettanti registri impulsati con lo
stesso clock della rete stessa. E questo il caso degli ingressi esterni di una unit di elaborazione, ingressi
che fanno capo alla Parte Operativa in aggiunta quelli (citati in precedenza) provenienti dalla Parte
Controllo. In questo caso esiste la possibilit che si verifichi lo stato metastabile, a meno che non sia
possibile imporre precisi vincoli alle relazioni tra i cicli di clock delle reti sequenziali interconnesse;
altrimenti, esistono metodi per rilevare leventuale occorrenza di stati metastabili in modo da innescare
azioni di correzione degli errori.

27

5 Componente logico memoria


5.1

Realizzazione logica

In versione RAM (lettura-scrittura) un componente logico memoria definito come un array


unidimensionale M di registri su cui sono definite le seguenti operazioni fondamentali :
lettura sulluscita out del contenuto della cella di indirizzo i: out = M [ i ];
scrittura del valore presente sullingresso in nella locazione di indirizzo i: M [ i ] = in.
Il simbolo convenzionale il seguente :

in

out
R [0 .. n-1]

indirizzo

Lo schema di implementazione il seguente:

R0
in

0
out

R1

...
Rn-1
n-1

indirizzo
Il commutatore K di uscita, i cui ingressi primari sono le uscite dei registri ed i cui ingressi secondari sono i
bit dellindirizzo, realizza loperazione di lettura.
Il selezionatore S di ingresso, avente anchesso come ingressi secondari i bit dellindirizzo, ha come ingresso
il segnale di controllo per l'abilitazione alla scrittura; inoltre, lingresso in viene collegato a tutti gli ingressi
dei registri; di conseguenza, se = 1, il valore di in viene scritto solo nel registro indirizzato.
Nel caso di una memoria ROM, ovviamente presente solo il commutatore di uscita.
Si possono avere memorie RAM a pi ingressi e pi uscite (ad esempio, 1 ingresso e 2 uscite), utilizzando il
numero corrispondente di selezionatori e commutatori.

28

5.2

Realizzazione fisica e ritardi

Lo schema di principio ora introdotto viene adottato sia per memorie di registri di piccola capacit (32 - 256
celle), sia per memorie, di grande capacit (107 - 109 celle) da adottare allinterno dellunit memoria
principale di un calcolatore general purpose. In tutti i casi, improponibile una realizzazione del
commutatore di uscita e del selezionatore dingresso come reti a due livelli di logica, visto il numero troppo
elevato di ingressi.
In questa sezione studieremo il problema della realizzazione, e di conseguenza della determinazione del
tempo di accesso, come un caso particolare notevole delle reti a pi livelli di logica.
Oltre alle modalit con cui verranno realizzati il commutatore ed il selezionatore per indirizzare le celle, il
tempo di accesso influenzato in modo significativo dal tipo di tecnologia elettronica utilizzato:

le memorie RAM pi economiche sono quelle cos dette dinamiche (DRAM), in quanto, per ragioni
di potenza del segnale relativo al contenuto delle celle, ogni cella necessita di un rinfresco
periodico (la cella va letta e quindi riscritta con lo stesso valore letto) con cadenza dellordine dei
msec. Tipici tempi di accesso di memorie dinamiche sono attualmente dellordine delle decine di
nsec fino alle centinaia di nsec, con capacit dellordine delle migliaia di Mbit per chip ed oltre;

le memorie statiche (SRAM), che non necessitano di rinfresco, presentano tempi di accesso
decisamente pi bassi, dellordine di pochi nsec (o frazioni di nsec) fino alle decine di nsec, ma, a
parit di generazione tecnologica, sono anche assai meno dense delle dinamiche e quindi
caratterizzate da una minore capacit per chip, dellordine delle centinaia di Mbit per chip.

Soluzioni intermedie, dette SDRAM, combinano alcuni vantaggi e svantaggi delle DRAM e SRAM,
permettendo di ottenere capacit di poco inferiori a quelle delle DRAM con tempi di accesso di poco
superiori a quelli delle SRAM.

5.2.1

Numero massimo di ingressi per porta nelle reti combinatorie

Ricordiamo che, in generale, per una porta logica AND/OR fissato un numero massimo di ingressi, N0, ad
esempio N0 = 8. Il valore del massimo ritardo di stabilizzazione della porta, tp, vale per un numero di ingressi
N N0, in quanto per N > N0 il ritardo di stabilizzazione aumenterebbe linearmente con forte pendenza. In
pratica, non esistono porte con N > N0. Di questa caratteristica tecnologica occorre tenere conto nella
realizzazione di una qualunque rete combinatoria, in particolare, nella realizzazione di commutatori
(selezionatori) con un elevato numero di ingressi, come si ha anche (ma non solo) nellimplementazione dei
componenti logici memoria.
Se di una funzione stata ricavata limplementazione come rete combinatoria a due livelli di logica, questa
realizzazione vale sempre da un punto di vista concettuale, ma, dal punto di vista tecnologico, occorre tener
conto del vincolo che, per ogni porta, deve essere N N0. Se questa condizione non si verifica, occorre
sostituire la singola porta con una struttura ad albero di ariet N0, che, di tutte le possibili realizzazioni,
quella che garantisce il minimo ritardo di stabilizzazione. In generale, quindi, il ritardo di stabilizzazione
comportato dalla realizzazione di un termine AND/OR varia in modo logaritmico con il numero delle sue
variabili dingresso.
5.2.2

Tempo di accesso

Si consideri un commutatore a n ingressi principali, x0, , xn-1, m ingressi secondari (variabili di controllo)
0, , m-1, con m = lg2 n, e uscita z. Ricordiamo che esso definito dalla funzione:
z = case 0, 1, , m-1 of
0 0 0 : x0
0 0 1 : x1

stringa binaria equivalente al valore naturale j : xj

1 1 ... 1 : xn-1

29

Questo corrisponde alla realizzazione del commutatore come una rete combinatoria che, concettualmente, a
due livelli di logica, dove:

il livello AND costituito da n porte AND, la j-esima delle quali ha m + 1 ingressi: uno xj e gli altri
m sono le variabili di controllo opportunamente affermate o complementate in modo da dare luogo alla
stringa binaria equivalente al valore naturale j;

il livello OR costituito da un porta OR con n ingressi.

A questa realizzazione concettuale corrisponde una realizzazione effettiva in cui ogni porta AND/OR pu
essere sostituita da una struttura ad albero se il suo numero di ingressi > N0.
In particolare:

il livello AND costituto da n alberi, ognuno di ariet N0 e di profondit:


lgNo ( m + 1 ) = lgNo ( lg2 n + 1 )

il livello OR costituito da un albero di ariet N0 e di profondit:


lgNo ( n )

Indicando con tp il ritardo di una porta AND/OR con un numero di ingressi N N0, il ritardo di
stabilizzazione di un commutatore ad n ingressi quindi dato da:
TK (n, N0, tp) = tp ( lgNo ( lg2 n + 1 ) + lgNo ( n ) )
Questa formula generale esprime, in particolare, il tempo di accesso di un componente logico memoria di
capacit C (= n), valutato come il massimo ritardo di stabilizzazione per loperazione di lettura:
ta (C, tp) = TK (C, N0, tp) = tp ( lgNo ( lg2 C + 1 ) + lgNo ( C ) )
Come si vede, dei due addendi domina nettamente il secondo (ritardo livello OR, con ordine di grandezza
logaritmico): questo che giustifica ladozione di tecnologie ad hoc per realizzare la funzione OR a molti
ingressi, ma, indipendentemente dalla realizzazione elettronica di tali tecnologie, esse sono sempre
concettualmente riconducibili alla realizzazione di una rete combinatoria a pi livelli di logica e la
valutazione effettuata con la formula di cui sopra risulta rigorosa.
Ovviamente, quando si abbia a che fare con numeri semplici il valore del ritardo pu anche essere calcolato
semplicemente contando le profondit degli alberi dei livelli AND e OR.
Per un selezionatore (e quindi per loperazione di scrittura di un componente logico memoria), avendo solo il
livello AND, si ha:
TS (n, N0, tp) = tp lgNo ( lg2 n + 1 )
Pu convenire trasformare le formule di cui sopra utilizzando logaritmi in base 2:
TK (n, N0, tp) = tp ( lg2 ( lg2 n + 1 ) / lg2 (N0) + lg2 ( n ) / lg2 (N0) )
TS (n, N0, tp) = tp lg2 ( lg2 n + 1 ) / lg2 (N0)
Ad esempio, vediamo alcuni tempi di accesso di componenti logici memoria con diverse capacit C, con C
potenza di due e N0 = 8:
ta (C, tp) = tp ( lg2 ( lg2 C + 1 ) / 3 + lg2 ( C ) / 3 )
C = 64

ta = 3 tp

C = 256

ta = 5 tp

C = 512

ta = 5 tp

C = 1K

ta = 6 tp

C = 64K

ta = 8 tp

C = 1M

ta = 9 tp

C = 64M

ta = 11 tp

30

C = 256M

ta = 12 tp

C = 1G

ta = 12 tp

C = 4G

ta = 13 tp

Questi valori mostrano quanto sia efficiente la realizzazione ad albero.


Leffettivo valore di questi ritardi dipende, ovviamente, dal valore di tp, che fortemente variabile con il tipo
di tecnologia adottata. Ad esempio, allo stato attuale, come ordine di grandezza si pu avere per memorie
statiche tp 1 10 nsec, mentre per memorie dinamiche tp 10 100 nsec.

5.2.3

Memorie realizzate a partire da memorie preesistenti

Di regola, le memorie di grande capacit sono realizzate a partire da componenti logici base dati, che vanno
combinati opportunamente in quella che prende il nome di memoria modulare.
Ad esempio, supponiamo di voler realizzare una memoria M, di tipo ROM, avente capacit 64K parole, a
partire dalla disponibilit di memorie ROM di capacit 1K parole.
La realizzazione della memoria da 64K si ottiene mediante 64 moduli di memoria da 1K tra loro
indipendenti, ed ottenendo di M luscita mediante un commutatore a 64 ingressi, come mostrato nella figura
a pagina seguente.
Per una memoria RAM, analoga struttura va realizzata per il selezionatore dingresso.
importante notare come utilizzato lindirizzo di 16 bit:

i 10 bit meno significativi (indirizzo allinterno del modulo di memoria) indirizzando le memorie da
1K operanti in parallelo,

i 6 bit pi significativi (identificatore del modulo di memoria) comandano il commutatore di uscita.


16

M
(64K)

indirizzo:
identificatore
del modulo
6 bit

10

M0
(1K)

10

indirizzo allinterno del modulo


10 bit

10

M1
(1K)

...
K

M63
(1K)

31

I moduli di memoria da 1K hanno un loro tempo di accesso noto, tao. Il tempo di acceso complessivo si
ottiene come:
ta = tao + TK
Nellesempio: TK = 3 tp. Se tao = 7 tp (si noti che tale valore non va ricavato utilizzando la formula della sez.
precedente, in quanto rappresenta un dato del problema associato alle memorie che vengono fornite; esso
viene espresso come multiplo di tp solo per comodit), si ottiene ta = 10 tp.

32

Livello Firmware
6 Caratteristiche di un sistema a livello firmware
6.1

Unit di elaborazione

Un sistema di elaborazione a livello firmware costituito da un certo numero di unit di elaborazione tra
loro interagenti, U1, ..., Un, , come mostrato genericamente in figura:

U1

U3

...
U2

...

Un

...

Ad ogni unit di elaborazione affidato un certo sottoinsieme delle funzionalit dellintero sistema.
Attraverso linterazione tra unit viene realizzato il compito che globalmente si intende affidare allintero
sistema. Ad esempio, in un calcolatore general-purpose si riconoscono molte unit, tra le quali il processore
centrale, la memoria principale, e le unit di ingresso-uscita includenti anche le memorie secondarie; ogni
unit specializzata verso uno specifico compito, ma attraverso linterazione tra le unit si realizza un
sistema avente la caratteristica di essere generale nei confronti del supporto fornito ai livelli superiori del
sistema; in particolare il funzionamento di ogni unit e linterazione tra le varie unit realizza
linterpretazione di qualunque programma espresso con il formalismo che definisce il livello assembler del
sistema.
Una unit di elaborazione svolge il proprio specifico compito in modo:

6.2

autonomo: lunit capace di controllare la propria elaborazione in modo del tutto indipendente,
pur ricavando informazioni sulle funzionalit da eseguire e valori dei dati attraverso linterazione
con altre unit ;

sequenziale: il funzionamento dellunit descritto da un programma sequenziale. Chiameremo


microprogramma la descrizione del funzionamento dellunit, e microlinguaggio il linguaggio
imperativo di programmazione sequenziale con cui esprimere il microprogramma.

Modello Parte Controllo - Parte Operativa

Il microprogramma di una unit di elaborazione a sua volta interpretato dal livello hardware sottostante.
Questa interpretazione viene realizzata da due reti sequenziali LLC tra loro interagenti, dette Parte
Controllo (PC) e Parte Operativa (PO), come mostrato dal modello generale di unit di elaborazione di
figura seguente.
La PO provvede allesecuzione delle operazioni previste dai comandi del microlinguaggio, o
microistruzioni, allo scopo disponendo delle tipiche risorse strutturali messe a disposizione dal livello
hardware:
commutatori,
selezionatori,
reti di calcolo mono-funzione o multi-funzione (ALU),

33

registri : tra questi si distinguono quelli visibili anche al livello superiore (in un calcolatore, i registri
generali del linguaggio assembler) e quelli visibili esclusivamente al livello firmware (i registri utilizzati
per le variabili del microprogramma).

segnale di clock

PC
variabili
di controllo
= {} {}

variabili
di condizionamento
{x}

ingressi esterni

PO

uscite esterne

PC provvede:
al controllo della sequenzializzazione delle microistruzioni, allo scopo utilizzando i valori delle variabili
di condizionamento {x} relative allo stato della PO. Ad esempio, in una certa microistruzione occorre
effettuare il test per zero del contenuto di un registro;
ad ordinare alla PO lesecuzione di ogni microistruzione mediante i valori delle variabili di controllo
= {} {}, una parte delle quali {} abilita/disabilita la scrittura nei registri della PO, mentre laltra
parte {} fornisce gli ingressi secondari di commutatori, selezionatori e reti di calcolo. Ad esempio, in
una certa microistruzione si deve ordinare alla ALU di eseguire loperazione di addizione sui contenuti di
due specifici registri e di scrivere il risultato in uno specifico registro).
PC e PO sono reti sequenziali LLC (Level-input Level-output Clocked) impulsate dallo stesso segnale di
clock, e quindi aventi lo stesso ciclo di clock:

questo, detto ciclo di clock dellunit, verr determinato in modo tale da permettere la
stabilizzazione di entrambe le reti per lesecuzione di una qualsiasi microistruzione.

Poich la struttura PC-PO rappresenta linterprete a livello hardware del microlinguaggio del livello
firmware, il modello di programmazione del livello firmware dunque sincrono:

ogni microistruzione eseguita in un tempo costante uguale al ciclo di clock.

Lo scopo di questa parte di studiare la progettazione di unit di elaborazione mediante un procedimento


formale che, partendo dalla scrittura del microprogramma, permette di ricavare la struttura della PC e della
PO, e quindi di determinare la struttura dellinterprete a livello hardware. Inoltre, il procedimento risulter di
bassa complessit rispetto ai parametri in gioco (come numero di microistruzioni, di registri, di ALU, ecc).
La metodologia che verr fornita ha carattere di assoluta generalit nei confronti dei vari tipi di sistemi e nei
confronti della specifica tecnologia hardware: la metodologia permette di descrivere semplici unit da
utilizzare in sistemi specializzati, cos come le unit di un calcolatore general-purpose incluso il processore
centrale. In questo capitolo, la metodologia verr esemplificata nei confronti della progettazione di unit
qualsiasi, non necessariamente facenti parte di un calcolatore general-purpose. La sua applicazione allo
studio dellarchitettura di un calcolatore general-purpose sar oggetto di parti successive.

6.3

Il procedimento di progettazione delle unit

I passi essenziali nel procedimento formale di progettazione di una unit sono i seguenti :
0. specifica delle operazioni esterne affidate allunit. Il termine operazioni esterne sta da indicare le
funzionalit del livello superiore che devono essere interpretate dallunit. Solo nel caso di un processore

34

centrale le operazioni esterne corrispondono effettivamente alle istruzioni assembler; in tutti i casi che
vedremo in questo capitolo, le operazioni esterne vanno sempre pensate come le funzionalit che
dallesterno (quindi da altre unit) vengono richieste allunit in questione, considerata come servente.
La specifica delle operazioni esterne pu essere data a parole o con un formalismo di volta in volta
ritenuto pi adatto ;
1. scrittura del microprogramma che interpreta le operazioni esterne. In prima istanza, specie nei casi pi
complessi, conveniente dare una descrizione dellinterpretazione delle operazioni mediante un
formalismo ad alto livello (pseudo-codice) per poi passare ad una descrizione nel microlinguaggio
eseguibile (che verr definito nel seguito);
2. derivazione formale della rete sequenziale Parte Operativa a partire dal microprogramma;
3. derivazione formale della rete sequenziale Parte Controllo a partire dal microprogramma;
4. valutazione del ciclo di clock dellunit in funzione dei ritardi temporali delle risorse hardware adottate
(applicando opportune formule analitiche oggetto della trattazione);
5. valutazione del tempo medio di elaborazione di ogni operazione e/o relativo allinsieme delle operazioni
affidate allunit.
essenziale ribadire fin da ora che, ai passi 2 e 3, le strutture hardware della PC e della PO verranno ottenute
con procedimenti formali a partire dal microprogramma; in altri termini, la visione erronea secondo la quale i
sistemi di elaborazione vengono realizzati mediante approcci empirici, consistenti nel mettere insieme in
modo artigianale componenti hardware, collegamenti e clock, non appartiene alla metodologia adottata in
questo testo. Diversa cosa che, specie in casi molto complessi (come lo stesso processore centrale),
lottimizzazione del progetto dellunit (in termini di prestazioni e/o costo) potr eventualmente richiedere
lapplicazione di ulteriori procedimenti, euristici o approssimati, ma pur sempre tali da poter essere
ricondotti alla metodologia complessiva ed al corredo di conoscenze ad essa associato.
6.4

Esempio 1

In questa sezione descriveremo in dettaglio un semplicissimo esempio di unit di elaborazione, allo scopo di
introdurre la metodologia di progettazione. Questa verr poi formalizzata nella sezione successiva.
6.4.1

Specifica delle operazioni esterne

Si vuole progettare una unit di elaborazione U avente la seguente struttura esterna:

U
B
da Ua
32

a Ub
32

dove A un registro, di 32 bit, visibile anche al livello superiore, e B un ingresso esterno sul quale viene
inviata ad U una sequenza di valori, ognuno rappresentato in complemento a 2 su parola di 32 bit..
Lunit capace di eseguire una sola operazione: per ogni valore B della sequenza dingresso, ad A viene
assegnato il valore assoluto della somma tra il contenuto corrente di A stesso ed il valore B. Si suppone A
inizializzato a 0: di regola, la condizione che tutti i registri assumano inizialmente il valore 0 forzata, per
ragioni fisiche, allatto dellaccensione del sistema.
La sequenza di valori B viene inviata ad U da unaltra unit, diciamo Ua, del sistema, e la sequenza di
risultati viene inviata da U ad una unit Ub, eventualmente coincidente con Ua. Occorre fare subito una
precisazione: per il momento non supporremo lesistenza di alcun meccanismo di sincronizzazione per
distinguere se, ogni volta che viene calcolata una nuova operazione, il valore B effettivamente un nuovo
valore inviato da Ua o ancora il valore precedente della sequenza (ricordiamo che tutti i segnali, tranne

35

quello per realizzare il clock, sono a livelli). La semplificazione sottintende lipotesi che, ogni volta che
viene calcolata una nuova operazione, sia presente un nuovo valore di B, e che questa sincronizzazione sia
sotto la responsabilit di Ua. Allo stesso modo, si suppone che Ub sia capace di distinguere larrivo di un
nuovo risultato da U. A questa semplificazione, non realistica nella pratica, verr posto rimedio in una
successiva sezione, nella quale verranno sviluppati i necessari meccanismi di comunicazione e
sincronizzazione per il corretto scambio di informazioni, in ingresso ed in uscita, tra le unit, senza imporre
vincoli dipendenti dal tempo.

6.4.2

Microprogramma

In un formalismo ad alto livello si pu scrivere :


while true
A=A+B;
if A < 0 then A = A

Come di regola, una unit di elaborazione esegue un ciclo infinito, allinizio del quale ricava le informazioni
necessarie, ed al termine del quale ritorna ad attendere tali informazioni. Questa strutturazione un caso
particolare di quella tipica di un interprete; nel caso pi generale di unit multi-operazione, linterprete, dopo
essersi procurato le informazioni sulloperazione esterna da eseguire, provvede ad una fase di decodifica
delloperazione stessa, dopo di che passa alla fase di esecuzione vera e propria.
Su questa base, il microprogramma eseguibile pu essere espresso nel seguente modo :

0. A + B A, goto 1
1. if A0 = 1
then A A , goto 0
else nop, goto 0 .
{con A0 si indica il bit pi significativo del registro A ; dora in poi ci atterremo sempre a questa
convenzione, che permette, quando ritenuto opportuno, di prescindere dalla conoscenza della
lunghezza di parola).
Il microprogramma evolve attraverso una sequenza di passi, ognuno corrispondente ad una microistruzione.
Ogni microistruzione viene eseguita in un tempo costante uguale al valore del ciclo di clock dellunit:
questa infatti la condizione affinch le reti sequenziali PC e PO si stabilizzino, assicurando la corretta
esecuzione della microistruzione stessa prima dellinizio della successiva.
Ogni microistruzione caratterizzata da una etichetta, o indirizzo (come 0 per la prima microistruzione).
Trattandosi di un formalismo che deve evidenziare un funzionamento che evolve tra passi di una sequenza, il
microlinguaggio deve contenere, per ogni microistruzione, lesplicita indicazione dellindirizzo di
microistruzione successiva (da cui la presenza di strutture goto).
Una scrittura come
A+BA
esprime una operazione elementare di trasferimento tra registri. Il significato quello di una espressione
di assegnamento, dove le variabili, trovandoci al livello firmware, corrispondono a registri: il risultato
delloperazione di addizione tra il contenuto corrente (cio, nel ciclo di clock durante il quale ha luogo
lesecuzione della microistruzione di indirizzo 0) del registro A ed il contenuto corrente del registro B viene
assegnato al registro A. Ci significa che prima della fine del ciclo di clock, in cui loperazione elementare
eseguita, il valore del risultato sar presente in forma stabile allingresso del registro A; la scrittura di tale
valore nel registro A avverr allinizio del successivo ciclo di clock, cio in corrispondenza del fronte di

36

discesa del successivo impulso di clock, garantendo cos che, durante tutta la durata del ciclo di clock , in
cui loperazione elementare eseguita, il contenuto del registro A rimanga inalterato.
Il significato delloperatore , (come in A + B A, goto 1) sta ad indicare esecuzione parallela o
contemporanea allinterno dello stesso ciclo di clock: lesecuzione delloperazione elementare (A + B A)
e la determinazione dellindirizzo successivo (goto 1) sono eventi indipendenti che possono avere luogo in
un qualsiasi ordine e quindi contemporaneamente purch allinterno dello stesso ciclo di clock.
La scrittura nop indica loperazione elementare nulla, cio loperazione che non modifica alcun registro
della PO (lo stato interno della PO).
Luscita di A0 rappresenta una (lunica, nellesempio) variabile di condizionamento, utilizzata dalla PC per
conoscere, nella microistruzione 1, il risultato delloperazione elementare eseguita nella microistruzione 0 (A
+ B A).
6.4.3

Struttura della PO

La PO deve essere capace di eseguire le seguenti operazioni elementari:

A+BA

AA

nop

La struttura della PO pu allora essere la seguente:

alla PC

A0

ALU : +, neg

dalla PC

dove si realizzato sia loperazione elementare di addizione che quella di negazione in complemento a 2
mediante una stessa ALU; il segnale di controllo , inviato dalla PC, indica, ad ogni ciclo di clock, quale
delle due operazioni deve eseguire la ALU.
Oltre al tipo di segnale di controllo, come necessario per comandare, da parte della PC, loperazione che
deve eseguire una rete di calcolo, o per comandare linstradamento attraverso commutatori (non necessari
nellesempio, ma di regola presenti), la PO di una unit riceve dalla PC anche un altro tipo di segnale di
controllo: quello per abilitare/disabilitare la scrittura in ogni registro. Nel nostro caso si tratta del segnale .
Al riguardo, si osservi che la scrittura nel registro A non deve avvenire in ogni ciclo di clock: deve avvenire
solo in quelli in cui si esegue la microistruzione 0, o in quelli in cui si esegue la 1 con condizione (A 0 = 1)
vera, mentre il contenuto A deve rimanere inalterato nei cicli di clock in cui si esegue la microistruzione 1
con condizione (A0 = 1) falsa.
Si ricorda che il segnale viene messo in AND con limpulso di clock.
Nella figura seguente riassunto lo schema dei collegamenti tra PC e PO.

37

segnale di clock

PC
A0

PO

La PO una rete sequenziale avente come ingressi tutti i bit di B ed i segnali e ; il suo stato interno
memorizzato nel registro A; le sue uscite sono tutti i bit del registro A stesso. Si noti come, anche in un caso
semplice come quello dellesempio, una PO abbia un numero di stati interni molto elevato, dato da 2m con m
numero di bit complessivo di tutti i registri della PO stessa (nellesempio, m = 32). La sintesi di una rete
sequenziale con un numero cos elevato di stati interni sarebbe, in generale, un problema troppo arduo: esso
si rivela invece di bassa complessit (ordine: il prodotto del numero delle microistruzioni del
microprogramma per il numero di risorse hardware della PO) grazie al procedimento formale adottato
consistente nel derivare la struttura della PO direttamente dal microprogramma e nelladottare componenti
hardware standard (registri, ALU, commutatori, ecc).
Si osserva inoltre che la PO una rete sequenziale rispondente al modello matematico di Moore, in quanto
ad ogni ciclo di clock le sue uscite, sia verso lesterno (A) che verso la PC (A0), sono funzione
esclusivamente dello stato interno (contenuto del registro A), e non del valore corrente delle variabili
dingresso. Come nellesempio, la funzione delle uscite della PO, PO, di regola molto semplice: in questo
caso di tratta della funzione identit. La funzione di transizione dello stato interno della PO, PO, data dalla
stessa implementazione delle operazioni elementari :
A+BA
AA
nop
Tale implementazione consiste infatti nel provocare, in ogni ciclo di clock, il passaggio dallo stato presente
(contenuto corrente di A) allo stato successivo (valore che lingresso di A assumer alla fine del ciclo di
clock, e che quindi A assumer allinizio del successivo ciclo di clock) in funzione del valore dello stato
presente stesso e del valore dello stato dingresso (valori di B, , ).

6.4.4

Struttura della PC

Dal microprogramma di U si ricava che la PC deve avere 2 stati interni, corrispondenti biunivocamente alle
microistruzioni del microprogramma stesso. Infatti, ogni microistruzione indica come deve comportarsi la
PC dal punto di vista dellinterpretazione delle variabili di condizionamento e delle azioni da intraprendere in
conseguenza. La struttura complessiva della PC quindi del tipo di quella mostrata in figura:

A0

PC

PC
1
RC

segnale di clock

38

Si tratta ora di definire la funzione delle uscite della PC, PC, e la funzione di transizione dello stato interno
della PC, PC, la realizzazione logica delle quali rappresenta la parte combinatoria della rete sequenziale PC.
Dal microprogramma e dallo schema della PO vediamo che:
nello stato interno 0, per qualunque stato dingresso, la PC deve generare i segnali e necessari ad
eseguire A + B A, cio = 0 e = 1, e transire nello stato successivo 1 ;
nello stato interno 1, se lo stato dingresso A0 = 1 allora la PC deve generare i segnali e necessari ad
eseguire A A, cio = 1 e = 1, e transire nello stato successivo 0 ; nello stesso stato interno 1, se
lo stato dingresso A0 = 0, allora PC deve impedire la scrittura del registro A, quindi = 0, mentre
indifferente il valore assunto da in quanto il risultato della ALU, durante il relativo ciclo di clock, non
verr in alcun modo utilizzato, cio non verr scritto in alcun registro.
A questa descrizione a parole corrisponde la seguente tabella di verit delle funzioni PC e PC della PC:
y

A0

Si ricavano quindi le espressioni logiche per PC e PC :

PC : = y ; = y + y A0
PC : Y = y
Per unit semplici, cio con basso numero di stati interni, dingresso e di uscita della PC, la progettazione
della PC pu quindi essere ottenuta mediante il procedimento generale di sintesi delle reti sequenziali ed
adottando reti combinatorie, PC e PC, a due livelli di logica. Per unit molto complesse le reti combinatorie
potranno dover essere realizzate a pi livelli di logica e/o verranno realizzate mediante memorie.
Si osserva che la PC una rete sequenziale rispondente al modello matematico di Mealy, come evidente
anche dal fatto che esiste almeno una microistruzione nella quale lo stato di uscita (la configurazione di ,
da inviare alla PO) dipende dal valore dello stato dingresso (variabile di condizionamento A0).
Diremo che lunit di elaborazione risponde, nel suo complesso, al modello Mealy-Moore. Questo sar il
modello che adotteremo di regola; sono possibili anche altri due modelli (Moore-Moore, Moore-Mealy).

Osservazione importante
In generale esistono diversi gradi di libert nello scrivere il microprogramma. Nel nostro caso avremmo
anche potuto scrivere

0. A + B A, segno (A + B) S, goto 1
1. if S = 1 then A A , goto 0 else nop, goto 0
dove S denota un registro di un bit destinato a contenere il valore del Flag alluscita della ALU che fornisce
il segno dellultima operazione eseguita. La contemporaneit delle due operazioni elementari separate
dalloperatore virgola ovvia, essendo realizzata da due uscite distinte di una stessa rete combinatoria.
Scegliendo questo microprogramma, nello schema della PO va quindi previsto questo registro. importante
notare che il valore del Flag deve essere memorizzato in un registro di un bit, e che la variabile di
condizionamento S deve quindi essere luscita di tale registro. Se infatti avessimo prelevato la variabile di
condizionamento segno direttamente alluscita della rete combinatoria ALU, il valore di tale variabile ad
ogni ciclo di clock
segno (A + B)

39

sarebbe stato funzione non solo dello stato interno A, ma anche dello stato dingresso (valore di ; di
conseguenza, il modello matematico della PO sarebbe stato quello di Mealy. agevole dimostrare (come
vedremo) che il modello complessivo di unit Mealy-Mealy non ammissibile in quanto, in generale, non ha
un comportamento determinato allinterno del ciclo di clock.

6.4.5

Ciclo di clock

In seguito dimostreremo che la lunghezza del ciclo di clock nel modello Mealy-Moore data da:
= TPO + max (TPC + TPO, TPC) +
dove TPO il massimo ritardo della funzione delle uscite della PO, TPC quella della funzione delle uscite
della PC, TPO quello della funzione di transizione dello stato interno della PO, T PC quello della funzione di
transizione dello stato interno della PC, e la durata dellimpulso di clock. Per quanto riguarda i ritardi delle
funzioni della PO occorre considerare quelli massimi valutati su tutto linsieme delle microistruzioni.
Assumiamo i seguenti valori dei massimi ritardi temporali delle risorse hardware:
singola porta logica AND, OR : tp = 0,1 nsec,
ALU : 5 tp,
durata dellimpulso di clock : = tp,
collegamenti e porte NOT : ~ 0, in quanto considerati inclusi nei ritardi delle porte logiche AND, OR.
Si ricava dunque che :
TPO = 0.
TPO = 5 tp (ritardo della ALU nella microistruzione 0 e nella 1 con condizione vera),
TPC = 2 tp (rete a due livelli di logica per la funzione di ),
TPC = 0 (nota : anche considerando un ritardo non nullo per la porta NOT, si avrebbe comunque
che TPC < TPC + TPO).
e di conseguenza
= 8 tp = 0,8 nsec
Il clock ha quindi una frequenza
f = 1 / = 109 * 10 / 8 = 1,25 GHz
un valore del tutto tranquillo con lattuale tecnologia dei circuiti integrati.

6.4.6

Tempo medio di elaborazione

Il tempo medio di elaborazione di una unit viene calcolato come


T=k
dove k il numero medio di cicli di clock necessari ad eseguire la generica operazione del
microprogramma. Nel nostro esempio si ha semplicemente : T = 2 = 1,6 nsec
La banda di elaborazione definita come il numero medio di operazioni esterne che lunit pu eseguire
nellunit di tempo. Espressa come numero di operazioni esterne al secondo (ops), la banda si calcola come :
B=1/T
Nel nostro esempio, B = 0,625 Gops.

40

7 Formalizzazione del procedimento di progettazione


A partire dalla specifica delle operazioni esterne, il procedimento di progettazione ha lo scopo di realizzare la
struttura dellunit di elaborazione secondo il modello PC - PO, e di valutarne le prestazioni (tempo medio di
elaborazione, banda di elaborazione).
7.1

Microlinguaggio

La formalizzazione del procedimento basata sulla scrittura del microprogramma eseguibile, ogni passo del
quale (microistruzione) eseguito esattamente in un ciclo di clock. Nel modello Mealy-Moore il
microlinguaggio detto PS (Phrase Structured); la generica microistruzione ha la seguente struttura :

i. case xi1 xi2 ... xin of


00 ... 0 : op0, goto j0
00 ... 1 : op1, goto j1
...
11 ... 1 : op2n-1, goto j2n-1
dove
a) i letichetta o indirizzo della microistruzione ;
b) xi1 xi2 ... xin sono variabili di condizionamento, in numero arbitrario da zero fino al massimo della
cardinalit dellinsieme {x} ;
c) i valori delle guardie del case, date da tutte le possibili combinazioni delle variabili di condizionamento
testate xi1 xi2 ... xin, sono dette condizioni logiche della microistruzione : Cih, con h = 0 ... 2n-1 ;
d) opih una microoperazione, che pu essere :
d1. la microoperazione nulla, nop,
d2. una operazione non nulla di trasferimento tra registri,
d3. un insieme di operazioni non nulle di trasferimento tra registri eseguite in parallelo nello stesso
ciclo di clock.
e) jh una etichetta di microistruzione successiva ;
f) la coppia opih, goto jh detta frase ; la tripla Cih: opih, goto jh detta frase condizionale.
Invece della precedente, nel seguito useremo la notazione pi compatta :
i. (Ci0) p0, j0 ; (Ci1) p1, j1 ; ... ; (Ci2n-1) p2n-1, j2n-1
con lo stesso significato e nomenclatura dei simboli.
Ad esempio :
3. (A0, Z = 0 0) A + B A, 4 ; (A0, Z = 01) M N M, 5 ; (A0 Z = 1 ) shr1 (N) N, 0
o, visto che le variabili di condizionamento testate nelle condizioni logiche di una stessa microistruzione
sono sempre le stesse :
3. (A0, Z = 0 0) A + B A, 4 ; (= 01) M N M, 5 ; (= 1 ) shr1 (N) N, 0
Si noti che, in alcune condizioni logiche, il valore di una o pi variabili di condizionamento pu essere non
specificato (nellesempio precedente A0 Z = 1 -) : ci significa che esistono pi condizioni logiche della
stessa microistruzione cui corrisponde la stessa frase.

41

7.2

Ottimizzazione delle micro operazioni

Esistono diverse modalit per scrivere microprogrammi efficienti, riguardanti tanto le micro operazioni
quanto le condizioni logiche. Iniziamo a vedere come scrivere le microoperazioni.
7.2.1

Eliminazione delle nop

Ogni volta che si esegue una nop, agli effetti del tempo di elaborazione viene perduto un ciclo di clock.
Ci rendiamo per subito conto che, scrivendo i microprogrammi con il microlinguaggio PS, possibile
eliminare tutte le nop, tranne che nellimplementazione dei meccanismi di sincronizzazione che vedremo in
seguito. La tecnica di ottimizzazione, a partire dal microprogramma eseguibile in cui compaiono delle nop,
il seguente : ogni frase del tipo
F : nop, j
con

j. opj, h

viene trasformata in

F : opj, h

Nel caso che j sia una microistruzione condizionale (contenente pi di una frase), le stesse condizioni sono
replicate nella microistruzione in cui compare F congiungendole a quelle eventualmente gi presenti.

Esempio
Il microprogramma dellesempio 1 diviene :

0. A + B A, 1
1. (A0 = 1) A A , 0 ; (A0 = 0) A + B A, 1
Nel caso che il risultato della somma sia positivo, possibile iniziare la prossima elaborazione a distanza di
tempo di 1 (purch il nuovo valore di B sia gi presente: condizione di saturazione dellunit). Detta p la
probabilit che nelloperazione precedente si sia verificato levento (A0 = 1), si ha ora :
T = (1 p) + p 2 = (1 + p)
con una guadagno relativo in prestazioni del (1 p) / 2.
In generale, facciamo notare che, per applicare questa tecnica di ottimizzazione, non necessario partire
dalla versione del microprogramma con nop : in tutte le occasioni in cui, nella scrittura del
microprogramma, verrebbe introdotta una fase con nop, questa deve essere direttamente sostituita con la
frase da eseguire successivamente.

7.2.2

Parallelismo nelle microoperazioni

Nel caso pi generale una microoperazione consta di pi operazioni elementari eseguite in parallelo nello
stesso ciclo di clock.
Un esempio di microoperazione parallela il seguente :
A + B A, C + 1 C
Le operazioni elementari A + B A e C +1 C rappresentano computazioni completamente indipendenti,
cio lesecuzione di nessuna delle due dipende dal risultato dallesecuzione dallaltra. Esse possono dunque
essere eseguite in qualsiasi ordine ed, in particolare, contemporaneamente durante lo stesso ciclo di clock.
Questo presuppone che la PO contenga risorse sufficienti allesecuzione contemporanea delle due operazioni
elementari, cio che, con riferimento allesempio precedente, abbia una struttura del tipo della figura
seguente, in cui le operazioni di somma e di incremento sono realizzate da due distinte reti di calcolo (ALU).

42

Se invece avessimo forzato le due operazioni ad essere eseguite da una stessa ALU, il parallelismo sarebbe
stato impossibile.

...
K11

B
{}11
{}12

...

...

K12

K21

{}21

+1

Nella trasformazione da una computazione espressa in sequenziale alla stessa computazione espressa in
parallelo, occorre ovviamente rispettare precise condizioni affinch le due computazioni siano equivalenti :
cio, per uno stesso stato interno iniziale della PO, le due computazioni portino ad uno stesso stato interno
finale della PO.
Per ricavare le condizioni per trasformare una computazione sequenziale nella computazione parallela
equivalente, consideriamo prima i seguenti esempi, nel quali si indica con ; loperatore di
sequenziamento, e con , loperatore di esecuzione in parallelo. In tutti gli esempi supporremo che la PO
contenga sufficienti risorse alla eventuale esecuzione in parallelo di operazioni elementari.
(1)

A+BA;CD

equivalente a

(2)

A+BA;CA

non equivalente a

A+BA,CD
A+BA,CA

il risultato sarebbe diverso, e comunque impredicibile ; ovviamente, nessuna struttura di PO pu


permettere la scrittura nello stesso registro di due risultati diversi nello stesso ciclo di clock ;
(3)

A+BA;BD

equivalente a

A+BA,BD

infatti luscita di uno stesso registro pu essere utilizzata contemporaneamente da pi operazioni (si
ricordi il significato di segnali a livelli) ;
(4)

A+BA;B+CD

equivalente a

A+BA,B+CD

come sopra, e purch la PO disponga di due reti di calcolo indipendenti ;


(5)

A+BA;CB

equivalente a

A+BA,CB

infatti, il contenuto di B, a cui si riferisce la A + B A, rimane stabile durante tutto il ciclo di clock in
quanto, durante lesecuzione di C B, varia solo lingresso di B; il nuovo valore verr scritto in B
allinizio del successivo ciclo di clock ;
(6) A + B A ; A B

non equivalente a

A+BA,AB

infatti, nella computazione sequenziale il valore di A in A B il risultato di A + B A, mentre nella


computazione parallela il valore di A, durante il ciclo di clock, lo stesso per le due operazioni
elementari.
Formalmente, valgono le seguenti condizioni di Bernstein per la trasformazione di equivalenza da una
computazione sequenziale ad una parallela :

43

data la computazione sequenziale


f1 : D1 R1 ; f2 : D2 R2
dove fi sono funzioni di dominio Di e codominio (rango) Ri, la computazione parallela
f1 : D1 R1, f2 : D2 R2
equivalente se :
R1 D2 = e R1 R2 =
Inoltre, in un modello asincrono di computazione, nel quale non si fanno ipotesi sulla durata temporale delle
operazioni e sui loro istanti di inizio, deve valere anche la seguente terza condizione :
R2 D1 =
Questo NON nel caso della microprogrammazione che utilizza un modello sincrono : di ogni operazione
noto il tempo di esecuzione (lunghezza del ciclo di clock) e listante di inizio. Si veda allo scopo il caso (5).
Occorre ribadire che le condizioni di Bernstein vanno utilizzate per trasformare una descrizione sequenziale
del microprogramma in una descrizione parallela. In realt, nella scrittura dei microprogrammi dovremo
abituarci a saltare la descrizione sequenziale e relativa trasformazione, e scrivere direttamente le
microoperazioni in parallelo.
Ad esempio (swap di due variabili) :
A TEMP ; B A ; TEMP B

(7)

equivalente a A B , B A

questo non un caso di trasformazione formale, bens di una ulteriore ottimizzazione che permette di
risparmiare cicli di clock e risorse hardware. In effetti questo caso, cos come il caso (5), si presenta
molto spesso quando si scrivono direttamente le microistruzioni in parallelo, senza passare attraverso
una fase di trasformazione a partire da una computazione sequenziale.

7.2.3

Parallelismo nelle condizioni logiche

Nel caso pi generale, il microlinguaggio PS permette di esprimere, in ogni microistruzione, strutture


condizionali di tipo case che, rispetto alle pi semplici strutture if then else, permettono un sensibile
risparmio di cicli di clock.
Una sequenza di N microistruzioni, in ognuna delle quali venga testata una sola variabile di
condizionamento, pu essere trasformata in una singola microistruzione costituita da un case ad N vie.
Ad esempio, una computazione come :
while true
A := A + B ;
if OV = 1 then A := A - B else if A < 0 then A := A

dove OV indica la presenza di traboccamento nelloperazione di addizione, viene scritta come :

0. A + B A, 1
1. (OV A0 = 0 1) A A , 0 ; (= 0 0) A + B A, 1 ; (= 1 ) A B A, 0

7.2.4

Parallelismo nelle microoperazioni e nelle condizioni logiche

Le tecniche ora viste (parallelismo nelle microoperazioni e parallelismo nelle condizioni logiche) sono di
regola applicate congiuntamente allo scopo di ottimizzare i microprogrammi dal punto di vista del numero
dei cicli di clock impiegati.

44

Spesso, lapplicazione di queste ottimizzazioni passa anche attraverso un opportuno spostamento di codice,
anche a costo di replicare operazioni elementari in pi microoperazioni: a livello firmware, infatti, questa
replicazione non comporta alcun aumento di costo e d solo vantaggi.
Un esempio il seguente. Si consideri la computazione
A+BA;
if M0 = 0 then C + 1 C else C 1 C ;
Poich la condizione logica indipendente dal risultato di A + B A, la computazione pu essere
implementata mediante una sola microistruzione, posticipando A + B A nei due rami della struttura if
then else,:
i. (M0 = 0) A + B A , C + 1 C, i + 1 ; (M0 = 1) A + B A, C 1 C, i + 1
7.3

Struttura della PO

La struttura della PO, vista come rete sequenziale di Moore, viene ricavata formalmente dal
microprogramma mediante il seguente procedimento.
a1. Si individuano tante classi di operazioni elementari per quanti sono i registri destinazione (che
compaiono a destra delloperatore Ci permette di individuare i possibili ingressi di ogni registro.
Ad esempio se :
classe del registro A : A + B A ; A B A ; M A, 31 A
gli ingressi possibili di A sono luscita di una ALU (indicata con ALU), luscita del registro M (indicata
con M) e la costante 31 (da considerare cablata ad hardware o presente in un registro in sola lettura) ;
a2. si ricava una sottostruttura indipendente per ogni registro, con il proprio segnale ; nel caso che gli
ingressi possibili IN siano in numero r > 1, sullingresso del registro viene inserito un commutatore,
comandato da lg2 r segnali di controllo ed i cui ingressi principali sono quelli di IN. Nellesempio
precedente :
ALU

31

A1
A2

KA
A

b1. Si individuano tante classi di operazioni elementari per quante sono le reti logiche dagli operatori che
compaiono nelle operazioni elementari. Ci permette di individuare le possibili sorgenti di ingresso di
ogni rete logica. Ad esempio se :
classe di una ALU : A + B A ; A B A ; M N M ; sr1 (N) N
le possibili sorgenti di ingresso sono A, M, N a sinistra, e B, N a destra ;
b2. si ricava una sottostruttura indipendente per ogni rete logica ; se si tratta di una rete multifunzione,
come una ALU, con r funzioni, occorrono lg2 r segnali di controllo per comandare la scelta della
funzione ; per ogni ingresso principale, se prevista pi di una sorgente, si inserisce un commutatore
pilotato da opportuni segnali . Nellesempio precedente :

45

11
12

K1

K2

a1
ALU : +, , shr1

a2

Nel caso che non esistano microoperazioni parallele, sufficiente realizzare tutte le funzioni di calcolo
del microprogramma mediante una sola ALU multifunzione.
Nel caso pi generale di microoperazioni parallele, occorrono tante ALU per quanto il numero di
operazioni elementari che fanno uso di ALU nella microoperazione pi parallela (cio in quella
contenente il massimo numero di operazioni elementari facenti uso di ALU).
Nel caso che la PO contenga componenti logici memoria, le tecniche a), b) si applicano anche agli
ingressi di dato e di indirizzo di tali componenti.
c1. Si implementano le variabili di condizionamento, come funzioni di uscite di registri o Flag di ALU
memorizzati in registri di 1 bit.
Per lanalisi della funzione delle uscite della PO (PO) e della funzione di transizione dello stato interno
della PO (PO), si utilizzano reti combinatorie realizzate con componenti standard.

7.4

Struttura della PC

La struttura della PC, vista come rete sequenziale di Mealy, viene ricavata formalmente dal microprogramma
mediante il seguente procedimento.
1. Gli stati interni corrispondono biunivocamente alle etichette delle microistruzioni del microprogramma.
Se m il numero degli stati interni, il registro di stato del controllo (RC) di s bit con s = lg2 m.
2. Gli stati di ingresso corrispondono biunivocamente alle possibili combinazioni di variabili di
condizionamento {x} per formare le condizioni logiche del microprogramma.
3. Gli stati di uscita corrispondono biunivocamente alle possibili combinazioni di segnali di controllo =
{} {} necessari ad eseguire tutte le microoperazioni del microprogramma.
4. La tabella di verit della funzione delle uscite PC e della funzione di transizione dello stato interno PC
viene ricavata in base alle tre corrispondenze suddette ed alla struttura del microprogramma. Da questa
tabella possibile sintetizzare PC con parte combinatoria a due o pi livelli di logica.
Si osservi che tutti i segnali devono sempre essere specificati per ogni possibile combinazione (stato
dingresso, stato interno), mentre i segnali potranno eventualmente essere non specificati per qualche
combinazione (stato dingresso, stato interno).

7.5

Modello Mealy Moore

Consideriamo la funzione delle uscite PC dellunit. Partendo dallo stato presente (contenuto di RC) e con
stato dingresso definito univocamente dal valore delle variabili di condizionamento, PC deve produrre i
valori delle variabili di controllo che permettono lesecuzione della microperazione nella PO: si tratta dei
valori di eventuali (in numero di zero o pi) variabili , per controllare ALU e commutatori, ed il valore di
una o pi variabili che abilitano la scrittura nei registri. Questi valori , sono uscite della rete
combinatoria PC, che implementa la funzione delle uscite dellautoma PC. Tale rete ha come ingressi le

46

variabili dello stato interno presente di PC (uscite di RC) e le variabili di condizionamento, e come uscite le
variabili di controllo.
Il fatto che PC sia un automa di Mealy , quindi, una conseguenza della struttura di frase delle
microistruzioni.
Complessivamente, lo schema della rete sequenziale PC del tipo mostrato in figura seguente:
variabili di condizionamento

variabili di controllo

PC

PC

variabili dello stato interno


presente

R
C

variabili dello stato interno


successivo

clock
Si consideri la funzione delle uscite di PO, che implementata da una rete combinatoria PO.
Alcune uscite di PO sono ovvie: si tratta delle uscite esterne dellunit che sono sempre uscite di appositi
registri. Per tali uscite, la funzione PO quindi la funzione identit rispetto ai contenuti dei registri di uscita.
importante notare che, per quanto riguarda le uscite esterne, la rete combinatoria PO non ha in ingresso
nessun altra variabile tranne le uscite di detti registri: in altre parole, il risultato della funzione PO dipende,
ad ogni ciclo di clock, solo dallo stato interno di PO e non dallo stato dingresso costituito dalla
configurazione delle variabili di controllo.
Agli effetti della funzione delle uscite di PO, assai pi significativa la parte relativa alle variabili di
condizionamento. Il loro valore dipende, ad ogni ciclo di clock, solo dallo stato interno di PO e non dallo
stato dingresso costituito dalla configurazione delle variabili di controllo.
Mentre, come detto, la funzione identit la regola per le uscite esterne, non detto che ci avvenga sempre
per le variabili di condizionamento. Ad esempio, il microprogramma pu prevedere luso di variabili di
condizionamento pi complesse come:

segno (A + B)

zero (M N)

A[J]

or (C)

and (J)

or (E F)

In tali casi, PO data dalle funzioni, rispettivamente: segno o zero del risultato di una operazione di una
ALU, commutazione del bit J-esimo del registro A con J uscita di registro, OR o AND bit-a-bit dei bit di un
registro, OR bit-a-bit applicato al risultato di una operazione aritmetico-logica o di commutazione

47

(nellesempio, OR esclusivo). Le reti combinatorie corrispondenti devono operare, ad ogni ciclo di clock,
solo su uscite di registri.
La condizione:
lo stato di uscita di PO dipende, ad ogni ciclo di clock, solo dallo stato interno presente e non dallo
stato dingresso
deve valere in generale, qualunque sia la funzione che produce i valori delle variabili di condizionamento.
Le considerazioni precedenti costituiscono la dimostrazione del seguente teorema:
in una unit di elaborazione descritta da un microprogramma con microistruzioni a struttura di frase
1) PC un automa di Mealy,
2) necessario che PO sia realizzata come un automa di Moore.
Come detto, il punto 1) una conseguenza della struttura di frase delle microistruzioni. Il punto 2) una
condizione necessaria per una realizzazione corretta di PO.
Questo teorema ha quindi implicazioni sulla progettazione di PO. Nel seguito vedremo delle regole in base
alle quali costruire sempre una PO corretta, senza bisogno di addentrarsi nella trattazione dei modelli
matematici di automi.
Concettualmente, lo schema della rete sequenziale PO sempre del tipo:

variabili di controllo

PO

variabili di condizionamento
e uscite esterne

e ingressi esterni

PO

R
variabili dello stato interno
presente

variabili dello stato interno


successivo
clock

dove R denota linsieme di tutti i registri di PO (A, B, ), inclusi i registri dingresso. Limpulso di clock
messo in AND con i segnali () di abilitazione alla scrittura. Le reti combinatorie PO e PO sono costruite a
partire da componenti standard come ALU, commutatori, memorie, eventuali selezionatori, porte logiche.

7.6

Ciclo di clock

A differenza di una rete sequenziale isolata, per una unit di elaborazione PC-PO occorre ricavare la
condizione di stabilizzazione di entrambe le reti sequenziali PC e PO. Il ciclo di clock non pu dunque
concludersi prima che siano stabili le funzioni di transizione della PC e della PO, cio prima che siano
stabili, rispettivamente, gli ingressi del registro di stato del controllo RC e di tutti i registri della PO.
Nella figura seguente mostrato come ricavare la lunghezza del ciclo di clock attraverso una sequenza di
eventi temporali. Le frecce indicano eventi stabilizzazione di funzioni, gli intervalli temporali i ritardi
massimi di stabilizzazione.

48

TPC
TPC
PC

{x}

{}

PO

TPO

TPO

Poich la PO una rete di Moore, la sua uscita disponibile in forma stabile allinizio del ciclo di clock ;
dopo un tempo TPO sono quindi stabili le variabili di condizionamento. Solo a questo punto, poich la PC
una rete di Mealy, pu iniziare, per lultima volta allinterno di questi ciclo di clock, la stabilizzazione della
funzione PC e della funzione PC in parallelo (nella figura si assunto che la seconda abbia un ritardo
maggiore della prima, ma ci non influente nella valutazione complessiva). Una volta che PC si
stabilizzata definitivamente, dopo un intervallo TPC, pu quindi iniziare, per lultima volta allinterno di
questi ciclo di clock, la stabilizzazione della funzione PO ; il ciclo di clock si pu concludere quando si sono
stabilizzate definitivamente tanto la PC quanto la PO.
Di conseguenza, la lunghezza del ciclo di clock data da :

= TPO + max (TPC + TPO, TPC) +


con ampiezza dellimpulso di clock. Nella formula di , spesso il termine TPC + TPO a predominare,
fornendo una buona approssimazione del valore di nei casi in cui TPO sia nullo o trascurabile.
Dal ragionamento fatto per ricavare il ciclo di clock, ci si pu rendere conto, pur informalmente, della
dimostrazione del teorema poich PC di Mealy, allora PO deve essere di Moore: infatti, se anche PO
fosse di Mealy, nessuna delle quattro funzioni potrebbe iniziare a stabilizzarsi senza che anche le altre si
siano gi stabilizzate; ci provocherebbe un circolo vizioso che porterebbe (tranne casi particolarissimi) ad
una ri-inizializzazione indefinita della stabilizzazione delle quattro funzioni, con limpossibilit di
determinare un valore finito per .

7.7

Tempo medio di elaborazione

Il tempo medio di elaborazione di una unit viene calcolato come


T=k
dove k il numero medio di cicli di clock necessari ad eseguire la generica operazione del microprogramma.
A partire da quando sono presenti i (nuovi) dati in ingresso, si valuta la durata media del corpo del costrutto
pi esterno while true .
In generale, in un microprogramma sono presenti pi sottosequenze di microistruzioni eseguite con una certa
probabilit pi, dove:
(i = 0...n-1) pi = 1
Di ogni sottosequenza si calcola il numero di cicli di clock ki necessario ed eseguirla e quindi si ricava il
valore di T come media pesata
T = * (i = 0...n-1) pi * ki

49

Quando non siano note le pi, si assume che tutte le sottosequenze siano equiprobabili, calcolando perci T
come media aritmetica dei ki.
La banda di elaborazione definita come il numero medio di operazioni esterne che lunit pu eseguire
nellunit di tempo, nella situazione in cui, allinizio di ogni iterazione, sia gi presente un nuovo insieme di
dati dingresso (unit saturata, cio sollecitata al massimo). Espressa come numero di operazioni esterne
al secondo (ops), la banda si calcola come :
B=1/T

7.8

Esempio 2

Consideriamo una unit di elaborazione U cos definita:

contiene una memoria A, di capacit N = 4K parole (32 bit) e tempo di accesso 3tp;

ha un ingresso esterno IN di 32 bit ed una uscita esterna OUT di 13 bit;

per ogni IN, invia su OUT il numero di volte che il valore di IN compare in A.

Progettare lunit e valutarne il tempo medio di elaborazione in funzione del ritardo tp di una porta logica con
al pi 8 ingressi, supponendo che una ALU abbia ritardo 5tp e la durata dellimpulso di clock sia uguale a tp.
Il microprogramma ad alto livello pu essere:
while true
B = IN; C = 0;
for (J = 0; J < N; J ++)
if ( A[ J ] = B) then C = C + 1;
OUT = C

Il registro B usato per mantenere stabile il valore ricevuto su IN per tutta la durata del microprogramma. Il
registro C (13 bit) contiene il valore temporaneo del risultato, che verr scritto nel registro di uscita OUT
solo alla fine del microprogramma: in tal modo, i valori intermedi di C non sono inviati allunit
destinazione.
Scriviamo il microprogramma eseguibile, controllando il loop for mediante un registro J (13 bit) inizializzato
a 0 e incrementato via via; la condizione di terminazione del loop data da (J = N), la cui implementazione
in una condizione logica ammissibile a livello firmware (J0 = 1). Inoltre, implementiamo la condizione if
A[ J ] = B mediante sottrazione dei valori da confrontare e test per zero del risultato, utilizzando il Flag Zero
di una ALU (ricordiamo che, se il risultato uguale a zero, allora Zero = 1).
Una prima versione del microprogramma la seguente:
0.

IN B, 0 C, 0 J, 1

1.

(J0 = 0) zero (A[Jm] B) Z, 2;


( = 1) C OUT, 0

2.

(Z = 0) J + 1 J, 1;
(Z = 1) J + 1 J, C + 1 C, 1

dove Jm dato dai 12 bit meno significativi di J.


In questa versione, sono state applicate le tecniche di ottimizzazione dei microprogrammi, anche se non in
maniera intensiva come invece faremo in versioni successive.

50

Il tempo medio di elaborazione, in funzione del ciclo di clock, ottenibile dal seguente grafo relativo
allevoluzione delle microistruzioni:
1

Lintero associato ad un arco indica il numero delle volte che larco stesso viene attraversato. Il numero k di
cicli di clock si ottiene valutando la somma degli interi associati agli archi percorsi per eseguire
completamente il microprogramma:
T=k=(2+2N)2N
Per realizzare la PO, riconosciamo le classi di operazioni elementari per registro destinazione:

B: IN B

C: 0 C, C + 1 C

J: 0 J, J + 1 J

Z: zero (A[Jm] B) Z

OUT: C OUT

Le operazioni che riguardano le risorse combinatorie sono:

memoria A (nessun ingresso per scrittura):


indirizzo Jm;

reti ALU:
A[J] B
J + 1 J, C + 1 C.

Nel caso delle ALU, stata messo in evidenza il massimo parallelismo richiesto. Essendo necessarie due
ALU (numero minimo uguale al massimo parallelismo nelle microoperazioni)
Lo schema della PO quindi il seguente:
outA

Alu1

KALU1

ALU1 : , +1
Alu2
Z
x1 = Z

Alu1

ALU2 : +1

Alu2

51

IN

A [4K]

Alu1

Alu2

KC

KJ

J
x0 = J0

Jm
C

OUT

Jm

La funzione delle uscite PO definita come:


out (13 bit) = OUT
x0 = J 0
x1 = Z
Il suo ritardo (relativo alle variabili di condizionamento) dato da:
TPO = 0
La funzione di transizione dello stato interno PO definita come:
1)

inB = when B = 1 do IN

2)

inZ = when Z = 1 do
case Alu1 Alu2 of
0 0 : zero (A[Jm] B)
0 1 : zero (A[Jm] +1)
1 0 : zero (C B)
1 1 : zero (C + 1)

3)

outA

inC = when C = 1 do
if C = 0 then 0 else
case Alu1 Alu2 of
0 0 : A[Jm] B
0 1 : A[Jm] +1
10:CB
11:C+1

4)

inJ = when J = 1 do
if J = 0 then 0 else J + 1

5)

inOUT = when OUT = 1 do C

OUT

52

Il massimi ritardi associati valgono:


1) TPO/B = 0
2) TPO/Z = TA + TK + TALU = 3tp + 2tp + 5tp = 10 tp
3) TPO/C = TK + TALU + TK = 2tp + 5tp + 2tp = 9 tp
nota: valutati i ritardi degli unici casi possibili per la modifica di C
4) TPO/J = TALU + TK = 5tp + 2tp = 7 tp
5) TPO/OUT = 0
da cui il massimo ritardo di stabilizzazione della PO:
TPO = 10 tp
La PC ha tre stati interni (microistruzioni 0, 1, 2) codificabili mediante due variabili dello stato interno al
seguente modo:
stato

y0

y1

Le due funzioni della PC sono definite attraverso la seguente tabella:


PC

PC

y0 y1 J0 Z

Alu1 Alu2 Z B C C J J OUT Y0 Y1

0 0

0 1 0 1 0 1 0

0 1 0

1 0 0

0 0

0 1 1

0 0

0 1

1 0

0 0

0 1 1 0

1 1

0 0 1

1 1 1 0

dalla quale si ricavano le espressioni logiche delle variabili di controllo:


Alu1 = y0 Z
Alu2 = y0 Z
= 0 1 0

C = y0 Z
= 0 1 + 0

= 0 1 + 0
= 0 1 0

53

e delle variabili dello stato interno successivo:

immediato passare allo schema a due livelli di logica. I ritardi di stabilizzazione valgono:
TPC = 2 tp
TPC = 2 tp
Il ciclo di clock vale:

= TPO + max (TPC + TPO, TPC) + 2 tp + 10 tp + tp = 13 tp


Il tempo medio di elaborazione:
T 2 N tp 1,06 105 tp

La banda di elaborazione:

7.9

Esempio 3

Consideriamo una versione alternativa dellunit dellEsempio 2. Stavolta il microprogramma viene scritto
come segue:
0.

IN B, 0 C, 0 J, 1

1.

(J0 , zero (A[Jm] B) = 0 0) J + 1 J, 1;


( = 0 1) J + 1 J, C + 1 C, 1;
( = 1 ) C OUT, 0

In questa versione abbiamo adottato come variabile di condizionamento direttamente il valore di zero (A[Jm]
B) alluscita di una ALU, invece che memorizzare tale valore in un registro (Z) e testarlo nella successiva
microistruzione. Come studiato, questo lecito purch PO sia realizzata in modo tale da soddisfare la
condizione, di essere un automa di Moore, necessaria per la correttezza. Vedremo tra breve come questo pu
essere sempre ottenuto.
Notiamo alcuni altri aspetti:
1. il numero di cicli di clock impiegati decisamente minore rispetto alla versione dellEsempio 2:
kN
daltra parte, il ciclo di clock t risulter maggiore, in quanto ora T PO tuttaltro che nullo: si tratta
del ritardo di stabilizzazione della funzione zero (A[Jm] B). Il tempo medio di elaborazione:
T=k
potr risultare maggiore o minore a seconda dei nuovi valori assunti da k e . Torneremo su questo
importante aspetto nella sez. successiva;
2. si noti lapplicazione pi significativa delle tecniche di ottimizzazione studiate in precedenza.
Anzitutto, si ha parallelismo anche nelle condizioni logiche. Inoltre, dal punto di vista
dellapplicazione delle condizioni di Bernstein, vale la pena di notare che, nella stessa
microistruzione, viene letto il contenuto corrente di J (nella condizione logica) e viene prodotto il
nuovo valore di J (nella microoperazione): come visto nel caso (5) dei casi di ottimizzazione, questo
corretto grazie al modello sincrono di microprogrammazione.

54

Per realizzare la PO come automa di Moore, ora non pi possibile usare una stessa ALU per eseguire
zero(A[Jm] B) e C + 1 C: infatti, se cos fosse, la variabile di condizionamento x1 = zero(A[Jm] B)
verrebbe a dipendere, ad ogni ciclo di clock, anche dal valore di variabili di controllo (controllo dei
commutatori dingresso della ALU, controllo delloperazione comandata alla ALU). La soluzione corretta
consiste nelladottare una terza ALU dedicata esclusivamente a produrre zero(A[Jm] B), distinta dalla ALU
che (analogamente a quella per lincremento di J) provvede allincremento di C.
Ora si ha:

TPO = TA + TALU = 8 tp

TPO = TALU + TK = 7 tp
In questo caso, il ritardo maggiore quello per lesecuzione delloperazione elementare C +
1 C o di J + 1 J

TPC = TPC =2 tp
Questa valutazione da verificare (si lascia come esercizio), in quanto anche la struttura della PC
diversa rispetto allEsempio 2, in particolare perch ora si ha una sola variabile dello stato interno
invece di due (al limite, in casi simili possibile che uno o entrambi i ritardi valga tp).

Quindi:

= TPO + max (TPC + TPO, TPC) + 8 tp2 tp + 7 tp + tp = 18 tp


Complessivamente, il tempo medio di elaborazione diminuito:
T = k = N tp 0,74 105 tp
come era naturale attendersi, in quanto, a fronte della riduzione di k alla met, aumentato decisamente
meno del doppio.
Quindi, in questo esempio abbiamo mostrato che:
a) una versione del microprogramma con almeno una variabile di condizionamento complesse (PO
diversa dalla funzione identit) pu portare ad una ulteriore ottimizzazione delle prestazioni rispetto
alla versione con tutte variabili di condizionamento che siano direttamente uscite di registri;
b) variabili di condizionamento complesse sono sempre realizzabili in modo da rispettare la condizione
necessaria per la correttezza (PO di Moore).

7.10 Ottimizzazione di T = k
Quanto visto con gli Esempi 2 e 3, relativamente alla ricerca del miglior compromesso tra k e con
lobiettivo di ottimizzare il tempo medio di elaborazione T, un problema a carattere generale della massima
importanza, specie in unit descritte da microprogramma che contengano loop ripetuti molte volte.
Come tutti i problemi di ottimizzazione di questa classe, esso risulta NP-arduo in generale. Infatti, da una
parte vero che, usando variabili di condizionamento complesse, molto spesso (quasi sempre) la
diminuzione di k percentualmente maggiore dellaumento di rispetto alla soluzione con variabili di
condizionamento semplici, ma questo non pu essere dimostrato in generale, in quanto il valore di T = k
dipende, oltre che dalla capacit di scrivere il microprogramma, dalla realizzazione della PC e della PO nelle
due soluzioni. Di conseguenza, formalmente si pu solo decidere la soluzione migliore dopo averle
implementate tutte.
Inoltre, importante notare come la complessit della scelta della soluzione, in relazione alla scelta delle
variabili di condizionamento, sia influenzata anche dal numero e probabilit di occorrenza delle operazioni
esterne: se presente pi di una operazione esterna, una ottimizzazione valida per una operazione esterna
pu non esserlo per altre; ad esempio, in seguito allaumento del ciclo di clock che si riveli ottimale per una
operazione esterna, ma che vada a detrimento di altre.

55

Esiste anche la possibilit di migliorare ulteriormente le prestazioni, ottenendo un valore pi basso di k senza
aumentare (apprezzabilmente) il valore di , quindi cercando di recepire il meglio delle due soluzioni. A
maggiore ragione, non dimostrabile in generale, anche se molto spesso si rivela la soluzione migliore.
Per realizzare questa terza soluzione, occorre agire soprattutto

sulla fase di inizializzazione e di terminazione del microprogramma,

sul parallelismo nelle microoperazioni e nelle condizioni logiche.

Con riferimento allunit degli Esempi 2 e 3, la soluzione consiste nello scrivere il microprogramma nel
modo seguente:
0.

IN B, 0 C, zero (A[0] IN) Z, 1 J, 1

1.

(J0 , Z = 0 0) J + 1 J, zero (A[Jm] B) Z, 1;


( = 0 1) J + 1 J, C + 1 C, zero (A[Jm] B) Z, 1;
( = 1 0) C OUT, 0;
( = 1 1) C + 1 OUT, 0

Adottando la variabile di condizionamento zero () prelevata direttamente dalluscite di un registro (Z),


linizializzazione di tale variabile viene anticipata nella microistruzione 0, usando direttamente anche alcuni
valori dingresso e valori costanti, contestualmente allinizializzazione del contatore di passi J al secondo
valore:
zero (A[0] IN) Z, 1 J
Durante il loop, viene prodotto il valore successivo della variabile di condizionamento Z in parallelo al
calcolo gi presente nelle versioni precedenti (si tratta di una applicazione significativa del caso (5) delle
ottimizzazioni nelle micro operazioni):
J + 1 J, , zero (A[Jm] B) Z
Lanticipo di alcune variabili allatto dellinizializzazione ha, in genere, come conseguenza una modifica
dellultimo passo; nel nostro caso, quando si verifica la condizione di terminazione deve ancora essere
eseguito lultimo calcolo
C + 1 OUT
nel caso che Z = 1. Utilizzando ancora tre ALU, si ha:

TPO = 0

TPO = TK + TA + TALU = 10 tp
Il ritardo TK ora quello di un commutatore posto sullingresso di indirizzo della memoria A,
dovendo questa essere indirizzata sia con la costante 0 che con Jm

TPC = TPC =2 tp (da verificare)

Quindi:

= TPO + max (TPC + TPO, TPC) + 02 tp + 10 tp + tp = 13 tp


Complessivamente, il tempo medio di elaborazione dimezzato rispetto alla versione dellEsempio 2:
T = k = N tp 0,53 105 tp

56

7.11 Risorse in cascata


Ottimizzazioni analoghe a quelle ora studiate si possono avere in tutti quei casi in cui nella PO esiste la
possibilit di disporre risorse combinatorie in cascata. Ad esempio, supponiamo di volere eseguire un calcolo
del tipo:
A = F1 (B, F2 (C, D)
dove F1 e F2 sono funzioni implementabili mediante ALU. Il microprogramma pu essere scritto eseguendo
il calcolo in una singola microistruzione, oppure spezzandolo in due microistruzioni, la prima che memorizza
F2 (C, D) in un registro temporaneo E, la seconda che esegue F1 (B, E) A.
La dicotomia ancora tra lunghezza del ciclo di clock, che maggiore nel caso di singola microistruzione
(maggior ritardo di stabilizzazione di PO), rispetto al numero di cicli di clock, che maggiore nel caso di
microistruzioni pi semplici.
Spesso, anche se non dimostrabile in generale, la soluzione con ciclo di clock pi lungo minimizza il tempo
medio di elaborazione.

Vous aimerez peut-être aussi