I CIRCUITI DI COMMUTAZIONE
INDICE
1.6) I codici. 10
I
2.7) I teoremi dell'algebra booleana. 32
2.7.1) Primo teorema dell'assorbimento. 32
2.7.2) Secondo teorema dell'assorbimento. 32
2.7.3) Terzo teorema dell'assorbimento. 32
2.7.4) Teorema di De Morgan. 33
2.8) Interpretazione circuitale dell'algebra booleana. 35
2.9) Semplificazione delle funzioni logiche. 38
2.10) Il metodo di semplificazione mediante le mappe di Karnaugh. 40
2.11) Metodo tabellare di Quine - Mc Cluskey. 45
2.12) Le condizioni non specificate e le funzioni di funzione. 49
2.13) Funzioni simmetriche. 53
2.14) Il riconoscimento delle funzioni simmetriche. 61
2.14.1) Funzioni totalmente simmetriche. 61
2.14.2) Funzioni parzialmente simmetriche. 70
3.1) Introduzione. 76
II
3.14) I circuiti multiterminali. 114
3.14.1) Semplificazione mediante le mappe di Karnaugh. 115
3.14.2) Semplificazione dei circuiti MT con il metodo tabellare. 116
3.15) Selettori e matrici. 121
3.15.1) Matrici multiple. 122
3.15.2) Matrici incomplete. 123
3.16) Implementazione delle funzioni simmetriche. 125
III
6.4.1) Determinazione della matrice primitiva delle sequenze. 189
6.4.2) Matrice delle sequenze della macchina minima. 191
6.4.3) Codificazione dello stato. 195
6.4.4) Determinazione della tavola di flusso del modello fondamentale. 203
6.4.5) Costruzione del circuito reale. 204
6.5) Le alee nei circuiti sequenziali asincroni. 206
6.5.1) Alee statiche. 207
6.5.2) Alee dinamiche. 210
6.5.3) Alee essenziali. 213
6.5.4) Alee multiple. 215
6.6) Esempi di progetto. 216
6.7) Reti iterative. 222
IV
9.3) Tavola di stato di un flip-flop JK master-slave. 297
9.4) Un nuovo approccio alla realizzazione dei circuiti asincroni. 300
9.5) Realizzazione del flip-flop JK master-slave standard. 304
9.6) Analisi di corse e alee. 307
V
12.5) I rele' nei circuiti sequenziali. 390
12.6) I circuiti logici. 392
12.7) Velocita' e ritardo nei circuiti logici. 396
12.8) I circuiti logici integrati. 398
12.10) Caratteristiche dei circuiti integrati digitali. 400
12.11) Immunita' al rumore. 406
12.12) Margine di rumore dinamico. 410
12.13) Caratteristiche dei flip-flop e dei registri. 411
12.13.1) Tempo di propagazione. 412
12.13.2) Specifiche di temporizzazione degli ingressi. 412
12.13.3) Il clock skew. 414
12.14) Criteri di massima per la scelta della famiglia logica. 416
VI
13.5.2) Attitudine delle porte TTL a pilotare linee di trasmissione. 457
13.5.3) Disaccoppiamento dell'alimentazione e massa. 463
13.5.4) Ingressi e gate non usati. 465
13.5.5) Aumento del fan - out. 466
13.6) La famiglia ECL. 466
13.6.1) Caratteristica di ingresso. 468
13.6.2) Caratteristica di trasferimento e immunita' al rumore. 469
13.6.3) Attitudine al pilotaggio di linee. 469
13.6.4) Comportamento dinamico. 470
13.6.5) Sottofamiglie ECL. 470
13.6.6) Conclusioni sulla famiglia ECL. 472
13.7) I dispositivi MOS. 473
13.8) Logica MOS statica. 474
13.9) Logica MOS dinamica. 476
13.9.1) MOS dinamici a rapporto minimo. 479
13.9.2) MOS dinamici a quattro fasi. 481
VII
14.6) I microprocessori. 531
14.7) Approccio al progetto di sistemi a microprocessore. 533
14.8) Struttura elementare di un microprocessore. 538
14.8.1) Unita' di calcolo di un microprocessore. 542
14.8.2) Unita' di controllo. 550
14.9) Dal microprocessore al microcalcolatore. 554
14.9.1) Connessione e organizzazione della memoria. 554
14.9.2) I circuiti di I/O. 560
14.9.3) I supporti software e hardware. 563
VIII
Prefazione
Il presente volume nasce dalla raccolta delle lezioni tenute agli allievi del
terzo anno del corso di Laurea in Ingegneria Elettronica e vuole essere un primo
approccio ai circuiti di commutazione e alle metodologie che stanno alla base
della loro analisi e della loro sintesi.
IX
Prefazione
Il presente volume nasce dalla raccolta delle lezioni tenute agli allievi del
del corso di Laurea in Ingegneria Elettronica e vuole essere un primo approccio
ai circuiti di commutazione e alle metodologie che stanno alla base della loro
analisi e della loro sintesi.
I
CAPITOLO I
SISTEMI DI NUMERAZIONE E CODICI
1.1) Sistema di numerazione decimale.
E detto sistema di numerazione linsieme di un numero finito di simboli e delle regole
che assegnano uno e un solo valore numerico ad ogni stringa formata con i simboli stessi.
Tutti i moderni sistemi di numerazione sono posizionali; i simboli (detti anche cifre)
vengono ordinati secondo valori via via crescenti di un'unita', ma il numero rappresentato da
una stringa di tali simboli dipende anche dalla loro posizione reciproca. Le cifre del sistema
numerico decimale sono i ben conosciuti simboli 0,1,...,9 e il significato di ciascuna stringa
A n A n 1A n 2 .............A o
e il valore numerico
Usualmente per indicare numeri con una parte frazionaria, inferiore all'unita', si
posiziona nella stringa una virgola per separare i simboli relativi a potenze di 10 di esponente
maggiore o uguale a zero da quelli relativi a potenze di 10 di esponente minore di zero.
Anche il significato della virgola rimane immutato. Le basi numeriche piu' comuni,
oltre B=10, sono B=2, B=8, B=16. La base 2 e' la piu' piccola teoricamente possibile per un
sistema di numerazione posizionale. Le sue cifre sono rappresentate con i simboli 0 e 1;
ciascuna cifra appartenente ad una stringa prende il nome di bit (binary digit). Il sistema a
base 2 e' in sostanza il solo usato nei calcolatori numerici. Infatti, a parte altre considerazioni
che comunque ne consiglierebbero l'uso, esistono numerosi dispositivi elettronici in grado di
rappresentare mediante due stati di funzionamento le due cifre binarie.
I sistemi di numerazione a base 8 e 16 hanno come cifre rispettivamente i simboli
0,1,2,3,4,5,6,7 e 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. La loro diffusione e' giustificata dal fatto
che la conversione tra essi e il sistema binario e' particolarmente semplice e che permettono di
esprimere un valore numerico in maniera molto piu' compatta che non il sistema binario.
Onde evitare confusioni, ogni volta che si usano sistemi di numerazione diversi, e'
conveniente indicare con opportuni pedici la base numerica. Ad esempio:
1101112 = 5510
Sistemi di numerazione e codici
Capitolo 2
A n A n 1A n 2 ........A o
Da quanto detto risulta evidente che la conversione tra una numerazione posizionale in
base 2 e quelle in base 8 o 16, che sono a loro volta potenze di 2, e' particolarmente semplice.
E' sufficiente infatti raggruppare i bit, a partire dalla cifra meno significativa, in gruppi di tre o
quattro cifre e convertire ciascun gruppo nella corrispondente cifra ottale o esadecimale.
Ad esempio si voglia convertire in base 2, 8 e 16 il numero decimale 157. Secondo la
procedura delle divisioni successive si ottengono i risultati illustrati nella tabella che segue.
2
Sistemi di numerazione e codici
Capitolo 2
b) CONVERSIONE DI FRAZIONI.
La conversione avviene per successive moltiplicazioni per la base numerica. I valori
degli interi ottenuti costituiscono, nell'ordine, le cifre del numero nella base voluta; i soli
valori frazionari vengono usati nelle successive moltiplicazioni. Infatti:
A 1 A 2 .B 1 ..... A n .B n 1 B
A n ---------- ---
0,637510= 0,101000112
3
Sistemi di numerazione e codici
Capitolo 2
11010,0112 = 1.24 + 1.23 + 0.22 + 1.21 + 0.20 + 0.2-1 + 1.2-2 + 1.2-3 = 26,37510
Un metodo piu' rapido, applicabile ai numeri interi e' il seguente: si raddoppia il bit piu'
significativo e vi si somma quello immediatamente seguente; si raddoppia tale somma e vi si
aggiunge il terzo bit e cosi' via fino ad esaurimento dell'intera stringa.
1 1 0 1 1 0
1.2+1
3.2+0
6.2+1
13 . 2 + 1
27 . 2 + 0
54
0+0=0
0+1=1
1+0=1
1 + 1 = 102 cioe' 0 con riporto di un'unita' al
rango immediatamente superiore.
0-0=0
1-0=1
1-1=0
0-1=1 con riporto negativo di un'unita' al
rango immediatamente superiore.
4
Sistemi di numerazione e codici
Capitolo 2
CB = Bn - N
CB-1 = Bn - N - 1
CB = CB-1 + 1
1101 1310
0010 dopo la negazione
0001 somma di un'unita'
______
0 0 1 1 310 = 24 - 1310
R = N1 + Bn N2 = Bn + (N1 - N2)
Si possono verificare due casi: quello in cui N1 N2 sia maggiore o uguale a zero e
quello in cui N1 N2 sia minore di zero. Si ricordi inoltre che ambedue i numeri sono minori
di Bn .
Nel primo caso si avra' R Bn e quindi il rango relativo a Bn sara' riempito da una
cifra diversa dallo zero, mentre gli altri ranghi, meno significativi, conterranno in notazione
posizionale il valore N1 - N2 .
E' sufficiente pertanto ignorare il rango della potenza n-esima di B per ottenere il
risultato voluto.
Nel secondo caso si ha R < Bn e quindi il rango relativo a Bn sara' riempito da uno zero,
mentre negli altri ranghi, meno significativi, sara' contenuto il valore
5
Sistemi di numerazione e codici
Capitolo 2
Bn + (N1 N2 ) = Bn - (N2 N1 )
che e' proprio il complemento a B del numero (N2 - N1) 0 assunto come rappresentativo del
numero negativo - (N2 - N1) risultato dell'operazione di sottrazione.
Si noti che nella rappresentazione dei numeri negativi mediante complemento a B lo
zero si intende appartenente al corpo dei numeri positivi e non e' possibile complementarlo,
mentre l'insieme dei numeri negativi comprende un intero in piu' di quello dei numeri positivi
rappresentabili con gli stessi bit1. Ad esempio il massimo numero positivo rappresentabile con
quattro bit e', considerando il quarto bit quello di segno:
0 1 1 1 = 710
1 0 0 0 = - 810
Esso non e' tuttavia complementabile per ottenerne il valore assoluto in quanto non e'
rappresentabile nel campo dei numeri positivi con il numero di bit a disposizione.
Il risultato di un'operazione di sottrazione realizzata tramite il complemento e' esatto se
non si e' avuto alcun riporto ne' nel bit di segno che al di fuori della parola di memoria oppure
se si e' verificato in entrambi; e' errato se si e' avuto un riporto solo. A titolo di esempio si
consideri una parola di memoria di 5 bit. Il massimo numero positivo rappresentabile e' quindi
15.
00111+ 7+
00101 5
__________ ____
01100 12 nessun riporto
1
E' necessario a questo punto far notare che nei calcolatori elettronici, che pur si avvalgono del
complemento per eseguire la sottrazione, le cose vanno in maniera lievemente diversa.
Infatti:
1.1) Tutti i numeri hanno la stessa lunghezza di stringa, essendo questa fissata dalla lunghezza in bit
della parola di memoria.
1.2) Il bit piu' significativo rappresenta il valore rispetto al quale si complementa e pertanto assume il
significato di bit di segno, avendo valore nullo per i numeri positivi e valore 1 per i numeri negativi,
rappresentati nella forma complemento a 2.
1.3)Il massimo numero rappresentabile su n posizioni non e' dunque 2n -1, ma 2n-1 -1, ed il risultato di
un'operazione e' significativo se e solo se e' rappresentabile entro tale limite.
6
Sistemi di numerazione e codici
Capitolo 2
01111+ 15 +
01111 15
_________ _____
11110 30 un riporto solo.
Il risultato verrebbe
interpretato come 2
10011+ - 13 +
10001 - 15
__________ _______
100100 - 28 un riporto solo. Il
risultato verrebbe
interpretato come 4
11100+ 4+
11000 -8
__________ _______
110100 - 12 doppio riporto. Il
risultato viene
correttamente inter-
pretato come - 12.
0.0=0
0.1=0
1.0=0
1.1=1
Nel caso di moltiplicazione di numeri di piu' cifre il modo di procedere e' del tutto
simile a quello usato per la numerazione decimale.
7
Sistemi di numerazione e codici
Capitolo 2
1.6) I codici.
Si definisce codice un insieme [C] di parole adottato per rappresentare gli elementi di
un insieme [C*] . E' ad esempio un codice l'insieme delle parole di una lingua; simboli di
questo codice sono le lettere dell'alfabeto, mentre parole di codice sono le combinazioni di
lettere che hanno significato.
Quale codificazione si intende l'operazione con la quale ad una parola del codice [C]
viene fatto corrispondere un elemento dell'insieme [C*].
Un codice e' non ambiguo se la corrispondenza tra le sue parole e gli elementi di [C*] e'
univoca; ambiguo se almeno una parola di [C] rappresenta due o piu' elementi di [C*].
Affinche' un codice a K simboli rappresenti in modo non ambiguo N elementi di [C*] ,
le sue parole devono avere una lunghezza minima. Se la parola e' lunga n, poiche' con K
simboli diversi si possono realizzare Kn diverse combinazioni, per avere un codice non
ambiguo deve essere rispettata la condizione Kn > N, cioe' n dev'essere il piu' piccolo intero
che verifichi la relazione
n logk N
0 0011 5 1000
1 0100 6 1001
2 0101 7 1010
3 0110 8 1011
4 0111 9 1100
8
Sistemi di numerazione e codici
Capitolo 2
0 0000 5 1011
1 0001 6 1100
2 0010 7 1101
3 0011 8 1110
4 0100 9 1111
1) Si dice peso il numero di bit non nulli presenti in una certa configurazione,
sia essa significativa o meno. Ad esempio la configurazione 1011011 ha
peso 5.
9
Sistemi di numerazione e codici
Capitolo 2
Pr pr . 1 p m r . m
r
L'errore viene riconosciuto solo se C r e' una configurazione non significativa; quindi se
a distanza r da P si hanno N r parole del codice, la probabilita' di avere un errore non rivelato
di molteplicita' r e':
Ptr Psr .p r . 1 p m r . m
r
Nr
Psr
m
r
m
Pt N pr . 1
h r
p m r.
Ora di solito p e' molto minore dell'unita' e quindi la relazione precedente puo' essere
approssimata con
Ph = Nh .ph
10
Sistemi di numerazione e codici
Capitolo 2
N2 = w.(m - w)
In ogni parola infatti esistono w bit di valore 1 e (m-w) bit di valore 0. Ci sono pertanto
w.(m - w) modi di scambiare un 1 con uno 0 senza alterare il peso. Si ha quindi che:
Pt = w.(m - w).p2
Fra i codici di questo tipo particolarmente noti sono due codici decimali; il codice 2 da
5 e il biquinario. Il primo e' un codice a 5 bit con parole di peso 2
0 01100 5 00110
1 11000 6 10001
2 10100 7 01001
3 10010 8 00101
4 01010 9 00011
La ridondanza e':
R = 5/4 = 1,25
Il codice biquinario e' invece un codice ad elevata ridondanza con m=7 e w=2. Sui 7 bit
di ogni parola vengono effettuati due controlli per verificare che le prime due e le ultime
cinque posizioni abbiano ambedue peso 1.
11
Sistemi di numerazione e codici
Capitolo 2
0 1010000 5 0110000
1 1001000 6 0101000
2 1000100 7 0100100
3 1000010 8 0100010
4 1000001 9 0100001
La ridondanza e':
R = 7/4 = 1,75
P t = 5.10-4 = 0,05 %
Infatti nel caso del codice biquinario Nh = 5 e non 10, come e' immediato verificare.
h
c
2 per i codici autocorrerttori
c r h
Il codice di Hamming con h=3 si ottiene aggiungendo agli n bit di un codice efficiente k
bit di controllo ognuno dei quali sia destinato al controllo di parita' di un gruppo opportuno
degli m = n + k bit risultanti.
Piu' esattamente l'i-esimo bit di controllo va situato nella posizione 2i-1 della parola e
controlla la parita' di gruppi alternati di 2i-1 bit a cominciare dalla posizione 2i-1.
Il primo bit di controllo va quindi nella prima posizione e controlla la parita' dei bit
1,3,5,7,9,...; il secondo bit di controllo va in posizione 2 e controlla la parita' dei bit
(2,3),(6,7),(10,11),....; il terzo bit va nella quarta posizione e controlla la parita' dei bit
(4,5,6,7), (12,13,14,15), e cosi' via.
In ricezione si verifica la parita' di ciascun gruppo e per ogni verifica esatta si scrive uno
0, per ogni verifica errata un 1. La stringa cosi' ottenuta, letta in senso inverso, forma il
cosidetto numero di controllo Nc , che e' nullo nel caso in cui non vi siano errori. In caso
12
Sistemi di numerazione e codici
Capitolo 2
contrario ognuno dei 2k -1 possibili valori di Nc indica in quale delle m posizioni si e'
verificato un errore di molteplicita' 1.
Si supponga infatti di aver codificato con il codice di Hamming h=3 un codice efficiente
da 4 bit. Si avranno pertanto 3 bit di verifica di parita', k 1 , k 2 e k 3 . Le tre verifiche di
parita' eseguite in ricezione danno il seguente risultato:
m 2k - 1
Si dicono ottimi quei codici per cui la relazione appena scritta e' verificata con
l'uguaglianza.
Si supponga di voler codificare 16 simboli. Si ha pertanto:
La composizione della parola, indicando con k i bit di controllo e con b i bit del codice
efficiente di partenza, sara' quindi:
k1 k2 b1 k3 b2 b3 b4
0011001
0001001
I primi due controlli di parita' (sui bit 1,3,5,7 e (2,3) e (6,7) rispettivamente) danno
risultato errato, mentre il terzo controllo (sui bit 4,5,6,7) e' esatto. Il numero di controllo e'
quindi:
Nc = 0 1 1
corrispondente alla posizione del bit errato. La ridondanza del codice e' R = 7/4 = 1,75
13
Sistemi di numerazione e codici
Capitolo 2
Per quanto riguarda la probabilita' di errore non rivelato, anche ammettendo che tutte le
configurazioni a distanza 3 da una parola del codice siano esse stesse parole del codice, si ha
con p = 0,01:
P t 15.0,013 = 0,0015 %
I codici di Hamming con h=4 si ottengono da quelli con h=3 aggiungendo in ultima
posizione un ulteriore bit di controllo che verifichi la parita' di tutti i bit che lo precedono.
La verifica di un messaggio si fa controllando tutti i bit di parita'. Se i primi (k - 1)
controlli non sono tutti esatti mentre l'ultimo lo e' allora si e' in presenza di un errore doppio
non correggibile.
Supponendo di aver ottenuto dal codice h=3 appena illustrato quello h=4, si ha:
14
Sistemi di numerazione e codici
Capitolo 2
Successivamente:
Le regole per la conversione inversa da binario a codice Gray sono altrettanto semplici:
1) Si procede da sinistra verso destra confrontando l'i-esimo bit di P B con l'(i-1)- esimo.
Se i due bit sono uguali, l'i-esimo bit di P G e' 0; se sono diversi e' 1.
In fig. 1.9.1 sono riportati gli esempi sia della conversione da Gray a binario che da
binario a Gray.
P 0 1 0 1 1
G
P 0 1 1 0 1
B
= = =
P 1 1 0 1 0 1 1 0 0 0 1
B
G 1 0 1 1 1 1 0 1 0 0 1
P
figura 1.9.1
15
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
CAPITOLO II
ALGEBRA BOOLEANA
2.1) Introduzione.
L'algebra booleana, algoritmo nato nel 1847 ad opera del matematico inglese George
Boole, e' diventata dal 1938, quando Claude Shannon ne adatto' il simbolismo all'analisi dei
circuiti di commutazione, uno strumento essenziale nel progetto dei circuiti logici.
L'algebra booleana (conosciuta anche con il nome di algebra logica o algebra binaria)
contemplava semplicemente due valori atti a rappresentare il vero o il falso in una
proposizione e in origine permetteva di studiare formalmente i problemi della logica
deduttiva. Successivamente, con Shannon, i due valori dell'algebra booleana servirono a
definire lo stato di apertura o di chiusura di un generico contatto; infine i due valori
indicarono la presenza o l'assenza di un segnale in un particolare punto di un circuito.
Risulta in ogni caso evidente che l'algebra booleana considera unicamente l'esistenza di
due elementi distinti, mutuamente escludentisi, indicati di solito con i simboli 0 e 1. Tali due
elementi sono chiamati costanti logiche o costanti binarie.
F(x1 , x2 ,...., x n )
quando esiste un criterio che fa corrispondere in modo univoco ad ognuna delle 2n possibili
configurazioni diverse delle x un valore della y.
Il numero di funzioni di n variabili che si possono definire e' quindi
22
n
x1 x2 x3 y
0 0 0 1
0 0 1 0
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1
figura 2.2.1
Dalla definizione appena data risulta che una possibile rappresentazione della funzione
e' quella che si ottiene scrivendo tutte le possibili n-ple di valori (dette configurazioni) delle
16
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
variabili indipendenti ed assegnando per ciascuna di esse il valore che la y deve assumere. Un
tale tipo di rappresentazione assume il nome di tavola di verita'.
A titolo di esempio in fig. 2.2.1 e' riportata la tavola di verita' di una delle 256 possibili
funzioni di tre variabili. Ovviamente tale tavola avra' otto righe, pari alle otto possibili
configurazioni delle variabili indipendenti.
Ha interesse prendere in considerazione una alla volta tutte le funzioni di una variabile
ed alcune delle funzioni di due variabili.
x y x y x y x y
1 2 3 4
0 0 0 1 0 0 0 1
1 0 1 1 1 1 1 0
Le prime due funzioni y1 e y2 sono due funzioni degeneri e coincidono con le costanti
logiche; la funzione y3 e' la funzione identica ed in termini simbolici puo' essere indicata con:
y3 x
Maggiormente interessante e' la funzione y4 che vale 0 quando x vale 1 e viceversa. Tale
funzione viene chiamata negazione e simbolicamente indicata con:
y4 x
x x y
1 2
0 0 0
0 1 1
1 0 1
1 1 1
y x1 x 2
vale 1 quando o una o l'altra o ambedue le variabili indipendenti valgono 1. Per la somma
logica sono valide le seguenti proprieta', come e' immediato verificare dalla tavola di verita':
17
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
x 1 1 x 0 x
x x x x x 1
Si puo' estendere il concetto di somma logica anche alle funzioni di n variabili con n>2.
La definizione rimane evidentemente la stessa che nel caso di due variabili.
Per la somma logica valgono anche:
a) Proprieta' commutativa - x1 + x2 = x2 + x1
b) Proprieta' associativa - x1 + x2 + x3 = x1 + (x2 + x3)
x x y
1 2
0 0 0
0 1 1
1 0 1
1 1 0
y x1 x2
vale 1 quando o una o l'altra delle variabili indipendenti vale 1. Anche per l'OR esclusivo
valgono le proprieta' commutativa e associativa.
x x y
1 2
0 0 0
0 1 0
1 0 0
1 1 1
y x1 .x2
x.0 0 x.1 x
x.x x x.x 0
18
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
Anche la definizione di prodotto logico si puo' estendere alle funzioni di n variabili con
n>2.Per il prodotto logico, come per la somma logica, valgono:
a) proprieta' commutativa - x1 . x2 = x2 . x1
b) proprieta' associativa - x1 . x2 . x3 = x1 . (x2 . x3)
Per l'insieme delle due funzioni logiche prodotto e somma vale poi la:
x x y
1 2
0 0 1
0 1 0
1 0 0
1 1 0
E' immediato osservare che la funzione logica NOR, indicata simbolicamente con:
y x1 x2
si puo' interpretare come la negazione della somma logica, per cui molto spesso viene anche
indicata con:
y x1 x2
L'operazione NOR su piu' variabili e' per definizione la negazione della loro somma,
cioe':
x1 x2 ..... xn x 1 x 2 .... x n
E' interessante notare che, mentre vale per la funzione NOR la proprieta' commutativa,
non vale invece quella associativa. Cioe':
x1 x2 x2 x1
x1 x2 x3 (x 1 x2) x3 (x 1 x2) x3
Ogni associazione di variabili va cioe' accompagnata dalla loro negazione, come e'
immediato verificare dalla tavola di verita'.
La funzione NOR e' detta anche funzione universale, per ragioni che si vedranno piu'
avanti, assieme alla:
19
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
x1 x2 y
0 0 1
0 1 1
1 0 1
1 1 0
E' immediato riconoscere che la funzione logica NAND, indicata simbolicamente con:
x1 / x2
puo' essere interpretata come un prodotto logico negato, per cui molto spesso si trovera'
espressa nella forma:
x1.x 2
L'operazione NAND su piu' di due variabili e', per definizione, la negazione del loro
prodotto.
x1 / x2 / x3 (x1 / x2 ) / x3 (x1 / x2 ) / x3
20
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
Risulta quindi evidente che esistono tanti termini minimi quante sono le configurazioni
delle variabili di ingresso. Considerando che, dal punto di vista formale, le configurazioni di n
variabili coincidono con i numeri 0, 1, ...., 2n - 1 espressi in numerazione binaria posizionale, i
termini minimi vengono di solito indicati con mi , dove i e' il numero formalmente associato
alla configurazione in corrispondenza alla quale il termine minimo vale 1.
D'altra parte dalla definizione di termine minimo risulta che esso puo' essere espresso
nella forma di prodotto logico di variabili dirette e negate, le prime in corrispondenza delle
variabili che nella configurazione di ingresso valgono 1, le seconde in corrispondenza delle
variabili che nella stessa configurazione valgono 0. Ad esempio il termine minimo m3 di tre
variabili e':
x1 x 2 x3
Mediante i termini minimi e' possibile esprimere una qualsiasi funzione logica di n
variabili nella forma di somma di prodotti. Infatti, detti yi i valori che la funzione deve
assumere in corrispondenza alla configurazione associata al numero i, si puo' scrivere:
2n 1
y yi . mi (2.6.1)
0
In modo del tutto analogo vengono definiti i termini massimi; essi sono quelle
particolari funzioni che valgono 0 in corrispondenza ad una ed una sola configurazione delle
variabili di ingresso e vengono di solito indicati con Mi. In termini simbolici essi vengono
espressi mediante la somma logica delle variabili indipendenti dirette e negate. Si avra' la
variabile diretta se nella configurazione di ingresso essa assume il valore 0, negata in caso
contrario.
Ad esempio il termine massimo M5 di tre variabili e':
M5 x1 x2 x3
Anche mediante i termini massimi e' possibile esprimere una qualsiasi funzione logica
nella forma di prodotto di somme.
2n 1
y (y i M i ) (2.6.2)
0
Da quanto detto si puo' quindi affermare che qualsiasi funzione logica e' esprimibile
mediante i tre operatori di somma logica, prodotto logico e negazione.
Le rappresentazioni di una funzione logica ricavate dalle (2.6.1) e (2.6.2) prendono il
nome di forme canoniche.
21
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
x x.y x .(1 y) x
x .(x y) x x.y x
x x. y x x . y x. y x y .(x x ) x y
x . y y . z x. z x . y x. z
Infatti:
x . y y . z x. z x . y y . z .(x x ) x. z
x . y x . y . z x. y . z x. z x . y .(1 z) x. z .(1 y) x . y x. z
(x y).(y z).( x z) x . y . z x . z x. y x. y . z y . z
x . z x. y y . z x .x x . z x. y y . z
x.(x y) z .(x y) (x y).(x z)
x y x.y
x.y x y
22
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
cioe' la negazione di una funzione si ottiene negando ogni variabile e scambiando tra di loro i
due operatori di somma e prodotto logico.
A titolo di esempio si consideri la funzione:
F x .y x. y
y y m i .y i
y (mi yi ) (M i y i )
x1 x 2 x1 x 2 x 1 .x 2
o analogamente
x1 . x 2 x1 . x 2 x1 x2
Allo stesso modo ci si rende conto perche' le funzioni NAND e NOR sono dette anche
funzioni universali; con una sola di esse e' infatti possibile esprimere qualsiasi funzione
logica. Infatti gia' si sa che qualunque funzione logica e' esprimibile in termini di AND-OR-
NOT.
Infatti:
23
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
x y x.y x/y
x.y x.y x/y
x x.x x/x
oppure
x y x y x y
x.y x y x y
x x x x x
e quindi qualsiasi funzione logica e' esprimibile in termini di solo NAND o di solo NOR.
x1
x2
a b
xn
figura 2.8.1
Il circuito tra A e B sara' continuo quando almeno uno dei contatti e' chiuso. Ne
consegue che la somma logica
x 1 x 2 .... x n
24
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
x1.x 2 ....x n
L'analogia introdotta in tal modo permette di scrivere l'espressione analitica di ogni
raggruppamento serie-parallelo di contatti e viceversa di interpretare in questo senso qualsiasi
espressione logica. L'espressione logica, che indica sotto quali condizioni un circuito connette
elettricamente due punti A e B, e' detta funzione di trasmissione o piu' semplicemente
funzione del circuito. Si possono quindi trattare formalmente e facilmente problemi sia di
analisi che di sintesi di circuiti a contatti.
A titolo di esempio si consideri il seguente problema di sintesi.
Si vuol progettare un circuito capace di accendere o di spegnere una lampada mediante
uno qualsiasi di tre interruttori indipendenti. Indicando con L=1 la condizione di lampada
accesa, e' evidente che quando i tre interruttori sono aperti L dovra' valere 0. Chiudendo uno
qualsiasi degli interruttori essa dovra' assumere il valore 1, mentre tornera' al valore 0
azionando un qualsiasi altro interruttore. Infine essa riassumera' nuovamente il valore 1
quando tutti i tre interruttori saranno chiusi. Chiamando A,B,C le variabili logiche associate a
ciascun interruttore si ricava da quanto detto la tavola di verita' di fig. 2.8.2.
A B C L
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1
figura 2.8.2
Sintetizzando la funzione del circuito sulla base dei termini minimi si ottiene:
B C
A
_ _
B C
_
B C
_
A LAMPADA
_
B C
figura 2.8.3
25
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
_
A A
_ _
B B B B
_ _
C C C C
figura 2.8.4
E' bene notare che i circuiti ricavati non sono quelli che corrispondono alle due forme
canoniche, bensi' quelli ricavati mediante opportune fattorizzazioni delle forme canoniche. In
ambedue i casi questa tecnica ha permesso di risparmiare un contatto A e un contatto A. In
generale si puo' dire che espressioni che contengono un minor numero di variabili, siano esse
dirette o negate, conducono a circuiti meno dispendiosi in quanto usano un minor numero di
contatti.
E' evidente quindi l'utilita' di manipolare le funzioni assegnate in forma canonica in
modo da pervenire ad un'espressione minima che a sua volta corrisponde al circuito con il
minimo numero di componenti.
Una tale operazione viene detta semplificazione della funzione.
y x 1 .x 2 .x 3 x 1 .x 2 . x 3 x 1 . x 2 . x 3 x 1 . x 2 . x 3
x 1 .x 2 .(x 3 x 3 ) x 2 . x 3 .(x 1 x 1 ) x 1 .x 2 x2 .x3
Si diranno equivalenti due funzioni che abbiano la stessa tavola di verita', forma
semplificata di una funzione ogni sua espressione non canonica, forma minima quella in cui
ogni variabile, diretta o negata che sia, compare il minor numero di volte.
Espressioni semplificate si possono ottenere applicando alle espressioni canoniche le
relazioni fondamentali dell'algebra booleana, ma questa strada richiede una notevole pratica,
si applica facilmente solo a funzioni di un limitato numero di variabili e non da' alcuna
garanzia di pervenire effettivamente alla forma minima.
Si semplifichi ad esempio la funzione:
y x 1 . x 2 . x 3 . x 4 x 1 . x 2 . x 3 .x 4 x 1 . x 2 .x 3 . x 4 x 1 . x 2 . x 3 . x 4 x 1 . x 2 .x 3 .x 4
26
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
y x 1 . x 2 . x 3 x 1 . x 2 . x 4 x 2 . x 3 . x 4 x 1 . x 2 .x 3
x1 . x 2 . x 3 x 1 . x 2 . x 3 . x 4 x 1 . x 2 . x 3 .x 4
y x1 . x 2 x1 . x 2 . x 4 x 2 . x 3 . x 4
y x1 . x 2 x 2 . x 3 . x 4
figura 2.10.1
1
Per giustificare formalmente il nome di implicante sarebbe stato necessario trattare la funzione booleana
implicazione. Per maggiori dettagli si veda lappendice A.
27
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
y x 1 .x 2 .x 3 .x 4 x 1 . x 2 . x 3 . x 4 x 1 .x 2 . x 3 . x 4 x 1 . x 2 . x 3 .x 4
X X2
1
00 01 11 10
X X
3 4
00 1
01
11 1 1
10 1
figura 2.10.2
Ne consegue che il prodotto delle n-1 variabili in comune implica ambedue i termini
minimi associati alle caselle considerate. Un analogo discorso puo' esser fatto per gruppi di
quattro caselle adiacenti, appartenenti alla stessa riga o alla stessa colonna o raccolti attorno
allo stesso vertice. Il prodotto delle n-2 variabili comuni implica evidentemente tutti i quattro
termini minimi rappresentati dalle quattro caselle.
In definitiva si puo' dire che un raggruppamento di 2i caselle adiacenti e' implicato dal
prodotto delle n-i variabili comuni alle 2i caselle.
In sostanza, per semplificare una funzione y, rappresentata su una mappa di Karnaugh,
basta raccogliere le caselle contrassegnate nel minor numero di insiemi di 2i caselle adiacenti,
con i massimo, in modo che ciascuna casella contrassegnata cada in almeno uno di questi
insiemi.
A titolo di esempio si consideri la seguente funzione:
28
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
y x 1 .x 2 .x 3 .x 4 x 1 .x 2 .x 3 . x 4 x 1 .x 2 . x 3 . x 4 x 1 . x 2 . x 3 . x 4
x 1 .x 2 . x 3 .x 4 x 1 .x 2 .x 3 .x 4 x 1 .x 2 .x 3 . x 4 x 1 .x 2 . x 3 .x 4
x 1 .x 2 . x 3 . x 4 x 1 . x 2 .x 3 . x 4
In fig. 2.10.3 e' riportata la mappa di Karnaugh relativa ed e' anche indicato il numero
minimo di raggruppamenti di caselle che si possono individuare per ottenere la copertura
completa della funzione secondo i criteri appena esposti.
X X
1 2
00 01 11 10
X X
3 4
1 1
00
01 1 1 1
11 1 1 1
10 1 1
figura 2.10.3
y x2 x1 . x 4
29
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
y x 1 .x 2 . x 3 . x 4 . x 5 x 1 .x 2 . x 3 . x 4 .x 5 x 1 .x 2 . x 3 .x 4 . x 5
x 1 .x 2 . x 3 .x 4 .x 5 x 1 .x 2 .x 3 . x 4 . x 5 x 1 .x 2 .x 3 . x 4 .x 5
x 1 .x 2 .x 3 .x 4 . x 5 x 1 .x 2 .x 3 .x 4 .x 5 x 1. x 2 . x 3 . x 4 . x 5
x 1 . x 2 . x 3 . x 4 . x 5 x 1 .x 2 . x 3 . x 4 . x 5 x 1 . x 2 .x 3 .x 4 . x 5
X X X X
1 2 1 2
X X X X
3 4 3 4
1 1 1
1 1
1 1 1 1 1
1 1
X
5
= 0 figura 2.10.4
X
5
= 1
X X
1 2 X X
1 2
X X 00 01 11 10
3 4 X X 00 01 11 10
3 4
00 1
00
01 1
01 1
11 1
11 1
10
10
X X = 00
5 6 X X = 01
X X X X 5 6
1 2 1 2
X X 00 01 11 10 X X 00 01 11 10
3 4 3 4
00 1 00
01 1 01 1
11 1 11 1
10 1 1 10 1 1
X X = 10 X X = 11
5 6 5 6
figura 2.10.5
Le mappe di Karnaugh per sei variabili sono formate da quattro mappe per quattro
variabili, disposte come illustrato in fig. 2.10.5. Le adiacenze tra caselle vanno quindi
ricercate anche tra mappe a loro volta adiacenti in senso orizzontale e verticale. Nell'esempio
di fig. 2.10.5 la funzione rappresentata e', in forma minima:
30
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
y x 1 .x 2 . x 4 x 1 . x 3 .x 4 . x 5 x 1 . x 2 .x 3 .x 4 .x 6
f . x f .x f
x 1 .x 2 .x 3 x 1 .x 2 . x 3 x 1 . x 2 .x 3 x1. x 2 . x 3 x1 . x 2 . x 3
0 0 000
1 1 001
2 010
2 3 011
3 7 111
4) Si confrontano tutti i termini minimi del livello k con tutti quelli del livello
k+1, semplificando tra loro i termini che differiscono per un solo bit. Si
costruisce in tal modo una seconda tabella, nella quale le semplificazioni
avvenute si indicano con una lineetta, mentre gli implicanti vengono
contraddistinti con i numeri dei termini minimi che li hanno generati. Nella
prima tabella si contrassegnano tutti i termini minimi che hanno dato luogo ad
almeno una semplificazione.
31
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
0, 1 0 0 -
0, 2 0 - 0
1, 3 0 - 1
2, 3 0 1 -
A 3, 7 - 1 1
0 1 2 3 7
Dall'esame del reticolo si individuano poi i termini minimi che sono implicati
da un unico implicante primo.Ciascuno di essi diviene evidentemente
essenziale nella realizzazione della funzione.
32
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
Ogni implicante essenziale cosi' individuato implica d'altra parte altri termini
minimi che risultano automaticamente coperti e pertanto non vanno piu'
considerati. E' semplice infine trovare, sia pure per tentativi, la copertura
minima dei termini rimasti. Nell'esempio che si sta trattando ambedue gli
implicanti primi A e B sono essenziali.
y A B x 2 . x 3 x1
Piu' significativo, soprattutto per quanto riguarda la realizzazione della copertura
minima, e' l'esempio seguente.Si voglia semplificare la funzione
y (1,3,4,6,7,9,10,11,12,13,14,15) m
La divisione dei termini minimi in livelli e il riordinamento dei livelli da' luogo alla
seguente tabella:
1 0 0 0 1
4 0 1 0 0
3 0 0 1 1
6 0 1 1 0
9 1 0 0 1
10 1 0 1 0
12 1 1 0 0
7 0 1 1 1
11 1 0 1 1
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1
1, 3 0 0 - 1
1, 9 - 0 0 1
4, 6 0 1 - 0 1, 3, 9, 11 - 0 - 1 A
4, 12 - 1 0 0 4, 6, 12, 14 - 1 - 0 B
3, 7 0 - 1 1 3, 7, 11, 15 - - 1 1 C
3, 11 - 0 1 1 6, 7, 14, 15 - 1 1 - D
6, 7 0 1 1 - 9, 11,13 , 15 1 - - 1 E
6, 14 - 1 1 0 10, 11, 14, 15 1 - 1 - F
9, 11 1 0 - 1 12, 13, 14, 15 1 1 - - G
9, 13 1 - 0 1
10, 11 1 0 1 -
10, 14 1 - 1 0
12, 13 1 1 0 -
12, 14 1 1 - 0
7, 15 - 1 1 1
11, 15 1 - 1 1 figura 2.11.1
13, 15 1 1 - 1
14, 15 1 1 1 -
Dall'esame del reticolo risulta che il termine minimo 1 e' implicato solamente da A,
quello 4 solo da B e quello 10 solo da F. Di conseguenza A,B,F sono implicanti primi
33
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
essenziali. La loro scelta copre i termini minimi 1,3,4,6,9,10, 11,12,14,15. Per coprire i
rimanenti termini minimi 7 e 13 si ì puo' scegliere per il primo l'implicante C o quello D,per il
secondo quello E o quello G.
A
B
C
D
E
F
G
1 3 4 6 7 9 10 11 12 13 14 15
figura 2.11.2
y A B F D E x 2 . x 4 x 2 .x 4 x1 . x 3 x 2 . x 3 x 1 . x 4
y A B F D G x 2 . x 4 x 2 .x 4 x1 . x 3 x 2 . x 3 x 1 . x 2
y A B F C E x 2 . x 4 x 2 .x 4 x 1 . x 3 x 3 . x 4 x1 . x 4
y A B F C G x 2 . x 4 x 2 .x 4 x1 . x 3 x 3 . x 4 x1 . x 2
Le condizioni non specificate si ricavano dalle tavole di verita' delle w i , e sono tutte e
sole le configurazioni delle w i che non compaiono in tali tabelle.
Sia ad esempio:
y f(w 1 , w 2 , w 3 )
dove
34
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
w1 x 1 .(x 2 . x 3 x 2 .x 3 )
w2 x 4 .(x 2 .x 3 x2.x3)
w3 x 1 . x 2 . x 3 x 1 .x 2 .x 3
La tavola di verita' delle wi e' riportata in fig. 2.12.1. Da essa si vede che le terne di
possibili valori w1 ,w2 , w3 sono 000, 001, 010, 100, 101. Ne consegue che la tavola di verita'
della y conterra' condizioni non specificate in corrispondenza alle configurazioni di ingresso
011, 110, 111. Sulla tavola di verita' le condizioni non specificate vengono indicate con un
trattino, nella forma canonica raccogliendo in parentesi i termini minimi corrispondenti, sulle
mappe di Karnaugh contrassegnando con il simbolo la casella corrispondente a ciascuna
condizione non specificata.
X X X X W W W
1 2 3 4 1 2 3
0 0 0 0 0 0 1
0 0 0 1 0 0 1
0 0 1 0 0 0 0
0 0 1 1 0 1 0
0 1 0 0 0 0 0
0 1 0 1 0 1 0
0 1 1 0 0 0 0
0 1 1 1 0 0 0
1 0 0 0 1 0 0
1 0 0 1 1 0 0
1 0 1 0 0 0 0
1 0 1 1 0 1 0
1 1 0 0 0 0 0
1 1 0 1 0 1 0
1 1 1 0 1 0 1
1 1 1 1 1 0 1
figura 2.12.1
Si assegna cioe' alle condizioni non specificate il valore 1 o 0 a seconda che esse tornino o
meno utili per eseguire raggruppamenti piu' ampi. Si abbia ad esempio la seguente funzione:
X1 X2
00 01 11 10
X X
3 4
00
1 1
01
11 1
10 1
35
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
y x 1 .x 3 .x 4 x 1 . x 2 . x 3 . x 4 x 1 .x 2 . x 3 .x 4
y x 3 .x 4 x1 . x 3
0 0 0 0 0 0,4 0 - 0 0
0,8 - 0 0 0
4 0 1 0 0
8 1 0 0 0 4,12 - 1 0 0
8,12 1 - 0 0
10 1 0 1 0 8,10 1 0 - 0
A
12 1 1 0 0 12,13 1 1 0 -
12,14 1 1 - 0 B
11 1 0 1 1
10,11 1 0 1 -
13 1 1 0 1 10,14 1 - 1 0 C
14 1 1 1 0
13,15 1 1 - 1 D
15 1 1 1 1 11,15 1 - 1 1
14,15 1 1 1 1
0 4 10 15
0, 4, 8, 12 - - 0 0 A
figura 2.12.3
8, 10, 12, 14 1 - - 0 B
12, 13, 14, 15 1 1 - - C
10, 11, 14, 15 1 - 1 - D
figura 2.12.2
36
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
sottoinsieme delle n variabili essa e' parzialmente simmetrica; infine se la simmetria esiste
solo per un sottoinsieme della funzione essa e' detta simmetrica indipendente.
L'intercambiabilita' fra le variabili puo' esistere tra i valori nominali (x i e x j ), tra i valori
negati ( x i e x j ) oppure puo' essere mista ( x i e x j oppure x i e x j).
In definitiva una funzione di commutazione:
e' simmetrica rispetto le variabili x1j ,x 2j ,....,x nj se e solamente se rimane inalterata per
1 2 n
x ij i
xi se ji 0 x iji
xi se ji 1
Poiche' essa e' funzione di tre variabili sono sufficienti sei permutazioni per verificare se
la funzione rimane invariata. La forma che la funzione assume per ciascuna permutazione
delle variabili e' riportata in tabella 2.13.1
TABELLA 2.13.1
PERMUTAZIONE FUNZIONE
__ _ _ _ _
x x y y z z x.y.z + x.y.z + x.y.z + x.y.z
__ _ _ __
x y y z z x y.z.x
_ _ + _y.z.x
_ + y.z.x
_ _ + y.z.x
x y y x z z y.x.z + y.x.z + y.x.z + y.x.z
_ _ _ _ __
x z z y y z z.x.y
_ _ + _z.x.y
_ + _z.x.y + z.x.y
_
x x y z z y x.z.y + x.z.y + x.z.y + x.z.y
__ _ _ _ _
x z y y z x z.y.x + z.y.x + z.y.x + z.y.x
Risulta chiaro che la funzione rimane immutata per ciascuna permutazione e quindi essa
e', secondo la definizione, una funzione simmetrica.
La funzione
x .y. z x. y . z x.y.z (2.13.2)
e' ancora simmetrica, ma in questo caso le variabili di simmetria sono x , y , z . Cio' e'
particolarmente chiaro se si pone:
q z
37
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
x .y.q x. y .q x.y. q
CD
00 01 11 10
AB
00
Funzione parzialmente simmetrica
01 L'intercambiabilita' esiste solo tra
_
le variabili B, C, D
11 1 1
fig. 2.13.2
10 1
CD CD
00 01 11 10 00 01 11 10
AB AB
00 1 00 1
01 1 1 01 1 1
11 1 11 1
10 10
E=0 E=1
Funzione a simmetria indipendente
Nel sottoinsieme E = 0 esiste
_ un'intercambiabilita'
_ tra le variabili
A , B ,, C , D
mentre nel sottoinsieme E = 1 l'intercambiabilita' si ha tra le variabili
_ _
A,B , C , D
fig. 2.13.3
38
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
Teorema 1: Come e' gia' stato implicitamente detto, il valore di una funzione
simmetrica dipende solamente dal numero e non da quali variabili di simmetria valgono 1.
Formalmente tale proprieta' e' espressa dal seguente teorema.
Condizione necessaria e sufficiente affinche' una funzione di commutazione di n
variabili sia simmetrica e' che essa possa essere individuata da un insieme di interi {ak}
con 0< ak < n, in modo che se esattamente am (m = 1,2, ...., k) delle variabili valgono 1, la
funzione valga 1, mentre valga 0 negli altri casi.
La necessita' si dimostra supponendo che la funzione valga 1 quando le prime aj
variabili valgono 1, mentre valga 0 se altre aj variabili valgono 1. Si supponga ora di
permutare ciascuna delle aj variabili del primo insieme con una delle variabili del secondo
insieme. Considerando le ipotesi fatte, si ricava un valore differente e quindi una differente
funzione. La funzione pertanto non e' simmetrica.
La sufficienza si dimostra supponendo che la funzione valga 1 se e solamente se
esattamente am variabili valgono 1. Poiche' la funzione vale 1 per qualsiasi permutazione delle
variabili, purche' aj di esse valgano 1, qualsiasi sia am in {ak}, allora essa e' per definizione
simmetrica.
Si puo' allora esprimere qualunque funzione simmetrica nella forma:
n
S{a k}
(x1j1 , x 2j2 ,...., x njn )
dove x 1j1 , x 2j2 ,...., x njn sono le variabili di simmetria, n e' il numero di variabili e ciascun
elemento dell'insieme {ak} e' detto livello di simmetria. In pratica ciascun elemento ak indica
il numero di variabili che devono essere poste a 1 affinche' la funzione valga 1.
E' abbastanza evidente che i livelli di simmetria possono essere piu' d'uno. Ad esempio
la funzione (2.13.1) puo' essere scritta come:
3
S{1,3} (x, y, z)
Teorema 2: La somma di piu' funzioni simmetriche delle stesse variabili e' ancora
una funzione simmetrica avente come livelli di simmetria tutti i livelli delle funzioni
simmetriche di partenza.
j j j j j j
Sn (x 1 , x 2 ,...., x nn ) S n (x 1 , x 2 ,...., x nn )
{a 1 ,..., a j , b1 ,... b m } 1 2 {a 1 ,..., a j , c1 ,..., c n } 1 2
j j j
Sn (x 1 , x 2 ,...., x nn )
{a1 ,..., a j , b1 ,...,b m , c1 ,..., c n } 1 2
Ad esempio:
39
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
Teorema 3: Il prodotto di piu' funzioni simmetriche delle stesse variabili e' ancora
una funzione simmetrica i cui livelli di simmetria sono solamente quelli comuni a tutte le
funzioni di partenza.
j j j j j j
Sn (x 1 , x 22 ,...., x nn ).S n (x 1 , x 22 ,...., x nn )
{a 1 ,..., a j , b1 ,..., b m } 1 {a 1 ,..., a j , c1 ,..., c m } 1
j j j
Sn (x 1 , x 2 ,..., x nn )
{a 1 ,..., a j} 1 2
j j j j j j
Sn (x 1 , x 2 ,...., x nn ) Sn (x 1 , x 2 ,...., x nn )
{a 1 ,..., a k } 1 2 C{a 1 ,...,a k } 1 2
Ad esempio:
S6 (x , x ,...., x 6 ) S6 (x , x ,...., x 6 )
{1,2,3,6} 1 2 {0,4,5} 1 2
La funzione S{0,4,5}(x1,.....,x6) vale infatti 1 quando nessuna, quattro o cinque delle sue
variabili valgono 1.
Viceversa, nelle stesse condizioni e solamente in queste la S{1,2,3,6}(x1,.....,x6) vale 0 e
quindi la sua negazione coincide con la S{0,4,5}(x1 ,.....,x6).
40
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
j j j 1 j 1 j 1 j
Sn (x 1 , x 2 ,...., x nn ) Sn (x 1 , x 2 2 ,...., x n n )
{a 1 ,...,a k } 1 2 {n a 1 ,..., n a k } 1
Infatti se ai delle variabili valgono 1, allora n-ai delle stesse variabili valgono 0 e n-ai
delle variabili negate valgono 1. Ne segue che i due membri dell'espressione precedente sono
uguali per qualunque insieme di valori delle variabili.
Ad esempio:
d0 x 11 j1
. x 12 j2
.... x 1n jn
d1 x 1j1 . x 12 j2
... x 1n jn
x 11 j1
. x 2j2 ... x 1n jn
... x 11 j1
. x 12 j2
... x njn
...........
...........
dn x 1j1 . x 2j2 ... x njn
Px 4
S{1,3} x1, x 2 , x 3 , x 4
Allo stesso modo, la funzione che richiede la ripetizione del messaggio quando due o
piu' test di parita' abbiano dato esito negativo, e' ancora una funzione simmetrica.
41
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
F S4 (P , P , P , P )
{2,3,4} x y z w
Come si e' gia' detto, un qualsiasi scambio tra le variabili di simmetria lascia inalterata
una funzione simmetrica. D'altra parte, sulla base del teorema 5, una funzione simmetrica
possiede due set di variabili di simmetria. Ad esempio la funzione illustrata in fig. 2.13.1 e'
simmetrica rispetto alle variabili A,B,C,D. Tuttavia anche le variabili A,B,C,D presentano le
stesse proprieta', come e' immediato verificare e come discende dal fatto che la stessa
funzione puo' essere rappresentata come
f(A, B, C, D) S 34 (A, B, C, D) S14 (A, B, C, D) (2.13.4)
Questi due set di variabili rappresentano quelli che vengono chiamati centri della
simmetria e sono rappresentabili con il numero associato al relativo termine minimo (nel caso
in questione 13 e 2).
I centri di simmetria possono essere messi in evidenza riportando la funzione su una
qualsiasi mappa logica. Si ricava in tal caso una configurazione simmetrica e tutti gli elementi
della simmetria ricavata sono equidistanti dai due centri di simmetria.
La funzione riportata sulla mappa di Karnaugh in fig. 2.13.1 realizza una configurazione
evidentemente simmetrica rispetto ai termini minimi 13 e 2. Rispetto al centro 13 tutti i
quattro elementi hanno distanza unitaria, mentre rispetto al centro 2 la distanza e' 3.
Si noti che il livello di simmetria e' il complemento a n della distanza cosi' determinata.
a) PRIMO METODO.
Si supponga in un primo tempo che le variabili di simmetria siano tutte affermate e che
si abbia a che fare con una funzione simmetrica elementare.
Si sostituisca nei vari termini minimi componenti la funzione un 1 ad ogni variabile
affermata e uno 0 ad ogni variabile negata e si costruisca una matrice avente tante colonne
quante sono le variabili e tante righe quanti sono i termini minimi. Se la funzione e' una
funzione simmetrica elementare, dal teorema 6 si sa che il numero di termini e' pari alle
combinazioni di n elementi in classe k.
Accanto ad ogni riga si scriva il numero k di variabili affermate, cioe' il livello, mentre
sotto ogni colonna si riporti il valore del rapporto r tra il numero di 1 e di 0 nella colonna
stessa.
Se la funzione considerata e' simmetrica del tipo ipotizzato, k e r sono costanti
rispettivamente sulle righe e sulle colonne e deve essere rispettata la relazione
n .r k .(r 1) (2.14.1)
42
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
E' infatti questo il numero delle righe contenenti k variabili affermate che si possono
costruire fissando la posizione di una di esse e distribuendo gli altri k-1 simboli 1 sulle
rimanenti n-1 posizioni.
Il numero di zeri, C0 , presenti nella colonna, e' per gli stessi motivi
C0 ( n 1)
k
ed evidentemente
C1 C0 (n )
k
Si ottiene percio'
C1 ( n 1) k
r k 1 (2.14.2)
C0 ( n 1) n k
k
E' bene notare che tale rapporto coincide con quello tra il numero di 1 e di zeri presenti
in ciascuna riga. Manipolando opportunamente la (2.14.2) si ottiene finalmente:
n .r k .(r 1)
F x. y . z x .y. z x . y .z
0 1 1 2
1 0 1 2
1 1 0 2
2 2 2
43
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
1 1 0 0 2
1 0 1 0 2
0 1 1 0 2
1 0 0 1 2
0 1 0 1 2
0 0 1 1 2
1 1 1 0 3
1 1 0 1 3
1 0 1 1 3
0 1 1 1 3
6_ _6 6_ _6
4 4 4 4
1 1 0 0 2 1 1 1 0 3
1 0 1 0 2 1 1 0 1 3
0 1 1 0 2 1 0 1 1 3
1 0 0 1 2 0 1 1 1 3
0 1 0 1 2
0 0 1 1 2
3 3 3 3
1 1 1 1
f S4 (x, y, z, w)
{2,3}
Se qualcuna delle n variabili di simmetria e' negata, nella matrice evidentemente non
sono costanti ne' r ne' k. Ci sono pero' due soli valori di r (r' e r"), uno il reciproco dell'altro.
Negando le variabili delle colonne relative ad uno di questi due valori, i rapporti r' e r"
tornano uguali, si ha per ogni riga lo stesso livello k e vale la (2.14.1).
Si abbia da esempio:
44
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
f x . y . z x.y. z x. y .z
1 1 1 3
0 0 1 1
0 1 0 1
_
1 2 2
2
Negando le variabili della colonna in cui il rapporto r vale 1/2 si ottiene la matrice di
fig. 2.14.1.a, mentre con la negazione delle altre colonne si ottiene la matrice di fig. 2.14.1.b.
0 1 1 2 1 0 0 1
1 0 1 2 0 1 0 1
1 1 0 2 0 0 1 1
2 2 2 1
_ 1
_ 1
_
2 2 2
(a) (b)
figura 2.14.1
per ciascuna delle quali r e k sono costanti e vale la 2.14.1. Si puo' quindi concludere che
1 1 1 1
la quale, anche se separata nelle due sottomatrici, relativa ciascuna ad uno dei due possibili
livelli, porterebbe a concludere che la funzione non e' simmetrica. Il caso tuttavia e' dubbio in
quanto il numero delle variabili e' n = 4 e r e' costante.
45
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
0 1 0 1 0 0 0 0
1 0 0 1 0 1 1 2
1 1 1 3 1 0 1 2
1 1 1
2 2 _ _ _ 2
2 2 2
x=0 x=1
0 1 1 2 0 0 1 1
1 0 1 2 0 1 0 1
1 1 0 2 1 0 0 1
2 2 2 1_ 1_ _1
2 2 2
0 0 1 1 2
0 1 0 1 2
0 1 1 0 2
1 0 0 1 2
1 0 1 0 2
1 1 0 0 2
1 1 1 1
F S 42 (x, y, z, w )
b) SECONDO METODO.
Il metodo presentato e' stato originariamente sviluppato da E.R.Robbins dell'Universita'
di stato dell'Arizona e successivamente perfezionato da G.K. Kostopoulos delle Honeywell
inc.
E' un metodo abbastanza semplice, che presenta il vantaggio di richiedere unicamente
calcoli in notazione decimale.
46
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
dove n e' il numero di variabili, m il numero di termini minimi della funzione, e il numero di
termini minimi pari e k i numeri decimali associabili a ciascun termine minimo.
PASSO 3: Si calcola il numero di termini equidistanti dal centro che la funzione deve
avere per essere simmetrica. Essi devono essere in numero pari a:
n!
(n d)!d!
dove n e' il numero di variabili e d la distanza dal centro. Se tale relazione non e' rispettata la
funzione non e' simmetrica.
f(A, B, C, D) (7,11,13,14,15) m
e' simmetrica. Se cio' e' vero, si determinino centri, variabili di simmetria e distanze.
PASSO 1.
1 5.15 2. 7 11 13 14 15
Centro piu' vicino = 15 15
2 5 2.1
47
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
PASSO 2.
centro 15 = 23 + 22 + 21 + 20
termine minimo 7 = 22 + 21 + 20
termine minimo 11 = 23 + 21 + 20
termine minimo 13 = 23 + 22 + 20
termine minimo 14 = 23 + 22 + 21
termine minimo 15 = 23 + 22 + 21 + 20
PASSO 3.
Dal passo 2 si vede che vi sono quattro termini a distanza 1 dal centro e un termine a
distanza 0. Ora i termini a distanza 1 dal centro devono essere in numero di
n! 4!
n d !d! 3!1!
n! 4!
n d !d! 4!0!
PASSO 4.
In definitiva quindi la funzione assegnata puo' essere rappresentata nel modo seguente:
4 4
f(A, B, C, D) S{0,1} (A, B, C, D) S{3,4} (A, B, C, D)
f(x 1 , x 2 ,...., x n )
non e' totalmente simmetrica, rimane la possibilita' che per tale funzione esista una simmetria
parziale o una simmetria indipendente.
Per individuare tale simmetria si puo' usare la seguente procedura.
48
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
PASSO 1: si esegua la parte (a) e (b) di questo passo per un numero di volte pari a
n , scegliendo di volta in volta una differente variabile xk.
n 1
x k . g x i ; i 1, n; i k x k . h x 1 ; i 1, n; i k
x i ; i 1, n; i k
Se tutti i test eseguiti nel presente passo indicano che non esiste alcuna simmetria
parziale in n-1 variabili si prosegue con il
PASSO 2: Si esegua la parte (a) e (b) di questo passo un numero di volte pari a
n scegliendo di volta in volta una differente coppia di variabili xl e xk.
n 2
x l .x k . p x i ; i 1, n; i l; i k x l . x k . q x i ; i 1, n; i l; i k
x l .x k . r x i ; i 1, n; i l; i k x l . x k . s x i ; i 1, n; i l; i k
x i ; i 1, n; i l; i k
Se tutti i test eseguiti nel presente passo indicano che non esiste alcuna simmetria
parziale in n-2 variabili, si aggiunge una terza variabile all'insieme delle variabili di
partizione e si prosegue allo stesso modo fino a trovare una simmetria parziale o finche' il
numero delle variabili nelle funzioni che si ricavano dalla partizione non si riduce a 2.
Si consideri ad esempio la seguente funzione:
49
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
f x1 , x 2 , x 3 , x 4 1,2,7,8,9,13,14 m
Come prima cosa e' necessario verificare se tale funzione e' totalmente simmetrica. Si
ha:
0 0 0 1 1
0 0 1 0 1
0 1 1 1 3
1 0 0 0 1
1 0 0 1 2
1 1 0 1 3
1 1 1 0 3
4_ 3_ _3 _4
3 4 4 3
1 0 0 0 1
1 0 1 1 3
1 1 1 0 3
0 0 0 1 1
0 0 0 0 0
0 1 0 0 1
0 1 1 1 3
_3 _3 _3 _3
4 4 4 4
La matrice ottenuta va divisa in tre sottomatrici, ciascuna relativa ad uno dei possibili
livelli di simmetria.
Si ha:
0 0 0 0 0 1 0 0 0 1 1 0 1 1 3
0 0 0 1 1 1 1 1 0 3
0 0 0 0 0 1 0 0 1 0 1 1 1 3
1_ 1_ 0 _1 2 2 3 2
2 2 2
e si puo' quindi concludere che la funzione in esame non e' totalmente simmetrica. Si puo'
allora indagare se la funzione e' parzialmente simmetrica in n-1 = 3 variabili. E' necessario
quindi eseguire quattro volte il test di cui al punto 1 delle procedura piu' sopra illustrata,
escludendo di volta in volta una delle quattro variabili.
Si esegue la partizione
50
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
f x1, x 2 , x 3 , x 4 x 1. g x 2 , x 3 , x 4 x1 . h x 2 , x 3 , x 4
0 0 0 0
0 0 1 1
1 0 1 2
1 1 0 2
_1
1 1
3
La presenza in tale matrice di due valori r' e r" che non sono reciproci esclude la
simmetria totale di tale funzione rispetto alle variabili x2, x3, x 4.
Si passa allora alla partizione:
f x1, x 2 , x 3 , x 4 x 2 . g x1 , x 3 , x 4 x 2 . h x1 , x 3 , x 4
In questo caso si ha per la funzione g una situazione analoga alla precedente. Infatti:
0 0 1 1
0 1 0 1
1 0 0 1
1 0 1 2
1 1_ 1
3
f x1, x 2 , x 3 , x 4 x 3 . g x1 , x 2 , x 4 x 3 . h x1 , x 2 , x 4
0 0 1 1 0 0 0 0
1 0 0 1 0 1 1 2
1 0 1 2 1 1 0 2
1 1 1 3
_1 _1
1
_ 2
3 3 2 2
3
51
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î
0 1 1 2 0 1 0 1
1 1 0 2 0 0 1 1
1 1 1 3 1 0 0 1
1 0 1 2
_1 _1 _1
3 3 3
2 2 2
Pertanto ambedue le funzioni sono totalmente simmetriche rispetto allo stesso insieme
di variabili di simmetria. Di conseguenza la funzione assegnata e' parzialmente simmetrica
nelle variabili x1 ,x 2 ,x 4 o x1 , x 2 ,x 4 .
Se infine si considera la partizione
f x1, x 2 , x 3 , x 4 x 4 . g x1 , x 2 , x 3 x 4 . h x1 , x 2 , x 3
0 0 0 0
0 1 1 2
1 0 0 1
1 1 0 2
1_
1 1
3
e quindi tale funzione non e' totalmente simmetrica nelle variabili x1,x2,x3.
52
#
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
CAPITOLO III
CIRCUITI COMBINATORI
3.1) Introduzione.
Si chiamano combinatori quei circuiti il cui funzionamento, per quanto riguarda la
relazione ingresso uscita, e' descritto da una funzione logica; quelli cioe' per i quali gli ingressi
e le uscite possono assumere solo uno di due valori nettamente distinti ed in cui l'uscita,
istante per istante, e' funzione unicamente degli ingressi.
Circuitalmente una funzione logica si realizza usando componenti capaci di assumere
l'uno o l'altro di due stati diversi. Nei circuiti elettronici questi due stati sono realizzati
mediante due livelli caratteristici di tensione, detti livello alto (h) e livello basso (b).
L'effettiva corrispondenza tra h e b e le costanti logiche 0 e 1 e' convenzionale e va
precisata di volta in volta.
E' detta logica positiva la convenzione secondo la quale il valore 1 viene associato al
livello alto h; logica negativa quello in cui il valore 1 e' associato al livello basso b.
Si chiama circuito logico elementare o circuito porta ciascun circuito a n ingressi e
un'uscita il cui valore e' 1 in corrispondenza alle configurazioni degli ingressi descritte dalle
funzioni logiche OR, AND, NOT, NAND, NOR.
Indipendentemente dalla loro realizzazione circuitale e dal tipo di logica, i circuiti porta
vengono indicati graficamente con i simboli di fig. 3.1.1.
OR NAND
NOT
AND NOR
figura 3.1.1
Per i circuiti combinatori, come per ogni altro tipo di circuito, si pongono due problemi
opposti: da un lato quello dell'analisi, cioe' quello della descrizione del funzionamento del
circuito, una volta che sia nota la sua configurazione; dall'altro quello della sintesi, cioe' del
progetto di un circuito che realizzi una certa funzione logica, comunque descritta.
53
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
B1 B2
2 5
A
A1 2
1 4
A3 3 B3
figura 3.2.1
Si dice itinerario tra due elementi X e Y qualsiasi percorso che colleghi X e Y. Si dice
invece livello di un elemento X rispetto all'uscita B e a un determinato itinerario I il numero
j
di elementi, X compreso, disposti lungo l'itinerario I a partire dall'uscita Bj.
Livello di una variabile rispetto all'uscita Bj e all'itinerario I e' il numero di elementi
compresi tra il rispettivo ingresso e l'uscita Bj lungo l'itinerario I.
In fig. 3.2.2 sono riportati due esempi.
II livello
A
1
G1 I livello
A2
A3
A4 G2 G4 B
A5
A6
G3
A7
(a)
III livello
(b)
figura 3.2.2
Si noti che uno stesso elemento puo' avere piu' livelli secondo litinerario. Ad esempio
in fig. 3.2.2 (b) il gate G1 e' di III livello secondo l'itinerario G4, G3, G1 e di IV livello secondo
l'itinerario G4, G3, G2, G1.
54
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
X4 YB
X1
YA YA1
X2 YC Y
X3 YA2
X5
figura 3.3.1
Si ha:
yA x 1 . x 2 .x 3
y A1 x 1 . x 2 .x 3 x1 x2 x3
yA 2 x4
yB x 4 .yA x 1 . x 2 .x 3 . x 4
yC y A1 . y A 2 x 4 . x1 x2 x3
y yB yC x 5 x 1 . x 2 .x 3 . x 4 x 4 . x 1 x2 x3 x5
55
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x1
x2 x3
x4 x6 y
x5
figura 3.4.1
y x1/x 2 /x 3 /x 4 / x 4 /x 5 /x 6
Applicando ripetutamente il teorema di De Morgan si puo' passare alla forma AND-OR-
NOT.
y x1 . x 2 . x 3 . x 4 .x 4 . x 5 . x 6 x1 x 2 . x 3 . x 4 . x 4 x5 .x6
x1 x 2 . x 3 . x 4 x 4 . x 5 x 6
E' possibile pero' ricavare la y, nella forma di somma di prodotti, direttamente
dall'esame del circuito, quando si tengano presenti le proprieta' dell'operatore NAND. Si
esaminino i seguenti semplici circuiti (figura 3.4.2):
x1 x1
x2 y x2 y
_ _
y= x + x y = x .x 2
1 2 1
x1 x1
x2 x3 y x2
y
_ x3
y=x .x +x
1 2 3
x4
y = x .x + x .x
1 2 3 4
x1
x2 x3 y
x4
_ _ _
y = (x + x ) .x + x
1 2 3 4
figura 3.4.2
Dall'esame di questi circuiti e della loro funzione di uscita si deduce che in un circuito
NAND, comunque complesso, la funzione di uscita, nella forma di somma di prodotti, e' la
somma di tutte le variabili che entrano al primo livello, negate, piu' tanti termini quanti sono
56
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
gli itinerari I12 verso gli elementi del secondo livello; ogni itinerario I12 da' origine al prodotto
di tutte le variabili che entrano al secondo livello e di tanti fattori quanti sono gli itinerari I23
verso il terzo livello; ogni itinerario I23 origina la somma di tutte le variabili che entrano al
terzo livello, negate, piu' tanti termini quanti sono gli itinerari verso il quarto livello, e cosi'
via.
In definitiva:
A titolo di esempio si analizzi il circuito di fig. 3.4.3 secondo le regole teste' enunciate.
5 2
X1
X2 7 4 1 Y
6 3
X3
figura 3.4.3
Poiche' esistono due itinerari I12 ,I13 la funzione di uscita sara' la somma di due termini.
Di questi il primo, proveniente dal gate 2, sara' il prodotto di y6, y5 e y4.Il termine proveniente
da y6 sara' la somma di y7 e x2 (in quanto x2 entra su un livello dispari) e poiche' il gate 7 e' a
livello pari esso dara' origine al prodotto delle variabili su esso entranti. Procedendo in modo
analogo per tutti gli itinerari si ottiene:
y x2 x1 . x 2 . x1 x1 . x 2 . x 3 x1 . x 2 x 1 . x1 x2 x 2 . x1 x2
x3 . x3 x 1 . x 2 x 1 . x 2 x 1 .x 2
x 2 . x 1 . x1. x 2 . x 3 x 1 . x 2 x 1 . x 2 x 1 .x 2
x3 . x3 x 1 . x 2 x 1 . x 2 x 1 .x 2
x2 x1 . x 1 x2 x3 . x3 x 1 . x 2 x 1 . x 2 x 1 .x 2
x 3 x 1 . x 2 x 1 .x 2 . x 3 x1 x 2
x 1 .x 2 .x 3 x 1 . x 2 .x 3 x1 . x 3 x 1 . x 2 x1 . x 3
x 1 .x 2 .x 3 x1 . x 2 x1 . x 3 x 2 . x 3
57
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
X
3 4
X2
6 5 3 1 Y
X1 7
X2 2
figura 3.5.1
y x 2 x 2 . x1 . x1 x 3 . x1 x 1 .x 3 x 2 . x 1 . x1 x 3 . x 3 x 1 .x 3
x2 x1 . x3 . x1 x2 x 3 . x1 x 3
x1 . x 2 x1 . x 3 x 2 . x 3 . x1 x2 x3
x1 . x 2 .x 3 x1 .x 2 . x 3 x1. x 2 . x 3
1) Con la descrizione a parole del funzionamento del circuito. E' questa la forma
di assegnazione piu' comune, ma anche la piu' imprecisa. E' necessario porre
un'estrema attenzione per interpretare correttamente eventuali condizioni implicite
e l'esistenza di vincoli di qualsiasi natura. Dalla descrizione verbale e' necessario
passare alla tavola di verita' assegnando il valore della funzione per ognuna delle
2n configurazioni degli ingressi.
58
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
2) Con una vera e propria tavola di verita', che e' in definitiva l'effettivo punto di
partenza della sintesi e a cui tutti gli altri tipi di assegnazione devono essere
ricondotti.
3) Con un'espressione analitica, che e' il modo piu' conciso, anche se non univoco,
di descrivere il funzionamento di un circuito.
59
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x x x y y y y
1 2 3 1 2 3 4
0 0 0 0 0 0 0
0 0 1 0 0 1 1
0 1 0 0 1 1 0
0 1 1 1 0 0 1
1 0 0 1 1 0 0
1 0 1 1 1 1 1
1 1 0 - - - -
1 1 1 - - - -
figura 3.7.1
Poiche' il massimo numero di uscita e' 15, rappresentabile con 4 bit, sara' necessario
sintetizzare quattro funzioni logiche. Le relative tavole di verita' sono riportate in fig. 3.7.1
mentre in fig. 3.7.2 si hanno le corrispondenti mappe di Karnaugh.
x2 x3 x2 x3 x2 x3 x2 x3
x1 00 01 11 10 x1 00 01 11 10 x1 00 01 11 10 x1 00 01 11 10
0 1 0 1 0 1 1 0 1 1
1 1 1 1 1 1 1 1 1 1
y y y y
1 2 3 4
figura 3.7.2
y1 x1 x 2 . x 3
y2 x 1 x 2 .x 3
y3
x 2 . x 3 x 2 .x 3
y4 x3
cui corrisponde il circuito di fig. 3.7.3, ottenuto mettendo in comune tra le funzioni y2 e y3 il
termine x 2 .x 3 .
60
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x1
x2 y1
x3
x2 y2
_
x3
_
x2 y3
x3
y4
figura 3.7.3
Quale altro esempio si voglia sintetizzare un circuito con la stessa funzione di tra-
smissione di quello illustrato in fig. 3.7.4, ma possibilmente piu' economico.
_
x_
x13
x4
_
x_4
x
2
x3
y
x1
x4
_
x_
2
x
3
figura 3.7.4
y x1 x3 x4 x 2 . x 3 .x 4 x 1 . x 3 . x 4 x 2 .x 3 . x 4
x 1 . x 3 .x 4 x 2 . x 3 .x 4 x 1 . x 3 . x 4 x 2 .x 3 . x 4
y x 1 . x 3 x 2 .x 3 . x 4 x 2 . x 3 .x 4 (3.7.1)
e fattorizzando si ottiene:
61
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
y x 1 . x 3 x 2 . x 3 .x 4 x3.x 4 (3.7.2)
X X
1 2
X X 00 01 11 10
3 4
00
01 1 1
11 1 1
10 1 1 1
figura 3.7.5
Per la realizzazione della (3.7.1) sono sufficienti 4 gate, mentre per la (3.7.2) ne sono
necessari 6. Il circuito realizzato e' allora quello relativo all'espressione (3.7.1) ed e' riportato
in fig. 3.7.6
x1
x3
_
x4
_ y
_x2
x3
x4
figura 3.7.6
Si noti che negli esempi fatti si e' supposto di avere a disposizione all'ingresso del
circuito sia le variabili dirette che la loro negazione. Quando questa situazione non si verifica
anche il numero di invertitori va minimizzato. Ad esempio la funzione
y x1 x2 x3 x4
realizzabile con quattro invertitori e un gate OR, puo' essere realizzata molto piu' conve-
nientemente tenendo presente che:
y x1 x2 x3 x4 x1 . x 2 . x 3 . x 4
62
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
A causa della proprieta' associativa di somma e prodotto, quando qualcuno dei gate cui
si perviene nel corso del progetto ha un numero di ingressi eccessivamente elevato, lo si puo'
spezzare in due o piu' elementi dello stesso tipo, aumentando pero' il numero di livelli.
A B X A B
f x 1 , x 2 ,...., x n
f X F A ,B
allora si dice che F e formano una decomposizione in sconnessione semplice della funzione
f. L'insieme delle variabili A e' detto insieme delle variabili al contorno, mentre l'insieme B
e' quello delle variabili indipendenti. Il significato circuitale della decomposizione in
sconnessione semplice e' illustrato in fig. 3.8.1.
f
figura 3.8.1
63
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
f x1 , x 2 , x 3 , x 4 x 1 .x 2 . x 3 . x 4 x 1 . x 2 . x 3 .x 4 x 1 .x 2 .x 3 .x 4 x 1 . x 2 .x 3 . x 4
f x1, x 2 , x 3 , x 4 x1 . x 3 . x 2 . x 4 x 2 .x 4 x 1 .x 3 . x 2 .x 4 x2 .x4
x1 . x 3 . x 2 , x 4 x 1 .x 3 . x 2 , x 4
F x 2 , x 4 , x1 , x 3
con:
x2,x4 x2.x4 x 2 .x 4
che corrisponde alla partizione x1,x3 / x2,x4.
Si noti che nell'esempio fatto si e' semplicemente verificato che e' possibile ottenere una
sconnessione semplice nella forma x1,x3/x2,x4. L'obiettivo che ci si prefigge e' invece
individuare un metodo generale che permetta di determinare se esiste o meno una particolare
decomposizione.
Si consideri ad esempio la seguente funzione
f x1 , x 2 , x 3 , x 4 4,5,6,7,8,13,14,15 m
f x1, x 2 , x 3 , x 4 x 2 .x 3 . x 1 , x 4 x 2 . x 3 . x1, x 4 x 2 .x 3 . x 1 , x 4
x 2 . x 3 . x1, x 4 (3.8.1)
La cosa e' evidentemente possibile per qualsiasi funzione, sia essa decomponibile o
meno.
Si costruisca poi una speciale mappa della funzione, detta mappa di partizione (figura
3.8.2); essa e' semplicemente una mappa di Karnaugh in cui le variabili indipendenti sono
sistemate sulla verticale, mentre le variabili al contorno tarano lasse orizzontale.
Confrontando la mappa di partizione con l'equazione (3.8.1) si vede che la prima riga
corrisponde alla funzione (x1,x4), la seconda a (x1,x4),la terza a (x1,x4) e infine la quarta a
(x1,x4). Anche questa e' evidentemente un'osservazione del tutto generale, che si applica sia
alle funzioni decomponibili che a quelle non decomponibili.
Si osservi ora che, come affermato in precedenza, per avere la decomposizione in
sconnessione semplice la funzione F deve essere funzione di x 2 , x 3 e di una sola funzione
64
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x x4
1
x2 x3 00 01 11 10
0 1 9 8
00
0 0 0 1
2 3 11 10
01 0 0 0 0
6 7 15 14
11
1 1 1 1
4 5 13 12
10 1 1 1 0
figura 3.8.2
f x1, x 2 , x 3 , x 4 x 2 .x 3 . x 1 , x 4 x 2 .x 3 . x 1 , x 4 x2 .x3
F x1, x 4 , x 2 , x 3
con:
x1, x 4 x 1 .x 4
0 1
0 0
1 1
1 0
65
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
Il seguente teorema offre allora un semplice metodo per determinare se una mappa di
partizione corrisponde ad una decomposizione in sconnessione semplice.
TEOREMA: Una mappa di partizione corrisponde ad una decomposizione in
sconnessione semplice se e solo se la molteplicita' di colonna e'
minore o uguale a 2.
Infatti, come gia' e' stato detto, se una funzione e' decomponibile, i valori funzionali di
ciascuna riga della mappa di partizione devono essere o 0 o 1 o o . Le righe che
corrispondono alle costanti 0 e 1 contengono gli stessi valori in ciascuna colonna e quindi non
contribuiscono alla molteplicita'. D'altra parte se una colonna ha un 1 in una riga allora
deve contenere uno 0 nelle righe e un 1 nelle altre righe . Sono quindi possibili solo due
distinti tipi di colonna.
In modo simile si puo' dedurre che, se si assume una molteplicita' di colonna 2, si e' in
presenza di una decomposizione in sconnessione semplice.
Comunque sia, il lavoro da eseguire rimane notevole, poiche' e' necessario investigare su
tutte le possibili partizioni delle variabili in variabili al contorno e variabili indipendenti.
Si ricorre allora all'uso della carta di decomposizione, che altro non e' se non l'insieme
delle mappe di Karnaugh su cui sono riportate le posizioni dei termini minimi per ciascuna
possibile combinazione di variabili indipendenti e al contorno.
In fig. 3.8.3 e' riportata la carta di decomposizione per funzioni di quattro variabili. Per
usare la carta si cerchiano i termini minimi delle funzione su tutte le mappe e si individuano
quelle in cui la molteplicita' di colonna e' 2 o 1. Si noti che le carte di decomposizione di
dimensione 4x4 vanno utilizzate sia direttamente che trasposte. Ad esempio, la prima delle tre
mappe di fig. 3.8.3 e' rappresentativa sia della decomposizione F x 1 , x 2 , x 3 , x 4 , quando
usata in senso diretto, che della decomposizione F x 3 , x 4 , x 1 , x 2 , quando usata trasposta.
Le carte di dimensione 2x8 vanno invece esaminate solo direttamente poiche' la
decomposizione secondo una sola variabile al contorno e' una decomposizione banale.
Si esamini ad esempio la funzione:
f x1 , x 2 , x 3 , x 4 4,5,6,7,8,13,14,15 m
f x 2 /x1 , x 3 , x 4 x 2 . x1 .x 3 .x 4 x 2 . x1 .x 3 .x 4
x 2 . x1 , x 3 , x 4 x 2 . x1 , x 3 , x 4
f x 2 , x 3 /x 1 , x 4 x 2 . x 3 x 2 .x 3 . x 1 x4 x 2 .x 3 . x 1 x4
x 2 . x 3 x 2 .x 3 . x 1 , x 4 x 2 .x 3 . x 1 , x 4
f x 1 , x 2 /x 3 , x 4 x 1 . x 2 x 1 .x 2 . x 3 x 4 x1 . x 2 . x 3 x 4
x 1 . x 2 x 1 .x 2 . x 3 , x 4 x1 . x 2 . x 3 , x 4
66
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
f x 2 , x 4 /x 1 , x 3 x 2 . x 4 x 2 .x 4 . x 1 x3 x 2 .x 4 . x 1 x3
x 2 . x 4 x 2 .x 4 . x 1 , x 3 x 2 .x 4 . x 1 , x 3
x2 x1
0 1 0 1
x x 00 01 11 10 00 01 11 10 x3x4 00 01 11 10 00 01 11 10
34
0 0 1 3 2 4 5 7 6 0 0 1 3 2 8 9 11 10
x1 x2
1 8 9 11 10 12 13 15 14 1 4 5 7 6 12 13 15 14
x x1
1 0 1 0 1
x2x4 00 01 11 10 00 01 11 10 x2x3 00 01 11 10 00 01 11 10
0 0 1 5 4 8 9 13 12 0 0 2 6 4 8 10 14 12
x3 x4
1 2 3 7 6 10 11 15 14 1 1 3 7 5 9 11 15 13
x2x x x x x
3 3 4 2 4
00 01 11 10 00 01 11 10 x x 00 01 11 10
xx xx 13
1 4 1 2
00 0 2 6 4 00 0 1 3 2 00 0 1 5 4
01 1 3 7 5 01 4 5 7 6 01 2 3 7 6
11 9 11 15 13 11 12 13 15 14 11 10 11 15 14
10 8 10 14 12 10 8 9 11 10 10 8 9 13 12
figura 3.8.3
67
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
A1 A2 ..... Am X
f X F 1 A1 , 2 A 2 ,..., m Am
oppure
f X F 1 A1 , 2 A 2 ,..., m 1 Am 1 ,Am
f X F A ,B ,C
o, piu' in generale:
f X F A ,B , C ,D
68
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
f X F A, B , C G A , B, C
f X F A ,B ,C
con:
A ,B A, B
f x1, x 2 , x 3 , x 4 , x 5 5,10,11,14,17,21,26,30 m
In fig. 3.9.1 sono riportate due mappe di decomposizione della funzione; da esse si
deduce che esistono le due seguenti decomposizioni in sconnessione semplice:
x1 0 1 x2 0 1
x3 x 5 00 01 11 10 00 01 11 10 x 4 x5 00 01 11 10 00 01 11 10
00 0 1 5 4 16 17 21 20 00 0 1 3 2 8 9 11 10
01 2 3 7 6 18 19 23 22 01 4 5 7 6 12 13 15 14
x x x x
2 4 1 3
11 10 11 15 14 26 27 31 30 11 20 21 23 22 28 29 31 30
10 8 9 13 12 24 25 29 28 10 16 17 19 18 24 25 27 26
figura 3.9.1
f X F x1 , x 3 , x 5 , x 2 , x 4
f X G x1 , x 3 , x 2 , x 4 , x 5
A x1, x 3 B x5 C x2, x4
f X x 2 .x 4 . x 1 , x 3 , x 5 x2 .x4 . x1 , x 3 , x 5
con:
69
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x1 , x 3 , x 5 x1 . x 5 x 3 . x 5
x1 , x 3 , x 5 x 5 . x1 x 3
Questo esempio e' ovviamente banale, nel senso che non ci sarebbe bisogno di ricorrere
alle condizioni enunciate all'inizio per individuare la fattorizzazione eseguita sulla
x 1 , x 3 , x 5 . Tuttavia il teorema stesso puo' essere usato, indipendentemente dal numero di
variabili, per individuare, tramite la carta di decomposizione, quelle situazioni in cui le sotto-
funzioni possono essere di volta in volta ulteriormente decomposte.
f X F A ,B G B ,A
f X H A, B
La condizione teste' espressa sara' soddisfatta quando sulla carta di partizione della f(X)
la molteplicita' di colonna sara' non superiore a 2 sia per la carta diretta che per quella
trasposta.
Si consideri, ad esempio, la funzione di parita' di quattro variabili, la cui mappa di
Karnaugh e' riportata in fig. 3.9.2.
x x
1 2
00 01 11 10
x x
3 4
00 1 1
01 1 1
11 1 1
10
1 1
figura 3.9.2
La mappa di decomposizione della stessa funzione e' illustrata in fig. 3.9.3. Si puo'
notare immediatamente che la molteplicita' e' 2 sia per le colonne che per le righe.
70
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
f x 1 , x 2 /x 3 , x 4 x 1 .x 2 x1 . x 2 . x 3 , x 4 x 1 . x 2 x 1 .x 2 . x 3 , x 4
con:
x3, x4 x 3 . x 4 x 3 .x 4
x x
1 2
00 01 11 10
x x
3 4
00 0 4 12 8
01 1 5 13 9
11 3 7 15 11
10 2 6 14 10
figura 3.9.3
f x 3 , x 4 /x 1 , x 2 x 3 . x 4 x 3 .x 4 . x 1 , x 2 x 3 .x 4 x 3 . x 4 . x1 , x 2
con:
x1 , x 2 x 1 . x 2 x 1 .x 2
Il teorema enunciato indica l'esistenza di una decomposizione multipla:
f X H x3, x4 , x1 , x 2
Per determinare H si costruisca (figura 3.9.4) la mappa di Karnaugh della F , x 1 , x 2 . I
valori di x 1 , x 2 sono indicati in tale mappa, permettendo quindi l'immediata costruzione
della mappa della funzione H , .
x x
1 2
00 01 11 10 0
0 1 1 0 1
1 1 1 1 1
=0 =1 =0 =1
figura 3.9.4
Si ottiene pertanto:
71
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
H , . .
dove:
x3 x4
x1 x2
Anche in questo caso l'esempio e' banale, in quanto lo stesso risultato poteva essere
ottenuto per ispezione diretta. Tuttavia esso e' importante in quanto il metodo descritto si
estende facilmente a funzioni con qualsiasi numero di variabili.
Una decomposizione in sconnessione multipla puo' poi essere individuata anche nel
caso seguente.
Sia f(X) una funzione per la quale esistano le due seguenti decomposizioni in scon-
nessione semplice:
f X F A , B, C G B , A, C
f X H A, B ,C
x 0 1 x 0 1
3 1
x4 x5 00 01 11 10 00 01 11 10 x2 x5 00 01 11 10 00 01 11 10
00 0 1 3 2 4 5 7 6 00 0 1 9 8 16 17 25 24
01 8 9 11 10 12 13 15 14 01 2 3 11 10 18 19 27 26
x x x x4
1 2 3
11 24 25 27 26 28 29 31 30 11 6 7 15 14 22 23 31 30
10 16 17 19 18 20 21 23 22 10 4 5 13 12 20 21 29 28
figura 3.9.5
f x 3 , x 4 , x 5 /x 1 , x 2 x 3 .x 4 .x 5 x 3 . x 4 . x 5 x 3 .x 4 . x 5 x 3 . x 4 .x 5 . x 1 , x 2
x 3 .x 4 . x 5 x 3 . x 4 .x 5 x 3 .x 4 .x 5 x 3 . x 4 . x 5 . x1 , x 2
con:
72
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x1 , x 2 x 1 . x 2 x 1 .x 2
f x 1 , x 2 , x 5 /x 3 , x 4 x 1 .x 2 .x 5 x 1 . x 2 . x 5 x 1 .x 2 . x 5 x 1 . x 2 .x 5 . x 3 , x 4
x 1 . x 2 .x 5 x 1 .x 2 . x 5 x 1 .x 2 .x 5 x1 . x 2 . x 5 . x 3 , x 4
con:
x3, x4 x 3 . x 4 x 3 .x 4
A x1, x 2 B x3, x4 C x5
x
5
xx 00 01 11 10
3 4 x
5
00 1 1 =0 00 01 11 10
01 1 1 =1 0 1 1
11 1 1 =0 1 1 1
10 1 1 =1 H
(a) (b)
figura 3.9.6
H , , x5 .x 5 .x5 . .x5 .x 5 .
73
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
Definendo:
, x5 . x5 .x 5
si ottiene in definitiva:
f X . .
E' evidente che le funzioni possono essere decomposte in maniera non disgiuntiva; sono
stati sviluppati a tale proposito (ad esempio da Curtis "Design of Switching Circuits" Van
Nostrand, Princetown, N.J. 1962) dei metodi completamente generali. Tuttavia tali metodi
sono talmente complessi da risultare di dubbia utilita' pratica.
C'e' da rilevare che non e' conveniente tentare di decomporre una funzione a meno che
non ci sia la possibilita' di realizzare rilevanti economie. Molto spesso pero' funzioni, la cui
realizzazione a due livelli e' eccessivamente costosa, vengono decomposte in modo di-
sgiuntivo.
Dall'ultimo esempio fatto si puo' facilmente osservare che le due carte di decompo-
sizione di fig. 3.9.5 sono strutturalmente identiche. Infatti la funzione di disparita' presa in
esame e' una funzione simmetrica il cui valore dipende unicamente dal numero delle variabili
poste a 1.
La stessa proprieta', cioe' il fatto di avere carte di decomposizione strutturalmente
identiche, e' valida per tutte le funzioni simmetriche e quindi quanto visto in quest' ultimo
paragrafo si estende alla maggior parte, se non a tutte le funzioni simmetriche. Questa osser-
vazione suggerisce a sua volta che i metodi di decomposizione disgiuntiva sono in genere
adatti alla semplificazione delle funzioni simmetriche.
Quale ultima osservazione e' bene far notare che la decomposizione di funzioni con piu'
di sei variabili diviene di solito talmente complessa da rendere di difficile e pesante ap-
plicazione i metodi proposti.
74
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
y x1 . x 2 . x 3 . x 4 x 5 x2 x3 x 4 .x 5 x6 .x7
Il circuito che se ne ricava sara' evidentemente a 5 livelli, uno per la somma dei due
addendi, ed i successivi per la realizzazione dei due addendi stessi. Si ottiene il circuito di fig.
3.10.1.
x
2
x 2 _
x
3
x 4 6
4 5 x
1
8
_ x
_ x 7
7
x x
6
5
x
2
1 5 3
3
x
4
figura 3.10.1
Il circuito ottenuto puo' venir semplificato osservando che il blocco formato dai NAND
1 e 3 si ritrova all'ingresso del secondo ramo (NAND 2 e 4). Il blocco stesso puo' quindi
essere messo in comune tra i due rami, con un risparmio di due gates.
Ricorrendo ad una semplice osservazione si puo' usare la stessa procedura di sintesi
circuitale anche per le funzioni espresse in termini di prodotto di somme.
Si ha infatti:
f X i x 1 ,..., x n i x 1 ,..., x n 0
L'espressione che si ricava in tal modo e' nella forma di somma di prodotti e si puo'
allora realizzare il corrispondente circuito NAND.
Le variabili che entrano ai livelli dispari vanno ovviamente complementate. Si puo'
infine eliminare la costante logica 1 che risulta presente al primo livello in quanto:
x/ 1 x .1 x
Quale ultima osservazione si puo' notare che, se nel corso della sintesi qualcuno dei
NAND, cui si perviene, avesse un numero di ingressi superiore a quello ammissibile, esso non
e' semplicemente separabile in due elementi in cascata a causa delle non associativita'
dell'operatore NAND.
Ricordando che:
75
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x x
1 1
x
x 2
n x x
3 n
figura 3.10.2
y x1 . x 2 x3 x4 x2.x3 .x 4
y x1 . x 2 x3 x1 . x 4 x2 x3 .x3 .x 4
76
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
x
1
x
4
x1
x y
2
x3
x3
x4
figura 3.10.3
Quale ulteriore esempio si voglia eseguire la sintesi del circuito per la funzione:
y 0,1,4,6,7,9,12,15 m
Dalla minimizzazione tramite mappa di Karnaugh si puo' ottenere la forma a due livelli:
y x 1 .x 3 .x 4 x 2 .x 3 .x 4 x 2 .x 3 . x 4 x 2 . x 3 . x 4 x 1 . x 2 . x 3
e fattorizzando
y x 2 .x 3 . x 4 x 2 . x 3 . x 1 x4 x 3 .x 4 . x 1 x2
Tale espressione analitica da' luogo a una realizzazione circuitale che richiede sei
NAND e tre invertitori.
Partendo da una diversa forma minima a due livelli, ottenuta legando sulla mappa di
Karnaugh il termino minimo 0 con quello 1 anziche' con quello 4, si ottiene:
y x 1 .x 2 .x 3 x 1 . x 2 . x 3 x 2 .x 3 . x 4 x 2 . x 3 . x 4 x 2 .x 3 .x 4
y x 3 . x 1 .x 2 x2.x4 x 2 . x 1. x 3 x 3 . x 4 x 2 .x 3 .x 4
si puo' trasformare l'espressione nel modo che segue:
y x 2 x 3 . x1.x 2 x 2 . x 4 x1. x 3 x 3 . x 4 x 2 .x 3 .x 4
x 2 . x 3 x 3 . x 1 .x 2 x2.x4 x1. x 3 x 3 . x 4 x 2 .x 4 . x 2 x3
x 2 . x 3 x 3 . x 1 .x 2 x 2 . x 4 x1. x 2 . x 3 x 2 . x 3 . x 4 x 2 .x 4 . x 2 x3
x 2 . x 3 x 3 . x1 x4 . x2 x2 .x3 x 2 .x 4 . x 2 x3
ottenendo una forma che permette di realizzare il circuito con 7 NAND e un invertitore.
77
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
C'e' da osservare che gli artifici da usare non sono intuitivi e che non sempre si riesce a
diminuire il numero di gates. Ad esempio, per la funzione:
y x 1 .x 2 . x 3 x 1 .x 2 .x 3
non c'e' alcun artificio che sia in grado di eliminare gli invertitori di ingresso.
F
C 2
D
A
B
1
G
E
3
figura 3.11.1
Le due inversioni in serie possono dunque essere cancellate, raggruppando gli ingressi
del gate 1 e riportandoli all'ingresso del gate 2 e contemporaneamente eliminando l'invertitore.
Per l'esempio in esame si ottiene il circuito di fig. 3.11.2.
C
D
F
A
B G
E
figura 3.11.2
78
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
y x1 x 2 . x1 x 2 . x 3
_
x
1
x
2
y
x
x 1
_2
x
3
figura 3.12.1
Con elementi NOR si possono realizzare anche circuiti la cui funzione di trasmissione
sia espressa in termini di somma di prodotti. Infatti, tenendo presente che:
y i x 1 ,..., x n i x 1 ,..., x n .1
dove le i sono funzioni realizzate tramite prodotti logici, e tenendo altresi' presente
che le variabili che entrano ai livelli dispari vanno negate, si puo' realizzare un circuito nel
quale al primo livello si avra' un NOR con funzioni unicamente di invertitore. Infatti:
x 0 x 0 x
79
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
A B S R
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
S A. B A .B
R A.B
In fig. 3.13.1 (a) e (b) sono riportati i circuiti realizzati rispettivamente in logica NAND
e in logica AND-OR-NOT.
_ _
A A
B B
S S
A A
_ _
B B
A
R A
R
B
B
(b)
(a)
figura 3.13.1
Per la realizzazione mediante elementi NOR e' invece conveniente scrivere la funzione
nella forma:
S A B. A B
A
B
S
_
A
_
R
B
figura 3.13.2
80
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
Si sono in tal modo ottenute tre diverse realizzazioni dello stesso circuito, che e'
conosciuto sotto il nome di semisommatore binario, in quanto puo' essere usato solamente per
i bit meno significativi dei due numeri da sommare.
Se ne deduce che il circuito realizzato non e' direttamente utilizzabile per la somma
degli altri ranghi, per i quali e' necessario un circuito sommatore a tre ingressi, i due bit, cifre
dei numeri da sommare, ed il riporto dal rango precedente.
Il problema puo' essere risolto secondo due vie diverse. La prima prevede la sintesi di un
circuito sommatore completo (o full-adder), la seconda un'opportuna interconnessione di due
semisommatori come e' illustrato in fig. 3.13.3.
a b a b a b
0 0 n n
r"
r s' 2
1 1
s , s s
0 r 1 n
2
r
2
figura 3.13.3
81
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
y3 0,1,4,5,9,10,11,13,14,15 m
x1 x x1 x x1 x
2 2 2
x x 00 01 11 10 x x 00 01 11 10 x x 00 01 11 10
3 4 3 4 3 4
00 1 1 00 1 1 00 1 1
01 01 1 1 01 1 1 1 1
11 1 1 11 1 1 1 11 1 1
10 1 1 1 10 1 1 10 1 1
figura 3.14.1
y1 x 1 .x 3 .x 4 x 2 . x 3 x 1 . x 3 .x 4
y2 x 2 x1 . x 3 . x 4
y3 x 1 .x 3 x3.x 4 x1 . x 3
y1 x 1 .x 3 .x 4 x 2 . x 3 x 1 . x 3 .x 4
y2 x2 x1 . x 3 . x 4
y3 x 3 . x4 x1 .x 3 .x 4 x1 .x 3 .x 4 x1 .x 3 .x 4
82
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
che, sempre in termini di AND-OR-NOT, richiedono solamente otto gates per la loro realiz-
zazione.
0 0 0 0 0 0 0
0 0 0 1 1 0 1
0 0 1 0 0 0 0
0 0 1 1 0 0 0
0 1 0 0 0 1 1
0 1 0 1 0 1 1
0 1 1 0 1 1 0
0 1 1 1 1 1 0
1 0 0 0 0 0 0
1 0 0 1 1 0 1
1 0 1 0 0 1 1
1 0 1 1 1 0 1
1 1 0 0 0 1 1
1 1 0 1 0 1 1
1 1 1 0 1 1 1
1 1 1 1 1 1 1
83
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
0011 y1 - -
0001 y1 y2 -
001 y1 - -
0011 y1 - -
0001 - y2 y3
1,5 0 - 0 1 - - y
3
A ... 1,9 - 0 0 1 y - y
1 3
4,6 0 1 - 0 - y -
2
4,5 0 1 0 - - y y
2 3
4,12 - 1 0 0 - y y
2 3
6,7 0 1 1 - y y -
1 2
6,14 - 1 1 0 y y -
1 2
5,7 0 1 - 1 - y -
2
5,13 - 1 0 1 - y y
2 3
12,13 1 1 0 - - y y
2 3
12,14 1 1 - 0 - y y
2 3
B ... 10,14 1 - 1 0 - y y
2 3
10,11 1 0 1 - - - y
3
9,13 1 - 0 1 - - y
3
C ... 9,11 1 0 - 1 y - y
1 3
13,15 1 1 - 1 - y y
2 3
14,15 1 1 1 - y y y
1 2 3
D ... 11,15 1 - 1 1 y - y
1 3
7,15 - 1 1 1 y y -
1 2
84
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
E ... 1,5,9,13 - - 0 1 - - y
3
4,5,6,7 0 1 - - - y -
2
F ... 4,5,12,13 - 1 0 - - y y
2 3
4,6,12,14 - 1 - 0 - y -
2
G ... 6,7,14,15 - 1 1 - y y -
1 2
5,7,13,15 - 1 - 1 - y -
2
H ... 12,13,14,15 1 1 - - - y y
2 3
I ... 10,11,14,15 1 - 1 - - - y
3
L ... 9,11,13,15 1 - - 1 - - y
3
M ... 4,5,6,7,12,13,14,15 - 1 - - - y -
2
Si noti che nel passaggio dalla seconda alla terza tabella il termine 1,9, pur dando luogo
assieme al termine 5,13 all'implicante 1,5,9,13 della terza tabella, deve purtuttavia essere
considerato un implicante primo per la y1, in quanto la semplificazione citata ha luogo per la
sola y3.
y y y
1 2 3
A
B
C
D
E
F
G
H
I
L
M
1 6 7 9 11 14 15 4 5 6 7 10 12 13 14 15 1 4 5 9 10 11 12 13 14 15
figura 3.14.1
85
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
y1 G A D x 2 . x 3 x 2 .x 3 . x 4 x 1 . x 3 . x 4
y2 G F B x 2 . x 3 x 2 .x 3 x 1 . x 3 .x 4
y3 D F B A x 1 . x 3 . x 4 x 2 .x 3 x 1 . x 3 .x 4 x 2 .x 3 . x 4
x
2
x
_3 y
1
x
_ 2
x
3
x
4
x
1
x y
3 3
x
4
x
1
_x 3
x
4
x y
_2 2
x
3
figura 3.14.2
x
1
x
2
_ _ _ _
x x x x x x x x
1 2 1 2 1 2 1 2
figura 3.15.1
86
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
_ _ _ _
x x x x
1 _2 1 2
+V
x x _
_1 2 x x
x x 1 2
1 2 _
x x
x x 1 2
1 2
x x
1 2
_ _
x x x x x x
1 2 1 1 2 2
(a) (b)
figura 3.15.2
Le matrici sono circuiti particolarmente semplici e, malgrado che il loro uso sia sempre
meno diffuso, sopravvivono al giorno d'oggi in particolare nei circuiti di indirizzamento,
presentando quale inconveniente il fatto che all'aumentare del numero degli ingressi il numero
dei diodi necessari, pari a n.2n, diviene eccessivo. Montaggi piu' economici possono essere
ottenuti utilizzando la tecnica delle matrici multiple.
Si tenga presente che quanto verra' esposto nei paragrafi successivi con riferimento al
numero di diodi necessari a realizzare un selettore con la tecnica delle matrici rimane pie-
namente valido anche se la realizzazione non e' a matrice, purche' ci si riferisca al numero di
ingressi anziche' al numero di diodi.
_ _
x x x x
1 1 2 2
_ _
x x x x
3 3 4 4
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
figura 3.15.3
87
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
ognuno di tali gruppi in ulteriori altri due il piu' possibile uguali fino ad ottenere gruppi di non
piu' di tre variabili.
In fig. 3.15.4 e' riportata la ripartizione ottima per una matrice di 7 variabili. Sono in tal
caso necessari 328 diodi in luogo degli 896 (7.27) necessari per la realizzazione a matrice
semplice.
128 USCITE
SOTTOMATRICE DI COMBINAZIONE
256 DIODI
x x x
SOTTOMATRICE SOTTOMATRICE 5 6 7
DI DUE VARIABILI DI DUE VARIABILI
8 DIODI 8 DIODI
x x figura 3.15.4
x1 x2 3 4
y x1. x 2 . x 5 x 3
_
x x _
1 3
_ x x x x
M5 M5 x x x
1 2 3 5
1 2 5
_
M3 M2 x x
1 3
M3 M2
x x x x
1 x 3 4 5
2
figura 3.15.5
88
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
_ _
x x
M _1 3 x x x x
5 1 2 3 5
x x x
1 2 5
M3 _
M2 x x
1 3
x x x x
2 x 5 1 3
4
figura 3.15.6
Si vede immediatamente che e' conveniente ripartire le variabili in modo che i termini
da eliminare facciano sentire la loro influenza il piu' possibile in prossimita' degli ingressi e
compaiano nelle sottomatrici di ingresso a massimo numero di variabili.
89
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
A B C D S S S
1 2 3
0 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 1 0 0 0 1
0 0 1 1 0 1 0
0 1 0 0 0 0 1
0 1 0 1 0 1 0
0 1 1 0 0 1 0
0 1 1 1 0 1 1
1 0 0 0 0 0 1
1 0 0 1 0 1 0
1 0 1 0 0 1 0
1 0 1 1 0 1 1
1 1 0 0 0 1 0
1 1 0 1 0 1 1
1 1 1 0 0 1 1
1 1 1 1 1 0 0
Si ricava pertanto:
S1 A .B.C. D S 44 A, B, C, D
4
S
4
4
S
4 3
S
4
4
A S 4
Sommatore S1 14
0,2,4 S
S 2
B binario 2,3
S
2
4
C S
1,3 4
S S
3 0,1,4
D
4
S
1
4
S
0
4
S
0,1,2,3
figura 3.16.1
90
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
ESEMPIO 1
Si voglia progettare il circuito che realizza la seguente funzione simmetrica:
f A, B, C, D, E, F S56 A, B, C, D, E, F
f A, B, C, D, E, F A . B . C . D . E .F A . B . C . D .E. F A . B . C .D. E . F
A . B .C. D . E . F A .B. C . D . E . F A. B . C . D . E . F
(A . B . C . D . E A . B . C . D . F A . B . C . E . F A . B . D . E . F
A . C . D . E . F B . C . D . E . F). A B C D E F
[B . C . A . D . E A . D . F B . E . A . C . F A . D . F
E . F . A . C . D B . C . D ].A . B . C . D . E . F
f A, B, C, D, E, F S64,5,6 A, B, C, D, E, F .S61,3,5 A, B, C, D, E, F
La realizzazione ottenuta per mezzo di sommatori binari e' riportata in fig. 3.16.2.
S 6
4,5,6
c
s
Sommatore
S6
binario 2,3,6
c c c
A B C D E F
figura 3.16.2
ESEMPIO 2
Si progetti il circuito che realizza la seguente funzione simmetrica:
91
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í
f A, B, C, D, E S53 A, B, C, D, E
Le tecniche di progetto tradizionali conducono, nella migliore delle ipotesi, ad un
circuito che impiega 13 gates.
La funzione data puo' tuttavia essere anche scritta come :
5
s S 2,3
Semisommatore
binario
c
Semisommatore 5
c binario S3
c
_ s s
Sommatore Sommatore
A binario binario 5
S 1,3,5
_ _
B C D E
figura 3.16.3
92
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
CAPITOLO IV
CENNI SULLE MACCHINE SEQUENZIALI
M Q, I, W, , U
i1 i2
i1
q /0 q /1
1 2
i2
i1
q3 / 1
figura 4.1.1
Nel modello di Mealy le uscite dipendono invece sia dagli stati che dagli ingressi; i
segmenti orientati che uniscono i nodi rappresentativi degli stati realizzano quindi sia la
mappa di transizione che la mappa delle uscite. In fig. 4.1.2 e' riportato il diagramma degli
stati secondo il modello di Mealy della stessa macchina di fig. 4.1.1.
93
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
i /1
i /0 q 2 q i /1
1 1 2 1
i /0 i /1
2
1
q
3
figura 4.1.2
Una terza rappresentazione molto usata e' la tavola di flusso di Huffman, cioe' una
rappresentazione tabellare con tante righe quanti sono gli stati e tante colonne quanti sono gli
ingressi. La generica casella, di coordinate q e i contiene lo stato q' e l'uscita w' ottenuta ap-
plicando l'ingresso i allo stato q. In fig. 4.1.3 e' riportata la tavola di flusso della macchina di
fig. 4.1.1 e 4.1.2.
ingresso
Stato i1 i2
q q1 / 0 q2/ 1
1
q2 q2 / 1 q3/ 1
q3 q1 / 0 - /-
figura 4.1.3
i / 1
2
i1 i i1 / 1
q1/ 0 q2/1 2
q q2
1
i2 i / -
i
1 i / 0
2 i / -
i 1
2 2
i2 / -
i2
q /1 q /- q
4 i 3 4 q3
1 i /1
1
figura 4.1.4
Non altrettanto semplice e' il passaggio dal diagramma secondo Mealy a quello secondo
Moore essendo in quest'ultimo l'uscita legata allo stato.
E' infatti necessario costruire un grafo con tanti nodi quanti sono gli stati raggiunti con
diverso valore dell'uscita dai segmenti orientati, realizzandolo in modo che conservi le
relazioni e U del grafo originario.
94
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
Stato i1 i2
q1 q4 /1 q3 /1
q2 q1 /0 -
q3 q4 /0 -
q4 q2 /0 q3 /1
figura 4.1.5
E' immediato verificare che la stessa sequenza di ingressi applicata alle due macchine
produce la stessa sequenza di uscite.
Stato i1 i2
q1 /0 q41 q3
q2 /0 q1 -
q3 /1 q40 -
q40 /0 q2 q3
q41 /1 q2 q3
figura 4.1.6
E' da notare che i diagrammi di stato possono essere costruiti a partire da una de-
scrizione verbale del comportamento voluto per la macchina.
Si voglia ad esempio costruire il diagramma di stato della macchina avente come
ingressi i bit di ordine j di due numeri binari A e B da sommare; la macchina possa esistere
solamente in due stati q0 e q1 che rappresentano il valore assunto dal riporto della somma al
rango j-1.
11/1
00\0 11/0
q0 q1 10/0
01/1
00/1
10/1 01/0
figura 4.1.7
Il diagramma secondo Mealy si ricava in modo banale ed e' illustrato in fig. 4.1.7.
mentre il diagramma secondo Moore, notevolmente piu' complesso e' riportato in fig. 4.1.8.
95
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
00 10
11
q /0 q /0 01
00 10
11
01 10 00
00 01 10 11
00
01 q /1 q /1
01 11
10 11
figura 4.1.8
0 q /010
q /001 0
1 2
1 1
q /100
3
(a)
0/001 1/010
q q 0/010
1 2
1/001 1/100
q
3
0/100
(b)
figura 4.1.9
96
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
i2 i3
i2
i3
i1 qj
i1 qj
i1
i2 i1 i2
(a) (b)
figura 4.2.1
3) Una macchina sequenziale e' detta asincrona se ogni suo stato e' stabile, sincrona se
esiste almeno uno stato instabile. Ne deriva che una macchina asincrona puo' cambiare di stato
solo in conseguenza di una variazione degli ingressi; in definitiva una sequenza di ingressi ij,
ij, ik, ik, ik, im, im ha lo stesso effetto della sequenza ij, ik, im e produce la stessa sequenza
d'uscita.
4) Una sequenza di ingresso i1, i2,....., ip si dice applicabile alla macchina M nello stato
q, se per ogni ij su qj (1 < j < p-1) esiste lo stato qj+1 e se e' definita l'uscita finale w(qp,ip).
5) Una macchina sequenziale M' si dice equivalente a una macchina sequenziale M se
tutte le sequenze di ingresso i applicabili ad uno stato q di M sono applicabili ad uno stato q'
di M' e producono la stessa uscita finale w' = w, qualsiasi sia i. In altre parole ogni sequenza
di ingresso produce in M' una sequenza di uscite coincidente con la w di M almeno in tutti i
valori specificati di quest'ultima.Si noti che, secondo quanto appena definito, l'equivalenza tra
due macchine sequenziali non gode della proprieta' di simmetria. Infatti, se una macchina M' a
partire dallo stato generico q' sotto la sequenza i1,...., in produce le uscite w1, w2, -,...., wn e la
macchina M sotto la stessa sequenza produce a partire da q la sequenza w1, w2, w3,...., wn
allora la macchina M e' equivalente a M', mentre non e' vero il contrario.
0/1
1 2 1/1
1/1 0/1 0/1
1' 2'
1/0 1/0
0/1
3
figura 4.2.2
In fig. 4.2.2 e' riportata una macchina M' equivalente a una macchina M. Infatti in M' le
sequenze di uscita ottenibili a partire dagli stati 1' e 2' sono uguali a quelle ottenibili
applicando le stesse sequenze di ingresso alla coppia di stati 1-2 e 3 di M rispettivamente.
97
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
6) Si dice macchina minima equivalente a una macchina M quella tra le macchine M'
con il minimo numero di stati. Il procedimento di ricerca della macchina minima prende il
nome di minimizzazione degli stati di M.
Se le condizioni enunciate sono realizzate, allora la macchina M, una volta giunta nello
stato qj, generera' per ogni sequenza di ingresso una sequenza di uscita i cui elementi, se
specificati, coincidono con quelli generati da i a partire da qk . Si dice allora che l'evoluzione
di M a partire da qk e' non in contrasto con l'evoluzione a partire da qj.
Si tenga ora presente che per le macchine complete ogni sequenza e' applicabile e genera
sequenze d'uscita completamente specificate. Per queste macchine quindi, se le condizioni 1 e
2 sussistono per qk in relazione a qj, esse devono sussistere anche per qj nei confronti di qk.
Dal punto di vista delle uscite percio' l' evoluzione di M a partire da qj e qk sono indistinguibili
e gli stati qj e qk si dicono equivalenti.
(qj = qk)
E' possibile allora considerare qj e qk un unico stato qe, fusione dei due stati originali,
se si fa in modo che tutti gli ingressi che portavano M in qj e/o qk la portino ora nel nuovo
stato qe. In pratica cio' si puo' fare cancellando nella tavola di flusso la riga qk e sostituendo
ovunque qj a qk . Il discorso vale ovviamente per qualunque numero di stati. Si puo'
dimostrare che il procedimento di fusione degli stati e' univoco e porta ad una partizione degli
stati stessi in classi di stati equivalenti.
Per le macchine incomplete l'esistenza di condizioni non specificate in qualche sequenza
di uscita fa si' che le condizioni 1 e 2 possano essere valide per qj nei confronti di qk, ma non
viceversa. Possono infatti esistere sequenze di ingresso applicabili a qk ma non a qj. Si parla
allora di stati compatibili (qj qk) e non di stati equivalenti. Tuttavia, anche se l'evoluzione di
M a partire da qj e' diversa da quella che parte da qk, tali stati possono ancora essere fusi allo
stesso modo illustrato in precedenza, assegnando alle uscite non specificate della w(qj) i
valori specificati della w(qk).
Si noti infine che se per una macchina
qj = qk e qj = qe allora qk = qe
e i tre stati qj, qk, qe possono comunque essere fusi in un unico stato.
98
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
Se viceversa
qj qk e qj qe
qk qe
Se qk non e' compatibile con qe i tre stati non possono essere fusi in un unico stato, ma
qj va fuso con qk e/o qe. La minimizzazione delle macchine incomplete non porta quindi ad
un'unica soluzione, ma da' di solito la possibilita' di scelta tra un certo numero di risultati
diversi.
stato i1 i2 stato i1 i2
figura 4.4.1
Una volta che gli stati doppi siano stati eliminati inizia la vera e propria ricerca degli
stati compatibili (o equivalenti), che vengono individuati a coppie per esclusione di quelle
formate da stati non compatibili. Si inizia infatti escludendo le coppie qm,qp che hanno uscite
diverse per almeno un ingresso i.
Infatti le coppie di stati equivalenti, se esistono, saranno un sottoinsieme delle coppie qh,
qm per cui si ha:
w(qh,i) = w(qm,i)
qualunque sia i. Le coppie di stati per le quali vale la relazione appena scritta vengono dette
compatibili rispetto all'uscita (qh qm).
Individuate tali coppie si costruisce una tabella con tante righe quante sono le coppie
compatibili rispetto all'uscita e tante colonne quanti sono gli ingressi. In ogni casella vengono
99
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
riportate le coppie di stati verso cui evolve M per effetto del rispettivo ingresso a partire dalla
coppia di stati che identifica la riga.
Si esamina successivamente tale tabella. Se in una casella di coordinate generiche qj, qk,
i si riscontra la presenza di una coppia di stati non compatibile rispetto all'uscita, allora la
coppia qj, qk non e' formata da stati equivalenti poiche' per lo stesso ingresso i essi evolvono
verso stati con uscita diversa.
la riga qj, qk va allora cancellata dalla tabella assieme a tutte le coppie ql, qm che
evolvono verso qj, qk. Si continua in tal modo finche' non e' piu' possibile cancellare alcuna
coppia.
A questo punto le coppie che rimangono sono formate da stati compatibili (equivalenti).
Infatti ognuna di tali coppie, evolvendo verso coppie di stati a loro volta compatibili rispetto
all'uscita, realizza sequenze di uscita compatibili per qualsiasi sequenza di ingressi applicata.
Quale ultimo passo si cerca di mettere in evidenza relazioni di mutua compatibilita' tra
le coppie, formando gruppi di n.(n-1)/2 coppie da un insieme di n stati, con n massimo, in
modo che in ciascuno di tali gruppi ogni stato sia legato in coppia con i rimanenti n-1.
Cio' fatto si possono distribuire gli stati di M in s sottoinsiemi S1, S2,......,Ss con s
minimo, in modo che
ESEMPIO 1
Sia assegnata la seguente macchina sequenziale:
Stato i1 i2 i3
1 4/00 4/11 4/11
2 5/01 4/10 2/01
3 4/00 5/00 6/00
4 5/01 6/10 2/01
5 6/00 6/11 6/11
6 1/01 6/10 2/01
La macchina e' completa e non esistono stati doppi. Il diagramma di stato di tale
macchina e' riportato in fig. 4.4.2. Le coppie di stati -compatibili , cioe' compatibili rispetto
all'uscita, sono le coppie 1,5 2,4 2,6 e 4,6. La tabella di evoluzione delle coppie e' la seguente:
100
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
Stato i i i
1 2 3
Nessuna riga della tabella va cancellata in quanto ciascuna coppia per qualsiasi ingresso
evolve verso una coppia a sua volta a-compatibile.
i1 /01
i3 /01
i3 /01
1 2 3
i3 /11 i1 /00 i2 /00
i3 /01
i2 /11 i2 /10 i1 /01 i3 /00
i 2/11
i1 /01 i1 /00
4 5 i3 /11 6
i2 /10
i2 /10
i1 /00
figura 4.4.2
Tutte le coppie della tabella sono quindi coppie di stati equivalenti. Esiste peraltro una
relazione di mutua compatibilita' tra le coppie:
e quindi i tre stati 2,4,6 possono essere fusi in un unico stato. Nell'esempio considerato quindi
gli stati della macchina M di partenza possono essere distribuiti nei tre sottoinsiemi:
Fondendo ora gli stati di ciascun sottoinsieme in un unico stato, si ottiene la macchina
minima M', la cui tavola di flusso e':
101
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
i 2 /10
i3 /11
i 1/00
1' 2' i 3 /01
i 2 /11
i 1 /01
3'
figura 4.4.3
ESEMPIO 2
Minimizzare gli stati della macchina completa, la cui tavola di flusso e':
Stato i1 i2 i3 i4
1 1/4 4/1 6/3 6/4
2 6/3 4/3 1/1 7/4
3 3/3 6/2 4/4 8/1
4 6/3 4/3 5/1 3/4
5 1/4 4/1 6/3 6/4
6 3/1 5/3 6/2 3/3
7 7/3 6/2 2/4 8/1
8 1/3 8/2 4/4 6/1
Lo stato 5 e' doppio dello stato 1 e pertanto puo' venir eliminato. Le coppie di stati -
compatibili sono:
Coppie di stati i i i i
1 2 3 4
figura 4.4.4
102
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
a) La coppia di stati 3,8 evolve verso le coppie non -compatibili 3,1 e 6,8 e
va pertanto eliminata.
b) La coppia 7,8 evolve verso le coppie non -compatibili 7,1 e 6,8 e quindi
va anch'essa eliminata.
ESEMPIO 3
Si minimizzi la seguente macchina incompleta.
Stati i i
1 2
1 1/- 2/1
2 3/1 1/1
3 2/0 1/1
Non vi e' alcun stato doppio, mentre le coppie -compatibili sono la 1,2 e la 1,3. Si ha:
Coppie di stati i i
1 2
Ambedue le coppie di tabella sono coppie di stati compatibili. L'unico modo per avere
una macchina minima M' a due stati e' quello di formare i sottoinsiemi non disgiunti:
{1,2} {1,3}
103
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
Si noti che, mentre la macchina di partenza e' una macchina incompleta, la macchina
minima M' risulta completamente specificata.
ESEMPIO 4
Si voglia minimizzare la seguente macchina sequenziale:
Stati i1 i2 i3 i4
1 -/- 5/0 4/1 3/1
2 3/- 2/1 4/- 1/0
3 6/1 5/1 1/1 3/0
4 -/- 6/0 -/- 6/1
5 5/1 1/0 -/- 3/1
6 5/1 -/- 4/1 -/-
Non vi e' alcun stato doppio, mentre le coppie compatibili rispetto all'uscita si possono
individuare in:
Coppie di stati i1 i2 i3 i4
1,4 -,- 5,6 4,- 3,6
1,5 -,5 5,1 4,- 3,3
1,6 -,5 5,- 4,4 3,-
2,3 3,6 2,5 4,1 1,3
2,6 3,5 2,- 4,4 1,-
3,6 6,5 5,- 1,4 3,-
4,5 -,5 6,1 -/- 6,3
4,6 -,5 6,- -,4 6,-
5,6 5,5 1,- -,4 3,-
figura 4.4.5
La coppia 2,3 va eliminata in quanto evolve verso le coppie 2,5 e 1,3, formate da stati
non compatibili rispetto all'uscita. La coppia 2,6 evolve verso la coppia 3,5 formata da stati
non compatibili e va quindi anch'essa eliminata.
104
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì
Tra le coppie:
puo' essere messa in luce una relazione di mutua compatibilita'. Gli stati 1,4,5,6 possono
pertanto essere fusi in un unico stato.
La macchina minima che si ricava e' quindi una macchina a tre stati con la seguente
tavola di flusso:
Si noti che in questo caso la macchina minima che si ricava e' ancora una macchina
incompleta.
105
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
CAPITOLO V
I CIRCUITI SEQUENZIALI
x (t) z (t)
1 1
x 2 (t) z 2 (t)
RETE DI COMMUTAZIONE
x (t) z m (t)
n
figura 5.1.1
Si hanno n ingressi x(t) e m uscite z(t), funzioni del tempo; se in ogni istante il valore
attuale delle uscite z e' determinato unicamente dal valore degli ingressi si dice che il circuito
e' di tipo combinatorio. Esso, come si e' gia' visto nei capitoli precedenti, puo' essere
totalmente descritto da un set di equazioni booleane del tipo:
dove la dipendenza dal tempo non compare esplicitamente in quanto si sottointende che i
valori presi in considerazione per le n variabili di ingresso si riferiscano allo stesso istante.
Quando invece il valore delle uscite non dipende solamente dal valore presente delle
variabili di ingresso, ma anche dalla storia passata del circuito, si parla di circuito sequenziale.
Il sistema telefonico e' un tipico esempio di sistema sequenziale; si supponga infatti di
essere in procinto di comporre l'ultima cifra di un numero telefonico. Questa ultima cifra e'
l'ingresso attuale del sistema e l'uscita sara' il segnale che effettuera' il collegamento.
Ovviamente l'ingresso attuale non e' il solo fattore che determina il collegamento, ma anche le
cifre composte precedentemente sono ugualmente importanti. Un altro esempio di sistema
sequenziale e' il calcolatore elettronico; di solito in esso vengono usati in maniera sequenziale
diversi sottoinsiemi che possono essere di volta in volta sequenziali o combinatori.
5.2) I flip-flop.
E' abbastanza evidente che nei sistemi sequenziali, introdotti al paragrafo precedente, le
informazioni sulla storia passata del circuito devono venir memorizzate. Si possono avere
diversi tipi di dispositivi di memorizzazione, ma uno dei piu' comuni e frequentemente usati e'
il flip-flop. In fig. 5.2.1 e' illustrato un flip-flop costruito con due porte NOR ed e' riportato
anche il diagramma di temporizzazione per una tipica sequenza operativa.
106
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
s x C
y x
t2 t7
c
t1 t3 t4 t5t6 t8
figura 5.2.1
All'istante iniziale ambedue gli ingressi siano 0, l'uscita Y sia 0, quella X sia 1; poiche'
le uscite sono riportate agli ingressi delle porte NOR, la condizione ipotizzata e' una
condizione stabile. Infatti il NOR 2 ha come ingressi C=0 e X=1 e quindi la sua uscita e' Y=0,
mentre il NOR 1 avendo ambedue gli ingressi nulli ha come uscita X=1. All'istante t1
l'ingresso S vada a 1. Gli ingressi del NOR 1 passano percio' da 00 a 01 e dopo un ritardo pari
a t2 - t1 la sua uscita X passa a 0. Questo fatto fa cambiare gli ingressi del NOR 2 da 01 a 00 in
modo che dopo un ritardo pari a t3 - t2 l'uscita Y passa a 1. Non si ha alcun ulteriore effetto,
ne' per la commutazione a 11 degli ingressi del NOR 1, ne' per il passaggio di S a 0 all'istante
t4. La nuova condizione raggiunta e' stabile. Una sequenza analoga, ma inversa, ha luogo
quando l'ingresso C passa a 1, riportando il circuito nella condizione iniziale.
Un flip-flop che operi nel modo descritto prende il nome di flip-flop set-reset, viene
indicato con il simbolo RS ed e' rappresentato con il simbolo di fig. 5.2.2 (a).
S R Q Q
n n+1
0 0 0 0
0 0 1 1
0 1 0 0
S Q
0 1 1 0
1 0 0 1
R 1 0 1 1
1 1 0 -
1 1 1 -
(a) (b)
figura 5.2.2
107
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
Le condizioni d.c.c delle ultime due righe indicano che nel normale funzionamento non
e' permesso che ambedue gli ingressi diventino 1 allo stesso
E' immediato verificare che la tabella di fig. 5.2.2 e' retta dall'equazione:
Qn 1 S Q n .R (5.2.1)
S. R 0 (5.2.2)
La ragione per cui i due ingressi non possono essere contemporaneamente 1 e' duplice;
in primo luogo perche' essi porterebbero ambedue le uscite a 0 violando la condizione base di
funzionamento di un flip-flop secondo la quale le due uscite devono essere sempre
complementari; in secondo luogo, se ambedue gli ingressi tornassero a 0 al medesimo istante
lo stato in cui il flip-flop si porterebbe non sarebbe prevedibile e al limite potrebbe realizzarsi
una condizione di oscillazione.
Con il vincolo (5.2.2) il flip-flop RS realizza invece un dispositivo di memorizzazione
affidabile, in cui lo stato delle uscite indica quale dei due ingressi si e' trovato per ultimo al
livello 1.
E' abbastanza evidente da questa analisi qualitativa del funzionamento del flip-flop RS
che un impulso di ingresso deve avere una durata minima se si vuole che la commutazione
avvenga con sicurezza; si supponga infatti che S ritorni a zero prima dell'istante t3; ambedue
gli ingressi del NOR 1 si troverebbero allora, almeno momentaneamente, a 0 e tenderebbero a
far tornare X a 1. Il verificarsi di tale condizione renderebbe evidentemente incerto il
funzionamento del circuito.
La minima durata dell'impulso di ingresso e' il primo di tre vincoli sulle temporizzazioni
dei circuiti sequenziali contenenti flip-flop, che verranno esaminati nel seguito.
Come si vedra' nei capitoli successivi, il progetto di un circuito sequenziale puo' essere
notevolmente semplificato se le commutazioni possono avvenire solo periodicamente in
istanti equintervallati. Questo tipo di funzionamento puo' venir assicurato se tutti i cam-
biamenti di stato vengono sincronizzati da opportuni impulsi di orologio (clock). E' bene
chiarire che per impulso si intende un segnale che normalmente si mantiene a un livello,
usualmente 0, e va all'altro livello solamente per intervalli di tempo estremamente brevi. In
contrapposizione viene chiamato a livelli un segnale che puo' rimanere sia a 0 che a 1 per
periodi di tempo indefiniti e comunque molto lunghi se paragonati alla durata di un impulso.
La dizione estremamente breve va evidentemente rapportata alla velocita' del circuito, ma
normalmente indica una durata dello stesso ordine di grandezza del tempo di ritardo del flip-
flop.
Cio' stabilito, si puo' affermare che:
108
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
Un circuito che operi nel modo descritto viene detto circuito sincrono o circuito clock
mode. In fig. 5.2.3 e' illustrata una tipica forma d'onda di clock, lo schema di un flip-flop RS
sincrono e il relativo simbolo.
L'unico vincolo necessario per il corretto funzionamento del circuito e' che i segnali S e
R non cambino durante l'intera durata dell'impulso di clock.
Clock
t t t R
n n+1 n+2
S Q
T
R
figura 5.2.3
J K Qn Q n+1
0 0 0 0
0 0 1 1
0 1 0 0
J Q
T 0 1 1 0
K 1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0
figura 5.2.4
109
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
Qn 1 K. Q n J .Q n
Qn 1 Qn
Qn 1 Dn
In fig. 5.2.5 (a) e (b) sono riportati i simboli del flip-flop T e D. In fig. 5.2.5(c) e' invece
illustrato in che modo un flip-flop JK possa funzionare come un tipo D.
Q D Q J Q
T T T
K
figura 5.2.5
110
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
Per soddisfare tali specifiche il circuito dovra' evidentemente essere di tipo combi-
natorio e di grosse dimensioni.
In alternativa si puo' pensare di far si' che il giocatore macchina alteri la sua struttura
man mano che il gioco prosegue, tenendo conto del fatto che ad un particolare istante del
gioco non si possono piu' presentare tutte le combinazioni .
Si supponga infatti che il giocatore uomo muova per primo; poiche' egli ha solamente
nove possibili mosse la macchina puo' partire da una configurazione progettata per rispondere
a ciascuna di esse nel modo piu' opportuno. Dopo la mossa della macchina all'uomo sono
disponibili solo sette risposte e la configurazione della macchina puo' essere modificata in
modo da tenerne conto. Una sequenza di tale tipo si ripete poi ad ogni mossa successiva.
L'approccio descritto, di natura evidentemente sequenziale, consiste in definitiva nello
spezzare un unico grosso problema in un certo numero di problemi piu' piccoli. Da un punto
di vista circuitale cio' significa costruire un certo numero di circuiti di ridotte dimensioni,
ciascuno capace di gestire un numero limitato di situazioni a ciascun passo del gioco, anziche'
costruire un unico grosso circuito che possa interpretare tutte le possibili situazioni che si
possono presentare. La macchina usera' in sequenza tali circuiti via via che il gioco
progredisce.
E' evidente che nell'esempio preso in considerazione il problema e' di per se stesso di
natura squisitamente sequenziale. In casi simili un approccio di tipo sequenziale e' di solito
piu' economico che non un approccio puramente combinatorio.
Quale altro esempio si consideri un dispositivo che esegua il test di parita' su parole di 8
bit. Se gli 8 bit sono disponibili tutti simultaneamente il problema puo' venir risolto con un
circuito combinatorio a 6 livelli la cui funzione di commutazione sia:
111
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
Z x1 x2 x3 x4 x5 x6 x7 x8
Z x1 x2 x3 x4 x5 x6 x7 x8
Si possono cioe' testare per la parita' i primi due bit, poi con il risultato il terzo e cosi'
via. Queste considerazioni suggeriscono una realizzazione sequenziale. I primi due bit
vengono esaminati da una rete che realizza l'OR esclusivo e il risultato memorizzato finche'
non arriva il bit successivo. A tale istante il risultato precedente viene confrontato con il bit in
arrivo sullo stesso OR esclusivo, il risultato viene memorizzato e cosi' via. In fig. 5.3.1 e'
riportato un semplice circuito che realizza la sequenza descritta.
Il flip-flop deve inizialmente essere posizionato a zero in modo che all'arrivo del primo
bit x si abbia:
x Z x 0 x
Dopo l'arrivo dell'ottavo bit l'uscita Z dara' il desiderato test di parita'. Al limite lo stesso
circuito permette di verificare la parita' di parole di qualsivoglia lunghezza.
I due esempi presi in considerazione illustrano un tipo di situazione in cui l'approccio
sequenziale e' nettamente preferibile. In ambedue i casi, e soprattutto nel secondo, risulta
evidente che il circuito sequenziale e' piu' semplice e di conseguenza piu' economico che non
il corrispondente circuito combinatorio.
S Q Z
x
T
R
Clock
figura 5.3.1
112
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
registro a 32 bit
b bi b31
0
Contatore
decoder i
Clock a 5 bit
31
Verifica di parita'
figura 5.4.1
113
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
possibile utilizzo del circuito in rapporto al sistema; allo stesso modo ogni considerazione
sulla velocita' operativa deve essere messa in relazione con la velocita' del sistema nel suo
complesso.
Il circuito combinatorio dell'esempio preso in considerazione e' approssimativamente 32
volte piu' veloce del corrispondente circuito sequenziale, ma poiche' in generale il controllo di
parita' viene eseguito contemporaneamente a molte altre operazioni, la velocita' complessiva
non viene di molto aumentata anche se si sceglie la soluzione totalmente combinatoria.
Si consideri allora in generale un dispositivo o un sistema che fornisca n unita' di
informazione allo stesso istante. Queste unita' siano bit, parole, caratteri o qualsiasi altro
raggruppamento opportuno.
In un sistema completamente parallelo vi e' un circuito (o sottosistema) per ciascuna
delle n unita' di informazione e tutte le n unita' vengono applicate agli n circuiti si-
multaneamente. Si noti che causa delle differenze intrinseche dei vari circuiti o della dipen-
denza logica uno dall'altro, questi non terminano le loro operazioni contemporaneamente,
sebbene le inizino nel medesimo istante.
In un sistema completamente seriale le n unita' di informazione vengono applicate
sempre allo stesso circuito, ma in tempi successivi. Supponendo che tutti gli elementi
circuitali siano della stessa velocita' e dello stesso costo, il sistema completamente parallelo
rappresenta la soluzione piu' veloce, ma anche la piu' costosa, mentre quello completamente
seriale e' la soluzione piu' economica, ma anche la piu' lenta. Generalmente e' possibile
scegliere una soluzione che si piazzi tra questi due estremi.
E' possibile, ad esempio, dividere le n unita' di informazione in due gruppi uguali,
elaborare il primo gruppo in un primo intervallo di tempo e solo successivamente il secondo
gruppo.
Si otterra' in tal modo una realizzazione generalmente meno costosa che non quella
parallela, ma anche una realizzazione operante a meta' velocita'.
Diagrammando il costo in funzione della velocita' si otterra' una curva del tipo di quella
illustrata in fig. 5.4.2.
velocita'
parallelo
seriale
costo
figura 5.4.2
114
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
la curva raggiunge il suo minimo prima di essere nella condizione di serializzazione totale, in
quanto il costo della serializzazione stessa annulla in pratica i benefici ottenuti con la
diminuzione del numero di circuiti necessari.
Y1 Y2 Y3 Y
Q 4
T
Q
T T Q T Q
Clock
figura 5.5.1
Sebbene qualsiasi tipo di flip-flop possa essere usato per realizzare un contatore, in
pratica sono usati solo contatori costruiti con flip-flop JK o D.
In fig. 5.5.1 e' riportato lo schema di un contatore modulo 16 mentre in fig. 5.5.2 si ha il
relativo diagramma di temporizzazione.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0
Clock
Y1
Y2
Y3
Y4
figura 5.5.2
Con la dizione "modulo 16" si intende che il contatore puo' contare da 0 a 15, mentre
con l'impulso successivo di clock ritorna a 0.
Il funzionamento del circuito e' intuitivo. Si noti comunque che il contatore, oltre ad
effettuare la funzione di conteggio, memorizza il risultato tra due successivi impulsi di clock.
115
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
In generale qualsiasi insieme di flip-flop usato per memorizzare un dato numero di bit di
informazione viene chiamato "registro". Un contatore quindi puo' essere chiamato anche
registro di conteggio.
I registri vengono spesso utilizzati per memorizzare e ricostruire in forma parallela
messaggi in arrivo da una sorgente seriale.
In fig. 5.5.3 e' illustrato un registro a scorrimento, di funzionamento intuitivo.
Y1 Y2 Y3 Y4
X D Q D Q D Q D Q
T T T T
Clock
figura 5.5.3
x1 z1
x2 z
2
xn zm
Rete
y1 combinatoria y'
1
yr y'p
Memoria
figura 5.6.1
116
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
yt y' t
117
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
y' y
1 1
M1
X
y'2 y
2
M2 z
figura 5.7.1
z y2
y'1 y1 . y 2 x . y 2 (5.7.1)
y' 2 x .y1
y'1 t 0 y' 2 t 0 0
y'1 t 1 0 y' 2 t 1 1
1 11 10 1
Gli stessi risultati possono essere chiaramente visualizzati nel diagramma di stato di fig.
5.7.2, con tanti nodi quanti sono i possibili stati del circuito.
118
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
1/0
0/0
00 0/1 01
1/1
10 11
0/1
figura 5.7.2
E' evidente che il diagramma di stato realizzato e' formalmente identico a quello usato
per rappresentare le macchine sequenziali nel modello di Mealy.
Estremamente simile al funzionamento dei circuiti sequenziali sincroni e' quello dei
circuiti sequenziali ad impulsi. Essi si distinguono dai precedenti per l'assenza di una linea di
sincronizzazione separata, ma somigliano ad essi per il fatto che ciascun cambiamento di stato
puo' avvenire solamente in corrispondenza ad un impulso di ingresso. Gli impulsi devono
essere di sufficiente durata e il circuito deve avere il tempo di stabilizzarsi prima che un
secondo impulso possa presentarsi all'ingresso.
119
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
della memoria si propaghi attraverso la rete combinatoria in modo da causare una nuova
variazione delle variabili di eccitazione mentre l'impulso di clock e' ancora presente. I flip-
flop possono allora commutare nuovamente, portando il circuito in uno stato diverso e la cosa
puo' continuare finche' dura l'impulso di clock.
Un tal modo di funzionare sarebbe in contrasto con l'ipotesi fatta inizialmente per i
circuiti sincroni, cioe' che ciascun impulso di clock dia luogo ad un'unica variazione dello
stato.
Problema del tutto analogo si ha nei circuiti ad impulsi, quando l'impulso di ingresso e'
eccessivamente lungo. A titolo di esempio si consideri il circuito di divisione di frequenza
illustrato in fig. 5.8.1.
S
d
X
Clock R Z
figura 5.8.1
L'ingresso x sia un'onda quadra con frequenza pari alla meta' di quella di clock. L'uscita
z cambiera' valore ogni volta che l'ingresso e' 1 in corrispondenza all'impulso di clock. Si
ottiene in tal modo un'uscita con frequenza pari alla meta' della frequenza di ingresso e a un
quarto di quella di clock.
Si consideri ora la risposta del circuito al terzo impulso di clock. All'inizio di tale
impulso (fig. 5.8.2) x e z sono rimasti stabili per un sufficiente periodo di tempo affinche' d si
sia stabilizzato a 1.
Clock 1 2 3 4 5 6
3 4 5 6
S
1 2 5
R
figura 5.8.2
L'impulso di clock viene quindi trasferito alla linea S e fa si' che dopo un certo ritardo
l'uscita z passi a 1.
In tale istante x sia ancora a 1 e quindi d passa a 0 fintantoche' anche x non va a 0. Si ha
quindi un breve impulso verso il valore logico 0 sulla linea d, ma tale fatto non causa alcun
120
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
problema in quanto l'impulso di clock e' terminato prima che la variazione di d possa
propagarsi.
Si consideri ora la situazione in corrispondenza dell'impulso 5, che si suppone essere
considerevolmente piu' lungo degli altri.
All'inizio di questo impulso d e' 0; l'impulso di clock viene trasferito alla linea R e con
un certo ritardo z passa a 0.
Poiche' x e' ancora a 1 d commuta a 1 e poiche' in tale istante il clock e' ancora presente,
R va a 0 e S a 1 causando un'ulteriore commutazione di z. Si hanno cioe' due commutazioni
dell'uscita, di cui la seconda indesiderata.
Come in questo esempio, in tutti i circuiti che usino flip-flop sincroni esiste quindi un
vincolo non solo sulla durata minima dell'impulso di clock, ma anche su quella massima.
Disgraziatamente la tecnologia costruttiva dei circuiti integrati porta ad una notevole
dispersione del valore dei ritardi dei singoli elementi e non e' quindi possibile basarsi su
un'accurata scelta della durata dell'impulso di clock per assicurare un corretto funzionamento
al circuito.
Gli inconvenienti esaminati possono essere evitati ricorrendo a dei flip-flop dal circuito
piu' raffinato, detti flip-flop master-slave.
In fig. 5.8.3 e' illustrato lo schema di principio di un flip-flop RS master-slave.
S 1 y 2
S Q S Q z
R R R
1 2
Clock
figura 5.8.3
121
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
sizione multipla di stato; tale fenomeno e' conosciuto sotto il nome di "clock skew" e puo'
verificarsi con una certa facilita' nei sistemi estremamente veloci, in cui i ritardi di trasmis-
sione nelle interconnessioni tra gli elementi circuitali cominciano ad assumere notevole im-
portanza. Tale fenomeno verra' preso in considerazione con maggior dettaglio nel seguito.
y'1
z
x
y'2
y2
2
y1
1
figura 5.9.1
122
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë
e che x rimanga costante ogni volta che y y' . Si supponga cioe' che il circuito lavori in
modo fondamentale. Le equazioni del circuito sono:
z y'1
y'1 x . y1 x. y 2
y' 2 x .y 1 x. y 2
L'evoluzione del circuito e' riportata nella tabella 2.
Le righe di tale tabella possono essere divise in due categorie; quelle in cui yi yi', che
corrispondono ai periodi transitori, e quelle segnate con l'asterisco in cui yi = yi', corrispon-
denti agli stati in cui il circuito permane finche' non viene cambiato l'ingresso.
TABELLA 2
Ingresso stato a t stato a t + Uscita
* 0 00 00 0
1 00 01 0
* 1 01 01 0
0 01 11 1
* 0 11 11 1
1 11 10 1
* 1 10 10 1
0 10 00 0
Anche in questo caso si puo' costruire il diagramma degli stati, ma e' piu' conveniente
usare il modello di Moore, compatibile con le ipotesi fatte per il funzionamento in modo
fondamentale. Tutti gli stati devono evidentemente essere stabili e con riferimento al circuito
di fig. 5.9.1 si ha il diagramma degli stati di fig. 5.9.2.
0 1
00/0 01/0
0 0
10/1 11/1
1 0
1
figura 5.9.2
123
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
CAPITOLO VI
CIRCUITI SEQUENZIALI ASINCRONI
6.1) Introduzione.
Nel capitolo precedente sono stati presi in considerazione gli aspetti essenziali dei
circuiti sequenziali ed e' stato introdotto il modello fondamentale, le equazioni di stato e
quelle di uscita. Si e' messo inoltre in luce che la formalizzazione proposta permette di af-
frontare lo studio dei circuiti sequenziali eliminando ogni dipendenza esplicita dal tempo,
utilizzando quindi le metodologie e gli strumenti messi a punto per lo studio dei circuiti
combinatori.
In questo capitolo si trattera' dei problemi legati all'analisi e alla sintesi dei circuiti
sequenziali asincroni, ad impulsi e a livelli, senza fare alcuna distinzione tra di essi, ma con-
siderando gli impulsi come il risultato di due successive variazioni di livello.
6.2) L'analisi.
Un circuito sequenziale asincrono si riconosce in pratica in quanto e' realizzato uni-
camente da porte logiche elementari, ma contiene almeno una connessione tra l'uscita di un
elemento di livello j e l'ingresso di un elemento a livello k con k>j. Esiste cioe' quello che
viene chiamato "loop di reazione".
Come si e' gia' accennato in precedenza, il circuito reale puo' essere fatto corrispondere
al modello fondamentale ricordando che per qualsiasi elemento logico esiste sempre un tempo
di ritardo tra l'applicazione di una condizione di ingresso e l'istante in cui si ha la
corrispondente variazione dell'uscita. E' evidente che nel caso di circuiti logici combinatori
l'esistenza di tale ritardo da' luogo unicamente ad un rallentamento della velocita' operativa, in
quanto l'uscita rimane univocamente determinata.
Nel caso dei circuiti sequenziali l'esistenza del ritardo riveste invece un'importanza
fondamentale ed e' quindi necessario scomporre ciascun elemento logico reale in una porta
logica a risposta istantanea, seguita da un elemento di ritardo . Supponendo poi, per ragioni
di semplicita', che tutti i ritardi cosi' introdotti siano uguali e che operatori logici e ritardi
siano tra loro invertibili, questi ultimi possono essere sostituiti da un unico elemento posto in
uscita alla porta logica da cui si diparte un loop di reazione.
La procedura descritta e' illustrata in fig. 6.2.1.
X1 X1
X2 1 X2 1 1
X2 X2
2 4 Y=Z 2 2 4 4 Y=Z
X1 X1
3 3 3
figura 6.2.1
124
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
X1
X2 1
X2
2 4 Y=Z
X1
3
figura 6.2.2
Con le ipotesi fatte, a partire da un circuito reale si ottiene pertanto una rappresentazione
che e' formalmente identica a quella del modello fondamentale.
E' necessario tuttavia affermare che le ipotesi fatte valgono solo in prima e grossolana
approssimazione e in alcuni casi sara' necessario verificare quanto accade a causa del mancato
loro verificarsi.
L'analisi viene condotta determinando le equazioni di stato e di uscita del circuito a
partire dalle quali si perviene alla tavola di flusso o al diagramma degli stati della macchina
sequenziale che rappresenta il funzionamento del circuito.
Allo scopo di facilitare l'analisi e' opportuno definire quelle che nel funzionamento sono
condizioni stabili e quelle che sono condizioni instabili.
Si definisce in corrispondenza ad una condizione di ingresso:
I = {x1,x2,....,x n,y1,y2,.....,yk)
y' j t yj t
y' j t yj t
Poiche' tra le uscite y' e gli ingressi y e' interposto come memoria semplicemente un
elemento di ritardo, il circuito non puo' rimanere in uno stato instabile, ma deve evolvere
spontaneamente verso lo stato futuro definito dalle variabili y'.
Per chiarire il metodo di analisi e' opportuno rifarsi a qualche esempio. Sia dato il
circuito di fig. 6.2.3.
R
1 Z1
2 Z2
S
figura 6.2.3
Rimanipolando opportunamente lo schema si ottiene il circuito di fig. 6.2.4 (a) in cui e'
immediatamente riconoscibile un circuito sequenziale asincrono in quanto esiste un loop di
reazione tra l'uscita z e l'elemento 2 al secondo livello.
125
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
R R
S 1 Z1 S 1 Z1
2 2
Z2 Z2
(a) (b)
figura 6.2.4
y' R. S y R . S R. y z1 y z2 S.y
Da tali equazioni si ricavano le due tabelle di fig. 6.2.5, simili alle mappe di Karnaugh,
dette rispettivamente matrice di eccitazione e matrice delle uscite.
RS RS
y 00 01 11 10 y 00 01 11 10
0 0 1 0 0 0 01 00 00 01
1 1 1 0 0 1 10 10 10 10
y' z1 z2
figura 6.2.5
126
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
La matrice di uscita contiene invece tutte le informazioni sul comportamento esterno del
circuito, cioe' su come variano le uscite in funzione dell'ingresso e dello stato.
RS
y 00 01 11 10
figura 6.2.6
Si noti che esiste una sostanziale differenza tra matrice di eccitazione e matrice di
uscita; mentre l'interpretazione della prima implicitamente fa riferimento al tempo, attraverso
l'introduzione del ritardo , e permette di seguire l'evoluzione dello stato in funzione delle
variazioni dell'ingresso, la matrice d'uscita ha una natura completamente indipendente dal
tempo, in quanto le variabili interessate, che nel caso in esame sono le z, R, S e y, si rife-
riscono tutte allo stesso istante. Per determinare la sequenza di uscita ottenuta a partire da un
determinato stato per una particolare sequenza di ingresso e' necessario percio' ricorrere ad
ambedue le tabelle. Si preferisce quindi riunire le due tabelle ottenendo quella che viene
chiamata tavola di flusso del circuito e che per l'esempio in esame e' riportata in fig. 6.2.6
A partire poi dalla tavola di flusso e' immediatamente ricavabile il diagramma degli stati
del circuito, sia nella rappresentazione di Mealy che in quella di Moore.
In fig. 6.2.7 (a) e' riportato il diagramma degli stati secondo Mealy del flip-flop RS,
mentre in fig. 6.2.7 (b) e' riportato quello secondo Moore.
00/01
00/10 00
01/00 00
10
11/00 0
11/10
1 10 0/01 0/00 11
11
10/10
01 11 01
10/01 01/10 10
1/10
01 00
(a) (b)
figura 6.2.7
127
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
assunzione riporta quindi il funzionamento del circuito analizzato a quello gia' illustrato per il
flip-flop RS.
Ingresso Ingresso
Stato Stato
0 1 0 1
--- ---
011 111 011 111
(a) (b)
figura 6.3.1
6.3.3) Corse
Si supponga che, a partire da una condizione di stabilita', la variazione dell'ingresso
porti alla variazione di due o piu' variabili di eccitazione. Quando cio' avviene la differente
velocita' di risposta, che nella realta' gli elementi logici hanno, determina una disuguaglianza
dei tempi di ritardo nei loop di reazione e puo' portare il circuito ad evolvere in maniera errata.
Si consideri ad esempio la tavola di flusso di fig. 6.3.2.
128
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
x
y 1 y 2 y3
0 1
001 001
010 010
011 011
---
figura 6.3.2
001 011
010 011
011 011
---
figura 6.3.3
129
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
ESEMPIO
Sia assegnato il circuito di fig. 6.3.4
_ Z
X1
_
X2
_
X1 X
_1
X2 X2
_
X1
X2 X1
figura 6.3.4
z y1
Y '1 Y1
Y1
X1
X
_2
_
Y2 Z=Y
_
1
X
_1
X2
Y2
_
X
_1 Y '2 Y2
X2
Y1
_
Y1 X1 _
Y_2 Y
Y2 2
Y1
X2
_
Y X1
1
figura 6.3.5
130
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
x x x x
1 2 1 2
y y y y
1 2 00 01 11 10 1 2 00 01 11 10
00 00 00 01 00 00 1 1 1 1
01 11 01 01 00 01 1 1 1 1
11 11 10 11 11 11 0 0 0 0
10 11 10 00 10 10 0 0 0 0
y' y' z
1 2
La riunione delle due matrici permette di ottenere la tavola di flusso del circuito e da
essa si puo' derivare il diagramma degli stati, come illustrato in fig. 6.3.6 (nella rappre-
sentazione di Moore)
11
01
11
00 00/1 01/1 01
10
10
11
00
11
01
10 11/0 10/0 10
00
00 01
figura 6.3.6
131
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
00 10
10
2/0
1/0
11
01 4/1 3/0
11
01
figura 6.4.1
La successiva applicazione a ciascuno di questi stati di tutti i possibili ingressi porta poi
ad espandere il grafo come illustrato in fig. 6.4.2
132
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
00
10 01
11
00 10
1/0 2/0 11
3/0 01 4/1
00
10 11
10
00 11
7/0 5/0
10
11
11 01
01
00
6/0
01
figura 6.4.2
x x
1 2
Stato
00 01 11 10 Uscita
1 1 6 - 2 0
2 1 - 3 2 0
3 - 4 3 7 0
4 1 4 5 - 1
5 - 6 5 7 0
6 1 6 5 - 0
7 1 - 5 7 0
133
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
ESEMPIO 1
Si minimizzi il numero di stati della matrice delle sequenze di fig. 6.4.3. La tabella di
evoluzione delle coppie - compatibili e' riportata in fig. 6.4.4
Ingresso
Stato
00 01 11 10
figura 6.4.3
Per esclusione delle coppie che non evolvono verso coppie - compatibili rimangono
individuate le coppie di stati - compatibili
{1,2} {1,3} {2,4} {5,6} {5,7} {5,8} {6,7} {6,8} {7,8}
Ingresso
Coppie -compatibili
00 01 11 10
1,2 1,1 3,- -,4 2,2 2,8 1,- -,6 4,8 2,2
1,3 1,1 3,3 -,5 2,- 3,4 1,- 3,6 5,4 -,2
1,4 1,- 3,6 -,4 2,2 3,5 1,- 3,7 5,5 -,2
1,5 1,- 3,7 -,5 2,2 3,8 1,- 3,6 5,8 -,2
1,6 1,1 3,6 -,8 2,- 4,6 -,1 6,6 4,8 2,-
1,7 1,1 3,7 -,5 2,- 4,7 -,1 6,7 4,5 2,-
1,8 1,- 3,6 -,8 2,2 5,6 -,1 7,6 5,8 2,-
2,3 1,1 -,3 4,5 2,- 5,7 -,1 7,7 5,5 2,-
2,4 1,- -,6 4,4 2,2 5,8 -,- 7,6 5,8 2,2
2,5 1,- -,7 4,5 2,2 6,7 1,1 6,7 8,5 -,-
2,6 1,1 -,6 4,8 2,- 6,8 1,- 6,6 8,8 -,2
2,7 1,1 -,7 4,5 2,- 7,8 1,- 7,6 5,8 -,2
figura 6.4.4
Si puo' inoltre individuare una relazione di mutua compatibilita' tra gli stati 5,6,7,8.
Pertanto la macchina minima M' e':
134
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Stato Si 00 01 11 10
1' 1,2 1'/0 2'/- 3'/- 1'/0
2' 1,3 1'/0 2'/0 4'/- 1'/-
3' 2,4 1'/- 4'/- 3'/0 1'/0
4' 5,6,7,8 1'/- 4'/1 4'/1 1'/-
ESEMPIO 2
Si minimizzino gli stati della seguente macchina sequenziale asincrona:
Ingresso
Stato 00 01 11 10 Uscita
1 1 2 - 3 00
2 1 2 - 3 00
3 1 - 5 3 ---
4 - - 4 3 10
5 7 - 5 6 11
6 7 2 - 6 1-
7 7 8 - 6 10
8 1 8 4 6 01
Ingresso
Coppie -compatibili 00 01 11 10
1,2 1,1 2,2 -,- 3,3
1,3 1,1 2,- -,5 3,3
2,3 1,1 2,- -,5 3,3
3,4 1,- -,- 5,4 3,3
3,5 1,7 -,- 5,5 3,6
3,6 1,7 -,2 5,- 3,6
3,7 1,7 -,8 5,- 3,6
3,8 1,1 -,8 5,4 3,6
4,6 -,7 -,2 4,- 3,6
4,7 -,7 -,8 4,- 3,6
5,6 7,7 -,2 5,- 6,6
6,7 7,7 2,8 -,- 6,6
figura 6.4.5
135
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso
Stato 00 01 11 10 Uscita
1 1 1 3 1 00
2 - - 2 1 10
3 4 1 3 3 11
4 4 5 - 3 10
5 1 5 2 3 01
k min 1 2 3 4 5
k max 1 3 4 4 5 6 7 8 9
Per una corretta codifica dello stato si fa riferimento al diagramma delle transizioni e
alla tavola delle transizioni.
Il diagramma delle transizioni e' un grafo non orientato i cui nodi rappresentano gli stati
e i cui archi rappresentano le transizioni tra stati. Accanto a ogni nodo viene scritto lo stato e il
relativo valore dell'uscita. In fig. 6.4.6 e' riportata una matrice delle sequenze ed a lato e'
rappresentato il relativo diagramma delle transizioni.
La tavola delle transizioni consiste in una mappa di Karnaugh, di cui non vengono
assegnate le coordinate. Al fine di evitare le corse critiche e' necessario sistemare gli stati, che
sono connessi da un arco sul diagramma delle transizioni, in caselle adiacenti sulla tavola
delle transizioni. Riuscendo infatti a soddisfare tale specifica, la transizione tra stati avverra'
con la commutazione di un'unica variabile , facendo cosi' mancare una delle condizioni ne-
cessarie al verificarsi di una corsa critica.
136
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso
Stato 00 01 11 10 z
1(0) 4(0)
1 1 1 2 - 0
2 1 2 2 3 0
3 4 2 2 3 1
2(0) 3(1)
4 4 4 4 3 0
figura 6.4.6
Si inizia pertanto tentando di sistemare gli S stati su una mappa per kmin variabili.
Qualora non si riescano a rispettare tutte le adiacenze desiderate si tenta di sfruttare corse non
critiche oppure si introducono stati ausiliari e si realizzano le transizioni tra stati stabili
tramite transizioni multiple. Se nemmeno in tal maniera si riescono a codificare in modo
corretto gli stati, si aumenta di un'unita' il numero delle variabili e si conduce un nuovo
tentativo sulla relativa tavola delle transizioni. Infine, una volta che gli stati siano stati
opportunamente disposti sulla mappa, si tarano gli assi di quest'ultima con opportuni codici
ciclici in modo da far coincidere il massimo numero delle variabili di uscita z con altrettante
variabili di stato. Dalla codifica degli stati dipende in maniera determinante la struttura del
circuito reale che si ricava; e' opportuno pertanto eseguire piu' tentativi di codifica e
confrontarne i risultati, scegliendo quello che da' luogo alla massima semplicita' circuitale.
Allo scopo di illustrare le tecniche di codifica, nel seguito sono riportati alcuni esempi,
via via piu' complessi.
ESEMPIO 1
Codificare gli stati della matrice delle sequenze di fig. 6.4.7.
ing.
Stato 0 1 z
1 1 2 0
2 3 2 1
3 3 4 1
4 1 4 0
figura 6.4.7
In fig 6.4.8 (a) e' riportato il diagramma delle transizioni che evidenzia le relative
transizioni tra stati, mentre in fig. 6.4.8 (b) gli stati sono riportati sulla tavola delle transizioni
in modo da realizzare le adiacenze richieste.
Infine in fig. 6.4.8 (c) viene adottata una taratura degli assi che permette di far coin-
cidere l'uscita con la variabile di stato y1.
137
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
1(0) 4(0) y1 y1
y2 y2 1 0
2(1) 1(0) 0 2(1) 1(0)
3(1) 4(0) 1 3(1) 4(0)
2(1) 3(1)
figura 6.4.8
ESEMPIO 2
Codificare gli stati della matrice delle sequenze di fig. 6.4.9.
Ingresso
Stato 000 001 010 100 Uscita
1 1 2 3 4 00
2 2 2 3 4 10
3 3 2 3 4 01
4 4 2 3 4 10
figura 6.4.9
Dal diagramma delle transizioni di fig. 6.4.10 (a) si deduce la necessita' di rendere
adiacenti le coppie di stati (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) il che e' evidentemente impossibile
su una mappa per due variabili.
Tuttavia la particolare struttura della matrice delle sequenze in corrispondenza agli
ingressi 001, 010 e 100, per i quali esiste un unico stato stabile nella relativa colonna, e la
considerazione che gli stati stabili della colonna 000 sono raggiungibili solo dagli stati stabili
che si trovano sulla medesima riga e quindi senza commutazione delle variabili di stato,
suggeriscono l'utilizzo di corse non critiche a scopo di semplificazione.
y y
1 1
1(00) 2(10) y2 y2 0 1
1(00) 2(10) 0 1(00) 2(10)
La codifica degli stati puo' quindi essere fatta come illustrato in fig. 6.4.10 (b). Non e'
tuttavia possibile far coincidere ambedue le variabili di uscita con le variabili di stato. La
taratura della mappa che consente di ottenere la massima economia e' riportata in fig. 6.4.10
(c) e da' luogo alle seguenti equazioni:
138
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
z1 y1
z2 y1 . y 2
ESEMPIO 3
Codificare gli stati della matrice delle sequenze di fig. 6.4.11 (a).
L'adiacenza degli stati tra cui si ha una transizione, secondo quanto illustrato dal
diagramma di fig. 6.4.11 (b), non puo' essere realizzata su una mappa di due variabili, ne',
d'altra parte, possono essere sfruttate corse non critiche o transizioni multiple. E' giocoforza
quindi fare ricorso a una tavola delle transizioni per tre variabili. Possono allora essere intro-
dotti degli stati ausiliari e il problema che si sta esaminando puo' venir risolto in due modi
diversi:
a) Introducendo transizioni multiple. In questo caso i quattro stati della matrice delle
sequenze vengono sistemati sulla mappa nella maniera piu' opportuna, in modo da realizzare il
massimo numero delle transizioni direttamente e di semplificare al massimo la rete d'uscita. Si
soddisfa alle transizioni tra stati che non possono avvenire direttamente introducendo stati
ausiliari e realizzando la transizione relativa come transizione doppia. Una possibile codifica
che fa coincidere l'uscita con la y3 e' quella riportata in fig. 6.4.12 (a), mentre in fig. 6.4.12.
(b) e' illustrata la relativa tabella degli stati e sono poste in evidenza con una freccia le
transizioni doppie utilizzate per evitare le corse critiche.
Ingresso
Stato 00 01 11 10 Uscita
1 1 2 5 1 0
2 3 2 3 2 0
y1 y2
y3 00 01 11 10 3 3 6 3 7 0
0 1(0) 2(0) 3(0) 7
4 5 4 4 2 1
1 5 4(1) 6 --
5 1 - 4 - -
(a)
6 - 4 - - -
7 - - - 1 -
La soluzione individuata e' senz'altro corretta, tuttavia in alcuni casi puo' essere
inaccettabile la differenza nel tempo di risposta del circuito per le transizioni dirette e per
139
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
quelle doppie. L'inconveniente puo' venir superato solamente rendendo tutte le transizioni
doppie, ad esempio secondo la tavola di fig. 6.4.13; in tal caso l'uscita non puo' venir fatta
coincidere con alcuna variabile di stato.
y1 y2
00 01 11 10
y3
0 1 5 2 6
1 7 3 8 4
figura 6.4.13
Nel caso illustrato c'e' evidentemente un'ampia scelta su come compiere ciascuna
transizione tra stati stabili. Ad esempio la transizione tra gli stati 1 e 3 potrebbe essere rea-
lizzata come 1-5-3 oppure come 1-7-3.
b) Introducendo stati equivalenti. E' opportuno ricordare che, dal punto di vista del
funzionamento, il circuito viene caratterizzato dalla corrispondenza tra l'insieme delle
possibili sequenze di ingresso e l'insieme delle corrispondenti sequenze di uscita e non da
quale stato occupi istante per istante. Ciascun stato quindi puo' essere codificato in piu' modi,
purche' l'uscita relativa a ciascuna codifica coincida.
In altre parole cio' sta a significare che ogni stato puo' venir separato in piu' stati
equivalenti in modo che le transizioni della matrice delle sequenze assegnata possano venir
effettuate sempre tra stati adiacenti sulla tavola delle transizioni.
Con riferimento alla matrice delle sequenze di fig. 6.4.11 (a), una codifica possibile,
ottenuta con l'introduzione di stati equivalenti, e' riportata in fig. 6.4.14. Tutti gli stati equi-
valenti tra loro sono stati chiamati con lo stesso nome e contraddistinti con un pedice.
y y
1 2
y
3 00 01 11 10
0 1 (0) 2 (0) 3 (0) 32 (0)
1 1 1
figura 6.4.14
Le transizioni tra stati stabili si possono evidentemente realizzare in molti modi di-
versi.Ad esempio, lo stato 11 puo' raggiungere lo stato 2 o con una transizione 11 - 21 o con
una transizione doppia 11 - 12 - 22. Una delle possibili matrici di stato ricavabili e' riportata in
fig. 6.4.15.
140
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso
Stato
00 01 11 10 z
11 11 21 12 11 0
12 12 22 42 12 0
21 31 21 31 21 0
22 21 22 21 22 0
31 31 41 31 32 0
32 32 42 32 11 0
41 42 41 41 22 1
42 12 42 42 41 1
figura 6.4.15
Con l'approccio del tipo descritto, una volta che sia stata ricavata la matrice degli stati, e'
spesso ancora possibile apportare delle semplificazioni.
Ingresso
Stato
00 01 11 10 z
11 11 21 12 11 0
11 - 42 - -
12
21 31 21 31 21 0
22 21 22 21 22 0
31 31 41 31 32 0
32 - - - 11 -
41 42 41 41 22 1
42 12 42 42 41 1
figura 6.4.16
Ad esempio, nella riga 32 gli stati stabili 32 non sono raggiungibili ne' per variazione
degli ingressi, poiche' nella riga non esiste alcun altro stato stabile, ne' per evoluzione
141
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
spontanea del circuito in quanto nelle relative colonne non esiste nessuna condizione instabile
32 . Anche la condizione instabile 42 della stessa riga non puo' essere raggiunta, mentre invece
quella 11 viene utilizzata nella transizione doppia 31 - 32 - 11.
La colonna relativa all'ingresso 00 puo' essere modificata sostituendo alla transizione 41
- 42 - 12 la transizione 41 - 42 - 12 - 11. In tal modo, nella riga 12 gli stati 22 e 42 diventano non
piu' raggiungibili. Sulla base di queste considerazioni si puo' quindi pervenire alla matrice
degli stati di fig. 6.4.16.
Ingresso
Stato
00 01 11 10
figura 6.4.17
142
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso
Stato x x
1 2
y y 00 01 11 10
1 2
00 00 /0 10/0 11/0 01/0
11 11 /1 10/1 11 /1 11 /1
x1 x2 x1 x2
y1 y2 00 01 11 10 y1 y2 00 01 11 10
00 1 1 00 1 1
01 1 01 1 1
11 1 1 1 1 11 1 1 1
10 1 1 10 1
Si ottiene:
y'1 x 2 y1 . y 2 x 2 x 2 . y1 . y 2
y'2 x1 x 2 . y1 . y 2
z y2
_
X2
_
X2
_
X1 Z
figura 6.4.18
143
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
X1
X2 1
3 Z=Y
(a)
x x
1 2
y 00 01 11 10
0 0 /0 0 /0 1 /0 0 /0
1 1 /1 0 /1 1 /1 1 /1
y'/z
(b)
figura 6.5.1
144
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
y' x 1 . x 2 x 2 . y
z y
Tali equazioni, utilizzate anche per determinare la tavola di flusso, sono state ricavate
supponendo la rete logica istantanea e tutto il ritardo concentrato nel loop di reazione.
In effetti nella realta' le cose vanno in maniera notevolmente diversa. Si supponga infatti
di applicare al circuito la sequenza di ingresso x1x2 = 11 - 10. Nel caso ideale l'uscita y
dovrebbe rimanere costante. Nel caso reale invece ogni elemento della rete ha il suo ritardo ,
diverso in genere da quello degli altri elementi. Per x1 = x2 = 1 l'uscita del gate 1 e' 0 e quella
del gate 2 e' 1. Pertanto y' = 1.
Quando x2 commuta da 1 a 0,dopo il tempo di ritardo 1 l'uscita del gate 1 passa da 0 a
1: viceversa l'uscita del gate 2 commuta a 0 dopo un tempo pari a i + 2, che di solito, anche
se non necessariamente, e' maggiore di 1.
Pertanto per un intervallo di tempo pari a:
t = i + 2 - 1
all'ingresso del NAND 3 si presenta la combinazione 11 e la sua uscita commuta a zero. Infine
trascorso il tempo t l'uscita riprende il suo valore 1 normale. Se il transitorio 1 - 0 - 1
permane per un tempo t superiore al tempo di ritardo 2 del gate cui e' applicato, il circuito
puo' portarsi nella condizione stabile x1x2y = 100.
L'effetto dell'alea statica puo' essere cancellato sia con accorgimenti puramente
circuitali, sia con modifiche alla struttura logica del circuito.
Nel primo caso e' sufficiente inserire nel loop di reazione un ritardo di propagazione
sufficiente ad evitare che il transitorio si presenti all'ingresso del gate 2. Tuttavia tale
accorgimento non e' conveniente in quanto rallenta la velocita' con cui il circuito puo' operare.
Una soluzione migliore si puo' ottenere operando con mezzi di natura puramente logica, una
volta che sia stata individuata la vera causa dell'alea statica.
Si esamini a questo scopo la mappa di Karnaugh della funzione di stato, riportata in fig.
6.5.2.
x1 x2
y 00 01 11 10
0 1
1 1 1 1
y'
figura 6.5.2
Si vede immediatamente che la funzione y' e' realizzata individuando sulla mappa, al
fine della copertura della funzione, due sottoinsiemi disgiunti, di cui uno dipendente dalla
variabile x 2 , l'altro da x2 . Pertanto se x 2 e x 2 non commutano allo stesso istante puo' verifi-
carsi un'alea statica.
145
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Si puo' concludere percio' che un'alea statica puo' verificarsi ogni volta che una funzione
di stato viene realizzata individuando sulla mappa di Karnaugh sottoinsiemi disgiunti di cui
uno dipendente da una variabile, l'altro dalla stessa variabile negata.
Per eliminare l'alea statica e' quindi sufficiente prendere in considerazione un terzo
sottoinsieme, ridondante, che non dipenda dalla variabile in questione.
Nel caso che si sta esaminando e' pertanto sufficiente che la equazione di stato sia
realizzata come segue:
y' x 1 . x 2 x 2 . y x 1 . y
4
X1
X2 1
3 Z
figura 6.5.3
146
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Una situazione di questo genere viene detta alea dinamica. Anche le alee dinamiche
non sono fenomeni tipici dei circuiti sequenziali, ma si presentano anche nei circuiti
combinatori. Solo nel primo caso tuttavia sono pericolose.
Condizione necessaria e sufficiente al verificarsi di un'alea dinamica e' che esistano
nell'espressione della funzione di eccitazione y' due segnali x e x e che nell'espressione di y'
compaiano gli stessi segnali x e x di cui almeno uno su un percorso diverso dai primi.
In pratica le condizioni sono verificate quando esistono almeno 3 vie che portano il
segnale x all'elemento alla cui uscita si realizza una y' e che almeno una delle vie comporti
l'inversione della x e almeno una no.
Ad esempio il circuito di fig. 6.5.4 soddisfa tale condizione per quanto riguarda la
variabile x2.
X2 2
X1 1
X3 4 Z
X1
X2 5 3
X3
figura 6.5.4
y' x 1 . x 3 x 2 . y
z x1 x2 x3
x x x
1 2 3
y
000 001 011 010 110 111 101 100
0 0/1 1/1 1/1 0/1 0/1 0/1 0/0 0/1
1 0/1 1/1 1/1 1/1 1/1 1/1 0/0 0/1
y'/z
147
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
y' x 21 . y x 3 . x 1 x (2)
2 . x1 . x 2
3
x1 x3
Si consideri ora la transizione dalla condizione stabile x1x2x3y = 1111 alla condizione
x1x2x3y = 1011.
Tenendo presente che durante tutto il tempo si ha y =1, si ottiene:
b) x 21 0 x 22 x 23 y 1 y' 0
c) x 21 x 22 0 x 23 y 1 y' 1
TEOREMA
Un circuito sequenziale a due livelli privo di alee statiche allo stato 1 e'
anche privo di alee statiche allo stato 0 e di alee dinamiche.
La dimostrazione di tale teorema e' notevolmente complicata e non viene qui riportata.
E' tuttavia opportuno notare che il teorema non esprime una condizione necessaria. In effetti e'
possibile realizzare circuiti con un numero di livelli superiore a due e tuttavia privi di alee.
Le alee dinamiche possono essere eliminate aggiungendo dei ritardi concentrati nelle vie
piu' rapide (nell'esempio fatto poco piu' sopra aggiungendo dei ritardi concentrati per i segnali
x2(1) e x2(2)). Tuttavia la migliore soluzione si ottiene operando a livello di struttura del
circuito. Realizzandolo cioe', come enunciato dal teorema, con una struttura a due livelli priva
di alee statiche.
148
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso Ingresso
Stato 0 1 Stato 0 1
1 1 2 1 1 2
2 3 2 2 3 2
3 3 3 3 3 4
-- 4
figura 6.5.5
Ingresso
Stato
0 1
00 00 01
01 11 01
11 11 10
10 -- 10
figura 6.5.6
Si supponga invece che la variazione di x giunga su Gy2 prima che su Gy1. L'evoluzione
del circuito potrebbe allora essere la seguente:
149
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
ESEMPIO 1
Si progetti un divisore binario, cioe' un circuito a un ingresso e un'uscita il cui valore
cambi ogni volta che l'ingresso passa da 0 a 1.
Il grafo degli stati e la matrice primitiva delle sequenze sono riportati in fig. 6.6.1.
150
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso
0 1 1
Stato 0 1 z
1/0 2/1
1 1 2 0
2 3 2 1
0 0
3 3 4 1
4/0 3/1 4 1 4 0
1
1 0
figura 6.6.1
Si vede immediatamente che non esistono stati equivalenti e pertanto non e' possibile
ridurre il numero di stati. Il diagramma delle transizioni e la relativa tavola delle transizioni
sono riportati in fig. 6.6.2.
1/0 2/1 y
1
y 0 1
2
0 1/0 4/0
1 2/1 3/1
4/0 3/1
figura 6.6.2
00 00 /0 01/0
01 11/1 01 /1
11 11 /1 10/1
10 00/0 10 /0
y' y'
1 2
Per ricavare le equazioni del circuito e' opportuno rappresentare separatamente le due
mappe delle funzioni y1' e y2', in modo da individuare le eventuali alee statiche. Una volta
ottenute le equazioni si verifichera' che non ci siano alee dinamiche; infine ci si occupera'
151
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
delle alee essenziali, che per la natura logica della matrice delle sequenze, sono inevi-
tabilmente presenti.
y y y y
1 2 1 2
x x
00 01 11 10 00 01 11 10
0 1 1 0 1 1
1 1 1 1
1 1
y' y'
1 2
Per evitare alee statiche e' necessario prendere in considerazione nella funzione y'1 il
termine y1 .y 2 e nella y'2 il termine y1 .y 2 . Si ottiene pertanto:
y'1 x. y 2 x . y1 y1 . y 2 y1 . x y 2 x. y 2
y'2 x . y 2 x .y 1 y1 . y 2 y1 . x y 2 x. y 2
z y2
Il relativo circuito, realizzato con porte NAND, e' riportato in fig. 6.6.3.
_ 1
_
X X
6 4
2 Z
figura 6.6.3
y5 y1.y6 y1 y6
Sostituendo y1 con y3 si ottiene:
y'5 y3 . y6 y3 y6
Ora
152
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
y3 y1 . y 6 y1 y6
e quindi
y'5 y 3 y6 y1 y 6 y6 y1.y 6 y 6 y1 y 6 y5
Infine , sostituendo con la tecnica del bundling y2 all'ingresso del NAND 6 con gli
ingressi del NAND 2 si ottiene il circuito finale di fig. 6.6.4.
X
3
1
6 4
2 Z
5
figura 6.6.4
La struttura circuitale di fig. 6.6.3 e' priva di alee dinamiche poiche' non vi sono tre
itinerari che conducano il segnale x agli elementi di uscita. Inoltre e' praticamente insensibile
alle alee essenziali in quanto le y agiscono con un ritardo quasi certamente maggiore di quello
della x. Tuttavia se si volesse un'assoluta certezza di corretto funzionamento sarebbe
necessario introdurre un elemento di ritardo in uscita al NAND 2.
ESEMPIO 2
Si vuole realizzare un contatore ad anello, cioe' un circuito a 1 ingresso e n uscite in cui
l'uscita zj = 1 quando e solo quando si sono avute j + n.k (k = 0,1,....) variazioni dell'ingresso.
Tutte le altre uscite devono essere nulle.
Ponendo n= 4, la matrice delle sequenze e la tavola di flusso sono riportate in fig. 6.6.5
Ingresso x
Stato 0 1 Uscita y1 y2 0 1
1 1 2 1000 00 00 / 1000 01/ ------
, ,
y y /z z z z
1 2 1 2 3 4
figura 6.6.5
153
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
y'1 x. y 2 x . y1 y1 . y 2
y'2 x. y 2 x .y1 y1 . y 2
z1 x.y 2
z2 x .y1
z3 x. y 2
z4 x . y1
Realizzare il relativo circuito in modo che sia privo di alee statiche e dinamiche richiede
8 NAND e 6 invertitori. Una soluzione migliore si puo' ottenere codificando lo stato con
quattro variabili e facendo coincidere le variabili di stato con quelle d'uscita. E' necessario
tuttavia ricorrere in tal caso a transizioni multiple secondo la tavola di flusso di fig. 6.6.6 e le
relative equazioni di stato e di uscita sono:
x
y1 y2 y3 y4
0 1
0000 -- --
0011 -- 0001/--
0110 0010/-- --
0111 -- --
y'1 = x. y 4+ y 1.y 2
0101 -- --
y'2 = x . y1+ y 2 .y 3
2 0100 0110/-- 0100/0100
y'3 = x. y 2+ y 3. y 4
1100 -- 0100/--
y'4 = x . y 3+ y1. y 4
1101 -- --
1111 -- --
1110 -- --
1010 -- --
1011 -- --
1001 1000/-- --
,
y1, y2 y3, y4, / z z z z
1 2 3 4
figura 6.6.6
Il relativo circuito richiede solo 12 NAND ed e' riportato in fig 6.6.7. Un'importante
proprieta' di questo circuito risiede nel fatto che esso e' iterativo; e' cioe' estensibile a qualsiasi
154
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
numero di uscite con la semplice ripetizione dell'elemento base indicato nel riquadro a
tratteggio di fig. 6.6.7.
_ x _
x x
x
z1 z2 z3 z4
figura 6.6.7
Ingressi Uscite
al Cella Cella Cella al
contorno 1 2 n contorno
Ingressi primari
x x x
1j 2j rj
y y
Ingressi 1j 1,j+1 Uscite
y Cella y
secondari 2j 2,j+1 secondarie
dalla cella j verso la cella
y y
j-1 mj m,j+1 j+1
z z z
1j 2j rj
Uscite primarie
figura 6.7.1
155
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Si noti che vi sono due distinti tipi di ingresso, gli ingressi primari, che provengono
dall'esterno della rete, e gli ingressi secondari, che provengono da celle precedenti. Allo
stesso modo esistono uscite primarie verso il mondo esterno e secondarie verso altre celle
della rete. All'estrema sinistra della successione di celle vi sono quelli che vengono chiamati
ingressi al contorno (o ingressi al confine), mentre all'estrema destra si hanno, in uscita
dall'ultima cella, le uscite al contorno.
Spesso gli ingressi al contorno sono dei valori costanti e le uscite al contorno sono le
sole uscite della rete verso il mondo esterno. Si noti inoltre che gli ingressi e le uscite al
contorno, pur trasferendo informazione verso il mondo esterno, usano la stessa notazione
degli ingressi e delle uscite secondarie.
Gli esempi che seguono verranno utilizzati per illustrare l'analisi e la sintesi di alcune
reti iterative di pratico impiego, facendo vedere che tutte le tecniche usate per la sintesi delle
reti sequenziali possono essere utilizzate.
ESEMPIO 1
Nella normale pratica si sarebbe portati a considerare un contatore come un blocco
unico che rappresenta un circuito sequenziale, ma nel caso che ora verra' preso in esame
l'approccio sara' affatto diverso.
In genere in un calcolatore si ritiene utile che i registri aritmetici di uso generale
possiedano anche capacita' di conteggio. Un buon punto di partenza per conseguire tale
obiettivo e' rappresentato dal circuito di fig. 6.7.2.
Come illustrato, gli ingressi x1,....,x n provengono da un bus di dati e possono
rappresentare il contenuto di un particolare registro. Le uscite z1,....,zn della rete iterativa
saranno il nuovo contenuto dello stesso registro dopo l'incremento. Evidentemente le
operazioni devono essere opportunamente temporizzate e il trasferimento del nuovo dato nel
registro avverra' sotto i controllo di un opportuno segnale
x x x3 xn
1 2
z z z zn
1 2 3
verso il registro
figura 6.7.2
156
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Molte critiche potrebbero essere fatte nei riguardi del circuito proposto, come ad
esempio il fatto che x1 deve propagarsi attraverso n-1 livelli di gate AND, che la rete formata
dall'AND e dallo XOR del bit 1 non e' necessaria e che l'AND del bit n e' parimenti non
necessario. Si assumera' tuttavia la rete proposta come semplice esempio di rete iterativa.
Si prenda ora in considerazione la tipica cella j, rappresentata in fig. 6.7.3. Nella stessa
figura sono anche tabulati i valori di yj+1 e zj per tutte le combinazioni di valori che gli
ingressi xj e yj possono assumere. Si puo' notare che tale tabulazione ha una corrispondenza
formale completa con la tabella di stato di un circuito sequenziale. Gli ingressi primari
corrispondono a quelli del circuito sequenziale, gli ingressi secondari corrispondono agli stati
attuali, le uscite secondarie prendono il posto degli stati futuri, mentre quelle primarie
corrispondono infine alle uscite del circuito sequenziale.
yj+1 zj
xj
x = 0 x = 1 x = 0 x = 1
y j j j j
j
0 0 0 0 1
yj AND y j+1 1 0 1 1 0
(b)
x
j
XOR q 0 1
A A,0 A,1
zj
B A,1 B,0
(a) qj+1 , z j
(c)
figura 6.7.3
Definendo yi=0 come stato A e yi=1 come stato B, la tabella puo' essere trasformata
nella tavola di stato di fig. 6.7.3 (c).
Come nei circuiti sequenziali, anche nel progetto di una rete iterativa il primo passo
consiste nella trasformazione delle specifiche in una tavola di stato e si possono utilmemte
impiegare tutte le tecniche gia' viste in precedenza.
ESEMPIO 2
Un insieme di bit x1, ...., x n rappresenti l'informazione ricevuta da un sistema di
comunicazione. Un particolare schema di decodifica richieda che venga verificata la parita'
(dispari) sul primo bit, sulla coppia formata dai primi due bit, sui primi tre bit e cosi' via. Si
vuol progettare una rete iterativa che realizzi quanto previsto.
A questo punto ci si deve rendere conto che le uscite desiderate sono le funzioni
simmetriche S11 , S12 , S13,3 , S14,3 e cosi' via. Si puo' costruire direttamente una tavola di stato
157
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
imponendo che l'ingresso secondario (stato) alla cella j sia A se la parita' sugli ingressi primari
x1, x2, ... , xj-1 e' dispari, mentre sia B se e' pari. L'uscita zj sia viceversa 1 se la parita' dei bit
x1, x2, ... ,xj e' dispari. Di conseguenza zj = 1 quando xj = 0 e lo stato di ingresso e' A, oppure
quando xj = 1 e lo stato di ingresso e' B. Infine l'uscita secondaria (stato futuro) sara' A quando
zj=1 e B quando zj=0. Si ottiene in definitiva la seguente tavola di stato.
x
j
0 1
A A/1 B/0
B B/0 A/1
x
j
y
yj j+1
z
j
ESEMPIO 3
Si abbiano n richieste di interruzione x1, .... ,xn inviate ad un microcalcolatore da un
certo numero di unita' periferiche, che richiedono un servizio. Si supponga che in un
determinato istante tale calcolatore non possa comunicare con piu' di due di queste periferiche
e che la priorita' delle interruzioni sia decrescente da 1 a n (x1 e' cioe' la periferica con la piu'
alta priorita'). Si vuole sintetizzare una rete in cui le uscite z1, z2, ... , zn siano tali che non piu'
di 2 di esse siano 1 allo stesso istante e corrispondano alle due piu' alte priorita' degli ingressi
attivi in quell'istante. Se solamente una richiesta di interruzione e' attiva, solo la
corrispondente uscita dovra' venir posta a 1, mentre tutte le altre uscite dovranno essere nulle.
Il problema puo' essere risolto definendo tre ingressi secondari (stati) per la cella j. Il
primo stato A indichera' che non vi sono richieste di priorita' maggiore di quella corrente j, lo
stato B che ve ne e' una sola, lo stato C che sono attive due o piu' richieste di interruzione a
priorita' piu' elevata di j.
158
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
Ingresso
Stato x =0 x =1
j j
A A/0 B/1
B B/0 C/1
C C/0 C/0
Stato/z
j
Una buona codifica puo' essere A = 00, B = 01, C = 11, da cui si ricava la seguente
tavola di flusso.
xj
y2,j y1,j
0 1
00 00/0 01/1
01 01/0 11/1
11 11/0 11/0
10 --/- --/-
y2,j+1 y1,j+1 / z j
y 2, j 1 y 2, j x j . y1, j
y1, j 1 y1, j x j
zj x j .y 2, j
159
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê
xj
y 2,j
y 2,j+1
y 1,j
y 1,j+1
zj
figura 6.7.4
160
#
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
CAPITOLO VII
CIRCUITI SEQUENZIALI SINCRONI
7.1) Introduzione.
Nel capitolo precedente sono stati presi in considerazione gli aspetti essenziali, sia dal
punto di vista teorico che applicativo, dei circuiti sequenziali asincroni, con riferimento al
modello fondamentale, esaminando in dettaglio i problemi relativi alla loro sintesi.
Nel presente capitolo verra' affrontato il problema dell'analisi e della sintesi dei circuiti
sequenziali sincroni.
E' bene mettere in evidenza che per tale tipo di circuiti e' difficile individuare degli
esempi che siano allo stesso tempo semplici e significativi. Per tale motivo gli esempi che
verranno presi in considerazione avranno un carattere chiaramente artificiale e non dovranno
essere considerati esempi significativi di sistemi reali.
z
x
J
y T
1
Q K
_
y
2
J
T
Q K
clock
figura 7.2.1
161
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
J y1 x K y1 x
Jy2 z x y 1 .y 2 K y2 x y1 .y 2
yn 1
J n .y n K n . yn
y1n 1
x n .y1n x n . y1n xn
Da tali equazioni si puo' ottenere la tavola di transizione del circuito sequenziale che
permette di valutare per ogni combinazione di x n , y1n e y 2n i valori di y1n 1 ,y 2n 1 e z n .
E' semplice seguire sulla tavola di transizione l'evoluzione del circuito, tenendo presente
che per ciascun impulso di clock si puo' avere un'unica variazione di stato.
Se ad esempio x n y 2n 0 e y1n 1 si ha z n 1. All'istante n+1, cioe' dopo il successivo
impulso di clock, si ha y1n 1 0, y 2n 1 1 e nell'ipotesi che x n 1 sia sempre pari a 0, z n 1 0 .
xn
n n
y1 y2 0 1
00 00/0 11/1
01 00/0 10/0
11 00/0 10/0
10 01/1 11/1
yn+1 yn+1 / z n
1 2
162
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Ingresso
1/1
xn=0 x n=1 0/0
Stato
q1 q1,0 q3,1 q1 q3
0/0
q2 q1,0 q4,0
q3 q1,0 q 4,0 0/0 1/1 1/0
0/1
q4 q 2,1 q3 ,1
q2 q4
1/0
(a) (b)
figura 7.2.2
Equazioni di
ingresso Equazioni Tavola delle Tabella di
Circuito degli elementi di stato futuro transizioni stato
di memoria
Equazioni di
eccitazione
Diagramma della memoria
di stato
figura 7.3.1
Una notevole attenzione deve essere dedicata ai primi due passi, cioe' nel determinare la
tabella di stato e nel ricavare poi la tabella di stato minima.
163
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Clock
Rivelatore
di inizio z x
messaggio
z
clock
figura 7.4.1
La sintesi prende le mosse fissando lo stato di reset q0 , come illustrato in fig. 7.4.2 (a).
A partire da questo stato il circuito deve conteggiare il numero di 1 ricevuti consecutivamente;
cio' viene realizzato passando ad un nuovo stato ogni volta che viene ricevuto un nuovo 1.
164
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
0/0
1/0
(a) 0/0
0/0 1/0
1/0
0/0
0/0
q
4
0/0
(b)
figura 7.4.2
Come e' illustrato in fig. 7.4.2 il circuito si porta nello stato q1 quando viene ricevuto il
primo 1 e nello stato q2 quando viene ricevuto il secondo. L'uscita associata a ciascuna di
queste transizioni e' 0. Il terzo 1 consecutivo che perviene in ingresso manda il circuito in q3 e
genera un'uscita 1. Giunto in q3 il circuito vi rimane, qualsiasi sia l'ingresso, ed ha uscita nulla
finche' non viene riportato in q0 secondo un meccanismo esterno che non e' illustrato nella
tabella di stato di fig. 7.4.3.
Ingresso
Stato 0 1
q0 q4 ,0 q1 ,0
q1 q4 ,0 q2 ,0
q2 q4 ,0 q3 ,1
q3 q3 ,0 q3 ,0
q4 q4 ,0 q1 ,0
figura 7.4.3
165
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Tutte le possibili sequenze di ingresso sono state in tal modo prese in considerazione. E'
immediato verificare che in corrispondenza a ciascun stato compaiono sul grafo le transizioni
relative ad ambedue gli ingressi. Si ha cioe' una macchina sequenziale completa.
Si puo' notare che lo stato q4 potrebbe essere eliminato riportando il circuito nello stato
q0 quando si ha in ingresso uno 0. In generale infatti, quando possibile, si utilizzano stati gia'
esistenti come prossimo stato. Tuttavia essendo la costruzione del diagramma di stato una
procedura intuitiva, qualora ci sia il dubbio se sia necessario definire un nuovo stato o
utilizzarne uno gia' esistente, e' bene introdurre un nuovo stato per evitare seri errori.
Ingresso x
0/0 d Stato
0 1
0/1 1/0 a b/0 c/0
b
b d/0 e/0
0/0 1/0 e 1/0
0/0
c f/0 g/0
a
d e/1 e/0
0/0 1/0
1/0 f 0/0
e e/0 e/0
c 1/1 0/0 f f/0 f/0
1/0
g g f/0 f/1
figura 7.4.4
Si puo' notare tuttavia che il circuito funziona allo stesso modo una volta che abbia
raggiunto lo stato e oppure lo stato f. Quindi, a rigore, solo uno di tali stati e' necessario; ad
esempio la riga f della tavola di flusso di fig. 7.4.4 puo' essere soppressa e nella tavola stessa f
puo' essere sostituito ovunque da e senza alterare in alcunche' il funzionamento del circuito.
Tenendo conto anche dell'effetto dell'ingresso d e codificando l'ingresso secondo quanto
illustrato in fig. 7.4.5 (a) si ottiene la tabella di stato di fig. 7.4.5 (b).
166
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Le prime due colonne sono la copia della tavola di flusso di fig. 7.4.4 mentre i rimanenti
due ingressi fanno evolvere il sistema verso lo stato a di reset.La tabella di stato di fig. 7.4.5
(b) realizza quindi quanto esposto nelle specifiche senza la necessita' di alcun meccanismo
separato di reset.
X
Stato 1 2 3 4
d.x X a b/0 c/0 a/0 a/0
00 1 b d/0 e/0 a/0 a/0
(a) (b)
figura 7.4.5
Il metodo di determinazione del diagramma degli stati che e' stato esposto e' del tutto
generale. In assenza di uno specifico stato di reset si puo' usare come punto di partenza un
qualsiasi stato; tuttavia in assenza di uno stato di partenza ben determinato e distinguibile
dagli altri, il grafo che si costruisce puo' raggiungere notevoli dimensioni. Per contenere tali
dimensioni e' bene che gli archi del grafo puntino a stati esistenti, a partire dai quali si ha lo
stesso comportamento futuro, piuttosto che a nuovi stati appena definiti.
zn f x n , x n 1, z n 1
E' questo un esempio di circuito a memoria finita, nel senso che esso puo' ricordare
solamente un numero finito di ingressi e uscite passate per determinare l'uscita attuale e lo
stato futuro.
Si noti che la dizione "finito" non ha nulla a che fare con la capacita' di memoria in bit,
che e' ovviamente sempre e comunque limitata.
167
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Una versione generalizzata di circuito a memoria finita e' illustrata in fig. 7.5.1 (b), in
cui vengono memorizzati r ingressi precedenti e s uscite. L'uscita attuale e' funzione di queste
informazioni memorizzate e dell'ingresso attuale x.
n D Q
X
T X n-1
Zn
(a)
Q D
n-1 T
Z
Clock
Clock
n-1 n-2 n-3 n-r
D Q X D Q X D Q X D Q X
T T T T
(b)
n
Zn
X n n n-1 n-r n-1 n-s
Z = f(X ,X ,.....,X ,Z ,.....,Z )
Z n-s Z n-3 Z
n-2 Z
n-1
Q D Q D Q D Q D
T T T T
figura 7.5.1
ESEMPIO 1
Alcuni bit di informazioni siano codificati su una linea x e sincronizzati da un clock. I
bit siano codificati in modo che sulla linea x non possano mai apparire 2 o piu' simboli 1 o 4 o
piu' simboli 0 consecutivi.
168
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Si voglia progettare un circuito rivelatore di errore che dia un'uscita pari a 1 in cor-
rispondenza o al quarto 0 o al secondo 1 consecutivo sulla linea x. Se, ad esempio, si doves-
sero avere tre 1 consecutivi sulla linea x, l'uscita dovrebbe rimanere alta per i due ultimi pe-
riodi di clock.
E' immediato riconoscere che il circuito da progettare e' un circuito a memoria finita.
Anzi il caso che si sta esaminando potrebbe essere definito a memoria finita dell'ingresso,
poiche' per un corretto funzionamento e' sufficiente memorizzare un certo numero di valori
passati dell'ingresso. Nel caso peggiore il circuito dovra' memorizzare tre ingressi precedenti:
se essi fossero stati 0 e l'ingresso attuale fosse ancora 0 l'uscita dovra' commutare a 1.Un
circuito che soddisfi quanto enunciato puo' avere la struttura di fig. 7.5.2 (a). I bit in arrivo
vengono memorizzati nella catena di flip-flop in modo che in qualsiasi istante
y n2 xn 1
y1n xn 2
y n0 xn 3
La rete logica combinatoria provvedera' poi a sintetizzare l'uscita sulla base dei dati
memorizzati e dell'ingresso attuale. La tavola di transizione del circuito in questione puo'
allora essere ricavata direttamente, come illustrato in fig. 7.5.2 (b).
Y2 Y1 Y0
Xn D Q D Q D Q
T T T
(a)
X X
y2 y 1 y Stato
0 0 1
000 000,1 100,0 a a,1 e,0
001 000,0 100,0 b a,0 e,0
(b) (c)
figura 7.5.2
Come prima cosa e' necessario listare tutte le otto combinazioni delle variabili di stato.
In corrispondenza a ciascuna di esse lo stato futuro resta determinato osservando che per ogni
169
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
impulso di clock le variabili di stato si spostano di una posizione a destra nella catena di flip-
flop D e il posto che si rende disponibile viene occupato dell'ingresso attuale.
Per completare la tavola delle transizioni e' infine necessario assegnare il valore
dell'uscita. Nel caso specifico si ottiene:
z x . y 2 x.y 2 .y1 .y 0
Sebbene il circuito di fig 7.5.2 (a) sia perfettamente in grado di funzionare esso non e'
certamente il minimo. Infatti in un solo caso e' necessario memorizzare i tre precedenti valori
n-1 n-2 n-3
dell'ingresso. Se infatti x = 1, non e' necessario conoscere quanto valevano x e x ; e'
quindi evidente che possono essere sufficienti meno di 8 stati interni.
In un circuito con memoria finita dell'ingresso del tipo di quello illustrato in fig. 7.5.2 la
memoria agisce in sostanza come un convertitore serie parallelo. Le informazioni di ingresso,
necessarie a determinare l'uscita, arrivano cioe' in una sequenza temporale e il circuito
semplicemente le memorizza per utilizzarle poi in un unico istante tramite una rete
combinatoria.
In conclusione, se si puo' determinare che ad ogni istante l'uscita di un circuito se-
quenziale dipende da non piu' di un certo numero di ingressi precedenti, allora per la deter-
minazione della tavola delle transizioni si puo' utilizzare l'approccio descritto nell'esempio
precedente.
Se la piu' lunga sequenza di ingresso da memorizzare e' lunga n, si dira' allora che la
memoria finita dell'ingresso e' lunga n e saranno necessari n elementi di memoria per ciascuna
linea di ingresso; nel caso in cui il segnale di ingresso sia unico la memoria potra' allora avere
2n possibili stati, cioe' potranno essere memorizzate 2n distinte sequenze di ingresso di
lunghezza n. Se l'uscita deve essere diversa per ciascuna di queste 2n sequenze allora il
circuito di fig. 7.5.2 (a) e' il piu' economico e compito del progettista sara' solo quello di
determinare la rete di uscita.
Se invece l'uscita in corrispondenza a diverse sequenze di ingresso e' sempre la stessa,
allora puo' essere sufficiente un numero inferiore di elementi di memoria.
Nell'esempio 1 si e' presa in considerazione una memoria di lunghezza 3 e le sequenze
memorizzabili sono in numero di 8.
Si e' tuttavia messo in evidenza che tutte le sequenze per le quali xn-1= 1 producono la
stessa uscita; di conseguenza non e' necessario che la memoria distingua le quattro confi-
gurazioni con tale caratteristica ed e' quindi possibile ridurre la memoria classificando i
messaggi di ingresso all'atto del loro arrivo.
Riducendo in tal modo la memoria, la forma del circuito puo' differire da quella di fig.
7.5.2 nel senso che l'uscita dei flip-flop di memoria non sara' semplicemente uguale ai
precedenti ingressi, ma sara' funzione di essi.
La sintesi tuttavia puo' essere eseguita anche a partire dalla tavola di stato ricavata dal
circuito base, minimizzando poi il numero di stati necessari.
Quando la forma del circuito deve essere quella di fig. 7.5.2 la tavola delle transizioni,
una volta che sia stata fissata la lunghezza della memoria, e' unica. In fig. 7.5.3 e 7.5.4 sono
riportate le tavole di transizione per memorie di lunghezza 4, 3 e 2 rispettivamente.
170
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
n
x
n-1 n-2 n-3 n-4 n
x x x x q
0 1
0000 a a i
0001 b a i
0010 c b l
0011 d b l
0100 e c m
0101 f c m
0110 g d n
0111 h d n
1000 i e p
1001 l e p
1010 m f q
1011 n f q
1100 p g r
1101 q g r
1110 r h s
1111 s h s
figura 7.5.3
Unico compito del progettista sara' in questo caso assegnare l'appropriato valore delle
uscite.
n
x
110 g c g
111 h c g
figura 7.5.4
Sebbene i circuiti con memoria finita dell'ingresso siano i piu' facili da riconoscere e da
progettare, sono importanti anche i circuiti a memoria finita la cui struttura generale e'
171
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
riportata in fig. 7.5.1 (b). Infatti riconoscere il carattere di memoria finita puo' far notevol-
mente semplificare la procedura di progetto, come e' illustrato nell'esempio che segue.
ESEMPIO 2
Si voglia progettare un contatore bidirezionale a 3 bit (modulo 8). Il conteggio debba
apparire in forma di numero binario su tre linee di uscita z2, z1 e z0 con z2 bit piu' si-
gnificativo. Il conteggio procedera' con ogni impulso di clock e sara' un conteggio in avanti
quando un ingresso x vale 1 mentre sara' all'indietro se x vale 0. Si riconosce immediatamente
che il contatore bidirezionale e' un dispositivo a memoria finita dell'uscita con una
lunghezza di memoria pari a 1. Il valore dell'uscita z e' infatti funzione solo del suo valore
immediatamente precedente e del valore attuale dell'ingresso. Poiche' z e' un vettore di tre bit,
di componenti z2,z1 e z0, saranno necessari tre flip-flop per rappresentare un suo valore
precedente. Una possibile configurazione circuitale e la corrispondente tavola delle transizioni
sono riportate in fig. 7.5.5. La tavola delle transizioni e' costruita direttamente notando che il
valore attuale desiderato per le uscite corrisponde con il valore futuro delle variabili di stato.
E' evidente che per un contatore modulo 8 sono necessari 8 stati e quindi la tavola di fig. 7.5.5
(b) e' minima.
Y0
Q D
x
T
zn-1
000 111 001
Y1
Q D
001 000 010
T
010 001 011
Y2
011 010 100
Q D
100 011 101
T
101 100 110
110 101 111
(a) (b)
figura 7.5.5
Se la struttura del circuito di fig. 7.5.5 (a) e' soddisfacente si puo' procedere direttamente
al progetto dei circuiti combinatori che realizzano l'uscita desiderata. Tuttavia, sebbene la
tavola delle transizioni sia minima, la forma del circuito di fig. 7.5.5 (a) non e' la sola
possibile.
E' possibile infatti usare differenti tipi di flip-flop e in tal caso non e' necessario che le
variabili di stato siano uguali alla piu' recente uscita.
In fig. 7.5.6 sono riportati tavola di stato e diagramma degli stati del circuito di fig. 7.5.5
(a).
172
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
xn
qn 0 1
1/0
q0 1/1 q q /7 q /1
0 7 1
q
7 0/7 q q /0 q /2
1 0 2
0/0 q1
1/7 q q /1 q /3
2 1 3
0/6 1/2
q q /2 q /4
q6 3 2 4
0/1
q q /3 q /5
4 3 5
0/5 q2
q q /4 q /6
1/6 0/2 5 4 6
0/4 q q /5 q /7
q5 0/3 1/3 6 5 7
q3 q q /6 q /0
7 6 0
q4
1/5
1/4
(a) (b)
figura 7.5.6
Nei due esempi di questo paragrafo e negli esempi dei paragrafi precedenti sono stati
descritti due distinti approcci alla sintesi della tavola di stato. Talvolta la massima difficolta',
specialmente per chi non abbia ancora accumulato una sufficiente esperienza, sta nel decidere
quale metodo usare. Se il problema puo' essere riconosciuto senza equivoci come un caso di
memoria finita, allora e' preferibile la sintesi diretta della tabella di stato o di quella delle
transizioni.
Al contrario e' migliore l'approccio attraverso il diagramma di stato se si puo' indi-
viduare uno stato di reset o comunque uno stato di partenza. Di solito infatti una macchina
sequenziale che possieda uno stato di reset e' una macchina a memoria non finita. Per tali
macchine di solito si giunge in uno stato in cui si permane indefinitamente oppure si cicla su
un sottoinsieme dei suoi stati dopo aver fornito la risposta desiderata. Per rendere la macchina
riutilizzabile e' necessario riportarla con un'opportuna sequenza di ingresso nello stato iniziale.
Una sequenza fissa che compia tale operazione e' detta sequenza di sincronizzazione, mentre
lo stato su cui si ritorna con tale operazione viene detto stato di reset.
Spesso, come si e' visto negli esempi del paragrafo precedente, la sequenza di sin-
cronizzazione viene realizzata con un singolo ingresso o con una speciale linea detta linea di
reset.
ESEMPIO 3
Si riprogetti lo stesso circuito dell'esempio 2 del paragrafo 7.4 con la differenza che ora
la linea d di reset non sia presente. Al suo posto l'inizio di un nuovo carattere sia segnalato da
una sequenza di tre 1, che puo' iniziare in qualsiasi istante dopo che un carattere di 3 bit sia
stato esaminato. Il diagramma di stato fino allo stato g e' lo stesso di quello di fig. 7.4.4 con
gli stati e ed f combinati assieme. Si intuisce che lo stato e e' lo stato di tenuta, caratteristico
dei circuiti a memoria non finita. L'operazione di reset e' ora realizzata con una sequenza di tre
1 che porta il circuito dallo stato e allo stato a attraverso gli stati h e i. La tavola di stato
risultante e' illustrata in fig. 7.5.7 (b).
In alcuni problemi non e' possibile identificare ne' uno stato di reset, ne' una dimensione
finita della memoria. In tali casi si puo' scegliere arbitrariamente un qualsiasi stato, la cui
storia passata sia ricostruibile al meglio, ed utilizzarlo come stato iniziale. E' tuttavia
173
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
necessario porre in tal caso estrema attenzione nel generare la tavola di stato. Solo
occasionalmente puo' avvenire di trovarsi in presenza di una macchina a memoria finita dotata
di uno stato di reset: in tal caso l'uno o l'altro approccio sono ugualmente validi.
x
q 0 1
a a b,0 c,0
1/0 0/0
b d,0 e,0
c b
c e,0 g,0
1/0 0/0 1/0 0/0
1/0
d e,1 e,0
0,1/0 0,1/0
g e d
0/0 e e,0 h,0
1/0 0/0 0/0
g e,0 e,1
1/0
h i h e,0 i,0
i e,0 a,0
(a) (b)
figura 7.5.7
x
Stato 0 1
q0 q 0 /1 q4 /0
q1 q 0 /0 q4 /0
q2 q1 /0 q5 /0
q3 q1 /0 q5 /0
q4 q2 /0 q6 /1
q5 q2 /0 q6 /1
q6 q3 /0 q7 /1
q7 q 3 /0 q7 /1
figura 7.6.1
E' opportuno tuttavia notare che non sempre la riduzione del numero di stati porta ad
una riduzione degli elementi di memoria; in effetti, cio' che conta a tal fine e' che venga
ridotto il numero delle variabili necessarie a codificare gli stati.
174
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Indicando con s il numero degli stati, il numero delle variabili usato per la codifica e' il
piu' piccolo intero che approssima per eccesso il log2 s.
Si voglia ad esempio minimizzare la tavola degli stati ricavata per l'esempio 1 del
paragrafo 7.5, e riportata in fig. 7.6.1.
La tabella di evoluzione delle coppie di stati compatibili rispetto all'uscita e' riportata in
fig. 7.6.2.
Ingresso
Coppie - compatibili 0 1
q ,q q ,q q ,q
4 6 2 3 6 7
figura 7.6.2
Le coppie q1, q2 e q1, q3 rimangono escluse in quanto non evolvono verso coppie
compatibili rispetto all'uscita. Tra le coppie di stati compatibili puo' poi essere messa in luce
una relazione di mutua compatibilita' tra gli stati q4, q5, q6 e q7.
Le classi di stati equivalenti sono quindi:
Pertanto a partire dalla macchina di fig. 7.6.3 (a), in cui sono evidenziate le classi di stati
equivalenti, si perviene a quella minima di fig. 7.6.3 (b).
175
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
0/1 q 1/0
q 1/1
q
0 4 6
S0 1/1 0/1
1/1
S3
q' 0/0 q' 0/0 q'
1/1 0 1 2
1/0 q q
0/0 5 7
1/0 1/0 1/0
0/0
1/0 0/0
q'
S1 3 1/1
q 0/0
q
1 2
(b)
q
3
S2
(a)
figura 7.6.3
2r 1 m 2r
176
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
2r !
2r m!
10 11 10 11 10 11
d c d b b d
a b a c a c
00 01 00 01 00 01
(a) (b) (c)
figura 7.7.1
In maniera analoga si puo' ragionare per qualsiasi numero di stati; il numero delle
diverse assegnazioni distinte in funzione del numero di stati e' riportato in fig. 7.7.2.
Numero di Numero di
Assegnazione distinte
stati variabili
2 1 1
3 2 3
4 2 3
5 3 140
6 3 420
7 3 840
8 3 840
9 4 10.810.800
figura 7.7.2
Per i circuiti con soli due stati vi e' una sola possibilita' di scelta e non vi e' quindi alcun
problema di assegnazione. Per circuiti con tre o quattro stati la via piu' efficace per risolvere il
177
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
problema e' quella di provare tutte le tre possibili assegnazioni e verificare quale di esse
produce il circuito piu' economico.
Per piu' di quattro stati l'enumerazione completa e' ovviamente impossibile; si rende
necessario un qualche metodo di sviluppo che porti ad una buona assegnazione a partire dalla
tavola di stato.
Si consideri la tavola di stato di fig. 7.7.3, che e' la tavola minima per il circuito ri-
velatore di inizio messaggio dell'esempio 1 del paragrafo 7.4, dove con a e' stato indicato
l'insieme degli stati {q0,q4} e con b, c, d gli stati q2, q1 e q3 rispettivamente.
In fig. 7.7.4 (a),(b),(c) sono riportate le tavole di flusso che si ottengono con le tre
possibili assegnazioni di fig. 7.7.1. Poiche' vi e' una sola uscita, l'assegnazione della codifica
non modifica in alcun modo il costo della rete di uscita e pertanto la parte della tavola di
flusso relativa a quest'ultima grandezza viene omessa per motivi di chiarezza.
Ingresso
Stato 0 1
a a/0 c/0
b a/0 d/1
c a/0 b/0
d d/0 d/0
figura 7.7.3
Il passo successivo della sintesi consiste nel tradurre la tavola di flusso nelle mappe di
Karnaugh, o meglio nelle mappe di eccitazione, che rappresentano le equazioni di ingresso
degli elementi di memoria.
b 01 00 10 b 11 00 10 b 10 00 11
c 11 00 01 c 01 00 11 c 01 00 10
d 10 10 10 d 10 10 10 d 11 11 11
figura 7.7.4
178
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
ci si propone in questo capitolo e' opportuno modificare leggermente la forma in cui sono
presentate queste informazioni.
Se, ad esempio, si considera un flip-flop JK la mappa ricavata in precedenza e' riportata
in fig. 7.7.5 (a) mentre in fig. 7.7.5 (b) si ha quella che viene chiamata lista delle transizioni ed
in cui viene assegnata la condizione degli ingressi necessaria ad ottenere una tra le quattro
possibili transizioni di stato. Si noti che con i valori soprassegnati si intende la transizione
dell'uscita verso il relativo valore, mentre i valori senza soprassegno indicano la permanenza
dell'uscita al valore precedente.
Qn
JK 0 1 Q n-- Qn+1 J K
00 0 1 0 0 -
_
01 0 0 1 1 -
_
10 1 1 0 - 1
11 1 0 1 - 0
Q n+1
(a) (b)
figura 7.7.5
0 0 - 0 0 0 0
_ _ _
1 1 0 1 1 1 1
_ _ _
0 0 1 0 0 0 1
1 - 0 1 1 1 0
figura 7.7.6
Per sviluppare le mappe di eccitazione per l'assegnazione di fig. 7.7.4 (a) e' necessario
considerare una variabile di stato alla volta e costruire le due mappe di eccitazione per J e K
utilizzando la lista di transizione di fig. 7.7.5 (b). Si ottiene:
179
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
x x x
y y y y y y
1 2 0 1 1 2 0 1 1 2 0 1
00 0 1 00 0 1 00 - -
01 0 1 01 0 1 01 - -
11 0 0 11 - - 11 1 1
10 1 1 10 - - 10 0 0
y' J K
1 y1 y1
x x x
y y 0 1 y y 0 1 y y 0 1
1 2 1 2 1 2
00 0 1 00 0 1 00 - -
01 0 0 01 - - 01 1 1
11 0 1 11 - - 11 1 0
10 0 0 10 0 0 10 - -
y' J K
2 y2 y2
figura 7.7.7
Da tali mappe si puo' ottenere la realizzazione minima, facendo notare che il problema
va affrontato come problema di minimizzazione di un circuito multiterminale. Le equazioni
che si ricavano sono:
J y1 x K y1 y2 Jy2 x .y 1 Ky2 x y1
z x .y 1 . y 2
J y1 x . y2 K y1 x. y 2 Jy2 x .y 1 K y2 x y1
z x . y1 . y 2
e rispettivamente
180
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
x.y2
J Q y1
__
T
x.y 2 _
K
y1
x
y2
J Q
_
T y2
K
_
x.y 1 .y 2
z Clock
figura 7.7.8
Ingresso Ingresso
Stato 0 1 Stato
181
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
s y1 x. y 2 R y1 x y2 Sy 2 x R y2 x. y1
z x.y1 .y 2 x .y1 . y 2
S y1 x y1 . y 2 R y1 x. y1 Sy 2 x Ry2 x .y 1
z x .y 1 .y 2 x . y1 . y 2
e rispettivamente
S y1 x .y 1 . y 2 R y1 x y1 . y 2 Sy2 x y 1 .y 2 R y2 x. y 2
z x .y 1 .y 2 x . y1 . y 2
L'assegnazione 7.7.1 (b) da' evidentemente luogo alle equazioni piu' semplici a partire
dalle quali e' immediato disegnare il circuito.
Avendo a che fare con circuiti a tre o quattro stati la procedura esposta, per quanto
complessa e noiosa, e' quella che garantisce il miglior risultato. Tuttavia, quando gli stati siano
cinque o piu', non e' evidentemente possibile provare tutte le assegnazioni che si possono
realizzare. E' necessario pertanto individuare alcune regole e mettere a punto dei modi
operativi che permettano di ottenere con uno sforzo ragionevolmente limitato un buon risul-
tato. Per individuare tali regole e' opportuno esaminare piu' attentamente gli esempi precedenti
allo scopo di vedere se vi sia qualche caratteristica che permetta di prevedere in anticipo quale
assegnazione conduce alla realizzazione minima.
In fig. 7.7.11 sono riportate le tavole di stato per le tre assegnazioni possibili in rife-
rimento agli ultimi due esempi visti, con gli stati ordinati secondo il codice ciclico della
mappa di Karnaugh. L'assegnazione che da' luogo al risultato migliore e' evidenziata cir-
condandola con una linea tratteggiata. Dall'osservazione delle due mappe racchiuse nel
tratteggio si deduce che l'assegnazione scelta tende a riunire gli ingressi relativi a stati futuri
uguali.
182
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Ad esempio per il caso di fig. 7.7.11 (a) si puo' notare che lo stato futuro in corri-
spondenza all'ingresso x = 1 per gli stati attuali b e d e' lo stato d. Ne risulta che il valore delle
variabili di stato per lo stato futuro sara' identico.
Ingresso Ingresso
Ingresso
Stato 0 1 Stato 0 1
Stato 0 1
a a c 00 a a c 00 a a c 00
b a d 01 c a b 01
A c a b 01
c a b 11 b a d 11 d d d 11
d d d 10 d d d 10 b a d 10
d a c 10 d a c 10 b d c 10
figura 7.7.11
Se quindi gli stati b e d vengono codificati con configurazioni che distano 1, allora il
valore presente di una delle variabili di stato sara' identico per ambedue gli stati.
Di conseguenza la commutazione per tale variabile di stato sara' la stessa per ambedue i
punti di ingresso e anche sulla tavola di eccitazione si avra' la medesima situazione.
Le condizioni messe in luce sono importanti in quanto la mappa di eccitazione dara'
luogo a equazioni piu' semplici se gli 1, gli 0 e le condizioni non specificate saranno, per
quanto possibile, raggruppati tra loro.
Nel caso che si sta esaminando, l'assegnazione prescelta attribuisce valore identico alla
variabile y1 per gli stati b e d, e pertanto le corrispondenti transizioni di y1 per x=1 sono
identiche. Il risultato si vede chiaramente nelle mappe di eccitazione di fig. 7.7.7 ; infatti in
quella Jy1 si hanno due condizioni non specificate, mentre in quella Ky1 si hanno due zeri
adiacenti.
Regola base per ottenere un buon risultato sara' pertanto quello di raggruppare, per
quanto possibile, gli ingressi relativi a stati futuri uguali. Vi sono tuttavia molti modi per ot-
tenere questi raggruppamenti e la regola base teste' enunciata puo' essere espansa e resa piu'
specifica.
Si noti che nella tavola di stato di fig. 7.7.11 (b) gli stati a e d evolvono verso gli stessi
stati per ambedue i valori dell'ingresso. Tale condizione verosimilmente produce una mappa
piu' semplice di quella che si ottiene quando il prossimo stato e' lo stesso in una sola colonna,
come nel caso che si e' appena preso in considerazione. Inoltre, se i due stati futuri a e c
vengono resi adiacenti, allora una delle due variabili di stato sara' la stessa in ambedue le
183
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
colonne della stessa riga e dara' quindi luogo con elevata probabilita' ad un'ulteriore sem-
plificazione.
La situazione descritta puo' essere individuata sulla mappa di eccitazione di fig. 7.7.10
in cui si hanno quattro zeri adiacenti nella mappa Sy1 e un gruppo di 2 uni e 2 condizioni non
specificate nella mappa Ry1.
Si consideri infine la tavola di stato di fig. 7.7.12.
In questa tabella gli stati a e c sono ancora gli stati futuri di a e d, ma non compaiono
nella stessa colonna. Nondimeno, se si rendono a e c adiacenti, una variabile di stato sara' la
stessa in ambedue le colonne di una data riga. Se inoltre si rendono anche a e d adiacenti,
allora queste righe risulteranno accoppiate.
Ingresso
Stato 0 1
a c a
b d c
c b a
d a c
figura 7.7.12
Da un esame delle tre possibili assegnazioni si vede che l'assegnazione di fig. 7.7.1 (b)
in cui gli stati a e c e gli stati a e d sono adiacenti, da' luogo al miglior circuito che si possa
ottenere per la tavola di stato di fig. 7.7.12.
Dalle osservazioni fin qui fatte si possono estrapolare le seguenti regole, utili ad ottenere
una efficiente codifica di stato.
REGOLA 1
REGOLA 2
Gli stati futuri di una determinata riga devono essere resi adiacenti.
184
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
REGOLA 3
E' importante notare che le tre regole enunciate sono in ordine di importanza decre-
scente. La loro applicazione puo' infatti portare a specifiche in conflitto tra di loro; tuttavia un'
assegnazione adottata per soddisfare a una regola a priorita' piu' alta non dev'essere modificata
per soddisfare una regola a priorita' minore.
Un'altra procedura operativa per la determinazione di un'assegnazione possibile e che
tiene, almeno in parte, conto delle esigenze che sono state appena messe in luce, e' quella che
fa ricorso alla cosidetta tavola inversa di flusso. E' questa una tabella che considera per ogni
stato e per ogni ingresso al tempo tn , l'insieme degli stati in cui si trovava il circuito al tempo
tn-1.
Si consideri ad esempio la macchina sequenziale di fig. 7.7.13
0
1 0
1
4 1 2 6
0
1 0 0 1 0 1 1 1
5 7 0 3
figura 7.7.13
La relativa tabella inversa di flusso e' riportata in fig. 7.7.14. Nell'ultima colonna e'
conteggiato il numero di stati da cui si perviene allo stato attuale. Lo stato per cui tale con-
teggio e' massimo e' lo stato 1 con sei termini. Conviene pertanto codificare lo stato 1 con
y1y2y3= 000, in modo che nella tavola di flusso ci sia il massimo numero di zeri.
Le adiacenze vanno poi ricercate per righe e per colonne; le adiacenze per righe tengono
conto delle transizioni verso lo stesso stato e si riconoscono in quanto formate da stati che
stanno nella stessa casella (esclusi quelli della prima riga). Si individua in tal modo la
necessita' di adiacenza tra gli stati 2,6 1,5 e 2,3.
La ricerca per colonne si fa a partire dalle coppie cosi' individuate e considerando la
presenza o meno degli stati di tali coppie in ciascuna colonna. In tal modo la coppia 2,6 de-
termina nella colonna x=0 l'esigenza di adiacenza per gli stati 6 e 7; la coppia 2,3 l'adiacenza
degli stati 3,6 nella colonna x=1.
In definitiva e' quindi conveniente che siano adiacenti le coppie:
185
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
1 1,4,5,7 4,7 6
2 -- -- 0
3 -- 2,6 2
4 -- 1,5 2
5 -- -- 0
6 6 3 2
7 2,3 -- 2
figura 7.7.14
y y
1 2
y
3 00 01 11 10
0 1 5 - 4
1 2 6 7 3
Nel problema che si e' preso in considerazione non era assegnata l'uscita; pertanto le
coordinate della mappa possono essere assegnate in modo qualsiasi, purche' secondo un
codice ciclico. Se viceversa l'uscita fosse stata specificata la scelta del codice di taratura do-
veva essere tale da minimizzare la rete di uscita.
Si applichi ora quanto esposto al seguente esempio.
ESEMPIO 1
Si voglia progettare un circuito che verifichi la parita' su caratteri binari da quattro bit,
ricevuti in modo seriale su una linea x, a partire da uno stato di reset.
All'istante in cui viene ricevuto il quarto bit l'uscita deve essere 1 se e solo se il numero
totale di 1 nel carattere e' pari. In tutti gli altri istanti l'uscita deve essere 0 e dopo la ricezione
del quarto bit il circuito deve ritornare nello stato di reset pronto a ricevere il successivo
carattere.
186
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
E' evidente che a ciascun istante le uniche informazioni importanti consistono in quanti
bit siano stati ricevuti e se il numero totale di 1 sia pari o dispari. Queste considerazioni
conducono direttamente al diagramma di stati di fig. 7.7.15, che e' anche il diagramma della
macchina minima.
a
0/0 1/0
b c 10 bit
0/0 1/0 1/0 0/0
d e 2 0 bit
0/0 1/0 1/0 0/0
f g 3 0 bit
0/1 1/1
1/0 a 0/0
pari dispari
numero di 1
figura 7.7.15
ingresso
stato 0 1
a b/0 c/0
b d/0 e/0
c e/0 d/0
d f/0 g/0
e g/0 f/0
f a/1 a/0
g a/0 a/1
Applicando la regola 1(1) enunciata in precedenza, gli stati f e g devono essere resi
adiacenti. La regola 1 (2) a sua volta richiede che gli stati d ed e siano resi adiacenti se e'
possibile rendere adiacenti f e g, e che b e c siano adiacenti se adiacenti sono d ed e. La codi-
fica dello stato a e' apparentemente arbitraria e , a meno che non vi siano fondati motivi per
evitarlo, lo si codifichera' con 000. Tale scelta e' tanto piu' giustificata in quanto lo stato a e' lo
stato di reset e con una codifica nulla esso puo' venir raggiunto molto facilmente sem-
187
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
plicemente azzerando tutti i flip-flop della memoria. Una buona codifica e la relativa tavola di
flusso sono allora le seguenti:
x
y1 y2 y3 0 1
a 000 001/0 101/0
y1 y2 b 001 011/0 111/0
y3 00 01 11 10
0 a f g - d 011 010/0 110/0
f 010 000/1 000/0
1 b d e c
100 --/- --/-
c 101 111/0 011/0
e 111 110/0 010/0
g 110 000/0 000/1
Le equazioni finali che si ricavano sono, nell'ipotesi di utilizzare flip-flop di tipo JK:
J y1 x .y 2 x . y3 K y1 x y3 Jy2 y3 K y2 y3
J y3 y2 K y3 y2 z x . y 1 .y 3 x.y1 . y 2 . y 3
Il metodo della tabella inversa di stato in questo caso non porta invece a risultati si-
gnificativi.
E' importante osservare a questo punto che le regole e i procedimenti esposti non sono
procedimenti algoritmici completi atti ad individuare la migliore tra le possibili codificazioni.
Essi tutto al piu' permettono di ridurre il numero di possibili alternative, consentendo di
ottenere una buona soluzione in un numero ridotto di tentativi.
Si consideri infatti di nuovo la codifica della tavola di stato di fig. 7.7.3. La regola 1(1)
impone che gli stati b e d siano resi adiacenti. Ora sia la codifica racchiusa nel tratteggio di
fig. 7.7.11 (A) che quella immediatamente precedente soddisfano tale esigenza. La regola 1(1)
quindi non individua la codifica migliore, ma permette tuttalpiu' di scartare la prima delle tre
codifiche possibili.
A maggior conferma di quanto detto si consideri la tavola di stato di fig. 7.7.9.
L'applicazione della regola 1(1) porta a scegliere la codifica di fig. 7.7.11 (B), che
produce il circuito migliore quando i flip-flop usati sono di tipo RS. Se viceversa si usassero
dei flip-flop JK la codifica migliore sarebbe la prima tra quelle di fig. 7.7.11, in quanto con i
flip-flop JK meta' delle condizioni di ingresso sono condizioni non specifi-
cate,indipendentemente da quale sia la codifica dello stato. C'e' tuttavia da osservare che in
questo caso la codifica di fig. 7.7.11 (B) e' peggiore per un solo gate; pertanto la codifica in-
dividuata attraverso l'applicazione delle regole enunciate e' comunque accettabile.
188
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
appartenevano alla stessa classe (p = q) se per qualsiasi ingresso x erano soddisfatte le con-
dizioni:
w p, x w q, x
S p, x S q, x
stato ingresso
0 1
0 7 1
1 0 2
2 1 3
3 2 4
4 3 5
5 4 6
6 5 7
7 6 0
figura 7.8.1
y1n 1
y1n
In effetti assegnare le variabili di stato induce sempre delle partizioni degli stati in
gruppi che corrispondono alle varie combinazioni di valori delle variabili. Se si possono as-
segnare le variabili di stato in modo da indurre partizioni chiuse, si ottengono generalmente
189
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
delle equazioni piu' semplici di quelle che si possono ottenere con una codifica completa-
mente casuale.
Se una partizione e' chiusa allora il blocco che contiene lo stato futuro e' individuato
univocamente dal blocco che contiene lo stato presente ed eventualmente dal valore
dell'ingresso. Poiche' vi sono meno blocchi che non stati, essi sono individuati da un sot-
toinsieme delle variabili di stato. Il risultato e' quello di ridurre il numero di variabili nelle
equazioni di stato, dando luogo quindi a equazioni, che in generale sono piu' semplici.
Realizzare partizioni chiuse non permette solamente di ottenere delle codifiche
vantaggiose, ma influisce anche in modo diretto sulla struttura del circuito sequenziale.
Nell'esempio che si e' appena esaminato, la variabile y1 e' funzione solamente di se stessa e
quindi la parte di circuito relativa non richiede altri ingressi. In generale le partizioni chiuse
danno luogo ad una separazione del circuito completo in un certo numero di sottocircuiti,
ciascuno adibito all'elaborazione di un certo numero di variabili del sistema e dipendente a sua
volta da un numero limitato di variabili.
la fig. 7.8.2 mostra in che modo un circuito con quattro variabili di stato possa esser
suddiviso in un certo numero di sottocircuiti.
1 3
Y0
J Q J Q
Logica T Logica T
X K K
2
Y3
Clock
J Q Y1
T
K Z
Logica Logica
Y2
J Q
T
K
figura 7.8.2
Si noti che ciascun sottocircuito ha come ingressi alcune delle variabili di stato, ma non
tutte. Ad esempio il flip-flop del sottocircuito 1 ha come ingressi la sua stessa uscita e
l'ingresso effettivo x. In modo analogo il sottocircuito 2 ha come ingressi x, y0 e la sua stessa
uscita.
In generale una buona partizione degli stati di un circuito sequenziale corrisponde ad
una suddivisione del circuito in un certo numero di sottocircuiti collegati da un numero di
interconnessioni molto limitato.
Molte ricerche øö÷ sono state condotte relativamente al problema dell'individuazione
delle partizioni piu' vantaggiose, molte delle quali indirizzate a formalizzare procedure di
ricerca di partizioni chiuse o di altri tipi di partizione con proprieta' simili.
øö÷
HARTMANIS J. - STEARNS R.E. " Algebraic structure theory of sequential Machines "
PRENTICE-HALL Englewood Cliffs- N.J 1966
HARTMANIS J. " On the state assignement Problem for sequential machines "
IRE trans. on Electronic Computers, EC-10:2,157- 165 (giugno 1961)
HARTMANIS J. - STEARNS R.E. " On the state assignement problem for sequential machines "
IRE Trans. on Electronic Computers EC-10:4,593-603 (dicembre 1961)
190
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Sfortunatamente tali procedure sono molto complesse e noiose da utilizzare. Per tale
ragione anziche' cercare metodi formali di partizione degli stati e' piu' opportuno individuare
quelle partizioni degli stati che possono essere suggerite dalla formulazione originale del
problema. Spesso i sottocircuiti realizzano delle sottofunzioni chiaramente individuabili,
come conteggi, funzioni di scorrimento, riconoscimento di parita', ecc. Se queste funzioni
vengono riconosciute gia' durante la prima fase di approccio al problema, la codificazione
degli stati puo' essere notevolmente semplificata.
ESEMPIO 1
Si riprenda l'esempio 1 del paragrafo 7.7, relativo al circuito in grado di controllare la
parita' di parola di 4 bit trasmesse serialmente su una linea x. Dimenticando che il diagramma
degli stati e' gia' stato determinato in precedenza, si tenti ora di affrontare il problema
cercando di determinare eventuali sottofunzioni.
Ovviamente una funzione da soddisfare e' la memorizzazione della parita' all'atto
dell'arrivo di ciascun bit. Per soddisfare tale esigenza e' sufficiente un unico flip-flop.
Poiche' poi all'arrivo del quarto bit il circuito deve comportarsi in maniera diversa da
quanto avviene per i tre bit precedenti, e' inoltre necessario memorizzare qual'e' numero di bit
giunti e tale funzione puo' essere assolta da un semplice contatore a quattro stati.
Le due sottofunzioni messe in luce sono illustrate mediante i relativi diagrammi di stato
in fig. 7.8.3
Il diagramma di fig. 7.8.3 (b), in cui l'uscita e' sempre 0, e' valido per i primi tre bit; il
quarto bit riporta il circuito allo stato di partenza (corrispondente ad un numero di bit uguali a
1 pari) senza che in tale operazione interessi il valore di questo quarto bit. [fig. 7.8.3 (c)].
L'uscita passa a 1 se e solamente se la parita' e' verificata su tutti i quattro bit.
y1 y2 = 00 0/0
0/1
y0 = 0 1/0
1,0 bit 1
pari y0 = 0
y1 y2 = 01
1/0 1/0 0/0
1,0 1,0 bit 2 1/1
bit 4
y1 y2 = 10 dispari y0 = 1
1,0 bit 3 y0 = 1
0/0
y1 y2 = 11
191
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Per riunire le due funzioni in un unico circuito sequenziale e' opportuno tabulare la y0n+1
come illustrato in fig. 7.8.4 (a).
Le due righe contrassegnate con l'asterisco corrispondono alla situazione illustrata in fig.
7.8.3 (c), valida per l'istante in cui arriva il quarto bit e cioe' quando y1 = y2 =1. Le rimanenti
righe corrispondono alla situazione di fig. 7.8.3 (b). Nella tabella compaiono due situazioni
non specificate in quanto con y1 = y2 = 0 deve essere y0 =0. La figura 7.8.4 (b) e' la tavola di
stato di un contatore binario da 2 bit. Da queste due tabelle si derivano le equazioni di
ingresso degli elementi di memoria; se questi sono flip-flop JK si ha:
Jy2 K y2 1 J y1 K y1 y2 J y0 x . y1 y2 K y0 x y1 . y 2
z y1 . y 2 . x . y 0 x.y 0
y0 x
x y1 y2 0 1 y1 y2 0 1
000 0/0 -- 00 01 01
Queste equazioni sono piu' semplici di quelle ottenute in precedenza. Si noti che il flip-
flop y2 funziona come flip-flop T, commutando ad ogni impulso di clock. Con la scelta fatta
per le variabili di stato il circuito risulta separabile in due distinti sottocircuiti, come illustrato
in fig. 7.8.5.
Y0
x J Q
Logica T
K
Y2 Y1
J Q J Q
T T
K K
Logica Z
figura 7.8.5
Le tabelle di fig. 7.8.4 (a) e (b) possono essere combinate per ottenere la tavola di flusso
di fig. 7.8.6 (a) e la tabella di stato di fig. 7.8.6 (b). Poiche' y0 non e' un ingresso del contatore
192
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
binario a 2 bit, ci si dovrebbe aspettare di trovare una partizione chiusa degli stati in quattro
classi, una per ciascuna combinazione di valori di y1 e y2. Questa partizione esiste ed e' la
{0,4}, {1,5}, {2,6}, {3,7}. Che questa partizione sia chiusa puo' essere verificato dalla tabella
di fig. 7.8.6 (c).
x ingresso ingresso
y0 y1 y2 0 1 stato 0 1 stati presenti 0 1
000 001 101 q0 q1 /0 q5 /0 0,4 1,5 1,5
001 010 110 q1 q2 /0 q6 /0 1,5 2,6 2,6
010 011 111 q2 q3 /0 q7 /0 2,6 3,7 3,7
011 000 010 q3 q0 /1 q0 /0 0,4 0,4
3,7
100 -- -- q4 --/-- --/-- stati futuri
101 110 010 q5 q6 /0 q2 /0
110 111 011 q6 q7 /0 q3 /0
111 000 000 q7 q0 /0 q0 /1
n+1
( y0 y1 y ) n+1 n
2 q ,z
figura 7.8.6
Ritornando alle espressioni delle equazioni di eccitazione e di uscita si puo' notare che
esse sono nettamente piu' semplici di quelle che si possono ottenere con l'applicazione delle
regole 1,2 e 3 enunciate al paragrafo precedente. Individuare una partizione chiusa e' quindi
molto spesso una via estremamente efficace per ottenere una realizzazione efficiente. Tuttavia
il battere con successo tale strada dipende in maniera determinante dalla struttura del
problema da risolvere e dall'abilita' del progettista nel riconoscere questa struttura. Non si
suggerisce pertanto di tornare a tecniche di progetto intuitive, quanto ad essere sempre pronti
a cogliere quando una struttura e' partizionabile.
In alcuni casi la struttura del problema suggerisce solo in modo parziale la codifica da
adottare; in questi casi la codifica va completata mediante l'applicazione delle regole esposte
al paragrafo precedente.
ESEMPIO 2
Si consideri nuovamente il contatore avanti-indietro modulo 8 introdotto all'inizio del
presente paragrafo e la cui tavola degli stati e' illustrata in fig. 7.8.1. Per tale contatore si e' gia'
visto che esistono due partizioni chiuse facilmente individuabili. Ci si dimentichera' tuttavia di
questo fatto, tentando invece di individuare quelle partizioni che discendono in maniera
diretta dalla struttura del circuito.
Una partizione naturale di ogni contatore e' quella che suddivide gli stati in due blocchi,
uno corrispondente ai conteggi pari e uno ai conteggi dispari. Tale partizione sara' chiusa se il
numero degli stati e' pari, poiche' ogni conteggio pari e' senz'altro seguito da uno dispari e
viceversa. Per il caso in esame la partizione sara' (0,2,4,6) e (1,3,5,7), cui si assegnera' la
variabile y1.In fig. 7.8.7 e' riportata la tabella degli stati del contatore, la tavola di flusso del
circuito che sviluppa y1 e la relativa realizzazione con flip-flop di tipo D.
193
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Scopo di tale circuito e' evidentemente quello di identificare se ci si trovi in una si-
tuazione di conteggio pari o dispari. La relativa equazione e':
y1n 1
y1n
ingresso
Stato 0 1
0 7 1
1 0 2 D Q Y1
Clock
2 1 3 T
3 2 4
4 3 5
5 4 6
n+1
6 5 7 y1
figura 7.8.7
Ciascuno degli stati deve poi essere identificato da un'unica combinazione delle relative
variabili. Se si usano tre variabili, come nel caso in esame, la seconda variabile dovra' dividere
i due blocchi di quattro stati a meta', realizzando quattro blocchi da due stati; la terza variabile
eseguira' un'ulteriore suddivisione a meta', fornendo otto blocchi da uno stato solo.
Si stabilisca pertanto che la variabile y2 = 0 identifichi primo e terzo stato di ciascuno
dei due blocchi precedenti, mentre il valore y2 = 1 identifichi il secondo e quarto stato. La
variabile y2 induce cioe' la partizione (0,1,4,5) e (2,3,6,7). Allora le variabili y1 e y2
considerate assieme inducono la partizione:
y y Gruppo
2 1
00 (0,1,4,5) (0,2,4,6)=(0,4)
01 (0,1,4,5) (1,3,5,7)=(1,5)
11 (2,3,6,7) (1,3,5,7)=(3,7)
10 (2,3,6,7) (0,2,4,6)=(2,6)
E' immediato verificare che anche questa e' una partizione chiusa e che quindi i valori
futuri delle variabili di stato non sono funzioni di tutte le variabili. Si puo' allora sviluppare la
tavola di flusso e il sottocircuito di fig. 7.8.8.
194
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
Y1
Y2
D Q
Clock
T
1 D
T
Q
2
_
X
x
x
classe presente 0 1 yn y n 0 1
2 1
3,7 2,6 11 1 0
0,4
2,6 1,5 3,7 10 0 1
figura 7.8.8
clock
x
yyy 0 1 Y1 Y2
3 2 1 Y2
000 1 0 1 2
001 0 0
_
011 0 1 X
010 0 0 Y1
100 0 1
D Q Y3
101 1 1
T
111 1 0
110 1 0
n+1
y
3
figura 7.8.9
Si noti che nello schema si sono indicati con 1 e 2 i blocchi realizzati in precedenza per
y1 e y2.
195
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
y 3n 1
y1n . y n2 y 3n xn
Puo' non risultare immediatamente evidente, ma il circuito e' il piu' economico che si
puo' realizzare con flip-flop di tipo D. Qualsiasi altra codifica dello stato fa si' che y1 e y2
siano funzione di un maggior numero di variabili, portando quindi a circuiti piu' complessi.
Le relazioni che esistono tra codifica dello stato, partizioni e struttura del circuito, messe
in luce nei precedenti esempi, portano al quesito se la minimizzazione degli stati sia sempre
conveniente e desiderabile.
Nell'esempio 3 del paragrafo 7.5 si era pervenuti ad una tavola con 8 stati, che ri-
chiedeva quindi tre variabili di stato. Se tuttavia si esamina la struttura base si notano due di-
stinte sequenze di conteggio da tre stati. Pertanto una struttura piu' semplice e piu' naturale si
puo' ottenere con quattro variabili di stato, due per ciascuna sequenza. La variabile di stato in
piu' fa evidentemente si' che sia necessario un ulteriore flip- flop; tuttavia le reti combinatorie
di eccitazione e di uscita ne risultano semplificate in modo notevole.
Un altro caso tipico e' quello dell'esempio 1 dello stesso paragrafo; considerando il
circuito come sistema a memoria finita e realizzandolo nella forma di fig. 7.5.2 (a) si rendono
necessari tre flip-flop D e l'unico costo ulteriore e quello relativo alla realizzazione della
logica di uscita.
Lo stesso circuito e' stato preso come base per l'esempio di minimizzazione del pa-
ragrafo 7.6 che ha portato al diagramma a quattro stati di fig. 7.6.3 (b).
La realizzazione con flip-flop SR porta ad una rete logica di uscita di complessita'
paragonabile a quella della realizzazione precedente. Per quanto riguarda invece lo stato, nella
realizzazione a otto stati non era necessaria alcuna logica combinatoria, ma era sufficiente
un'opportuna interconnessione dei flip-flop. Nella realizzazione a quattro stati invece la rete
combinatoria si rende senz'altro indispensabile e le stesse interconnessioni risultano piu'
complicate. Pertanto, malgrado che la realizzazione a quattro stati faccia risparmiare un flip-
flop, essa e' probabilmente piu' costosa che non quella a otto stati.
7.9) Conclusioni.
Nel presente capitolo e' stata esposta la procedura di progetto dei circuiti sequenziali
sincroni. Si intuisce immediatamente che il risultato che si ottiene e' notevolmente piu'
influenzato dall'esperienza del progettista che non nel caso dei circuiti combinatori e al limite
dei circuiti sequenziali asincroni.
La mancanza di formalismo e rigorosita' puo' far pensare che la procedura proposta sia
una specie di progetto basato sulla prova e l'errore; cio' non e' assolutamente vero in quanto la
procedura e' organizzata con estrema attenzione per portare il progettista, con un numero di
tentativi il piu' possibile limitato, dalle iniziali e imprecise specificazioni al circuito finale.
Il primo passo, che consiste nella determinazione del diagramma degli stati, e' il piu'
importante. Le specifiche che vengono assegnate sono di solito abbastanza vaghe e in-
complete. Le procedure dei paragrafi 7.4 e 7.5 aiutano a chiarire il funzionamento del circuito
e a determinarne il comportamento in ogni possibile circostanza.
Molto spesso, probabilmente a causa della fatica e delle difficolta' che questo passo
comporta, il progettista e' portato a interconnettere in maniera quasi empirica dei sottocircuiti,
quali contatori o circuiti di test di parita',ecc., intuiti dalle specifiche complessive, ottenendo
196
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é
pero' il piu' delle volte dei comportamenti assolutamente insospettati. Ora non e' che
procedure intuitive non possano essere utilizzate, ma il momento in cui si possono applicare e'
solo dopo aver analizzato e capito a fondo il comportamento che si desidera per il circuito.
Se il circuito e' a memoria finita e la tavola di flusso viene realizzata su questa base,
l'unica operazione che il progettista deve compiere e' quella di stabilire l'uscita; se inoltre la
struttura a memoria finita e' anche applicabile, essa produce sempre il circuito piu' economico.
Se il circuito non e' a memoria finita e' necessario minimizzare il numero degli stati.
Questa minimizzazione non da' luogo necessariamente al circuito piu' economico, tuttavia e'
sempre bene partire da una tavola con il numero di stati minimo ed aggiungere altri stati
ausiliari solo se la struttura del problema rende ovvio che e' conveniente operare con un
maggior numero di variabili di stato.
Il passo finale e' quello della codifica, difficoltoso e molto spesso frustrante. Secondo
quanto e' stato esposto e' conveniente usare alcune regole semiempiriche, unite ad una buona
dose di intuizione, per ottenere un risultato soddisfacente. Ancora oggi disgraziatamente non
esiste alcuna buona procedura formale di codifica, e quindi una specie di intuizione guidata
rimane ancora il miglior metodo di progetto.
197
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
CAPITOLO VIII
CIRCUITI SEQUENZIALI AD IMPULSI
8.1) Introduzione.
In alcune unita' di sistemi digitali possono venir generati impulsi non periodici in
risposta a ciascuna variazione di livello di uno specifico segnale. Vi puo' quindi essere la
necessita' di progettare circuiti sequenziali i cui ingressi siano impulsi non periodici anziche'
livelli logici usati in unione con opportuni impulsi di clock.
Sebbene vi siano importanti differenze, che verranno chiarite in seguito, tra la tavola
degli stati di un circuito sequenziale ad impulsi e quella di un circuito sequenziale sincrono,
non vi e' tuttavia alcun ostacolo concettuale nel progettare un circuito privo di un segnale
periodico di sincronizzazione. Al capitolo V infatti sono stati introdotti importanti vincoli alla
durata e all'intervallo temporale di due successivi impulsi di ingresso a un flip-flop, ma non si
e' affatto imposto che tali impulsi fossero periodici.
Pertanto non vi e' alcuna particolare difficolta' nel progettare circuiti soggetti a impulsi
su una o piu' linee, purche' siano soddisfatti i seguenti criteri.
1) Tutti gli impulsi di ingresso devono avere una durata sufficiente a far
commutare i flip-flop. Inoltre essi devono anche soddisfare il vincolo
di massima durata, a meno che tutti i flip-flop utilizzati non siano del
tipo master-slave.
Il secondo criterio usato significa in sostanza che gli impulsi di ingresso devono
comparire uno alla volta; e' per questo motivo che molto spesso si parla di circuiti ad impulsi
non contemporanei. La sua giustificazione risiede nel fatto che in pratica e' impossibile che
due impulsi siano esattamente contemporanei. Ritardi non prevedibili faranno si' che i due
impulsi siano sempre non coincidenti, sia pure di poco, determinando pertanto funzionamenti
non desiderati per il circuito (in sostanza, nei casi reali, il secondo impulso perviene quando e'
ancora in atto il transitorio di commutazione determinato dal primo impulso).
Cio' stabilito, l'arrivo di un impulso su una qualsiasi linea di ingresso determina la
transizione del circuito da uno stato all'altro; poiche' si esclude il caso in cui siano contem-
poraneamente presenti due impulsi, il numero di ingressi distinti, cioe' il numero di colonne
della tabella di stato, e' pertanto uguale al numero delle linee di ingresso.
Di conseguenza la tipica tavola di stato di un circuito ad impulsi avra' l'aspetto di quella
riportata in fig. 8.1.1.
Tra un impulso di ingresso e l'altro il circuito rimane in uno degli stati; quando arriva il
successivo impulso si genera la transizione verso il prossimo stato, secondo quanto stabilito
sulla tabella.
198
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
Ingresso
Stato x1 x2 x3
q0 q 0 q 2 q 3
x1
Circuito q q0 q3 q2
1
x2 ad
impulsi q2 q 0 q 3 q 1
x3
q q0 q1 q0
3
figura 8.1.1
Alcuni circuiti possono avere sia ingressi impulsivi che ingressi a livelli. Se il numero di
ingressi ad impulsi e' n e quello degli ingressi a livelli e' m, il numero delle distinte
combinazioni di ingresso e':
N n .2 m
e quindi tale e' il numero delle colonne nella tavola di stato.
199
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
x3
x3 /0 x3 /0
x3 x3 q 0 /0
x2 x3
x3 /0
q0 x3 /0
x2 /0 x1 x
x1 /0 x 1,x2 /0 q /0 q /0
1 x1 2
q x1 /0 q x3
1 2 x2
x2 /0 x2
x2 /0 q /0
3
q
3 x1 x1 ,x2
x1 /z
q4 /1
Ingresso Ingresso
Stato x1 x2 x3 Stato x1 x2 x3 z
q0 q 1/0 q2 /0 q0/0 q0 q1 q2 q0 0
q1 q2 /0 q3/0 q 0/0 q1 q2 q3 q0 0
q2 q2 q2 q0 0
q2 q2/0 q2/0 q0 /0
q3 q4 q2 q0 0
q3 q3 /1 q2/0 q0/0
q4 q2 q2 q0 1
Il circuito di fig. 8.2.1 (b) opera in modo molto simile, eccetto per il fatto che una volta
giunto in q3 per un successivo impulso x1 il circuito evolve verso lo stato q4 , che produce
un'uscita a livelli finche' non sopraggiunge un ulteriore impulso di ingresso.
In sostanza quindi, il primo circuito produce un impulso nel momento in cui la sequenza
viene riconosciuta, mentre il secondo produce un livello dopo il riconoscimento della
medesima sequenza.
E' opportuno mettere in luce che tra i diagrammi di stato di fig. 8.2.1 e quelli che si sono
esaminati fino a questo punto esistono delle notevoli differenze. Poiche' ad ogni istante puo'
essere presente un unico impulso, e' inutile mettere in evidenza il valore di tutti gli ingressi in
corrispondenza ad ogni transizione; e' piu' opportuno identificare quest'ultima con l'impulso
che la causa. Le uscite impulsive, funzione dell'ingresso oltre che dello stato, vanno associate
alle transizioni tra stati; le uscite a livelli, funzione del solo stato, vanno evidentemente asso-
ciate allo stato.
Si vede immediatamente che il diagramma di fig. 8.2.1 (a) e' una rappresentazione
secondo il modello di Mealy, mentre quello di fig. 8.2.1 (b) e' una rappresentazione secondo il
modello di Moore. D'altra parte al capitolo IV si era gia' visto che l'uscita nella rappre-
sentazione di Moore dipende solo dallo stato, mentre in quella di Mealy dipende da stato e
ingresso.
Si puo' passare dall'una all'altra rappresentazione secondo le regole illustrate in
precedenza. In generale tuttavia il modello di Moore richiede un numero di stati superiore a
quello di Mealy.
D'altra parte il modello di Moore si rende necessario se l'uscita , anziche' essere un
impulso, dev'essere disponibile per tutto il tempo che intercorre tra una transizione di stato e
l'altra.
200
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
ESEMPIO 1
Il ciclo maggiore di un certo circuito digitale contenga tre sottocicli che debbano essere
completati in una determinata sequenza. Per avere segnalazione che l'operazione e' stata
completata, un circuito che esegue il test di sequenza riceve un impulso di completamento da
ciascun sottociclo e un ulteriore impulso K quando e' stato completato il ciclo maggiore.
Quando giunge l'impulso K il circuito di test deve riazzerarsi e fornire un impulso di errore se
i tre impulsi A,B,C di segnalazione di sottociclo completato non sono stati ricevuti in questa
esatta sequenza.
Il circuito debba venir realizzato usando flip-flop di tipo SR ed usando una logica AND-
OR-NOT. Gli impulsi in gioco non siano mai contemporanei.
Soluzione: Vi sono sei possibili sequenze:
delle quali solo la prima e' corretta. E' evidente che quando viene identificata una sequenza
non corretta il circuito deve portarsi in uno stato di attesa finche' non arriva l'impulso K. Ad
esempio se il primo impulso e' B o C l'ordine in cui arrivano i due impulsi seguenti non ha
alcuna importanza. Questa considerazione porta a definire il diagramma di stato parziale di
fig. 8.3.1 (a).
q1
K/Z
B,C/0
q1 A/0
K/0
A/0 B,C/0 q2 q5
C/0
q2 q5 B/0
A,B,C/0 A,B,C/0
q4 q3
C/0
(a) (b)
figura 8.3.1
Lo stato q5 e' quindi quello in cui la macchina staziona dopo aver messo in evidenza un
errore finche' non arriva l'impulso K.
A partire dallo stato q2 gli unici ingressi possibili sono B e C. L'ingresso B rappresenta
la continuazione della sequenza corretta e conduce allo stato q3; a partire da questo stato
l'unico ingresso possibile e' C e conduce allo stato q4.
Poiche' l'impulso K segue sempre la sequenza dei tre impulsi da verificare, esso potra'
arrivare solo quando il circuito si trova nello stato q4 o q5.
201
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
Ingresso Ingresso
Stato A B C K Stato A B C K
q1 2/0 5/0 5/0 --/-- q 2/0 5/0 5/0 --/--
1
q2 --/-- 3/0 5/0 --/-- --/-- 3/0 5/0 --/--
q2
q3 --/-- --/-- 4/0 --/-- --/-- --/-- 3/0 1/0
q3
q4 --/-- --/-- --/-- 1/0 5/0 5/0 5/0 1/1
q
5
5/0 5/0 5/0 1/1
q5
(a) (b)
figura 8.3.2
Per la codifica dello stato di un circuito sequenziale ad impulsi si possono usare le stesse
tecniche usate per i circuiti sincroni. La regola 1(3z) suggerisce che gli stati q1 e q2 e gli stati
q1 e q5 siano resi adiacenti. Si ottiene pertanto la tavola di flusso di fig. 8.3.3.
Si noti che tale tavola di flusso non e' una convenzionale mappa di Karnaugh. Poiche' vi
sono quattro variabili di ingresso vi dovrebbero infatti essere 16 colonne. Tuttavia, poiche' gli
impulsi di ingresso si escludono mutuamente, tutte le colonne, eccetto quelle rappresentate e
quella ABCK = 0000, contengono condizioni non specificate.
Le equazioni di eccitazione possono quindi essere ricavate direttamente da questa tavola
senza tracciare le quattro mappe di dimensione 4 x 16, assumendo che la colonna A
rappresenti le colonne in cui A = 1 e gli altri ingressi B, C, K valgano 0 e cosi' via.
Ingresso
Stato
A B C K
00 01/0 10/0 10/0 --/-
figura 8.3.3
Si noti tuttavia, a maggior chiarimento, che le semplificazioni vanno fatte solo colonna
per colonna.
Si ottiene:
S1 B C R1 K S2 A .y 1 R2 K C .y 1
E' importante notare che le equazioni realizzate si riferiscono a flip-flop RS asincroni.
Gli impulsi corrispondenti vanno applicati direttamente agli ingressi S e R. L'equazione di
uscita e':
202
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
z K .y 2
B Q
C S
_
K R Y1
S Q
A
_ Z
R
Y2
Dall'esempio appena svolto si vede che sostanzialmente non vi sono nuovi problemi nel
progettare un circuito ad impulsi. Il vincolo che non vi siano impulsi contemporanei riduce il
numero delle colonne nelle tavole di flusso, ma in pratica non vi e' alcuna differenza con il
progetto dei circuiti sequenziali sincroni.
E' opportuno tuttavia ricordare che in ogni prodotto logico delle equazioni di eccitazione
e di uscita deve comparire uno degli impulsi di ingresso in modo da generare il desiderato
impulso di eccitazione e di uscita.
ESEMPIO 2
Si consideri lo stesso esempio precedente, ma lo si formuli ora in termini di modello di
Moore. Dopo che il terzo impulso e' stato ricevuto, il circuito deve fornire ancora un'uscita
con le stesse modalita' precedenti, ma questa volta il segnale sia del tipo a livelli e permanga
finche' non viene ricevuto l'impulso di azzeramento K. L'uscita inoltre non venga esaminata
prima dell'arrivo del terzo impulso, in modo che in tutte le situazioni precedenti il valore
assegnato all'uscita non ha importanza. Il diagramma di stato che si ottiene e' riportato in fig.
8.3.4.
q1/-
K
B,C
A
K
q2 /- q5 /1
C
A,B,C
q 4 /0 q3 /-
C
figura 8.3.4
203
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
Ingresso Ingresso
Stato A B C K z Stato A B C K z
1 2 5 5 -- -- 00 01 10 10 -- --
2 -- 3 5 -- -- 01 -- 11 10 -- --
3 -- -- 4 -- -- 11 -- -- 11 00 0
4 -- -- -- 1 0 10 10 10 10 00 1
5 5 5 5 1 1
figura 8.3.5
S y1 B C R y1 K Sy 2 A .y 1 Ry2 C .y1 K z y2
e il relativo circuito e' uguale a quello ricavato in precedenza, con esclusione del gate di
uscita, non piu' necessario.
ESEMPIO 3
Una monorotaia sia adibita ad un servizio di trasporto rapido tra un areoporto e un
centro urbano. Il sistema preveda due convogli, ma un'unica sede, eccetto per l'esistenza di un
binario di attesa a meta' percorso, come illustrato in fig. 8.3.6. I due convogli partano dalle
due stazioni al medesimo istante. quello diretto all'areoporto sia obbligato a fermarsi sul
binario di attesa finche' l'altro convoglio non e' passato sul binario principale. Semafori e
scambi siano controllati dai sensori x1, x 2 e x3 che emettono un impulso quando una vettura
transita su di essi.
L1
x x x3
1 2
Aeroporto X X Terminal
S1 S2
L2
figura 8.3.6
204
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
ingresso
x3 stato x1 x2 x3 z1 z2
x3
q0/00 q3/11 q0 q 1 -- q 0 00
q1 -- q2 -- 00
x1 x1
q 2 q 3 -- -- 10
x2
q1 /00 q2 /10
q3 -- -- q0 11
(a) (b)
figura 8.3.7
E' ovvio che l'unica possibile semplificazione e' quella di combinare q0 e q1 in un unico
stato. Per quanto riguarda la codifica, poiche' sono necessarie due variabili di stato e vi sono
due uscite, l'assegnazione piu' naturale e' quella che fa coincidere le variabili di stato con
l'uscita. La tavola di stato e' pertanto:
ingresso
y1 y2 x1 x2 x3 z1 z 2
00 00 10 00 00
01 --- --- --- ---
11 --- --- 00 11
10 11 --- --- 10
205
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
x1 x2 x3 x1 x2 x3 x1 x2 x3 x1 x2 x3
00 0 1 0 00 -- 0 -- 00 0 0 0 00 -- -- --
01 -- -- -- 01 -- -- -- 01 -- -- -- 01 -- -- --
-- -- 0 -- -- 1 -- -- 0 -- -- 1
11 11 11 11
-- -- -- 0 -- -- 1 -- -- 0 -- --
10 10 10 10
S1 R1 S2 R2
S1 x2 R1 x3 S2 x 1 . y1 R2 x3
Y1
X S Q Z1
2
X R
3
Y2
X1 S Q Z2
figura 8.3.8
8.4) I contatori.
Nell'esempio 2 del paragrafo 7.8 e' stato progettato un contatore avanti-indietro da tre
bit, in cui le uscite coincidevano con lo stato futuro. Piu' comunemente i contatori vengono
progettati in modo che lo stato presente coincida con l'uscita, prelevandola dall'uscita dei flip-
flop. Sulla base di queste considerazioni i contatori diventano, in modo pressocche' naturale,
dei circuiti di Moore.
La tavola di stato di una decade, cioe' di un contatore modulo 10, e' riportata a titolo di
esempio in fig. 8.4.1 (a). Si noti che vi e' un unico ingresso impulsivo T e che nella relativa
colonna sono contenuti gli stati futuri. In effetti il circuito conteggia (modulo 10) il numero di
impulsi che si presentano sulla linea di ingresso T, che puo' quindi essere considerata la linea
di clock del sistema. Se tuttavia il circuito venisse interpretato come un circuito sequenziale
sincrono, esso dovrebbe venir trattato come un circuito senza segnali di ingresso, cosa
certamente possibile, ma altrettanto certamente non molto naturale.
Assegnando lo stato in codice BCD si ottiene la tavola di flusso di fig. 8.4.1 (b). Questa
assegnazione da' luogo ad una partizione molto simile a quella del contatore di fig. 7.8.9.
206
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
stato y3 y2 y1 y0 T z 1 z2 z 3 z 4
T z
0 1 0 0000 0001 0000
1 2 1 0001 0010 0001
2 3 2 0010 0011 0010
3 4 3 0011 0100 0011
4 5 4 0100 0101 0100
5 6 5 0101 0110 0101
6 7 6 0110 0111 0110
7 8 7 0111 1000 0111
8 9 8 1000 1001 1000
(a) (b)
figura 8.4.1
La realizzazione con flip-flop T, riportata in fig 8.4.2, si puo' ottenere molto sem-
plicemente osservando in che istante i flip-flop cambiano stato.
Y0 Y1 Y2 Y3
Q Q Q Q
T T T T
Clock
figura 8.4.2
Il flip-flop y0 cambia stato con ogni impulso di ingresso e quindi (indicando con Tyi
l'ingresso del generico flip-flop i) si ha:
Ty 0 T
Ty 2 T . y1 . y 0
207
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è
Ty 3 y 2 . y1 . y 0 . T y3 . y0 .T
Parecchi tipi di contatore contano secondo moduli diversi a seconda di uno o piu'
segnali di ingresso a livelli. Si concludera' pertanto questo capitolo con un esempio di tale tipo
di contatore.
ESEMPIO 1
Si progetti un contatore che conti modulo 5 quando un segnale di ingresso L e' al livello
1, mentre conti modulo 8 se lo stesso segnale di ingresso e' a livello 0. Inoltre il conteggio
debba essere in avanti se l'impulso di ingresso si presenta sulla linea P1, in indietro se si
presenta sulla linea P2.La tavola degli stati e' riportata in fig. 8.4.3.
L=0 L=1
Stato P P P P z
1 2 1 2
0 1 7 1 4* 0
1 2 0 2 0 1
2 3 1 3 1 2
3 4 2 4 2 3
4 5 3 0* 3 4
5 6 4 -- -- 5
6 7 5 -- -- 6
7 0 6 -- -- 7
figura 8.4.3
Ty 0 P1 . y 2 . L P2 . y 2 .y1.y 0 . L
Ty 1 P1 . y 0 P2 . L .y 2 .y1
Ty 3 P1 . y o . y1 y 2 P2 . y 0 .y1
208
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
CAPITOLO IX
ARGOMENTI COMPLEMENTARI
9.1) Introduzione.
Nel presente capitolo verranno presi in considerazione un certo numero di argomenti
complementari, quali il fenomeno del "clock skew", i metodi operazionali per l'analisi delle
corse e delle alee e un nuovo tipo di approccio alla sintesi di circuiti sequenziali asincroni.
Quest'ultimo argomento verra' introdotto attraverso il progetto del flip-flop JK, visto come un
circuito sequenziale asincrono.
Puo' sembrare sorprendente considerare un flip-flop un circuito asincrono ed in effetti,
una volta che sia stato progettato, esso e' un circuito sincrono cui viene applicato un ben
distinguibile segnale di clock e che cambia stato una sola volta per ciascun impulso di
sincronizzazione. Tuttavia, mentre lo si sta progettando, in modo che corrisponda alle
specifiche assegnate, esso dovra' venir considerato come un circuito asincrono e il clock
dovra' venir trattato come un qualsiasi altro ingresso.
1 2
J Q J Q
T1 T2
X K K
Clock
(a)
T1 T1
T2 T2
X X
t1
Q1 Q1
t2
Q2 Q2
Il valore iniziale delle uscite dei flip-flop sia quello illustrato in fig. 9.2.1 (b) con y1 = y2
= 1 e x = 0.
209
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
CJK
Stato
000 001 011 010 100 101 111 110 z2 z 1
a a a a a a a b b 00
b b b b b 01
figura 9.3.1
Finche' il clock C rimane a zero, il circuito si mantiene nello stato stabile a. Quando il
clock passa a 1, l'uscita z1 del master deve passare a 1 se J = 1; il valore assunto da K non ha
importanza, alla luce del tipo di funzionamento del flip-flop JK. Si passa quindi alla con-
dizione instabile b delle due ultime colonne e si evolve poi verso lo stato stabile b della se-
210
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
conda riga, cui e' associata l'uscita 01. Il circuito non deve poi evolvere ulteriormente finche'
C non torna a zero, determinando quindi le quattro condizioni stabili della seconda riga.
La prima riga va infine completata con le due condizioni stabili relative alle condizioni
di ingresso JK = 00 e JK = 01. Con l'approccio seguito tuttavia l'uscita del master passa a 1
anche se J passa da 0 a 1 mentre il clock e' attivo (C = 1). Quando lo stato b e' stato raggiunto,
le ulteriori variazioni di J e K, finche' C rimane a 1, non hanno alcun effetto. Quando C ritorna
a zero il circuito evolve verso lo stato c, che e' associato all'uscita z1z2 = 11, come illustrato in
fig. 9.3.2
CJK
Stato 000 001 011 010 100 101 111 110 z 2 z1
a a a a a a a b b 00
b c c c c b b b b 01
c c c c c 11
figura 9.3.2
La tavola va infine completata considerando il ritorno allo stato a se, quando C ritorna a
1, anche K si trova a 1.
Si ottiene in definitiva la tavola di stato di fig. 9.3.3.
CJK
Stato
000 001 011 010 100 101 111 110 z 2 z1
a a a a a a a b b 00
b c c c c b b b b 01
c c c c c c d d c 11
d a a a a d d d d 10
figura 9.3.3
211
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
essere predetta. Pertanto, anche per evitare transizioni di stato multiple, si impone la
restrizione che J e K siano stabili quando C passa da 0 a 1 e che il circuito si sia poi
stabilizzato prima che J e K possano nuovamente cambiare. In particolare se il valore
massimo del clock skew e' conosciuto tale vincolo puo' esser meglio specificato.
A partire dalla condizione stabile e, quando C ritorna a zero, si dovra' ritornare alla
condizione stabile a.
CJK
Stato
000 001 011 010 100 101 111 110 z 2 z1
a a a a a e e b b 00
e a a a a e e e e 00
b b b b b 01
figura 9.3.4
Dallo stato stabile b il circuito evolve poi verso lo stato stabile c quando il clock torna a
zero, mentre a partire da quest'ultimo considerazioni analoghe a quelle appena fatte portano
alla tavola di stato di fig. 9.3.5.
CJK
Stato
000 001 011 010 100 101 111 110 z 2 z1
a a a a a e e b b 00
e a a a a e e e e 00
b c c c c b b b b 01
c c c c c f d d f 11
11
f c c c c f f f f
d a a a a d d d d 10
figura 9.3.5
212
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
dinamiche dei circuiti progettati in modo tradizionale e' richiesto un numero di gate addizio-
nali troppo elevato.
Si consideri il modello di fig. 9.4.1. Lo sviluppo che segue si riferira' ad un'unica
variabile di stato Yi, ma tutte le variabili di stato possono essere realizzate nel modo che verra'
descritto. Gli ingressi del circuito di fig. 9.4.1 possono essere sia i veri ingressi del circuito
che variabili di stato.
_
f1
_
f2 S yi
_ Yi
fk
_
gm
_
g2
R yi
_
g1
figura 9.4.1
La variabile Yi e' l'uscita della coppia di NAND collegati in modo incrociato; tale
struttura ricorda molto da vicino quella del flip-flop SR ottenuto incrociando due NOR.
Si indichino con f1 ,...., f k e g 1 ,...., g m le uscite dei NAND di ingresso. Si noti che k e
m non hanno alcuna relazione con il numero di variabili.
Si definisca poi:
S yi f1 .f 2 ....f k
cioe'
S yi f1 f 2 .... f k
e
R yi g 1 .g 2 ....g m
cioe'
R yi g 1 g 2 .... g m
Con queste definizioni si vede che l'uscita del gate basso della coppia con collegamento
incrociato e':
R yi . Yi
e quindi
Yi S yi .R yi . Yi
cioe'
213
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
Yi S yi R yi . Yi
214
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
l'assegnazione della codifica piu' naturale, che pone z2 = y2 e z1 = y1 conduce alla matrice
delle transizioni di fig. 9.5.1, esente da corse e da cicli.
CJK
y2 y1 000 001 011 010 100 101 111 110
00 00 00 00 00 00 00 01 01
01 11 11 11 11 01 01 01 01
11 11 11 11 11 11 10 10 11
10 00 00 00 00 10 10 10 10
figura 9.5.1
Rimane da determinare una realizzazione economica che sia priva di alee statiche e
dinamiche e nella quale le alee essenziali associate alla commutazione del clock siano state
attentamente controllate. Usando la matrice di fig. 9.5.1 quale mappa di Karnaugh per y1 e y2
si ottengono le seguenti equazioni:
y2 y1 .C y 2 . C y1 . y 2
y1 y1 .C y 2 . y1 y1 .K y 2 .C. J
dove l'ultimo termine della prima equazione e' stato inserito per eliminare un'alea statica.
L'implementazione del circuito richiede 8 gates e 3 invertitori con un numero totale di ingressi
pari a 23.
La soluzione individuata potrebbe senz'altro essere considerata soddisfacente; e'
opportuno tuttavia esaminare la tecnica di progetto proposta al paragrafo precedente. Dalla
tavola di fig. 9.5.1 si possono ricavare direttamente le quattro mappe di eccitazione che se-
guono.
CJK
y y
2 1 000 001 011 010 100 101 111 110
00 1 1
01
11
10
S y1
215
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
CJK
y y 000 001 011 010 100 101 111 110
2 1
00
01
11 1 1
10
R y1
CJK
y y 000 001 011 010 100 101 111 110
2 1
00
01 1 1 1 1
11
10
S y2
CJK
y y 000 001 011 010 100 101 111 110
2 1
00
01
11
10 1 1 1 1
Ry2
S y1 C . J .y 2 R y1 C.K . y2
Sy 2 C. y 1 R y2 C.y1
Si noti che nel caso che si sta esaminando i valori y 1 e y 2 sono direttamente disponi-
bili. Si ottiene quindi il circuito di fig. 9.5.2 che rispetto al caso precedente impiega due in-
vertitori e quattro ingressi in meno.
La struttura circuitale ricavata e' molto simile a quella usata per realizzare il flip-flop JK
in logica integrata DTL o TTL.
216
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
J S Q S Q
K R R
Clock
figura 9.5.2
Il circuito, come e' stato illustrato al paragrafo precedente, e' privo di alee statiche e
dinamiche. Tuttavia rimane la possibilita' di un'alea essenziale legata alla commutazione del
clock. Si supponga ad esempio che l'invertitore di fig. 9.5.2 sia particolarmente lento. In tal
caso la transizione da 0 a 1 del clock puo' far si' che il nuovo valore determinato dall'ingresso
si propaghi a y1 prima che uno 0 sia comparso all'uscita dell'invertitore. Il nuovo valore
pertanto si presenta immediatamente all'uscita senza attendere il fronte negativo del clock.
Sappiamo gia' che non vi e' modo di eliminare le alee essenziali modificando il progetto
logico. E' necessario invece assicurarsi che il tempo di propagazione dell'invertitore sia
sempre minore dei due livelli di logica della sezione master.
217
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
inferiori di quelli richiesti per una simulazione completa. Il metodo utilizza un calcolo logico
a tre valori.
In aggiunta alle costanti logiche 0 e 1 si considerera' un terzo elemento, indicato con X,
che nel metodo che si sta esaminando potra' essere considerato associato ad un valore
indeterminato o sconosciuto. Se ci si riferisce cioe' a un circuito di commutazione, quando
l'uscita di un gate fosse X cio' starebbe ad indicare che non si e' in grado di sapere se l'uscita di
tale gate sia 0 oppure 1.
Si definisca la negazione di X semplicemente come:
X X
_ B B
A A A 0 X 1 A 0 X 1
0 1 0 0 X 1 0 0 0 0
X X X X X 1 X 0 X X
1 0
1 1 1 1 1 0 X 1
NOT A+B A.B
figura 9.6.1
ESEMPIO 1
Il valore di Y nel semplice circuito di fig. 9.6.2 sia sconosciuto, mentre W e U siano
sempre noti istante per istante. Si vuole determinare per quali combinazioni di valori di W e U
l'uscita Z dipende dal valore sconosciuto di Y.
Ponendo Y = X, si ha che :
Z U W .X
e dalle mappe di fig. 9.6.1 si vede che Z = X se e solo se W = 1 e U = 0
218
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
W
Y
U Z
figura 9.6.2
In qualsiasi circuito "level mode", compreso quello del paragrafo precedente si possono
ottenere le espressioni booleane esprimendo delle funzioni di eccitazione in termini di ingressi
e di variabili di stato. Il metodo di Eichelberg utilizza queste espressioni per calcolare il
comportamento del circuito, modificando gli ingressi come viene illustrato nella procedura a
due passi che segue. La tecnica, che utilizza il calcolo a tre valori, riesce e evidenziare tutte le
possibilita' che un circuito sequenziale raggiunga uno stato erroneo a causa di corse o alee.
E' bene mettere in luce che il risultato di questa procedura e' piu' pessimistico di quello
fornito da una simulazione. Qualora il metodo di Eichelberg identifichi un'alea che il
progettista a priori non aveva individuato, allora e' opportuno rivedere il progetto; se poi
219
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
quest'ultimo non puo' venir modificato, si rende generalmente necessario ricorrere alla
simulazione vera e propria.
Si prenda ora in considerazione un semplice esempio di applicazione della procedura.
ESEMPIO 2
Il circuito di fig. 9.6.3 rappresenta la struttura elementare di un flip-flop D,
implementata senza aver eliminato le alee statiche.
DC
D y
00 01 11 10
Clock Y 0 1
1 1 1 1
_
y'1 = D.C + y .C
1
(a) (b)
figura 9.6.3
y1' D . C y1 .C y1 . D (9.6.1)
D C y, D C y,
1 1
Condizione iniziale 1 1 1 1 1 1
Passo 1 1 X X 1 X 1
Passo 2 1 0 X 1 0 1
figura 9.6.4
L'aggiunta del termine y1.D elimina l'alea statica; pertanto y1 rimane a 1 anche se C
passa dapprima a X e solo successivamente a 0. In circuiti piu' complicati di quello preso in
esame la procedura identifichera' comunque corse e alee, ma potra' essere molto difficile
individuare sulla mappa di Karnaugh la condizione critica che le determina.
220
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
ESEMPIO 3
Come secondo esempio si indaghi sull'effetto dell'alea essenziale rimasta nel flip-flop
JK master-slave di fig. 9.5.2. Sebbene non sia immediatamente evidente, vi sono solamente
due variabili di stato, y1 e y2 che possono venir prelevate dai gates superiori delle coppie a
collegamento incrociato che realizzano i flip-flop RS del circuito di fig. 9.5.2. Aprendo i loop
in questi punti si ottiene il circuito combinatorio di fig. 9.6.5.
_
y1 Sy2
C (clock)
Y2
y2
K y1 fB
_ _
C _ fA Ry2 Sy1
y2 Ry1 J
C
Y1
figura 9.6.5
Le uscite sono le eccitazioni y'1 e y'2 cui corrispondono le variabili secondarie y1 e y2.
Per ragioni di opportunita' due punti del circuito sono stati chiamati fA e fB e corrispondono
alle uscite inferiori delle coppie a collegamento incrociato.
Per applicare la procedura di Eichelberg si devono determinare le equazioni di ec-
citazione del circuito. Si determinino per prima cosa le espressioni di fA e fB.
fA y1 K .C. y 2
f B y 2 C. f A y 2 C.y1
Queste espressioni possono essere usate nello sviluppo di y'1 e y'2 . Si ottiene:
y' 2 fB y 1 .C y2 C.y 1 C. y 1 y 2 . C y1 C. y 1 y 2 . C y 1 .C y 1 . y 2
y'1 fA J . C . fB y1 K . C . y 2 J . C .y2 y1 .K y1 .C y1 .y 2 J . C .y 2
Si noti che le relazioni appena trovate coincidono con quelle prive di alee ricavate con i
metodi tradizionali al paragrafo 9.5. Questo non significa che i vari metodi di progetto
conducano allo stesso circuito, ma semplicemente che i due circuiti hanno la stessa funzione e
che con un'analisi corretta e un'opportuna manipolazione possono essere rappresentati dalla
stessa espressione booleana.
Si verifichi ora con il calcolo a tre valori la transizione del clock da 0 a 1. Sia ini-
zialmente y1 = y2 = 0, J = 1 e K = C = 0. Si ottiene:
221
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç
C y2 y1 y'1 y'2
Come si vede sono stati necessari tre passi di calcolo prima che y2' e y1' si stabiliz-
zassero per l'ingresso X. Inoltre ambedue queste variabili rimangono al valore X dopo il passo
2 del calcolo, mettendo in evidenza l'esistenza dell'alea essenziale.
Come si e' gia' detto il risultato del test e' pessimistico rispetto alla realta' in quanto il
circuito preso in considerazione funzionera' comunque in maniera soddisfacente. Per avere
una risposta definitiva tuttavia sarebbe necessario ricorrere alla simulazione.
Tuttavia spesso sulla sola base dei risultati del calcolo secondo Eichelberg si puo' effet-
tuare una modifica al circuito che elimini gli inconvenienti messi in evidenza.
222
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
CAPITOLO X
SISTEMI DIGITALI A LARGA SCALA
10.1) Introduzione.
Calcolatori digitali e sistemi digitali di grandi dimensioni sono chiari esempi di circuiti
digitali, tuttavia differiscono da quelli fin qui esaminati per la loro complessita', notevolmente
maggiore. I componenti principali, escludendo le memorie, della maggior parte dei computer e
dei sistemi periferici sono registri composti da numerosi flip-flop e il numero di stati puo'
raggiungere e superare il centinaio. E' evidente quindi che il grafo e la tabella degli stati non
sono un mezzo pratico per la descrizione dei sistemi a larga scala. L'intento del presente
capitolo e' quello di sviluppare una tecnica piu' adatta alla rappresentazione dei sistemi a larga
scala e poiche' la massima parte d'essi e' del tipo "clock mode" ci si limitera' ad esaminare solo
questi ultimi. Un primo passo che puo' essere compiuto in questa direzione consiste nel
modificare il modello fondamentale, spezzandolo in due circuiti sequenziali separati, come
illustrato in fig. 10.1.1.
informazioni segnali di
Clock di controllo
salto
Circuito
ingressi di
controllo
sequenziale di uscite di
controllo
controllo
figura 10.1.1
223
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
Gli scopi e i vantaggi di questo modello non sono tuttavia a questo punto chiari. Essi
verranno resi evidenti nei successivi paragrafi; ci si limitera' per il momento a esaminare in
dettaglio il modello proposto, attraverso un certo numero di esempi.
D Q
T
D Q X1
Logica T D Q
T
X2
D Q CS 2
T
Clock CS 1
Clock
(a) (b)
figura 10.2.1
In fig. 10.2.1 (b) e' riportato un circuito sequenziale con collegamento diretto del clock.
Se il segnale di controllo CS1 e' pari a 1, X1 viene memorizzato nel flip-flop, mentre se al
valore logico 1 si trova il segnale CS2 nel flip-flop viene memorizzato il segnale X2. E'
necessario che il valore da memorizzare sia presente all'ingresso del flip-flop prima che
giunga il segnale di clock. Di conseguenza, per mantenere l'informazione quando ambedue i
segnali di controllo sono nulli, il valore corrente memorizzato nel flip-flop deve essere ri-
portato all'ingresso D; tale operazione viene realizzata con un ulteriore gate AND e un NOR.
La rete di fig. 10.2.1 (b) puo' essere semplificata rinunciando a collegare il clock di-
rettamente al flip-flop. Si supponga infatti di permettere che il segnale di clock raggiunga
l'ingresso di sincronizzazione del flip-flop solamente se un nuovo dato deve venir memoriz-
zato. A questo scopo e' sufficiente abilitare il segnale di clock con l'OR dei segnali CS1 e CS2,
come illustrato in fig. 10.2.2 (a).
Il risparmio ottenuto consiste unicamente in un invertitore, ma con sistemi piu'
complessi, in particolare quando piu' flip-flop sono combinati per realizzare un registro, i ri-
sultati possono essere piu' soddisfacenti. Infatti in tal caso lo stesso segnale di controllo viene
utilizzato per introdurre i dati nei diversi flip-flop del registro e la rete di clock puo' essere
comune a tutti i flip-flop, come illustrato in fig. 10.2.2 (b). Con l'approccio di fig. 10.2.1 (b)
non si puo' invece conseguire alcun risparmio.
E' opportuno tuttavia far notare che l'usare segnali di controllo per abilitare il clock non
altera il tipo di funzionamento che rimane sempre "clock mode". Infatti, anche se alcuni flip-
flop sono controllati in modo da essere comandati solo in determinate situazioni, rimane pur
sempre il fatto che ciascun flip-flop puo' cambiare stato solo in corrispondenza all'impulso di
clock e quindi le modalita' di funzionamento non vengono alterate.
224
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
X1
D Q
X2 T
CS 1
CS 2
Clock
(a)
D Q D Q D Q
T T T
CS
CS
Clock
(b)
figura 10.2.2
B0 X0 B1 X1 (10.3.1)
Se C2=1 l'informazione contenuta nei tre flip-flop viene spostata verso destra di una
posizione. Il contenuto del flip- flop all'estrema destra viene ruotato in B0.
B1 B0 B2 B1 B0 B2 (10.3.2)
B1 B 0 . B1 (10.3.3)
B2 B1 B2 (10.3.4)
225
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
D Q
T
Logica Decoder
a C1C 2C3C4
D Q
T
X1
X0
Clock
T D TD TD
Q Q Q
B0 B1 B2
figura 10.3.1
Quanto illustrato descrive i trasferimenti che possono aver luogo, ma la sequenza dei
trasferimenti e quindi la sequenza delle uscite dipende dalla sequenza dei segnali di controllo.
Poiche' vi sono solo quattro possibili combinazioni di questi segnali, si puo' caratterizzare il
circuito sequenziale di controllo come circuito di Moore con quattro stati, indicabili con C1,
C2, C3 e C4, in corrispondenza a ciascuno dei quali si ha un 1 logico sulla corrispondente
uscita.
Si supponga inoltre che la sequenza con cui questi stati si presentano sia comandata da
un segnale a di ingresso di controllo della sequenza, come illustrato in fig. 10.3.2.
a
Stato 0 1 Trasferimento
C1 C 3 C2 B X 0;B X1
0 1
C2 C 1 C1 B 1
B 0;B 2
B 1;B 0
B 2
C C4 C4 B B .B
3 1 0 1
C 4 C2 C1 B 2
B + B
1 2
figura 10.3.2
Tale assunzione e' coerente con il circuito di fig. 10.3.1, in cui a e' il segnale di ingresso
del circuito sequenziale di controllo a quattro stati.
226
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
z = B2
questa tabella di stato estesa fornisce una completa descrizione del comportamento desiderato
per il circuito sequenziale. Si deduce infatti da tale descrizione che vi sono tre flip-flop di dati
e che sono necessari almeno due flip-flop di stato. Al contrario le tradizionali descrizioni viste
ai capitoli precedenti richiederebbero una tabella con 32 stati, chiaramente meno conveniente
di quella di fig. 10.3.2.
f 1 . s1 f 2 .s 2 .... f n .s n (10.4.1)
dove si sono i numeri dei passi del programma e fi sono funzioni booleane mutuamente
esclusive e di cui almeno una deve assumere istante per istante il valore logico 1. Esse devono
quindi soddisfare alle condizioni:
f i .f j 0 per i j
f1 f 2 .... f n 1
per tutte le combinazioni delle variabili che non sono condizioni d.c.c.
227
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
Di conseguenza una e una sola delle funzioni fi sara' a 1 ciascun istante e il risultato
aritmetico della (10.4.1) individuera' il numero di passo di programma cui saltare.
Seguendo le convenzioni descritte, la tavola di flusso 10.3.2 si trasforma nel pro-
gramma:
1. B0 X 0 ; B1 X1
a.3 a .2
2. B1 B 0 ; B2 B1 ; B 0 B2
1
3. B1 B 0 . B1
4. B2 B1 B2
a.2 a .1
In tutto il resto del presente capitolo si usera' il termine "sequenza di controllo" per
identificare la descrizione di un circuito nella forma appena introdotta.
Nel caso che si sta esaminando si e' ottenuta una descrizione completa del circuito di fig.
10.3.1, contenente tutte le informazioni della tavola di flusso estesa di fig. 10.3.2. Tuttavia
l'efficienza della descrizione a programma non appare chiaramente dall'esempio scelto. Si noti
infatti che una sola delle istruzioni di salto, quella al passo 3., e' stata omessa; nei sistemi di
maggiori dimensioni questa situazione e' molto piu' frequente. Inoltre, se anziche' un unico
ingresso si ha un gran numero di ingressi di controllo, accade normalmente che le fi di un
determinato passo siano funzione solamente di alcuni di questi ingressi.
10.5) La sintesi.
Uno dei principali vantaggi della descrizione a programma di un circuito e' che essa puo'
venir usata come strumento di sintesi. Anzi, per sistemi a larga scala, e' l'unico approccio che
permette di affrontare il discorso del progetto e che va al di la' dei metodi empirici che
ricorrono alla manipolazione a tentativi dei blocchi logici.
Nel resto del presente capitolo verra' mostrato come la descrizione a programma possa
essere utilmente impiegata per descrivere un certo numero di sistemi troppo complessi per
essere descritti con una tavola di stato.
Si ricordi tuttavia che il nuovo strumento messo a punto e' un linguaggio e solamente
un linguaggio e non possiede una struttura algebrica sulla base della quale condurre una
minimizzazione degli stati. D'altra parte la struttura stessa del linguaggio guida il progettista
ad una buona realizzazione, anche se non minima. C'e' inoltre da osservare che la
disponibilita' di circuiti integrati complessi a basso costo rende relativamente poco importante
la minimizzazione, anche se quest'ultima osservazione va presa necessariamente con le dovute
cautele.
ESEMPIO 1
Si voglia ottenere la sequenza di controllo di un circuito seriale di conversione di codice
illustrata nella seguente tavola di verita'.
228
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
f2 f1 f0
000 000
001 011
010 100
011 101
100 110
101 001
110 010
111 111
Come indicato, vi e' una linea di ingresso x e una di uscita z. Alla linea di ingresso si
presentano parole di tre bit e ciascun carattere e' seguito immediatamente da un altro. Vi e' poi
un ulteriore ingresso r di reset che, quando assume il valore logico 1, sincronizza le
operazioni, dando inizio al ciclo operativo. Il carattere di uscita tradotto sara' ritardato di due
impulsi di clock rispetto a quello di ingresso.
Soluzione
La traduzione non puo' aver luogo finche' tutti i tre bit di ingresso non siano stati
ricevuti all'istante n. Di conseguenza i due primi bit di ciascuna parola devono venir accu-
mulati in uno shift register formato dai flip-flop B0 e B1. All'istante n il bit xn-2 si trovera' in
n-1 n
B1 e il bit x in B0. Quando giunge x tutti i tre bit vengono elaborati simultaneamente,
dando luogo all'uscita immediata zn . Gli altri due bit zn+1 e zn+2 verranno accumulati in B1 e
B0 rispettivamente, poiche linformazione sui valori dellingresso nei due precedenti periodi
di clock non serve piu. All'istante n+1 B1=zn+1 verra' presentato in uscita, B0=zn+2 sara'
trasferito in B1 e il primo bit dal successivo carattere di ingresso verra' accumulato in B0.
All'istante n+2 infine zn+2 verra' trasferito in uscita, il precedente bit di ingresso verra'
trasferito da B0 a B1 e il nuovo bit verra' caricato in B0, in modo che allingresso ancora
successivo la sequenza possa riprendere. Le operazioni del circuito possono venir descritte da
una sequenza ripetitiva di tre istruzioni, di cui le prime due comandano la memorizzazione
nello shift register e la terza la conversione di codice e il caricamento parallelo del registro
con i nuovi valori.
1. B 0 , B1 x, B 0 ; z B1
r .1 r.2
2. B 0 , B1 x, B 0 ; z B1
r .1 r.3
3. B 0 , B1 f 2 x, B 0 , B1 , f1 x, B 0 , B1 ; z f 0 x, B 0 , B1
1
229
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
Le tre funzioni di uscita del passo 3. possono essere ottenute convertendo la tabella di
funzionamento assegnata precedentemente nelle tre mappe di Karnaugh di fig. 10.5.1.
0 1 1 0 1 1 0
1 1 1 1 1 1 1 1 1 1 1
z n+2 = f z n+1 = f zn = f
2 1 0
figura 10.5.1
f0 B1
f1 x n . B 0 x n .B1 x n .B 0 .B1
f2 x n . B 0 B 0 . B1 x n .B 0 .B1
Il meccanismo di reset e' stato incorporato nel programma di tre istruzioni. Quando
l'ingresso r = 1 il controllo viene restituito al passo 1 del programma, riinizializzando le ope-
razioni con l'ingresso di un nuovo carattere.
Si noti che nel programma di descrizione l'uscita z e' specificata a ciascun passo. Cio' si
rende necessario in quanto l'uscita non e' una funzione fissa dei dati e/o dei segnali di ingresso
come nel caso del circuito di fig. 10.3.1. Essa e' invece una funzione differente per ciascun
passo del programma ed e' quindi funzione anche dei segnali di controllo.
L'esempio considerato rende evidenti le differenze tra il metodo a programma di
descrizione e il convenzionale metodo a grafo di stato. Costruire il diagramma di stato ri-
chiede unicamente la comprensione delle volute sequenze di ingresso e di uscita, mentre non
e' necessaria alcuna ipotesi sul numero di variabili di stato o sulla struttura interna del circuito.
Al contrario l'approccio attraverso il programma di descrizione prende le mosse proprio
dall'aver ipotizzato una struttura base e pertanto richiede una notevole capacita' intuitiva
nell'ideare una possibile configurazione per il circuito. Il risultato comunque ben difficilmente
sara' minimo nel senso esposto ai capitoli precedenti.
Una volta che si sia ottenuta la sequenza di controllo la parte creativa del progetto e'
completata. La traduzione della sequenza di controllo in circuito logico richiede unicamente il
rigoroso rispetto di alcune semplici regole e l'operazione potrebbe addirittura essere
automatizzata e normalmente lo e.
E' tuttavia opportuno, anche per maggior chiarezza nei confronti del lettore, seguire
passo a passo la realizzazione circuitale.
E' conveniente sviluppare separatamente la parte di controllo e la parte di memo-
rizzazione dei dati e di logica. Quest'ultima e' illustrata in fig. 10.5.2.
Si noti che i passi 1 e 2 del programma di descrizione sono identici e quindi sara'
sufficiente un'unica linea di controllo per eseguirli ambedue. Una seconda linea di controllo
sara' necessaria per eseguire il terzo passo. Inoltre, poiche' il contenuto dei flip-flop viene
230
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
modificato ad ogni passo, la linea di clock va connessa senza interposizione di alcun circuito
agli ingressi C di ciascun flip-flop.
X f2
B0 f1
D Q f0
T
B1
D Q
T
Z
Clock
C1,2
C
3
figura 10.5.2
Normalmente l'uscita z del circuito, se dipende dai segnali di controllo, verra' realizzata
con un gate OR. Ad ogni passo, cioe' ad ogni impulso di clock, ad un ingresso dell'OR verra'
riportato il valore da trasferire in uscita, mentre nel contempo gli altri ingressi dovranno esser
posti a zero. Pertanto ciascun segnale di controllo del passo ed il relativo valore di uscita
verranno portati all'ingresso di un AND della rete logica a due livelli che realizza z.
Reti logiche AND-OR a due livelli, del tutto identiche a quella di uscita, vengono poste
in ingresso ai due flip-flop in modo che airispettivi ingressi D vengano riportati i valori corri-
spondenti al passo in corso.
Rimane da realizzare il circuito che sintetizza i segnali di controllo C1,2 e C3. Il primo
passo e' quello di ottenere il diagramma di stato per il controllore di sequenza; ciascun passo
del programma di descrizione corrispondera' ad uno stato, mentre i rami del grafo andranno
ricavati dalle istruzioni di salto. Si ottiene in tal modo il diagramma di fig. 10.5.3.
231
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
1 1 1/C1,2
r=1
r=0,1
2 2 1/C1,2
r=0 r=0
1/C 3
3
figura 10.5.3
Il circuito di controllo sara' pertanto un circuito di Moore che fornira' un'uscita a livelli
per tutta la durata di ciascun passo. Si noti che il circuito ha due uscite di cui solamente una
puo' essere diversa da 0 a ciascun istante. Per semplicita' di notazione a ciascun stato e' stata
associata solo l'uscita che in corrispondenza a quello stato e' diversa da 0.
Una volta che il diagramma di stato sia stato ottenuto, la sintesi del circuito di controllo
puo' essere condotta con gli usuali metodi visti ai capitoli precedenti. Si puo' facilmente
verificare che il diagramma di fig. 10.5.3 e' gia' minimo. La codifica ottenuta applicando le
regole 1 e 2 del paragrafo 7.7 e' riportata in fig. 10.5.4.
r
y y 0 1
2 1
00 01/10 00/10
01 11/10 00/10
11 00/01 00/01
10 ---/--- ---/---
stato futuro , C ,C
1,2 3
figura 10.5.4
y'1 r .y 2 y' 2 r .y 2 . y 1
C1,2 y2 C3 y2
232
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
D Q
T
r
D Q C3
Clock T
C1,2
figura 10.5.5
r .1 r.2
e' illustrata in fig. 10.5.6. Prima dell'impulso di clock che fa eseguire il passo 1, l'uscita del
flip-flop sia 1. Questo segnale viene utilizzato come uno degli ingressi dei due AND della
sezione di salto. L'altro ingresso di ciascun AND e' il relativo addendo dell'istruzione di salto.
In generale vi sara' un AND per ciascun addendo dell'espressione di salto; poiche' uno e solo
uno di tali addendi puo' essere 1 a un determinato istante, solamente la corrispondente uscita
della rete logica sara' 1.
r
al passo 1
D Q
Clock T
al passo 2
figura 10.5.6
L'uscita Passo 1 sara' 1 se r=1 e Q=1, mentre se r=0 e Q=1 allora varra' 1 l'uscita Passo
2. Questo segnale andra' riportato all'ingresso D del flip-flop che comanda l'esecuzione del
233
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
passo 2. Se r=0 l'impulso di clock che esegue il passo 1 propaghera' il segnale nel flip-flop del
passo 2, trasferendo il controllo al passo 2 stesso.
Quando all'ingresso di un flip-flop di controllo si deve riportare piu' di un'uscita di una
rete di salto e' evidentemente necessario usare un gate OR come illustrato in fig. 10.5.7. In tal
caso, se uno qualsiasi dei segnali dai passi 1, 2 o 3 e' a livello logico 1 quando arriva l'impulso
di clock, allora il flip-flop del passo 1 viene posizionato a 1.
dal passo 1
figura 10.5.7
Il circuito completo del controllore di sequenza dellesempio che si sta trattando e'
illustrato in fig. 10.5.8. Si noti che tale circuito puo' essere ottenuto con una traduzione diretta
della sequenza di controllo, evitando la costruzione di un diagramma degli stati, che si rende
necessaria solo quando si voglia puntare a una realizzazione minima.
D Q D Q D Q
T T T
Clock
C1,2 C3
figura 10.5.8
234
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
lo scegliere un flip-flop per passo rende piu' semplice l'esecuzione dei test, la diagnosi dei
guasti e la manutenzione.
Prima di passare ad un esempio successivo e' opportuno assegnare alcune regole utili a
specificare le uscite del circuito. Con il metodo fin qui visto il circuito risulta diviso nella
sezione di memorizzazione e logica e nel controllore di sequenza. Le uscite del circuito
possono dipendere da una sola o da ambedue le sezioni e pertanto la notazione usata per
specificare l'uscita dovra' variare a seconda del caso.
Se ad esempio si prende in considerazione il circuito di fig. 10.3.1 l'uscita e' funzione
della sola sezione di memorizzazione e logica e la relativa equazione e':
z B2
In sostanza cio' sta ad indicare che l'uscita varia ogni volta che varia B2, ma l'uscita e'
prelevata sempre nello stesso punto del circuito; pertanto e' sufficiente specificare l'uscita una
volta sola. In tutti i casi simili a questo l'uscita puo' allora venir specificata con una speciale
istruzione che precede la sequenza di controllo.
OUTPUT : z = B2
In altri casi, in cui le uscite siano piu' d'una e dipendano da piu' di un flip-flop,
l'istruzione puo' assumere ad esempio la forma:
OUTPUT : z1 = B2 , z2 = A0
oppure
OUTPUT : z = A0.B2
Nell'esempio di fig. 10.5.2 l'uscita e' invece funzione sia della sezione di memoriz-
zazione e logica che di quella di controllo. E' necessario pertanto specificare l'uscita per cia-
scun passo della sequenza di controllo. Il valore attuale dell'uscita dipendera' dal contenuto dei
flip-flop a ciascun passo di esecuzione; la specificazione dell'uscita a ciascun passo serve a
identificare la funzione logica, variabile di volta in volta, che la sintetizza. Infine, anche se
fino a questo momento non se ne e' visto alcun esempio, vi possono essere dei casi in cui
l'uscita sia derivata solamente dalla sezione di controllo. Anche in tal caso l'uscita va
specificata passo per passo.
Per chiarezza, se ci si riferisce all'esempio che verra' presentato al paragrafo 10.8,
l'istruzione:
read = 1
sta a indicare che l'uscita di nome read vale 1 al passo 3; si assume che in corrispondenza ai
passi per i quali l'uscita non sia specificata, essa valga 0.
Quest'ultimo esempio chiarisce inoltre l'importante differenza tra l'istruzione:
read 1
e
235
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
read 1
La prima infatti e' un'istruzione di trasferimento e indica che il valore logico 1 viene
caricato nel flip-flop di nome read. In contrapposizione la seconda e' un'istruzione di
interconnessione e stabilisce che la linea di nome read viene collegata al valore logico 1.
In modo del tutto simile l'istruzione:
OUTPUT : z = B
ESEMPIO 2
Si determini il controllore di sequenza per un circuito di verifica della parita' di se-
quenze di 4 bit che si presentano su una linea di ingresso seriale x. Sia prevista una linea di
reset che, quando passa al livello logico 1, indica che il successivo bit in arrivo e' il primo di
una sequenza. L'uscita sia costantemente a 0 tranne dopo l'arrivo del quarto bit se il test ha
dato responso pari.
Soluzione
E' necessario un unico flip-flop per la sezione dati, nel quale memorizzare via via il
risultato del test di parita'. La sequenza di controllo, indicando con p tale flip-flop, sara':
1. p p x .r; z 0
r.1 r .2
2. p p x .r; z 0
r.1 r .3 (10.5.1)
3. p p x .r; z 0
r.1 r .4
4. p 0; z p x
1
Al quarto passo il flip-flop p viene sempre azzerato, mentre l'uscita sara' 1 solo se il
controllo di parita' avra' dato risultato pari. Poiche' l'uscita e' funzione sia della sezione di
memorizzazione dei dati che della sezione di controllo, essa va specificata a ciascun passo
della sequenza di controllo.
La situazione di quest'esempio, in cui l'uscita e' costantemente 0 e solo occasionalmente
passa ad un altro valore, e' abbastanza comune. Per semplificare la notazione pertanto si
adotta la convenzione di specificare l'uscita solo quando assume un valore diverso da zero.
236
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
1. p p x .r.N1 . N 2 ; N 2 N1 N 2 .r;
N1 N 2 .r; z p x . N1 . N 2 (10.5.2)
237
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
DIMENSION A(3),B(8)
che sta ad indicare che nei quattro flip-flop del registro A vengono caricate rispettivamente le
costanti logiche 1,0,1,1. Un particolare vettore di costanti logiche che e' conveniente definire
e' (n), cioe' un vettore di n valori logici 1.
In certi casi poi potra' essere necessario prendere in considerazione un singolo flip-flop
di un certo registro. A tale fine si puo' adottare una numerazione per ciascun flip-flop da
sinistra verso destra e iniziando con lo zero. Si identifichera' in tal modo il singolo flip-flop
usando il suo numero come indice da accoppiare alla variabile che identifica l'intero registro.
E' inoltre possibile combinare, con l'operatore di concatenazione, piu' registri in un
singolo vettore, che per alcune operazioni puo' venir usato come un registro di maggiori
dimensioni, scrivendo i simboli dei singoli registri consecutivamente separati da una virgola.
Se ad esempio A e' un registro da 4 bit, B uno da 3 bit e p un singolo flip- flop, allora:
C = A,p,B
C0 = A0 C1 = A1 C2 = A2 C3 = A3 C4 = p C5 = B0 C6 = B1 C7 = B2
B D1 , D 3 , D 5 (10.6.1)
Una notazione piu' complessa, ma piu' compatta puo' essere la seguente, che definisce
l'operazione detta di compressione.
238
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
B R/Y
dove R e' un vettore contenente valori 1 e 0 e Y e' un registro con lo stesso numero di elementi
di R. Per definizione la compressione R/Y da' origine ad un registro formato dai flip-flop di Y
che corrispondono a valori 1 di R. Ad esempio la (10.6.1) puo' essere scritta, utilizzando
l'operatore di compressione, nel modo seguente:
B 0,1,0,1,0,1 /D
Quando sia necessario isolare i primi o gli ultimi n flip-flop di un registro si possono
definire due particolari forme di compressione. A questo scopo si utilizza il prefisso n o n
rispettivamente. Con tali definizioni n/Y indica un vettore composto dai primi n flip-flop del
registro Y, mentre con n/Y si indica il registro composto dagli ultimi n flip-flop di Y.
Ad esempio, se A e' un registro da 5 bit, si ha:
3
/A = A0,A1,A2
e
2
/A = A3,A4
e in analogia
A A 0 , A 1 ,......, A a 1 (10.7.3)
239
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
o ancora
A . B A 0 . B 0 , A1 . B1 ,...., A A 1 .B B 1 (10.7.4)
a .B a . B 0 , a . B 1 ,...., a . B B 1 (10.7.5)
In alcuni casi potra' essere necessario risistemare gli elementi del vettore. L'operazione
n A significhera' ruotare gli elementi di A di n posizioni verso sinistra, mentre n A
indichera' sempre una rotazione di n posizioni, ma verso destra. Nel caso dell'operazione
n A gli n bit piu' a destra di A saranno rimpiazzati dagli n piu' a sinistra e analogo sara' il
comportamento nel caso dell'operazione n A . Ambedue tali operazioni verranno chiamate
rotazione.
Le operazioni di scorrimento a sinistra n A e di scorrimento a destra n A sono
strettamente correlate con quelle di rotazione, tuttavia nel caso di n A gli n bit lasciati liberi
sulla destra vengono riempiti con zeri, mentre nel caso dell'operazione n A sono gli n bit a
sinistra ad essere riempiti da zeri.
ESEMPIO 1
Valutare il contenuto dei registri ad ogni passo del seguente programma
(a) A 2 R
(b) B R
(c) C . /R S
(d) D R .S
R = (1,0,0,1,0,1,1) S = (1,1,0,0,0,0,1)
Soluzione:
240
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
Con l'introduzione dei simboli appena descritti si e' venuti in possesso di un linguaggio
sufficientemente potente, atto a descrivere in modo efficiente la sequenza di controllo di
circuiti sequenziali complessi. C'e' tuttavia da osservare che parecchie delle logiche
combinatorie complesse usate nella realizzazione di un sistema digitale sono di frequente uso.
E' conveniente quindi provvedere a specifiche abbreviazioni per queste funzioni in modo da
rendere ancora piu' compatta la scrittura di una sequenza di controllo.
A titolo di esempio si prenda in considerazione un selettore da tre bit b0,b1 e b2 . Si
supponga cioe' che un passo di una sequenza di controllo usi il contenuto di un registro B da
tre bit per selezionare un particolare bit di un registro A da 8 bit, ponendolo in un flip-flop r.
Si avra', con le notazioni fin qui introdotte:
Si supponga ora di assegnare un nome al vettore di 8 bit, uscita del selettore da 3 bit,
usando poi tale nome nella scrittura della sequenza di controllo. Si usi cioe' la notazione:
DECODE (R)
r / DECODE B . A
Usata in tal modo la notazione DECODE (B) somiglia moltissimo ad una subroutine di
un programma scritto ad esempio in FORTRAN. Per questo motivo essa viene chiamata
subroutine logica combinatoria.
Un'altra rete per la quale si usa correntemente la notazione in forma di subroutine logica
combinatoria e' il sommatore. Per rappresentare l'addizione degli n bit di un registro D e degli
n bit di un accumulatore AC, mettendo il risultato nel vettore di n+1 bit formato
dall'accumulatore stesso e dall'extra flip-flop m, si puo' usare la notazione:
m, AC ADD AC, D
E' poi comune avere l'occasione di usare una terza subroutine logica combinatoria per
incrementare il contenuto di un registro, sommando cioe' uno al contenuto del registro stesso
(si assuma che il bit 0 sia quello piu' significativo). La rete logica necessaria per incrementare
il contenuto di un arbitrario registro R da quattro bit e' illustrata in fig. 10.7.1. L'uscita di
questa rete e' il vettore da quattro bit INC (R).
241
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
INC(R)
R0 R1 R2 R
3
figura 10.7.1
L'istruzione di trasferimento:
R INC R (10.7.7)
fa si' che il contenuto di R sia aumentato di un'unita' quando il corrispondente passo della
sequenza di controllo viene eseguito.
Nei capitoli precedenti tuttavia e' gia' stato fatto notare che la realizzazione piu' ef-
ficiente di un contatore e' quella che usa flip-flop di tipo T. Se quindi un registro e' usato
unicamente come contatore, cioe' appare solo in istruzioni del tipo (10.7.7), allora si puo'
utilizzare tale contatore proprio per realizzare la funzione di incremento.
In questo caso l'istruzione:
CT INC CT
puo' essere usata per rappresentare un segnale di controllo capace di accumulare un impulso di
clock nel contatore CT, come illustrato in fig. 10.7.2, e di conseguenza si puo' usare allo scopo
che ci si propone un contatore standard costruito in un singolo involucro e scelto tra gli
elementi a media scala di integrazione.
242
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
CT 0 CT1 CT 2 CT3
Contatore modulo 16
CT INC(CT)
Clock
figura 10.7.2
L'esempio appena fatto mette in luce che una subroutine logica combinatoria descrive in
modo univoco l'operazione da eseguire; tuttavia la realizzazione circuitale puo' essere di
diverso tipo e variare di volta in volta.
10.8) Applicazioni.
In questo paragrafo verranno presi in considerazione due esempi di uso del linguaggio
che si e' appena introdotto. In ambedue gli esempi sara' necessario manipolare una notevole
quantita' di dati e cio' rende poco pratico l'uso dei metodi classici di progetto per i circuiti
sequenziali sincroni.
ESEMPIO 1
Si vuole progettare un controller da usare in unione a un registratore digitale a cassette
magnetiche per realizzare un sistema di verifica di circuiti combinatori che abbiano fino a otto
ingressi e otto uscite. I circuiti da verificare sono realizzati mediante elementi logici integrati e
sono disponibili solo i terminali di ingresso e di uscita. Il sistema che si vuol realizzare inoltre
deve solo essere in grado di segnalare malfunzionamenti. Se cioe' alcune uscite non assumono
il valore corretto in corrispondenza ad un dato vettore di ingresso, allora il circuito sotto
esame non deve venir accettato.
Sul nastro sono memorizzate coppie di caratteri da 8 bit, rappresentative di un ingresso e
del corrispondente valore che l'uscita deve assumere. Il controller deve quindi essere in grado
di manipolare fino a 256 coppie.
Poiche' il sistema non ha alcuna necessita' di operare a frequenze di clock molto elevate,
si puo' supporre per semplicita' che controller e registratore siano pilotati in modo sincrono
dello stesso segnale di clock.
Nei periodi di clock, durante i quali e' presente sulla relativa linea il segnale di controllo
read, deve essere eseguita dal nastro la lettura di un carattere di 8 bit e tale carattere viene
caricato nel registro di transito TAPE. Nei periodi invece in cui e' attiva la linea rewind, il
nastro viene riavvolto. Alla fine delle operazioni di riavvolgimento, oppure quando il sistema
viene acceso per la prima volta, il lettore di nastro attiva per un periodo di clock il segnale
ready.
Il controller deve fornire gli appropriati segnali di controllo all'unita' a nastro, piazzare
ciascun vettore di ingresso in un registro connesso con gli ingressi del circuito in esame e
243
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
confrontare le uscite con il vettore di uscita desiderato. Quando viene rilevata una discrepanza
tra il vettore d'uscita attuale e il vettore di uscita desiderato deve venir commutato un segnale
di uscita z, che dovra' rimanere tale finche' il sistema non viene riazzerato con l'applicazione
di un segnale generato manualmente e applicato alla linea go, dopo che un nuovo circuito da
sottoporre a test sia stato collegato al tester.
Soluzione
Gli elementi di memoria, siano essi vettori o scalari, richiesti per la sezione dati e logica
del tester, sono illustrati in fig. 10.8.1. Vi sono tre registri da 8 bit. Il registro TV sara'
collegato ai terminali di ingresso del circuito sotto esame, quello YD sara' usato per memo-
rizzare il valore desiderato dell'uscita, mentre il terzo registro COUNT sara' usato come
contatore modulo 256 per contare il numero di vettori di test applicati al circuito. Quando il
contatore raggiunge lo zero, un segnale applicato alla linea rewind fara' riavvolgere il regi-
stratore e avvisera' l'operatore che il circuito esaminato non presenta inconvenienti e che un
nuovo circuito puo' essere inserito.
TV(8)
Y Z
Circuito Logica
sotto di
TAPE(8) confronto
esame go
YD(8)
COUNT(8)
figura 10.8.1
Le linee connesse alle uscite del circuito sotto test verranno chiamate per ragioni di
convenienza Y. Infine il flip- flop z verra' posto a 1 quando verra' rivelato un errore.
Le rimanenti linee di segnale dall'unita' di controllo al registratore non vengono il-
lustrate, in quanto in fig. 10.8.1 e' riportata unicamente la sezione dei dati e logica.
La descrizione della sequenza di controllo puo' iniziare con una lista degli ingressi e
delle uscite che non dipendono dall'unita' di controllo.
Questa non e' un'operazione strettamente necessaria, tuttavia nei circuiti complessi in
cui ci sono parecchi segnali tra interni ed esterni e' opportuno specificare chiaramente quali
siano i segnali che comunicano con il mondo esterno, in contrapposizione con quelli che
agiscono solo all'interno del circuito.
L'effettiva sequenza di controllo inizia appena prima dell'inizio del test di un nuovo
circuito. Il solo trasferimento associato ai primi due passi e' l'azzeramento del flip-flop z.
244
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
1. ready .2 ready.1
2. z 0
go .3 go.2
Ciascun test individuale, relativo a un ben preciso pattern di ingresso, inizia al passo 3.
Dapprima un segnale read = 1 fa si' che un vettore di ingresso sia caricato nel registro TAPE.
Questo vettore viene poi trasferito in TV, eccitando il circuito sotto prova. Successivamente il
vettore di uscita desiderato viene trasferito in YD sempre attraverso TAPE.
3. read 1
4. TV TAPE
5. read 1
6. YD TAPE
Al passo 7 COUNT viene incrementato e allo stesso tempo l'uscita attuale del circuito
in prova viene confrontata con l'uscita desiderata. Il simbolo di OR esclusivo verra' utilizzato
come abbreviazione dell'equivalente logico in termini di AND, OR e NOT.
Se vi e' una differenza tra due qualsiasi bit dell'uscita attuale e dell'uscita desiderata,
allora l'espressione:
/Y YD
8. z 1, rewind 1, COUNT 8
1
10. rewind 1
1
Il circuito di controllo della sequenza e' illustrato in fig. 10.8.2. Come nel caso di circuiti
progettati con metodi convenzionali, l'inizio delle operazioni necessita di un segnale di reset,
245
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
che non e' incluso nelle specifiche iniziali. Tale segnale deve porre a 1 il flip-flop 1 e azzerare
tutti gli altri. Il flip-flop 1 abilita i gate che ricevono il segnale ready.
z 0
read
ready
D Q D Q D Q D Q D Q
T T T T T
1 2 3 4 5
(C1 ) (C2) (C ) (C4 ) (C )
3 5
go
TV TAPE
COUNT 00000000
Z 1
YD TAPE COUNT INC(COUNT)
(C7 )
D Q D Q
D Q
T T rewind
T
6 7 8
(C6 ) (C8 )
+/(Y + YD) (C10)
D Q
D Q
T
T
9 10
(C )
9
+/COUNT
figura 10.8.2
Finche' ready rimane a zero, gli impulsi di clock mantengono il flip-flop 1 al valore
logico 1, mentre quando ready passa a 1, il successivo impulso di clock azzera il flip-flop 1 e
setta il flip-flop 2. Viene in tal modo generato il segnale di controllo C2, connesso all'ingresso
K del flip-flop z, in modo che al successivo impulso di clock esso venga azzerato. C2 inoltre
abilita i gate cui e' applicato il segnale go, in modo che il flip-flop 2 sia azzerato e il flip-flop
3 sia settato quando go passa da zero a uno.
Si noti che le linee di uscita di ciascun flip-flop sono indicate con il trasferimento che
ciascuna di esse abilita oppure con il nome del segnale di controllo generato.
I passi 3 e 5 sono esempi di casi in cui le uscite del circuito sono generate unicamente
dal controllore di sequenza, come e' stato gia' precedentemente accennato, con la linea read
posta a 1 durante tali passi. Come illustrato in fig. 10.8.2 cio' viene ottenuto semplicemente
con l'operazione di OR di C3 e C5 ; si ha pertanto read = 1 durante i passi 3 e 5 e zero durante
tutti gli altri passi. Il segnale rewind e' generato in modo analogo ai passi 8 e 10.
Il presente paragrafo puo' essere concluso con un altro esempio in cui viene richiesta una
maggiore quantita' di memoria per immagazzinarvi le informazioni. Si puo' soddisfare questa
nuova esigenza introducendo una notazione matriciale per rappresentare un insieme di registri.
Si supponga infatti di avere un gran numero di registri, ciascuno con lo stesso numero di
bit. Anziche' assegnare un diverso simbolo a ciascuno di questi registri e' piu' conveniente
usare lo stesso simbolo per tutti i registri dell'insieme, distinguendo ciascun registro con un
indice.
Un insieme di registri, organizzato in tal guisa, puo' essere chiamato memoria e ciascun
registro puo' essere chiamato parola. In definitiva una memoria M di m parole sara' formata
dai registri M0,M1, ..... ,Mm-1.
Il modo in cui un'informazione puo' venir recuperata da una memoria varia a seconda
della realizzazione della memoria stessa.
246
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
Per l'esempio che segue si supporra' di usare una memoria allo stato solido in cui i livelli
di uscita di ciascun registro siano continuamente disponibili. Eseguendo l'AND dei livelli di
uscita di ciascun registro con le linee di uscita di un decodificatore di indirizzo e mettendo in
OR i vettori risultanti e' possibile trasferire i livelli d'uscita del registro voluto alle linee di
uscita.
Indicando con AR il registro degli indirizzi, l'espressione logica combinatoria relativa e',
se i bit di indirizzo sono n (indicando con m la quantita' 2n-1):
Tale espressione puo' essere usata sul lato destro di un'istruzione di trasferimento in un
registro e un'operazione di lettura da una memoria puo' essere considerata terminata quando il
vettore di uscita sara' stato trasferito in un registro di dati.
Per ragioni di convenienza, l'espressione appena introdotta puo' essere abbreviata
introducendo la subroutine logica combinatoria:
SELECT M, DECODE AR
ESEMPIO 2
Si vuole progettare un semplice controllore per una macchina utensile che usi una me-
moria di sola lettura per la memorizzazione delle sequenza delle posizioni dell'utensile stesso.
Vengono usati numeri a 18 bit per specificare la posizione spaziale di quest'ultimo; il modo in
cui questa posizione viene specificata non interessa in questa sede.
Esistono quattro possibili sequenze di posizioni, ciascuna delle quali puo' venir richiesta
dall'operatore a qualsiasi istante e ciascuna sequenza e' lunga 256 parole. Il sistema dovra'
quindi comprendere un registro PR da 18 bit per memorizzare la posizione corrente
dell'utensile. Il governo elettronico della macchina interroghera' continuamente questo registro
per mezzo di tre convertitori digitali/analogici.
Le comunicazioni con l'operatore sono realizzate con un flip-flop ss di start-stop e un
registro selettore di sequenza SSR da 2 bit in cui le combinazioni di bit 00,01,11 e 10 cor-
rispondono rispettivamente alle sequenze A, B, C, D.
Quando l'operatore mette a 1 ss fa si' che il controllore inizi a leggere la sequenza
specificata da SSR. Quando invece ss passa a zero, la sequenza in atto viene interrotta e il
registro PR viene azzerato. Se il controllore completa la sequenza, cioe' legge in ordine tutte
le 256 parole di quest'ultima, allora vengono azzerati ss e PR.
L'operatore puo' agire per modificare il contenuto di ss e SSR in qualsiasi istante,
tuttavia vi sia un meccanismo di sincronizzazione che impedisce la modifica durante la fase
attiva di un impulso di clock.
Si deve notare che nel caso che si sta trattando gli ingressi vengono trattati diffe-
rentemente che non nei precedenti esempi. In questo caso infatti gli ingressi possono essere
modificati in qualsiasi istante e questi cambiamenti vengono immediatamente memorizzati,
tuttavia non si ha alcun effetto finche' non si raggiunge un appropriato punto della sequenza.
247
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
Le linee di ingresso non appariranno pertanto nella sequenza di controllo. La loro esistenza
sara' tuttavia implicita, come molto spesso e' implicita l'esistenza di una linea di reset.
Soluzione
I soli registri in piu' necessari, oltre a quelli gia' descritti, sono un registro a 10 bit per
memorizzare l'indirizzo voluto della posizione di memoria da leggere e la memoria stessa. I
loro nomi saranno rispettivamente AR e ROM. La completa configurazione dei registri e'
illustrato in fig. 10.8.3; la memoria ROM contiene 1024 parole da 18 bit e la sequenza A e
memorizzata nelle prime 256 posizioni, la B nelle 256 successive e cosi' via. La sequenza di
controllo e' riportata di seguito. Essa inizia con una specificazione di uscita, che ricorda che il
registro PR pilota i convertitori i quali a loro volta posizionano l'utensile.
ROM AR ss
PR SSR
ai convertitori A/D
figura 10.8.3
Si noti che non vi sono specificazioni di ingresso poiche', come si e' gia' accennato, non
vi e' alcun ingresso diretto.
Il passo 1 realizza una condizione di attesa finche' ss non passa a 1; in tal caso si
procede verso il passo 2 che carica il primo indirizzo della sequenza voluta in AR.
OUTPUT : PR
1. ss.2 ss.1
4. AR INC AR
ss .5 ss .7
8 8
5. / /AR .3 / /AR .6
6. ss 0
7. PR e 18
248
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
A B* f1 C* f 2
dove f1 e f2 sono due funzioni logiche e l'asterisco acquista il significato di "se". In sostanza
l'istruzione dice "trasferisci in A il contenuto di B se f1 = 1 oppure trasferisci in A il contenuto
di C se f2 = 1". Si noti che in un'istruzione di questo tipo le funzioni fi devono essere
mutuamente esclusive, cioe' una sola di esse puo' valere uno ad un determinato istante.
L'espressione del passo 2 pertanto carica nel registro AR il valore 0, 256, 512 o 768 a
seconda del contenuto di SSR.
Il passo 3 e' un esempio di istruzione di lettura da una memoria. Il contenuto della
locazione della ROM specificata in AR viene trasferito in PR.
L'indirizzo contenuto in AR viene poi incrementato al passo 4, in modo da predisporre il
sistema a leggere la parola successiva. Il passo 4 tuttavia contiene anche un esame del flip-
flop ss. Se l'operatore ha azzerato tale flip-flop si passa al passo 7, nel quale viene azzerato
AR e si ritorna poi al passo 1.
SSR
0
SSR AR (10)
1
SSR 0
AR 0,1, (8)
SSR1
SSR
0
SSR 1 AR 1,0, (8)
SSR0
SSR AR 1,1, (8)
1
D Q D Q
T T
figura 10.8.4
Il passo 5 rimanda al passo 3 finche' non sono state lette 256 parole. Questa condizione
e' rivelata dal fatto che alla fine di una sequenza gli ultimi 8 bit di AR sono sempre nulli. Alla
fine della sequenza i passi 6 e 7 azzerano ss e PR e rimandano al passo 1.
In fig. 10.8.4 e' riportata la porzione di circuito di controllo che implementa il passo 2.
Si puo' facilmente vedere perche' si e' parlato in questo caso di trasferimento condizionale;
infatti la logica ha la stessa struttura di quella introdotta in precedenza per implementare salti
condizionali. In questo caso tuttavia l'istruzione non serve per alterare l'ordine con cui viene
eseguita la sequenza di controllo, ma semplicemente per eseguire un opportuno trasferimento.
10.9) Conclusioni.
La crescente affidabilita' ed economicita' della realizzazione di funzioni complesse in
tecnica integrata fa si' che al giorno d'oggi i sistemi da progettare contengano piu' elementi di
quanti sia conveniente manipolare con i tradizionali metodi di progetto, che fanno uso della
tavola di stato.
249
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð
In questo capitolo e' stato presentato un tipo di approccio che puo' essere usato con
sistemi di qualsivoglia dimensione. Non vi e' tuttavia alcuna garanzia che la realizzazione
ottenuta sia minima, ma il linguaggio introdotto presenta diversi vantaggi rispetto ai metodi
intuitivi che in caso contrario il progettista sarebbe costretto ad adottare. Una grande impor-
tanza inoltre ha il rigore formale del linguaggio, che permette il trasferimento non equivoco di
informazioni.
Gli esempi presentati in questo capitolo hanno preso in esame sistemi relativamente
semplici in modo da dare semplicemente un'idea della metodologia. Maggior approfondi-
mento si potra' avere riferendosi ad esempio a "Digital System: Hardware Organization and
Design" di F.J.Hill e G.R.Peterson edito dalla Wiley e Sons, New York, 1973.
250
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
CAPITOLO XI
INTEGRAZIONE A MEDIA E LARGA SCALA
11.1) Introduzione.
Molto spesso e' stato affermato che l'avvento di tecnologie LSI e MSI ha invalidato i
tradizionali metodi di progetto logico e reso necessario il ricorso ad altre metodologie. Tale
affermazione tuttavia non va intesa in modo esclusivo; e' bensi' vero che aspetti riguardanti
costo, uso, costruzione e progetto di sistemi digitali sono stati rivoluzionati dalle tecnologie
LSI e MSI. Malgrado cio' solo gli ultimi punti del processo di progetto, come la costruzione
delle maschere, la realizzazione del layout e delle interconnessioni e i problemi orientati alla
verifica del circuito sono stati profondamente modificati, mentre la parte iniziale del progetto,
che e' sotto certi aspetti la piu' creativa, e' rimasta in sostanza inalterata. L'algebra booleana
rimane ancora il metodo base per descrivere formalmente il funzionamento di circuiti logici
combinatori; pertanto il progetto di logiche combinatorie da implementare con tecnologie LSI
non differisce in sostanza dal progetto fatto per un'implementazione a logica sparsa o
addirittura a componenti discreti. L'uso di parti MSI puo' tuttalpiu' limitare la liberta' d'azione
del progettista. Cio' non significa tuttavia che in certi casi particolari i problemi non possano
essere affrontati in maniera inusuale. Ad esempio e' interessante vedere come utilizzando
componenti a media scala di integrazione possano essere realizzate funzioni combinatorie di
qualsiasi tipo.
A B C D y
y0
1 0 0 0 0
0 0 0 1 y1
y2
2 0 0 1 0
0 0 1 1 y3
y4
3 0 1 0 0
0 1 0 1 y5
y6
4 0 1 1 0
0 1 1 1 y
7
1 0 0 0 y8
5
1 0 0 1 y9
y
6 1 0 1 0 10
1 0 1 1 y11
y12
7 1 1 0 0
1 1 0 1 y13
y
8 1 1 1 0 14
1 1 1 1 y
15
figura 11.1.1
250
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
valore presente sulle n linee di indirizzo. Con l'uso di tale dispositivo e' molto semplice
realizzare qualsiasi funzione combinatoria di n+1 variabili.
Si consideri per semplicita' un multiplexer con tre bit di indirizzo. Con il suo uso e'
possibile realizzare qualsiasi funzione combinatoria da quattro variabili. Si ricordi che le
24 16
funzioni di quattro variabili sono in numero di 2 2 .
La tavola di verita' di una generica funzione di 4 variabili e' riportata in fig. 11.1.1, con
la particolarita' che le righe sono stata suddivise in 8 gruppi di due righe ciascuno. Si noti che
la variabile D assume in ciascun gruppo il valore 0 e rispettivamente 1 in corrispondenza alla
prima e alla seconda riga del gruppo.
Si considerino ora i valori che una generica funzione puo' assumere in corrispondenza
all'i-esimo gruppo. Poiche' i soli possibili valori sono 00, 01, 10 e 11 si deduce che:
0
D
y 2 i 1 , y 2i 1
D
1
0
_
D
D
1
0 1 2 3 4 5 6 7
ingressi
A
B
Multiplexer
indirizzo
C
uscita
figura 11.1.2
Si e' ottenuta in tal modo una realizzazione particolarmente semplice, che non ha
richiesto alcuna minimizzazione e che inoltre permette con la stessa configurazione circuitale
di sintetizzare una qualsiasi tra le 65536 funzioni di quattro variabili. E' evidente che sarebbe
estremamente interessante essere in possesso di una sorta di macroalgebra, ma
251
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
sfortunatamente nessuno a tutt'oggi l'ha inventata. D'altra parte va osservato che molto spesso
un progetto utilizza contemporaneamente gate individuali e parti LSI e MSI.
Per quanto riguarda i sistemi digitali complessi diventa estremamente importante capire
perfettamente il comportamento delle parti sequenziali; infatti i vincoli associati alle
temporizzazioni dei circuiti sequenziali sono molto stretti e, poiche' le modifiche apportate a
un progetto sono di solito molto costose, diviene quasi indispensabile avere a disposizione
uno strumento di indagine per verificare le temporizzazioni di un sistema. Uno degli strumenti
piu' efficaci a questo scopo e', come si vedra' in seguito, la simulazione.
E' abbastanza probabile che chi si occupa di progettazione di circuiti sequenziali con
parti standard MSI abbia poche occasioni di utilizzare i metodi classici; egli si rivolgera'
piuttosto a linguaggi del tipo di quello illustrato al capitolo X. Al contrario chi si occupa del
progetto di parti MSI sara' costretto ad utilizzare i metodi classici, considerando anche che, in
relazione al gran numero di elementi che dovranno poi essere prodotti, il progetto minimo
assume grande importanza.
La parte finale di questo capitolo sara' poi dedicata a una breve introduzione ai problemi
del "testing" dei circuiti. Per evidenziare infatti eventuali malfunzionamenti di un circuito LSI
o MSI e' necessario mettere a punto delle configurazioni di ingresso tali che in uscita appaia
l'effetto del malfunzionamento stesso. Cio' e' vero in particolare per i circuiti LSI nei quali il
numero dei terminali di uscita e' piccolo rispetto al numero delle connessioni interne tra i gate.
C'e' da notare tuttavia che, specie per circuiti sequenziali complessi, l'individuazione delle
sequenze di test puo' essere un processo molto difficoltoso. Per i circuiti sequenziali infatti
non esiste alcuno schema completamente automatico per la generazione dei test; si puo' anzi
affermare che oggi la difficolta' di verifica del circuito e' uno dei maggiori, se non il maggior
ostacolo, all'aumento della densita' di integrazione e della complessita' del singolo integrato.
11.2) Definizioni.
Si definisce circuito integrato un circuito, montato in un unico contenitore, nel quale gli
elementi attivi e passivi sono fabbricati a partire da un unico substrato di materiale semi-
conduttore. Piu' difficile e' definire la complessita' di un circuito integrato, cioe' dove termina
la categoria dei circuiti integrati ordinari ed inizia quella dei circuiti MSI e LSI. Il diagramma
di fig. 11.2.1 puo' aiutare ad inquadrare la questione.
elementi
discreti
Dispositivi standard Memorie
Dispositivi
custom
figura 11.2.1
A stretto rigore il termine circuito integrato comprende anche gli elementi LSI e MSI.
Tuttavia nell'uso comune con circuiti integrati (detti anche elementi SSI - small scale
252
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
integration) si intendono quei dispositivi con un basso numero di gate o di flip-flop in cui tutti
gli ingressi e le uscite degli elementi sono disponibili.
Piu' difficile e' fissare un confine tra gli elementi MSI (medium scale integration) e
quelli LSI (large scale integration); usualmente gli elementi MSI comprendono piccoli
sottosistemi montati in un unico involucro, come ad esempio contatori, decodificatori, circuiti
per la verifica della parita' ecc. Sistemi piu' complessi, ad esempio parti non trascurabili di un
calcolatore, quali sommatori, sezioni di memoria, unita' aritmetiche complete o addirittura
unita' centrali di calcolo, montati in un unico involucro sono di solito considerati elementi
LSI.
Una distinzione piu' importante che non quella tra elementi MSI e LSI e' quella tra
elementi integrati standard e elementi integrati "custom". Dalla fig. 11.2.1 si vede che gli
elementi standard contengono mediamente meno gate che i dispositivi "custom".
Qualsiasi circuito che un costruttore consideri potenzialmente redditizio sara' costruito e
distribuito come elemento standard, mentre i circuiti che via via perdono la loro redditivita'
vengono scartati. Gli elementi che divengono popolari vengono poi copiati dagli altri
costruttori. Non bisogna considerare tale fatto negativo o illecito, in quanto qualsiasi
produttore di apparecchiature sara' sempre riluttante ad adottare elementi LSI e MSI a meno
che non vi sia piu' di una fonte di approvvigionamento. La tendenza attuale e' quindi quella
che viaggia verso una standardizzazione sempre piu' larga.
Gli elementi standard MSI comprendono decodificatori binari e BCD, contatori binari e
decimali, registri a scorrimento, comparatori, generatori di parita', ecc. La maggior parte delle
realizzazioni LSI comprendono invece memorie RAM e ROM.
Si ricorre all'uso di elementi "custom" solo quando la realizzazione con elementi
standard non appare conveniente. E' necessario in tal caso fornire al fabbricante una qualche
descrizione del circuito. Alcuni fabbricanti accettano descrizioni in termini di diagramma a
blocchi, ma il problema potrebbe essere semplificato sia per il committente che per il fabbri-
cante adottando qualche forma di linguaggio atto alla descrizione di sistemi a larga scala del
tipo di quello illustrato al capitolo X.
253
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
ESEMPIO 1
Si voglia progettare un circuito in grado di confrontare due numeri binari da 8 bit A e B.
Le due uscite Z2Z1 devono assumere valore 10 se A > B, 11 se A = B o 01 se A < B. Siano
disponibili come parti standard MSI comparatori da 4 bit. Si indichino con A2 e B2 i due
numeri binari costruiti con i quattro bit piu' significativi di A e B, mentre A1 e B1 siano quelli
costruiti con i quattro bit meno significativi. Gli 8 bit di A2 e B2 possono essere usati come
ingressi di un comparatore MSI da 4 bit. Le corrispondenti uscite siano f1 e f2 , mentre con g1
e g2 verranno indicate le uscite del comparatore cui vengono applicati A1 e B1.
Il significato delle uscite dei due comparatori e le tavole necessarie per il progetto del
comparatore a 8 bit sono riportati in fig. 11.3.1.
f2 f1 Significato g2 g1 Significato
0 0 --- 0 0 ---
0 1 A2 < B2 0 1 A1 < B1
1 1 A2 = B2 1 1 A1 = B1
1 0 A 2 > B2 1 0 A1 > B1
f 2f 1 A <B A =B A >B
2 2 2 2 2 2
g2 g1 00 01 11 10
figura 11.3.1
E' evidente che l'unica operazione necessaria e' quella di costruire le uscite Z2Z1 in
funzione di f2 f1 e g2 g1 come illustrato nella mappa di Karnaugh di fig. 11.3.2.
f f
2 1
g g
2 1 00 01 11 10
01 --- 01 01 10
11 --- 01 11 10
10 --- 01 10 10
Z2 Z1
figura 11.3.2
In genere per progettare un circuito e' necessario prendere in considerazione i singoli bit;
in questo caso tuttavia cio' non e' necessario in quanto, come illustrato in fig. 11.3.1, la
relazione tra A e B e' completamente definita dalle relazioni tra i due insiemi separati di
254
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
quattro bit. Pertanto per ottenere una rappresentazione sotto forma di mappa di Karnaugh
delle uscite Z2 e Z1 e' sufficiente rimpiazzare nella tabella di fig. 11.3.1 le relazioni tra A e B
con la loro forma codificata. A partire dalla mappa di Karnaugh cosi' ottenuta, la realizzazione
minima e' allora:
Z1 f2 f1 . g 1
Z2 f1 f 2 .g 2
A2 f2
Comparatore
Z
B2 da 4 bit f1
g
2
A1
Comparatore Z
g1
B1 da 4 bit
figura 11.3.3
ESEMPIO 2
Si debba progettare per un determinato processo produttivo un semplicissimo con-
trollore di sequenza. Su 25 linee, da Z0 a Z24, debbono comparire sequenzialmente dei segnali
a livelli in modo che una e una sola delle linee vada a 1 a ciascun periodo di clock. La
sequenza di controllo deve inoltre essere ripetitiva, di modo che Z0 vada a 1 immediatamente
dopo Z24. Sono disponibili dei contatori da 4 bit e dei decoder da 4 a 16 linee.
Il progetto deve evidentemente venir impostato attorno ai contatori da 4 bit, dotati di un
ingresso di clock e di un ingresso di reset. Le quattro uscite siano C8, C4, C2 e C1; il contatore
venga azzerato quando l'ingresso di reset viene portato a 1. Il reset sia sincrono, cioe'
l'azzeramento avvenga in coincidenza con il successivo impulso di clock.
Una sequenza di lunghezza 16 puo' venir generata molto facilmente connettendo le
uscite di un contatore esadecimale agli ingressi di un decoder. Per questi ultimi e' molto fre-
quente che l'uscita eccitata vada a zero mentre le altre rimangono a 1; si indicheranno pertanto
tali uscite con d 0 ,d 1 ,....,d 15.
255
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
Per contare fino a 24 e' necessario aggiungere un flip-flop la cui uscita y sara' il bit piu'
significativo del conteggio. La tavola di stato di questo flip-flop e' riportata in fig. 11.3.4.
Ogni volta che il conteggio arriva a 15 (d 15 = 0) con il successivo impulso di clock il flip-flop
y passa a 1, mentre il contatore viene resettato a zero.
Il 24-esimo impulso di clock pone evidentemente d 8 = 1 mentre il 25-esimo azzera y,
come illustrato in fig.11.3.4 nella casella d 8 =y=1; contemporaneamente viene azzerato il
contatore.
d8 d15
y 00 01 11 10
0 0 1 --- 0
1 1 --- --- 0
stato futuro
figura 11.3.4
Sy d 15 Ry d8
mentre il contatore, che si azzera comunque dopo che il conteggio ha raggiunto il 15, verra'
resettato semplicemente connettendo il suo ingresso R di reset alla funzione d 8 .y .
I primi 16 segnali di controllo sono dati da:
Z0 d 0 .y d0 y
Z1 d1 .y d 1 y
..................................
Z15 d 15 .y d 15 y
256
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
sperare di riuscire a realizzare uno specifico progetto realizzando una sequenza di controllo
che descriva elementi a media scala di integrazione.
Clock
Reset C8 _
d_0
C4 d1 Z0
_
CONTATORE C2 DECODER d
8 Z1
C1 _
d15
Z8
Z15
S y
_ Z16
R y
Z24
figura 11.3.5
C'e' tuttavia da tener presente che il numero di terminali di ciascun elemento MSI e'
limitato. Ora, poiche' ogni flip-flop di un registro richiede al minimo 2 e possibilmente 4
collegamenti di input/output, ne consegue che in un contenitore da quattordici piedini po-
tranno trovar posto da 2 a 5 flip-flop. Pertanto registri di una certa dimensione e per esten-
sione subroutine logiche combinatorie di tipo vettoriale non possono essere implementate
come parti singole.
Da tutto cio' ovviamente non deriva che i sistemi a larga scala non possano essere
formulati in termini di sequenza di controllo o che non sia opportuno utilizzare, per quanto
possibile, parti MSI. Semplicemente le realizzazioni MSI risultano di solito molto meno ele-
ganti di quanto si sarebbe potuto sperare. In sostanza esse consisteranno in poche parti MSI
interconnesse da un gran numero di gate individuali.
Nell'esempio che segue si formulera' una sequenza di controllo in modo che la rea-
lizzazione finale utilizzi il piu' possibile parti standard MSI.
ESEMPIO 3
Si voglia sviluppare un'interfaccia tra un calcolatore e una stampante. Le informazioni
sono trasmesse in parallelo su sei linee, individuate dal vettore X. Ogni combinazione
rappresenta un carattere da stampare con l'eccezione di 6 il cui apparire fa si' che venga
eseguito un ritorno carrello e un avanzamento di riga.
257
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
Come illustrato in fig. 11.3.6, l'interfaccia deve generare un segnale sulla linea indicata
con ready ogni volta che e' pronta a ricevere un carattere, mentre ogni volta che un carattere e'
pronto in X il calcolatore fornira' il segnale read.
Nel progetto dovra' essere incluso un sincronizzatore che generi il segnale sread, in
concomitanza con il clock e della sua stessa durata, ogni volta che sulla linea read compare
un segnale.
X Z0
cr Z1
ready
read
sincronizzatore COUNT(10)
Z
sread 64
clock
figura 11.3.6
Le uscite verso la stampante consistono in 64 linee, individuate dal vettore Z; sulla linea
Zk comparira' un impulso di durata pari a quello di clock ogni volta che all'ingresso X viene
applicato in numerazione binaria il numero k. In particolare poi il segnale della linea Z0 fara'
si' che venga eseguito un ritorno carrello e un avanzamento riga.
Dopo l'inizio della stampa di un carattere l'interfaccia dovra' attendere un tempo pari a
16 msec. prima di generare il successivo segnale di ready, mentre nel caso di un ritorno
carrello l'attesa dovra' essere di un secondo.
Si voglia infine realizzare l'interfaccia con parti standard MSI.
Soluzione
Si supponga che come parti standard siano disponibili decoders da 4 bit, mentre non
siano disponibili quelli da 6 bit.
Un efficiente metodo per temporizzare l'attesa prima di generare il segnale ready
richiede l'uso di un contatore; se si usa un clock relativamente lento da 1 kHz, un contatore da
4 bit terminera' il suo conteggio in 16 msec., mentre uno da 10 bit terminera' il suo ciclo in
poco piu' di un secondo, che e' l'intervallo di tempo da far seguire ad un ritorno carrello. Si
supponga che un contatore da 10 bit sia disponibile come parte MSI standard. In fig. 11.3.6
tale parte e' identificata con COUNT mentre cr e' un flip-flop che viene posizionato a 1 in
presenza di un ritorno carrello.
Prima di tentare di costruire un diagramma logico a blocchi per l'unita' di interfaccia, e'
necessario darne una formulazione quale sequenza di controllo.
Si tenga presente che il vettore di uscita Z deve coincidere con 64 in ogni istante,
eccetto che per un periodo di clock in corrispondenza ad ogni carattere ricevuto. Durante tale
periodo una e una sola linea d'uscita deve essere posta a 1. Il controllore di sequenza quindi
258
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
presentera' un segnale di nome typ, della durata di un periodo di clock, quando apparira' tale
uscita. L'uscita z viene pertanto definita preliminarmente con :
1. COUNT 10 ; cr 0
sread .2 sread.1
4
2. cr X0 .X1. DECODE /X 0 ; COUNT INC COUNT ; typ 1
4. ready 1
1
il contatore viene incrementato sia al passo 2. che al passo 3. finche' gli ultimi 4 bit di
COUNT non si azzerano oppure, se cr=1, finche' tutti i 10 bit non sono contemporaneamente
nulli. Solo successivamente, al passo 4., viene generato il segnale ready ed il controllo viene
restituito al passo 2. in attesa del prossimo carattere.
Uno schema semplificato sia del controllore di sequenza che della parte di memo-
rizzazione dei dati e logica e' riportata in fig. 11.3.7.
259
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
(DECODE( 4 /X))
0
X5 Z0
X4 Z1
X3
Decoder
Gates di
X2 da 4 bit
combinazione
X1 con gli
X0 ingressi
X1 e X0
Z 63
typ =1
_____
COUNT (10) contatore da 10 bit
reset
0 5 6 9
_ _
4
X 0 X 1DECODE( / X)
0
J Q
T
K cr
Clock
sread D Q D Q
T
2 T
3
D Q
T
1
ready
Q D
T
4
figura 11.3.7
Sebbene l'uso di contatori MSI e di decoder da 4 bit permetta una significativa riduzione
del numero di interconnessioni richiesto, puo' destare qualche perplessita' il numero di gate
individuali che rimangono nella rete logica. Tale situazione e' tuttavia tipica di tutti quei
sistemi che hanno un elevato numero di ingressi e di uscite.
260
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
A e B sono due costanti che dipendono dalla particolare tecnologia impiegata e che
vanno via via diminuendo nel tempo. L'unita' di misura normalmente adottata e' il migliaio di
dollari.
Il costo totale di produzione di n parti puo' pertanto essere espresso in via approssimata
dell'espressione:
dove C + D.g e' un costo associato con ciascuna parte prodotta che copre i costi del materiale,
del lavoro, di esecuzione dei test e gli imprevisti.
Per un circuito LSI specializzato, il cui volume di produzione e' al massimo di alcune
migliaia di pezzi, il costo di progetto e' il termine preponderante. Al contrario, per una parte
standard MSI, il cui volume di produzione e' di decine e decine di migliaia di pezzi, il costo di
progetto diviene una parte trascurabile del costo totale di un singolo esemplare. Il costo di una
parte standard e' pertanto:
E' forse opportuno a questo punto approfondire quanto esposto attraverso un esempio.
ESEMPIO
Si supponga che un progettista abbia sviluppato una logica combinatoria composta da
85 gate.
Si supponga inoltre che vi siano due possibili approcci per realizzare il progetto. Il
primo faccia ricorso ad una parte MSI standard da 90 gate molto simile alla rete logica voluta
e che costi K dollari per elemento. Sia inoltre necessaria una rete speciale da 30 gate per
realizzare l'interconnessione con la porzione utilizzabile del dispositivo MSI in modo da ot-
tenere quanto desiderato. In tale situazione e' abbastanza logico chiedersi se il dispositivo da
costruire non sia realizzabile con maggior economia utilizzando un circuito integrato di tipo
"custom".
Si supponga infine che il costo dei gate individuali sia di 0.05 dollari/gate e che si
debbano realizzare m esemplari del circuito.
Soluzione
Il costo dei componenti per n esemplari di una rete ibrida e':
261
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
Nel caso di una realizzazione totalmente "custom" la (11.4.1) si riduce per m esemplari
a:
½±-¬± ¼· ·²¬»®½±²²»--·±²»
½±-¬± ¼»· ½±³°±²»²¬·
øµõïòë÷ò³
®»¿´·¦¦¿¦·±²» ½«-¬±³
°õÏò³
³
° °
ÕõÉõïòëóÏ ÕõïòëóÏ
figura 11.4.1
Risulta evidente che la realizzazione "custom" e' conveniente solo per volumi produttivi
molto elevati, mentre la realizzazione ibrida va utilizzata solo per volumi produttivi bassi. Il
punto di incrocio e' determinato dal costo di interconnessione, che nel processo totalmente
"custom" non ha alcun peso.
Si supponga ad esempio che un particolare produttore di semiconduttori quoti la
realizzazione "custom" 2000 dollari piu' 2 dollari per parte prodotta. Si supponga inoltre che
questo stesso produttore possa fornire parti MSI standard a 2 dollari a esemplare (K = 2 dol-
lari). Il costo di interconnessione per la realizzazione ibrida sia poi di 1.5 dollari ad esemplare.
In tali condizioni l'approccio "custom" sara' preferibile per livelli produttivi in cui m
soddisfa la diseguaglianza:
2000 + 2.m < 5.m
cioe' per
m > 667
L'esempio che si e' preso in considerazione si riferisce ovviamente ad una situazione
estremamente semplice; d'altra parte puo' servire come base per l'analisi di casi piu' realistici.
262
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
263
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
Il costo incrementale associato ad ogni ROM prodotta e' funzione essenzialmente del
costo dell'involucro e del costo di connessione tra i terminali del circuito e i piedini
dell'involucro. Questo costo e' approssimativamente proporzionale al numero totale di piedini
e pertanto vale:
Non si tentera' in questa sede di dare dei valori alle sei costanti delle espressioni che
precedono, in quanto esse sono troppo influenzate dall'evolvere della tecnologia. Tuttavia
queste espressioni possono essere utilmente impiegate dal progettista per decidere quando una
ROM e' conveniente per una data applicazione, stimando, quando necessario, dai listini prezzi
tali costanti .
Le ROM sono normalmente disponibili in un certo numero di configurazioni standard.
Alcuni esempi possono essere le dimensioni 16 x 16, 256 x 16, 512 x 8, ma la lista potrebbe
essere molto piu' grande ed in pratica una memoria si puo' ottenere come parte standard in
qualsiasi configurazione in cui il numero delle parole e il numero di bit per parola (detto
anche parallellismo) siano potenze di 2.
Se una ROM standard puo' essere adattata ad una data applicazione, gran parte del costo
del passo 1 puo' essere evitato, in quanto tale costo puo' essere distribuito sull'elevatissimo
numero di utilizzatori della medesima configurazione circuitale.
Il costo del passo 2 e il costo incrementale devono invece essere sostenuti dall'utente
individuale. Se sono necessarie p copie identiche di una particolare ROM, il costo unitario C
sara' allora:
D E. 2 n.b
C F. n b
p
E' interessante notare che il costo del decodificatore degli indirizzi, parte non tra-
scurabile del costo del passo 1, non compare in quest'ultima espressione.
Per valori di p molto piccoli il progettista dovra' mettere a confronto il costo di ROM a
maschera con quello di realizzazione di una rete di circuiti integrati SSI e con quello di una
ROM programmabile. E' evidente che si devono attentamente considerare anche i costi degli
zoccoli, talvolta superiori addirittura a quello degli integrati, dei circuiti stampati e i costi di
assemblaggio.
L'utilizzo di una ROM permette comunque di evitare un gran numero di connessioni. La
metallizzazione finale infatti compie tale funzione, in una maniera forse brutale, ma
sicuramente sistematica ed efficace. Sfortunatamente quando si abbia a che fare con funzioni a
singola uscita il punto di incrocio tra i vari tipi di realizzazione si pone a valori di p molto
elevati.
L'uso piu' comune di ROM con alti valori di parallellismo si ha in unita' di controllo
microprogrammate. In tale applicazione infatti per ogni indirizzo e' necessario un numero di
bit sufficiente a specificare l'origine e la destinazione di un trasferimento tra registri e
l'indirizzo della successiva istruzione. Un numero di bit particolarmente alto e' richiesto
quando si vuol ottenere una notevole flessibilita', utilizzando salti condizionati. In queste
264
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
particolari condizioni l'uso di una ROM puo' essere conveniente anche quando p sia uguale a
1.
11.5) La simulazione.
Tutte le volte che l'implementazione di un sistema digitale include una parte MSI o LSI
di tipo "custom", il sistema deve operare correttamente fin dalla prima volta. Non e' infatti
possibile pensare di apportare una serie di modifiche al progetto del circuito o di costruire un
prototipo da sottoporre a test. Ogni modifica al progetto del circuito richiede perlomeno la
sostituzione di una costosa maschera di diffusione o di metallizzazione e la fabbricazione di
qualsiasi parte nuova puo' comportare ritardi di giorni o addirittura di settimane. Il
tradizionale progetto a prova e errore non e' pertanto praticabile e porterebbe di sicuro ad una
rapida bancarotta la compagnia che lo praticasse.
Poiche' gli errori di progetto sono inevitabili, e' necessario dotarsi di metodi per
verificare un sistema prima che questo venga costruito. La risposta sta nel ricorso alla simula-
zione. Nel presente paragrafo verranno dati dei cenni sui problemi connessi alla simulazione
di circuiti sequenziali. E' opportuno rilevare infatti che la necessita' di simulare logiche
puramente combinatorie e' molto scarsa e si limita il piu' delle volte al calcolo dei valori
funzionali per tutte le possibili combinazioni degli ingressi. Vi sono parecchi modi di
affrontare la simulazione dei circuiti sequenziali. Il metodo che si sceglie e' funzione del
livello di dettaglio con cui si vuol conoscere il funzionamento del circuito. In termini generali
si puo' dire che quanto maggiore e' il livello di dettaglio o la precisione della simulazione,
tanto maggiore sara' il tempo di calcolo. Tale parametro assume un notevole interesse quando
si vogliono simulare reti che contengono un numero di gate superiore al centinaio.
Esistono sostanzialmente quattro diversi modi per affrontare la simulazione, ciascuno
con il suo livello di dettaglio.
In fig. 11.5.1 e' riportato un grafico qualitativo del contenuto informativo che puo' essere
ottenuto in funzione del tempo di calcolo per ciascun tipo di simulazione.
½±²¬»²«¬±
·²º±®³¿¬·ª±
figura 11.5.1
265
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
266
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
X0 Z0
Gate
1
Meccanismo Xn Matrice
logica di 0
ritardo soglia di
connessione Zm
Gate
Modello di gate
(a)
(b)
Meccanismo di ritardo
(c)
figura 11.5.2
Un possibile modello per il singolo gate, che pur non essendo particolarmente com-
plicato, fornisce tuttavia dei risultati apprezzabili verra' ora descritto a scopo esemplificativo.
Esso richiede tre passi di calcolo durante ciascuna iterazione. Durante il primo passo viene
calcolata la funzione logica specificata per il gate in corrispondenza al valore attuale degli
ingressi. Nel secondo passo viene usato un opportuno modello di ritardo, mentre nel terzo
passo viene calcolato il nuovo valore dell'uscita.
Si ricordi che il ritardo e il tempo di salita di qualsiasi circuito reale e' influenzato da un
certo numero di costanti di tempo. Nel modello che si sta considerando, e che, come si e'
detto, e' particolarmente semplice, il tempo di salita viene completamente trascurato. Cio'
corrisponde a dire che l'uscita del gate passa da 0 a 1 e viceversa in un'unica iterazione. Si
suppone inoltre che il ritardo sia controllato da un'unica costante di tempo, come avviene ad
esempio per il modello di fig. 11.5.2 (c), in cui e' previsto un condensatore connesso tra base
del transistore e massa.
Una discreta approssimazione di questo modo di funzionamento, che puo' essere
considerato un'integrazione non lineare, e' il meccanismo di conteggio avanti-indietro con
saturazione illustrato in fig. 11.5.3.
n n+1
y S S
0 S
min
Smin
S n+1 z
0 >Smin -1 n+1
S <0 0
1 <Smax +1 n+1
S >0 1
1 Smax S
max
figura 11.5.3
267
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
Smin e Smax sono rispettivamente due interi di piccolo valore, l'uno negativo e l'altro
positivo. L'effetto combinato del conteggio di ritardo e della soglia sull'uscita puo' essere
spiegato come segue. Se la funzione logica y e' all'iterazione n, per gli ingressi correnti, zero il
conteggio S viene diminuito , mentre se e' al valore 1 viene incrementato. Come e' specificato
nella fig. 11.5.3 il conteggio S non puo' superare Smax o assumere valori inferiori a Smin.
Per quanto riguarda l'elemento a soglia presente in uscita, esso opera in modo che
quest'ultima e' 0 se S e' minore di zero, 1 in caso contrario.
Si supponga da esempio che S sia inizialmente saturato a Smin e di conseguenza che
luscita z sia 0. Quando y passa a 1 saranno necessarie ancora Smin iterazioni prima che z
commuti. Un ragionamento analogo si puo' condurre a partire da Smax.
Smin e Smax rappresentano quindi i valori nominali del ritardo a partire dai due livelli
logici dell'uscita, espressi in numero di passi di iterazione.
Il modello di gate realizzato nel modo appena illustrato possiede parecchie tra le piu'
importanti proprieta' di un gate reale. Ad esempio, gli impulsi molto stretti vengono cancellati
dal circuito. Il suo principale vantaggio e' la semplicita' e l'efficienza; puo' infatti essere
implementato su macchine di piccole dimensioni con aritmetica in virgola fissa operante su
parole da 1 byte e non richiede moltiplicazioni e/o divisioni.
Ciascuna iterazione operante sull'intera rete si puo' ritenere caratterizzata dal diagramma
di flusso di fig. 11.5.4. E' importante osservare che ciascun passo deve essere terminato per
ciascun gate prima che si possa passare al passo successivo. Pertanto tutti gli ingressi di tutti i
gate devono rimanere inalterati finche' tutte le uscite non sono state ricalcolate. I gate quindi
possono essere presi in considerazione in un ordine qualsiasi senza tenere in alcun conto le
interconnessioni della rete stessa.
Dopo un certo numero K di iterazioni il programma attiva una routine di supervisione
che opera la variazione degli ingressi x1 ...... xn ed esegue tutta una serie di operazioni utili ai
fini informativi.
Si tenga tuttavia presente che la simulazione in modalita' asincrona puo' essere af-
frontata in molti modi. Quanto e' stato descritto e' solamente un tentativo di illustrare come
tale simulazione possa essere condotta anche usando un modello di gate estremamente sem-
plice.
Aggiorna i
contatori di ritardo
Determina le
nuove uscite
no
i=k?
si
figura 11.5.4
268
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
A 0
1
B
0
Si assuma che inizialmente sia S = Smin. Il valore di S inizia a cambiare quando A passa
a 1 all'iterazione iniziale. L'uscita commutera' invece all'iterazione 3 come illustrato in fig.
11.5.5, mentre S continuera' ad aumentare fino a giungere alla saturazione all'iterazione 5. Si
noti che la variazione dell'uscita non avra' alcun effetto su alcun altro gate della rete fino alla
quarta iterazione. All'ottava iterazione l'impulso stretto presente all'ingresso B inizia a farsi
sentire. E' interessante notare che il corrispondente impulso di uscita e' piu' stretto di quello di
ingresso, cosa che nella realta' avviene normalmente per impulsi piu' stretti che non due volte
il tempo di ritardo di un gate.
iterazione 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
S -3 -2 -1 0 1 2 2 2 1 0 -1 0 1 2 2 2 2 2 2
figura 11.5.5
269
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
guasti. I segnali possono evidentemente essere introdotti nella rete solamente attraverso le
linee di ingresso x1, .... ,x10.
Si supponga per semplicita' che la rete di fig. 11.6.1 sia puramente combinatoria,
rappresentabile cioe' con quattro funzioni booleane da 10 variabili. Il modo piu' completo per
verificare la correttezza delle uscite sarebbe quello di applicare alla rete tutte le 1024 possibili
configurazioni degli ingressi. Definendo come singolo test l'operazione consistente
nell'applicare una particolare combinazione all'ingresso e verificare la corrispondente uscita,
sarebbero pertanto necessari 1024 test.
X1 Z1
X2 RETE LOGICA
Z2
da Z3
100 gates Z4
X10
figura 11.6.1
Si supponga ora che in un qualche modo sia stato possibile determinare che nella rete di
fig. 11.6.1 non si possano verificare piu' di 500 guasti diversi. Poiche' la rete e' combinatoria,
per ogni possibile guasto e' determinabile una configurazione di ingresso che lo mette in
evidenza. Non dovrebbero pertanto essere necessari piu' di 500 test per verificare
completamente il circuito. C'e' inoltre da dire che una configurazione di ingresso e' di solito in
grado di mettere in evidenza non un solo guasto, ma un'intera classe e quindi il numero di test
strettamente necessari dovrebbe essere considerevolmente inferiore a 500.
Varie metodologie sono state messe a punto per trovare, sia pure in maniera appros-
simata, l'insieme minimo dei test necessari per la verifica completa di una rete combinatoria
øö÷ò
Uno dei metodi migliori a tutt'oggi conosciuto e' l'algoritmo D sviluppato da J.P.Roth. Non
si ritiene opportuno presentare dettagliatamente il metodo in questa sede. Per maggiori
chiarimenti si rimanda il lettore a øöö÷
ESEMPIO
Si supponga che il gate AND piu' a sinistra di fig. 11.6.2 abbia l'ingresso B fissato a 0 a
causa di un guasto (Stuck at zero, SA0). L'uscita di tale gate sara' quindi in ogni condizione 0.
L'uscita dello stesso gate in una rete priva di guasti sarebbe 1 solamente per A = B = 1.
Pertanto A e B dovranno essere uguali a 1 in ogni test che voglia mettere in luce questo
guasto. Assumendo quindi A = B = 1, si fissi ad un valore indeterminato, rappresentato con X,
l'uscita del gate soggetto al guasto, indicando in tal modo che il valore in tale punto differisce
nella rete difettosa e in quella priva di guasti.
270
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
1
A
B sa0
1
C 0 z
D 1
figura 11.6.2
E' necessario ora scegliere per C e D dei valori che permettono la propagazione del
valore indeterminato all'uscita. Usando la logica a tre valori introdotta al capitolo IX si vede
che l'uscita del gate NOR sara' indeterminata solo se C = 0 e che l'uscita z del circuito sara'
indeterminata solo se D = 1.
Si e' in tal modo individuata la configurazione di test per il guasto preso in consi-
derazione. Si noti tuttavia che la stessa configurazione di test puo' mettere in evidenza anche i
seguenti guasti:
Nell'esempio considerato sono stati presi in esame solo guasti il cui modello puo' essere
realizzato fissando un ingresso o un'uscita a uno dei due livelli logici (stack at ...). E' questo
che in pratica ancor oggi si fa. In piu' si suppone nello sviluppo di un set di configurazioni di
test che non vi sia mai piu' di un guasto al medesimo tempo. Quest'ultima assunzione puo' in
parte essere giustificata dalle seguenti considerazioni:
1) L'insieme completo dei guasti multipli e' comunque meno probabile di un parti-
colare guasto singolo.
2) Massicci guasti multipli derivanti da problemi nel processo di fabbricazione
possono venir facilmente rivelati da un qualsiasi insieme di configurazioni di
test.
Tuttavia la piu' convincente giustificazione dell'ipotesi di guasto singolo e' che questa e'
la piu' semplice e forse l'unica maniera di procedere. Infatti in un circuito che puo' avere 500
guasti singoli vi sono 2500 possibilita' di avere un guasto multiplo e quindi l'enumerazione
completa non e' praticabile.
Ancora piu' complessa e' la situazione quando si prendono in considerazione reti
sequenziali. Non e' possibile infatti provare tutte le combinazioni di ingresso realizzabili, in
quanto l'uscita non e' solo funzione dell'ingresso, ma anche dello stato e per condurre un
circuito sequenziale in un particolare stato puo' essere necessaria una sequenza anche molto
lunga di ingressi. Al giorno d'oggi ancora non e' stata determinata una procedura algoritmica
per calcolare le sequenze ottime di test per un circuito sequenziale. Il problema e' molto
complesso e molto probabilmente il miglior approccio e' quello della simulazione interattiva.
Le sequenze di ingresso potrebbero essere suggerite dal progettista sulla base della sua
completa conoscenza del funzionamento del circuito. La rete priva di guasti e quelle con
271
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï
guasti singoli vengono simulate sulla base di queste sequenze; molto probabilmente la prima
sequenza simulata non riuscira' a riportare in uscita l'effetto di tutti i guasti ipotizzati. Il
progettista usera' allora il risultato di questa prima simulazione assieme alla sua conoscenza
del funzionamento per suggerire la continuazione della sequenza. A questo punto la simula-
zione verra' continuata e cosi' via finche' non si sara' ottenuta la copertura di tutti i guasti
singoli o di una percentuale di guasti che possa essere ritenuta accettabile. La simulazione
puo' evidentemente essere sia sincrona che asincrona. Quella sincrona puo' far uso della logica
a tre valori per manipolare livelli indeterminati, quali sono quelli che si possono presentare
nella simulazione di elementi di memoria difettosi.
E' bene infine osservare che all'inizio di un processo di test lo stato iniziale della rete e'
indeterminato. Questa situazione puo' essere simulata assegnando alle uscite degli elementi di
memoria il valore indeterminato X.
272
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
CAPITOLO XII
DISPOSITIVI DI COMMUTAZIONE
12.1) Introduzione.
La validita' di quanto e' stato esposto nei precedenti capitoli non dipende in alcun modo
dal tipo dei dispositivi che vengono impiegati nella realizzazione circuitale. Tuttavia le
caratteristiche reali dei componenti che nella pratica vengono usati, impongono vincoli non
trascurabili al progettista.
E' quindi opportuno prendere in esame i piu' comuni dispositivi, mettendone in evidenza
le principali caratteristiche.
(a) (b)
figura 12.2.1
La velocita' operativa dei rele' e' eccessivamente bassa perche' essi possano essere
utilizzati nelle moderne apparecchiature digitali. Tuttavia essi trovano ancora largo impiego in
numerose apparecchiature periferiche.
Un'interessante proprieta' dei rele' e' la loro natura bilaterale, che da' luogo ad alcuni
particolari problemi, che verranno presi in considerazione nei paragrafi che seguono.
273
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
figura 12.3.1
Ciascun rele' puo' contenere nel suo pacco di contatti contatti di tutti i tre tipi illustrati.
La forma standard di un circuito a rele' e' riportata in fig. 12.3.2. Gli ingressi sono i
segnali applicati alle bobine e il valore logico 1 viene associato alla circolazione di corrente
nella bobina. Nella particolare realizzazione illustrata, cio' viene ottenuto connettendo un
ingresso a terra. La funzione di commutazione viene realizzata interconnettendo
opportunamente i contatti del rele'. Le uscite vengono chiamate trasmissioni Ti, e assumono
valore 1 se sono connesse a terra attraverso la rete, 0 altrimenti.
X1
T1
X2 RETE
T2
DI
CONTATTI
Tm
Xn
figura 12.3.2
Si e' gia' visto in precedenza che nell'analogia di Shannon qualsiasi circuito serie-
parallelo a contatti puo' essere descritto da una funzione di commutazione e, inversamente,
che ad ogni funzione di commutazione puo' esser fatto corrispondere un circuito di commu-
tazione a contatti.
Un'interessante proprieta' dei circuiti a rele' rispetto agli altri tipi di circuito di
commutazione e' che la loro velocita' operativa e' in pratica indipendente dal numero di livelli
della funzione di commutazione; infatti, essendo la connessione tra ingresso e uscita della rete
di contatti realizzata in pratica solo con conduttori, il ritardo di propagazione e' trascurabile e
la velocita' operativa e' in sostanza determinata solo dai tempi di commutazione dei rele'.
La semplificazione dei circuiti a rele' tende a ridurre il numero di contatti; sarebbe
evidentemente desiderabile ridurre anche il numero di rele', ma questo numero e' determinato
dal numero di variabili richiesto e il piu' delle volte tale parametro non e' controllabile. Una
via per ridurre il numero di contatti e' quella di combinare quelli normalmente aperti e quelli
normalmente chiusi in contatti di scambio, ove possibile. Una rappresentazione schematica
del contatto di scambio e' riportata in fig. 12.3.3.
274
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
2
1
3 _
x 2
x
1 x 3
figura 12.3.3
Un altro metodo di semplificazione, peculiare dei circuiti a rele', fa uso del carattere
bilaterale dei loro contatti. Essi infatti conducono in ambedue le direzioni, mentre i circuiti
elettronici normalmente non lo possono fare; talvolta la bilateralita' puo' essere vantaggio-
samente sfruttata.
Si assuma, ad esempio, di voler realizzare la funzione:
T A, B, C, D, E A .B A. C A.B. E A . C . E
La realizzazione diretta da' origine al circuito di fig. 12.3.4 (a); per semplice ispezione
poi il circuito puo' essere portato nella forma di fig. 12.3.4 (b).
Sfruttando poi la bilateralita' del contatto E, ci si puo' ridurre al circuito di fig. 12.3.4
(c), che prende il nome di circuito a ponte o a traliccio.
Il percorso 1-3-4 realizza il termine A.C, quello 1-2-4 il termine A.B, quello 1-2-3-4 il
termine A.C.E ed infine quello 1-3-2-4 il termine A.B.E.
_
A B
_
A C
_ _
A B E
A C E
(a)
_
B 2 _
A B
A
E
_ _
A C 1 A C 4
_ 3
B E
(b) (c)
figura 12.3.4
La domanda che ci si puo' porre a questo punto e' allora come proceda il progetto di un
circuito a rele'. Il modo piu' semplice e' quello di utilizzare le normali tecniche di
275
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
semplificazione per ottenere la forma minima a due livelli. Solo successivamente, con una
combinazione intuitiva di ispezione visuale e manipolazione algebrica, i contatti vengono
eliminati o trasformati in contatti di scambio, non appena cio' sia possibile. Infine va esami-
nato se non sia possibile passare ad una struttura a traliccio.
Come non esiste alcuna procedura sistematica che permetta di individuare la forma
migliore per una funzione di commutazione, cosi' non esiste alcun modo per determinare il
circuito minimo in una realizzazione a rele' o per giudicare se un dato circuito sia minimo. Un
buon progetto a rele' deriva essenzialmente dal grado di esperienza del progettista.
(A,B,C,D)
D
_
D (A,B,C,D)
C D
_ _
C D (A,B,C,D)
B C D
_ _ _
B C D (A,B,C,D)
A B C D
_ _ _ _
A B C D (A,B,C,D)
figura 12.4.1
Qualsiasi funzione simmetrica puo' quindi essere realizzata combinando assieme alcune
di queste uscite e si deve far osservare che quando alcune uscite vengono connesse tra di loro
alcuni contatti diventano ridondanti e possono essere eliminati.
E' evidente che tale discorso non risulta limitato alle funzioni simmetriche di quattro
variabili, ma puo' essere esteso ad un numero di variabili qualsiasi. L'argomento e' stato
affrontato ed esposto in dettaglio øö÷ da parecchi autori.
Un altro speciale tipo di rete che puo' essere facilmente realizzato con rele' e' la struttura
ad albero binario di fig. 12.4.2.
Si noti che la struttura illustrata realizza un selettore di tre variabili; l'estensione ad un
qualsiasi numero di variabili e' immediata.
Marcus M.P. "Switching Circuits for Engineers" Prentice - Hall, Englewood Cliffs, N.J.
øö÷
1962
276
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
_
_ C m
0
B
C m
_ 1
A _
C m
2
B
C m
3
_
_ C m
4
B
C m
5
A _
C m
6
B
C m
7
figura 12.4.2
_
y2 y1 z
_
y y1
A 2
A B
B B y
2
y A
_
2
A B
y
y1 _ 1
B y
1
figura 12.5.1
Si noti che il ritardo introdotto dalla commutazione di un rele' e' di parecchi ordini di
grandezza maggiore del ritardo dei circuiti elettronici ed e' in pratica uguale per tutte le uscite.
277
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
Di conseguenza la commutazione dei contatti dovuta alla transizione degli ingressi sara'
sempre completata prima che un'ulteriore transizione possa avvenire a causa della variazione
delle variabili di stato. Pertanto, a causa di questo ritardo, che si puo' immaginare concentrato
tutto nei loop di reazione, le alee essenziali non sono un problema nei circuiti a rele'.
La tavola di flusso che corrisponde al circuito di fig. 12.5.1 e' riportata in fig. 12.5.2. Le
equazioni di eccitazione e di uscita sono:
y2 A . B B . y2 A . y2
y1 A .B A . y1 B. y1
z y 2 .y1 y 2 .y1
Poiche' le uscite dipendono solo dalla storia delle transizioni di ingresso, la tavola di
stato minima rimane una tavola di Moore e si ha un circuito privo di alee senza alcuna
particolare precauzione.
AB
y1 y2
00 01 11 10 z
00 00 00 10 01 0
01 01 00 11 01 1
11 01 10 11 11 0
10 00 10 10 11 1
figura 12.5.2
278
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
I I
V V
(a) (b)
figura 12.6.1
I circuiti per le due forme base di gate a diodi sono riportati in fig. 12.6.2. Il loro
funzionamento e' intuitivo e la funzione realizzata da ciascuno d'essi dipende dalla logica,
positiva o negativa, con cui operano. E' facile verificare che in logica positiva il primo circuito
realizza la funzione logica AND mentre il secondo realizza quella OR.
Vh Vl
e1 e1
e2 e2
(a) (b)
figura 12.6.2
E' interessante far notare che se i diodi fossero ideali non ci sarebbe alcun limite al
numero di ingressi di ciascun gate ne' alcun limite al numero di altri circuiti analoghi che
potrebbero essere connessi all'uscita di un singolo gate. Invece con diodi reali le cadute ai capi
dei diodi conduttori e le correnti inverse portano ad una continua degradazione dei livelli dei
segnali via via che la complessita' e il numero di stadi in cascata aumentano.
Questo inconveniente della logica a diodi puo' essere superato introducendo degli
opportuni amplificatori, di solito realizzati a transistori. Tali amplificatori lavorano quasi
sempre tra saturazione e interdizione, in modo da assicurare una notevole stabilita' dei livelli
di tensione associati a ciascun stato logico, rendendo nel contempo disponibile una notevole
escursione di tensione in corrispondenza alla commutazione. Alle velocita' di commutazione
piu' elevate tuttavia puo' essere necessario ricorrere ad amplificatori non saturati, per motivi
che verranno illustrati piu' avanti.
Il circuito base dell'invertitore, nel caso di transistori NPN, e' quello di fig. 12.6.3. Si
tenga presente che utilizzando transistori al silicio spesso Rbb viene omessa e V- vale zero.
279
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
V+
Rc
e0
Rb
ei
R bb
VL V-
figura 12.6.3
Per correggere le deficienze di carico di un gate a diodi puo' essere sufficiente collegare
alla sua uscita un invertitore, come mostrato in fig. 12.6.4.
VH V+
Rg Rc
e1 e0
Rb
e2
Rbb
VL V-
figura 12.6.4
IL
figura 12.6.5
Quando l'uscita del primo gate e' a livello basso, cioe' quando il relativo transistore e'
saturato, in esso fluisce, come illustrato in fig. 12.6.5, una corrente di carico IL. Se altri gate
280
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
vengono connessi in parallelo sull'uscita, essi contribuiscono ad aumentare IL. Se tale corrente
supera il limite determinato dalla corrente di base e dal guadagno di corrente del transistore,
quest'ultimo esce di saturazione e la tensione di uscita sale, superando facilmente il livello
logico basso. Anche il numero massimo di ingressi per ciascun gate risulta aumentato con
l'introduzione dell'invertitore; infatti proprio per la presenza del transistore non e' piu' ne-
cessario assicurare che il livello alto di tensione in uscita dal gate a diodi non scenda al di
sotto di un determinato livello, ma e' sufficiente che alla base del transistore venga fornita una
corrente sufficiente a mantenerlo in saturazione. Pertanto la resistenza non infinita dei diodi
polarizzati inversamente pesa molto meno che non nel caso in cui non ci sia in uscita
l'invertitore .
C'e' infine da osservare che l'introduzione di un amplificatore a transistori elimina
completamente la degradazione del segnale che si ha, via via che aumenta il numero degli
stadi in cascata.
ei
V+
t
Rc
e0
Rb ic
ei
R bb
VL V-
t
td ts
tr tf
figura 12.7.1
A partire dall'istante in cui inizia l'impulso di base, vi e' un tempo di ritardo td prima che
la corrente di collettore inizi a salire. Questo ritardo e' determinato essenzialmente dalla
281
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
capacita' totale base-emettitore del transistore, che deve venir caricata ad una tensione
lievemente positiva prima che il transistore possa iniziare a condurre. Dopo l'inizio della
conduzione si ha un tempo di salita finito tr determinato principalmente dalla capacita' di
collettore e dalle caratteristiche intrinseche del transistore.
Sul fronte di discesa dell'impulso di ingresso si ha un primo tempo ts, detto tempo di
restituzione, dovuto sia alla capacita' base-emettitore sia all'accumulo di cariche minoritarie
nello spazio di base. Questo tempo e' forse il piu' importante tra i tempi di commutazione ed e'
comunque notevolmente piu' grande che non td.
Infine vi e' un tempo di discesa finito tf dovuto anch'esso, come il tempo di salita, alla
capacita' di collettore e alle caratteristiche intrinseche del transistore.
Allo scopo di specificare il ritardo cui il segnale e' sottoposto nell'attraversare i gate i
tempi tr e tf sono significativi solo se i corrispondenti tempi del segnale presente all'ingresso
sono trascurabili. E' questo tuttavia un caso abbastanza raro, poiche' i circuiti logici sono
normalmente pilotati da circuiti analoghi e di conseguenza i tempi di salita e di discesa sono
dello stesso ordine di grandezza sia all'ingresso che all'uscita. Essi tuttavia, pur non essendo
completamente significativi, influenzano il valore del tempo di ritardo a seconda di come
questo tempo di ritardo viene misurato. E' necessario quindi specificare i punti delle forme
d'onda di ingresso e di uscita usati per definire i tempi di ritardo stessi.
A questo riguardo e' necessario notare che i transistori usati nei circuiti logici lavorano
normalmente in regime di saturazione. Anche se il segnale di ingresso varia sull'intero campo
di valori ammissibili, solo un piccolo intervallo di questo campo e' quello che determina la
commutazione tra un livello logico e l'altro. Per i principali dispositivi logici tale intervallo si
aggira su 0.1 volt e quindi i tempi di salita e discesa del segnale di uscita saranno totalmente
determinati dai parametri interni del circuito logico a meno che il segnale di ingresso non vari
talmente lentamente da permanere in questo intervallo per tempi notevolmente maggiori dei
tempi di commutazione nominali.
In definitiva i tempi di ritardo di un gate vengono misurati, come e' illustrato in fig.
12.7.2, pilotando l'ingresso con un impulso che abbia tempo di salita e discesa dello stesso
ordine di grandezza di quelli del segnale di uscita ed eseguendo la misura con riferimento a
punti ben specificati, quali ad esempio possono essere i tempi all'emivalore.
ingresso
uscita
t pd0 t
pd1
figura 12.7.2
Le due transizioni di solito non danno luogo a due tempi di ritardo uguali, com'e' logico
aspettarsi dal momento che i fenomeni fisici interessati dalle due commutazioni sono diversi.
282
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî
Per quanto riguarda la notazione per i tempi di ritardo essa purtroppo non e' stan-
dardizzata. La piu' comune indica con tpd0 o con tpd- il ritardo associato al fronte di discesa
dell'uscita, con tpd1 o tpd+ quello associato al fronte positivo. Il tempo di ritardo medio tpd e'
definito come media aritmetica di questi due tempi ed e' quello che piu' comunemente viene
fornito dai costruttori tra i dati caratteristici.
283
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî