Sei sulla pagina 1di 469

Antonio D'Amore

I CIRCUITI DI COMMUTAZIONE
INDICE

CAPITOLO I - SISTEMI DI NUMERAZIONE E CODICI

1.1) Sistema di numerazione decimale. 1


1.2) Sistemi di numerazione a base qualsiasi. 1
1.3) Conversione tra sistemi a base diversa. 3
1.4) Metodi di conversione da binario a decimale. 5
1.5) Aritmetica binaria. 6
1.5.1) Addizione binaria. 6
1.5.2) Sottrazione binaria. 6
1.5.3) Complemento a B e a B-1. 7
1.5.4) Moltiplicazione binaria. 10
1.5.5) Divisione binaria. 10

1.6) I codici. 10

1.7) Codici efficienti. 11

1.8) I codici ridondanti. 12


1.8.1) Probabilita' totale di errore non rivelato. 14
1.8.2) Codice a controllo di parita'. 15
1.8.3) Codici a peso costante. 15
1.8.4) Codici di Hamming. 17

1.9) Codici riflessi. 20

CAPITOLO II - ALGEBRA BOOLEANA


2.1) Introduzione. 23
2.2) Variabili e funzioni. 23

2.3) Funzioni di una variabile. 24

2.4) Funzioni di due variabili. 25


2.4.1) Funzione OR o somma logica. 25
2.4.2) Funzione OR esclusivo o somma modulo 2. 26
2.4.3) Funzione AND o prodotto logico. 27
2.4.4) Funzione NOR. 28
2.4.5) Funzione NAND. 29
2.5) Principio di dualita'. 30

2.6) Termini minimi e termini massimi. 30

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

CAPITOLO III - CIRCUITI COMBINATORI

3.1) Introduzione. 76

3.2) Itinerari e livelli. 77

3.3) Analisi dei circuiti AND-OR-NOT. 79

3.4) Analisi dei circuiti NAND. 80

3.5) Analisi dei circuiti NOR. 83

3.6) La sintesi dei circuiti combinatori. 84

3.7) Sintesi di circuiti AND-OR-NOT. 86

3.8) La decomposizione in sconnessione semplice. 90


3.9) Altre decomposizioni disgiuntive. 97
3.9.1) Decomposizione iterativa. 98
3.9.2) Decomposizione multipla. 100

3.10) Sintesi dei circuiti NAND 105


3.10.1) Sintesi a partire da variabili dirette e negate. 106
3.10.2) Sintesi a partire dalle sole variabili dirette. 108
3.11) La tecnica del bundling. 110
3.12) Sintesi dei circuiti NOR 111

3.13) Esempio di sintesi. 112

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

CAPITOLO IV - CENNI SULLE MACCHINE SEQUENZIALI


4.1) La macchina sequenziale. 129
4.2) Alcune definizioni relative alle macchine sequenziali. 135
4.3) Minimizzazione degli stati di una macchina sequenziale. 136
4.4) Minimizzazione degli stati con il metodo di Ginsburg. 138

CAPITOLO V - I CIRCUITI SEQUENZIALI

5.1) Introduzione ai circuiti sequenziali. 148

5.2) I flip-flop. 149

5.3) Motivi che consigliano la scelta dei circuiti sequenziali. 155

5.4) Considerazioni sul grado di serializzazione, costo e velocita'. 158

5.5) Registri a scorrimento e contatori. 161

5.6) Un modello generale per i circuiti sequenziali. 163

5.7) Funzionamento sincrono e a impulsi del modello fondamentale. 165


5.8) Problemi di temporizzazione e flip-flop master-slave. 168

5.9) Funzionamento asincrono del modello fondamentale. 173

CAPITOLO VI - CIRCUITI SEQUENZIALI ASINCRONI


6.1) Introduzione. 177

6.2) L'analisi. 177


6.3) Transizioni multiple, cicli di instabilita' e corse. 183
6.3.1) Transizioni multiple 183
6.3.2) Cicli di instabilita' 184
6.3.3) Corse 184
6.4) Sintesi dei circuiti sequenziali asincroni. 188

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

CAPITOLO VII - CIRCUITI SEQUENZIALI SINCRONI


7.1) Introduzione. 230

7.2) Analisi dei circuiti sequenziali sincroni. 230

7.3) Procedura di progetto. 233

7.4) Sintesi del diagramma di stato. 234

7.5) Circuiti a memoria finita. 239

7.6) Minimizzazione degli stati. 249

7.7) Codificazione e determinazione delle equazioni di eccitazione. 251

7.8) Partizione degli stati e codificazione. 268

7.9) Conclusioni. 278

CAPITOLO VIII - CIRCUITI SEQUENZIALI AD IMPULSI

8.1) Introduzione. 280

8.2) Circuiti ad impulsi secondo Moore e secondo Mealy. 282


8.3) Procedura di progetto. 284
8.4) I contatori. 292

CAPITOLO IX - ARGOMENTI COMPLEMENTARI

9.1) Introduzione. 295


9.2) Il clock skew. 295

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

CAPITOLO X - SISTEMI DIGITALI A LARGA SCALA


10.1) Introduzione. 314
10.2) Ingresso di controllo del clock. 315
10.3) Estensione della tavola di stato. 317
10.4) Descrizione a programma. 319
10.5) La sintesi. 322

10.6) Operazioni vettoriali. 334

10.7) Funzioni logiche di vettori. 336

10.8) Applicazioni. 341

10.9) Conclusioni. 351

CAPITOLO XI - INTEGRAZIONE A MEDIA E LARGA SCALA

11.1) Introduzione. 352

11.2) Definizioni. 355

11.3) Il progetto con parti MSI standard. 357


11.4) Considerazioni economiche sui circuiti integrati. 366

11.5) La simulazione. 373

11.6) Generazione delle sequenze di test. 380

CAPITOLO XII - DISPOSITIVI DI COMMUTAZIONE

12.1) Introduzione. 385

12.2) Interruttori e rele'. 385


12.3) Caratteristiche basilari dei circuiti a rele'. 386
12.4) Realizzazione a rele' delle funzioni simmetriche. 389

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

12.15) Cenni sulle tecnologie costruttive dei circuiti integrati. 417


12.15.1) Circuiti integrati bipolari. 417
12.15.1.a) I transistori. 417
12.15.1.b) I diodi. 420
12.15.1.c) Capacita'. 421
12.15.1.d) Resistori. 422
12.15.1.e) Suddivisione in isole. 423
12.15.1.f) Processo di fabbricazione. 423
12.15.2) Circuiti integrati unipolari. 425
12.15.2.a) Tecnologia di impianto ionico. 426
12.15.2.b) Processo di fabbricazione. 427

CAPITOLO XIII - LE FAMIGLIE LOGICHE


13.1) La famiglia RTL. 429

13.2) La famiglia DTL. 430

13.3) La famiglia HTL. 431


13.4) La famiglia TTL. 432
13.4.1) La sottofamiglia TTL standard. 432
13.4.2) Caratteristica di trasferimento. 436
13.4.3) Tensioni e correnti di ingresso e di uscita. 438
13.4.4) Altri elementi logici TTL. 442
13.4.5) La sottofamiglia low power TTL. 445
13.4.6) La sottofamiglia high speed TTL. 446
13.4.7) La sottofamiglia TTL Schottky. 447
13.4.8) La sottofamiglia low power Schottky TTL. 451
13.4.9) Conclusioni sulle sottofamiglie TTL. 452

13.5) Problemi di impiego degli elementi logici TTL. 454


13.5.1) Cause di rumore. 454

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

13.10) La famiglia CMOS. 482


13.10.1) Caratteristica di trasferimento. 485
13.10.2) Comportamento al variare della tensione di alimentazione. 486
13.10.3) Immunita' al rumore. 488
13.10.4) Struttura delle porte logiche. 488
13.10.5) Considerazioni generali sull'uso della famiglia CMOS. 489

13.11) Interfacciamento delle famiglie logiche. 490


13.11.1) Interfaccia TTL - DTL. 490
13.11.2) Interfaccia TTL - ECL. 491
13.11.3) Interfacciamento della famiglia CMOS con altre logiche. 493
13.11.4) Pilotaggio di piccoli carichi. 493
13.11.5) Interconnessione con transitori. 495
13.11.6) Spostamento dei livelli di tensione. 498
13.11.7) Interfacce per il pilotaggio di linee. 498
13.11.8) Forme e modalita' operative dei circuiti di trasmissione dati. 500
13.11.9) Effetto delle linee nelle comunicazioni a lunga distanza. 505
13.11.10) Scelta dei trasmettitori e dei ricevitori di linea. 510

CAPITOLO XIV - LE MEMORIE E I MICROPROCESSORI

14.1) Introduzione. 512

14.2) Classificazione delle memorie. 512


14.3) Struttura base di una memoria. 515
14.4) Struttura delle celle delle memorie RAM. 518
14.4.1) Struttura di una cella RAM statica. 518
14.4.2) Struttura di una cella RAM dinamica. 523
14.4.3) Struttura di una memoria RAM dinamica. 524

14.5) Esempio di utilizzazione di memorie ROM. 528

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

APPENDICE A - CALCOLO DI VERITA' E ALGEBRA BOOLEANA


a.1) Introduzione. 571
a.2) I connettivi binari. 575

a.3) Valutazione delle funzioni di verita'. 577

a.4) Proposizioni composte. 579

a.5) Insiemi sufficienti di connettivi. 580

a.6) L'algebra booleana. 582

a.7) Il calcolo di verita' visto come un'algebra booleana. 587

a.8) I teoremi fondamentali dell'algebra booleana. 588

a.9) La teoria degli insiemi come esempio di algebra booleana. 594

APPENDICE B - LOGICHE A SOGLIA


b.1) Relazioni di ordinamento. 602

b.2) Le funzioni "unate". 605

b.3) Generalizzazione circuitale di logiche a resistore-transistore. 610


b.4) Separabilita' lineare. 613
b.5) Condizioni per la separabilita' lineare. 621

b.6) Dispositivi logici magnetici a soglia. 630

b.7) La realizzazione delle funzioni simmetriche con l'uso di


dispositivi a soglia. 632

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.

Pertanto si sono tralasciati volutamente gli eccessivi formalismi, evitando


di riportare quelle dimostrazioni, che, pur essendo di un notevolissimo interesse
teorico, appaiono troppo astratte ed onerose per chi per la prima volta affronta
l'argomento.

Il testo non pretende pertanto di essere ne' rigoroso, ne' completo, ma


semplicemente di dare una visione panoramica di quelle nozioni che devono
entrare a far parte del bagaglio culturale di qualsiasi ingegnere elettronico, anche
se non specialista di elettronica digitale.

Uno scrupolo ha tuttavia obbligato l'autore a presentare in appendice in


maniera formale l'algebra booleana, a differenza di quanto fatto nel secondo
capitolo, dove lo stesso argomento e' stato affrontato senza eccessivo rigore in
maniera quasi intuitiva.

Si e' ritenuto inoltre opportuno riportare in una seconda appendice qualche


nozione sulle logiche a soglia, stante l'interesse che tale argomento attualmente
riveste. Si e' lasciato tuttavia al lettore il compito di approfondire, se necessario,
l'argomento.

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.

Pertanto si sono tralasciati volutamente gli eccessivi formalismi, evitando


di riportare quelle dimostrazioni, che, pur essendo di un notevolissimo interesse
teorico, appaiono troppo astratte ed onerose per chi per la prima volta affronta
l'argomento.

Il testo non pretende pertanto di essere ne' rigoroso, ne' completo, ma


semplicemente di dare una visione panoramica di quelle nozioni che devono
entrare a far parte del bagaglio culturale di qualsiasi ingegnere elettronico, anche
se non specialista di elettronica digitale.

Uno scrupolo ha tuttavia obbligato l'autore a presentare in appendice in


maniera formale l'algebra booleana, a differenza di quanto fatto nel secondo
capitolo, dove lo stesso argomento e' stato affrontato senza eccessivo rigore e in
maniera quasi intuitiva.

Si e' ritenuto inoltre opportuno riportare in una seconda appendice qualche


nozione sulle logiche a soglia, stante l'interesse che tale argomento riveste. Si e'
lasciato tuttavia al lettore il compito di approfondire, se necessario, l'argomento.

I
CAPITOLO I
SISTEMI DI NUMERAZIONE E CODICI
1.1) Sistema di numerazione decimale.
E’ detto sistema di numerazione l’insieme 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

N A n .10 n A n 1.10 n 1 A n 2 .10 n 2 ....... A o .10 0

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.

1.2) Sistemi di numerazione a base qualsiasi.


Nel sistema di numerazione posizionale decimale il numero 10 prende il nome di base
numerica. Tuttavia quanto detto per il sistema decimale e' facilmente estendibile a sistemi di
numerazione posizionale in cui la base non sia 10, ma un numero B qualsiasi.
In tal caso le cifre sono rappresentate da B simboli diversi e vanno da 0 a B-1.
Indicando con ak la generica cifra in k-esima posizione in una stringa, il significato della
stringa stessa e:
N A n .B n A n 1.B n 1 ........ A o .B o

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

1.3) Conversione tra sistemi a base diversa.

a) CONVERSIONE DI NUMERI INTERI.


Il metodo di conversione piu' semplice e' quello che fa ricorso alla successiva divisione
per la base numerica. Si abbia infatti il numero

N A n .B n A n 1.B n 1 ......... A o .Bo

Ad ogni successiva divisione si ottiene un quoziente e un resto e le divisioni vanno


iterate fino ad ottenere un quoziente nullo. La stringa dei resti, letta in ordine inverso a quello
in cui e' stata ottenuta, rappresenta la numerazione posizionale del numero N nella base B.
Infatti dalle divisioni successive si ottiene:

Quoziente Divisore Resto

N A n .B n 1 A n 1.B n 2 ......... A1.B o B Ao


n 2 n 3 o
N A n .B A n 1.B ......... A 2 .B B A1
……………. ….. …..
A n .Bo B An-1
0 B An

La notazione posizionale e' quindi:

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.

Base 2 Base 8 Base 16


Quoziente Resto Quoziente Resto Quoziente Resto

157 1 157 5 157 D


78 0 19 3 9 9
39 1 2 2 0
19 1 0
8 1
4 0
2 0
1 1
0

2
Sistemi di numerazione e codici
Capitolo 2

15710 100111012 15710 2358 15710 9D16

Come detto, la conversione a base 8 e a base 16 si puo' ottenere anche raggruppando


opportunamente le cifre binarie.

10 011 101 1001 1101


2 3 5 9 D

Anche la conversione inversa e' immediata e si ottiene utilizzando la stessa tecnica.

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:

Parte intera Frazione Moltiplicatore


--- A 1.B 1 ..... A n .B n B

A 1 A 2 .B 1 ..... A n .B n 1 B

--- ---------- ---

A n ---------- ---

Quale esempio si voglia convertire in binario il numero decimale 0,6375

Frazione Parte intera


0,6375 . 2 = 1,275 1
0,275 . 2 = 0,550 0
0,550 . 2 = 1,100 1
0,100. 2 = 0,200 0
0,200 . 2 = 0,400 0
0,400 . 2 = 0,800 0
0.800 . 2 = 1,600 1
0.600 . 2 = 1,200 1

Limitandosi quindi a tale numero di cifre significative si ha:

0,637510= 0,101000112

3
Sistemi di numerazione e codici
Capitolo 2

1.4) Metodi di conversione da binario a decimale.


I metodi di conversione esposti al paragrafo precedente sono di applicazione
particolarmente semplice solo nel caso in cui si debba convertire un numero decimale in
un'altra base numerica. E' infatti molto facile eseguire le operazioni descritte per la notevole
familiarita' che si ha di solito con l'aritmetica decimale. Cio' non e' altrettanto vero nel caso di
basi numeriche diverse.
Particolarmente utile e' allora illustrare alcuni metodi di conversione da sistema di
numerazione binario a decimale.
Il metodo piu' ovvio e' quello che prevede l'espansione del numero in potenze di 2,
applicabile a qualunque numero binario.

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

1.5) Aritmetica binaria.


1.5.1) Addizione binaria.
Le regole dell'addizione di due cifre binarie sono le seguenti:

0+0=0
0+1=1
1+0=1
1 + 1 = 102 cioe' 0 con riporto di un'unita' al
rango immediatamente superiore.

1.5.2) Sottrazione binaria.


Le regole della sottrazione di due cifre binarie sono:

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

La sottrazione binaria, come del resto la sottrazione in qualsiasi sistema di


rappresentazione numerico, puo' essere eseguita in modo diverso da quello appena illustrato
qualora i numeri negativi vengano rappresentati in notazione complementata.

1.5.3) Complemento a B e a B-1.


In generale il complemento a B di un numero N di n cifre e' dato da:

CB = Bn - N

Si intende invece complemento a B - 1 la quantita'

CB-1 = Bn - N - 1

Ne risulta allora che:

CB = CB-1 + 1

Questa semplice proprieta' permette di ottenere il complemento a 2 di un numero


binario molto facilmente. E' sufficiente infatti negare ogni bit del numero di partenza e
sommare al risultato 1. Si voglia da esempio complementare a 2 il numero 1 1 0 1. Si ha:

1101 1310
0010 dopo la negazione
0001 somma di un'unita'
______
0 0 1 1 310 = 24 - 1310

Se come rappresentazione dei numeri negativi si adotta la rappresentazione


complementata, l'operazione di sottrazione puo' essere eseguita nel modo che segue. Sia N1 -
N2 la sottrazione da calcolare e siano sia N1 che N2 maggiori di zero. Si sostituisca a - N2 la
sua rappresentazione complementata Bn - N2 e si esegua la somma tra N1 e tale complemento.
Si ottiene:

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

mentre il piu' piccolo numero negativo nella rappresentazione complemento a 2 e':

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.

1.5.4) Moltiplicazione binaria.


Le regole della moltiplicazione binaria sono:

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.

1.5.5) Divisione binaria.


Ha un interesse puramente teorico in quanto vengono eseguite di solito per sottrazioni
successive. Valgono comunque le medesime regole della divisione 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

Infine un codice si dice efficiente se le sue parole hanno lunghezza l = n, ridondante se


l > n, ambiguo se l < n.

1.7) Codici efficienti.


Alcuni codici efficienti sono quelli usati per la rappresentazione di cifre decimali, in cui
ogni cifra viene codificata indipendentemente dalle altre, mantenendosi tuttavia nell'ambito
del sistema di numerazione posizionale decimale.
Poiche' per esprimere una cifra decimale sono necessari 4 bit, ma contemporaneamente
con 4 bit si possono costruire 16 configurazioni diverse, 6 di esse rimangono inutilizzate e
prendono il nome di configurazioni non significative.
Fra i vari codici efficienti si possono citare:

1) CODICE BCD. (BINARY CODED DECIMAL)


Le cifre 0 - 9 decimali sono codificate secondo il sistema di numerazione binario. E'
questo un codice ponderato, cioe' uno di quei codici in cui ad ogni bit si puo' associare un
valore, positivo o negativo, che permette di ricostruire il valore numerico rappresentato da
ciascuna configurazione come somma dei pesi dei bit posti a 1.
Per tale motivo il codice BCD e' detto molto spesso anche codice 8421.

2) CODICE ECCESSO TRE


In esso la codificazione della cifra K (compresa tra 0 e 9) si fa esprimendo nel sistema
di numerazione binario il numero K + 3. Non e' un codice ponderato, ma e'
autocomplementante. Cio' sta ad indicare che ciascuna cifra puo' essere complementata a 9
semplicemente negando i singoli bit.

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

3) CODICE AIKEN O CODICE 2421


E' un codice autocomplementante e ponderato con pesi 2421.

0 0000 5 1011
1 0001 6 1100
2 0010 7 1101
3 0011 8 1110
4 0100 9 1111

1.8) I codici ridondanti.


Come gia' detto, i codici ridondanti usano per la codificazione degli N elementi
dell'insieme [C*] un numero m di bit superiore a quello n strettamente necessario. La
ridondanza cosi' ottenuta permette di mettere in evidenza ed eventualmente correggere gli
errori di trasmissione di un messaggio. La ridondanza si ottiene aggiungendo, secondo una
determinata legge, agli n bit, necessari a codificare senza ambiguita' il messaggio, k bit di
controllo. Il messaggio effettivamente trasmesso contiene allora m = n + k bit. Viene
chiamato ridondanza il rapporto R = m/n = = 1 + k/n.
Delle 2m configurazioni diverse che si possono realizzare con m bit, solo 2n sono al piu'
significative, cioe' parole di codice. Le rimanenti 2m - 2n = 2n .(2k - 1) vengono dette
configurazioni non significative.
Un errore di trasmissione viene rivelato quando trasforma una parola di codice in una
configurazione non significativa; la probabilita' di rivelare un errore e' quindi tanto maggiore
quanto maggiore e' la ridondanza.
E' opportuno a questo punto definire alcune quantita'.

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.

2) Distanza tra due configurazioni C1 e C2 dello stesso codice e' il numero di


posizioni in cui i bit di C1 e C2 differiscono. Ad esempio le due
configurazioni 10111 e 10100 hanno distanza 2.

3) Molteplicita' di un errore e' la distanza tra una configurazione Ct


trasmessa e quella Cr non significativa ricevuta. Si parla quindi di errori
singoli, doppi, tripli, ecc.

4) Distanza minima di Hamming (h) e' la minima distanza fra tutte le


possibili coppie di parole di un codice. Ora gli errori sicuramente
riconoscibili sono quelli che trasformano una parola P in una configurazione
non significativa Cp , ma non quelli che la trasformano in una parola P';
sicuramente individuabili saranno pertanto gli errori di molteplicita'
inferiore a h. I codici con h>1 sono detti rivelatori di errori. Se h e'
abbastanza grande e se si suppone che Cp provenga dalla parola P che si

9
Sistemi di numerazione e codici
Capitolo 2

trova alla minor distanza, allora puo' venir effettuata la correzione


dell'errore. I codici cosi' funzionanti sono detti autocorrettori.

1.8.1) Probabilita' totale di errore non rivelato.


Sia assegnata la probabilita' p, dipendente dalle caratteristiche fisiche del canale
trasmissivo, che in ricezione un bit venga interpretato in modo errato. Supposto che gli errori
siano tutti indipendenti tra loro, la probabilita' che r bit di una parola siano ricevuti in maniera
errata mentre i rimanenti m - r siano corretti, cioe' la probabilita' che una parola P si trasformi
in una configurazione Cr a distanza r da P, e':

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

avendo indicato con P sr il rapporto

Nr
Psr
m
r

tra le parole che distano r da P e tutte le configurazioni che distano r da P.


Ne segue che la probabilita' totale di errore non rivelato e':

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

1.8.2) Codice a controllo di parita'.


Il codice a controllo di parita' si ottiene aggiungendo agli n bit di un codice efficiente un
bit di controllo che renda pari (o dispari) il peso di ciascuna parola. Evidentemente un codice
a controllo di parita' ha una distanza minima di Hamming h=2 ed e' in grado di rivelare tutti
gli errori di molteplicita' dispari.
A titolo di esempio si supponga di avere a che fare con un codice di parita' da 7 bit. La
ridondanza e':
R = 7/6 = 1,16

10
Sistemi di numerazione e codici
Capitolo 2

ed esistono nel codice 64 parole ed altrettante configurazioni non significative. Il numero di


configurazioni che distano 2 da ciascuna parola di codice e' dato dalle combinazioni di 2
elementi su 7; tutte queste configurazioni sono evidentemente significative e pertanto parole
di codice. Ne segue che Nh = 21.
Supponendo che il tasso di errore di bit sia p = 0,01, corrispondente ad una linea
notevolmente disturbata, si ottiene:

Pt = Nh .ph = 0,012 .21 = 0,21 %

1.8.3) Codici a peso costante.


Come dice il loro nome, sono codici a peso costante quelli in cui tutte le parole hanno lo
stesso peso e per i quali quindi si ha h=2. Indicando con w il peso e con m la lunghezza della
parola, il codice avra' m m
w parole, mentre le rimanenti 2m - w configurazioni saranno non
significative.
Il numero di parole a distanza 2 da ogni parola di codice e':

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

La probabilita' di errore non rivelato, sempre con p = 0,01 e':

Pt = 2.(5 - 2).p2 = 0,06 %

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

mentre la probabilita' totale di errore non rivelato e', con p = 0,01

P t = 5.10-4 = 0,05 %

Infatti nel caso del codice biquinario Nh = 5 e non 10, come e' immediato verificare.

1.8.4) Codici di hamming.


I codici di Hamming sono codici con h = 3 o h = 4 usati come rivelatori d'errore o come
autocorrettori. I codici con h=3 sono in grado di rivelare errori semplici e doppi, se usati come
rivelatori di errore, o di correggere errori singoli, interpretando ogni configurazione non
significativa come originata da quella significativa piu' vicina. In tal caso tuttavia il codice
non e' in grado di rivelare gli errori doppi.
I codici con h = 4 individuano gli errori semplici, doppi e tripli quando usati come
rivelatori di errore. Se usati come autocorrettori, correggono gli errori singoli e individuano
quelli doppi.
In generale, se r e' la molteplicita' massima degli errori rilevabili e c quella dei
correggibili, si ha:

r = h-1 per i codici rivelatori di errori

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:

k3 Parita' dei bit 4567 0001111


k2 Parita' dei bit 23 67 0110011
k1 Parita' dei bit 1 3 5 7 1010101
____________________________________________________________
bit errato 1234567

Per il corretto funzionamento del codice di Hamming dev'essere quindi:

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:

n=4 k log2 (m + 1) = 3 m=4+3=7

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

Il messaggio 1 0 0 1 dara' luogo alla parola di codice:

0011001

Si supponga che la parola ricevuta sia invece:

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:

R = 8/4 = 2 Pt 15.p 4 = 1,5.10 -7

1.9) Codici riflessi.


La caratteristica principale dei codici riflessi, detti anche codici ciclici, e' che ogni
configurazione significativa differisce dalla precedente e dalla seguente per un solo bit.
Sono largamente usati nei convertitori analogico-digitali, mentre non vengono usati in
trasmissione, essendo h=1, ne' nei calcolatori non essendo ponderati. Un codice ciclico si dice
completo in n variabili se contiene in sequenza ciclica tutte le 2n combinazioni delle variabili,
incompleto in caso contrario. Uno dei piu' diffusi codici riflessi e' quello di Gray. Dal codice
Gn di Gray a n bit si puo' ricavare quello Gn+1 a n+1 bit con il seguente procedimento:
1) Al numero decimale 2n + k si assegna la stessa configurazione di bit del numero 2n -
(k + 1) per k = 0,1,2,.....,2n-1 .

n=1 n=2 n=3 n=4


_______________________________________________________________
0 00 000 0000
1 01 001 0001
_____________________
11 011 0011
10 010 0010
_____________________________
110 0110
111 0111
101 0101
100 0100
_______________________________
1100
1101
1111
1110
1011
1010
1001
1000

14
Sistemi di numerazione e codici
Capitolo 2

2) Si premette a tutti i numeri < 2n uno 0 e a tutti quelli 2n un 1. In pratica basta


eseguire un specularita' del codice a n bit, come illustrato nello schema soprastante, e
premettere le cifre 0 e 1 alle due immagini cosi' ottenute.
Esistono delle semplici regole di conversione di un parola PG del codice Gray alla
parola PB corrispondente in numerazione posizionale binaria e viceversa.
Nel primo caso:

1) Si procede da sinistra verso destra: fino al primo bit 1 di P G , P B = P G .

Successivamente:

2) Quando l'i-esimo bit di PG = 0, l'i-esimo bit di PB e' uguale a quello (i-1)-esimo di PB


.
3) Quando l'i-esimo bit di PG = 1, l'i-esimo bit di PB e' la negazione di quello (i-1)-
esimo di PB .

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.

2) Il primo bit si confronta con 0.

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.

2.2) Variabili e funzioni.


Si dice variabile logica indipendente una grandezza capace di assumere l'uno o l'altro
dei due valori 0 e 1. Si dice invece che una variabile y e' funzione delle n variabili
indipendenti x1, x2 ,.....,xn , e la si indica con:

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.

2.3) Funzioni di una variabile.


Per quanto detto al paragrafo precedente esistono quattro funzioni di una variabile, di
cui si riportano le tavole di verita'.

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

2.4) Funzioni di due variabili.


Le possibili funzioni di due variabili sono 16; escluse le funzioni degeneri, in numero di
6, fra le rimanenti presentano notevole interesse le seguenti.

2.4.1) Funzione OR o somma logica.


La tavola di verita' e' la seguente:

x x y
1 2

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

La funzione logica OR, indicata simbolicamente con

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)

2.4.2) Funzione OR esclusivo o somma modulo 2.


La tavola di verita' e':

x x y
1 2

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

La funzione OR esclusivo, indicata simbolicamente con :

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.

2.4.3) Funzione AND o prodotto logico.


La tavola di verita' e':

x x y
1 2

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

La funzione AND, indicata simbolicamente con

y x1 .x2

vale 1 se e solamente se ambedue le variabili indipendenti valgono 1.


Dalla tavola di verita' e' immediato verificare che valgono le seguenti proprieta':

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:

c) proprietà distributiva - x 1 . x2 + x1 . x3 = x1 . (x2 + x3) e (x1 + x2) . (x1 + x3 ) = x1 + x2 . x3

2.4.4) Funzione NOR.


La tavola di verita' e':

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
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

2.4.5) Funzione NAND.


La tavola di verita' e':

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 /..../ x n x1 .x2 ....x n


Come per la funzione NOR anche l'operatore NAND gode della proprieta' commutativa,
ma non di quella associativa. L'associazione di piu' variabili deve sempre essere
accompagnata dalla sua negazione.

x1 / x2 / x3 (x1 / x2 ) / x3 (x1 / x2 ) / x3

2.5) Principio di dualita'.


Uno sguardo piu' attento ai postulati fin qui espressi rivela che tali postulati possono
essere riuniti a coppie e che in ciascun caso uno dei postulati puo' essere ottenuto dall'altro
scambiando la costante logica 0 con la costante logica 1 e l'operatore somma logica con
l'operatore prodotto logico.
E' questa una proprieta' generale dell' algebra booleana. Ad esempio, le due espressioni
date al paragrafo 2.4.3 per illustrare la proprieta' distributiva, sono una la duale dell'altra.
Di conseguenza ciascun teorema che possa esser dimostrato per l'algebra booleana
ammette anche la sua forma duale. Ciascun passo della dimostrazione del primo teorema puo'
essere rimpiazzato dal suo duale, ricavando in tal modo la dimostrazione del teorema duale.

2.6) Termini minimi e termini massimi.


Tra tutte le funzioni di n variabili assumono particolare importanza i termini minimi e i
termini massimi. E' detta termine minimo quella particolare funzione di n variabili che vale 1
in corrispondenza ad una ed una sola configurazione delle variabili indipendenti.

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.

2.7) I teoremi dell'algebra booleana.


Dette x, y, z tre generiche grandezze booleane (costanti, variabili o funzioni) per esse
valgono i seguenti teoremi.

21
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

2.7.1) Primo teorema dell'assorbimento.


Il valore dell'espressione x + x.y dipende esclusivamente da x. Infatti

x x.y x .(1 y) x

L'espressione duale di tale teorema e':

x .(x y) x x.y x

2.7.2) Secondo teorema dell'assorbimento.


Il valore dell'espressione x x.y e' uguale a quello della somma logica x y. Infatti
ricorrendo al primo teorema dell'assorbimento si ha:

x x. y x x . y x. y x y .(x x ) x y

2.7.3) Terzo teorema dell'assorbimento.

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

mentre l'espressione duale e':

(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)

2.7.4) Teorema di De Morgan.


La negazione della somma ha lo stesso valore del prodotto dei suoi addendi negati.
Cioe':

x y x.y

mentre la sua espressione duale e'

x.y x y

Queste due espressioni costituiscono il teorema di De Morgan che formalmente si puo'


esprimere con:

22
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

F(x 1 , x 2 ,...., x n , ,.) F(x 1 , x 2 ,...., x n ,., )

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

La sua negazione, applicando il teorema di De Morgan, sara':

F' F (x y).(x y) x.y x . y

di cui e' immediata la verifica tramite la tavola di verita'.


Sempre mediante De Morgan e' possibile ricavare la rappresentazione canonica di una
qualsiasi funzione in forma di prodotto di somme da quella in forma di somma di prodotti e
viceversa. La funzione y si puo' infatti concepire come la negazione della funzione y , scritta
in forma canonica come somma dei termini minimi che corrispondono agli zeri della funzione
y. Si ha cioe':

y y m i .y i

Applicando il teorema di De Morgan si ottiene:

y (mi yi ) (M i y i )

espressione coincidente con la (2.6.2).


Ancora, attraverso l'uso del teorema di De Morgan, e' possibile dimostrare che l'insieme
completo degli operatori, necessario e sufficiente ad esprimere una qualsiasi funzione logica
non e' l'insieme AND-OR-NOT, bensi' o l'insieme AND-NOT o quello OR-NOT.
Infatti:

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.

2.8) Interpretazione circuitale dell'algebra booleana.


Come si e' gia' accennato in precedenza, la prima applicazione circuitale dell'algebra
booleana si ebbe per la commutazione a contatti. Questo tipo di applicazione e' ancora
largamente usato, ad esempio in campo telefonico, malgrado che lo stesso formalismo sia
stato con successo applicato allo studio dei circuiti logici, il cui peso e' oggidi' preponderante.
Nell'interpretazione di Shannon le costanti logiche 0 e 1 indicano rispettivamente un
circuito aperto o uno chiuso, mentre le variabili indicano il contatto di un interruttore o di un
rele'. Con i simboli X e X si indicano evidentemente due contatti azionati
contemporaneamente, ma sempre tali che quando uno e' aperto, l'altro e' chiuso e viceversa.
Si consideri ora un assieme di contatti x1, x2,...., xn in parallelo tra di loro, come
illustrato in fig. 2.8.1.

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

descrive, secondo l’analogia di Shannon, il comportamento elettrico di n contatti in parallelo


tra A e B.
Analogamente il comportamento di n contatti in serie tra di loro tra i punti A e B e'
descritto dal prodotto logico

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:

L A.B. C A. B .C A .B.C A . B . C A.(B. C B .C) A .(B.C B .C)

Il corrispondente circuito e' quello riportato in fig. 2.8.3.

B C

A
_ _
B C

_
B C
_
A LAMPADA
_
B C

figura 2.8.3

Sintetizzando invece la funzione sulla base dei termini massimi si ottiene:

25
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

L (A B C).(A B C).( A B C).(A B C) [A (B C).( B C)].[ A (B C).(B C)]

cui corrisponde il circuito di fig. 2.8.4.

_
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.

2.9) Semplificazione delle funzioni logiche.


Si e' gia' visto dagli esempi che precedono che le forme canoniche non esauriscono le
espressioni analitiche di una funzione; anzi, come per qualsiasi relazione algebrica, anche
quelle logiche possono essere trasformate in un certo numero di espressioni formalmente
diverse, ma sostanzialmente equivalenti. Ad esempio:

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

Per la proprieta' distributiva il primo termine si puo' semplificare con il secondo,terzo e


quarto, mentre il terzo termine si puo' semplificare con il quinto. Si ottiene:

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

Uno qualsiasi dei quattro termini risultanti, ad esempio

x1 . x 2 . x 3 x 1 . x 2 . x 3 . x 4 x 1 . x 2 . x 3 .x 4

viene detto implicante in quanto implica i termini x1 . x 2 . x 3 . x 4 e x 1 . x 2 . x 3 .x 4 (vale 1


quando valgono 1 o l'uno o l'altro dei termini minimi implicati)1. Tornando alla funzione y, il
primo e l'ultimo termine possono ancora essere semplificati tra di loro, dando origine
all'espressione:

y x1 . x 2 x1 . x 2 . x 4 x 2 . x 3 . x 4

Infine, dal primo teorema dell'assorbimento, si ha

y x1 . x 2 x 2 . x 3 . x 4

e fattorizzando finalmente si ottiene:


y x 2 .(x 1 x 3 . x 4 )

2.10) Il metodo di semplificazione mediante le mappe di Karnaugh.


Il metodo proposto da Karnaugh e' un metodo grafico di semplificazione e permette di
ottenere molto semplicemente la forma minima di una funzione come somma di prodotti,
facendo ricorso a particolari mappe di rappresentazione. Quale limitazione si ha che, sebbene
il metodo sia concettualmente applicabile a funzioni di qualsiasi numero di variabili, esso
diviene difficoltoso gia' per 6-7 variabili.
Le mappe di Karnaugh, che possono essere considerate un ulteriore metodo di
rappresentazione di una funzione logica, consistono in matrici, le cui posizioni sono in
numero pari a quante sono le diverse configurazioni di n variabili; hanno cioe' quattro
posizioni per le funzioni di due variabili, otto per quelle di tre variabili, sedici per quelle di
quattro e cosi' via.
Ogni posizione e' identificata da n coordinate e viene messa in corrispondenza con una
configurazione delle variabili. In fig 2.10.1 e' riportata la mappa di Karnaugh per funzioni di 3
variabili.
X1 X2
00 01 11 10
X3

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 l’appendice A.

27
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

L'assegnazione delle coordinate a ciascuna posizione di tabella dev'essere tale che


passando da ciascuna casella ad una adiacente, sia in senso orizzontale che verticale, vari il
valore di una sola variabile. Si noti che devono essere considerate adiacenti anche le caselle
terminali, come se la mappa fosse richiusa su se stessa sia in senso orizzontale che verticale.
In definitiva si puo' dire che ciascuna posizione della matrice corrisponde ad un termine
minimo di n variabili. La rappresentazione di una qualsiasi funzione di n variabili si ottiene
contrassegnando opportunamente le posizioni corrispondenti ai termini minimi da cui la
funzione e' composta.
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

e' rappresentata mediante le mappe di Karnaugh come illustrato in fig. 2.10.2


Una funzione riportata sulla mappa di Karnaugh puo' essere semplificata osservando che
due caselle adiacenti, sia in senso orizzontale che verticale, differiscono per il valore di una
sola variabile, che in una delle due caselle apparira' come variabile affermata, nell'altra come
negata.

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

La funzione minima e' quindi:

y x2 x1 . x 4

e non e' funzione di x3.


E' abbastanza evidente che, se anziche' considerare ciascuna casella della mappa come
rappresentativa di un termine minimo la si considera rappresentativa di un termine massimo,
la mappa puo' essere utilizzata anche per sintetizzare una funzione nella forma prodotto di
somme. E' sufficiente in tal caso raccogliere gli zeri della funzione nel minimo numero di
sottoinsiemi di ampiezza massima che realizzano la copertura completa della funzione stessa.
Ciascun sottoinsieme sara' l'impicante dei relativi termini massimi e verra' rappresentato in
forma simbolica dalla somma logica delle variabili che rimangono costanti sul sottoinsieme,
dirette se le relative coordinate valgono 0, negate in caso contrario.
Il metodo delle mappe di Karnaugh puo' essere applicato, come gia' accennato, anche a
funzioni di 5 o 6 variabili. In tal caso tuttavia non si potra' piu' realizzare una mappa piana in
cui ogni casella sia adiacente a caselle le cui coordinate differiscano per un'unica variabile. La
mappa per cinque variabili pertanto viene realizzata mediante due mappe per quattro variabili,
una associata al valore 0 della quinta variabile, l'altra al valore 1. Le adiacenze vanno quindi
ricercate anche tra caselle occupanti posizioni omologhe sulle due mappe.
Si voglia da esempio semplificare la seguente funzione:

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

La relativa mappa e' riportata assieme ai raggruppamenti di caselle adiacenti in fig.


2.10.4.

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

La forma minima della funzione quindi e':


y x 1 .x 2 x 3 . x 4 . x 5 x 1 . x 2 .x 3 .x 4 . x 5

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

2.11) Metodo tabellare di Quine - Mc Cluskey.


Il metodo di Quine - Mc Kluskey e' un procedimento tabellare che consente di ottenere
la forma minima come somma di prodotti o come prodotto di somme per qualsiasi funzione
logica. Esso si basa sull'applicazione sistematica a tutti i termini minimi della funzione della
relazione:

f . x f .x f

Il procedimento e' il seguente:


1) Si esprimono i termini minimi sostituendo ad ogni variabile diretta un 1 e ad
ogni variabile negata uno 0. Ad esempio il termine minimo x1 .x 2 .x 3 verra'
rappresentato con 011.
2) Si suddividono tutti i termini minimi in gruppi aventi lo stesso numero di 1; tali
raggruppamenti vengono chiamati livelli.
3) Si costruisce una tabella disponendo i livelli in ordine crescente ed associando a
ciascun termine minimo il corrispondente numero decimale.
Ad esempio i termini minimi:

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

danno luogo alla seguente tabella:

Livello Numero Termine Minimo

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
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

Riferendosi all'esempio riportato poco piu' sopra, si ottiene la seguente tabella:

0, 1 0 0 -
0, 2 0 - 0

1, 3 0 - 1
2, 3 0 1 -

A 3, 7 - 1 1

mentre tutti i termini minimi originari vengono contrassegnati.


5) Nella seconda tabella si confrontano tutti i termini del livello k con tutti quelli
del livello k+1. Sono ovviamente semplificabili tra loro i termini che
differiscono per un solo bit e che siano gia' stati semplificati rispetto alla stessa
variabile. Si costruisce in tal modo una terza tabella con le stesse modalita'
esposte per la costruzione della seconda tabella. Nell'esempio che si sta
trattando si ha:
B 0, 1, 2, 3 0 - -
mentre nella seconda tabella il termine 3,7 non da' luogo a semplificazioni e
non viene quindi contrassegnato.
6) Si prosegue in modo analogo, con la costruzione di tabelle successive, finche'
non e' piu' possibile eseguire semplificazioni. Tutti i termini che nelle
successive tabelle non sono stati contrassegnati vengono chiamati implicanti
primi e la loro somma logica realizza senz'altro la funzione desiderata.
L'espressione minima di tale funzione si realizza pero' con un numero di
implicanti inferiore a quello degli implicanti primi. Essa infatti si ricava come
somma del minimo numero di implicanti primi con cui vengono implicati tutti i
termini minimi della funzione.
Nell'esempio che si sta esaminando gli implicanti primi sono:
A= - 1 1 B= 0 - -
La scelta piu' opportuna degli implicanti primi necessari, che puo' divenire
complessa gia' con un numero di variabili relativamente ridotto, avviene
mediante l'uso di un reticolo, avente i termini minimi sulle colonne e gli
implicanti primi sulle righe. Su ogni riga, in corrispondenza quindi a ciascun
implicante, si contrassegnano opportunamente i termini minimi implicati.
Nell'esempio trattato si ottiene percio' il seguente reticolo:

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

Le successive tabelle di semplificazione sono riportate in fig 2.11.1, mentre il reticolo di


scelta degli implicanti appare in fig. 2.11.2.

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

Ci sono pertanto quattro realizzazioni equivalenti della funzione assegnata.

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

2.12) Le condizioni non specificate e le funzioni di funzione.


Nella sintesi di una funzione logica di n variabili si puo' presentare il caso in cui per k
configurazioni delle variabili di ingresso sia assegnato il valore 1 alla funzione, per m
configurazioni il valore 0 con k+m <2n . Le restanti 2n - (m+k) configurazioni vengono dette
condizioni non specificate o d.c.c. (don't care condition).
In pratica questa situazione si verifica ogni volta che in un circuito certe configurazioni
di ingresso siano fisicamente impossibili o rendano priva di significato l'uscita, o, da un punto
di vista strettamente analitico, quando una funzione y sia funzione delle variabili w1 ,w2 ,w3
,.....,wm , ognuna delle quali e' a sua volta funzione delle variabili x1 ,x2 ,....,xn .
Cioe'
y F(w 1 , w 2 ,...., w m )
con
w i Fi (x1 , x 2 ,...., x n ) i 1,2,...., m

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

Le condizioni non specificate possono venir sfruttate nelle semplificazioni in modo da


pervenire ad espressioni minime piu' semplici. Se si opera con le mappe di Karnaugh, le
semplificazioni vanno ancora fatte in modo da coprire tutte le caselle contrassegnate con un 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

Senza considerare le condizioni d.c.c. si otterrebbe:

35
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

y x 1 .x 3 .x 4 x 1 . x 2 . x 3 . x 4 x 1 .x 2 . x 3 .x 4

mentre tenendo conto anche di queste ultime si ha:

y x 3 .x 4 x1 . x 3

Qualora si operi invece con il metodo tabellare di Quine-McCluskey la tabella iniziale


va costruita a partire sia dai termini minimi, in corrispondenza ai quali la funzione vale 1, sia
dalle condizioni non specificate. Il reticolo per la scelta delle copertura minima va invece
realizzato senza tener conto delle d.c.c. In fig. 2.12.2 sono riportate le successive tabelle di
semplificazione della stessa funzione dell'esempio precedente, mentre in fig. 2.12.3 vi e' il
reticolo di scelta degli implicanti.

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

2.13) Funzioni simmetriche.


La simmetria logica e' una proprieta' che esiste in certe funzioni logiche e che le rende
atte ad essere implementate con particolari tecniche. Tali funzioni vengono chiamate funzioni
simmetriche, hanno una particolare importanza nel progetto logico e formano un'importante
classe di funzioni.
Poiche' per esse esistono particolari tecniche di progetto e' notevolmente importante
riconoscere quando una funzione e' simmetrica. Infatti l'implementazione di una funzione
simmetrica che non faccia ricorso a tali tecniche e' di solito difficoltosa, in quanto i normali
metodi di semplificazione non conducono usualmente ad alcuna minimizzazione.
Una funzione logica di n variabili x1 ,x2 ,.....,xn e' detta simmetrica se un qualsiasi
scambio tra queste variabili lascia inalterata la funzione stessa. Se questa proprieta' si estende
a tutte le variabili la funzione e' detta totalmente simmetrica; se invece si estende solo ad un

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:

f (x1j , x2j ,....,x nj )


1 2 n

e' simmetrica rispetto le variabili x1j ,x 2j ,....,x nj se e solamente se rimane inalterata per
1 2 n

qualsiasi permutazione tra queste variabili, potendo ji assumere solamente i valori 0 e 1 ed


essendo:

x ij i
xi se ji 0 x iji
xi se ji 1

Si consideri ad esempio la funzione:

f(x, y, z) x .y.z x. y .z x.y. z x . y . z (2.13.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

e quindi la funzione diviene

37
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

x .y.q x. y .q x.y. q

evidentemente simmetrica nelle variabili x, y, q. E' abbastanza immediato da questo esempio


rendersi conto che non e' semplice individuare funzioni simmetriche di variabili dirette e
negate.
Nelle figure 2.13.1, 2.13.2 e 2.13.3 sono riportati gli esempi dei tre tipi di simmetria
definiti piu' sopra.
CD
00 01 11 10
AB
00
Funzione totalmente simmetrica
Esiste un'intercambiabilita' tra
01 1 le variabili A, B, C, D
11 1 1
fig. 2.13.1
10 1

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

Le funzioni simmetriche godono di parecchie proprieta' interessanti, che sono messe in


luce nei seguenti teoremi.

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)

mentre la (2.13.2) e'


3
S{1} (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
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

S04 (x, y, z, w) S34 (x, y, z, w) S44 (x, y, z, w)

S4 (x, y, z, w) x.y.z.w x . y . z .w x . y .z. w x .y. z . w x. y . z . w x . y . z . w


{0,3,4}

La dimostrazione del teorema e' intuitiva.

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

La dimostrazione e' intuitiva. Ad esempio:

S 4 (x, y, z, w).S4 (x, y, z, w) S 4 (x, y, z, w) x.y.z.w.( x.y.z.w x . y . z . w) x.y.z.w


0 {0,4} 0

Teorema 4: La negazione di una funzione simmetrica di n variabili e di livelli {ak}


e' ancora una funzione simmetrica di n variabili il cui insieme di livelli di simmetria {aj}
e' il complemento dell'insieme {ak}.

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).

Teorema 5: Negando le variabili di una funzione simmetrica si ottiene ancora una


funzione simmetrica i cui livelli di simmetria sono il complemento a n dei livelli
originari.

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:

S4 (A, B, C, D) A.B. C . D A. B.C. D A. B . C .D A .B.C. D


{2,3)
A .B. C .D A . B .C.D A. B .C . D A .B. C . D A . B.C. D A . B. C .D
S42 (A, B, C, D) S14 (A, B, C, D) S4 (A, B, C, D)
{4 2,4 3}

Teorema 6: Qualsiasi funzione simmetrica


n
S{a 1 , a 2 ,...,a k }
(x 1j1 , x 2j2 ,...., x njn )
puo' essere rappresentata come somma logica di un sottoinsieme delle seguenti
funzioni simmetriche elementari.

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

La generica funzione elementare e' formata da ( n ) termini contenenti ciascuno k


k
k
variabili affermate e n-k variabili negate. La dimostrazione del teorema e' immediata
ricorrendo ai teoremi 1 e 2.
Il teorema appena enunciato permette di impostare in maniera estremamente semplice
tutta una classe di problemi di progetto. Si supponga ad esempio di avere un sistema di
comunicazione che utilizzi 16 linee in parallelo per la trasmissione di messaggi formati da
quattro caratteri, codificati ciascuno con quattro bit. Su questi caratteri venga eseguito il test
di parita' e sia richiesta la ritrasmissione del messaggio quando due o piu' di essi non
rispettino la parita'. Si indichino con x1, x 2, x3, x4; y1, y2, y3, y4; z1, z2, z3, z4; w1, w2, w3, w4 i
bit dei quattro caratteri. E' evidentemente molto semplice scrivere la funzione di test di parita'
per ciascun insieme di quattro bit sotto forma di funzione simmetrica. Riferendosi alla parola
X si ha:

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.

2.14) Il riconoscimento delle funzioni simmetriche.

2.14.1) Funzioni totalmente simmetriche.


Esistono diversi metodi atti a mettere in luce se una funzione booleana e' simmetrica.
Nel seguito verranno presentati due di questi metodi, senza tuttavia darne una dimostrazione
formalmente esatta e completa, che a questo livello appare abbastanza complessa e di scarso
interesse.

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
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

Se infatti la funzione e',come in ipotesi, una funzione simmetrica elementare, con


n
variabili di simmetria tutte affermate, la tabella costruita conterra', come detto,( k ) righe in
ciascuna delle quali compariranno k simboli 1 e n-k simboli 0.
D'altra parte gli 1 contenuti in ciascuna colonna saranno, indicando il loro numero con
C1
C1 ( n 1 )
k 1

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)

Si abbia ad esempio la funzione

F x. y . z x .y. z x . y .z

La corrispondente matrice e':

0 1 1 2
1 0 1 2
1 1 0 2
2 2 2

con n=3, k=2, r=2. Per tale funzione vale la 2.14.1

43
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

n.r = 3.2 = 2.(2 + 1) = k.(r +1)

In generale, se la funzione e' simmetrica a piu' livelli di simmetria, si devono avere ( n )


k
righe per ogni livello, per ogni livello devono essere costanti r e k e deve valere la (2.14.1). Si
abbia ad esempio la funzione

f x . y .z.w x .y. z .w x. y . z .w x .y.z. w x. y .z. w x.y. z . w


x . y . z .w x . y .z. w x .y. z . w x. y . z . w

La relativa matrice e'

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

Essendo costante r, ma non k si suddivide la matrice nelle due sottomatrici

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

per ciascuna delle quali k e r sono costanti e vale la (2.14.1). Si ha pertanto:

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

La relativa matrice e':

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

F S32 ( x , y, z) S13 (x, y, z)

Il criterio esposto, relativamente semplice, cade pero' in difetto quando si abbia


contemporaneamente n pari, k=n/2 e le variabili di simmetria non siano tutte affermate. In
questo caso infatti, pur essendo r costante, non sono rispettate le altre condizioni. Si consideri
ad esempio la funzione:

f x.y. z .w x. y .z.w x. y . z . w x .y.z.w x .y. z . w x . y .z. w

che da' origine alla matrice


0 0 1 0 1
0 1 0 0 1
0 1 1 1 3
1 0 0 0 1
1 0 1 1 3
1 1 0 1 3

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
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

Si ricorre allora all'artificio di espandere la funzione secondo una variabile qualsiasi, ad


esempio la prima, dividendo i termini della funzione in due gruppi, ciascuno relativo ad uno
dei valori della variabile di espansione.
Si ottiene pertanto:

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

Complementando la terza colonna si ottiene:

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

Infine ricomponendo la matrice si ha :

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

Si puo' allora concludere che:

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
#
ß´¹»¾®¿ Þ±±´»¿²¿
Ý¿°·¬±´± î

Il metodo e' il seguente:

PASSO 1: Per identificare i due centri di simmetria si usa la seguente equazione:


m
m .(2 n 1) 2. k
1 n 1
Centro piu' vicino = (2 1)
2 m 2. e

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.

Centro piu' lontano = (2n - 1) - centro piu' vicino

PASSO 2: Si convertono tutti i termini e il centro in una somma di potenze di 2. Si


confrontano le potenze di 2 di ciascun termine con quelle del centro, conteggiando il numero
di differenti potenze, valutando cioe' la distanza dal centro. Si determina infine il numero di
termini che hanno la stessa distanza dal centro.

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.

PASSO 4: Si calcolano i parametri della simmetria, cioe' le coordinate del centro, le


variabili di simmetria ottenute dalle coordinate del centro e i livelli di simmetria ottenuti come
complemento a n delle distanze dei vari termini.

Si voglia ad esempio verificare se la funzione

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!

mentre per i termini a distanza 0 si ha:

n! 4!
n d !d! 4!0!

PASSO 4.

La funzione esaminata e' pertanto una funzione totalmente simmetrica e i parametri


della simmetria sono:

centro piu' vicino = 15


centro piu' lontano = (24 - 1) - 15 = 0
variabili di simmetria = A, B, C, D e A, B, C, D
livelli di simmetria relativi al primo centro = 3,4
livelli di simmetria relativi al secondo centro = 0,1

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)

2.14.2) Funzioni parzialmente simmetriche.


Quando dalle procedure esposte risulta che una funzione

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

a) Si esegua una partizione della funzione data in:

x k . g x i ; i 1, n; i k x k . h x 1 ; i 1, n; i k

b) Si esegua su g e h il test per l'individuazione della simmetria totale. Se le funzioni g


e h sono totalmente simmetriche per lo stesso insieme di variabili di simmetria,
allora la funzione f(x1, .... ,xn ) e' parzialmente simmetrica. Le variabili di simmetria
parziale sono quelle per cui g e h sono totalmente simmetriche.

Se viceversa g e h non sono a simmetria totale per il medesimo insieme di variabili,


allora la funzione f(x1, .... ,xn) non e' parzialmente simmetrica nelle variabili:

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

a) Si esegua la partizione delle funzione data in:

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

b) Si esegua su p, q, r, s il test per l'individuazione della simmetria totale. Se tutte le


quattro funzioni sono totalmente simmetriche per lo stesso insieme di variabili di
simmetria, allora la funzione f(x1, .... ,xn) e' parzialmente simmetrica. Le variabili di
simmetria parziale sono quelle per cui p, q, r, s sono totalmente simmetriche.

Se viceversa p, q, r, s non sono totalmente simmetriche per il medesimo insieme di


variabili, allora la funzione f(x1, .... ,xn) non e' parzialmente simmetrica nelle variabili

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

Poiche' esistono due valori di r, uno il reciproco dell'altro, si negano, ad esempio, le


variabili della prima e della quarta colonna, ottenendo:

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

Per quanto riguarda la funzione h(x2,x3,x4) si ottiene la seguente matrice:

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

Pertanto per le medesime considerazioni si esclude la simmetria totale per la funzione


g(x1,x3,x4) rispetto alle variabili x1, x 3, x4.
Considerando la partizione:

f x1, x 2 , x 3 , x 4 x 3 . g x1 , x 2 , x 4 x 3 . h x1 , x 2 , x 4

si ottengono le seguenti due matrici

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

Invertendo la variabile della seconda colonna in ambedue le matrici si ottiene:

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

Le verifiche successive secondo la 2.14.1 portano a concludere che:


3 3
g x1 , x 2 , x 4 S{2,3} x1 , x 2 , x 4 S{0,1} x1 , x 2 , x 4
h x1 , x 2 , x 4 S13 x 1 , x 2 , x 4 S32 x 1 , x 2 , x 4

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

si vede che per la funzione h si ha la matrice:

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.

3.2) Itinerari e livelli.


Ogni circuito di commutazione e' formato da un certo numero di elementi (NAND,
NOR, ecc.) tra loro variamente interconnessi, da un certo numero di ingressi, contraddistinti in
fig. 3.2.1 con i simboli Ai, e da un certo numero di uscite, contraddistinte nella medesima
figura con i simboli Bk.

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

III e IV livello G2 II livello I livello


A5
A
1
A2 G1 G3 G4 B
A3
A A6
4

(b)

figura 3.2.2

Si noti che uno stesso elemento puo' avere piu' livelli secondo l’itinerario. 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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

3.3) Analisi dei circuiti AND-OR-NOT.


L'analisi di un circuito combinatorio tende ad ottenere una rappresentazione della
funzione d'uscita y, analitica o sotto la forma di tavola di verita'. Poiche' la rappresentazione
circuitale e' simbolica, l'analisi non e' legata a considerazioni di logica positiva o negativa.
Per effettuare l'analisi di circuiti AND-OR-NOT e' sufficiente partire dagli elementi su
cui entrano le variabili e procedere verso il terminale di uscita secondo tutti i possibili iti-
nerari, usando la funzione di uscita di ciascun elemento come variabile di ingresso
dell'elemento successivo.
Si abbia da esempio il seguente circuito:

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

3.4) Analisi dei circuiti NAND.


L'analisi dei circuiti realizzati con porte NAND puo' essere condotta nella stessa
maniera in cui si analizza un circuito AND-OR-NOT. Le espressioni che se ne ricavano sono
tuttavia notevolmente complesse a causa della non associativita' dell'operatore NAND. Ad
esempio per il circuito di fig. 3.4.1 si ottiene l'espressione analitica:

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:

1) I livelli dispari originano somme.


2) I livelli pari originano prodotti.
3) Le variabili che entrano ai livelli dispari vanno negate.

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

3.5) Analisi dei circuiti NOR.


Anche per i circuiti NOR l'analisi puo' essere condotta in analogia a quanto si fa per i
circuiti AND-OR-NOT, oppure la funzione di uscita puo' essere ricavata direttamente dal
circuito nella forma di prodotto di somme, sfruttando le proprieta' dell'operatore NOR.
Le regole da seguire per l'analisi diretta sono del tutto analoghe a quelle ottenute per
l'operatore NAND, e`cioe':

1) I livelli dispari danno origine a prodotti.


2) I livelli pari danno origine a somme.
3) Le variabili che entrano su livelli dispari vanno negate.

A titolo di esempio si esamini il circuito di fig. 3.5.1. Si ottiene:

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

3.6) La sintesi dei circuiti combinatori.


Eseguire la sintesi di un circuito combinatorio consiste, come gia' accennato, nel
progettare un circuito a n ingressi che soddisfi una determinata funzione di uscita y.
La funzione y che il circuito deve soddisfare puo' essere assegnata in diverse forme. Piu'
precisamente:

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.

4) Con uno schema logico, procedura generalmente usata quando un determinato


circuito logico debba venire riprogettato con componenti diversi. In tal caso, con
le regole dell'analisi, si ricava un'espressione analitica della funzione y.

Qualunque sia il metodo di assegnazione la sintesi procede partendo dalla tavola di


verita' o da un'espressione analitica e applicando i metodi di semplificazione delle funzioni
logiche fino a giungere alla forma piu' conveniente per gli scopi che ci si propone.
Si noti che non sempre la forma piu' conveniente corrisponde alla forma minima della
funzione. Ad esempio la forma minima algebrica non sempre si puo' realizzare circuitalmente
in quanto vi possono essere dei vincoli sul numero massimo di livelli. Infatti quanto esposto
precedentemente e cioe' che nei circuiti combinatori l'uscita e', istante per istante, funzione
unicamente degli ingressi, non significa che la variazione degli ingressi sia avvertita
immediatamente in uscita; sta piuttosto a significare che ogni configurazione di ingresso da'
luogo a una determinata uscita e che eventuali transitori di commutazione possono ritardare,
ma non modificare quest'uscita.
Ora il tempo di commutazione di qualsiasi elemento fisico, per quanto piccolo, non e'
mai nullo; il tempo di risposta di un circuito a n livelli al variare della configurazione di
ingresso e' n. , avendo indicato con il tempo di commutazione del singolo componente.
In definitiva il ritardo totale tra ingresso e uscita e' proporzionale al numero di livelli e
potendo la forma minima di una funzione contenere un numero di livelli molto elevato, la sua
diretta realizzazione circuitale potrebbe dar luogo a ritardi intollerabili.
La forma in cui si ha il minimo ritardo e' quella a due livelli, che d'altra parte e' quella
che si ottiene con i metodi di semplificazione che sono stati esposti al capitolo II. La
convenienza di eventuali fattorizzazioni va valutata caso per caso.
Si puo' concludere percio' che la sintesi di un circuito combinatorio procede attraverso i
seguenti passi, di cui quello (5) non puo' venir condotto secondo un procedimento si-
stematico, ma andra' verificato di volta in volta.

1) Descrizione del funzionamento del circuito.


2) Determinazione della tavola di verita'.
3) Sintesi della funzione di commutazione.
4) Semplificazione della funzione logica relativa.
5) Determinazione della forma minima piu' conveniente.
6) Progetto del circuito.

59
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

3.7) Sintesi di circuiti AND-OR-NOT.


Il procedimento e' banale; consiste nel ricavare, a partire dalla tavola di verita', la forma
minima a due livelli; passare poi da questa alla forma minima piu' conveniente, eventualmente
con tecniche basate sul concetto di decomponibilita', che saranno illustrate piu' avanti. Infine
si disegna il circuito.
Si voglia ad esempio realizzare un circuito a tre ingressi, sui quali possa presentarsi un
numero binario compreso tra 0 e 5. All'uscita di tale circuito debba essere realizzato il
prodotto per 3 del numero di ingresso.

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

Utilizzando opportunamente le condizioni non specificate si ottiene:

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

L'espressione analitica della funzione di trasmissione e'

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

Ü¿´´¿ ³¿°°¿ ¼· Õ¿®²¿«¹¸ ¼· º·¹ò íòéòë si ricava l'espressione minima a


due livelli

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

richiedendo in tal caso solamente un AND e un NOT.

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.

3.8) La decomposizione in sconnessione semplice.


La semplificazione dei circuiti mediante la fattorizzazione e' una tecnica soddisfacente
nella maggior parte dei casi, ma e' un processo di tipo empirico largamente dipendente
dall'esperienza e dal colpo d'occhio di chi opera. Sarebbe conveniente avere a disposizione
qualche metodo piu' sistematico; cio' si puo' ottenere mediante la decomposizione funzionale.
Il metodo di semplificazione in sostanza consiste nello spezzare una singola funzione
complessa in un certo numero di funzioni semplici ed e' stato proposto da Ashenhurst e
Curtis.
Sia x1, x2,...., xn un insieme di variabili di commutazione e siano A e B due sottoinsiemi
disgiunti di X, tali che:

A B X A B

Sia assegnata una funzione booleana:

f x 1 , x 2 ,...., x n

Se e' possibile individuare due funzioni F e , tali che:

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

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).
Si consideri ad esempio la seguente funzione:

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

Manipolando opportunamente tale funzione si ottiene:

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

che e' decomponibile nella forma F x 1 , x 4 , x 2 , x 3 .


Per prima cosa si raccolgano i termini minimi secondo le quattro combinazioni possibili
di x2 e x3 in modo da ottenere la forma;

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 l’asse 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 1 , x 4 . Si supponga che la x 1 , x 4 sia la . Allora, affinche' la funzione f sia decompo-


nibile le rimanenti righe devono rappresentare o o o la costante logica 1 o la costante
logica 0. In altre parole le righe successive alla prima devono essere o identiche a o al suo
complemento oppure devono essere riempite totalmente con 1 o 0.

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

Questa condizione nell'esempio fatto e' rispettata, in quanto:

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

Il criterio descritto permette di discriminare se una funzione e' decomponibile, ma si


applica con difficolta' notevolissime in mappe di partizione di dimensioni notevoli.
Si definisca allora molteplicita' di colonna il numero di differenti insiemi di 1 e 0 che si
possono individuare esaminando le colonne della mappa di partizione. Ad esempio, nella
mappa di fig. 3.8.2 si ha una molteplicita' di colonna 2, in quanto si possono individuare
unicamente i due insiemi:

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

Dall'esame della carta di decomposizione si ottengono le seguenti possibili partizioni:

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

CARTA DI DECOMPOSIZIONE PER QUATTRO VARIABILI

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

La procedura descritta puo' essere applicata a funzioni di un maggior numero di variabili


ed in teoria essere estesa a funzioni di qualsiasi numero di variabili. In pratica per un numero
di variabili superiore a 5 la dimensione della carta di decomposizione diventa eccessiva.
Tuttavia la generalita' del metodo permette di pensare ad una computerizzazione del processo
quando il numero delle variabili fosse superiore a 5.
Qualora esistano condizioni non specificate nella funzione assegnata e' necessario
contrassegnare opportunamente sulla carta di decomposizione (ad esempio barrandoli) i re-
lativi termini minimi. Si utilizzano poi le condizioni non specificate in modo da ottenere, se
possibile, una molteplicita' di colonna non superiore a 2.

67
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

3.9) Altre decomposizioni disgiuntive.


E' evidente che esistono altre forme di decomposizione diverse che non quella in
sconnessione semplice. In questo paragrafo verranno prese in esame le decomposizioni che si
ottengono con la partizione dell'insieme delle variabili indipendenti in tre o piu' sottoinsiemi
disgiunti.
Sia X = x1, x2,......,xn un insieme di n variabili di commutazione e siano A1, A2,....,Am
dei sottoinsiemi disgiunti di X, tali che:

A1 A2 ..... Am X

La decomposizione, ove possibile, in una delle due forme:

f X F 1 A1 , 2 A 2 ,..., m Am

oppure

f X F 1 A1 , 2 A 2 ,..., m 1 Am 1 ,Am

prende il nome di decomposizione in sconnessione multipla.


La decomposizione nella forma:

f X F A ,B ,C

o, piu' in generale:

f X F m 1 m 2 .... 2 1 A 1 , A 2 ,...., A m 2 ,Am 1 , Am

e' conosciuta come decomposizione in sconnessione iterativa.


Infine la combinazione di queste due forme, cioe':

f X F A ,B , C ,D

e' detta decomposizione in sconnessione complessa.


In ogni caso la decomposizione sara' non banale se gli insiemi delle variabili al contorno
ne conterranno almeno due.
Esiste un certo numero di teoremi che mettono in relazione le decomposizioni appena
illustrate con quella in sconnessione semplice e permettono di estendere l'uso della carta di
decomposizione alla loro determinazione.
Di questi teoremi, di dimostrazione spesso lunga e noiosa, ci si limitera' a dare
l'enunciato ed un esempio di applicazione.

3.9.1) Decomposizione iterativa.


Sia f(X) una funzione per la quale esistano due diverse decomposizioni in sconnessione
semplice:

68
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

f X F A, B , C G A , B, C

Esiste allora la decomposizione in sconnessione iterativa

f X F A ,B ,C

con:

A ,B A, B

Quale esempio di applicazione di questo teorema si consideri la funzione:

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

Le condizioni enunciate sono soddisfatte ponendo:

A x1, x 3 B x5 C x2, x4

Dalla prima mappa di partizione della fig. 3.9.1 si ottiene:

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

Ora, dalle condizioni enunciate all'inizio di questo paragrafo, la funzione x1 , x 3 , x 5


puo' essere decomposta in accordo con la partizione x1,x3/x5. Per ispezione diretta della
x1 , x 3 , x 5 si vede che la decomposizione e' data da:

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.

3.9.2) Decomposizione multipla.


Sia f(X) una funzione per la quale esistano due diverse decomposizioni in sconnessione
semplice.

f X F A ,B G B ,A

Esiste allora la decomposizione in sconnessione multipla:

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

Dalla carta trasposta si ottiene:

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

Dall'esame della carta diretta si ottiene:

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

Esiste allora la decomposizione in sconnessione multipla

f X H A, B ,C

Quale esempio si consideri la funzione di disparita' di 5 variabili, di cui due mappe di


partizione sono riportate in fig. 3.9.5.

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

Dall'esame della prima carta trasposta si ottiene la decomposizione:

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

Dalla seconda carta di decomposizione, sempre trasposta, si puo' individuare la de-


composizione:

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

Le condizioni enunciate in precedenza sono soddisfatte con :

A x1, x 2 B x3, x4 C x5

Per determinare la funzione composta H, si costruisca la mappa di Karnaugh della


funzione f x 3 , x 4 , x 5 /x 1 , x 2 indicando per ciascuna delle sue righe i valori assunti dalla fun-
zione , come illustrato in fig. 3.9.6 (a).
Si puo' allora, a partire da tale mappa, ricostruire la mappa della funzione H, come
viene illustrato in fig. 3.9.6 (b).

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

Da tale mappa si ottiene:

H , , x5 .x 5 .x5 . .x5 .x 5 .

Questa operazione completa la decomposizione. Si puo' tuttavia notare dalla mappa


finale di fig. 3.9.6 (b) che la stessa H e' decomponibile.

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.

3.10) Sintesi dei circuiti NAND


La sintesi di un circuito NAND va fatta a partire dall'espressione minima a due livelli,
intendendo come espressione minima quella che minimizza il numero di gate, e, a parita' di
gate, il circuito che usa il minor numero di ingressi. E' evidente che la minimizzazione deve
operare anche sugli invertitori, potendo essi venir concepiti come NAND a un ingresso.
La sintesi quindi appare come un problema nettamente diverso a seconda che si abbiano
o meno a disposizione le variabili negate.

3.10.1) Sintesi a partire da variabili dirette e negate.


Nel caso dell'analisi si e' visto che un circuito NAND origina una somma di prodotti,
poiche' ogni NAND, a parte la negazione o meno delle variabili che entrano su di esso, si
comporta come un AND o un OR a seconda del livello in cui si trova inserito lungo ciascun
itinerario.
Si puo' allora pensare di realizzare un circuito NAND nello stesso modo in cui si
realizza un circuito AND-OR-NOT, tenendo pero' presente che e' necessario negare le va-
riabili che entrano ai livelli dispari.
Ad esempio si voglia realizzare il circuito NAND per la funzione:

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

livello 5 livello 4 livello 3 livello 2 livello 1

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 1/x 2 /x 3 / .... /x k x 1 /x 2 /x 3 / .... /x k

il circuito cui si perviene e' quello di fig.3.10.2

x x
1 1
x
x 2
n x x
3 n

figura 3.10.2

3.10.2) Sintesi a partire dalle sole variabili dirette.


Quando le variabili di ingresso non sono disponibili nella loro forma negata, non e'
conveniente usare dei NAND semplicemente per invertirle, in quanto il costo di ciascuna
porta e' approssimativamente uguale, qualunque sia il numero dei suoi ingressi.
E' piu' opportuno usare degli artifici, quando possibile, per far entrare le variabili dirette
sui livelli pari e quelle negate sui livelli dispari, in modo da eliminare gli invertitori sfruttando
le proprieta' delle reti NAND.
Questo modo di operare modifica spesso in modo profondo la forma della funzione,
aumentando di solito il numero di livelli e di NAND. La scelta del circuito minimo va fatta
confrontando tra di loro un certo numero di circuiti ottenuti per via diversa, derivanti dai due
procedimenti di:

a) Separazione delle variabili dirette da quelle negate su livelli diversi.


b) Aggiunta di termini ridondanti, per creare elementi comuni o stabilire itinerari
differenti.

Si voglia ad esempio realizzare il circuito la cui funzione di trasmissione e':

y x1 . x 2 x3 x4 x2.x3 .x 4

Utilizzando la procedura di sintesi illustrata al paragrafo precedente si ricava un circuito


con quattro gates e due invertitori. E' possibile viceversa manipolare opportunamente la
funzione, ottenendo:

y x1 . x 2 x3 x1 . x 4 x2 x3 .x3 .x 4

ottenendo il circuito di fig. 3.10.3 con cinque NAND e nessun invertitore.

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

e fattorizzando nella forma:

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.

3.11) La tecnica del bundling.


Nei circuiti realizzati in logica NAND e' possibile eliminare gli invertitori che
compaiono nel circuito, ad eccezione di quelli di ingresso, per mezzo di una tecnica chiamata
"bundling" (pagando pero' il prezzo di un maggior numero di ingressi per i rimanenti gates).
La tecnica qui descritta e' applicabile anche ai circuiti realizzati in logica NOR e si puo'
usare quando il segnale in uscita di un gate viene invertito per essere applicato all'ingresso di
un altro gate, come illustrato in fig. 3.11.1.

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

3.12) Sintesi dei circuiti NOR


Si e' gia' visto nel caso dell'analisi che un circuito NOR da' origine ad una funzione di
trasmissione in termini di prodotto di somme, e che ogni NOR, a parte la negazione o meno
delle variabili, si comporta come un AND o un OR secondo il livello occupato dal gate lungo
i diversi itinerari. Si puo' quindi eseguire la sintesi di un circuito NOR con gli stessi criteri
utilizzati per i circuiti AND-OR-NOT negando poi le variabili che entrano ai livelli dispari,
purche' la funzione sia espressa in termini di prodotto di somme.
Si voglia da esempio realizzare un circuito NOR, la cui funzione di trasmissione sia:

y x1 x 2 . x1 x 2 . x 3

Si ottiene la configurazione circuitale di fig. 3.12.1

_
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

3.13) Esempio di sintesi.


Si voglia realizzare un circuito capace di sommare due bit secondo le regole
dell'addizione binaria. Esso dovra' avere due uscite, S e R, di cui la prima rappresenta la
somma dei due bit, mentre la seconda e' il riporto al rango immediatamente successivo. La
relativa tavola di verita' e' la seguente:

79
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

A B S R
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

Le equazioni del circuito saranno quindi:

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 partire da tale espressione si ottiene finalmente il circuito di fig. 3.13.2.

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

1/2 1/2 1/2 1/2 1/2

r"
r s' 2
1 1
s , s s
0 r 1 n
2

r
2

figura 3.13.3

3.14) I circuiti multiterminali.


E' detto circuito multiterminale (MT) un circuito combinatorio a n ingressi e m uscite,
su ciascuna delle quali e' realizzata una diversa funzione y delle variabili x1, x2,.....,xn.
Circuito MT e' ad esempio il semisommatore binario esaminato al paragrafo precedente.
Il problema che i circuiti MT pongono e' quello dell'individuazione di termini comuni
alle diverse funzioni d'uscita, in modo da realizzare circuiti, che, mettendo in comune tra piu'
uscite le parti circuitali comuni, risultino piu' semplici e piu' economici. E' evidente che,
operando le semplificazioni separatamente sulle singole funzioni, le parti comuni alle diverse
uscite potrebbero andare perse.
Per funzioni fino a cinque variabili il metodo di semplificazione piu' rapido, anche se
non del tutto rigoroso, e' quello delle mappe di Karnaugh, mentre se il numero di variabili e'
maggiore o si volesse usare un procedimento assolutamente sistematico e' piu' conveniente
rifarsi al metodo analitico di Quine- McCluskey.

3.14.1) Semplificazione mediante le mappe di Karnaugh.


Il metodo di semplificazione per i circuiti MT mediante le mappe di Karnaugh viene
condotto secondo i seguenti passi:

1) Si riporta ognuna delle yi sulle mappe.

81
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

2) Si individuano su ciascuna mappa i sottoinsiemi che danno luogo alla forma


minima.
3) Si confrontano tutti gli insiemi cosi' individuati mettendo in comune quelli che
compaiono in almeno due mappe e spezzando quelli che possono essere
ottenuti come somma di piu' insiemi di altre mappe.
4) Per ogni uscita si scrivono le forme fattorizzate ricavate dai sottoinsiemi di cui
al passo 2 e 3 e si sceglie la forma piu' economica.

Si voglia, ad esempio, realizzare un circuito MT a 4 ingressi e tre uscite:

y1 0,4,6,7,10 ,14,15 m y2 4,5,6,7,11 ,12,13,14, 15 m

y3 0,1,4,5,9,10,11,13,14,15 m

In fig.3.14.1 sono riportate le relative mappe di Karnaugh.

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

Le espressioni minime a due livelli, ricavabili dalle mappe considerate separatamente,


sono:

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

e la relativa realizzazione circuitale in termini di AND-OR-NOT richiede 10 gates.


Spezzando gli insiemi x1 .x 3 e x1 .x 3 di y3 come illustrato in fig.3.14.1, si ha:

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.

3.14.2) Semplificazione dei circuiti multiterminali con il metodo tabellare.


Il metodo e' molto simile a quello illustrato in precedenza per i circuiti ad uscita singola.
La sua illustrazione, per esigenze di semplicita' di trattazione, verra' fatta con riferimento ad
un particolare esempio. Si voglia realizzare un circuito MT a quattro ingressi e tre uscite,
secondo la seguente tavola di verita':
x x x x y y y
1 2 3 4 1 2 3

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

a) Costruzione della prima tabella da cui partire con la semplificazione.


Vengono prese in considerazione tutte le configurazioni degli ingressi per cui almeno
una delle funzioni vale 1. Ad esse vengono aggiunte, come parte letterale, le configurazioni
delle uscite che valgono 1. Ad esempio, essendo per x1x2x3x4 = 0001 y1y2y3 =101, si avra'
un termine 0 0 0 1 y1 - y3. I termini cosi' ricavati sono ordinati in livelli allo stesso modo
gia' illustrato per le funzioni a singola uscita. Si ottiene:
_______________________________________
1 0 0 0 1 y1 - y3
4 0 1 0 0 - y2 y3
_______________________________________
6 0 1 1 0 y1 y2 -
5 0 1 0 1 - y2 y3
12 1 1 0 0 - y2 y3
10 1 0 1 0 - y2 y3
9 1 0 0 1 y1 - y
_______________________________________3
7 0 1 1 1 y1 y2 -
13 1 1 0 1 - y2 y3
14 1 1 1 0 y1 y2 y3
11 1 0 1 1 y1 - y3
________________________________________
15 1 1 1 1 y1 y2 y3
________________________________________

83
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

b) Confronti tra i termini e costruzione delle tabelle successive.


I confronti vanno ancora eseguiti tra tutti i termini di un livello e tutti i termini del
livello successivo. Sono semplificabili tutti i termini che differiscono per un solo bit, purche'
compaiano ambedue in almeno una funzione. Sono ad esempio semplificabili i termini:

0011 y1 - -
0001 y1 y2 -

dando luogo al termine:

00–1 y1 - -

mentre non sono semplificabili i termini:

0011 y1 - -
0001 - y2 y3

Si ottengono in tal modo le seguenti tabelle:

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.

c) Determinazione della copertura minima.


La determinazione della copertura minima si fa ancora con l'aiuto di un reticolo,
realizzato come se le funzioni di uscita dovessero essere tradotte in circuito in modo indi-
pendente. Il reticolo ha cioe' sulle ascisse i termini minimi delle singole funzioni da realizzare
e sulle ordinate gli implicanti primi individuati. Dall'esame del reticolo di fig. 3.14.1 si
riconoscono i seguenti implicanti essenziali:

A che copre i termini minimi 1 e 9 in y1 e y3.


B che copre i termini minimi 10 e 14 in y2 e y3.
F che copre i termini minimi 4, 5, 12 e 13 in y2 e y3.
G che copre i termini minimi 6, 7, 14 e 15 in y1 e y2.

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

Rimangono scoperti il termine minimo 11 in y1 e y3 e quello 15 in y3; l'implicante primo


D li copre entrambi.
Si ha in tal modo:

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

La realizzazione circuitale in termini di AND-OR-NOT richiede solamente 8 gates,


come e' illustrato in fig. 3.14.2.

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

3.15) Selettori e matrici.


I selettori sono particolari circuiti multiterminali; circuiti cioe' a n ingressi e 2n uscite,
ognuna delle quali assume valore 1 in corrispondenza ad una e una sola delle 2n con-
figurazioni possibili dell'ingresso.
Un selettore puo' ovviamente essere realizzato con 2n circuiti AND a n ingressi,
ciascuno dei quali sintetizza uno dei 2n termini minimi delle n variabili x1, x2,...., xn, come
illustrato in fig. 3.15.1.

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

I selettori prendono il nome di matrici quando sono realizzati secondo la particolare


tecnica circuitale illustrata in fig. 3.15.2 (a). In fig. 3.15.2 (b) e' riportata la relativa rappre-
sentazione simbolica.

_ _ _ _
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.

3.15.1) Matrici multiple.


n
Prendono il nome di matrici multiple i selettori in cui la scelta di una delle 2 uscite
viene fatta attraverso un certo numero di matrici parziali di 2 o 3 variabili, le cui uscite
vengono combinate in tutti i modi possibili ad un successivo livello. In fig. 3.15.3 e'
rappresentata una matrice multipla di 4 variabili realizzata con due sottomatrici da due
variabili ciascuna.

_ _
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

La ripartizione ottimale delle n variabili (n 5) in un selettore a matrici multiple si


ottiene ripartendo le variabili in due gruppi G1 e G2 il piu' possibile uguali tra di loro ed

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

SOTTOMATRICE SOTTOMATRICE DI 3 VARIABILI


DI COMBINAZIONE
24 DIODI
32 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

3.15.2) Matrici incomplete.


In una realizzazione a matrice multipla, se qualcuna delle 2n uscite non e' necessaria, il
numero di diodi da utilizzare diminuisce non solo nella matrice di combinazione dell'ultimo
stadio, ma anche in quelle degli stadi precedenti. La diminuzione dipende dalla ripartizione
delle variabili effettuata sulle varie matrici di ingresso. A titolo di esempio si voglia realizzare
il selettore di 5 variabili fra le cui uscite non compaiano i termini minimi della funzione:

y x1. x 2 . x 5 x 3

Si supponga di aver ripartito le variabili come illustrato in fig. 3.15.5.

_
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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

Il termine x1 .x 3 apporta una riduzione in M3 e M5 e per tenerne conto lo scriveremo


accanto a M3 e M5.; il termine x1 .x 2 .x5 da' invece luogo a una riduzione solo su M5 poiche' x1
e x2 appartengono a M3 e x5 a M2. Lo scriveremo allora solo in corrispondenza a M5. A parte
verra' poi preso in considerazione il prodotto delle variabili comuni x1 .x 2 .x3 .x5.
Ora in M3 21 uscite contengono il termine x 2 .x 3 e quindi la loro eliminazione fa ri-
sparmiare 6 diodi. In M5 23=8 uscite contengono il termine x1 .x 3 , mentre 22=4 uscite conten-
gono il termine x1 .x 2 .x5 e 21=2 uscite il termine x1 .x 2 .x3 .x5.Vengono quindi eliminate 8 + 4
-2=10 uscite con un risparmio di 20 diodi. In totale pertanto si risparmiano 26 diodi.
Con una diversa ripartizione delle variabili, quale ad esempio quella di fig. 3.15.6 si
risparmiano ancora 20 diodi in M5' , ma solamente 2 in M2'.

_ _
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.

3.16) Implementazione delle funzioni simmetriche.


Le funzioni simmetriche, in aggiunta alle proprieta' logiche messe in luce al capitolo II,
possiedono anche interessanti proprieta' aritmetiche.
Quando le variabili di simmetria di una funzione simmetrica vengono usate come
ingressi di un sommatore binario, le uscite di quest'ultimo realizzano le funzioni simmetriche
corrispondenti a quell'insieme di variabili.
Ad esempio, se le variabili di simmetria sono A, B, C, D il relativo sommatore binario
corrispondera' alla seguente tavola di verita':

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

S2 A.B. C . D A. B .C. D A. B . C .D A. B . C . D A .B.C. D


A .B. C .D A .B. C . D A . B .C.D A . B .C. D A . B . C .D
S 42,3 A, B, C, D

S3 A.B.C. D A.B. C .D A. B .C.D A. B . C . D A .B.C.D


A .B. C . D A . B .C. D A . B . C .D
S 41,3 A, B, C, D

Per ottenere le funzioni simmetriche elementari delle 4 variabili A, B, C, D le uscite del


sommatore binario possono essere combinate come illustrato in fig. 3.16.1.

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
Ý·®½«·¬· ½±³¾·²¿¬±®·
Ý¿°·¬±´± í

La disponibilita' di circuiti integrati che realizzano la funzione di sommatore binario fa


si' che l'implementazione di funzioni simmetriche diventi particolarmente semplice, operando
nel campo dell'aritmetica binaria piuttosto che in quello dell'algebra booleana.

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

La funzione assegnata puo' essere scritta come:

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

L'implementazione di questa funzione, ottenuta con i metodi di progetto tradizionali,


richiede, se realizzata con elementi NOR, 19 gates, senza contare gli invertitori necessari
La stessa funzione puo' tuttavia essere scritta come:

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

Sommatore s Sommatore s Sommatore s


binario binario binario S6
1,3,5

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 :

S53 A, B, C, D, E S52,3 A, B, C, D, E .S1,3,5


6
A, B, C, D, E

e la relativa realizzazione ottenuta con i sommatori e' riportata in fig. 3.16.3.

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

4.1) La macchina sequenziale.


Una macchina sequenziale o macchina a stati finiti M e' un automatismo ideale a n
ingressi e m uscite definito da:

1) Un insieme finito Q = q1, q2 ,...., qs di stati interni.


2) Un insieme finito I = i1, i2,...., ie di valori degli ingressi x1, x2,...,xn.
3) Un insieme finito W = w1, w2,..., wk di valori delle uscite z1, z2,...., zm.
4) Un insieme di regole detto mappa di transizione che specifica lo stato q'
raggiunto dalla macchina a partire dallo stato q per effetto dell'ingresso i.
5) Un insieme di regole detto mappa delle uscite U che specifica il valore w' as-
sunto dalle uscite z1,....,zm per effetto dell'ingresso i applicato allo stato q.

La macchina sequenziale e' pertanto definita dai cinque insiemi citati.

M Q, I, W, , U

Si dicono complete, o completamente specificate, le macchine che a partire da ogni


stato ammettono qualsiasi valore di ingresso, specificando per ognuno di essi i valori q' e w';
incomplete in caso contrario. Si dice sequenza degli ingressi, delle uscite o degli stati
qualsiasi successione ordinata di elementi di I,W o Q.
Una macchina sequenziale viene di solito rappresentata con un grafo, detto diagramma
degli stati, che puo' essere assegnato in due forme diverse, dette rispettivamente modello di
Moore o modello di Mealy. Nel primo le uscite della macchina dipendono unicamente dallo
stato. Ogni stato q e' rappresentato da un nodo del grafo; i nodi sono a loro volta collegati da
segmenti orientati secondo quanto stabilito dalla mappa di transizione.
In fig. 4.1.1 e' riportato il diagramma secondo il modello di Moore di una macchina
incompleta a tre stati.

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

Le due rappresentazioni di Moore e Mealy sono perfettamente equivalenti. Per passare


dal diagramma degli stati secondo Moore a quello secondo Mealy e' sufficiente eliminare
l'uscita da ogni nodo riportandola sui segmenti orientati entranti nel nodo stesso. Un esempio
e' illustrato in fig. 4.1.4.

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
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì

Si abbia ad esempio la macchina sequenziale rappresentata con il modello di Mealy di


fig. 4.1.5.
Mentre lo stato q3 viene raggiunto da due segmenti orientati, ciascuno con uscita pari a
1, lo stato q4 e' raggiunto da due segmenti orientati ciascuno relativo a un diverso valore
dell'uscita. Esso va quindi sdoppiato, nella rappresentazione secondo Moore,in due stati
diversi q41 e q40 come illustrato in fig. 4.1.6.

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

Quale ulteriore esempio si voglia determinare il diagramma di stato di una macchina M


ad un ingresso e tre uscite Z1, Z2, Z3 una sola delle quali ha valore 1. Se Zj e' l'uscita a 1, al
variare dell'ingresso da 0 a 1 Zj si annulla, mentre passa a 1 Zj+1.
Si intuisce immediatamente che l'uscita dipende unicamente dallo stato; e' semplice
quindi ricavare il diagramma secondo il modello di Moore, come illustrato in fig. 4.1.9 (a),
mentre in fig. 4.1.9 (b) e' riportato il diagramma degli stati della stessa macchina secondo
Mealy.

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
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì

4.2) Alcune definizioni relative alle macchine sequenziali.


1) Uno stato qj di una macchina M si dice stabile se ogni ingresso che porta a qj lascia la
macchina in qj . In fig. 4.2.1 (a) e' illustrato un esempio di stato stabile.
2) Uno stato qj di una macchina M si dice instabile se esiste almeno un ingresso i che
porta a qj e successivamente fa evolvere la macchina verso uno stato qk diverso da qj. Un
esempio e' riportato in fig. 4.2.1 (b)

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.

4.3) Minimizzazione degli stati di una macchina sequenziale.


E' bene notare che una macchina sequenziale e' caratterizzata non tanto dalla forma del
suo diagramma di stato o dal numero degli stati, quanto dalla corrispondenza tra l'insieme
delle sequenze di ingresso e l'insieme delle sequenze di uscita.
Si supponga ora che esistano due stati qj e qk tali che:

1) Qualsiasi sequenza di ingresso i = i1, i2,...., ip applicabile a qj sia anche


applicabile a qk.
2) L'uscita finale w(qpk,ip ) sia sempre uguale a w(qpj,ip ), qualunque sia i,
avendo indicato con qpj lo stato finale raggiunto a partire da qj per effetto di
i.

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

allora non e' detto che sia:

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.

4.4) Minimizzazione degli stati con il metodo di Ginsburg.


Il procedimento di minimizzazione degli stati proposto da Ginsburg e' uno dei piu'
semplici tra i tanti proposti allo scopo e si applica alla tavola di flusso della macchina da mi-
nimizzare. E' un procedimento esaustivo e fornisce tutte e sole le coppie di stati compatibili
(o eventualmente equivalenti) della macchina M.
Prima di applicare il metodo e' comunque conveniente eliminare dalla tavola di flusso
gli stati doppi. Sono cosi' definiti quegli stati che hanno ugual valore di prossimo stato e di
uscita in corrispondenza a ciascun ingresso. Se esiste quindi uno stato q' doppio di q, esso puo'
venir eliminato dalla tavola di flusso cancellando la riga q' e sostituendo ovunque q' con q. Un
esempio di eliminazione di uno stato doppio e' riportato in fig. 4.4.1.

stato i1 i2 stato i1 i2

1 2/1 3/0 1 2/1 3/0


2 3/0 4/1 2 3/0 1/1
3 2/1 1/0 3 2/1 1/0
4 2/1 3/0

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

1) Ogni Si contenga solo stati compatibili.


2) Ogni stato qj di M sia contenuto in almeno un sottoinsieme Si. Se M e'
una macchina completa qj comparira' in uno solo degli Si.
3) Per ogni ingresso i e ogni sottoinsieme Sj esista un Sk tale che
l'ingresso i faccia evolvere tutti gli stati di Sj in stati di Sk.

I sottoinsiemi S definiscono una partizione sull'insieme degli stati di M e ciascuno di


essi puo' essere sostituito da un unico stato, giungendo in tal modo alla macchina minima M'.
Nel seguito sono riportati alcuni esempi di minimizzazione del numero degli stati.

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

1,5 4,6 4,6 4,6


2,4 5,5 4,6 2,2
2,6 5,1 4,6 2,2
4,6 5,1 6,6 2,2

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:

2,4 2,6 4,6

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:

S1 = {1,5} S2 = {2,4,6} S3 = {3}

Fondendo ora gli stati di ciascun sottoinsieme in un unico stato, si ottiene la macchina
minima M', la cui tavola di flusso e':

Stati equivalenti Stati di M' i i i


1 2 3

1,5 1' 2'/00 2'/11 2'/11


2,4,6 2' 1'/01 2'/10 2'/01
3 3' 2'/00 1'/00 2'/00

101
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì

Il diagramma degli stati di M' e' riportato in fig. 4.4.3.

i 2 /10
i3 /11
i 1/00
1' 2' i 3 /01
i 2 /11
i 1 /01

i 2 /00 i 1/00 i 3 /00

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:

2,4 3,7 3,8 7,8

La tabella di evoluzione delle coppie di stati e' riportata in fig. 4.4.4.

Coppie di stati i i i i
1 2 3 4

2,4 6,6 4,4 1,1 3,7


3,7 3,7 6,6 4,2 8,8
3,8 3,1 6,8 4,4 8,6
7,8 7,1 6,8 2,4 8,6

figura 4.4.4

102
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì

Dall'esame di tale tabella si ricava che:

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.

Rimangono allora le coppie di stati equivalenti 2,4 e 3,7. La partizione eseguibile


sull'insieme degli stati della macchina M di partenza e' allora:

{1} {2,4} {3,7} {6} {8}

La macchina equivalente minima M' e' :

Stati di M Stati di M' i i i i


1 2 3 4

1 1' 1'/4 2'/1 4'/3 4'/4


2,4 2' 4'/3 2'/3 1'/1 3'/4
3,7 3' 3'/3 4'/2 2'/4 5'/1
6 4' 3'/1 1'/3 4'/2 3'/3
8 5' 1'/3 5'/2 2'/4 4'/1

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

1,2 1,3 2,1


1,3 1,2 2,1

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}

e la macchina minima e':

103
Ý»²²· -«´´» ³¿½½¸·²» -»¯«»²¦·¿´·
Ý¿°·¬±´± ì

Stati di M Stati di M' i1 i2

1,2 1' 2'/1 1'/1


1,3 2' 1'/0 1'/1

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:

1,4 1,5 1,6 2,3 2,6 3,6 4,5 4,6 5,6

La tabella di evoluzione delle coppie di stati e' riportata in fig. 4.4.5.

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:

1,4 1,5 1,6 4,5 4,6 5,6

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:

Stati di M Stati di M' i1 i2 i3 i4


1,4,5,6 1' 1'/1 1'/0 1'/1 3'/1
2 2' 3'/- 2'/1 1'/- 1'/0
3,6 3' 1'/1 1'/1 1'/1 3'/0

Si noti che in questo caso la macchina minima che si ricava e' ancora una macchina
incompleta.

105
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

CAPITOLO V
I CIRCUITI SEQUENZIALI

5.1) Introduzione ai circuiti sequenziali.


I circuiti considerati fino a questo punto sono stati i circuiti combinatori. Si consideri
ora il modello generale di un circuito di commutazione, illustrato in fig. 5.1.1.

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:

zj = Fj (x1, x2, ....., xn)

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

Gli ingressi S e R corrispondono a quelli S e C di fig. 5.2.1, mentre l'uscita Q corri-


sponde a Y, quella Q a X.
Il funzionamento del circuito e' riassunto in modo completo nella tabella di fig. 5.2.2
(b). S, R e Qn indicano il valore degli ingressi e dell'uscita all'arbitrario istante tn, mentre Qn+1
indica il valore assunto dall'uscita nell'istante immediatamente successivo per effetto degli
ingressi applicati all'istante tn.

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)

ottenuta sfruttando le condizioni d.c.c. e imponendo il vincolo

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:

Un circuito sequenziale sincronizzato da un impulso di clock puo'


cambiare stato solo in corrispondenza a tale impulso e cambiera'
stato non piu' di una volta per ciascun impulso di clock.

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

La tavola di verita' e le equazioni che reggono il funzionamento del flip-flop sono le


stesse del flip-flop RS non sincronizzato (detto anche asincrono); in questo caso tuttavia S, R
e Qn indicano i valori presenti durante l'impulso di clock, mentre Qn+1 si riferisce al valore
assunto dall'uscita immediatamente dopo tale impulso.
Malgrado che il flip-flop RS sincrono sia assolutamente adatto a qualsiasi realizzazione
circuitale, esso e' raramente usato in pratica, essendo stato praticamente soppiantato dal tipo
JK. In quest'ultimo il vincolo che ambedue gli ingressi non possano essere 1 allo stesso istante
viene a cadere. Il relativo simbolo e la tavola di verita' sono riportati in fig. 5.2.4.

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

Si noti che il flip-flop JK e' identico a quello RS con J corrispondente a S e K a R


eccetto quando ambedue gli ingressi valgono 1, caso in cui il flip-flop comunque cambia
stato.

109
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

L'equazione del flip-flop JK e':

Qn 1 K. Q n J .Q n

Il flip-flop JK e' sempre sincronizzato.


Un ulteriore tipo di flip-flop e' il flip-flop T in cui il trigger (clock) e' il solo segnale di
ingresso. Ogni volta che un impulso si presenta all'ingresso T il flip-flop cambia stato, in
modo che l'equazione che lo regge e' semplicemente:

Qn 1 Qn

In realta’, in termini generali, il tipo T ha due ingressi separati; l’ingresso T e l’ingresso


di clock e la definizione del suo funzionamento dovrebbe essere: “all’arrivo delll’impulso di
clock il flip-flop commuta solo se l’ingresso T vale 1”. Da questo punto di vista e’ facile
verificare che l’equazione di funzionamento e’ Q n 1 Q n .T n Q n .Tn Q n Tn . Tuttavia
molto spesso l’ingresso di clock ed quello T sono connessi assieme e l’equazione di
funzionamento si riduce di conseguenza a quella citata piu’ sopra.
Si noti che un flip-flop JK diviene un flip-flop T se ambedue gli ingressi J e K vengono
mantenuti costantemente assieme e utilizzati come ingresso T.
Infine un quarto tipo di flip-flop e' quello di tipo D. In esso l'uscita dopo un impulso di
clock e' uguale al valore presente all'ingresso D all'istante di clock.
L'equazione che lo regge e':

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

(a) (b) (c)

figura 5.2.5

5.3) Motivi che consigliano la scelta dei circuiti sequenziali.


Nei paragrafi precedenti sono stati presi in esame alcuni sistemi sequenziali, ed e'
abbastanza evidente che parecchi sistemi fisici si comportano in tal modo; tra l'altro gli stessi
flip-flop appena esaminati sono chiaramente sistemi sequenziali.

110
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

Ora quando un progettista si trova a dover affrontare un problema di natura logica la


prima domanda che gli si presenta con riferimento all'implementazione e' se usare un circuito
di tipo combinatorio o di tipo sequenziale.
A titolo di esempio si consideri il progetto di una macchina per il gioco di quello che
comunemente viene chiamato "filetto".
Tale gioco consiste in nove riquadri che i giocatori riempiono alternativamente con un
loro simbolo fino a realizzare una sequenza di tre simboli dello stesso tipo allineati. Ogni
riquadro quindi e' vuoto oppure contiene l'uno o l'altro simbolo. Le diverse configurazioni che
la tabella puo' assumere sono quindi 39 = 16683.
Il gioco debba svolgersi tra uomo e macchina; la macchina dovra' evidentemente
consistere in un sistema logico in grado di decidere quale mossa debba essere fatta in risposta
alla mossa del giocatore umano.
E' evidente che la progressione del gioco e' sequenziale, ma non e' affatto necessario che
il giocatore macchina sia un dispositivo sequenziale. Essa infatti puo' essere un dispositivo
combinatorio che riceve come ingressi la situazione della tabella a un dato istante e decide la
mossa da fare solamente sulla base di tale informazione. Le specifiche di tale circuito saranno
pertanto:

Data qualsiasi tra le 16683 possibili combinazioni di ingresso, scegliere


l'uscita piu' opportuna tra le 9 possibili.

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

che in una realizzazione di tipo NAND richiede 21 gates.


Se pero' gli 8 bit fanno parte di una parola da trasmettere a grande distanza, l'usare 8
linee, una per bit, e' notevolmente costoso. Si preferisce usare una sola linea su cui inviare in
successione gli 8 bit e eventualmente una seconda linea su cui vengono inviati opportuni
impulsi di sincronizzazione.
Il circuito di controllo di parita' potrebbe allora essere realizzato memorizzando i bit
finche' tutti e 8 non fossero presenti. Questo sarebbe tuttavia un modo di affrontare il
problema poco efficiente, richiedendo oltre ai 21 gates gia' visti anche 8 flip-flop.
Ricordando pero' che l'OR esclusivo e' associativo, si puo' scrivere:

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
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

5.4) Considerazioni sul grado di serializzazione, costo e velocita'.


Situazioni quali quelle descritte al paragrafo precedente, in cui le informazioni da
elaborare giungono in maniera sequenziale, conducono spontaneamente alla scelta di circuiti
sequenziali. Poiche' essi di solito usano le stesse parti circuitali su porzioni successive di in-
formazione e' possibile in genere ottenere una notevole economia per quanto riguarda la
realizzazione circuitale.
Se invece tutte le informazioni necessarie sono disponibili simultaneamente, e' ab-
bastanza naturale che anche la loro elaborazione sia condotta in parallelo.
Anche in questo caso d'altra parte, se la natura del problema e' tale da poterlo spezzare
in parti il piu' possibili simili tra loro , puo' essere vantaggioso serializzare deliberatamente il
problema per ottenere vantaggi di ordine economico. Il grado di serializzazione dipendera'
ovviamente da un compromesso tra costo e velocita' operativa.
Vi e' in effetti un gran numero di fattori complessi che determinano il grado di se-
rializzazione piu' opportuno, alcuni dei quali possono essere illustrati dall'esempio che segue.
Si supponga di dover leggere una parola di memoria in un registro da 32 bit e di dover
eseguire su di essa il controllo di parita'. Poiche' tutti i bit sono presenti al medesimo istante,
sembrerebbe logico usare un circuito combinatorio. Tuttavia il piu' economico circuito
realizzabile richiederebbe una struttura a 10 livelli con 93 gates.
Il circuito di fig. 5.3.1 puo' invece eseguire il test di parita' su un qualsiasi numero di bit,
e quindi anche su 32, purche' essi siano presentati in forma sequenziale. Un circuito in grado
di soddisfare i requisiti richiesti e' quello di fig. 5.4.1. Gli impulsi di orologio pilotano un
contatore binario da 5 bit, la cui uscita viene decodificata con un selettore. Il decodificatore a
sua volta produce un impulso, uno per ciascun periodo di clock, che mediante delle porte
AND presenta uno alla volta i 32 bit all'ingresso del circuito di verifica della parita'.

registro a 32 bit
b bi b31
0
Contatore
decoder i
Clock a 5 bit

31

Verifica di parita'

figura 5.4.1

Usando il circuito piu' semplice possibile per contatore e decodificatore il circuito


descritto richiede 6 flip-flop e 72 gates. La realizzazione combinatoria e quella sequenziale
sono quindi di costo comparabile. Tuttavia in un calcolatore il contatore e il decodificatore
possono essere usati per altri scopi e quindi il loro costo grava solo in parte sul circuito per il
test di parita'.
Ne discende l'ovvio principio che la valutazione di qualsiasi circuito va fatta in rife-
rimento all'intero sistema. Una valutazione dei costi deve evidentemente tener conto di ogni

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

A partire da una realizzazione totalmente parallela si avra' una continua diminuzione di


costo e di velocita' via via che si procede verso quella totalmente seriale. Molto spesso tuttavia

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.

5.5) Registri a scorrimento e contatori.


In fig. 5.3.1 e' stato illustrato un circuito sequenziale che impiega un unico flip-flop.
Nelle applicazioni pratiche avviene spesso che vi sia la necessita' di memorizzare piu' di un bit
di informazione; in generale la quantita' di informazione che un circuito puo' memorizzare e'
direttamente legata al numero di flip-flop presenti nel circuito stesso. In particolare i registri a
scorrimento e i contatori presentano molto chiaramente una corrispondenza uno a uno tra
capacita' di memorizzazione dell'informazione e il numero di flip-flop.

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

5.6) Un modello generale per i circuiti sequenziali.


Da quanto visto, anche attraverso gli esempi, nei paragrafi precedenti, un circuito
sequenziale funziona correttamente se e' in grado di conservare in qualche organo di memoria
le informazioni relative agli ingressi passati. Si definisca pertanto stato di un circuito
sequenziale all'istante t la configurazione della sua memoria in quell'istante. Due identiche
configurazioni di ingresso potranno dare uscite diverse se coesisteranno con due diversi stati
del circuito. Le uscite sono cioe' funzione sia dell'ingresso che dello stato. Si puo' allora
realizzare un modello generale di circuito sequenziale secondo quanto illustrato in fig. 5.6.1
Le informazioni sugli eventi passati sono memorizzate nelle r variabili y, che prendono
r
il nome di variabili di stato o variabili interne.Ciascuna delle 2 combinazioni delle variabili y
definisce uno stato della memoria e in generale ciascun stato corrisponde ad una particolare
combinazione di eventi passati. La sezione logica combinatoria riceve quali ingressi le r
variabili di stato y e gli n ingressi del circuito x . Essa genera m uscite z e p variabili di
eccitazione y'. Le variabili di eccitazione sono spesso in numero uguale alle variabili di stato,
ma in generale il loro numero dipende dal tipo di memoria usato.

x1 z1
x2 z
2

xn zm

Rete
y1 combinatoria y'
1

yr y'p

Memoria

figura 5.6.1

La rete combinatoria puo' evidentemente essere definita dalle equazioni booleane

zi f i x1 , x 2 ,..., x n , y1 , y 2 ,..., y r i 1,2,...,m (5.6.1)

116
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

y'i g i x 1 , x 2 ,..., x n , y1 , y 2 ,..., y r i 1,2,...,p

Le prime vengono chiamate equazioni di uscita, mentre le seconde sono le equazioni


di stato o equazioni interne. Esse sono evidentemente indipendenti dal tempo, cioe' valgono
per tutto il tempo in cui gli ingressi e le uscite si mantengono stabili.
Non e' possibile specificare le equazioni che legano le y' alle y in quanto dipendono dal
tipo di memoria usato, che puo' essere qualsiasi, come ad esempio una matrice di elementi di
memoria a ferrite, dei flip-flop o ancora semplicemente un insieme di anelli di reazione in cui
siano inseriti degli elementi di ritardo.
In quest'ultimo caso evidentemente p=r e vale:

yt y' t

con pari al tempo di ritardo.


Comunque sia, la combinazione delle variabili y che si avra' al tempo t+ per effetto
delle y' presenti all'ingresso della memoria all'istante t, prende il nome di stato futuro.

5.7) Funzionamento sincrono e a impulsi del modello fondamentale.


Un modello per il funzionamento sincrono di un circuito sequenziale si ottiene quando
si assume che la memoria del modello fondamentale permetta il trasferimento
dell'informazione dall'ingresso all'uscita solamente in corrispondenza ad un segnale di sin-
cronizzazione. Un circuito di tal tipo viene detto "sincrono" o clock mode.
In pratica i circuiti sequenziali sincroni si realizzano utilizzando quali elementi di
memoria i flip-flop, di qualunque tipo essi siano, purche' sincronizzati da un clock. Al limite,
per quanto riguarda il modello fondamentale di circuito sequenziale sincrono, la realizzazione
della rete di memoria non ha importanza. E' sufficiente che lo stato e gli ingressi possano
variare solo in istanti equintervallati.
Tutti i segnali e le uscite della rete combinatoria sono segnali a livelli, segnali cioe' che
possono assumere uno dei due livelli logici per periodi di tempo arbitrari. Le uscite e le
variabili di eccitazione, essendo la rete combinatoria indipendente dal tempo, possono variare
in qualsiasi istante in risposta ad una variazione dell'ingresso. Le variabili di stato tuttavia
possono variare solamente quando la memoria e' abilitata dal segnale di sincronizzazione.
E' evidente che il segnale di sincronizzazione non contiene informazione su come debba
variare lo stato, ma semplicemente temporizza il cambiamento. Tutta l'informazione e'
contenuta nelle variabili di eccitazione.
Gli istanti di clock vengono indicati con tn (n = 1,2,3,.....). All'istante generico tn le
variabili di eccitazione devono essere stabili e dipendono dai valori correnti delle variabili xi e
yi. L'impulso di clock, che arriva all'istante tn , causa la transizione delle variabili di stato da yn
n+1
a y = f (y'n) ponendo il circuito in un nuovo stato. Le variabili di uscita e di eccitazione a
loro volta commutano, sia per la variazione dello stato che per un'eventuale variazione di
ingresso e devono raggiungere dei nuovi livelli stabili prima che pervenga il prossimo impulso
di clock.
Per chiarire quanto illustrato si esamini il circuito di fig. 5.7.1, in cui gli elementi di
memoria siano sincronizzati da impulsi distanti tra di loro .

117
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

y' y
1 1
M1
X

y'2 y
2
M2 z

figura 5.7.1

Le equazioni di uscita e di stato sono rispettivamente

z y2
y'1 y1 . y 2 x . y 2 (5.7.1)
y' 2 x .y1

Ponendo y 1 t 0 y2 to 0 si ricava dalle (5.7.1) che in corrispondenza a


x 0 si ha:

y'1 t 0 y' 2 t 0 0

che sono i valori che le variabili di stato assumono all'istante t1 = t0 + .


Se in t1 x passa da 0 a 1 si ha:

y'1 t 1 0 y' 2 t 1 1

Ragionando in maniera analoga si ottengono i risultati raccolti nella tabella 1, dalla


quale e' immediato ricavare l'evoluzione del circuito in corrispondenza di una determinata
sequenza di ingresso applicata ad uno stato iniziale prefissato.
TABELLA 1
ingresso stato a t stato a t + Uscita
0 00 00 0
0 01 00 1
0 10 00 0
0 11 10 1
1 00 01 0
1 01 11 1
1 10 00 0

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/0 0/0 1/1

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.

5.8) Problemi di temporizzazione e flip-flop master-slave.


Al paragrafo 5.2 e' stato fatto notare a proposito dei flip- flop che il clock deve avere
una durata minima per assicurare un corretto funzionamento. Questa tuttavia non e' la sola
specifica da rispettare. Una prima ovvia considerazione, che si applica sia ai circuiti logici
combinatori che a quelli sequenziali, e' che l'intervallo tra due successive variazioni della
stessa variabile deve essere non inferiore al tempo di ritardo del circuito logico. Se, ad
esempio, il tempo di ritardo di una porta logica fosse di 10 nsec., essa non potrebbe certa-
mente rispondere a variazioni del segnale che distino 5 nsec.
Esiste inoltre tutta una serie di altri problemi che si presenta anche nei flip-flop sincroni.
Con riferimento alla fig. 5.2.1 ed ai relativi diagrammi di temporizzazione, si supponga
che il segnale S ritorni a 0 prima dell'istante t3, in cui commuta l'uscita Y. E' evidente che il
flip-flop in questo caso non e' correttamente pilotato. Cio' porta a concludere che l'impulso di
comando deve avere una durata minima, di solito specificata dal costruttore del dispositivo,
determinata principalmente anche se non unicamente dal ritardo dei gates.
Per lo stesso motivo due impulsi non possono succedersi troppo rapidamente impo-
nendo in tal modo un limite superiore alla massima frequenza di clock.
A causa di fattori, troppo complessi e di scarso interesse per venir esaminati in questa
sede, il minimo intervallo tra due impulsi successivi e' generalmente molto maggiore che non
la durata minima del singolo impulso.
I vincoli sulla durata dell'impulso e sulla massima frequenza di ripetizione del clock si
applicano a tutti i flip-flop senza alcun riferimento a come essi vengano usati.
Quando pero' il flip-flop viene usato in un circuito sincrono sorgono altri problemi. Si e'
gia' detto che l'arrivo di un impulso di clock fa commutare lo stato in accordo con i valori
delle variabili di eccitazione. Si supponga ora che la commutazione delle uscite dei flip-flop

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

In assenza di segnali ai terminali di ingresso, l'uscita del flip-flop 1 e di quello 2 sono


uguali. Quando viceversa e' presente un segnale ai terminali di ingresso, durante l'intervallo in
cui il clock e' 1 il flip-flop 1 si porta nello stato che gli compete in funzione degli ingressi,
mentre il flip-flop 2 non modifica il suo stato essendo i gates 2 chiusi.
Successivamente, durante l'intervallo in cui il clock e' 0, il flip-flop 1 viene isolato dagli
ingressi, chiudendo le porte 1, mentre l'apertura delle porte 2 trasferisce l'informazione
all'uscita z.
Considerando ora un circuito sequenziale sincrono che contenga solo flip-flop master-
slave e' evidente che la variazione di stato e quindi l'eventuale modifica delle variabili di
eccitazione avviene quando le porte 1 di ingresso del flip-flop sono chiuse. Quindi per ciascun
impulso di clock si puo' avere un'unica variazione di stato, indipendentemente dalla durata
dell'impulso di clock stesso. I cambiamenti di stato si hanno evidentemente in corrispondenza
del fronte di discesa dell'impulso di clock.
Un secondo tipo di flip-flop che permette il cambiamento di stato in corrispondenza al
fronte di salita dell'impulso di clock, e che permette anch'esso di evitare gli inconvenienti
messi in luce in questo paragrafo, e' il flip-flop "edge triggered" che si basa su altri principi di
funzionamento.
Si noti tuttavia che, anche usando tali tipi di flip-flop, quando il clock di uno o piu' di
essi e' spostato rispetto al clock degli altri flip-flop, puo' ugualmente verificarsi una tran-

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.

5.9) Funzionamento asincrono del modello fondamentale.


Sia il funzionamento sincrono a livelli che quello ad impulsi, gia' descritti ai paragrafi
precedenti, richiedono che la transizione di stato avvenga solo in coincidenza di ben precisi
istanti, cioe' tramite un'opportuna temporizzazione. Vengono quindi imposti dei vincoli alla
struttura del circuito e alla velocita' cui esso puo' funzionare.
Si puo' pero' pensare di far funzionare il modello fondamentale eliminando tali vincoli;
il funzionamento cioe' avviene sempre secondo le (5.6.1), ma senza alcuna sincronizzazione.
La memoria in tal caso e' data da semplici elementi di ritardo sulla catena di reazione.
Un circuito di tal tipo viene detto "asincrono" o level mode. Se si impone inoltre che i
segnali di ingresso varino uno solo alla volta e che dette variazioni non possano avvenire se
non quando i ritardi sono inattivi si hanno notevoli semplificazioni circuitali; si parla in tal
caso di funzionamento in modo fondamentale. E' intuitivo che la variazione simultanea di
piu' di un ingresso puo' causare problemi, poiche' in realta' gli eventi non possono mai essere
contemporanei. L'effettiva risposta del circuito dipende quindi dalla sequenza, generalmente
non conosciuta, con cui le variazioni si presentano.
Si puo' notare che il circuito asincrono e' il piu' generale tipo di circuito sequenziale, nel
senso che puo' rispondere a qualsiasi tipo di segnale, sia esso a impulsi o a livelli. Infatti la
distinzione tra impulso e livello e' una pura questione di definizione; fisicamente un impulso
puo' essere considerato costituito da due successive variazioni di un segnale a livelli che
avvengono a breve distanza di tempo. Differente e' invece l'interpretazione; in un circuito a
impulsi l'ingresso impulsivo viene visto come un singolo evento che da' luogo ad un unico
cambiamento di stato. In un circuito asincrono un impulso viene considerato come due eventi
distinti, ciascuno dei quali puo' causare una variazione di stato.
Per illustrare il funzionamento asincrono del modello fondamentale si consideri il
circuito di fig. 5.9.1.

y'1
z
x
y'2

y2
2

y1
1

figura 5.9.1

Esso corrisponde perfettamente al modello fondamentale, quando in 1 e 2 si con-


siderino concentrati tutti i ritardi della parte combinatoria del circuito.

122
#
× ½·®½«·¬· -»¯«»²¦·¿´·
Ý¿°·¬±´± ë

Si supponga che a partire dalla situazione iniziale


x y1 y2 y'1 y'2 0
tutte le variazioni dell'ingresso avvengano a intervalli , con
max 1, 2

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

Ponendo poi = 1 = 2 = 3 = 4, si ha:

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)

a) Stato stabile quello che per qualsiasi j soddisfa la condizione:

y' j t yj t

b) Stato instabile quello per il quale, in corrispondenza ad almeno un j, si ha:

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

Inserendo infine il ritardo , secondo quanto illustrato in precedenza, si ottiene la


struttura di fig. 6.2.4 (b), formalmente identica al modello fondamentale. In essa sono imme-
diatamente individuabili le variabili di stato e quelle di stato futuro.
Le equazioni di stato e di uscita che si ricavano sono:

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

La prima contiene tutte le informazioni relative all'evoluzione dello stato e permette di


distinguere immediatamente gli stati instabili da quelli stabili. In ogni casella e' riportato il
valore assunto dalla variabile di eccitazione in funzione dello stato e dell'ingresso.
Sono stabili quelle condizioni in cui lo stato futuro coincide con lo stato attuale.
Instabili sono invece le condizioni in cui cio' non si verifica. Gli stati stabili vengono di solito
contraddistinti cerchiandoli per evidenziarli.
La tabella va interpretata nel modo seguente:
Si supponga di trovarsi in una condizione stabile, ad esempio con RSy = 000. Variando
l'ingresso e portandolo a RSy = 010, la variabile di eccitazione y' passa da 0 a 1, determinando
una condizione instabile. La variazione dell'ingresso viene pertanto rappresentata sulla matrice
di eccitazione da uno spostamento in orizzontale.
Poiche' il circuito e' asincrono e funziona in modo fondamentale, gli ingressi devono
rimanere costanti finche' non si raggiunge una nuova condizione di stabilita'. Cio' avviene
dopo un tempo , quando il valore assunto da y' viene trasferito a y, quando cioe' lo stato
futuro diviene stato presente. Cio' corrisponde sulla matrice di eccitazione ad uno spostamento
verticale nella colonna RS = 01.
Riassumendo si puo' pertanto dire che sulla matrice di eccitazione gli spostamenti
orizzontali sono provocati da una variazione degli ingressi, mentre quelli verticali sono
spontanei e sono provocati dall'evoluzione del circuito dalla condizione instabile, in cui viene
a trovarsi per la variazione dell'ingresso, verso una nuova condizione stabile.

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

0 0 /01 1 /00 0 /00 0 /01

1 1 /10 1 /10 0 /10 0 /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

I diagrammi ottenuti possono a prima vista differire da quanto illustrato in precedenza


per il flip-flop RS. In realta', per motivi che verranno illustrati in seguito, si evita che in un
circuito sequenziale asincrono due ingressi possano variare contemporaneamente. Tale

127
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

assunzione riporta quindi il funzionamento del circuito analizzato a quello gia' illustrato per il
flip-flop RS.

6.3) Transizioni multiple, cicli di instabilita' e corse.


Nel corso del procedimento di analisi possono presentarsi casi piu' o meno complessi
che meritano un'illustrazione particolare.

6.3.1) Transizioni multiple


Si ha una transizione multipla quando allo stato stabile si giunge attraverso un certo
numero di stati instabili diversi, come illustrato nella tavola di flusso di fig. 6.3.1 (a).
Il verificarsi di una condizione di questo genere non comporta alcun inconveniente
particolare, al di la' di un prolungamento del tempo di transitorio.
Per tale motivo le transizioni multiple vengono spesso utilizzate, come si vedra' nel
seguito, a scopo di semplificazione durante il procedimento di sintesi.

Ingresso Ingresso
Stato Stato
0 1 0 1

000 000 001 000 000 001

001 011 001 011

--- ---
011 111 011 111

111 111 111 000

(a) (b)
figura 6.3.1

6.3.2) Cicli di instabilita'


Il fenomeno e' del tutto analogo a quello delle transizioni multiple, con la differenza che
non si raggiunge alcun stato stabile, ma viene percorso con continuita' un ciclo fintantoche'
non viene variato l'ingresso (figura 6.3.1 (b)).
Una condizione di tal genere e' di solito determinata da un errore di progetto.
E' opportuno notare che le transizioni multiple e i cicli di instabilita' derivano dalla
struttura logica della tavola di flusso e sono facilmente individuabili per semplice ispezione di
quest'ultima.
Non altrettanto puo' dirsi per il fenomeno delle corse che prendono origine dal mancato
verificarsi di una delle ipotesi fatte introducendo il modello fondamentale, e cioe' che i ritardi
nei loop di reazione siano tutti uguali.

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

000 000 011

001 001

010 010

011 011

---

figura 6.3.2

A partire dallo stato stabile 000 la commutazione dell'ingresso x da 0 a 1 fa si' che


commutino le variabili y2 e y3. A causa dei differenti tempi di ritardo durante il transitorio di
commutazione la situazione delle variabili di eccitazione potrebbe essere 001 oppure 010
anziche' 011. Se inoltre il periodo transitorio fosse sufficientemente lungo l'evoluzione del
circuito porterebbe agli stati stabili 010 o 001 rispettivamente. Un fenomeno di tal genere
prende il nome di corsa critica e puo' portare ad un comportamento diverso da esemplare ad
esemplare di circuito prodotto. E' opportuno tuttavia rimarcare che per il verificarsi di una
corsa critica devono essere soddisfatte due condizioni necessarie:
1) La variazione dell'ingresso deve comportare la variazione di due o
piu' variabili di eccitazione.
2) La colonna relativa al valore finale dell'ingresso deve contenere piu' di
uno stato stabile.
Si parla invece di corse non critiche quando, pur essendo verificata la prima delle due
condizioni appena esposte, lo stato finale raggiunto e' sempre quello desiderato. Un esempio
di circuito per il quale sono possibili corse non critiche e' illustrato nella tavola di flusso di fig.
6.3.3.
x
y1 y 2 y3
0 1

000 000 011

001 011

010 011

011 011

---

figura 6.3.3

Nel seguito si riporta un esempio di analisi di un circuito sequenziale asincrono.

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

Riportando tutti i ritardi di propagazione nei loop di reazione si ottiene la struttura


circuitale di fig. 6.3.5, formalmente identica al modello fondamentale. Le relative equazioni di
stato e d'uscita sono:

y'1 y1 . x1 x 2 y2 x1.x 2 . y 2 x1. y1 x 2 . y1 y1 . y 2 x1.x 2 . y 2

y'2 x1.x 2 . y1 x1.y1. y 2 x1 . x 2 .y1 y1 . y 2


x1.x 2 . y1 x1.y1. y 2 x1 . x 2 .y1 x1 . y1 . y 2

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

Le matrici di eccitazione e di uscita sono:

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

6.4) Sintesi dei circuiti sequenziali asincroni.


Il procedimento di sintesi di un circuito sequenziale asincrono puo' essere suddiviso, in
linea di principio, in cinque fasi successive.

1) Determinazione, a partire da una descrizione verbale del


funzionamento desiderato per il circuito, del diagramma degli stati di
una macchina sequenziale asincrona M, da cui derivare la tabella degli
stati , detta matrice primitiva delle sequenze.
2) Minimizzazione degli stati di M e costruzione della tabella degli stati
della macchina equivalente minima M', detta matrice delle sequenze.

131
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

3) Determinazione del minimo numero di variabili binarie interne


necessarie a codificare gli stati di M' in modo da ottenere un corretto
funzionamento del circuito.
4) Costruzione della tavola di flusso del modello fondamentale del
circuito da realizzare.
5) Costruzione, sulla base della tavola di flusso determinata al punto 4,
del circuito sequenziale asincrono reale.

Anche durante la sintesi si accettano le ipotesi semplificative introdotte per l'analisi e


cioe':
1) L'intera rete logica ha risposta istantanea.
2) I segnali di ingresso sono asincroni a livelli.
3) Gli ingressi possono variare solo in corrispondenza di uno stato stabile.
4) I valori dei ritardi inseriti nei loop di reazione sono tutti uguali.

6.4.1) Determinazione della matrice primitiva delle sequenze.


Viene chiamata matrice primitiva delle sequenze la tavola di flusso, secondo il modello
di Moore, di una macchina sequenziale asincrona M il cui funzionamento corrisponda
completamente con la descrizione assegnata per il circuito da realizzare. Sulla base di quanto
gia' visto, essa conterra' tante colonne quanti sono i possibili valori degli ingressi, cui si ag-
giunge una colonna per l'uscita, e tante righe quanti sono gli stati stabili.
A titolo di esempio si voglia determinare la matrice primitiva delle sequenze per il
circuito a due ingressi (x1 e x2 ) e un'uscita (z) che si porta a 1 solo al termine della sequenza
di ingresso 00 - 10 - 11 - 01. Raggiunta tale condizione l'uscita deve ritornare a zero per ogni
ulteriore variazione dell'ingresso. Per ragioni che verranno esaminate piu' avanti, si imponga
quale ulteriore condizione che i due segnali di ingresso non possano mai variare
contemporaneamente.
La parte del grafo degli stati che esegue il riconoscimento della sequenza e' illustrato in
fig. 6.4.1

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

La matrice primitiva delle sequenze e' in definitiva:

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

6.4.2) Determinazione della matrice delle sequenze della macchina minima.


Dopo aver determinato la matrice primitiva delle sequenze e' opportuno minimizzare il
numero degli stati.
Infatti, con riferimento al modello fondamentale di circuito sequenziale, ridurre il
numero degli stati coincide con il ridurre la complessita' della rete combinatoria
multiterminale: e' evidente che ridurre il numero di stati riduce ad un tempo sia il numero di
ingressi che il numero di uscite della rete.
A tale proposito tuttavia non vi e' nulla di particolare da osservare in quanto il pro-
cedimento di minimizzazione coincide perfettamente con quello esposto al capitolo IV.

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

1 1 /0 3/- -/- 2/-

2 1/- -/- 4/- 2 /0

3 1/- 3 /0 5/- -/-

4 -/- 6/- 4 /0 2/-

5 -/- 7/- 5 /1 2/-

6 1/- 6 /1 8/- -/-

7 1/- 7 /1 5/- -/-

8 -/- 6/- 8 /1 2/-

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

La macchina assegnata e' incompleta. La tabella di evoluzione delle coppie -


compatibili e' riportata in fig. 6.4.5.

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
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

Dall'esame della tabella si individuano le coppie di stati equivalenti

{1,2} {1,3} {2,3} {5,6}

e la macchina minima e':

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

6.4.3) Codificazione dello stato.


Il punto piu' delicato nella sintesi di un circuito sequenziale asincrono e' senza dubbio la
codifica dello stato. Tale codifica consiste in sostanza nel determinare il numero minimo (k)
di variabili booleane necessarie a codificare gli n stati della macchina sequenziale minima, in
modo tuttavia da evitare errate evoluzioni del circuito a causa di corse critiche.
E' possibile in questa fase ricorrere all'introduzione di transizioni multiple o sfruttare
corse non critiche per non aumentare eccessivamente il numero di variabili necessarie. Uno
studio condotto da Huffmann ha permesso di determinare il limite superiore e inferiore di k in
funzione del numero S di stati per matrici che contengano fino a 32 stati. I risultati sono
riportati nella tabella che segue.

N. massimo e minimo di variabili necessario a codificare S stati

k min 1 2 3 4 5

S 2 3 4 5-6 7-8 9-12 13-16 17-24 25-32

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)

(a) (b) (c)

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)

3(01) 4(10) 1 3(01) 4(10)


4(10) 3(01)
(a) (b) (c)
figura 6.4.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).

Ingresso 1(0) 2(0)


Stato 00 01 11 10 z
1 1 2 4 1 0
2 3 2 3 2 0
3 3 4 3 1 0
4 1 4 4 2 1
4(1) 3(0)
(a) (b)
figura 6.4.11

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 -

figura 6.4.12 (b)

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

1 (0) 2 (0) 4 (1) 4 (1)


1 2 2 1 2

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.

6.4.4) Determinazione della tavola di flusso del modello fondamentale.


Una volta che sia stata stabilita la codifica dello stato e sia stata ricavata la matrice di
stato nella sua forma finale, il passaggio alla tavola di flusso del modello fondamentale e'
estremamente semplice. E' sufficiente infatti sostituire ad ogni stato che compare nella matrice
la sua codifica binaria ed associarvi la relativa uscita.
A titolo di esempio la matrice di stato di fig. 6.4.16 con la codifica di fig. 6.4.14 da'
come risultato la tavola di flusso di fig. 6.4.17.

Ingresso
Stato
00 01 11 10

000 000 /0 010/0 001/0 000 /0

001 000/- -/- 101/- -/-

010 110/0 010 /0 110/0 010 /0

011 010/0 011 /0 010/0 011 /0

110 110 /0 111/0 110 /0 100/0

100 -/- -/- -/- 000/0

111 101/1 111 /1 111 /1 011/1

101 001/1 101 /1 101 /1 111/1

figura 6.4.17

6.4.5) Costruzione del circuito reale.


Il passaggio dalla tavola di flusso al circuito reale presuppone la sintesi del circuito MT i
cui ingressi sono le variabili xi e yi e le cui uscite sono le zi e le yi'. Scelti poi i componenti, si
realizza la rete logica combinatoria del modello fondamentale. Infine si chiudono i loop di
reazione tra le yi' e le yi ottenendo in tal modo il circuito sequenziale asincrono reale.
Si abbia la seguente tavola di flusso:

142
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

Ingresso
Stato x x
1 2
y y 00 01 11 10
1 2
00 00 /0 10/0 11/0 01/0

01 00/1 -/1 11/1 01 /1

11 11 /1 10/1 11 /1 11 /1

10 00/0 10 /0 11/0 -/0

Poiche' z = y2 e' sufficiente eseguire la sintesi di y1' e di y2' .

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

Scegliendo per la realizzazione del circuito elementi logici NAND, si ha infine:

_
X2
_
X2

_
X1 Z

figura 6.4.18

6.5) Le alee nei circuiti sequenziali asincroni.


Una delle ipotesi fondamentali formulate a scopo di semplificazione nello studio dei
circuiti sequenziali asincroni e' quella dell'uguaglianza dei ritardi in ciascun loop di reazione.
Si e' gia' visto in precedenza che il mancato verificarsi di tale ipotesi puo' dar luogo, quando la

143
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

variazione dell'ingresso provoca la commutazione di due o piu' variabili di stato, a quei


malfunzionamenti che vengono chiamati corse.
C'e' tuttavia da far notare che ancora prima si era supposto che tutti i ritardi della rete
combinatoria potessero essere concentrati in uscita e riportati come unico ritardo in ciascun
loop di reazione.
Il mancato verificarsi di tale ipotesi puo' portare ad evoluzioni errate del circuito anche
quando non commuta alcuna variabile di stato purche' si sia avuta una variazione
dell'ingresso. Si parla in tal caso di alea (hazard) del circuito sequenziale.
Esistono quattro tipi di alea; le prime tre, dette rispettivamente alee statiche, dinamiche
ed essenziali si verificano in corrispondenza alla variazione di un unico segnale di ingresso e
possono essere eliminate con accorgimento di natura logica o circuitale. Il quarto tipo, detto
alea multipla, si verifica in corrispondenza alla commutazione di piu' segnali di ingresso e si
evita in pratica imponendo, quale ulteriore vincolo, che non commuti piu' di una variabile di
ingresso alla volta.

6.5.1) Alee statiche.


Si chiama alea statica il fenomeno per il quale un'uscita, che in seguito alla variazione di
una variabile di ingresso dovrebbe rimanere costante, ha invece una variazione transitoria.
Tale fenomeno e' provocato dalla diversa lunghezza degli itinerari percorsi dai segnali per
raggiungere l'uscita citata. E' bene precisare immediatamente che l'alea statica non e' una
caratteristica dei circuiti sequenziali, ma si presenta anche nei circuiti combinatori. In questi
ultimi tuttavia non ha alcun effetto pericoloso, ma semplicemente prolunga il periodo di
transitorio dopo il quale l'uscita si assesta. In un circuito sequenziale invece, quando l'alea
interessa una variabile interna y e dura sufficientemente a lungo si puo' avere un'errata
evoluzione del circuito stesso: se invece interessa un'uscita puo' determinare un'evoluzione
errata di qualche altro circuito sequenziale a valle.
Si consideri, per inquadrare correttamente il fenomeno dell'alea statica, il circuito di fig.
6.5.1 (a), mentre in fig. 6.5.1 (b) e' riportata la relativa tavola di flusso.

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

Le relative equazioni di stato e di uscita sono:

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

che porta al circuito di fig. 6.5.3.

4
X1

X2 1

3 Z

figura 6.5.3

Il termine aggiunto x1.y garantisce che l'uscita si mantenga a 1 anche durante la


commutazione della variabile x2.
I circuiti cosi' realizzati sono detti privi di alee (hazard free). E' opportuno osservare
che le alee statiche sono pericolose solo se le transizioni che le determinano si possono
effettivamente verificare. Tale informazione tuttavia si puo' ricavare solo a partire dalla ma-
trice primitiva delle sequenze, in quanto puo' essere perduta passando alla macchina equi-
valente minima.

6.5.2) Alee dinamiche.


L'esempio illustrato al paragrafo precedente si riferisce ad un'uscita che dovrebbe
mantenersi a 1 e passa transitoriamente a 0.
E' evidente che lo stesso fenomeno puo' verificarsi anche per uscite che dovrebbero
mantenersi al valore logico 0. Si parla percio' di alee statiche allo stato 1 e di alee statiche allo
stato 0.
E' possibile inoltre avere della alee anche in corrispondenza di una commutazione
dell'uscita; in tal caso il segnale passa momentaneamente al nuovo valore, ritorna transito-
riamente al valore originario ed infine assume il valore di regime. Si hanno cioe' tre successivi
cambiamenti di valore per un'uscita che dovrebbe cambiare una volta sola (ad esempio 0 - 1 -
0 - 1 anziche' 0 - 1).

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

Le equazioni di stato e di uscita sono:

y' x 1 . x 3 x 2 . y
z x1 x2 x3

da cui si puo' derivare la tavola di flusso

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

Le condizioni richieste per l'esistenza di un'alea dinamica sono verificate in quanto il


segnale x2 raggiunge il NAND 1 attraverso gli itinerari 2 - 1, 5 - 3 - 1, 5 - 4 - 3 - 1 di cui il
secondo comporta l'inversione della variabile.
Tenendo separati i segnali secondo l'itinerario seguito da ciascuno d'essi, ed indicandoli
rispettivamente con x 21 , x 22 , x 23 si ha:

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:

a) x 21 x 22 x 23 y 1 y' 1 stato iniziale

b) x 21 0 x 22 x 23 y 1 y' 0

c) x 21 x 22 0 x 23 y 1 y' 1

d) x 21 x 22 x 23 0 y 1 y' 0 stato finale

L'individuazione delle possibili alee di un circuito sequenziale e' un compito molto


complicato, anche se e' un'argomento che e' stato completamente analizzato.
E' tuttavia sufficiente per il progettista conoscere le regole che gli permettano di
realizzare circuiti privi di alee.

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.

6.5.3) Alee essenziali.


Nei circuiti sequenziali asincroni esiste un ulteriore tipo di alea che non e' legata alla
realizzazione fisica dei circuiti stessi, ma e' inerente alla struttura logica del problema. Tali
alee sono le piu' pericolose in quanto non sono in alcun modo eliminabili attraverso artifici
logici e pertanto portano sempre, quando presenti, ad un'errata evoluzione del circuito; esse
vengono chiamate alee essenziali.
Un'alea essenziale puo' generarsi ogni volta che la tavola di flusso ha una delle due strutture
illustrate in fig. 6.5.5 quando cioe' nella tavola di flusso esiste uno stato Si e un ingresso x tali
che tre variazioni consecutive di x a partire da Si portino il circuito in uno stato Sk diverso da
quello Sj in cui giunge dopo un'unica variazione di x.

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

Per analizzare compiutamente il meccanismo di un'alea essenziale e' opportuno riferirsi


ad una tavola di flusso in cui gli stati siano gia' stati codificati, come ad esempio quella di fig.
6.5.6.
A partire dallo stato stabile xy1y2 = 000, se la commutazione di x da 0 a 1 viene av-
vertita contemporaneamente dagli elementi Gy1 e Gy2 da cui vengono prelevate le variabili di
stato y1 e y2 , il sistema passa nello stato instabile 01 ed evolve poi spontaneamente verso lo
stato stabile 01.

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:

1) L'uscita di Gy2 passa a 1 e fa evolvere il sistema verso lo stato stabile 01.


2) Se Gy1 avverte la variazione di y2 prima che dagli stadi precedenti gli sia giunta
notizia che x e' commutato, allora esso si trova nella condizione in cui x e'
ancora 0 mentre y1 = 0 e y2 = 1. La sua uscita pertanto commuta a 1 e il sistema
evolve verso la condizione xy1y2 = 011.
3) Infine Gy1 avverte la commutazione di x e fa evolvere il sistema verso la condi-
zione stabile xy1y2 = 110 diversa da quella 101 cui era destinato.

149
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

In definitiva un'alea essenziale si genera quando la variazione di una variabile interna,


conseguente ad una variazione di un ingresso, si propaga nel circuito piu' rapidamente del
cambiamento dell'ingresso che l'ha generata. Alee essenziali si ritrovano in molti circuiti di
considerevole importanza, come ad esempio in quasi tutti i contatori.
Poiche' l'effetto delle alee essenziali non puo' essere modificato con provvedimenti di
natura puramente logica, esse possono venir eliminate solamente controllando con estrema
cura il ritardo totale di tutti i loop di reazione.
Il provvedimento piu' sicuro e' quello di inserire nei loop di reazione dei ritardi tali da
assicurare che il cambiamento delle variabili di stato y avvenga solo dopo che la relativa
variazione di ingresso si sia propagata in tutti i punti della rete combinatoria.

6.5.4) Alee multiple.


Si ha un'alea multipla quando i tre tipi di alee che sono state prese in considerazione
coinvolgono piu' di una variabile. La loro interazione complica notevolmente il problema
della sintesi ed e' possibile eliminare gli inconvenienti, che vengono in tal caso a verificarsi,
solo in casi particolari.
Per tale motivo si prescrive di solito che gli ingressi dei circuiti asincroni non varino
mai contemporaneamente.
Pertanto per un corretto funzionamento dei circuiti sequenziali asincroni devono essere
soddisfatte le seguenti condizioni:

1) La rete logica combinatoria deve essere priva di alee statiche e


dinamiche.
2) Nessuna variazione di stato deve avvenire prima che la variazione di
ingresso che l'ha generata sia giunta in ogni punto della rete
combinatoria.
3) Le variazioni di stato non devono comportare corse critiche.
4) Gli ingressi devono variare solo quando il circuito ha raggiunto una
condizione di stabilita'.
5) Gli ingressi non devono mai variare contemporaneamente.

Si fa notare che le ultime due condizioni corrispondono al modo di funzionamento che


e' stato introdotto al capitolo V come modo fondamentale per i circuiti asincroni.

6.6) Esempi di progetto.

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

Si ottiene pertanto la seguente tavola di flusso del modello fondamentale.


x
y y 0 1
1 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

Si consideri ora l'uscita del NAND 5. Si ha:

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/ ------

2 3 2 0100 01 11/ ------ 01 / 0100

3 3 4 0010 11 11 / 0010 10/------

4 1 4 0001 10 00/ ------ 10 / 0001

, ,
y y /z z z z
1 2 1 2 3 4
figura 6.6.5

Dalla tavola di flusso si possono ricavare le seguenti equazioni di stato e di uscita:

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 -- --

4 0001 1001/-- 0001/0001

0011 -- 0001/--

3 0010 0010/0010 0011/--

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/-- --

1 1000 1000/1000 1100/--

,
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

6.7) Reti Iterative.


Una rete iterativa e' una forma altamente ripetitiva di rete logica combinatoria. La
struttura ripetitiva rende posssibile descrivere reti iterative utilizzando le tecniche gia'
sviluppate per i circuiti sequenziali.
Ci si limitera' in questo paragrafo a prendere in considerazione reti iterative
monodimensionali, quali quella rappresentata come cascata di celle identiche tra loro in fig.
6.7.1, in cui e' riportata anche la cella tipica, di cui sono evidenziati gli ingressi e le uscite.

Ingressi della rete

Ingressi Uscite
al Cella Cella Cella al
contorno 1 2 n contorno

Uscite della rete

(a) Rete iterativa

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

(b) Cella tipica

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

dal Data Bus

x x x3 xn
1 2

1 AND AND AND AND

XOR XOR XOR XOR

z z z zn
1 2 3

verso il registro

figura 6.7.2

La struttura logica appena descritta rende possibile introdurre capacita' di conteggio in


qualsiasi registro, senza includere tale meccanismo in ciascun registro.

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

e codificando B con yj = 0 e A con yj =1 si ottiene la seguente semplicissima cella elementare.

x
j

y
yj j+1

z
j

Si consideri infine il seguente esempio, lievemente piu' complesso.

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
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

Di conseguenza si avra' zj = 1 solo se xj = 1 e lo stato e' A o B. Se xj = 0 l'uscita


secondaria (stato futuro) sara' uguale allo stato di ingresso, mentre se xj = 1 si passera' dallo
stato A allo stato B, dallo stato B allo stato C e dallo stato C si permarra' nello stato C. Si
ottiene pertanto la seguente tavola di stato.

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

Da questa tavola di flusso si ricavano le equazioni:

y 2, j 1 y 2, j x j . y1, j
y1, j 1 y1, j x j
zj x j .y 2, j

e la cella elementare che ne risulta e' riportata in fig. 6.7.4


E' opportuno far notare che, sebbene i circuiti iterativi siano nati con l'introduzione dei
circuiti di commutazione a rele', essi hanno assunto un'importanza notevolmente maggiore
con l'avvento dei dispositivi LSI. La struttura ripetitiva offre infatti notevoli vantaggi in
relazione all'ottimizzazione del layout dell'integrato. Reti iterative mono e bidimensionali
permettono infatti di organizzare in modo sistematico funzioni complesse su un singolo chip.

159
#
× ½·®½«·¬· -»¯«»²¦·¿´· ¿-·²½±²·
Ý¿°·¬±´± ê

E' possibile inoltre, e risulta evidente da quanto detto, interpretare un circuito


sequenziale come una rete iterativa. Queste ultime pertanto possono essere considerate come
una tecnica di modellizzazione nella generazione delle sequenze di test dei circuiti integrati
sequenzali LSI.

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.

7.2) Analisi dei circuiti sequenziali sincroni.


Come nel caso delle reti elettriche, anche nel caso dei circuiti sequenziali l'analisi e' piu'
semplice che non la sintesi.
Per illustrare il procedimento sara' bene riferirsi ad un esempio; si consideri pertanto il
circuito di fig. 7.2.1.
E' interessante notare che la struttura del circuito e' tale da coincidere perfettamente con
il modello fondamentale. Si osservi inoltre che il segnale di clock non ha alcun contenuto
informativo per quanto riguarda il funzionamento del circuito nella sua evoluzione da uno
stato all'altro, ma serve unicamente a temporizzare le operazioni; esso potra' pertanto essere
ignorato nel corso dell'analisi.

z
x

J
y T
1
Q K

_
y
2
J
T
Q K

clock

figura 7.2.1

Le equazioni di ingresso degli elementi di memoria ( o equazioni di eccitazione )


possono essere determinate dall'analisi della rete combinatoria. Si ottiene:

161
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

J y1 x K y1 x
Jy2 z x y 1 .y 2 K y2 x y1 .y 2

A partire da queste equazioni, utilizzando le equazioni di eccitazione del flip-flop JK, si


determinano le equazioni di stato degli elementi di memoria y1 e y2. Poiche' per un flip - flop
JK si ha:

yn 1
J n .y n K n . yn

si ottiene, tenendo presente che per ciascun elemento di memoria K J :

y1n 1
x n .y1n x n . y1n xn

y n2 1 x n y1n .y n2 x n y1n .y n2 . y n2 x n y1n .y n2

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

La tavola di transizione tende a diventare piuttosto voluminosa al crescere del numero di


variabili. Si puo' semplificare la notazione codificando con q1, q2, q3 e q4 le quattro
combinazioni di y1 e y2 ed operando analogamente nel caso di ingressi e uscite multiple, in-
dicando rispettivamente con xi e zi le diverse combinazioni di ingressi e uscite. Combinando,
come illustrato in fig. 7.2.2 (a) la parte relativa all'uscita e quella relativa al prossimo stato, si
ottiene quella che viene chiamata tabella di stato.
La stessa informazione contenuta nella tabella di stato puo' essere visualizzata gra-
ficamente con il diagramma di stato, riportato in fig. 7.2.2 (b), il cui significato e' gia' stato

162
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

illustrato in precedenza. La rappresentazione e' evidentemente perfettamente equivalente a


quella di Mealy adottata per le macchine sequenziali.

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

7.3) Procedura di progetto.


La procedura di analisi illustrata al paragrafo precedente procede attraverso i seguenti
passi:

Equazioni di
ingresso Equazioni Tavola delle Tabella di
Circuito degli elementi di stato futuro transizioni stato
di memoria

La sintesi procede in direzione opposta a quella dell'analisi; la principale differenza


consiste nel fatto che la sintesi parte ancor prima che esista un diagramma o una tabella di
stato. Tale diagramma viene infatti di solito ottenuto da una qualsiasi descrizione del pro-
blema, che di solito consiste in una rappresentazione non ambigua a parole di cio' che il cir-
cuito deve fare. La procedura di sintesi e' illustrata in fig. 7.3.1.

Equazioni di
eccitazione
Diagramma della memoria
di stato

Descrizione Tabella Tavola di


Minimizzazione transizione Circuito
funzionale 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
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

A partire da quest'ultima si puo' ottenere un circuito senza grosse difficolta'. Risulta


invece notevolmente difficile ottenere il circuito piu' economico in quanto la complessita'
delle equazioni di ingresso degli elementi di memoria varia con le diverse codificazioni dello
stato.

7.4) Sintesi del diagramma di stato.


La determinazione della tavola di stato tramite un algoritmo e' possibile solamente se il
comportamento del circuito e' descritto in forma di espressione regolare. Si lascera' tuttavia
la discussione delle espressioni regolari a testi di teoria degli automi, assumendo per i nostri
scopi che la prima descrizione formale di un circuito sequenziale sia il diagramma di stato.
Attraverso l'uso di questo diagramma si puo' ottenere, come illustrato in fig. 7.2.2, la tabella di
stato.
La determinazione del diagramma di stato si rivela particolarmente semplice per quei
circuiti per i quali e' facilmente identificabile uno stato chiamato stato di reset. Quando tale
stato esiste, vi deve essere la possibilita' di portare il circuito nella condizione di reset, a
partire da un qualsiasi altro stato, con un'unica operazione. Essa puo' essere realizzata con una
speciale colonna di ingresso sulla tabella di stato, oppure puo' essere considerata una funzione
completamente indipendente da tale tabella. Ad esempio si puo' connettere una linea speciale
a tutti i flip-flop per azzerarli al momento opportuno. Per compiere l'operazione di reset la
linea puo' essere collegata sia agli ingressi considerati nell'implementazione della tabella di
stato, sia, come spesso avviene, ad ingressi separati.

ESEMPIO 1 (Reset eseguito con meccanismo separato)


In un particolare sistema di comunicazione l'inizio di un messaggio sia identificato dalla
presenza di tre 1 consecutivi sulla linea di ingresso x. I dati su questa linea siano sincronizzati
da un impulso di clock. Si voglia progettare un circuito sequenziale sincrono la cui uscita
diventi 1 solo in corrispondenza al riconoscimento di inizio messaggio. Vi sia inoltre un
meccanismo separato di reset che possa riportare il circuito nello stato q0 che precede l'inizio
di un messaggio. Il comportamento tipico del circuito e' illustrato in fig. 7.4.1.

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 1/0 1/1


q0 q1 q2 q
3

1/0
(a) 0/0

1/0 1/0 1/1


q q1 q2 q
0 3

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

Poiche' uno 0 in ingresso si puo' presentare in qualsiasi periodo di clock, interrompendo


una sequenza di 1, e' stato previsto uno stato q4. Qualsiasi 0 in ingresso, a meno che il circuito
non si trovi gia' nello stato q3, genera un'uscita 0 e porta il circuito nello stato q4; tutti gli 0
successivi e consecutivi non fanno altro che lasciare il circuito in q4, mentre un 1, che
potrebbe iniziare una sequenza di tre 1 consecutivi, riporta il circuito in q1.

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.

ESEMPIO 2 (Reset eseguito con un opportuno ingresso)


Numeri compresi tra 0 e 7 vengono trasmessi in forma seriale binaria su una linea x, con
i bit ordinati dal piu' al meno significativo. Si vuol progettare un circuito che fornisca
un'uscita z = 1 in corrispondenza al terzo bit di uno dei due valori estremi 0 e 7. In caso
contrario dovra' essere z = 0. Esista inoltre un ulteriore ingresso d tale che, se vale 1 ad un
determinato istante di clock, allora al successivo impulso di clock si abbia l'arrivo del bit piu'
significativo di un messaggio.
Si imponga che la condizione d = 1 porti il circuito in uno stato a di reset. La tabella di
stato puo' essere costruita considerando d come un meccanismo esterno di reset, e solo
successivamente integrando d come ingresso nella tabella di stato.
Partendo dallo stato a si puo' costruire un grafo come illustrato in fig. 7.4.4. I numeri 0 e
7 sono rivelati all'istante del terzo ingresso e precisamente se uno 0 viene applicato allo stato d
o un 1 allo stato g. Il terzo ingresso deve inoltre portare il circuito in uno stato tale che
ulteriori uscite uguali a 1 siano impossibili. Gli stati e ed f soddisfano queste specifiche e il
circuito dopo aver raggiunto uno di tali stati vi permane indefinitamente.

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

01 2 c f/0 g/0 a/0 a/0

10 3 d e/1 e/0 a/0 a/0

11 4 e e/0 e/0 a/0 a/0


f f/0 f/0 a/0 a/0
g f/0 f/1 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.

7.5) Circuiti a memoria finita.


In fig. 7.5.1 e' illustrata una versione equivalente del circuito di fig. 7.2.1 in cui i flip-
flop JK sono stati sostituiti dai flip-flop D.
Ricordando che l'uscita di un flip-flop di tipo D al tempo tn e' uguale al valore
n-1
dell'ingresso al tempo immediatamente precedente t , si vede che nel caso in esame l'uscita e'
funzione solamente dell'ingresso attuale e dell'ingresso e dell'uscita all'istante immediatamente
precedente.
Si ha cioe':

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

Ovviamente x e z possono essere dei vettori rappresentanti rispettivamente parecchie


linee di ingresso e di uscita. Allo stesso modo i flip-flop D possono rappresentare anziche' un
singolo flip-flop, un insieme monodimensionale di flip-flop, uno per ciascuna linea di input o
di output.
Non tutti i circuiti sequenziali sono a memoria finita. Negli esempi 1 e 2 del paragrafo
precedente il circuito doveva fornire un'uscita in corrispondenza ad alcune particolari
sequenze di ingresso, e non vi doveva essere nessuna altra uscita se prima non fosse stato
applicato un opportuno segnale di reset. Tali circuiti quindi erano in grado di ricordare una
particolare sequenza di ingresso o di uscita, presentatasi in precedenza, ad una distanza tem-
porale (o se si vuole per un numero di impulsi di clock) arbitrariamente grande.
E' spesso possibile riconoscere un circuito a memoria finita dalle sue specifiche di
progetto e tale riconoscimento puo' sovente semplificare la procedura di sintesi.
Quando infatti si sappia che il circuito e' a memoria finita, si puo' in genere specificare
un limite superiore per la dimensione della memoria; si puo' cioe' fissare il massimo numero
di stati interni e ricavare direttamente la tavola delle transizioni o quella di stato, come viene
illustrato nel seguente esempio.

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

n-1 n-2 n-3


X X X
n
Z
n
Z = f(X n ,X n-1 ,X n-2 ,X n-3 )

(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

010 001,0 101,0 c b,0 f,0

011 001,0 101,0 d b,0 f,0

100 010,0 110,1 e c,0 g,1

101 010,0 110,1 f c,0 g,1

111 011,0 111,1 g d,0 h,1


110 011,0 111,1 h d,0 h,1

(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

xn-1 xn-2 xn-3 qn 0 1


n 000 a a e
x

xn-1 xn-2 qn 0 1 001 b a e


00 a a d
011 c b f
01 b a d
010 d b f
11 d b c
100 e d h
10 c b c 101 f d h

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

Z2 111 110 000


z = f (xn, zn-1 ) Z1
X Z0 zn = ( y 2 ,y ,y ) n+1
1 0

(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

7.6) Minimizzazione degli stati.


Si e' gia' visto al capitolo V che, assegnata una macchina sequenziale M, e' sempre
possibile determinare una macchina minima equivalente (o compatibile se la macchina di
partenza non e' completa) M'. In campo circuitale ridurre il numero di stati significa ridurre il
numero di elementi di memoria necessari, pervenendo quindi a circuiti piu' semplici e piu'
economici.

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

q1,q2 q0,q1 q4,q5

q1,q3 q0,q1 q4,q5

q2,q3 q1,q1 q5,q5

q4,q5 q2,q2 q6,q6

q ,q q ,q q ,q
4 6 2 3 6 7

q4,q7 q2,q3 q6,q7

q5,q6 q2,q3 q6,q7

q5,q7 q2,q3 q6,q7

q6,q7 q3,q3 q7,q7

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:

S0 ={q0} S1 = {q1} S2= {q2,q3}


S3 = {q4,q5,q6,q7}

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

7.7) Codificazione e determinazione delle equazioni di eccitazione.


Dopo che con il metodo di Ginsburg sia stata ottenuta la tavola di stato minima, rimane
da realizzare il circuito il cui funzionamento e' descritto da tale tavola. E' bene dire subito che
la ricerca della massima economia non si esaurisce con la minimizzazione del numero degli
stati. E' infatti vero che il numero degli elementi di memoria diminuisce con il ridursi del
numero di stati, ma e' anche vero che la massima economia si ottiene con uno sviluppo
opportuno della rete combinatoria che sintetizza l'uscita e le variabili di eccitazione degli
elementi di memoria. Puo' pertanto verificarsi il caso in cui una tavola di stato diversa da
quella minima richieda una logica combinatoria meno complessa e quindi nel totale porti a
una realizzazione piu' economica.
Se la sintesi della tavola di stato e' stata fatta con la tecnica dei sistemi a memoria finita
e la riduzione del numero di stati non ha portato all'eliminazione di nessun elemento di
memoria, allora la struttura del circuito sara' quella di fig. 7.5.1 (b). Poiche' secondo tale
struttura gli ingressi e le uscite vengono semplicemente memorizzati, non vi e' alcuna neces-
sita' di una rete combinatoria per realizzare lo stato futuro. Altre strutture circuitali potrebbero
dare logiche di uscita piu' semplici, ma non e' affatto garantito che il circuito nel suo
complesso risulti piu' economico.
Se la struttura a memoria finita non risulta appropriata, il problema di scegliere la
migliore realizzazione e' sfortunatamente molto difficile da risolvere.
Si ricordi infatti che, se r sono le variabili utilizzate per codificare lo stato, allora ogni
r
stato corrisponde a una delle 2 combinazioni delle variabili. Il primo problema e' quindi
r
quello di decidere quale delle 2 combinazioni debba esser fatta corrispondere a ciascun stato.
Se il numero di stati m e' tale che:

2r 1 m 2r

allora sono necessarie r variabili di stato e vi sono

176
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

2r !
2r m!

modi di codificare gli m stati.


Ad esempio, il problema di assegnare le combinazioni delle variabili di stato a ciascuno
di quattro stati puo' essere visualizzato assegnando i quattro stati ai quattro vertici di un
quadrato. In fig. 7.7.1 sono illustrate 3 di queste assegnazioni. Ogni altra possibile asse-
gnazione puo' essere ottenuta come rotazione e/o specularita' di uno dei tre modi fondamentali
di fig. 7.7.1 e corrisponde a variare l'ordine delle variabili e negarle. Tali operazioni non
hanno effetto per quanto riguarda la complessita' del circuito.

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.

stato Ingresso stato Ingresso stato Ingresso


attuale 0 1 attuale 0 1 attuale 0 1
a 00 00 11 a 00 00 01 a 00 00 01

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

(a) (b) (c)

figura 7.7.4

Al capitolo V sono state sviluppate le mappe che rappresentano lo stato futuro in


funzione dello stato presente e degli ingressi per i piu' comuni tipi di flip-flop. Agli scopi che

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

Le liste di transizione per i flip-flop RS, D e T sono riportate in fig. 7.7.6.

n n+1 n n+1 n n+1


Q --Q S R Q --Q D Q --Q T

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

Procedendo analogamente per le assegnazioni di fig. 7.7.4 (b) e (c) si ottiene:

J y1 x . y2 K y1 x. y 2 Jy2 x .y 1 K y2 x y1
z x . y1 . y 2

e rispettivamente

J y1 x.y2 K y1 x.y 2 J y2 x Ky2 y1


z x . y 1 .y 2

La prima e la terza assegnazione sono approssimativamente equivalenti; la terza as-


segnazione e' eventualmente preferibile in quanto usa solo dei gate AND mentre la prima usa
anche un gate OR. Il relativo circuito e' riportato in fig. 7.7.8.

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

A scopo di maggior chiarezza si consideri ancora il seguente esempio.


Si voglia realizzare il circuito relativo all'esempio 1 del paragrafo 7.5 utilizzando flip-
flop RS.
La tavola di stato minima e' riportata in fig. 7.7.9 (a) mentre in fig. 7.7.9.(b) si ha la
tavola di flusso relativa all'assegnazione 7.7.4 (b). Gli stati a, b, c, d corrispondono rispetti-
vamente agli stati {a}, {c,d}, {e,f,g,h} e {b} della tavola di stato di fig. 7.5.2 (b).

Ingresso Ingresso
Stato 0 1 Stato

a a/1 c/0 a 00 00/1 01/0


b d/0 c/0 c 01 11/0 01/1
c b/0 c/1 b 11 10/0 01/0
d a/0 c/0 d 10 00/0 01/0

(a) figura 7.7.9


(b)

Le relative mappe di eccitazione dei due flip-flop RS sono:

181
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

Ingresso Ingresso Ingresso


Ingresso
Stato 0 1 Stato 0 1 Stato 0 1 Stato
0 1
00 0 0 00 - - 00 0 1 00 - 0
01 1 0 01 0 - 01 - -
01 0 0
11 - 0 11 0 1 11 0 -
11 1 0
10 0 0 10 1 1 10 0 1
10 - 0
S R S
y1 y1 y2 R
y2
figura 7.7.10

Le equazioni di eccitazione sono:

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

Le assegnazioni 7.7.4 (a) e (c) danno luogo rispettivamente alle equazioni:

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

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 d c 01 B c b c 01 c b c 01
c b c 11 b d c 11 d a c 11

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

1) Si individuino sulla tavola di stato gli stati attuali che hanno in


ciascuna colonna lo stesso stato futuro. Gli stati che soddisfano questa
condizione devono essere resi adiacenti.
2) Si individuino sulla tavola di stato quegli stati che evolvono verso gli
stessi stati futuri, ma con differente ordine delle colonne. Questi stati
devono essere resi adiacenti se anche gli stati futuri verso cui evolvono
possono essere resi adiacenti.
3) Gli stati relativi a righe che hanno lo stesso stato futuro per alcune, ma
non per tutte le colonne, vanno resi adiacenti, dando la precedenza a
quelle righe che godono di questa proprieta' per un maggior numero di
colonne.

REGOLA 2

Gli stati futuri di una determinata riga devono essere resi adiacenti.

184
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

REGOLA 3

L'assegnazione prescelta deve semplificare per quanto possibile la


mappa della funzione d'uscita.

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:

(2,3) (2,6) (1,5) (3,6) (6,7)

185
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

Stato attuale Stato precedente n. termini


x=0 x=1

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

Queste condizioni non sono contemporaneamente soddisfacibili con tre variabili di


stato. Una buona soluzione e':

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

La corrispondente tavola degli stati e':

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.

7.8) Partizione degli stati e codificazione.


Nelle procedure di determinazione di una macchina sequenziale minima e' stato in-
trodotto il concetto di partizione dell'insieme degli stati in classi di equivalenza. Due stati

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

Si considerino ora le partizioni in classi di equivalenza che soddisfano solamente la


seconda di queste due condizioni. Due stati cioe' appartengono alla stessa classe di equiva-
lenza se, per ciascun ingresso, gli stati verso cui evolvono appartengono ancora ad una stessa
classe di equivalenza.
Si consideri ad esempio la tavola degli stati di fig. 7.8.1.:

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

Le partizioni {0,2,4,6}, {1,3,5,7}e {0,4}, {1,5}, {2,6}, {3,7} soddisfano la condizione


enunciata.
Infatti per gli stati {0,4} gli stati futuri sono {3,7} per l'ingresso x=0 e {1,5} per x=1;
per la coppia {1,5} sono rispettivamente {0,4} e {2,6} per x=0 e x=1 e cosi' via. Per la
partizione {0,2,4,6} gli stati futuri sono {1,3,5,7} per ambedue gli ingressi e viceversa. Quindi
per tutti gli stati di una determinata classe di equivalenza gli stati futuri, per qualsiasi ingresso,
si trovano tutti nella medesima classe di equivalenza.
Le partizioni che godono di questa proprieta' vengono dette partizioni chiuse.
Per illustrare in che modo partizioni di questo tipo vengano usate nella codifica dello
stato si assegni una delle variabili di stato ai due blocchi {0,2,4,6} e {1,3,5,7}, ad esempio y1
= 0 al primo e y1 = 1 al secondo. Poiche' gli stati attuali evolveranno sempre verso stati
dell'altro blocco, l'equazione di stato per y1 sara':

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

(a) (b) (c)


figura 7.8.3

Si noti che i valori di y1 e y2 non dipendono da x e da y0. Tuttavia i valori di y0n+1 e z


sono funzione dei valori attuali x, y1, y2 e y0.

BOOTH T. " Sequential machines and automata theory "


Wiley & Sons - New York - 1967

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

001 0/0 1/0 01 10 10


010 0/0 1/0 10 11 11

* 011 0/1 0/0 11 00 00


100 1/0 -- ( y1 y2 ) n+1
101 1/0 0/0

110 1/0 0/0


* 111 0/0 0/1
n+1 n
y0 ,z
(a) (b)
figura 7.8.4

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

(a) (b) (c)

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

7 6 0 blocco attuale 0 1 y1n 0 1

(0,2,4,6) (1,3,5,7) (1,3,5,7) 0 1 1

(1,3,5,7) (0,2,4,6) (0,2,4,6) 1 0 0

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

0,4 3,7 1,5 00 1 0

1,5 0,4 2,6 01 0 1

3,7 2,6 11 1 0
0,4
2,6 1,5 3,7 10 0 1

classe futura y n+1


2

figura 7.8.8

La relativa equazione di stato e':

y n2 1 x n . y1n y n2 x n . y1n y n2 xn y1n y n2

Infine la variabile y3 dovra' dividere questi quattro blocchi in due, inducendo la


partizione (0,1,2,3) e (4,5,6,7). Poiche' i circuiti per sviluppare y1 e y2 sono gia' stati realizzati
e' ovvio che il sottocircuito che si sta esaminando dovra' sviluppare solo y3.
La tavola di flusso per questo sottocircuito e' riportata in fig. 7.8.9 assieme alla relativa
realizzazione circuitale.

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
ݽ·®½«·¬· -»¯«»²¦·¿´· -·²½®±²·
Ý¿°·¬±´± é

L'equazione che si ricava per y3 e':

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.

2) Due impulsi (indipendentemente dalla linea su cui si presentano)


devono essere separati almeno del periodo che corrisponde alla
massima frequenza di ripetizione per i flip- flop usati.

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.

8.2) Circuiti ad impulsi secondo Moore e secondo Mealy.


Nei circuiti sequenziali sincroni le uscite, funzioni degli ingressi e delle variabili di
stato, sono segnali a livelli in quanto sia gli ingressi che le variabili di stato sono segnali a
livelli. Se poi queste uscite sono a loro volta segnali di ingresso di altri circuiti sincronizzati
dallo stesso clock, allora e' appropriato considerare significative tali uscite solo in
corrispondenza al clock.
La situazione e' notevolmente piu' complessa nel caso di circuiti ad impulsi. Se le uscite
sono funzione dell'ingresso oltre che delle variabili di stato, allora esse saranno impulsive e
verranno ottenute come prodotto logico di un'opportuna funzione delle variabili di stato e
degli impulsi di ingresso. Si possono pertanto definire tante diverse uscite quante sono le
diverse possibili combinazioni di stato e di ingresso. Se invece le uscite sono funzione delle
sole variabili di stato allora esse sono segnali a livelli e rimangono definite nell'intervallo
compreso tra due successivi impulsi di ingresso piuttosto che in corrispondenza a tali impulsi.
Di conseguenza il numero di uscite diverse non potra' essere superiore al numero degli stati. In
fig. 8.2.1 sono riportati i diagrammi e le tabelle di stato di ambedue i tipi di circuito.
Si noti tuttavia che vi e' una marcata somiglianza tra i due circuiti. In effetti essi
rappresentano in pratica la soluzione dello stesso problema. Esso consiste nel riconoscere la
sequenza x1x2x1 che segue immediatamente un ingresso x3.
Quest'ultimo puo' in pratica essere considerato un impulso di reset e pertanto, per
ragioni di semplicita', non e' riportato sui diagrammi di stato.
Nel circuito con uscita ad impulsi di fig. 8.2.1 (a) lo stato q3 viene raggiunto in con-
seguenza alla sequenza di ingresso x1x2. Se il successivo impulso e' x1 si passa allo stato q3
facendo comparire in uscita un impulso, mentre in caso contrario si evolve verso q0 o q2,
senza pero' che venga generata un'uscita.

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

(a) figura 8.2.1 (b)

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
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è

8.3) Procedura di progetto.


La procedura di progetto e' in pratica la stessa usata per i circuiti sincroni. Infatti, se si
considera il clock come un ingresso e lo si usa per sincronizzare le uscite, si vede che il
circuito sequenziale sincrono puo' essere considerato un caso particolare di circuito di Mealy.

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:

ABC ACB BAC BCA CBA CAB

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
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è

Si ottiene quindi, sulla base di queste considerazioni, il diagramma completo di fig.


8.3.1 (b). Da tale diagramma si ottiene la tabella di fig. 8.3.2 (a), dalla quale, minimizzando
gli stati, si ottiene la tabella di fig. 8.3.2 (b).

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 --/-

01 --/- 11/0 10/0 --/-

11 --/- --/- 11/0 00/0

10 10/0 10/0 10/0 00/1

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

Il circuito che realizza quanto voluto e' quindi:

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

La tavola di stato e quella di flusso sono invece riportate in fig. 8.3.5.

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

Le equazioni di eccitazione e di uscita sono pertanto:

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

Quando i convogli sono in stazione, ambedue i semafori L1 e L2 sono rossi, lo scambio


S1 e' posizionato sul binario principale e lo scambio S2 e' posizionato sul binario di sosta. Il
convoglio diretto all'areoporto, per quanto detto in precedenza, si portera' su quest'ultimo e si
fermera' al semaforo L1. Tale semaforo rimarra' rosso finche' l'altro convoglio non sara'

204
ݽ·®½«·¬· -»¯«»²¦·¿´· ¿¼ ·³°«´-·
Ý¿°·¬±´± è

transitato su x1 e x2. In questo momento S1 si posizionera' sul binario di sosta. Il convoglio


diretto in citta' si fermera' a L2 finche' l'altro non sara' transitato su x1, facendo passare L2 al
verde e posizionando lo scambio S2 sul binario principale.
Finalmente, quando il convoglio diretto in citta' sara' transitato su x3, il sistema ritornera'
nelle condizioni iniziali.
Si vuole progettare un circuito dotato di due uscite a livello z1 e z2 tali che:

z1 = 0 L1 = rosso S1 posizionato sul binario principale


z1 = 1 L1 = verde S1 posizionato sul binario di sosta
z2 = 0 L2 = rosso S2 posizionato sul binario di sosta
z2 = 1 L2 = verde S2 posizionato sul binario principale

La disposizione dei sensori e la sequenza delle operazioni sono evidentemente tali da


impedire che vi possano essere due impulsi contemporanei. Il diagramma di stato per il
sistema e' quindi quello di fig. 8.3.7 (a), mentre la relativa tavola di stato e' riportata in fig.
8.3.7 (b).

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

mentre le matrici di eccitazione per i flip-flop sono:

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

Si ricavano quindi le seguenti equazioni:

S1 x2 R1 x3 S2 x 1 . y1 R2 x3

e il relativo circuito e' riportato in fig. 8.3.8.

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

9 0 9 1001 0000 1001

(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

Il flip-flop y1 cambia invece stato se e solamente se y0 = 1, eccetto per lo stato 9, quando


y3 = 1. Si ottiene pertanto:
Ty 1 T . y o .y 3

Analogamente y2 cambia stato solo se y0 e y1 valgono 1. Si ha:

Ty 2 T . y1 . y 0

Infine y3 passa da 0 a 1 quando y0 = y1 = y2 = 1 mentre esegue la transizione inversa


quando y3 = y0 = 1. Si ottiene pertanto:

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

A causa del funzionamento modulo 5 le partizioni chiuse introdotte negli esempi


precedenti non sono piu' applicabili. Tuttavia la proprieta' di chiusura della partizione
{0,2,4,6} e {1,3,5,7} e di quella {0,4}, {1,5}, {2,6} e {3,7} sono violate solo per i due stati
futuri contrassegnati con l'asterisco. Pertanto l'assegnazione in numerazione binaria BCD
produce ancora delle equazioni di ingresso dei flip-flop relativamente semplici e permette nel
contempo di fare a meno di una logica combinatoria di uscita.
Usando flip-flop di tipo T si ottengono le seguenti equazioni:

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.

9.2) Il clock skew.


Spesso la particolare realizzazione fisica di un circuito sequenziale fa si' che le ipotesi
fondamentali alla base del funzionamento fisico siano violate, anche se vengono usati flip-flop
master-slave oppure sincronizzati sui fronti.
Si consideri infatti il circuito sequenziale sincrono di fig. 9.2.1 (a) e si supponga che i
flip-flop siano tutti di tipo master-slave, in modo che qualsiasi variazione di stato abbia luogo
sul fronte di discesa dell'impulso di clock.
Il circuito illustrato e' un semplice registro a scorrimento da 2 bit. Si supponga che, a
causa della particolare realizzazione della linea di distribuzione del clock, esista un ritardo tra
l'applicazione dell'impulso di sincronizzazione al flip-flop 1 e quella al flip-flop 2. Questa
situazione puo' essere determinata da linee di interconnessione eccessivamente lunghe o da un
certo numero di invertitori inseriti sulla linea di clock.

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

(b) figura 9.2.1


(c)

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
ß®¹±³»²¬· ½±³°´»³»²¬¿®·
Ý¿°·¬±´± ç

Se il circuito operasse correttamente, il primo impulso di clock dovrebbe caricare uno


zero nel flip-flop 1 e il secondo impulso propagare lo zero nel secondo flip-flop.
Si noti ora che, nelle condizioni ipotizzate, y1 va a 0 in corrispondenza al fronte di
discesa dell'impulso 1. Questo valore si propaga immediatamente agli ingressi del secondo
flip-flop, mentre il clock presente all'ingresso T2 e' ancora a livello alto a causa del ritardo
(fig. 9.2.1 (b)). In queste condizioni un flip-flop JK master-slave carica il dato presente
all'ingresso nella sezione master. Quando il clock presente su T2 ritorna a zero, il valore
memorizzato viene trasferito alla sezione slave e y2 va a zero a sua volta. In definitiva con un
unico impulso di clock le uscite hanno raggiunto la situazione che si sarebbe dovuta avere
solo in corrispondenza del fronte di discesa del secondo impulso.
E' necessario pertanto porre un'estrema cura per evitare un tal tipo di comportamento,
assicurandosi che i segnali di clock siano tutti coincidenti.
Si puo' usare anche un approccio diverso, usando dei flip-flop di struttura piu'
complicata. Si supponga infatti che i due segnali J e K siano campionati in corrispondenza al
fronte di salita dell'impulso di clock e che le loro successive variazioni non abbiano effetto
alcuno.
In tal caso, come illustrato in fig. 9.2.1 (c), il valore di x viene prelevato all'istante t1,
quello di y1 all'istante t2 e pertanto il circuito funziona correttamente.
C'e' tuttavia da osservare che il far si' che il flip-flop riconosca i segnali di ingresso solo
in corrispondenza dei fronti di salita ne complica notevolmente il progetto e che anche
utilizzando flip-flop master-slave triggerati sui fronti si puo' avere il fenomeno del "clock
skew", sia pure con probabilita' molto minore.

9.3) Tavola di stato di un flip-flop JK master-slave.


Nella progettazione di un flip-flop JK master-slave e' necessario far rilevare che le due
funzioni, quella master e quella slave, non sono separabili in rapporto alla realizzazione finale.
Si considereranno pertanto due uscite, quella del master z1 e quella dello slave z2;
evidentemente, una volta che il circuito sia stato realizzato come circuito integrato, sara' di-
sponibile la sola uscita z2.
A partire da uno stato a, in cui z1z2 = 00, la tavola di stato puo' essere iniziata come
illustrato in fig. 9.3.1.

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

Piu' complesso e' il caso in cui si volesse realizzare un flip-flop JK master-slave


sensibile ai fronti del segnale di clock.
A partire dalla tavola di stato di fig. 9.3.1 si considerino le caselle di coordinate 100 e
101. Se il flip-flop dev'essere sensibile ai fronti e' necessario distinguere tra l'evento J =1
seguito da C = 1 e l'evento C = 1 seguito da J = 1. In quest'ultimo caso il circuito non deve
passare nello stato b, ma in un nuovo stato che memorizzi il verificarsi del relativo evento,
come illustrato nella tavola di stato di fig. 9.3.4. Si ricordi infine che una variazione
simultanea degli ingressi a partire dallo stato stabile a porta ad un'evoluzione che non puo'

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

9.4) Un nuovo approccio alla realizzazione dei circuiti asincroni.


Prima di passare alla realizzazione del flip-flop JK master-slave standard e' opportuno
introdurre un nuovo modello su cui puo' basarsi la realizzazione di circuiti asincroni. Tale
modo di procedere si rivela particolarmente utile quando per eliminare le alee statiche e

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

Si riconosce immediatamente che l'espressione appena ricavata e' l'equazione di stato di


un flip-flop RS, riconoscendo altresi' che il membro a destra del segno di uguaglianza si
riferisce a un determinato istante di tempo, mentre quello a sinistra si riferisce all'istante di
tempo immediatamente successivo.
Il modello che si sta perfezionando differisce pertanto dal modello fondamentale usato
nella normale sintesi dei circuiti sequenziali asincroni per il fatto che ora la variabile di stato
viene memorizzata in un flip-flop non sincronizzato. La struttura ottenuta ricorda quindi
quella dei circuiti sequenziali ad impulsi, senza tuttavia che in questo caso impulsi siano
presenti.
Si consideri ora un circuito sequenziale asincrono con una variabile di stato posta a 1 ed
una variazione di ingresso che lasci inalterata tale variabile. Si e' gia' visto in precedenza che
in tal caso puo' verificarsi il fenomeno conosciuto come alea statica e che tale fenomeno con
la normale sintesi dei circuiti sequenziali asincroni, nel quale le variabili di stato sono
reazionate direttamente, puo' dar luogo ad un'evoluzione errata.
Nel modello di fig. 9.4.1 non e' necessario che i segnali controllati dagli ingressi
rimangano costantemente a 1 per far si' che la variabile Yi permanga inalterata, poiche' il suo
valore e' memorizzato nel flip-flop RS. Tutto quello che si richiede e' che per tutto il tempo
durante il quale Yi deve rimanere a 1 Ryi rimanga a 0. In altre parole non ha alcuna importanza
analizzare se esistono alee statiche in Syi , ma per evitare transizioni di Yi da 1 a 0 e'
sufficiente che Ryi non passi mai a 1.
Esaminando ora la funzione Ryi si vede che essa puo' passare a 1 solo se una o piu' delle
funzioni gk vale 1. Poiche' le gk altro non sono che prodotti logici di variabili di ingresso e di
stato, un livello 1 potra' essere ottenuto solo per variazione di queste variabili poiche' i
prodotti logici sono evidentemente privi di alee. Di conseguenza il modello proposto e' privo
di alee statiche a livello 1.
Considerazioni del tutto analoghe portano a concludere che il circuito e' anche privo di
alee statiche a livello 0.
Il metodo di progetto proposto non solo elimina la possibilita' di alee statiche, ma puo'
anche produrre circuiti piu' semplici. A causa della presenza del flip-flop e' richiesto che Ryi e
Syi assumano valore 1 solo in corrispondenza di un'effettiva variazione della variabile di stato.
Quando tale variabile invece permane inalterata a Ryi e Syi possono essere assegnate le
condizioni non specificate che si deducono dalla tavola di eccitazione del flip-flop SR.
Pertanto se il numero delle transizioni di stato che comportano la commutazione di una
variabile e' piccolo, il metodo di progetto proposto puo' dar luogo a strutture circuitali piu'
semplici che non il metodo classico. Sfortunatamente il metodo che si sta esaminando non
risolve il problema delle corse e delle alee essenziali. Infatti ambedue i fenomeni sono
intimamente legati alla struttura della tavola di flusso e non al modo in cui il circuito viene
realizzato.

9.5) Realizzazione del flip-flop JK master-slave standard.


Un'occhiata anche sommaria alla tavola di stato di fig. 9.3.3 evidenzia che non vi e'
alcun problema anche se due variabili di ingresso commutano contemporaneamente. Pertanto

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

Da queste si ottengono infine le equazioni:

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.

9.6) Analisi di corse e alee.


Al capitolo VI sono stati esaminati i problemi legati alla presenza di alee nei circuiti
sequenziali asincroni; sono stati anche dati dei criteri di progetto che permettono di evitare sia
quelle statiche che quelle dinamiche e nel presente capitolo e' stato preso in esame un metodo
di progetto che ne assicura l'assenza.
Tuttavia non e' possibile garantire l'assenza delle alee essenziali, in quanto esse sono
legate alla struttura logica del problema e non a come il circuito viene realizzato; a tutto cio' si
aggiunge inoltre che spesso e' necessario far si' che piu' di una variabile di ingresso commuti
allo stesso tempo, con la conseguente possibilità di alee multiple. Si ricordi tuttavia che il
corretto funzionamento di circuiti che contengano alee multiple o essenziali dipende in larga
misura dal ritardo dei vari itinerari percorsi dal segnale.
Con riferimento al progetto del flip-flop JK, trattato al paragrafo precedente, e' gia' stato
fatto notare che in esso esiste un'alea essenziale. La situazione e' abbastanza tipica; capita
spesso infatti che in un progetto si presentino delle corse o delle alee in maniera o non
prevedibile a priori o comunque non evitabile. In questi casi il progettista deve assicurarsi che
tali fenomeni non siano pericolosi; sarebbe pertanto desiderabile disporre di tecniche
computazionali da usare per identificare casi di incerto comportamento in modo da poter
valutare la probabilita' che essi causino funzionamenti non corretti. Un possibile approccio,
come si accennera' piu' avanti, consiste nel simulare il funzionamento del circuito progettato;
la simulazione e' un importante strumento di indagine, che tuttavia coinvolge problematiche
notevolmente complesse le quali esulano dagli scopi di questa trattazione.
E' stata tuttavia sviluppata1 una tecnica computazionale che e' di solito in grado di
ottenere le desiderate informazioni in modo piu' esplicito e con tempi di calcolo notevolmente

EICHELBERG E.B. "Hazard detection in combinational and sequential switching circuits"


ï

×ÞÓ Ö±«®²¿´ ±º λ-»¿®½¸ ¿²¼ ¼»ª»´±°»³»²¬ Òò çð ø³¿®¦± ïçêë÷

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

violando pertanto i postulati dell'algebra booleana.


Ci si assicuri poi che il sistema sia chiuso definendo le operazioni di negazione, somma
e prodotto logico come illustrato in fig. 9.6.1.

_ 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

Considerando X un valore incognito le tabelle introdotte acquistano un significato


intuitivo.
Se A e' sconosciuta allora anche la negazione di A e' sconosciuta; 0 + X e X + X
saranno determinate in ogni caso dal valore sconosciuto X, mentre 1 + X sara' sempre 1
indipendentemente da quanto valga X. Considerazioni del tutto analoghe si possono fare per
l'operatore AND.

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.

PASSO 1: Prese in considerazione le variabili di ingresso che devono


cambiare si assegni a ciascuna d'esse il valore X, lasciando
inalterate le altre variabili di ingresso e quelle di stato. Si
calcolino in queste condizioni le funzioni di eccitazione e si
verifichi se qualche y' ha cambiato valore. Se cio' e' vero si
assegni alla corrispondente variabile di stato il nuovo valore e
si ripeta il calcolo finche' non si hanno piu' variazioni delle
variabili secondarie. A questo punto alcune delle variabili di
stato possono essersi stabilizzate a X.

PASSO 2: Si assegni ora alle variabili di ingresso in commutazione il loro


valore finale lasciando per tutte le altre variabili il valore
assunto alla fine del passo 1. Si calcolino nuovamente le
funzioni di eccitazione e se una o piu' di esse variano da X a 0
o 1 allora si modifichino le corrispondenti variabili di stato
ricalcolando poi le funzioni di eccitazione. Si prosegua in tal
modo finche' non vi sono piu' modifiche.

Il risultato dei passi 1 e 2 possono essere valutati con il seguente:

TEOREMA - Se un'eccitazione e' 1 (0) dopo l'esecuzione dei passi 1 e 2 per


una data variazione dell'ingresso e per un dato stato iniziale, allora
quest'eccitazione si stabilizzera' a 1 (0) per lo stesso stato iniziale e per
la stessa variazione di ingresso anche nel circuito fisico senza che il
ritardo dei vari gates abbia alcuna importanza. Se invece un'eccitazione
rimane uguale a X alla fine del passo 2 allora il funzionamento del
circuito viene a dipendere dall'entita' dei ritardi.

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

Si applichi la procedura descritta ai passi 1 e 2 a tale circuito e la si applichi poi a quello


ottenuto con l'eliminazione dell'alea statica, retto dall'equazione di eccitazione:

y1' D . C y1 .C y1 . D (9.6.1)

Si consideri solo la variazione che si ha quando dalla condizione D = C = y1 = 1 il


segnale C commuta a zero. Dalla tavola di stato di fig. 9.6.3 (b) si vede che questa commu-
tazione puo' dar luogo a un'alea statica.
In fig. 9.6.4 sono riportate le tabelle di commutazione ottenute con la procedura di
Eichelberg sia per il circuito di fig. 9.6.3 che per quello retto dall'equazione 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

senza la correzione dell'alea con la correzione dell'alea

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

000 0+0+0+0 0 0+0+0 0

X00 0+0+0+X X 0+0+0 0


passo 1
X0X X+X+X+X X 0+X+0 X

XXX X+X+X+X X X+X+X X


passo 2 1XX X+0+X+X X X+0+X X

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.

ingresso dati uscita dati


Logica
e
registri dati

informazioni segnali di
Clock di controllo
salto

Circuito
ingressi di
controllo
sequenziale di uscite di
controllo

controllo

figura 10.1.1

Il blocco superiore consiste in un insieme di registri di dati interconnessi da una logica


combinatoria, mentre il blocco inferiore fornisce una sequenza di segnali di controllo, che
gestiscono, in unione al clock, l'appropriato trasferimento dei dati tra i registri.
Il numero di segnali e di ingressi di controllo e' normalmente piccolo rispetto al numero
di linee di ingresso e di uscita dei dati e delle linee di interconnessione interne del blocco
superiore.

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.

10.2) Ingresso di controllo del clock.


In tutte le discussioni precedenti i circuiti sequenziali funzionanti secondo la modalita'
"clock mode" prevedevano il collegamento diretto del segnale di clock a tutti i flip-flop, come
e' illustrato in fig. 10.2.1 (a). In certe circostanze tuttavia, in particolare quando si usino flip-
flop di tipo D, tale approccio puo' risultare restrittivo.

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

10.3) Estensione della tavola di stato.


In fig. 10.3.1 sono mostrati tre flip-flop, B0, B1, B2 interconnessi da una linea di tra-
sferimento dei dati controllata dai segnali C1, C2, C3 e C4 generati a loro volta da un oppor-
tuno circuito di controllo sequenziale. La natura del circuito di controllo e' tale che solamente
uno dei quattro segnali Ci puo' assumere il valore logico 1 a un determinato istante.
Un esame piu' accurato del circuito rivela che vi sono quattro modalita' di trasferimento
dei dati, che possono aver luogo nel blocco inferiore di fig. 10.3.1. Se C1=1 allora i segnali di
ingresso X0 e X1 vengono trasferiti nei flip-flop B0 e B1 rispettivamente; la notazione
normalmente usata per identificare tale trasferimento e':

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)

Se C3=1 il trasferimento e':

B1 B 0 . B1 (10.3.3)

mentre se C4=1 si ha:

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
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

Si aggiunga a questo punto alla tradizionale tavola di stato un'ulteriore colonna


contenente l'indicazione dei trasferimenti che hanno luogo in corrispondenza a ciascun stato.
Assieme all'equazione di uscita:

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.

10.4) Descrizione a programma.


Sebbene la tabella di fig. 10.3.2 sia una conveniente descrizione del corrispondente
circuito, l'utilizzarla per circuiti con un gran numero di ingressi e di stati di controllo darebbe
comunque luogo ad una rappresentazione poco maneggevole. Scopo del presente paragrafo e'
quello di sviluppare una descrizione dei circuiti sequenziali ancora piu' compatta, che abbia un
aspetto formale simile a quello di un programma per calcolatore.
La lista dei trasferimenti di fig. 10.3.2 somiglia infatti alle istruzioni di un programma; i
flip-flop corrispondono alla variabili scalari e i nuovi valori di queste variabili sono le
espressioni sulla destra di ciascuna freccia di trasferimento. Per convenzione si assumera' che
i trasferimenti descritti nella stessa riga avvengano simultaneamente. Nel seguito verra' poi
introdotta una notazione vettoriale per descrivere in modo piu' efficiente i trasferimenti
simultanei. Le informazioni di salto ovviamente non sono comprese nella lista dei
trasferimenti, ma nella tavola di stato. Ad esempio, a partire dallo stato C1 o dallo stato C4
viene eseguito un salto condizionato dal valore della variabile a. Se invece si considera lo
stato C2 il salto avviene sempre verso C1 senza alcuna condizione.
Per ottenere il voluto tipo di descrizione e' sufficiente adottare un'opportuna notazione
che permetta di trasformare la lista dei trasferimenti in un completo programma di descrizione
del circuito. Si puo' pensare, per descrivere i salti, di utilizzare una notazione simile a quella
dell'APL, inserendo dopo ciascuna istruzione di trasferimento un'istruzione di salto. Ciascun
passo del programma sara' numerato con il numero rappresentativo del relativo stato. L'unico
caso in cui l'istruzione di salto potra' essere omessa sara' quando il controllo dovra' portarsi
comunque verso il successivo passo numerato.
La forma generale di un'istruzione di salto sara':

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

xn xn-1 xn-2 z n+2 z n+1 z n

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’ l’informazione sui valori dell’ingresso 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 all’ingresso 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.

xB0 xB0 xB0


B 00 01 11 10 B 00 01 11 10 B 00 01 11 10
1 1 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

Le funzioni risultanti sono:

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
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

r=1 r=1 r=1

1 1 1/C1,2

r=0 r=0 r=1 r=0

r=1
r=0,1
2 2 1/C1,2

r=0 r=0

1/C 3
3

(a) (b) (c)

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

e da' luogo alle seguenti equazioni:

y'1 r .y 2 y' 2 r .y 2 . y 1
C1,2 y2 C3 y2

Un'implementazione di queste espressioni e' riportata in fig. 10.5.5.

232
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

D Q
T
r

D Q C3
Clock T
C1,2

figura 10.5.5

L'unione del controllore di sequenza cosi' ottenuto e della sezione di memorizzazione


dei dati e di logica di fig. 10.5.3 e' con elevata probabilita' una realizzazione altamente
efficiente. Infatti la realizzazione minima, ottenuta con le tecniche formali dei capitoli
precedenti, prevede 12 stati che si accordano perfettamente con 3 stati di controllo x 4 stati per
i dati, che sono stati qui ottenuti. Questo non significa ovviamente che i due circuiti siano
identici, ma solamente che hanno lo stesso grado di complessita'.
Sebbene la tecnica illustrata per ottenere il controllore di sequenza porti alla
realizzazione minima dello stesso, in certe circostanze e' preferibile giungere a
un'implementazione che utilizza un flip-flop per ciascun stato, usando un'opportuna rete
combinatoria per trasferire il controllo al passo appropriato. Una rete logica atta a realizzare
l'istruzione di salto del passo 1:

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

dal passo 2 D Q Uscita del


passo 1
T
dal passo 3
Clock

figura 10.5.7

Il circuito completo del controllore di sequenza dell’esempio 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

Poiche' il controllore di sequenza ottenuto con la tecnica della minimizzazione formale


e' chiaramente piu' economico di quello ottenuto per traduzione diretta della sequenza di
controllo, ci si potrebbe chiedere perche' quest'ultima tecnica debba essere preferibile. La cosa
e' facilmente intuibile quando si consideri che in molti casi, malgrado la divisione del circuito
in sezione dati e in sezione di controllo, il numero di stati del controllore di sequenza e'
comunque tanto grande da rendere il metodo formale di minimizzazione impraticabile. Inoltre
anche se la minimizzazione conduce a un circuito con il minimo numero di stati, cio' non
significa necessariamente che il circuito sia minimo nel suo complesso. Infine, anche se la
traduzione diretta della sequenza di controllo e' un approccio inizialmente meno economico,

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

non specifica il trasferimento di un'informazione a z, bensi' che la linea chiamata z risulta


collegata all'uscita del flip-flop B. E' bene osservare che la distinzione tra trasferimento e
interconnessione e' sottile; tuttavia essa e' molto importante e nel seguito va sempre tenuta
presente.

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
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

E' abbastanza semplice realizzare la sezione di memorizzazione dei dati e il controllore


di sequenza. Per quest'ultimo l'implementazione minima sara' data da un contatore modulo 4
con linea di reset separata.
Esiste una relazione tra la sequenza di controllo e la partizione degli stati introdotta ai
capitoli precedenti nella discussione dei circuiti sequenziali sincroni. Si puo' vedere che
qualsiasi sequenza di controllo di un circuito sequenziale, che non contenga dati di salto, de-
finisce una partizione chiusa degli stati del circuito sequenziale che fa corrispondere una
classe di equivalenza a ciascun passo della sequenza di controllo. Al capitolo VII e' stato
messo in luce che una partizione chiusa degli stati permette sempre di raggruppare gli ele-
menti di memoria del circuito in sottoinsiemi in modo che gli ingressi di questi elementi non
siano funzione di valori memorizzati al di fuori dell'insieme di flip-flop. Nel presente contesto
i flip-flop che formano questo sottoinsieme sono quelli del controllore di sequenza.
Vi sono diversi modi di sviluppare la parte circuitale destinata alla memorizzazione dei
dati e alla logica prima di realizzare il controllore di sequenza. Non tutte queste realizzazioni
ovviamente conterranno un numero minimo di flip- flop; inoltre una realizzazione ottimale
del circuito sequenziale non e' unica e a ciascuna di esse corrisponde un diverso controllore di
sequenza. E' presumibile che a ciascuna di queste realizzazioni corrisponda una diversa
partizione chiusa degli stati. In particolare deve esistere sia la partizione banale in cui tutti gli
stati si trovano nella stessa classe di equivalenza che quella in cui ogni stato si trova in una
diversa classe. In quest'ultimo caso il controllore di sequenza coincide con il circuito
sequenziale completo.
Nel primo caso invece vi e' un unico stato (e di conseguenza nessun elemento di
memoria) nel controllore di sequenza. Una sequenza di controllo ad un passo e' evidentemente
uno strumento poco efficace per descrivere un sistema a larga scala.
Per il controllore di parita', relativamente semplice, puo' tuttavia essere conveniente
prendere in considerazione una sequenza di controllo a un passo. Essa e':

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)

Si vede immediatamente che una realizzazione minima richiede 8 stati. Dovranno


quindi essere aggiunti alla sezione di memorizzazione dei dati due flip-flop, in quanto la se-
zione di controllo non ha memoria. Questi due flip-flop N1 e N2 funzionano continuamente
come un contatore modulo 4 senza segnale di reset. Si noti che ora le espressioni per z e per il
prossimo stato di p sono funzioni di N1 e N2. Di conseguenza z e' uguale a 0 tranne quando N1
= N2 = 1 e la parita' e' memorizzata in p tranne quando N1 = N2 = 1 e il flip flop viene
azzerato. Poiche' il controllore di sequenza minimo e' effettivamente un contatore modulo 4,
la realizzazione (10.5.2) e' probabilmente molto simile a quella (10.5.1).

10.6) Operazioni vettoriali.


Ai paragrafi precedenti e' stata introdotta una notazione che permette di scrivere la
sequenza di controllo per qualsiasi circuito sequenziale. Essa tuttavia risulta conveniente solo
quando il prossimo stato di ciascun elemento di memoria deve essere specificato sepa-
ratamente. Nei sistemi di maggiori dimensioni e' piu' conveniente trattare un insieme di flip-
flop come un registro, evitando in tal modo di scrivere espressioni separate per il prossimo
stato di ciascun flip-flop del registro.

237
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

E' necessario pertanto introdurre un'opportuna notazione per rappresentare le operazioni


logiche e i trasferimenti tra registri. Si stabilisca pertanto che le grandezze scalari (i singoli
flip-flop) siano identificate con lettere minuscole, mentre le grandezze vettoriali, cioe' i
registri, siano indicati con lettere maiuscole. Come nei linguaggi di programmazione e' poi
necessario specificare il numero di elementi di cui si compone un registro; cio' puo' esser fatto
con un'istruzione di DIMENSION, a simulitudine di quanto si fa ad esempio nel FORTRAN,
posta in testa alla sequenza di controllo di qualsiasi circuito sequenziale che contenga un
registro.
Ad esempio l'istruzione:

DIMENSION A(3),B(8)

all'inizio di una sequenza di controllo stara' ad indicare che il circuito sequenziale


contiene almeno 11 flip-flop, 3 nel registro A e 8 nel registro B.
Quando si rendesse necessario trasferire una costante in un registro si puo' usare la
notazione:
A 1,0,1,1

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

e' un registro da 8 bit, tale che

C0 = A0 C1 = A1 C2 = A2 C3 = A3 C4 = p C5 = B0 C6 = B1 C7 = B2

E' sempre possibile infine formare un vettore da un sottoinsieme di flip-flop di un


registro, attraverso l'uso degli indici e la concatenazione.
Se, ad esempio, si vuole trasferire nel registro B (da tre bit) il contenuto dei flip-flop
dispari del registro D da sei bit, si puo' scrivere:

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

10.7) Funzioni logiche di vettori.


Affinche' la notazione vettoriale introdotta al paragrafo precedente sia realmente in
grado di semplificare la descrizione a programma di un circuito, dev'essere possibile espri-
mere in modo compatto le operazioni booleane che coinvolgono registri.
Una notazione che e' conveniente introdurre e' l'operazione di riduzione riferita agli
operatori AND e OR e simbolicamente rappresentata con ./A e +/A rispettivamente.
L'operazione ./A rappresenta l'AND di tutti gli elementi di A, cioe':

./A = A0.A1 ........ A a-1 (10.7.1)

e in analogia

+/A = A0 + A1 + ........+ A a-1 (10.7.2)

dove a e' il numero di elementi di A.


I tre operatori logici fondamentali AND, OR e NOT possono essere applicati anche ai
vettori. Ad esempio:

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)

Evidentemente l'ultima operazione e' definita unicamente se i due registri A e B hanno


lo stesso numero di elementi. Si puo' tuttavia definire un'operazione di AND e OR tra uno
scalare e un vettore, intendendo in tal caso che l'operazione viene compiuta tra lo scalare e
ciascun elemento del vettore. Ad esempio:

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

assumendo che i valori iniziali siano

R = (1,0,0,1,0,1,1) S = (1,1,0,0,0,0,1)

Soluzione:

(a) 2 R 2 1,0,0,1,0,1,1 1,1,1,0,0,1,0

(b) R 1,0,0,1,0,1,1 0,0,1,0,1,1,0

240
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

(c) . /R S . / 1,0,0,1,0,1,1 S 1.0.0.1.0.1.1 S 0 S S

(d) R .S 1,0,0,0,0,0,1 0,1,1,1,1,1,0

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:

r B0 .B1.B2 . A0 | B0.B1. B2 . A1 B0 . B1 .B2 . A2 B0. B1 . B2 . A3

B0 .B1.B2 . A4 B0 .B1. B2 . A5 B0 . B1 .B2 . A6 B0 . B1 . B2 . A7 (10.7.6)

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)

per rappresentare le 2n uscite di un selettore di n variabili. L'espressione (10.7.6) potra' allora


essere scritta come:

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.

INPUT : TAPE(8), go, ready


OUTPUT : z

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

assumera' il valore 1 e il controllo verra' trasferito al passo 8. A questo punto il flip-flop z di


errore verra' posto a 1, verra' iniziato il riavvolgimento della cassetta, il contatore verra' az-
zerato e il controllo trasferito al passo 1.

7. COUNT INC COUNT


/Y YD .8 /Y YD .9

8. z 1, rewind 1, COUNT 8
1

Se il test ha invece successo si passa al passo 9 dove il contenuto di COUNT viene


esaminato. Se e' pari a 0 si prosegue verso il passo 10, in caso contrario si ritorna al passo 3.

9. /COUNT .10 /COUNT .3

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):

M 0 . DECODE AR 0 M1 . DECODE AR 1 ... M m . DECODE AR m

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

Nell'esempio che segue si introdurra' inoltre la notazione per il trasferimento


condizionato che permette di trattare casi in cui in un dato punto di una sequenza di controllo
vi siano parecchi possibili trasferimenti in funzione di altri dati.

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

2. AR e 10 * SSR 0 .SSR 1 0,1, e 8 * SSR 0 . SSR 1


1,0, e 8 * SSR 0 .SSR 1 1,1, e 8 * SSR 0 . SSR 1

3. PR SELECT ROM, DECODE AR

4. AR INC AR
ss .5 ss .7
8 8
5. / /AR .3 / /AR .6
6. ss 0
7. PR e 18

248
#
Í·-¬»³· ¼·¹·¬¿´· ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïð

Il passo 2 e' un esempio di trasferimento condizionale, la cui notazione generale e':

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

Si supponga infatti di essere in possesso di un multiplexer con n bit di indirizzo, cioe' di


n
un dispositivo in grado di smistare un ingresso verso una di 2 linee di uscita in funzione del

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

Questa osservazione permette di realizzare la funzione nella forma illustrata in fig.


11.1.2, connettendo semplicemente i vari ingressi alle linee 0,D,D,1, secondo quanto
specificato nella tavola di verita'.

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.

SSI MSI LSI


Gates piccoli grandi
e flip-flop
individuali Sottosistemi

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.

11.3) Il progetto con parti MSI standard.


L'uso di parti standard piu' complesse che non i singoli gate tende a semplificare la
procedura di progetto anziche' complicarla.
In effetti una parte dell'attivita' del progettista si riduce a cercare sul catalogo del
venditore quegli elementi che possono essere adattati all'obiettivo che egli si propone. Di
conseguenza, quando una consistente porzione della funzione totale del sistema e' stata
realizzata con parti standard, le manipolazioni booleane necessarie vengono
corrispondentemente ridotte.
E' interessante inoltre notare che, anche quando le parti standard sono sequenziali, il
problema della loro interconnessione e' molto spesso un problema completamente combi-
natorio. In tal caso l'approccio da usare non differisce in alcunche' da quello usato nelle rea-
lizzazioni a logica sparsa o a componenti discreti.
Per convincersi della potenza e della semplicita' del progetto con parti standard MSI e'
opportuno prendere in considerazione alcuni esempi.

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

00 --- --- --- ---


A <B
1 1
01 --- < < >
A =B
1 1
11 --- < = >
A >B 10 --- < > >
1 1

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

00 --- --- --- ---

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

e il relativo circuito e' riportato in fig. 11.3.3.


Si noti che per progettare il circuito non vi e' stato alcun bisogno di speciali tecniche
MSI, tuttavia il risultato e' probabilmente piu' semplice di qualsiasi progetto che si dovesse
avvalere unicamente di gate individuali.

A2 f2
Comparatore
Z
B2 da 4 bit f1

g
2
A1
Comparatore Z
g1
B1 da 4 bit

figura 11.3.3

L'esempio che segue si riferisce ad un circuito sequenziale e, come accade di solito in


questi casi, non fa uso della tavola degli stati dell'intero circuito.
A tutt'oggi, d'altra parte, rimane un problema di notevole interesse quello di individuare
la tavola di stato di una parte standard entro la tavola di stato del circuito sequenziale da
progettare.

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

Da tale tavola di stato si ricavano facilmente le equazioni di eccitazione del flip-flop.

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

mentre i restanti 9 sono:


Z16 d 0 . y d 0 y
.................................
Z 24 d8 . y d8 y

Il progetto completo dell'unita' di controllo e' riportato in fig. 11.3.5.


E' evidente che usando gate individuali i 25 NOR d'uscita non sarebbero necessari, in
quanto potrebbero essere combinati nella funzione di decodifica. Nel caso in esame invece il
decoder e' una parte standard MSI e non puo' essere modificato. Tuttavia la configurazione
raggiunta e' senz'altro piu' economica di quella che si otterrebbe con gate individuali.
Quanto piu' e' complesso un sistema, tanto piu' e' probabile che esso venga realizzato
usando parti MSI. Nel capitolo precedente d'altra parte si e' visto che i sistemi piu' complessi
possono essere descritti mediante un opportuno linguaggio di progetto. Si puo' pertanto

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

Z 0 = Ritorno carrello + avanzamento riga

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 :

OUTPUT: Z = typ .X 0 .X1. DECODE 4 /X , typ.X 0 . X1 . DECODE 4 /X ,


typ . X 0 .X1. DECODE 4 /X , typ . X 0 . X1 . DECODE 4 /X

Questa espressione logica combinatoria, che e' la concatenazione di quattro vettori da 16


bit, rappresenta l'uscita istante per istante. Si noti inoltre che tutti i bit di questo vettore
saranno 0 a meno che typ non valga 1; in quest'ultimo caso solamente un bit varra' 1. La
subroutine logica combinatoria DECODE altro non e' che il decoder MSI da 4 bit. Si osservi
che per ricavare un decoder da 6 bit da uno da 4 bit sono necessari 64 gate AND e quattro
invertitori.
I passi rimanenti della sequenza di controllo sono:

1. COUNT 10 ; cr 0
sread .2 sread.1

4
2. cr X0 .X1. DECODE /X 0 ; COUNT INC COUNT ; typ 1

3. COUNT INC COUNT


6 4
/ cr . /COUNT , /COUNT .4
6 4
/ cr . /COUNT , /COUNT .3

4. ready 1
1

Si supponga che il contatore sia progettato in modo da incrementarsi ad ogni impulso di


clock a meno che al suo ingresso di reset non sia applicato un 1. L'ingresso di reset pertanto
verra' connesso alla linea di controllo COUNT 10 .
Dopo che un carattere sara' stato fornito, il passo 2. porra' cr a 1 qualora tale carattere
fosse il ritorno carrello e porra' typ a 1 per abilitare l'uscita. Si noti che, sebbene non vi sia
alcun segnale di controllo che corrisponda a:

COUNT INC COUNT

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.

11.4) Considerazioni economiche sui circuiti integrati.


Sulla scelta della tecnologia con cui implementare un determinato sistema digitale pesa
evidentemente in maniera determinante il rapporto costo - velocita'. Tuttavia per ragioni di
semplicita' nel seguito si fara' l'ipotesi che la velocita' non sia un fattore critico.
Si consideri pertanto la situazione nella quale un'adeguata realizzazione di un circuito
possa essere ottenuta sia utilizzando gate individuali ed elementi di memoria, sia usando gate
individuali e parti standard MSI, sia ricorrendo ad una realizzazione LSI specializzata. E'
ovvio che la scelta tra i tre possibili approcci e' determinata in questo caso unicamente da
considerazioni economiche.
E' necessario come primo passo sviluppare un'espressione che permetta di valutare il
costo di produzione di n parti MSI o LSI.
Un costo considerevole e' certamente quello associato alla produzione del layout, delle
maschere, alla simulazione e alla generazione delle sequenze di test. Questi costi, chiamati
costi di progetto, sono indipendenti dal numero di dispositivi prodotti e variano con la
complessita' della parte progettata. Un'espressione approssimata per il costo di progetto,
quando g sia il numero di gate contenuti nel dispositivo, e':

260
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï

costo di progetto = A + B.g

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:

Costo di n parti = A + B.g + (C + D.g).n (11.4.1)

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:

Costo di una parte standard = C + D.g

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':

Costo dei componenti della rete ibrida = (K + 30 . 0,05).m =


= (K + 1.5).m (11.4.2)
E' necessario poi tenere in conto un costo addizionale non trascurabile per la realiz-
zazione delle interconnessioni. Assumendo che il costo totale di interconnessione sia di W
dollari si ha:

261
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï

Costo della realizzazione ibrida = (K + W + 1.5).m (11.4.3)

Nel caso di una realizzazione totalmente "custom" la (11.4.1) si riduce per m esemplari
a:

Costo della realizzazione "custom" = p + Q.m

quando il numero di gate sia fissato (85).


Le relazioni ricavate sono riportate in grafico in fig. 11.4.1 e per facilitare il confronto
tra le due possibili soluzioni su tale grafico sono riportate sia la relazione (11.4.2) che la
(11.4.3)

½±-¬± ݱ-¬± ·¾®·¼±


øÕõÉõïòë÷ò³

½±-¬± ¼· ·²¬»®½±²²»--·±²»
½±-¬± ¼»· ½±³°±²»²¬·
øµõïòë÷ò³

®»¿´·¦¦¿¦·±²» ½«-¬±³
°õÏò³

³
° °
ÕõÉõïòëóÏ ÕõïòëóÏ

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
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï

In genere un sistema complesso puo' essere partizionato in diversi sottosistemi. Di solito


vi sono parti MSI standard che sono un'accettabile approssimazione di parecchi, ma non di
tutti questi sottosistemi. La stessa partizione in effetti puo' dipendere dal fatto se sia
economicamente conveniente o meno una realizzazione di tipo "custom".
Infine poiche' in generale vi e' un significativo interesse nei confronti delle memorie
ROM, e poiche' le considerazioni economiche ad esse relative si differenziano per qualche
aspetto da quelle finora viste, ad esse si fara' riferimento nel seguito del presente paragrafo.
Tali memorie possono venir utilizzate per immagazzinarvi le sequenze di controllo di
unita' microprogrammabili o per rimpiazzare logiche combinatorie. E' opportuno pero'
ricordare che il ritardo di una ROM puo' essere dell'ordine della decina di volte il ritardo at-
traverso due livelli di un circuito realizzato con componenti veloci. Pertanto l'uso di ROM
nella realizzazione di logiche combinatorie e' limitato a quelle applicazioni in cui la velocita'
non e' determinante.
L'uso di ROM infine indirizza verso realizzazioni ibride, con parti combinatorie ed
elementi di memoria realizzati con chip separati. Se tutte queste considerazioni non portano a
escludere a priori l'uso di ROM, allora l'opportunita' o meno del loro impiego diventa una
questione puramente economica.
Esistono due tipi di ROM utilizzabili; il primo e' programmabile direttamente
dall'utente, solitamente con mezzi elettrici; il secondo tipo invece viene programmato diret-
tamente in fase di costruzione registrando permanentemente i dati durante il processo di fab-
bricazione.
Le ROM programmabili dall'utente possono essere considerate parti LSI standard ed il
costo della loro programmazione e' analogo al costo di interconnessione di cui si e' parlato in
precedenza. Il costo unitario di queste ROM e' notevolmente maggiore di quelle del secondo
tipo; tuttavia non vi e' alcun costo aggiuntivo da prendere in considerazione. Come suggerito
dal grafico di fig. 11.4.1 le ROM programmabili saranno la scelta piu' opportuna quando la
produzione e' di pochi esemplari.
Per quanto riguarda le ROM del secondo tipo, dette a maschera, vi sono due passi per
prepararne la produzione. Il primo passo consiste nel predisporre per la produzione un chip
standard completo dei circuiti di indirizzamento. Il secondo passo consiste nell'utilizzare una
lista fornita dall'utente, in cui e' descritto il contenuto desiderato della memoria, in modo da
sviluppare la maschera necessaria al processo di metallizzazione finale.
Il costo della ROM pertanto puo' essere spezzato in tre parti e cioe' nel costo per la
preparazione del passo 1 e del passo 2 e nel costo addizionale associato con la produzione di
ciascun esemplare.
Una parte del costo del passo 1 puo' essere indicata, come gia' e' stato detto, con A.
Un'altra parte del costo andra' riferita al decodificatore degli indirizzi e potra' essere consi-
derata approssimativamente proporzionale al numero (2n ) di linee di uscita del decodificatore
stesso. La parte rimanente del costo sara' proporzionale al numero totale di bit della ROM, in
quanto per ciascuno di essi si rende necessario un transistore. Indicando con b il numero totale
di bit per parola, il costo del passo 1 sara':

Costo del passo 1 = A + B.2n + C.(2n.b)

dove normalmente B >> C.


Il costo di produzione della maschera necessaria alla metallizzazione finale contiene una
parte fissa e una parte proporzionale al numero totale di bit. Si ottiene:

263
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï

Costo del passo 2 = D + E.(2n.b)

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:

Costo incrementale = F.(n + b)

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.

A. Analisi della rete.


B. Modo asincrono con uscita analogica.
C. Modo asincrono con uscita binaria.
D. Modo sincrono.

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
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï

Le simulazioni piu' accurate sono evidentemente basate sui programmi di analisi


circuitale (punto A di fig. 11.5.1), quali ad esempio lo SCEPTRE e lo SPICE. In tal caso per
ottenere la massima precisione nel simulare il funzionamento interno dei singoli elementi
circuitali e nel ricavare i valori delle uscite non si pongono vincoli al tempo di calcolo.
Sfortunatamente per grosse reti logiche il costo della simulazione condotta per tale via diviene
proibitivo .
All'estremo opposto della curva di fig. 11.5.1 (punto D) si trova la simulazione sincrona.
E' il tipo di simulazione meno costosa e va usato non appena sia in grado di fornire il dettaglio
richiesto. C'e' tuttavia da rilevare che non tutti i dispositivi MSI o LSI sono progettati per
operare in modo sincrono. Inoltre molto spesso le informazioni che si vogliono ottenere
riguardano la possibilita' o meno che un sistema ha di operare ad una determinata frequenza di
clock e tale informazione puo' essere ottenuta solo ricorrendo ad una simulazione asincrona in
modo fondamentale.Per definizione, infatti, una simulazione sincrona implica un'iterazione
per ciascun periodo di clock. I valori delle uscite e degli stati futuri vengono cioe' calcolati
dalla rete combinatoria e memorizzati in corrispondenza ad ogni istante di clock.
Un numero molto maggiore di iterazioni viene richiesto quando la simulazione viene
condotta in modo asincrono, anche se il risultato in output dovesse risultare sincrono. Si
devono cioe' avere diverse iterazioni tra successive variazioni del clock per permettere ai
segnali di propagarsi correttamente e lo stesso clock deve venir considerato come un qualsiasi
altro ingresso. Un tal modo di procedere tuttavia permette di ottenere una messe di
informazioni notevolmente maggiore che non operando nel modo sincrono. Per ridurre il
tempo di calcolo alcune simulazioni di tipo sofisticato usano degli intervalli di tempo variabili
tra un'iterazione e l'altra.
Un'importante differenza tra la simulazione sincrona e asincrona consiste anche nel fatto
che la descrizione della rete nel secondo caso dev'essere notevolmente piu' dettagliata. Nella
simulazione sincrona infatti un flip-flop puo' essere considerato un unico elemento, mentre
nella simulazione asincrona deve essere trattato come un insieme di 8-10 gate.
Per tutte le ragioni esposte il tempo macchina in una simulazione asincrona e' da 10 a
100 volte superiore di quello di una simulazione sincrona condotta sulla stessa rete logica.
Per la simulazione asincrona sono possibili vari approcci; se si ha un accurato modello
per i gate, simile a quello illustrato schematicamente in fig. 11.5.2 (a), si puo' in pratica
ottenere l'andamento della tensione di uscita tra i due livelli logici in modo continuo.
L'utilizzo di modelli di questa struttura, di natura certamente complicata, si rivela
particolarmente utile quando vi e' la possibilita' di corse e di alee. In caso contrario ci si puo'
rivolgere a modelli semplificati del tipo di quello illustrato in fig. 11.5.2 (c).
Con riferimento alla fig. 11.5.2 (b) il blocco indicato come matrice di interconnessione
altro non e' se non una rete di connessioni e in un programma di calcolo tale funzione viene
realizzata descrivendo in qualche maniera il collegamento tra la matrice che contiene l'uscita
dei vari gate e la matrice degli ingressi degli stessi gate. Non si tentera' in questa sede di
descrivere come cio' venga effettivamente fatto, in quanto le varie soluzioni fino ad oggi
proposte sono molto varie e non riconducibili ad un'unica descrizione.

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

contatore di ritardo soglia di uscita

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
l’uscita 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.

SUPERVISORE i=1 Calcola i nuovi


ingressi dei gates
Aggiorna la matrice
di connessione
Esegue le stampe Calcola le uscite
e gli stop i=i+1 di tutti i gates

Aggiorna i
contatori di ritardo

Determina le
nuove uscite
no
i=k?

si

figura 11.5.4

268
#
ײ¬»¹®¿¦·±²³» ¿ ³»¼·¿ » ¿ ´¿®¹¿ -½¿´¿
Ý¿°·¬±´± ïï

A titolo di esempio si prenda in considerazione la simulazione asincrona di un gate


AND a due ingressi A e B, supponendo che sia Smax = 2 e Smin = -3. Gli ingressi siano
quelli illustrati di seguito.

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

11.6) Generazione delle sequenze di test.


La fase di test per circuiti a componenti discreti o per circuiti integrati SSI e' di solito
considerata un problema collaterale e poco importante nell'ambito del processo di produzione.
Il problema si presenta invece notevolmente piu' complesso quando si tratta di verificare
circuiti MSI o LSI.
Si consideri infatti che in reti anche solo di 100 gate le interconnessioni possono essere
diversissime, che il circuito puo' essere puramente combinatorio oppure sequenziale e in
quest'ultimo caso puo' essere sincrono o asincrono. Infine che nella maggior parte dei casi il
numero degli ingressi e' maggiore del numero di uscite.
La rappresentazione a "black box" di fig. 11.6.1 di un circuito con 10 ingressi e 4 uscite
puo' sembrare poco significativa, ma somiglia moltissimo agli involucri dei circuiti integrati
cosi' come si presentano alla fase di test. In particolare risulta evidente che le uniche misure
che si possono fare sono quelle sui terminali di uscita z1 ...... z4.
Pertanto, se vi e' un guasto nella rete, e' necessario far si' che il suo effetto compaia su
una di queste linee di uscita. In altre parole si deve far si' che l'uscita di una rete difettosa sia
diversa da quella che si ha in corrispondenza agli stessi ingressi su una rete che non presenti

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.

H.Y.Chang - E.G.Manning - G. Metze " Fault diagnosis of digital systems"


øö÷

Wiley - Interscience - N.Y. 1970


J.P.Roth - W.G.Bouricius - P.R.Schnieder " Programmed Algorithms to compute test to
øöö÷

detect and distinguish between Failures in Logic Circuits"


IEEE Transactions on Electronic Computers - EC 16. - 567 - 579 (ottobre 1967)

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:

1) SA0 dell'altro ingresso del gate all'estrema sinistra


2) SA0 dell'ingresso superiore del gate NOR
3) SA1 dell'uscita del gate NOR
4) SA1 dell'ingresso superiore del gate AND piu' a destra.

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.

12.2) Interruttori e rele'.


Il piu' semplice dispositivo di commutazione e' l'interruttore, cioe' un dispositivo capace
di interrompere o chiudere un circuito. Un rele' e' invece un interruttore azionato da un
elettromagnete. La posizione assunta dai suoi contatti, quando nella bobina dell'elettromagnete
non circola corrente, viene detta posizione normale. Esistono pertanto rele' con contatti
normalmente aperti, detti anche contatti di lavoro, e rele' con contatti normalmente
chiusi, detti anche contatti di riposo. Il simbolo con cui vengono rappresentati questi contatti
e' riportato rispettivamente in fig. 12.2.1 (a) e 12.2.1 (b).

(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.

12.3) Caratteristiche basilari dei circuiti a rele'.


Come si e' gia' accennato in precedenza, la teoria della commutazione e' stata in origine
sviluppata per la progettazione dei circuiti di commutazione telefonica che utilizzavano
interruttori e rele'. Al giorno d'oggi i rele' sono stati largamente rimpiazzati dai circuiti
elettronici nella maggior parte dei circuiti digitali; rimangono tuttavia alcune situazioni in cui i
rele' sono i dispositivi piu' pratici per realizzare circuiti logici, come ad esempio nei casi in cui
si debbano controllare potenze non indifferenti.
Un rele' e' realizzato con un elettromagnete e un pacco di contatti. I contatti operano
quando nella bobina del rele' viene fatta circolare corrente. Si e' gia' parlato al paragrafo
precedente dei contatti normalmente aperti (NO) e dei contati normalmente chiusi (NC); e'
opportuno introdurre un terzo tipo di contatto, detto contatto di scambio, realizzato
combinando un contatto NO e uno NC, come illustrato in fig. 12.3.1

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.

12.4) Realizzazione a rele' delle funzioni simmetriche.


Le funzioni simmetriche possono essere realizzate in maniera notevolmente economica
usando reti di contatti. Si noti infatti che le cinque uscite della rete di fig. 12.4.1 sono le
cinque funzioni simmetriche elementari di quattro variabili.

(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

12.5) I rele' nei circuiti sequenziali.


Tra i vari tipi di rele' disponibili esistono i rele' a tenuta (latching relays), cioe' quelli nei
quali l'una o l'altra delle due posizioni puo' essere mantenuta anche quando l'eccitazione viene
a cessare. Questi dispositivi operano come un flip-flop, in quanto quando uno di essi viene
posizionato in uno dei suoi due stati, dando corrente a una delle sue due bobine, vi rimane
finche' l'altra sua bobina non viene eccitata. Parimenti due rele' ordinari possono essere
collegati in modo incrociato per formare elementi di memoria allo stesso modo in cui si
collegano porte NAND e NOR. I sistemi che usano rele' a tenuta possono essere considerati
circuiti sequenziali sincroni o a impulsi, tuttavia l'uso di questi componenti non e' molto
diffuso presso i progettisti di circuiti a rele'. Piu' frequentemente alla rete combinatoria del
rele' viene aggiunta una reazione in modo da formare un circuito sequenziale funzionante in
modo fondamentale. In fig. 12.5.1 e' illustrata una configurazione circuitale che si comporta
come un flip-flop SR, con l'ingresso A corrispondente al set e il B al reset.

_
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

12.6) I circuiti logici.


Gli interruttori e i rele' hanno avuto una grande importanza storica, ma al giorno d'oggi
la maggior parte dei sistemi digitali e' realizzata con dispositivi elettronici, essenzialmente
diodi semiconduttori e transistori.
In termini ideali un diodo ha una resistenza nulla in senso diretto ed infinita in senso
inverso e la sua caratteristica e' quella riportata in fig. 12.6.1 (a). Nella realta' le due ipotesi
enunciate non sono affatto verificate e l'effettiva caratteristica di un diodo reale e' quella di fig.
12.6.1 (b).
Senza entrare in eccessivo dettaglio si puo' ricordare che per un diodo reale la resistenza
diretta non e' nulla, mentre quella inversa non e' infinita. Inoltre per tensioni inverse
sufficientemente grandi si ha il fenomeno della scarica zener per effetto del quale la corrente
sale rapidamente.

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 funzionamento e' evidente e realizza in logica positiva la funzione NAND, in logica


negativa la funzione NOR. E' bene far osservare che l'aggiunta di un invertitore diminuisce
sostanzialmente i problemi di carico di un gate a diodi, ma non li elimina completamente. Si
consideri infatti la situazione di fig. 12.6.5, in cui un gate NAND pilota un secondo gate dello
stesso tipo.

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.

12.7) Velocita' e ritardo nei circuiti logici.


La velocita' operativa dei circuiti logici e' generalmente un parametro importante,
soprattutto nelle applicazioni di calcolo automatico. Per tale ragione gran parte degli sforzi
dedicati al campo della progettazione circuitale tendono a realizzare dispositivi sempre piu'
veloci.
Malgrado che questo aspetto riguardi piu' i progettisti di circuiti che non i progettisti
logici, la conoscenza, sia pure qualitativa, della natura delle transizioni e dei ritardi introdotti
dalle strutture circuititali con cui si ha a che fare gioca un ruolo importante nella teoria logica
dei circuiti sequenziali.
La fig. 12.7.1 illustra un invertitore nella configurazione a emettitore comune e la sua
risposta ad un impulso positivo applicato alla base, tale da portarlo da interdizione a sa-
turazione e viceversa.
Per determinare questa risposta e' necessario considerare un certo numero di fenomeni
fisici complessi. Vale la pena di richiamare brevemente alcuni di essi.

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.

12.8) I circuiti logici integrati.


Tutti i circuiti integrati digitali, con l'eccezione di alcune realizzazioni a larga scala,
quali ad esempio le memorie o i microprocessori, sono riuniti in un certo numero di famiglie
logiche. Ciascuna famiglia e' basata su un particolare tipo di circuito elementare usato in tutti i
dispositivi della famiglia per realizzare invertitori, gate di diverso tipo ed elementi di memoria
quali i flip-flop. Ciascuna famiglia inoltre include elementi a media e talvolta a larga scala di
integrazione.
Tutti i dispositivi di una famiglia logica sono tra di loro compatibili, nel senso che i
livelli logici sono gli stessi, possono essere alimentati con la stessa tensione e l'uscita di un
elemento e' in grado di pilotare direttamente almeno un ingresso di qualsiasi altro elemento
della stessa famiglia.
Al contrario, poiche' ogni famiglia logica usa un diverso circuito elementare, esse non
sono di solito compatibili tra di loro, anche nel caso in cui alcune delle loro caratteristiche
coincidano.
Ciascuna famiglia comprende, in aggiunta agli elementi base SSI, MSI e LSI, un certo
numero di circuiti ausiliari, quali ad esempio traslatori di livello (per scopi di interfacciamento
con altre famiglie), circuiti di condizionamento del segnale (trigger di Schmitt e
multivibratori), circuiti di pilotaggio di visualizzatori e vari altri circuiti per applicazioni
speciali. Il numero di questi circuiti ausiliari dipende dalla diffusione della famiglia stessa;
quella a tutt'oggi piu' numerosa comprende oltre 300 diversi dispositivi, quella piu' povera
meno di 50.
Le famiglie piu' comuni e piu' diffuse sono:

TTL - logica transitore - transistore


DTL - logica diodi - transistore
HTL - logica a elevata soglia
RTL - logica resistori - transistore
ECL - logica ad accoppiamento di emettitore chiamata
anche logica a commutazione di corrente.
CMOS - logica a transistori MOS complementari.

Le prime cinque famiglie usano transistori bipolari, l'ultima transistori unipolari.


In aggiunta alle famiglie logiche esiste un'ampia varieta' di dispositivi realizzati in
tecnologia MOS, normalmente a canale P e a rinforzo. Tuttavia tale tecnologia e' usata quasi
esclusivamente per la produzione di circuiti LSI specializzati, quali memorie, microprocessori
e circuiti "custom". Per tale motivo i circuiti MOS non sono inquadrati in una famiglia logica,
ma sono di solito considerati prodotti individuali a larga scala di integrazione.
Nel discutere le famiglie logiche e' infine importante porre l'accento sul fatto che il loro
sviluppo avviene in un ambiente dallo sviluppo tecnologico estremamente veloce e di intensa
competizione. Tale fatto ha portato ad un rapido sviluppo dei componenti e, a causa della
vitalita' del mercato, al nascere e all'affermarsi di un notevole gruppo di produttori. Al giorno

283
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

d'oggi, quando uno dei produttori ha successo nell'introdurre e commercializzare una


determinata famiglia logica, essa viene immediatamente prodotta su licenza dalle altre com-
pagnie, eventualmente completata con nuovi dispositivi o migliorata nelle sue caratteristiche.

12.9) Caratteristiche dei circuiti integrati digitali.


Ogni famiglia logica viene progettata per una differente applicazione ed ha in alcune sue
caratteristiche i suoi punti di forza, in altre i suoi inconvenienti.
Poiche' il circuito base di ciascuna famiglia e' differente, i relativi dispositivi hanno
caratteristiche diverse. Ad esempio i circuiti dei calcolatori di grosse dimensioni devono
operare molto velocemente e di conseguenza per la loro realizzazione si useranno componenti
di famiglie logiche veloci; se al contrario si prevedesse per il circuiti lunghi periodi di
funzionamento con alimentazione fornita da batterie, allora diventa molto piu' importante la
caratteristica di un basso consumo.
Sebbene una valutazione corretta dei circuiti digitali integrati richieda un attento studio
dei dati forniti dal costruttore, si riportano qui di seguito le definizioni di quelle caratteristiche
che si ritengono maggiormente interessanti e significative.

FAN-IN. E' il numero di ingressi che controllano un operatore logico.


Molto spesso sono disponibili degli ingressi di espansione
che permettono di aumentare il fan-in. L'eccessivo uso di
ingressi di espansione fa tuttavia aumentare la capacita' di
ingresso e di conseguenza il tempo di propagazione.

FAN-OUT.E' la misura del carico che puo' essere connesso all'uscita


di un gate o di qualsiasi elemento logico della famiglia.
Poiche' il carico e' normalmente dato da uno o piu' ingressi
di altri elementi logici della stessa famiglia, il fan-out e'
usualmente identificato dal numero di ingressi che possono
venir connessi all'uscita dell'elemento logico considerato.
Piu' esattamente ciascuna famiglia logica ha "un'unita' di
carico" espressa in milliampere che rappresenta la corrente
necessaria ad attivare un tipico circuito di quella famiglia
logica. Il fan-out viene ottenuto normalizzando tramite
l'unita' di carico la massima corrente di uscita. In sostanza
quindi, quando ad esempio si parla di fan-out pari a 10, cio'
sta a significare che puo' venir pilotato un numero di ingressi
tale da costituire un fattore di carico normalizzato pari a 10.

LIVELLI LOGICI. L'uscita di un circuito digitale puo' assumere


normalmente due soli stati, detti rispettivamente alto e
basso. I corrispondenti livelli di tensione vengono indicati di
solito con VH e VL e variano da famiglia a famiglia logica.
E' opportuno tuttavia far notare che alcuni circuiti digitali
vengono progettati per lavorare a tre stati e il terzo stato
corrisponde a un circuito aperto.

284
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

RITARDO DI PROPAGAZIONE E VELOCITA'. Il ritardo di


propagazione misura quanto rapidamente si propaghi la
commutazione di un livello logico di ingresso verso l'uscita.
Piu' esattamente si definiscono di solito due ritardi di propa-
gazione che tengono conto della dissimmetria di
funzionamento nelle due commutazioni: il ritardo di
propagazione per l'uscita che commuta da livello basso a
livello alto e' indicata con tpLH o tpd+, quello relativo alla
commutazione opposta con tpHL o tpd-. Ambedue i tempi
vengono misurati tra i punti al 50% dei segnali di ingresso e
di uscita. La semisomma di tali tempi prende il nome di
ritardo medio di propagazione ed e' indicata normalmente
con tav o tpd. Il tempo di salita tr e di discesa tf sono invece
misurati tra il 10% e il 90% del fronte di salita e rispettiva-
mente di discesa dell'uscita. I tempi di propagazione variano
con la temperatura, la tensione di alimentazione e il carico.
Alcuni esempi sono riportati nei grafici di fig. 12.9.1. La
velocita' e' direttamente correlata con il ritardo di
propagazione e misura la massima frequenza cui puo'
commutare un flip-flop senza commettere commutazioni
errate.

Vcc= 3,6 V Vcc= 5 V


50 50

40 n=7 ritardo 40
di
n=5
propagazione n=7
30 30
(nsec.)
n=3
n=5
20 20
n=1 n=3
n=1
10 10
-55 25 125
-55 25 125
temperatura
temperatura

figura 12.9.1

DISSIPAZIONE DI POTENZA. Come in qualsiasi altro circuito


elettronico la potenza dissipata viene misurata in watt o in
milliwatt. Essa rappresenta la potenza che effettivamente si
dissipa nel dispositivo e non comprende quindi la potenza
che viene eventualmente fornita ad altri dispositivi. Di
regola essa indica nei circuiti integrati la potenza che si
dissipa in un gate che lavora per meta' del tempo allo stato
alto e per l'altra meta' allo stato basso e permette di valutare
la potenza totale dissipata dal circuito ai fini del
dimensionamento dell'alimentatore.

285
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

IMMUNITA' AL RUMORE. Misura la quantita' di segnale


disturbante che puo' essere sovrapposto a un segnale logico
senza causare un'errata commutazione dell'uscita. E'
necessario distinguere tra immunita' al rumore statica,
relativa a segnali che varino lentamente o ad impulsi
sufficientemente lunghi e immunita' al rumore dinamica. E'
abbastanza evidente infatti che un impulso di ingresso di du-
rata comparabile con il ritardo di propagazione potra' avere
un'ampiezza anche notevole senza dar luogo ad un'errata
commutazione dell'uscita. La medesima ampiezza sarebbe
invece intollerabile se il segnale di disturbo fosse a bassa
frequenza. L'immunita' al rumore e' anch'essa funzione della
temperatura, della tensione di alimentazione e dal carico.

CAMPO DI TEMPERATURE DI UTILIZZO. E' il campo di


temperatura entro il quale un circuito integrato puo' operare
senza che alcuna delle sue caratteristiche nominali sia
compromessa.

ATTITUDINE AL PILOTAGGIO DI CARICHI CAPACITIVI.


L'attitudine a pilotare carichi capacitivi e' un'importante
caratteristica dei circuiti digitali integrati, soprattutto quando
un'uscita deve pilotare delle interconnessioni realizzate con
cavi di una certa lunghezza.

nsec.
4 volt
60

50
5 volt
Ritardo di 40

propagazione 30

20 6 volt

10
20 40 60 80 100

Capacita' di carico

figura 12.9.2

Questa attitudine dipende direttamente dall'impedenza


d'uscita del circuito e quanto minore e' questa impedenza,
tanto meglio un carico capacitivo viene pilotato. Quando
infatti ad un circuito viene applicato un carico capacitivo i
tempi di salita e di discesa vengono largamente influenzati
dal carico stesso. Il tempo di propagazione viene aumentato

286
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

in maniera proporzionale all'aumento della costante di


tempo del circuito causata dal carico capacitivo. In fig.
12.9.2 e' riportato il tempo di propagazione in funzione della
capacita' di carico e della tensione di alimentazione per un
tipico circuito appartenente alla famiglia DTL.

PROTEZIONE DAL CORTO CIRCUITO. Impedisce che un


circuito, la cui uscita sia stata connessa direttamente a terra,
venga danneggiato. Tale proprieta' puo' essere riconosciuta
semplicemente esaminando il circuito e riconoscendo se nel
circuito d'uscita vi sia o meno una resistenza connessa tra
alimentazione e terminale di uscita, destinata a limitare la
corrente nel caso di corto circuito.

TOLLERANZA SULLE TENSIONI DI ALIMENTAZIONE.


Definisce il campo di tensioni di alimentazione entro il
quale le caratteristiche del dispositivo sono garantite.

TIPO DI CIRCUITO LOGICO. Dipende dal numero di circuiti


elementari integrati su un unico substrato di silicio. Si
possono distinguere le tre principali categorie:

Circuiti SSI (small scale integration) con un numero di


porte logiche elementari che puo' raggiungere le 12 porte per
involucro.
Circuiti MSI (Medium scale integration) con capacita'
comprese tra le 12 e le 100 porte logiche.
Circuiti LSI (Large scale integration) con capacita'
superiore alle 100 porte logiche.
La realizzazione SSI copre il campo dei singoli elementi
logici e delle reti logiche piu' semplici, quelle MSI le reti
logiche di dimensioni medio - grandi, quali convertitori
A/D, multiplexer, ecc. Infine le realizzazioni LSI sono
destinate a reti logiche di dimensioni molto ampie, quali
memorie, unita' aritmetico-logiche, ecc.

TIPO DI INVOLUCRO. Esistono numerosi tipi di involucro per i


circuiti integrati: I piu' comuni sono il TO-5, il flat pack, il
dual in line e il SOT. Il TO-5 e' un involucro metallico, in
pratica uguale a quello utilizzato per i transistori, con 8,10 o
12 piedini. Il flat pack e' un involucro misto metallo
ceramica di forma rettangolare appiattita. Il flat pack viene
prodotto in due dimensioni con 10, 12 o 14 piedini; questi a
loro volta possono essere terminali piatti flessibili e dorati o
collegamenti a sezione circolare in rame. L'involucro dual in

287
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

line e' forse il piu' diffuso, pur essendo di maggiori


dimensioni che non gli altri due. I piedini, di tipo rigido,
sono in numero di 14, 16, 24 o piu', ma proprio per la loro
rigidita' sono particolarmente adatti ad un montaggio
automatico su circuito stampato. Infine il SOT e' l'involucro
utilizzato nelle tecnologie di montaggio superficiale.
Esistono ovviamente numerosi altri involucri e al giorno
d'oggi non e' raro trovare contenitori con un numero di
piedini di collegamento che supera abbondantemente il
centinaio

I parametri descritti presentano il difetto di un'eccessiva schematizzazione, con


l'aggravante che ciascun costruttore tende ad enfatizzare gli aspetti positivi dei suoi prodotti e
a minimizzarne quelli negativi.
Vi sono altri parametri oltre quelli descritti che potrebbero determinare la scelta di una
famiglia logica, ad esempio la varieta' dei componenti della famiglia o la loro reperibilita'
presso diverse fonti, la compatibilita' con i livelli di segnale o con le tensioni di alimentazione
di altre famiglie o ancora la loro resistenza ad ambienti particolarmente sfavorevoli e/o
aggressivi.
Infine come parametro di notevole interesse si puo' citare il prodotto della potenza
dissipata per il tempo medio di propagazione. Anche se raramente riportato sulle caratteristi-
che,tale parametro misura in un certo qual modo la "bonta'" di una famiglia logica, che si puo'
ritenere inversamente proporzionale al valore del prodotto stesso.

12.10) Immunita' al rumore.


La conoscenza del margine di rumore dei dispositivi digitali e' di estrema importanza
per il progettista, sia allo scopo di determinare i segnali di ingresso e di uscita del sistema, sia
per decidere se l'apparecchiatura realizzata debba o no essere schermata.
Cosa significhi effettivamente il margine di rumore in un sistema digitale e' facilmente
spiegabile sulla base della caratteristica di trasferimento ingresso-uscita dei dispositivi usati.
Si consideri un semplice sistema reazionato costituito da due invertitori identici. Sul
grafico di fig. 12.10.1 (b) sono riportate sia la caratteristica del dispositivo 1 che quella del
dispositivo 2, con l'avvertenza tuttavia che il segnale di ingresso X2 e' riportato sull'asse
verticale, e il corrispondente segnale di uscita su quello orizzontale, al contrario pertanto di
quanto fatto per il dispositivo 1.
Tale modo di operare appare tuttavia naturale quando si consideri che il segnale di
uscita di un gate coincide con il segnale di ingresso dell'altro gate. Le due caratteristiche si
intersecano in tre punti, A, B e C che rappresentano le sole tre condizioni in cui il circuito puo'
trovarsi; infatti solo in questi punti

X2 = Y1 e X1 = Y2
Se il dispositivo 1 si trova nel punto A allora l'ingresso e l'uscita del dispositivo 2 sono
ancora specificati dal punto A.
Il sistema, a rigore, potrebbe trovarsi in uno qualsiasi dei tre punti; tuttavia la condizione
di funzionamento nel punto B e' instabile e qualsiasi perturbazione, per quanto piccola,
portera' il sistema in A o in C.

288
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

Nella realta' i due dispositivi non saranno mai identici. La caratteristica di trasferimento
non potra' dunque essere rappresentata da un singola curva, ma sara' un inviluppo contenente
tutte le possibili caratteristiche. Le dimensioni dell'inviluppo sono determinate dai limiti che
vengono fissati per l'uscita, quando viene compiuto l'esame di accettazione in fase di
produzione.

x 2,y 1
A
x1 y1 x2 y2 1
1 2
B

x 1 ,y2

(a) figura 12.10.1 (b)

Generalmente viene scelta in modo arbitrario la massima tensione di uscita VOL ac-
cettabile come valore logico 0. A tale tensione viene aggiunta una banda di guardia e la ten-
sione totale (VOL + banda di guardia) viene applicata all'ingresso. La tensione di uscita che se
ne ricava e' chiamata VOH , cioe' la piu' bassa tensione possibile accettabile come 1 logico.
Questi due parametri VOL e VOH vengono utilizzati per scegliere i dispositivi in sede di
produzione e determinano l'inviluppo delle caratteristiche di trasferimento. In fig. 12.10. 2
sono riportati due di questi inviluppi per il semplice sistema reazionato che e' stato preso in
considerazione. Le tensioni rappresentative del punto di lavoro di ciascun dispositivo possono
in questo caso cadere nelle tre aree tratteggiate A,B e C, intersezioni tra i due inviluppi. E'
evidente che anche in questo caso tutti i punti dell'area B rappresentano situazioni di
instabilita'.

*
V IL
VOUT V *IH B

0 V*
OH

C
V NL V NH
VIN *
V OL

figura 12.10.2

L'ordinata del punto al vertice sinistro alto dell'area C rappresenta la massima tensione
allo stato basso che un dispositivo puo' avere quando viene pilotato da un altro dispositivo
della stessa famiglia. Tale tensione viene indicata con VOL*.

289
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

Un dispositivo pilotato con VOL* avra' come tensione di uscita VOH* quella rappre-
sentata dall'ordinata del vertice destro basso dell'area A.
I due livelli cosi definiti sono le uscite dei due dispositivi interconnessi, nell'ipotesi che
durante la loro selezione si siano incontrati due dispositivi al limite estremo del campo di
tollerabilità, in modo tale che il sistema reazionato lavori nelle peggiori condizioni possibili.
Per un qualsiasi motivo tuttavia, ad esempio per la presenza di un disturbo, il segnale di
ingresso puo' spostarsi dalla regione A verso la regione B. Malgrado cio', purche' non si entri
nella regione B stessa, il segnale sara' ancora interpretato come segnale logico basso. In
corrispondenza la tensione d'uscita tendera' al vertice opposto della regione B, ma non dara'
luogo ad un cambio di stato del sistema. Al cessare della causa perturbante il sistema ritornera'
nelle condizioni originarie.
I vertici opposti della regione B rappresentano pertanto i valori estremi della tensione di
ingresso che non danno luogo ad una commutazione del sistema; tali valori vengono indicati
con VIL* e VIH* e rappresentano rispettivamente il massimo valore di ingresso sicuramente
riconosciuto come uno zero logico e il minimo valore riconosciuto come un uno logico. Il
margine di rumore del sistema e' la distanza che intercorre tra le uscite dello stesso sistema
* *
supposto privo di rumore e le due tensioni limite di ingresso VIL e VIH .
Queste differenze, indicate in fig. 12.10.2 con VNH e VNL sono dette rispettivamente
margine di rumore allo stato alto e margine di rumore allo stato basso e possono ovvia-
mente essere differenti.
Si noti che gli inviluppi si ampliano assegnando specifiche di tolleranza meno pesanti;
inoltre se la pendenza della zona di transizione diminuisce, la regione B si estende verso A e
C, diminuendo i margini di rumore.
Sui dati caratteristici forniti dai costruttori sono assegnate le quantita' VOH, VOL , VIH e
VIL che non coincidono perfettamente con le quantita' asteriscate fin qui introdotte. Si ricordi
che per le quantita' asteriscate valgono le seguenti definizioni:

VOL* Arbitrario
VIL* VOL* + la banda di guardia VNL
VOH* uscita minima allo stato alto quando l'ingresso e' VIL*
VIH* VOH* - la banda di guardia VNH

Le grandezze fornite dai costruttori sono cautelative rispetto a quelle asteriscate; piu'
precisamente si puo' dire che:

VIL = VIL* VIH = VIH*

mentre VOH si trova sulla curva di trasferimento appena a destra e al di sotto della zona A e
VOL appena a sinistra e al di sopra della zona C.
I margini di rumore apparenti, calcolati come:

VNL = VIL - VOL VNH = VOH - VIH

sono pertanto inferiori a quelli reali, sia per i valori piu' pessimistici di VOL e VOH, sia perche'
normalmente i dispositivi usati ben difficilmente lavoreranno nelle peggiori condizioni,
identificate dai vertici della regione B e da quello inferiore e superiore rispettivamente della
regione A e C.

290
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

12.11) Margine di rumore dinamico.


Nella discussione sul margine di rumore del paragrafo precedente si e' implicitamente
assunto che la caratteristica di trasferimento di un gate dipenda unicamente dall'ampiezza del
segnale di ingresso e non dalla frequenza o dalla durata dell'impulso di ingresso.
Si ricordi tuttavia che, come e' stato illustrato al paragrafo 12.7, un circuito digitale reale
non puo' rispondere immediatamente ad una variazione del segnale di ingresso; inoltre diversi
dispositivi hanno una caratteristica di trasferimento dotata di isteresi.
A causa di queste caratteristiche il margine di rumore dinamico, detto anche margine di
rumore in corrente alternata, e' di solito ben diverso da quello in corrente continua.
In un circuito digitale correttamente progettato, che operi con impulsi di durata
notevolmente superiore al tempo medio di propagazione dei vari gate e con una bassa fre-
quenza di ripetizione, i margini di rumore in corrente continua e in corrente alternata non
differiscono in maniera apprezzabile. Non appena pero' la larghezza dell'impulso diminuisce e
si avvicina al tempo di propagazione, il margine di rumore cambia in funzione di come sono
realizzati circuitalmente i vari gate. Se l'accoppiamento tra i vari stadi e' di tipo capacitivo, il
margine di rumore puo' anche diminuire al diminuire della durata dell'impulso; tuttavia nella
maggior parte dei casi il margine di rumore va via via aumentando, poiche' il circuito non e' in
grado di rispondere istantaneamente a causa della carica accumulata nello spazio di base e a
causa dei carichi esterni. A frequenze molto alte e con larghezze dell'impulso di ingresso
molto piccole si puo' poi avere un effetto di polarizzazione del dispositivo, che puo' diminuire
nuovamente il margine di rumore.
Caratteristica di notevole interesse in relazione al margine di rumore in corrente al-
ternata e' infine la larghezza degli impulsi che il circuito stesso genera, agendo come gene-
ratore di rumore. Essi sono causati dai ritardi dei segnali che si propagano lungo diversi iti-
nerari e dalle cadute resistive o reattive dovute alle impedenze distribuite del circuito. Questi
disturbi autogenerati sono di solito molto stretti e con elevata frequenza di ripetizione.
In fig. 12.11.1 e' riportato l'andamento del margine di rumore in funzione della lar-
ghezza dell'impulso per dispositivi della famiglia TTL standard.

8
7
margine 6
di 5
rumore
4
(volt)
3
2
low
1
hig
0
0 5 10 15 20 25
larghezza dell'impulso (nsec.)

figura 12.11.1

12.12) Caratteristiche dei flip-flop e dei registri.


Come si e' gia' accennato al capitolo V, il piu' semplice elemento di memoria puo' essere
realizzato con due gate di tipo NAND o NOR connessi con accoppiamento incrociato. Molto
spesso esiste poi anche un ingresso di abilitazione (enable) che molto impropriamente viene
spesso chiamato clock.

291
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

Il collegamento incrociato di due gate da' luogo a un flip-flop che viene detto di tipo
trasparente, in quanto l'uscita risponde immediatamente alle variazioni degli ingressi. In tal
caso, riportando le uscite del dispositivo agli ingressi, si potrebbero addirittura generare
condizioni di oscillazione.
Elementi non trasparenti sono viceversa i flip-flop master-slave, in cui la memo-
rizzazione dell'informazione si ha durante il periodo di clock, mentre la variazione dell'uscita
si ha nell'intervallo tra due successivi impulsi di clock, oppure i flip-flop azionati sui fronti.
A causa della non trasparenza l'uscita di questi dispositivi puo' essere riportata
all'ingresso senza particolari precauzioni e senza dar luogo a condizioni pericolose. Non sono
pertanto richiesti schemi di temporizzazione multifase e il progetto del sistema ne risulta
notevolmente semplificato.
Per il corretto uso di questi dispositivi il progettista deve conoscere tuttavia l'esatto
significato dei parametri di temporizzazione (tempo di ritardo e specifiche di temporizzazione
dell'ingresso) e metterli in relazione al fenomeno del "clock skew".

12.12.1) Tempo di propagazione.


L'uscita di qualsiasi flip-flop o registro cambia unicamente in corrispondenza ad una
delle transizioni del segnale di clock; nei circuiti piu' moderni tale transizione e' quella dallo
stato basso allo stato alto.
Il ritardo tra questo fronte e la variazione corrispondente dell'uscita e' il tempo di ritardo
del dispositivo e viene indicato con tpd. Molto spesso tuttavia i tempi sono due, quello tra il
fronte attivo del clock e la commutazione positiva dell'uscita, indicato con tpd+ o tpLH , e
quello tra il fronte attivo del clock e la commutazione negativa dell'uscita, indicato con tpd- o
tpHL . Sui dati caratteristici sono di solito indicati sia il valore tipico che il valore massimo di
tali parametri.

12.12.2) Specifiche di temporizzazione degli ingressi.


I flip-flop sensibili ai fronti sono normalmente condizionati dai valori che i segnali di
ingresso possiedono immediatamente prima del fronte attivo del clock. Per un corretto
funzionamento i dati di ingresso devono quindi essere presentati con un certo anticipo rispetto
a questo fronte ed esiste pertanto un intervallo di tempo critico immediatamente precedente il
clock, durante il quale essi non devono cambiare. L'istante nel quale il valore degli ingressi
assume importanza viene detto tempo di "set-up", e' critico e viene di solito indicato con ts.
Poiche' tutti i parametri circuitali variano con la temperatura, le tensioni di alimentazione ed in
funzione delle tolleranze di fabbricazione e del carico, anche il tempo di set-up ha una certa
dispersione. E' importante assicurarsi che i livelli di ingresso rimangano stabili all'interno
della finestra compresa tra il piu' lungo tempo di set-up, che rappresenta il piu' lento dei
dispositivi e il piu' breve, che ne rappresenta il piu' veloce.
Purtroppo i costruttori hanno usato via via diverse nomenclature, talvolta in contrasto,
per indicare i due bordi della finestra di temporizzazione appena definita. Il piu' lungo tempo
di set-up viene spesso chiamato ts(max), ma spesso anche ts(min) in quanto rappresenta la durata
minima dell'intervallo di tempo durante il quale gli ingressi devono rimanere costanti prima
dell'impulso di clock. Il piu' breve tempo di set-up viene detto ts(min), ma spesso senza alcuna
logica ts(max).
La Fairchild usa il termine "tempo di disimpegno" (release time tr), altri fabbricanti lo
chiamano - thold (tempo negativo di tenuta). Quest'ultimo nome prende origine dal fatto che
nei circuiti piu' anziani il ritardo di propagazione del clock era superiore a quello degli

292
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

ingressi e di conseguenza questi ultimi dovevano rimanere stabili anche dopo il fronte attivo
del clock (tempo di tenuta positivo). Tutti i circuiti moderni hanno tuttavia tempi di set-up
positivi e di conseguenza tempi di tenuta negativi.
A differenza dei flip-flop comandati sui fronti, nei flip-flop master-slave a livelli il
master accetta i dati di ingresso durante tutto il semiperiodo attivo del clock, mentre lo slave
commuta in funzione del contenuto del master nell'intervallo tra un impulso di clock e l'altro.
Pertanto in questi flip-flop per un corretto funzionamento e' indispensabile che gli ingressi
rimangano stabili durante l'intero semiperiodo attivo del clock. E' opportuno quindi che la
durata dell'impulso di clock sia la minima possibile, compatibilmente con i dati forniti dal
costruttore.
Qualsiasi sia poi il dispositivo, comandato a fronti o a livelli, e' necessario assicurarsi
che i tempi di salita e di discesa non superino determinati valori. Infatti anche se i dispositivi
non sono direttamente sensibili all'inclinazione dei fronti, se tali tempi fossero molto lunghi, il
segnale di clock si troverebbe in prossimita' dei livelli di soglia per tempi superiori al ritardo
di propagazione del flip-flop, e si potrebbero avere, in presenza di disturbi anche piccoli,
determinati ad esempio da diafonia, delle commutazioni multiple.
E' opportuno pertanto che il segnale di clock abbia dei tempi di commutazione non
superiori a 5 - 6 volte il ritardo di propagazione del dispositivo.

12.12.3) Il clock skew.


Il fenomeno del "clock skew", cui si e' gia' accennato in precedenza, e' proprio di sistemi
digitali sincroni che utilizzino componenti ad alta velocita'. Poiche' tale fenomeno e'
indipendente dalla frequenza di ripetizione del clock, ma e' originato solamente dalla velocita'
dei componenti, esso puo' essere causa di spiacevoli sorprese anche in sistemi a bassa velocita'
operativa. In teoria in un sistema sincrono tutti gli ingressi di clock dovrebbero essere attivati
simultaneamente; in realta', ed in particolare nei sistemi di grande dimensione, cio' e' prati-
camente impossibile. Esistono sempre delle differenze temporali nella distribuzione del se-
gnale, che determinano malposizionamenti del clock (clock skew); esse possono essere de-
terminate da differenti tempi di propagazione sulle linee e/o da differenze nei tempi di ritardo
dei vari gate che pilotano linee di clock diverse.
Si consideri, a titolo di esempio, il semplice caso illustrato in fig. 12.12.1,in cui un
primo flip-flop FFA pilota un secondo flip-flop FFB attraverso una rete combinatoria. Il
tempo di ritardo totale della rete combinatoria sia tc.

FFA

J Q FFB
T
J Q
K
T
tsB
tpdA tc K

clock t

figura 12.12.1

Se l'impulso di clock giunge a FFB ritardato rispetto a FFA, per un funzionamento


corretto e' necessario che il ritardo sia inferiore a:

293
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

tmax = tpdA + tc + tsB

Se esso e' maggiore il flip-flop FFB vede come ingresso la nuova uscita della rete
combinatoria, che nel frattempo puo' essere variata, dando luogo ad un malfunzionamento. Si
noti che in sede di progetto e' necessario usare per tpd, tc e ts i valori minimi; purtroppo molto
spesso questi non vengono specificati tra i dati caratteristici.
Vi sono due provvedimenti che si possono prendere per evitare i problemi relativi al
clock skew. Il primo e' quello di usare l'accorgimento di pilotare tutti gli ingressi di clock da
un'unica sorgente, eventualmente mettendo in parallelo piu' gate per aumentarne il fan-out.
Il secondo consiste nel distribuire il clock in maniera opportuna, in modo che i ritardi di
propagazione del clock giochino in senso opposto al ritardo di propagazione dei dati. Si fa in
modo cioe' che l'ultimo dispositivo della catena riceva il clock per primo.
Qualora cio' non fosse possibile, come ad esempio nei registri a circolazione (ring
counter), si puo' inserire nel flusso dei dati un flip-flop con polarita' opposta.

12.13) Criteri di massima per la scelta della famiglia logica.


Nessuna famiglia logica e' ottima in rapporto a tutti i parametri che sono stati presi in
considerazione nei paragrafi precedenti. Di solito anzi una famiglia e' ottima solo dal punto di
vista di alcune sue caratteristiche, mentre e' carente in altre. Ad esempio l'aumento della
velocita' operativa gioca un ruolo negativo nei confronti della dissipazione di potenza ed e'
normale per qualsiasi circuito che lo sviluppo e il miglioramento di certe sue caratteristiche
vadano a detrimento di altre.
In ciascuna famiglia logica pertanto vi e' una caratteristica predominante che tende ad
essere utilizzata in quelle applicazioni in cui e' essenziale.
La mutua interazione tra le caratteristiche e' tipica di tutti i circuiti; storicamente i
progettisti hanno dapprima tentato di ottimizzare le caratteristiche nel loro complesso (fami-
glie ad uso generale) e solo successivamente hanno sviluppato alcune caratteristiche a spese
delle altre (famiglie per applicazioni particolari) oppure hanno sviluppato nuove famiglie ba-
sate su un circuito diverso o su una diversa tecnologia costruttiva.
La TTL standard, ad esempio, e' una famiglia ad uso generale, mentre la TTL low power
o la TTL ad alta velocita' sono sottofamiglie in cui una delle caratteristiche della serie di uso
generale e' stata ottimizzata.
Nel capitolo che segue verranno discusse le sei famiglie principali, illustrando in ciascun
caso il circuito fondamentale della famiglia e descrivendone le principali caratteristiche.
Comunque sia, una volta che si sia deciso di utilizzare una determinata famiglia logica,
le tendenza e' quella di mantenersi nell'ambito di tale famiglia anche per tutte le realizzazioni
successive. Si ottengono in tal modo diversi vantaggi, quali ad esempio maggiori sconti per
quantita', un miglior utilizzo delle apparecchiature di sviluppo e il non dover riaddestrare il
personale con troppa frequenza. A tutto cio' poi si puo' aggiungere la considerazione che se
una linea di prodotti viene largamente accettata, si genera una spinta verso l'espansione e il
miglioramento di tale linea. Il costruttore tende cioe' ad offrire una maggior quantita' di
servizi, quali letteratura in argomento e bollettini applicativi ed a produrre tutta una serie di
sottosistemi standardizzati quali alimentatori e dispositivi ausiliari (display, convertitori A/D e
D/A, elementi di memoria, ecc.).

294
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

In definitiva una famiglia logica di successo tende ad introdursi in modo definitivo sul
mercato, autoperpetuando il proprio successo.

12.14) Cenni sulle tecnologie costruttive dei circuiti integrati.


12.14.1) Circuiti integrati bipolari.
12.14.1.a) I transistori.
La tecnologia normalmente usata per la costruzione dei circuiti integrati monolitici
bipolari e' quella planare epitassiale. Tale tecnologia si e' sviluppata negli anni 60 e si basa su
due fatti fondamentali.

1) Sulla superficie di una fetta di silicio e' facilmente realizzabile uno strato di
biossido di silicio, sia con reazioni di tipo "dry" in presenza di O2 che di tipo
"steam" in presenza di H2O. L'ossido di silicio presenta ottime caratteristiche
dielettriche ed assenza di difetti superficiali, specialmente quando venga
realizzato in strati spessi 1 - 2 micron, anche se attualmente e' gia'
notevolmente diffusa la tecnologia a 0,8 micron.

2) Il coefficiente di diffusione dei piu' comuni donatori (fosforo, arsenico, antimo-


nio) e del piu' comune accettore (boro) e' di due o tre ordini di grandezza
minore nel biossido che non nel silicio. Pertanto l'ossido puo' essere utilizzato
come maschera per proteggere determinate zone dalla diffusione, rimuovendo
con procedimenti fotolitografici l'ossido dove cio' e' necessario.

In fig. 12.14.1 (a) e' riportata la struttura tipica di un transistore planare epitassiale. Il
transistore integrato differisce da quest'ultimo in quanto e' una struttura a quattro strati e tre
giunzioni, come illustrato in fig. 12.14.1 (b). Lo strato in piu', rispetto alla normale struttura di
un transistore, deriva dall'esigenza di costruire tutto il circuito su un substrato comune, che
non e' presente nelle realizzazioni a componenti discreti.

emettitore base
emettitore base collettore

N
P N N+
P
N N
P

collettore

TRANSISTORE NORMALE TRANSISTORE PLANARE


(a) (b)

figura 12.14.1

Lo strato addizionale fa si' che il transistore integrato differisca da quello tradizionale


per quanto riguarda i parametri parassiti. Si ha infatti, quale ulteriore elemento parassita, un
transistore PNP, la cui base e il cui emettitore sono rispettivamente collettore e base del
transistore integrato e il cui collettore e' il substrato. La struttura di un transistore integrato e'
quindi, trascurando gli altri parametri parassiti, quella illustrata in fig. 12.14.2.

295
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

substrato C

pnp

B npn

figura 12.14..2

Il transistore parassita assume un ruolo diverso a seconda che si abbia a che fare con un
circuito integrato lineare o con uno digitale. In un circuito digitale a logica saturata la tensione
di collettore del transistore NPN e' minore di quella di base. Pertanto la giunzione base-
emettitore del transistore parassita PNP e' polarizzata direttamente, mentre il suo collettore e'
connesso al punto piu' negativo del circuito. Il transistore parassita lavora quindi in zona attiva
e di conseguenza un'elevata aliquota della corrente di pilotaggio del transistore NPN si perde
nel substrato. Allo scopo di minimizzare tale inconveniente il guadagno di corrente del
transistore parassita viene portato a valori approssimativamente pari a 0.01 con una diffusione
addizionale di oro che ha lo scopo di ridurre drasticamente il tempo medio di vita delle
cariche minoritarie.
Per i circuiti lineari invece il transistore parassita non da' un grande fastidio poiche' il
transistore NPN opera normalmente lontano dalla saturazione mantenendo quindi interdetto il
transistore PNP.
In effetti la struttura illustrata per il transistore integrato non e' la piu' adatta per gli
impieghi nel campo della commutazione. Infatti, poiche' il contatto di collettore deve essere
ricavato sulla faccia superiore del wafer di silicio anziche' su quella inferiore, la resistenza in
serie al collettore e' piuttosto alta e di conseguenza e' alta la VCES, tensione di saturazione
collettore-emettitore.
Per ovviare a tale inconveniente si usa il cosidetto procedimento dello "strato sepolto",
che consiste nel formare nella zona N di collettore una zona a drogaggio piu' elevato e quindi
di minor resistivita', come illustrato in fig. 12.14.3.

emettitore base collettore

N N+
P
N
strato sepolto N+
P

figura 12.14.3

Si puo' pertanto concludere che a causa della diffusione d'oro e della necessita' di
realizzare lo strato sepolto il costo di un transistore per impieghi digitali e' piu' alto che non
quello di un transistore per impieghi lineari.

296
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

12.14.1.b) I diodi.
Poiche' un diodo altro non e' se non una giunzione PN, da un transistore integrato si
possono ricavare diodi in due modi diversi, utilizzando cioe' la giunzione base-emettitore
oppure quella base-collettore.

Diodo base emettitore.


Con riferimento alla fig. 12.14.4 (a) appare evidente che il circuito equivalente del diodo
e' quello di fig. 12.14.4 (b). C'e' la possibilita' di eliminare l'effetto del transistore parassita
senza ricorrere alla diffusione d'oro semplicemente cortocircuitando tra di loro base e
collettore, come illustrato in fig. 12.14.4 (c).

- +
S C

N
P
N
P B
(a) (b)

E
S C

B E

B
S
(c)
E (d)
figura 12.14.4

In tal caso la giunzione tra collettore e substrato risulta polarizzata inversamente e puo'
essere considerata una semplice capacita' di basso valore. Il relativo circuito equivalente e'
riportato in fig. 12.14.4 (d).

Diodo base collettore.


Qualora si utilizzi il diodo base collettore non vi e' alcun accorgimento circuitale che
permetta di trascurare il transistore parassita ed e' giocoforza ricorrere alla diffusione
addizionale di oro. Il circuito equivalente e' riportato in fig. 12.14.5.
Questo svantaggio tuttavia e' compensato dal fatto che la tensione di breakdown della
giunzione di collettore e' piu' elevata di quella della giunzione di emettitore (30 - 40 volt
contro 6 - 7 volt) a causa della diversa concentrazione delle impurita' nelle regioni di
emettitore e di collettore.
Il diodo base - collettore viene quindi usato, accompagnato da diffusione d'oro, dove sia
necessaria una tensione di breakdown relativamente alta.

297
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

figura 12.14.5

12.14.1.c) Capacita'.
In tecnica integrata i condensatori possono venir realizzati ricorrendo alle capacita' di
transizione delle due giunzioni polarizzate inversamente. Tali capacita' sono ovviamente
polari e dipendono dalla tensione applicata, che deve necessariamente essere minore della
relativa tensione di breakdown. Il circuito equivalente e' analogo in ambedue i casi ed e'
riportato in fig. 12.14.6. E' interessante notare l'esistenza di una capacita Cs verso il substrato,
in quanto anche il diodo collettore-substrato risulta polarizzato inversamente.
E' evidente che non e' possibile realizzare ne' capacita' troppo elevate, per l'eccessivo
ingombro che ne deriverebbe, ne' troppo piccole, tali cioe' da essere trascurabili rispetto a Cs.
Un valore abbastanza comune e' quello di 3000 pF/mm2 con superfici utili di solito non
superiori a 0.03 - 0.04 mm2.

C TC R SC
B C
RC

RS CS

S
figura 12.14.6

12.14.1.d) Resistori.
I resistori vengono ricavati sfruttando la resistivita' propria dei materiali semiconduttori
e le loro dimensioni dipendono dalla purezza del materiale e dalla precisione di lavorazione.
Quale materiale resistivo si usa di solito la regione di base, cioe' la regione P. In fig. 12.14.7 e'
riportata la struttura di un resistore integrato; si vede immediatamente dal circuito equivalente
che oltre al resistore si hanno anche due capacita' e un transistore parassita.

298
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

R
P
N
P
S

figura 12.14.7

In particolare a causa di quest'ultimo vi puo' essere una dispersione di corrente verso il


substrato; per ridurre a valori trascurabili tale dispersione si connette normalmente la regione
N al punto piu' positivo del circuito. Il circuito equivalente in tal caso si riduce unicamente a
un resistore e ad una capacita' di valore molto modesto (circa 0.5 picofarad) verso lo strato N.

12.14.1.e) Suddivisione in isole.


Un circuito integrato completo e' realizzato in regioni, dette isole, di dimensioni
relativamente grandi, che contengono uno o piu' componenti. Queste isole sono separate tra di
loro da diffusioni profonde P ad alta concentrazione che vengono ad interrompere le regioni
sottostanti N, come illustrato in fig. 12.14.8.

N N N
P+ P+

figura 12.14.8

In sostanza tali diffusioni P profonde sono necessarie ad isolare tra di loro quelle
porzioni della regione N che non si trovano alla stessa tensione.

12.14.1.f) Processo di fabbricazione.


Il circuito integrato viene ricavato da una lastrina di silicio di tipo P, il cui spessore e'
mediamente 200 micron, levigata con mezzi chimici. Da una lastrina si ricava un certo
numero di circuiti completi con i seguenti passi di lavorazione:

1) Con processi termici viene formato sulla lastrina uno strato di


biossido di silicio SiO2.
2) Sullo strato di biossido di silicio viene depositata una pellicola di
materiale fotosensibile e dopo aver disposto sulla lastrina una prima

299
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

maschera si impressiona il materiale fotosensibile a luce


ultravioletta. Con il successivo sviluppo le parti non impressionate
vengono asportate.
3) Mediante azione chimica lo strato di SiO2 rimasto scoperto viene
asportato.
4) Rimossa la pellicola fotosensibile, dopo aver ripulito tutta la
superficie, si diffonde arsenico nelle zone non protette dal biossido,
formando in tal modo gli strati sepolti.
5) Dopo aver eliminato tutto lo strato di biossido, si fa crescere con
procedimento epitassiale, uno strato superficiale di semiconduttore
N, allo stesso grado di purezza del substrato.

I passi successivi del processo sono molto simili e consistono in:


6) Pulitura ed ossidazione superficiale.
7) Deposizione di materiale fotosensibile.
8) Suddivisione, mediante mascheratura, esposizione ad ultravioletti,
sviluppo e attacco chimico, della superficie in isole.
9) Diffusione profonda di boro per ottenere la suddivisione in isole.
10) Pulitura ed ossidazione superficiale.
11) Incisione, come ai punti 7 e 8, delle aperture necessarie alla
formazione delle basi e delle resistenze.
12) Diffusione di boro per le basi e le resistenze.
13) Pulitura ed ossidazione superficiale.
14) Incisione, come ai punti 7 e 8, delle aperture necessarie alla
formazione degli emettitori e dei collettori.
15)Diffusione degli emettitori e delle zone N+ dei collettori.
16)Deposizione di uno strato uniforme di alluminio sulla lastrina.
17)Fotoincisione dell'alluminio in modo da formare i collegamenti tra
le isole ed i punti di connessione con i reofori.
18) Taglio della lastrina per ricavarne i singoli circuiti.

12.14.2) Circuiti integrati unipolari.


I transistori MOS vengono chiamati dispositivi unipolari poiche' la corrente che durante
il loro funzionamento attraversa la regione di canale e' costituita da un unico tipo di portatori,
a differenza di quanto accade nel funzionamento dei transistori a giunzione. Nel caso di
transistori MOS a canale N i portatori sono elettroni, mentre nei MOS a canale P sono lacune.
I circuiti integrati unipolari possono contenere sia transistori di un solo tipo, sia di
ambedue i tipi. In quest'ultimo caso vengono chiamati circuiti MOS complementari o CMOS.
E' interessante notare che le tecnologie che usano un solo tipo di transistore unipolare
(NMOS,PMOS) sono competitive solo se usate a larga scala di integrazione. Infatti i circuiti

300
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

MOS a singolo canale, quando utilizzati per la realizzazione di gate individuali, offrono scarsi
vantaggi rispetto ai circuiti bipolari; sono infatti notevolmente piu' lenti di questi ultimi e
soprattutto lavorano a tensioni e con valori di impedenza notevolmente diversi. E' necessario
pertanto interfacciare sia i segnali di ingresso che i segnali di uscita per renderli compatibili
con i circuiti bipolari; il costo dei circuiti di interfaccia diviene accettabile solo per circuiti a
larga scala.
Di conseguenza dei tre tipi di circuito, NMOS,PMOS e CMOS solo gli ultimi vengono
in pratica utilizzati per realizzare gate e flip - flop.
Esistono diverse modalita' realizzative dei MOS utilizzati. Per quanto riguarda i gate
essi possono venir realizzati con strato metallico o con silicio policristallino. Poi le tecniche di
diffusione possono essere diverse. Una delle piu' affermate, soprattutto per le precisioni
raggiungibili nei parametri degli elementi prodotti, e' quella di impianto ionico. Infine anche il
substrato, normalmente silicio, puo' essere realizzato in zaffiro in modo da ridurre le
scabrosita' superficiali, aumentando la precisione di lavorazione.

12.14.2.a) Tecnologia di impianto ionico.


L'impianto ionico consiste nel drogare le fette di silicio bombardandole con ioni ac-
celerati ad alta velocita' in modo che essi penetrino in profondita'. Tale metodo si distacca
completamente dai sistemi di diffusione a caldo e permette un'estrema controllabilita' del
processo fino a livelli di drogaggio molto bassi, in modo da ottenere un'alta uniformita'. In
realta' la tecnologia di impianto ionico non e' sostitutiva dei metodi classici di drogaggio, ma
un sistema "a freddo" completamente diverso, che consente di ottenere prestazioni non
raggiungibili con i sistemi a caldo.
L'apparecchiatura utilizzata consiste in cinque parti principali. Vi e' la sorgente di ioni
costituita da una regione in cui si forma il gas da cui devono essere tratte le particelle di
drogante; gli ioni sono ottenuti per impatto di elettroni sul gas da ionizzare e la probabilita' di
collisione elettrone-gas viene aumentata ricorrendo a campi magnetici. In prossimita' della
sorgente vi e' poi un acceleratore a potenziale variabile tra i 20 e i 200 o piu' kilovolt.
All'uscita dell'acceleratore vi e' uno spettrometro di massa che permette di selezionare
solamente quegli atomi che si vogliono utilizzare come droganti.
Ad esempio, volendo utilizzare come drogante il boro, si partira' dal trifluoruro di boro e
mediante lo spettrometro di massa si selezionera' il solo boro di peso atomico 11, scartando gli
altri isotopi di boro e gli ioni di fluoro. Gli ioni che si ottengono, riuniti in un fascio ben
focalizzato e dotati di velocita' dell'ordine di 105 m/sec, sono in grado di penetrare abbastanza
profondamente, qualche diecina di micron, nella fetta di silicio da drogare. Per ottenere un
drogaggio uniforme, esiste infine un sistema di deflessione del fascio secondo due assi
perpendicolari.
Il vantaggio fondamentale dell'impianto ionico risiede nel fatto che si possono regolare
in modo indipendente lo spessore dello strato drogato, modulando tramite la tensione di
accelerazione la velocita' del fascio, e la concentrazione, sia controllando la durata del
processo di impianto, sia modulando l'intensita' del fascio. C'e' poi da aggiungere che si puo'
ottenere il drogaggio desiderato non solo in superficie, ma ad ogni profondita', e che il livello
stesso del drogaggio puo' essere bassissimo.
Infine e' importante far rilevare che la fetta di silicio puo' essere drogata anche attraverso
uno strato di ossido, lasciando tuttavia la superficie nelle migliori condizioni.

301
#
Ü·-°±-·¬·ª· ¼· ½±³³«¬¿¦·±²»
Ý¿°·¬±´± ïî

12.14.2.b) Processo di fabbricazione.


Il materiale di partenza e' di solito una fetta di silicio orientata secondo gli assi cri-
stallografici 100, di resistivita' compresa tra 1 e 2 ohm.cm. Su questo substrato possono essere
realizzati direttamente transistori MOS di tipo P, mentre per quelli di tipo N e' necessario
ottenere localmente un cambiamento della conduttivita' del materiale di base, ottenuta
mediante la formazione di sacche P (P - well) nel substrato N.
Nelle tecnologie tradizionali, con drogaggio per diffusione, l'agente drogante, gene-
ralmente boro, raggiunge il silicio attraverso gli spazi aperti nello strato superficiale di ossido
e viene diffuso ad una profondita' di qualche micron, in modo da portare la concentrazione
superficiale al valore voluto, come illustrato in fig. 12.14.9.

P
N

figura 12.14.9

Successivamente vengono aperte le fessure per la diffusione P+, con cui vengono
formate le regioni di source e di drain dei transistori a canale P, le resistenze integrate e i co-
sidetti "channel stoppers" dei transistori a canale N (fig.12.14.10).

P+ P+ P+ P+
P

figura 12.14.10

302
#
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

CAPITOLO XIII
LE FAMIGLIE LOGICHE
13.1) La famiglia RTL.
I circuiti logici RTL sono stati storicamente i primi ad esser stati fabbricati ed usano
solo transistori e resistenze per realizzare il circuito base della famiglia. Un tipico circuito
RTL e' riportato in fig. 13.1.1 e realizza in logica positiva la funzione NOR.

R2
C

A B
R1 R
1

A
C
B

figura 13.1.1

Nelle prime realizzazioni la tensione di alimentazione era compresa tra 3.0 e 3.6 volt e i
valori circuitali erano:

R1 = 450 ohm R2= 640 ohm


I tempi di propagazione erano abbastanza buoni, aggirandosi sui 12 nsec; la dissipazione
non eccessiva, essendo di circa 10 mW per gate.
Quali aspetti negativi possono esere citati la bassa escursione del segnale, la non ecce-
zionale immunita' al rumore, il basso fan-out (max. 5) e il basso fan-in (max. 4).
In verita' da questo circuito base sono state sviluppate molte versioni modificate, di cui
le piu' importanti sono la DCTL (direct coupled transistor logic), logica ad accoppiamento
diretto, senza resistenza di base, e la RCTL, in cui l'accoppiamento e' di tipo RC, tale da
accelerare la commutazione, come illustrato a tratteggio in fig. 13.1.1.
I ritardi di propagazione sono comunque sempre rimasti compresi tra i 10 e i 30 nsec per
i gate e tra 20 e 50 nsec per i flip - flop, le dissipazioni tra i 10 e i 25 mW.

13.2) La famiglia DTL.


La logica a diodi e transistori e' una delle piu' anziane, ma a differenza di quanto e'
accaduto con altre famiglie, quali ad esempio la RTL, l'introduzione di componenti piu'
moderni non l'ha fatta scomparire del tutto. Parecchie generazioni DTL si sono succedute e
per un certo periodo questa e' stata la famiglia piu' popolare. Da essa e' derivata tuttavia la
famiglia TTL e, alla luce delle migliori prestazioni di quest'ultima, la logica DTL non e' piu'
stata usata nei nuovi progetti. D'altra parte, a causa della compatibilita' dei livelli logici e della
tensione di alimentazione, si trovano ancora circuiti in cui coesistono le due famiglie. Il
circuito base e' illustrato in fig. 13.2.1 e realizza in logica positiva la funzione logica NAND.

303
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

1.6 K 2.0 K
D1
D3 C
A
T1
B
5K
D2

A
C
B

figura 13.2.1

Se ambedue gli ingressi A e B sono al livello alto, i diodi D1 e D2 sono interdetti. Il


diodo D3 e' invece polarizzato direttamente e fa si' che T1 si porti in saturazione. Se invece
almeno uno dei due ingressi si porta a livello basso, il corrispondente diodo passa in condu-
zione e drena verso massa la corrente che circola sul resistore da 1.6 Kohm, facendo interdire
T1. Il diodo D3 ha lo scopo di compensare le cadute su D1 e D2 quando sono in conduzione, in
modo da assicurare buone condizioni di funzionamento all'interdizione.
La tensione di alimentazione nominale per la logica DTL e' 5 V e i livelli logici sono:

VOL = 0.6 V VOH = 2.6 V


VIL = 1.3 V VIH = 1.8 V

Pertanto i margini di rumore apparente sono:

NH = 0.8 V NL = 0.7 V
e possono essere considerati discreti. Il fan-out medio della famiglia e' 8, anche se di essa
fanno parte particolari gate ad alto fan-out (30).
La dissipazione si aggira sui 5 mW per gate nel caso normale, e sui 20 mW nel caso di
gate ad alto fan-out. Il ritardo di propagazione e' mediamente 15 - 20 nsec. Infine, data la
struttura degli stadi di uscita, e' ammesso il wired-or.

13.3) La famiglia HTL.


La famiglia logica ad alta immunita'(high thresold logic) e' una famiglia sviluppata per
impieghi particolari. La sua principale caratteristica e' un'elevata immunita' al rumore e per
tale motivo viene impiegata in ambienti industriali dove dispositivi elettromeccanici possono
dar luogo a transienti di tensione di ampiezza elevata. Il circuito fondamentale di un elemento
HTL e' illustrato in fig. 13.3.1 e ricorda molto da vicino la struttura degli elementi DTL. Ci
sono tuttavia da notare i valori relativamente elevati di R1, R2, R3 e il valore nominale della
tensione di alimentazione che e' di 15 V.

304
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Il diodo zener fa salire la soglia di commutazione a circa 7 volt. Piu' esattamente i livelli
garantiti di ingresso e di uscita sono:

VOL = 1.5 V VOH = 12.5 V


VIL = 6 V VIH = 8 V

Il margine di rumore, sia allo stato alto che allo stato basso, e' quindi di 4.5 volt. Il fan-
out tipico della famiglia e' 10, la dissipazione si aggira sui 30 mW per gate.

R R3
2
15 K 1.5 K

T2
R R1
D1 4
3K R6 C
A 12 K
1K D4
T1
B
D D
2 3

T3

R5
5K

A
C
B

figura 13.3.1

I tempi di propagazione non sono ovviamente dei migliori; sono anzi in assoluto i
maggiori tra tutti quelli delle famiglie logiche, potendo giungere fino a 150 nsec. Tale fatto
d'altra parte non puo' essere considerato un dato del tutto negativo in quanto migliora le ca-
ratteristiche di immunita' al rumore in corrente alternata.

13.4) La famiglia TTL.


La famiglia TTL e', assieme alla CMOS, quella piu' largamente usata al giorno d'oggi.
Tutti i principali fabbricanti hanno oggi una linea di produzione TTL, che comprende, oltre
alla famiglia TTL standard, tutta una serie di sottofamiglie, ciascuna delle quali ottimizza una
particolare caratteristica.

13.4.1) La sottofamiglia TTL standard.


In fig. 13.4.1 e' riportato il circuito dell'elemento fondamentale TTL, che in logica
positiva realizza la funzione logica NAND. Esso opera con una singola alimentazione di 5
volt.
L'elemento standard e' compatibile con qualsiasi altro elemento appartenente alle
sottofamiglie e con gli elementi della logica DTL.

305
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

ingresso invertitore uscita


Vcc (+ 5 volt)
R4
R1 R2 130
4k 1.6 k
T4
T1
A D1
T2
B
T
R3 3
1k

figura 13.4.1

Il ritardo di propagazione e' compreso tra 5 e 10 nanosecondi, la dissipazione e' di 10


mW per gate, mentre la massima frequenza operativa si aggira sui 35 MHz.
Il circuito puo' essere funzionalmente suddiviso in tre parti: uno stadio di ingresso
associato ad un transistore multiemettitore, un invertitore di fase e uno stadio di uscita atto ad
ottenere i livelli di tensione e di impedenza stabiliti in sede di progetto. Spesso tra gli ingressi
e la massa sono connessi dei diodi di protezione con la funzione di tosare eventuali segnali
negativi applicati all'ingresso.
Quando l'uno o l'altro dei due ingressi e' al livello basso il transistore T1 diviene
conduttore e di conseguenza nessuna corrente circola nella base di T2. T2 pertanto e' inter-
detto; la sua tensione di collettore coincide in pratica con la tensione di alimentazione, mentre
la sua tensione di emettitore e' in pratica nulla. In tale situazione T4 passa in conduzione, T3 si
interdice e l'uscita si porta a livello alto.
Nella pratica lo stadio di uscita puo' assumere diverse configurazioni, ciascuna delle
quali offre vantaggi e svantaggi. Le principali tra queste configurazioni sono:

1) USCITA DARLINGTON

Vcc

Uscita

Quali vantaggi si possono citare l'attitudine a pilotare carichi capacitivi, le piccole


dimensioni e l'alto valore di VOH = VCC - VBE.
Un grosso svantaggio risiede nel fatto che in uscita non possono essere applicate
tensioni superiori a VCC pena gravi danni al circuito.

306
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

2) USCITA A EMITTER FOLLOWER A 2 STADI

Vcc

Uscita

Vantaggi: Alti pilotaggi in a.c., VOH = VCC - VBE a Iuscita = 0.


Svantaggi: Dimensioni maggiori che non nel caso precedente. Impossibilita' di ap-
plicare in uscita tensioni superiori a Vcc .

3) DARLINGTON CON RESISTORE RIFERITO A MASSA

Vcc

Uscita

Vantaggi:Possibilita' di alti pilotaggi in a.c. Maggior velocita' che non nei casi
precedenti. Possibilita' di spingere l'uscita piu' in alto di VCC.
Svantaggi:VOH minore. Dissipazione piu' elevata. Minore immunita' al rumore
allo stato alto.

4) USCITA A TRANSISTORE - DIODO


Vcc

Uscita

Vantaggi:Minore dissipazione. Piccole dimensioni. L'uscita puo' essere spinta piu'


in alto di VCC.
Svantaggi: Scarsa possibilità di pilotaggio in corrente alternata.

307
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

5) COLLETTORE APERTO

Uscita

Vantaggi:Possibilità di eseguire il wired-or e il collegamento a bus.


Svantaggi: Impedenza di uscita allo stato alto elevata. Bassa velocita', in partico-
lare con carichi capacitivi. Necessita' di una resistenza esterna.

A qualsiasi tipo di uscita puo' essere aggiunta una resistenza esterna di "pull-up",
connessa tra uscita e VCC in modo da far avvicinare la tensione di uscita allo stato alto a quella
di alimentazione. Tuttavia solo i circuiti 3,4,5 possono essere spinti piu' in alto della tensione
di alimentazione. Le configurazioni 1 e 2 infatti tosano il segnale ad una tensione appena
superiore a VCC, in quanto, come detto in precedenza, alla resistenza connessa all'uscita e'
sempre associato un diodo parassita verso il substrato. Questo fatto diviene notevolmente
importante nei sistemi di grandi dimensioni, in cui varie sezione sono alimentate
separatamente, con la possibilita' che mentre certe parti del circuito si trovano ad una tensione
VCC = 0 altre siano alimentate normalmente. In queste condizioni le uscite dei circuiti 1 e 2
costituiscono una via ad impedenza molto bassa anche per tensioni inferiori al volt, mentre
quelle dei circuiti 3,4,5 sono ad alta impedenza, consentendo l'isolamento dal resto del
sistema.
Nei dispositivi piu' moderni esistono strutture di uscita piu' sofisticate che permettono di
migliorare le caratteristiche di trasferimento aumentando nel contempo l'immunita' al rumore
e la velocita' operativa.

13.4.2) Caratteristica di trasferimento.


In fig. 13.4.2 e' riportato il grafico della tensione di uscita in funzione della tensione di
ingresso, cioe' la caratteristica di trasferimento, in condizioni statiche.

4.0 H
"1"

3.0
J

2.0

1.0

L
"0"
0
0.4 0.8 1.2 1.6 2.0 2.4 2.8

figura 13.4.2

E' importante notare che la curva di trasferimento varia in modo non trascurabile con la
temperatura, la tensione di alimentazione e il carico. La curva illustrata si riferisce ad una
temperatura di 35 gradi, ad una tensione d’alimentazione di 5 volt e ad un fan-out pari a 10.

308
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Con riferimento alla fig. 13.4.1, l'analisi puo' essere condotta pensando di riunire i due
ingressi A e B. Man mano che la tensione applicata cresce, a partire da 0 volt, la corrente di
base di T1 viene gradualmente deviata dagli emettitori al collettore; di conseguenza T2 inizia a
condurre. La tensione di ingresso alla quale T2 esce dall'interdizione e' compresa tra 0.7 e 0.8
volt (punto H della caratteristica).
Dal punto H al punto J il transistore T2 opera in regime lineare, con un guadagno di
tensione determinato dal rapporto tra il resistore di collettore e quello di emettitore. La ten-
sione di base di T4 gradualmente diminuisce portando il transistore verso l'interdizione. In
definitiva nel tratto H-J l'uscita ripete l'andamento della tensione di collettore di T2, in quanto
T4 funziona da inseguitore.
Arrivati al punto J comincia a condurre il transistore T3, aprendo una via a bassa
impedenza verso massa per la corrente di emettitore di T2; come risultato aumentano il gua-
dagno di tensione di T4 e la pendenza della caratteristica.
Tra i punti J e L i transistori T2, T3 e T4 conducono contemporaneamente; solo al punto
L T4 si interdice. A tale istante la tensione di uscita e' approssimativamente pari a 0.2 volt e la
transizione dallo stato alto a quello basso e' completata.
Da quanto esposto si possono trarre due importanti considerazioni. La prima e' che nel
tratto J-L vi e' un percorso a bassa impedenza tra VCC e massa, formato da R4, T4 , D1, T3,
sede di una corrente non trascurabile. E' questo uno degli svantaggi della famiglia TTL, in
quanto durante il funzionamento si hanno degli impulsi di corrente, che, oltre ad aumentare la
potenza dissipata al crescere della frequenza, sono una sorgente di rumore che puo' interferire
con il normale funzionamento del circuito. La seconda considerazione e' che durante il
funzionamento tutti i transistori, con l'eccezione di T4, passano dall'interdizione alla
saturazione e viceversa, limitando pertanto, come avviene in ogni logica saturata, la velocita'
operativa.

13.4.3) Tensioni e correnti di ingresso e di uscita.


La caratteristica di trasferimento esaminata al paragrafo precedente fornisce alcune
interessanti informazioni sul valore delle tensioni di ingresso e di uscita nei due stati.
Dalla curva di fig. 13.4.2 si puo' vedere che se gli ingressi sono pilotati ad una tensione
superiore a 0.8 volt il circuito inizia a commutare verso l'uscita logica 0. In modo del tutto
simile, se uno qualsiasi degli ingressi scende ad una tensione inferiore a 1.4 volt l'uscita inizia
a commutare verso il valore logico 1. In prima approssimazione si potrebbe quindi affermare
che se l'ingresso e' mantenuto al di fuori della zona compresa tra 0.8 e 1.4 volt, l'uscita del
gate definisce senza ambiguita' i valori logici 1 e 0. La precisa definizione dei valori limite e'
tuttavia complicata dal fatto che la curva varia con la temperatura,la tensione di alimentazione
e il fan - out.
Per tale ragione e' prassi comune che i costruttori di circuiti integrati garantiscano i
valori massimi e minimi delle tensioni di ingresso e di uscita nelle peggiori condizioni di
funzionamento. E' stato gia' chiarito in precedenza il significato di tali tensioni, che per la
famiglia TTL standard valgono:

VIH = 2 volt VIL = 0.8 volt


VOH = 2.4 volt VOL = 0.4 volt

Ugualmente importanti sono le correnti che entrano o escono da un elemento logico nei
due stati.

309
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

La fig. 13.4.3 mostra il flusso di corrente attraverso gli ingressi e l'uscita di due porte
NAND nelle due possibili condizioni di lavoro. Quando l'uscita della porta 1 e' allo stato alto
la corrente circola dal transistore T4 della porta 1 verso l'emettitore di T1 della porta 2.
Quando la porta 1 e' nello stato basso la corrente circola dall'emettitore di T1 della porta 2
all'emettitore di T3 della porta 1.
La corrente di ingresso allo stato alto e' garantita inferiore a 40 microampere, valore
trascurabile nel determinare il fan-out, mentre la corrente erogata dall'ingresso allo stato basso
e' garantita inferiore a 1.6 milliampere e deve richiudersi a massa attraverso T3.
Pertanto, affinche' sia assicurato un fan-out pari a 10, T3 deve poter assorbire una
corrente di 16 milliampere senza che la sua tensione di saturazione VCES salga a valori al di
sopra di VOL = 0.4 volt.

R1 R2
T4 1
I OH
Flusso di corrente I IH
D1

T3 I IL T1 T2
I OL 0

figura 13.4.3

In definitiva si ha:

IIH < 40 mA

intendendo con IIH la corrente che fluisce in un ingresso quando ad esso e' applicata una ten-
sione Vi 2 volt.

IIL < 1.6 mA

IIL e' la corrente che esce da un ingresso quando ad esso e' applicato un livello logico 0,
cioe' una tensione di ingresso inferiore a 0.8 volt.

IOH 0.4 mA

dove IOH e' la corrente che puo' essere fornita dall'uscita a livello logico alto senza che la sua
tensione scenda al di sotto di VOH = 2.4 volt. Il valore relativo all'uguaglianza e' il minimo
necessario a garantire un fan-out pari a 10.
Sempre per garantire un fan - out pari a 10 e' necessario che :

IOL 16 mA

310
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

intendendo ovviamente, come gia' e' stato detto,che IOL sia la corrente che puo' essere iniettata
nell'uscita allo stato basso senza che la tensione di uscita salga al di sopra di 0.4 volt.

mA

80
70
60
diodo di 50
protezione
40
30
20 regione operativa normale

10
volt
-3 -2 -1 -10 1 2 3 4 5

-20
-30

figura 13.4.4

Per quanto riguarda l'impedenza di ingresso di una porta TTL si possono fare le seguenti
considerazioni. Per tensioni di ingresso superiori a 2 volt essa e' molto alta; vale circa 4 kohm
tra +1 e -0.5 volt, mentre per tensioni inferiori e' molto bassa a causa del diodo di protezione
connesso tra ingresso e massa. La caratteristica di ingresso e' riportata in fig. 13.4.4.
La caratteristica di uscita e' riportata invece in fig. 13.4.5. Si puo' vedere che
l'impedenza d'uscita e' di basso valore in ambedue gli stati. Nello stato basso l'impedenza e'
determinata dalla resistenza offerta dal transistore T3 in condizioni di saturazione, pari a circa
8 ohm. A correnti elevate, iniettate dall'esterno nel terminale di uscita, in particolare se si
opera a basse temperature, il transistore puo' uscire di saturazione facendo salire l'impedenza
di uscita. Allo stato alto viceversa l'impedenza d'uscita e' determinata in pratica dal valore di
R4.
mA

90
80 Stato basso
70
60
50
40 R sat ~
= 8
30
20
10
volt
-1 -10 1 2 3 4 5 6

-20
T non saturato
-30 4

-40 stato alto


-50 ~= R
4
-60

figura 13.4.5

E' interessante notare che, commutando dallo stato basso a quello alto, la struttura a
totem-pole dello stadio di uscita consente, a causa della sua bassa impedenza d'uscita, un ra-

311
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

pido raggiungimento delle condizioni di regime anche in presenza di carichi capacitivi. In


questo caso tuttavia, le correnti, relativamente rilevanti, circolano anche sulla rete di distri-
buzione dell'alimentazione, che deve quindi essere corta ed adeguatamente disaccoppiata.
Inoltre, se durante la transizione dallo stato basso allo stato alto T4 passa in conduzione prima
che T3 sia interdetto, come normalmente avviene, si ha un assorbimento di corrente impulsivo
di breve durata, i cui effetti si propagano comunque attraverso la rete di alimentazione.

13.4.4) Altri elementi logici TTL.


Oltre alla porta fondamentale NAND la famiglia TTL offre altri elementi, quali AND,
OR, NOR, XOR, realizzati modificando lo schema fondamentale della famiglia e mantenendo
le medesime caratteristiche elettriche. In fig. 13.4.6 e' riportata la porta AND, ottenuta a
partire dalla porta NAND con l'aggiunta di un ulteriore stadio invertitore.

4k 2k 1.6 k 130

T4
T1
T2
T5
INGRESSI
T3

800 T6 1k

figura 13.4.6

Il transistore T6 viene utilizzato per creare una via a bassa impedenza per la rimozione
della carica accumulata nello spazio di base di T5.
In fig. 13.4.7 e' invece riportata la porta NOR, che utilizza lo stesso stadio di uscita a
totem-pole della porta NAND, mentre profondamente modificato e' lo stadio di ingresso, che
utilizza due transistori separati al posto del transistore multiemettitore, e l'invertitore di fase
realizzato con una coppia differenziale. La porta OR e' molto simile a quella NOR con
l'aggiunta di due transistori che esplicano le stesse funzioni di T5 e T6 della porta AND.

130

4K 1.6 K 4K T
4

T
1A
T1B D1
Uscita
INGRESSI T 2A T2B

T
3

1K

figura 13.4.7

Esistono infine le cosiddette porte a collettore aperto, illustrate in fig. 13.4.8.

312
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Manca in questa configurazione circuitale il transistore superiore del totem-pole,


mentre il collettore del transistore inferiore e' reso accessibile dall'esterno.

V cc

T1 T2
INGRESSI USCITA

T3

figura 13.4.8

Il loro principale utilizzo si ritrova nel collegamento a "bus", in connessione "wired-or",


come illustrato in fig. 13.4.9.

RL
nodo di interconnessione

V al carico
IL

V
IL

V
OH

V
IL

V
IL

figura 13.4.9

Tale collegamento non risulta evidentemente possibile quando lo stadio di uscita sia a
totem-pole, in quanto durante il funzionamento potrebbe stabilirsi una via a bassa impedenza
tra l'alimentazione e la massa con possibile danneggiamento dei dispositivi interessati.
E' infine il caso di citare le porte con uscite "3-state", usate per i medesimi scopi delle
porte a collettore aperto, cioe' quando le uscite di piu' porte accedono alla medesima linea e
sono quindi collegate galvanicamente assieme. Le porte con uscite "3-state" permettono di
superare alcuni degli inconvenienti di cui soffrono le porte a collettore aperto, primo tra i quali
le scadenti caratteristiche di velocita', specialmente in presenza di carichi capacitivi.

313
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

In queste porte l'uscita puo' assumere, oltre ai normali stati "1" e "0", anche un terzo
stato in cui ambedue i transistori dello stadio di uscita sono interdetti, rendendo pertanto
l'uscita isolata.

T4
T1
T2

ingresso Uscita

T3
Disabilitazione

Schema funzionale
figura 13.4.10

Uno schema funzionale e' riportato in fig. 13.4.10, mentre in fig. 13.4.11 appare lo
schema dell'effettiva realizzazione pratica e il simbolo logico relativo.

T T
1 4

Schema elettrico
T
ingresso 2

T3 Uscita

Simbolo logico

abilitazione

figura 13.4.11

13.4.5) La sottofamiglia low power TTL.


In un rilevante numero di applicazioni i circuiti TTL standard sono notevolmente piu'
veloci del necessario; si e' ritenuto pertanto opportuno rinunciare al sovrappiu' di velocita' in
favore di una riduzione della potenza dissipata. E' stata pertanto introdotta dai costruttori,
quasi contemporaneamente alle porte TTL standard, la sottofamiglia low power TTL
(LPTTL).
Il circuito e' identico a quello della TTL standard, con l'unica eccezione che i valori dei
resistori risultano moltiplicati per un fattore, che a seconda del fabbricante e' compreso tra 4 e

314
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

10. Di conseguenza la potenza dissipata diminuisce dal 75% al 90% mentre il tempo di
propagazione aumenta di 3-4 volte. Valori tipici sono 1 mW per gate per quanto riguarda la
potenza dissipata, 33 nsec per il tempo di propagazione e 3 MHz per la velocita' massima.
E' bene rilevare che una riduzione del consumo non si riflette solamente sulla
dimensione e sul costo dell'alimentatore, ma porta anche ad una semplificazione del progetto
termico del sistema per la minor quantita' di calore sviluppato. Inoltre, poiche' i dispositivi
LPTTL utilizzano i medesimi involucri degli elementi standard, le temperature alle giunzioni
sono inferiori a tutto favore di una maggior affidabilita'.
Dal punto di vista del rumore vi sono due distinti vantaggi; la riduzione delle correnti in
gioco fa si' che l'autogenerazione di rumore risulti notevolmente diminuita, permettendo di
usare un minor numero di condensatori di disaccoppiamento e semplificando il progetto del
circuito stampato. Oltre a cio' la minor velocita' di commutazione fa si' che l'immunita' al
rumore in corrente alternata sia superiore.
Il fan-out nell'ambito della sottofamiglia e' 10; tuttavia e' bene far notare che la LPTTL
e' perfettamente compatibile con qualsiasi altro elemento TTL. Per un elemento LPTTL che
pilota un TTL standard il fan-out sara' compreso tra 1 e 4, mentre nel caso di un TTL standard
che pilota un LPTTL il fan-out sara' compreso tra 25 e 60.
A causa del ridotto valore della correnti di ingresso degli elementi LPTTL, essi co-
stituiscono una buona interfaccia verso i circuiti MOS le cui impedenze di uscita sono gene-
ralmente abbastanza alte.
In conclusione la LPTTL e' la piu' facile da impiegare tra tutte le sottofamiglie TTL e
andrebbe utilizzata in tutte quelle occasioni in cui non risulti penalizzata dalla sua ridotta
velocita'.

13.4.6) La sottofamiglia high speed TTL.


Dopo l'introduzione della famiglia TTL la domanda dei produttori di calcolatori, di
strumentazione e di apparecchi di comunicazione ha spinto tale famiglia a evolversi verso
l'alta velocita', facendo nascere dapprima la high speed TTL (HTTL) e successivamente la
Schottky TTL (STTL), di caratteristiche ancora migliori.

V cc

56
760
2.8 k

T1 T
3
T4

Ingresso T2 Uscita

T
D1 5
D2 470
4k

figura 13.4.12

Il circuito base HTTL, riportato in fig. 13.4.12, nasce da quello della TTL standard con
l'aggiunta di una coppia Darlington in sostituzione del transistore superiore del totem-pole di
uscita e con la diminuzione del valore di tutte le resistenze.

315
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

La coppia Darlington aumenta la velocita' con cui la corrente di T4 puo' essere


commutata; in aggiunta la diminuzione dei valori resistivi minimizza l'effetto delle capacita'
parassite, aumentando pertanto la velocita' con cui il circuito puo' cambiare stato.
Valori tipici per tale sottofamiglia sono 6 nanosecondi per il tempo di propagazione, 50
MHz come velocita' massima e 22 mW per gate come potenza dissipata.
Al giorno d'oggi i dispositivi HTTL sono usati quasi esclusivamente per ridurre i ritardi
in alcuni itinerari critici in sistemi realizzati con elementi TTL standard; presentano
l'inconveniente di una maggior potenza dissipata, di una maggior autogenerazione di rumore e
rendono piu' critica la disposizione dei componenti sulla scheda a circuito stampato, per
motivi che verranno illustrati brevemente piu' avanti.

13.4.7) La sottofamiglia TTL Schottky.


Le varie famiglie e sottofamiglie fin qui prese in esame sono tutte relative a logiche
saturate; i transistori cioe' sono portati in conduzione con una corrente di base sufficiente a
condurli al limite della saturazione anche con il guadagno di corrente minimo e nelle peggiori
condizioni di temperatura e di carico. Di conseguenza un transistore riceve in media una
corrente di base di gran lunga superiore a quella necessaria e si addentra percio' profon-
damente nella zona di saturazione. Si forma un accumulo di portatori di minoranza nella zona
di base e per portare poi nuovamente il transistore in interdizione e' necessario rimuovere tale
carica, con una considerevole perdita di tempo. Per migliorare la situazione si potrebbe
pensare di accelerare la ricombinazione, drogando con oro. Sfortunatamente tale accorgimento
riduce in modo sensibile il guadagno del transistore.
Il transistore Schottky supera tali limitazioni facendo uso di un diodo a barriera su-
perficiale, detto appunto diodo Schottky, con una tensione di conduzione molto bassa (circa
0.3 volt) e senza accumulo di carica dovuta ai portatori minoritari.
Tale diodo viene connesso tra base e collettore di un transistore convenzionale, come
illustrato in fig. 13.4.13. Nella stessa figura e' riportato anche il simbolo con cui viene indicato
un transistore cosi' modificato.

transistore schottky simbolo elettrico

figura 13.4.13

In fig. 13.4.14 (a) e' riportata la situazione in cui un transistore e' in prossimita' della
saturazione, ma in cui il diodo Schottky e' ancora interdetto; in fig. 13.4.14 (b), essendo la
tensione di collettore ulteriormente discesa, si ha un drenaggio di parte della corrente di base
verso il collettore per effetto del diodo Schottky.
In pratica aumenti di I al di la' della corrente necessaria a portare il transistore al limite
di saturazione si traducono in aumenti della sola ID , mentre IB rimane in sostanza costante.

316
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Anche gli aumenti della IC, provocati da iniezioni di corrente dall'esterno, non modificano la
situazione; infatti in tal caso sale la VCE e di conseguenza diminuisce ID e aumenta IB,
riportando il circuito nelle condizioni di fig. 13.4.14 (b).

(a) (b)
< 0.3 V I = Ib 0.3 V I=I +I
Ic b d
Ic Id = 0

Id Id Ic + Id

I Ib I Ib
> 0.4 V 0.4 V

0.7 V 0.7 V

figura 13.4.14

In conclusione il transistore Schottky non entra mai in saturazione e si interdice quindi


rapidamente quando viene annullata la corrente di base. Inoltre, non essendo richiesto il
drogaggio in oro, il guadagno di corrente rimane elevato.

V
2.8 k 900 50

T1 T5
T6
1k
T Uscita
2
ingresso
T4
500 250
D D
1 2

T3

figura 13.4.15

La porta TTL Schottky, il cui circuito e' riportato in fig. 13.4.15, impiega solo transistori
Schottky, con l'eccezione di T6 , che lavorando da inseguitore di emettitore non puo' saturarsi.
Prestazioni tipiche sono 3 nsec. quale tempo di ritardo di propagazione, 19 mW/gate per la
dissipazione e 125 MHz per la massima velocita'.
La sottofamiglia STTL presenta diversi vantaggi:

1) Il ritardo e' dell'ordine della meta' della HTTL e del terzo della TTL standard. E'
possibile pertanto realizzare sistemi logici molto veloci senza perdere la
compatibilita' con altri dispositivi TTL.
2) La potenza dissipata cresce molto piu' lentamente con la frequenza che non per
le altre sottofamiglie. Pertanto, malgrado che la potenza dissipata in condizioni
statiche non si possa a rigore definire piccola, ad alte frequenze la potenza
dissipata e' addirittura inferiore a quella della TTL standard.

317
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

3) Poiche' anche i diodi di tosatura presenti all'ingresso sono di tipo Schottky, si ha


una maggior efficacia nella soppressione di eventuali oscillazioni, sia a causa
della minor tensione di soglia di tali diodi, sia per la loro maggior velocita' di
commutazione.
4) I dispositivi STTL sono elettricamente, meccanicamente e logicamente
equivalenti ai TTL standard e quindi il miglioramento di sistemi logici gia'
esistenti puo' essere ottenuto semplicemente con la sostituzione degli elementi
standard con elementi STTL.

Per contro la maggior ripidita' dei fronti di commutazione, realizzata sempre nell'intento
di migliorare le caratteristiche di velocita' della sottofamiglia, rende piu' problematico l'uso dei
dispositivi STTL. La velocita' di salita (slew rate) e' tipicamente maggiore di 1 volt/nsec e
puo' dar luogo ad oscillazioni e riflessioni sulle linee di collegamento anche con connessioni
di lunghezza moderata (20 - 30 cm). D'altra parte non e' semplice terminare le linee con un
carico adeguato senza peggiorare in modo sensibile il fan-out. Infine, poiche' i transistori
Schottky non saturano, la VOL sale a 0.5 volt e quindi l'immunita' al rumore allo stato basso e'
di 300 millivolt anziche' 400 millivolt.
Si raccomanda pertanto, quando si usano elementi STTL, di mantenere le connessioni il
piu' corte possibile, di usare linee di massa di generose dimensioni e a bassa induttanza, di
disaccoppiare con condensatori di buone caratteristiche a radiofrequenza le alimentazioni ed
infine di applicare terminazioni di adattamento alle connessioni che superano la lunghezza di
20 cm, facendo tuttavia attenzione alla riduzione del fan-out.

13.4.8) La sottofamiglia low power Schottky TTL.


La sottofamiglia low power Schottky (LSTTL) e' quella introdotta piu' di recente e
circuitalmente coincide con quella low power; i transistori tuttavia sono di tipo Schottky.
Come risultato si ottengono ritardi di propagazione dell'ordine dei 10 nsec. con dissipazioni di
2 mW/gate, avendo cioe' in pratica la velocita' della TTL standard con la dissipazione della
low power. Un sistema realizzato con la sottofamiglia LSTTL avra' quindi una minor
dissipazione di calore e un minor rumore autogenerato.

TABELLA 4
Confronto velocita' - dissipazione
Denominazione Sottofamiglia Tempo di ritardo Dissipazione

TTL Standard 5 - 10 nsec. 10 mW


HTTL Alta Velocita' 6 nsec. 22 mW

LPTTL Low power 10 - 20 nsec. 2 mW


STTL Schottky 3 nsec. 19 mW
LSTTL Low power Schottky 5 - 10 nsec. 2 mW

Infine la LSTTL si presta particolarmente bene a fungere da interfaccia verso i di-


spositivi MOS e CMOS. In tabella 4, 5, 6 sono riportate le principali caratteristiche delle
sottofamiglie TTL.

318
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

TABELLA 5
Serie militare Serie industriale
(-55/125o C) (0/75o C)
Sottofamiglia
VIL VIH VOL VOH VIL VIH VOL VOH

Standard 0.8 2.0 0.4 2.4 0.8 2.0 0.4 2.4

High speed 0.8 2.0 0.4 2.4 0.8 2.0 0.4 2.4

Low power 0.7 2.0 0.3 2.4 0.8 2.0 0.3 2.4

Schottky 0.8 2.0 0.5 2.5 0.8 2.0 0.5 2.7

Low power Schottky 0.7 2.0 0.4 2.5 0.8 2.0 0.5 2.7

TABELLA 6
Margini di rumore apparenti
a
da TTL HTTL LPTTL STTL LSTTL

TTL 0.4 0.4 0.4 0.4 0.4

HTTL 0.4 0.4 0.4 0.4 0.4


LPTTL 0.5 0.5 0.5 0.5 0.5
STTL 0.3 0.3 0.3 0.3 0.3
LSTTL 0.3 0.3 0.3 0.3 0.3

13.4.9) Conclusioni sulle sottofamiglie TTL.


L'area di applicazione dei dispositivi TTL e' talmente vasta che conviene piuttosto
elencare le applicazioni in cui essi non sono raccomandabili che non fare il viceversa.
Non e' opportuno usare tali dispositivi:

1) Nelle applicazioni in cui e' richiesta una bassissima dissipazione di potenza. Per
tali usi e' preferibile usare elementi CMOS.
2) Nella realizzazione di sistemi che debbano operare in ambienti ad alto rumore,
dove sono preferibili i dispositivi HTL e CMOS.
3) Nelle applicazioni ad altissima velocita', dove si usano gli ECL.
4) Nelle realizzazioni LSI, dominio quasi incontrastato della tecnologia MOS.

Riassuntivamente comunque i vantaggi della tecnologia TTL sono:

1) Elevata disponibilita' di elementi logici, anche di notevole complessita'.


2) Compatibilita' totale con la DTL.
3) Bassa impedenza di uscita in ambedue gli stati logici e quindi una notevole
capacita' di pilotaggio in c.a.

319
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

4) Notevole reiezione del rumore proveniente dall'esterno a causa della bassa


impedenza di uscita, senz'altro superiore a quanto ci si potrebbe aspettare dal
margine di rumore di 400 mvolt.
5) Elevata velocita'.
6) Ottimo prodotto velocita'-potenza dissipata.
7) Costo moderato e notevole reperibilita' presso diversi fornitori.
8) Compatibilita' tra le diverse sottofamiglie, caratteristica questa che permette di
ottimizzare il progetto.

In contrapposizione si possono tuttavia citare i seguenti svantaggi:

1) I cambiamenti estremamente rapidi delle tensioni e delle correnti in gioco


rendono critica la progettazione degli stampati che devono essere realizzati in
modo da evitare per quanto possibile cadute reattive ed accoppiamenti tra linee.
2) Autogenerazione di rumore durante la commutazione, che rende indispensabile
l'uso di condensatori di disaccoppiamento.
3) Impossibilita' di realizzare la connessione "wired - or" a causa della struttura a
totem-pole degli stadi di uscita.

13.5) Problemi di impiego degli elementi logici TTL.


Le caratteristiche elettriche degli elementi logici, presentate nei paragrafi precedenti,
impongono l'uso di determinate precauzioni sia in sede di progetto che in quella di realizza-
zione di un sistema logico. Sebbene le considerazioni che seguono si riferiscano in modo
particolare a sistemi che impiegano elementi TTL, esse possono tuttavia essere facilmente
estese anche alle altre famiglie logiche.

13.5.1) Cause di rumore.


Un sistema logico, come qualsiasi altro sistema fisico, e' comunque affetto da rumore di
varia natura. Tale rumore puo' provenire da una sorgente esterna, come ad esempio nel caso in
cui in prossimita' vi siano delle apparecchiature elettromeccaniche in funzione,
dall'accoppiamento (crosstalk) tra le linee di segnale del circuito, puo' essere autogenerato,
come gia' e' stato messo in luce per gli elementi TTL, o infine pervenire al sistema attraverso i
collegamenti di ingresso e di uscita o di alimentazione.

a) Rumore irradiato
In fig. 13.5.1 e' riportato un modello estremamente semplificato per l'accoppiamento tra
una sorgente di rumore (rele', motore elettrico, ecc.) e la connessione tra due porte. In tale
modello si suppone che la sorgente di rumore sia accoppiata alla connessione tra le due porte
tramite una capacita' parassita C, mentre R rappresenta l'impedenza tra la linea di connessione
stessa e la massa.
In tali ipotesi la tensione di rumore e' data da Vin R.i e pertanto, essendo i C. dV , si
dt
ottiene:
dV
Vin R.C.
dt

320
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Sorgente

C
dV/dt

i
V in
R

figura 13.5.1

L'ampiezza della tensione di disturbo e' quindi proporzionale all'impedenza R, alla


capacita' Cs e soprattutto alla rapidita' di variazione della tensione di disturbo in ingresso.
Ponendo ad esempio R = 25 ohm, Cs = 2 pF e supponendo che il margine di rumore sia, come
per la famiglia TTL, pari a 400 mV, si trova che dev'essere realizzata la condizione:

dV volt
8
dt nsec.

perche' il disturbo dia luogo ad un effettivo malfunzionamento del sistema.

b) Rumore d'accoppiamento
Come accennato, si ha rumore di accoppiamento quando un segnale propagato tra due
porte da' origine alla perturbazione del livello logico tra altre due porte. L'ampiezza della
perturbazione dipende dal valore dell'impedenza vista dal punto di unione tra le due porte
disturbate.
Se il ritardo di propagazione tra le due porte e' inferiore alla meta' del tempo medio di
ritardo dei gate, le due porte possono essere considerate vicine e l'impedenza citata puo' essere
supposta uguale all'impedenza di uscita della porta pilotante. In tal caso il fenomeno puo'
essere studiato con un modello formalmente identico a quello usato per il rumore irradiato.
Se invece le porte non possono essere considerate vicine, i collegamenti vanno visti come
linee di trasmissione e il modello da utilizzare e' quello riportato in fig. 13.5.2. dove Z0 e'
l'impedenza della linea di trasmissione e Zm e' l'impedenza mutua tra le due linee.

321
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Z0

1 2

3 Z0 Zm 4

figura 13.5.2

Se con Vs si indica l'ampiezza del segnale disturbante e con Zi l'impedenza d'uscita della
porta 1, la tensione di rumore indotta nel collegamento tra le porte 3 e puo' essere calcolata
con la:

Vs
Vin
Zm Zi
1.5 .1
Z0 Z0

13.5.2) Attitudine delle porte TTL a pilotare linee di trasmissione.


Le linee di trasmissione che nella pratica vengono usate quando si realizzano sistemi
digitali e cioe' i cavi e i collegamenti stampati, hanno impedenze caratteristiche comprese tra
50 e 150 ohm. Di conseguenza nessun elemento TTL e' in pratica adatto a pilotare tali linee.
Queste considerazioni tuttavia, che sono valide quando il ritardo di propagazione della
linea e' maggiore del tempo di salita o di discesa del segnale di ingresso, non si applicano alle
brevi interconnessioni tra elementi dello stesso circuito. In tal caso infatti esse non si com-
portano come una linea di trasmissione resistiva, ma piuttosto come un carico capacitivo.
Poiche' i tempi di commutazione degli elementi TTL sono noti, e' facile calcolare la
massima lunghezza di interconnessione tollerata, tale cioe' da non dar luogo a pericolose
riflessioni e oscillazioni. Assumendo per la velocita' di propagazione il valore di 20 cm/nsec,
tipica per circuiti stampati in fibra di vetro e resina epossidica di costante dielettrica r = 4.7,
si va da lunghezze minime di 20 - 25 cm per tempi di commutazione di 1.5 - 2.5 nsec a 60 -
80 cm per tempi di commutazione dell'ordine di 12 - 18 nsec.
I migliori risultati si ottengono in ogni caso con linee di impedenza caratteristica
aggirantesi sui 100 ohm. Usando una delle facce del circuito stampato come piano di massa,
tracce di 0.65 mm di spessore con dielettrico fibra di vetro e resina epossidica realizzano
proprio linee da 100 ohm. Dello stesso ordine di grandezza e' l'impedenza di linee realizzate
con fili da 0.25 - 0.30 mm di diametro attorcigliati assieme.
Quando la lunghezza delle interconnessioni supera i limiti entro cui esse non devono
essere considerate delle linee di trasmissione, si possono verificare fastidiosi fenomeni di
oscillazione (ringing) tanto piu' marcati quanto piu' la linea e' lunga.
Il modello a parametri concentrati non e' in grado in questo caso di rappresentare in
maniera adeguata tutti i fenomeni coinvolti nella trasmissione dei segnali. In primo luogo esso
trascura completamente la presenza dell'induttanza distribuita della linea. Pertanto un modello
piu' appropriato sarebbe quello di figura 13.5.3.

322
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

L R

figura 13.5.3

Da un altro punto di vista si dovrebbe poi tenere conto delle perdite della linea,
inevitabilmente presenti, introducendo una resistenza di perdita in parallelo alla capacita' C.
Il limite principale che tuttavia i modelli a parametri concentrati presentano risiede nel
fatto che nella realta' resistenza, capacita' e induttanza sono distribuite uniformemente lungo la
linea e non concentrate in un unico punto. Si puo' pertanto pensare di suddividere la linea in
tanti spezzoni, per ciascuno dei quali si puo' costruire un modello a parametri concentrati,
come illustrato in figura 13.5.4.

L R L R L R

C C C

ò ò ò

figura 13.5.4

Andando al limite, considerando cioe' un numero infinito di celle di lunghezza


infinitesima, si ottiene il modello a parametri distribuiti che prende il nome di modello delle
linee di trasmissione.
Le caratteristiche principali di una linea di trasmissione sono:
La velocita' U di propagazione del segnale lungo la linea. La velocita', infatti,
non e' infinita, ma e' limitata superiormente dalla velocita C della luce. A
seconda delle caratteristiche della linea la velocita U puo' essere anche
considerevolmente inferiore a C e tale fatto assume una notevole importanza
in presenza di linee lunghe.
L'impedenza caratteristica Zo della linea, cioe' il rapporto v t / i t , che risulta
costante lungo tutta la linea.

323
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Il tempo di propagazione lungo una linea di lunghezza L e' evidentemente pari a:

L
tp
U

E' opportuno far notare che il tempo di propagazione dipende unicamente dalle
caratteristiche della linea ed e’ quello necessario per spostare un'onda elettrica da un punto ad
un altro di una linea di trasmissione.
Dalla teoria delle linee di trasmissione si ricava che:

Zo L' / C '

dove L' e C' sono rispettivamente induttanza e capacita' per unita' di lunghezza della
linea stessa. Analogamente la stessa teoria afferma che:

1
U
L'.C'

Le relazioni appena introdotte sono valide per linee senza perdite, condizione
abbastanza ben approssimata nella maggior parte dei casi reali. In questo caso l'impedenza
caratteristica e' puramente ohmica, come e' facile verificare. Essa inoltre e' indipendente dalla
frequenza.
Aumentando la capacita' diminuiscono sia l'impedenza caratteristica che la velocita' di
propagazione, mentre aumentando L' aumenta l'impedenza caratteristica e diminuisce ancora
la velocita' di propagazione.
Se si fa riferimento a piste di circuito stampato aumentare C' corrisponde a realizzare
piste piu' larghe, diminuire la loro distanza dai conduttori di massa, connettere un maggior
numero di ingressi sulla linea ecc., mentre aumentare L' coincide sostanzialmente con il
realizzare piste piu' sottili.
Le linee tuttavia possono essere di diverso tipo: cavi coassiali, piste su stampato
(generalmente con una delle facce dello stampato utilizzata come piano di massa, in modo da
garantire una costanza delle caratteristiche della linea), doppini ritorti, cavi piatti, ecc.
Ciascuna di loro presenta una ben precisa impedenza caratteristica e una velocita' di
propagazione ben definita. L'impedenza caratteristica Zo tuttavia e' compresa di solito tra i 50
e i 100 per i cavi e tra 20 e 200 per le piste, mentre il doppino ritorto ha normalmente
un'impedenza di 600 . La velocita' di propagazione e' normalmente compresa tra 0,6 C e 0,8
C.
L'utilizzo del modello a parametri distribuiti, come si e’ gia’ accennato, si rende
necessario quando il tempo di propagazione diventa paragonabile con i tempi di salita e di
discesa del segnale. In sostanza, quando la lunghezza della linea di interconnessione supera i
60 cm per gli elementi TTL standard, i 25 cm per gli elementi ALS, la decina di cm per quelli
TTL Schottky e i 5 6 cm per gli elementi ECL. Con linee piu' corte, infatti, tutti i punti della
linea possono essere considerati equipotenziali, mentre in caso contrario questa ipotesi non e'
piu' accettabile. In tale situazione il cambiamento di stato potrebbe essere gia' stato completato
in un punto della linea, ma in punti piu' distanti potrebbe non essere stato ancora avvertito a
causa dalla velocita' finita di propagazione. Quanto piu' veloce e' la commutazione e tanto

324
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

minore e' la lunghezza di linea entro la quale e' utilizzabile il modello a parametri concentrati;
ad esempio, all'interno di un circuito integrato, dove spesso le commutazioni sono
estremamente rapide, accade spesso che anche connessioni dell'ordine del millimetro debbano
essere considerate linee di trasmissione.
Si prenda ora in considerazione il modello di una connessione in cui il mezzo
trasmissivo debba essere considerato una linea (figura 13.5.5).

Zo
Ro
B C
tp
VA
VB VC RT

VA

figura 13.5.5

La linea sia chiusa su una resistenza di terminazione RT e il segnale di ingresso VA sia


un segnale a gradino. Nell'istante di applicazione dell'ingresso il generatore VA vede come
carico un oggetto per il quale V/I = Zo. Di conseguenza la tensione disponibile al punto B
nell'istante t = 0 sara' data da:

Zo
VB VA .
Ro Zo

Pertanto all’estremita’ trasmittente della linea sara' disponibile solamente una frazione
della tensione VA, dipendente dai valori di Ro e Zo.

TABELLA A
Impedenza della linea
Famiglia
TTL Resistenza di Caso peggiore Nominale Caso migliore
collettore R + 30% R - 30%
Serie 74 130 241.4 204.8 136.8 84.6 75.8

Serie 74H 58 107.7 91.3 61.0 37.7 33.8

Serie 74S 55 110.0 92.2 61.1 37.5 33.4

Serie 74L 320 594.2 504.2 336.8 208.3 186.6

4.50 4.75 5.00 5.25 5.50


V
cc serie industriale

serie militare

Nel caso di elementi TTL R0 e' evidentemente un dato caratteristico della sottofamiglia
utilizzata, mentre Z0 puo' venir modificato variando lo spessore del collegamento e la sua
distanza dalla linea di terra.

325
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Per evitare riduzioni eccessive della velocita' operativa del sistema e' opportuno rendere
il gradino iniziale superiore a 2 volt. Nella tabella A e' riportata la piu' bassa impedenza di
linea che puo' essere pilotata dai vari dispositivi TTL in modo che questa condizione sia
soddisfatta.
Il gradino di tensione di ampiezza VB si propaga poi lungo la linea e dopo il tempo tp
giunge all'estremita' opposta dove e' connessa la resistenza di terminazione RT. Per questo
bipolo tuttavia esiste il vincolo che il rapporto tra tensione applicata e corrente che vi circola
sia pari a RT, mentre il segnale applicato proviene da un bipolo per il quale V/I = RT. Senza
utilizzare considerazioni piu' accurate, patrimonio della teoria delle linee, si puo' pensare che i
vincoli vengano rispettati se si suppone che in C si generi quella che viene chiamata onda
riflessa, che si somma a quella gia' presente. Quest'onda si propaga a sua volta lungo la linea
verso l'estremita' B. La discontinuita' presente in C genera quindi un'onda, che si propaga in
direzione opposta a quella dell'onda diretta e che arriva in B dopo un tempo pari a 2tp.
Anche all'estremo B tuttavia puo' esistere una discontinuita' in quanto non e' affatto
garantito che Ro sia uguale a Zo. Per i medesimi motivi, che sono appena stati presi in
considerazione, si genera una nuova onda, che si somma a quella presente in B e si propaga
nuovamente lungo la linea e giunge in C al tempo 3tp.
Ragionando in tal modo si puo' quindi affermare che all'estremo B si avra' tutta una serie
di variazioni di tensione negli istanti ntp con n = 1,2,4 … , cioe' in multipli pari del tempo di
propagazione, mentre all'estremo C le variazioni di tensione si avranno ai multipli dispari di
tp. L'andamento complessivo della tensione agli estremi della linea assume una caratteristica
forma a gradinata e a ciascun estremo le variazioni risulteranno intervallate di 2tp, come
illustrato in figura 13.5.6.
VB
Caso ideale

VA

t
VC

VA

t
tp 2t p 3t p 4t p
(volt)

Caso reale

2
livello logico indefinito
1

t (nsec.)

50 100 150

figura 13.5.6

L'ampiezza Vr dell'onda riflessa e' legata a quella Vi dell'onda incidente da un


coefficiente K detto coefficiente di riflessione. In altre parole

326
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Vr K.Vi
con
RT Zo
K
RT Zo

Conviene prendere in considerazione tre situazioni particolari:

RT = Zo linea adattata, cioe' chiusa su una K=0 VR = 0


resistenza di valore pari all'impe-
denza caratteristica
RT = linea aperta K=1 VR = Vi
RT = 0 linea cortocircuitata K=-1 VR = -Vi

Nel caso della linea adattata il rapporto V/I e' identico sia sulla linea che sulla resistenza
di terminazione e di conseguenza non c'e' alcuna onda riflessa. L'onda diretta giunge alla fine
della linea e quindi dopo un tempo tp si raggiungono le condizioni di regime. Con la linea
aperta invece il coefficiente di riflessione vale 1 e quindi l'onda riflessa ha lo stesso segno e la
stessa ampiezza di quella incidente, mentre con la linea cortocircuitata l'onda riflessa deve
valere -Vi, in quanto ai capi di un cortocircuito la tensione deve essere nulla. Il coefficiente di
riflessione pertanto vale -1.
La determinazione del coefficiente di riflessione e' relativamente semplice. Si consideri
infatti una linea connessa alla sua resistenza di terminazione RT, come mostrato in figura
13.5.7.

vi , i i
Zo
iT
v, , i ,

vr , i r RT
vT

figura 13.5.7

Indicando con vT la tensione di terminazione all'estremita' della linea, nella resistenza


RT circolera' una corrente pari a iT e per la legge di ohm si avra' che:

vT
RT
iT

In qualsiasi sezione della linea invece dovra essere soddisfatta la:

327
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

v,
Zo
i,

dove con v' e i' si sono indicate rispettivamente tensione e corrente nella sezione.
Normalmente RT e Zo sono diverse tra loro e vi e' quindi un'evidente discontinuita'
quando si giunge alla terminazione. Per superare questa, che a prima vista puo' sembrare
un'incongruenza, e' sufficiente pensare che sulla linea sia presente un segnale, che si propaga
verso la terminazione (onda incidente), caratterizzato dai valori ii e vi, e una seconda onda
(segnale riflesso), che viaggia in direzione opposta ed e' caratterizzata dai valori ir e vr. Per
ambedue queste onde il rapporto tra tensione e corrente e' pari a Zo.

vi vr
Zo (13.1)
ii ir

Il sistema preso in considerazione tuttavia e' lineare e quindi vale il principio di


sovrapposizione degli effetti. Pertanto al morsetto di uscita si ha:

vT vi vr iT ii i r

Si ottiene di conseguenza che:


vi vr
RT
ii ir

Sostituendo in questa relazione i valori che di ii e ir che si ottengono dalle (13.1) si ha


che:
vi vr
RT
vi vr
Zo Zo
Si ricava pertanto
v i .Z o v r .Z o v i .R T v r .R T

Esprimendo vr in funzione di vi si ottiene finalmente


RT Zo
vr vi .
RT Zo
Il rapporto tra onda incidente e onda riflessa, cioe' quello che in precedenza e' stato
definito come coefficiente di riflessione K vale pertanto:
RT Zo
K
RT Zo
E' interessante notare che, se la resistenza di terminazione RT e' maggiore di Zo, l'onda
riflessa e' in fase con quella incidente (K > 0), mentre, se RT e' minore di Zo, l'onda riflessa e'
in opposizione di fase con quella incidente.

328
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

VB

VA

t
VC

VA

t
tp 2t p 3t p 4t p

figura 13.5.8

Si consideri ora il caso in cui l'impedenza del generatore che alimenta la linea sia pari a
Zo. Con riferimento alla figura 13.5.5, all'istante t = 0 la tensione disponibile al punto B sara'
pari a Va/2. Dopo un tempo tp l'onda giunge al punto C e se la linea e' aperta l'onda riflessa
sara' in fase con quella incidente facendo si' che:

Va Va
Vc Va
2 2

L'onda riflessa d'altra parte si propaga verso l'estremita' trasmittente (punto B) e


pertanto al tempo t = 2tp anche la tensione VB diventa uguale a VA. Poiche' l'impedenza del
generatore e' pari a Zo, la linea vede un carico adattato, non si ha nessuna ulteriore riflessione
e le condizioni di regime sono a questo punto raggiunte. L'andamento della tensione alle due
estremita' della linea e' riportato in figura 13.5.8.
Una situazione analoga si verifica quando la linea e' cortocircuitata. Unica differenza
risiede nel fatto che l'onda riflessa e' in questo caso in opposizione di fase con quella
incidente. Le relative forme d'onda (evidentemente in forma idealizzata, come in tutti i casi
precedenti) sono riportate in figura 13.5.9.

VB

VA

t
VC

VA

t
tp 2t p 3t p 4t p

figura 13.5.9

Quando il generatore non e' adattato la situazione si complica a causa delle riflessioni
multiple e del valore del coefficiente di riflessione, compreso tra + 1 e - 1. Ci si rende quindi
conto che in una situazione generale, in cui ne' il generatore, ne' il carico sono adattati e in cui
e' necessario tener conto che la linea reale non e' priva di perdite e di conseguenza introduce
un'attenuazione del segnale, l'analisi del comportamento diventa estremamente difficoltosa. A

329
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

queste considerazioni si aggiunge poi il fatto che l'impedenza interna del generatore e il carico
di terminazione non sono affatto costanti, dato che il generatore e' l'uscita di una porta logica e
pertanto presenta impedenze diverse nello stato ON e in quello OFF, mentre il carico di
terminazione altro non e' se non l'ingresso di un’ atra logica, che molto spesso presenta
caratteristiche non lineari. In fig. 13.5.10 e' riportato un procedimento grafico utilizzabile per
ricavare la tensione Vout immediatamente disponibile dopo la commutazione per diverse
impedenze caratteristiche della linea di trasmissione.

mA
caratteristica di caratteristica di uscita
ingresso 30 allo stato basso

20

caratteristica di uscita
10 allo stato alto

volt
-1 2 3 4 5 6

Z = 300
0
-20

-30 Z 0 = 100

-40 Z 0 = 50

Z = 25
-50 0

figura 13.5.10

Anche nella commutazione dallo stato alto allo stato basso si hanno fenomeni
analoghi.Se l'impedenza della linea di trasmissione e' bassa puo' accadere che il transistore
d'uscita dell'elemento che pilota la linea non sia in grado di saturarsi immediatamente.
In definitiva, quando la porta all'ingresso della linea cambia stato, viene trasmesso un
fronte d'onda fino alla porta ricevente, che viene raggiunta dopo un certo tempo di transito T.
Se, come avviene normalmente, l'impedenza di ingresso della porta non coincide con quella
caratteristica della linea, si avra' una riflessione del segnale, che verra' poi ulteriormente
riflesso al lato trasmittente qualora anche in tale punto vi fosse disadattamento di impedenza.

(a) (b) (c) (d) (e)


5

0 2 4 0 2 4 0 2 4 0 2 4 6 0 2
1 3 5 1 3 5 1 3 5 1 3 5 7 1 3

figura 13.5.11

A causa delle riflessioni multiple il fronte del segnale logico verra' pertanto degradato e
le variazioni del segnale si avranno in istanti spaziati di 2T, come illustrato in fig. 13.5.11, in
cui sono riportate alcune possibili forme d'onda (transizione alto–basso).

330
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

In particolare per il ricevitore, che vede il nuovo livello logico dopo un numero dispari
di intervalli T, nel transitorio il segnale puo' permanere in una fascia di incertezza (caso b, con
riferimento ai livelli TTL) o addirittura dar luogo a una sottoelongazione che potrebbe
danneggiare lo stadio di ingresso della porta ricevente se questo non fosse adeguatamente
protetto.

volt

4.0

B
3.0

2.0 livello alto

1.0

100 80 60 40 20 A 20 40 60 80 100
mA

10 ingressi
-1.0
1 ingresso livello basso

-2.0

figura 13.5.12

Un metodo grafico approssimato che permette di ricavare le forme d'onda prodotte da


circuiti digitali veloci che pilotano linee di trasmissione e' quello che utilizza il cosiddetto
diagramma di Bergeron. E' questo un grafico tensione - corrente su cui sono riportate con-
temporaneamente le caratteristiche di ingresso e di uscita delle porte, con la convenzione che
la corrente fornita dall'ingresso ha lo stesso segno di quella assorbita dall'uscita.
In fig. 13.5.12 e' riportato un esempio di diagramma di Bergeron. I punti A e B in cui le
curve di ingresso e di uscita si intersecano sono evidentemente rappresentativi delle due
condizioni in cui puo' operare una porta che ne pilota un'altra.
Normalmente le forme d'onda di interesse sono quelle che si verificano ai due estremi
della linea, cioe' all'uscita della porta pilota e all'ingresso di quella ricevente e, come si e’ gia’
detto, consistono in una serie di gradini di varia ampiezza la cui durata e' due volte il tempo di
ritardo di propagazione della linea. Tali forme d'onda si ricavano tracciando una successione
di rette di carico sul diagramma di Bergeron, con una pendenza determinata dall'impedenza
della linea di trasmissione e facendo partire ciascuna linea dal precedente punto di lavoro,
come illustrato nella fig. 13.5.13.
A lato del diagramma sono riportate le forme d'onda al lato trasmettitore (tratto
continuo) e al lato ricevitore (a tratteggio). E' abbastanza evidente che le forme d'onda che
cosi' si ricavano sono solo una grossolana approssimazione della realta', comunque sufficiente
a fornire le informazioni di interesse.
Le forme d'onda che si hanno in corrispondenza al ricevitore sono di solito accettabili
purche' si prendano provvedimenti adeguati in presenza di "undershoot" (ad esempio con
diodi di tosatura) per evitare il danneggiamento delle porte.
Possono viceversa sorgere dei problemi quando l'uscita del trasmettitore viene usata
anche localmente oltre che per pilotare la linea. Il segnale potrebbe infatti permanere per
tempi non trascurabili in zona di incertezza, rallentando notevolmente il circuito o addirittura
portando ad un'errata evoluzione nel caso di circuiti sequenziali.

331
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

A A
3
50

B 100 B
1
E E
D D
100 80 60 20 40 80 100
C
C
-1

0 T 2T 3T 4T
-2

figura 13.5.13

Tale inconveniente puo' essere evitato o prelevando il segnale a monte del trasmettitore
o terminando la linea con un opportuno valore resistivo in modo da realizzare l'adattamento di
impedenza.
In definitiva si puo' affermare che:

1) Collegamenti effettuati con singolo filo non debbono superare la sessantina di


centimetri.
2) Per distanze di collegamento superiori e' indispensabile usare la coppia ritorta o
il cavo coassiale. Per la miglior protezione contro la diafonia e' opportuno che
il cavo abbia impedenza caratteristica dell'ordine dei 100 ohm.

Per aumentare il margine di rumore si possono usare resistenze di "pull-up" al lato


ricevitore; inoltre per evitare eccessive riflessioni e' bene che la linea sia terminata sulla sua
impedenza caratteristica.

Vcc Vcc

RA
RA= R B = 2 Z 0

R0 = Z0 R0 RB

figura 13.5.14

In fig. 13.5.14 sono riportati due possibili arrangiamenti circuitali, di cui il secondo
permette di diminuire la corrente assorbita dallo stadio pilota allo stato basso.

332
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

13.5.3) Disaccoppiamento dell'alimentazione e massa.


In presenza di fronti rapidi e soprattutto quando la famiglia da' luogo ad un rumore
autogenerato, come nel caso della TTL, e' necessario disaccoppiare attentamente le alimen-
tazioni. Per inquadrare il problema nelle sue dimensioni si tenga presente che durante la
commutazione una porta TTL standard assorbe impulsivamente dall'alimentazione una cor-
rente di 3 mA per 15 nsec., mentre una TTL Schottky assorbe 13 mA per 5 nsec.
Nella pratica un buon disaccoppiamento si ottiene inserendo un condensatore da 0.1
microfarad, di buone caratteristiche a radiofrequenza, ogni 5-10 chips.
E' bene inoltre includere su ogni scheda un condensatore elettrolitico al tantalio da 2-20
microfarad. Le tracce stampate devono poi essere il piu' possibile larghe ed eventualmente
anche multiple allo scopo di diminuirne l'impedenza.
Un buon sistema di massa e' poi essenziale per un corretto funzionamento. Esso puo'
essere costituito da una pista di elevata larghezza sul circuito stampato o meglio ancora
destinando a piano di massa un'intera faccia dello stampato.
Operando in tal modo si realizza poi l'ulteriore vantaggio che i collegamenti possono
essere effettuati con linee di impedenza costante e ben conosciuta.
In fig. 13.5.15 e' riportato un diagramma dell'impedenza di "strip lines" in funzione della
larghezza della pista e dello spessore e della costante dielettrica del supporto, quando una
delle facce sia esclusivamente destinata a piano di terra.

Z
0
ohm
Impedenza caratteristica di strip lines

w
100
h
r

10

r=6
r=4
r = 2,5

1
0.1 1 10 100 w/h

figura 13.5.15

13.5.4) Ingressi e gate non usati.


Sebbene si possa affermare che un ingresso non connesso di un elemento TTL si
comporti come se fosse collegato al livello logico alto, in pratica esso si trova in uno stato
incerto in quanto e' suscettibile di cambiare stato con solo 100 mV di rumore, nei confronti del
quale si comporta da antenna. Tale osservazione e' evidentemente valida anche per tutte le

333
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

altre famiglie logiche e la situazione si rivela tanto piu' critica quanto maggiore e' l'impedenza
di ingresso dell'elemento che si considera.
Pertanto un ingresso, in particolare quando il relativo dispositivo viene impiegato in
circuiti sequenziali, non va mai lasciato scollegato; per minimizzare le conseguenze del ru-
more si puo' intraprendere una delle seguenti azioni:

1) Collegare l'ingresso in questione ad un altro ingresso usato della stessa porta.


Per quanto riguarda la logica TTL c'e' da osservare che e' necessario non
superare il fan-out del circuito pilotante allo stato alto, mentre non si hanno
conseguenze per il fan-out allo stato basso in quanto tutti gli ingressi di una
porta ricevono corrente dallo stesso resistore.
2) Collegare l'ingresso a massa in tutti i casi in cui cio' sia possibile da un punto di
vista logico, come ad esempio nei casi di porte logiche NOR o OR.
3) Collegare l'ingresso alla tensione di alimentazione. Per i TTL tuttavia la
tensione di ingresso non deve superare mai i 5.5 volt; in caso contrario si
potrebbe avere il breakdown dell'ingresso e non essendo la corrente limitata da
alcun elemento circuitale, l'integrato potrebbe danneggiarsi permanentemente.
4) Collegare l'ingresso alla tensione di alimentazione tramite una resistenza di
circa 1 kohm che ha lo scopo di limitare l'eventuale corrente di breakdown a
valori di sicurezza. La stessa resistenza puo' essere utilizzata per fissare al
livello alto fino a 50 ingressi.
5) Collegare l'ingresso all'uscita di un gate non usato i cui ingressi siano stati
connessi a massa.
6) Utilizzare una sorgente di tensione separata, di valore compreso, per i
dispositivi TTL, tra 2.4 e 5.5 volt.

Anche per quanto riguarda i gate non usati e' bene non lasciare i loro ingressi volanti. In
particolare per quanto riguarda i dispositivi TTL e' opportuno che la loro uscita sia portata al
livello logico alto in modo da minimizzare la dissipazione di potenza.

13.5.5) Aumento del fan - out.


Per aumentare il fan - out si possono collegare assieme gli ingressi e le uscite dei gate
dello stesso involucro. E' tuttavia opportuno limitare il numero di elementi in parallelo in
modo da evitare forti transitori di corrente dovuti ai differenti tempi di commutazione dei
singoli gate, che, pur non essendo nocivi per i dispositivi, danno origine ad un certo numero di
problemi indotti.

13.6) La famiglia ECL.


La logica ECL, chiamata talvolta anche CML (current mode logic - logica a com-
mutazione di corrente) differisce strutturalmente in modo abbastanza profondo dalle logiche
saturate ed e' piu' vicina per configurazione circuitale e funzionamento ad un circuito lineare; i
transistori operano solo in regione attiva e l'escursione tra i due livelli logici e' molto ridotta.
In fig. 13.6.1 e' riportato lo schema tipico di una porta ECL OR/NOR a quattro ingressi.
Quando tutti gli ingressi della porta sono a livello basso (minore di -1.6 volt), tutti i transistori
di ingresso sono interdetti poiche' gli emettitori, tutti connessi tra di loro, si trovano ad una
tensione di circa 0.7 volt inferiore a quella di riferimento Vbb e quindi a circa - 1.8 / - 1.9 volt.

334
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

La base del transistore di uscita NOR e' quindi a potenziale di massa e l'uscita a circa - 0.75
volt.

Vcc

290 300
1.5 k
300
OR
NOR

Vbb
1.5 k
-1.175V
R 2k
1.18 k 2.3 k
Vee
A B C D

figura 13.6.1

Se invece uno o piu' ingressi della porta sono portati a livello alto (- 0.75 volt) sul
resistore di carico di 290 ohm si ha una caduta di circa 0.9 volt e l'uscita passa a - 1.65 volt.
L'uscita pertanto e' alta se e solo se tutti gli ingressi sono a livello basso; la funzione logica
realizzata e' quindi la NOR. Poiche' lo stadio di ingresso e' in pratica un amplificatore
differenziale, dal collettore del secondo transistore puo' essere prelevata una tensione in
opposizione di fase, realizzando pertanto anche la funzione logica OR.
La tensione di riferimento Vbb determina il livello della commutazione. Essa viene
scelta pari a - 1.175 volt in modo da ottenere un'immunita' al rumore simmetrica nei due stati.
I due diodi inseriti nel circuito di base hanno lo scopo di compensare le variazioni della VBE
con la temperatura.
Le uscite ad inseguitore di emettitore, oltre a fornire una bassa impedenza di uscita,
hanno il compito di traslare le cadute di tensione ai capi dei due resistori di collettore in livelli
ECL standard.
E' bene rilevare ancora una volta che la logica ECL e' una logica non saturata. Si noti
che in prima approssimazione la corrente circolante su RE e' data da:

Vee 1.5
IE
RE

Per evitare che i transistori saturino, valutando in circa 0.2 - 0.3 volt la tensione VCES di
saturazione, dovra' essere, in prima approssimazione:

RC.IE < 1.5 - 0.3 = 1.2

dove con RC si e' indicata la resistenza di collettore della coppia differenziale e si e' valutata in
- 1.5 volt la tensione media di emettitore. Tali condizioni sono senza dubbio rispettate nel
circuito ECL illustrato in fig. 13.6.1.

335
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

13.6.1) Caratteristica di ingresso.


Poiche' lo stadio di ingresso di una porta ECL e' in pratica un amplificatore diffe-
renziale, ne presenta gli stessi vantaggi. L'impedenza di ingresso e' di circa 100 kohm ed e'
pertanto molto piu' elevata di quella di qualsiasi altra logica bipolare. La caratteristica di
ingresso e' riportata in fig. 13.6.2. Da tale caratteristica si vede che quando la tensione di
ingresso sale al di sopra del livello massimo dello stato alto la corrente di ingresso comincia a
crescere. E' questo l'inizio di una lieve saturazione, che tuttavia gioca un ruolo positivo
tendendo a smorzare eventuali oscillazioni del segnale. Infine poiche' il segnale di ingresso e'
applicato ad uno stadio differenziale, si ha una discreta reiezione di modo comune, in
particolare per quanto riguarda le variazioni della tensione di alimentazione.

mA
0.2

fan - out = 25

0.1

0
V ee = 5.25 V
Ta = 25 o C
volt
-1.5 -1 -0.5
-1.175 -0.7
V
OH max

figura 13.6.2

13.6.2) Caratteristica di trasferimento e immunita' al rumore.


Dalla caratteristica di ingresso riportata in fig. 13.6.3 risulta che l'immunita' al rumore e'
di circa 200 mV. Il circuito di compensazione della temperature mantiene tale immunita'
costante al variare della temperatura e della tensione di alimentazione.

Vi
-2.00 -1.50 -1.00 - 0.50 0.00
0.00 volt

V V
IL max IH min

- 0.50
OR
- 0.85
V
OH min
Vu -1.00
V
bb

V
OL max
-1.50 -1.525

NOR
-2.00
volt -1.375 -1.025

figura 13.6.3

E' inoltre necessario far notare che il circuito puo' funzionare su una vasta gamma di
tensioni poiche' Vbb e la tensione di uscita a livello basso si adeguano automaticamente alle
stesse variazioni.

336
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

13.6.3) Attitudine al pilotaggio di linee.


La porta ECL si presta particolarmente bene ad essere terminata con un resistore di
valore pari all'impedenza caratteristica di un cavo coassiale (50 ohm). In alcuni casi tale re-
sistenza dev'essere connessa tra uscita e un'apposita "tensione di terminazione" di -2 volt, in
altri casi puo' essere collegata direttamente a massa.
Inoltre gli elementi ECL, a causa della loro struttura differenziale, si prestano a pilotare
linee di trasmissione bilanciate. Si ottengono in tal modo un'immunita' al rumore superiore al
volt e la possibilita' di pilotare linee molto lunghe. La trasmissione puo' venir fatta con
qualsiasi porta, anche se, nelle applicazioni piu' critiche, e' conveniente far ricorso ad appositi
"line drivers".
Per la ricezione sono invece disponibili delle particolari porte ECL in cui sono ac-
cessibili ambedue gli ingressi dell'amplificatore differenziale (fig. 13.6.4).

V cc

300 300

R0 1.3 k 1.5 k

V ee

figura 13.6.4

13.6.4) Comportamento dinamico.


I ritardi degli elementi ECL sono i piu' piccoli tra quelli di qualsiasi altra famiglia
logica, mentre il prodotto velocita' potenza e' uno dei migliori. Essi non autogenerano rumore
in quanto l'assorbimento di corrente dall'alimentazione e' praticamente costante e non varia
con la frequenza.
I tempi di salita e di discesa sono invece relativamente lunghi e, considerata la modesta
escursione del segnale, lo "slew rate" e' addirittura minore di quello della famiglia TTL.
Tenendo poi presente che gli ingressi richiedono correnti molto modeste, si puo' affermare che
per questa famiglia il rumore di accoppiamento e' minimo.

13.6.5) Sottofamiglie ECL.


Esistono diverse sottofamiglie di elementi ECL, che grosso modo possono essere
classificate come segue:

1) 8 nsec. ECL (tpd = 8 nsec, max 30 MHz)


2) 4 nsec. ECL (tpd = 4 nsec, max 75 MHz)
3) 2 nsec. ECL (tpd = 2 nsec, max 125 MHz)
4) 1 nsec. ECL (tpd = 1 nsec, max 400 MHz)

337
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Di queste sottofamiglie quella da 2 nsec. e' la piu' diffusa in quanto presente un ottimo
compromesso tra velocita', dissipazione di potenza e facilita' d'uso.
Gli schemi base delle due sottofamiglie piu' veloci sono simili tra loro e sono riportati in
fig. 13.6.5.

Vcc1 Vcc2

A C 220 245
B D
C
907

A
D
B

50 k 50 k 779 6.1 k

4.9 k

figura 13.6.5

Per la famiglia da 1 nsec. i valori resistivi sono dimezzati, eccetto che per le resistenze
di "pull down", connesse tra ingresso e massa, del valore di 50 kohm. Tali resistenze
permettono di lasciar sconnessi gli ingressi non usati, senza avere in pratica problemi di
captazione di rumore. Rispetto alle due sottofamiglie piu' lente i transistori di uscita sono privi
di resistenza di emettitore e sono alimentati separatamente dal resto del circuito. Tale
arrangiamento circuitale permette di adattare facilmente le linee di collegamento, e ogni uscita
puo' fornire fino a 25 mA.
La separazione dei terminali di alimentazione evita che gli impulsi presenti nella
corrente di uscita diano luogo a cadute induttive che interessino il circuito della porta.
Per le porte ECL veloci il cablaggio unifilare dev'essere limitato a linee inferiori ai 2.5
cm; in caso contrario le connessioni vanno eseguite con linee terminate in parallelo su 50
ohm. Si raccomanda inoltre l'uso di condensatori ceramici di disaccoppiamento ogni 5-10
chips.

13.6.6) Conclusioni sulla famiglia ECL.


L'alta velocita' degli elementi ECL e la struttura differenziale permettono la costruzione
di dispositivi estremamente veloci, quali, ad esempio, convertitori A/D ad alta velocita'. La
tecnologia impiegata si presta inoltre alla realizzazione di elementi LSI.
Quali inconvenienti e' necessario citare la ridotta immunita' al rumore e la difficile
interfacciabilita' con le altre famiglie logiche.
Riassuntivamente i vantaggi della famiglia ECL sono:

1) Elevata velocita'.
2) Bassa impedenza di uscita.
3) Notevole fan - out.
4) Bassissima generazione di rumore.
5) Esistenza di due uscite complementari.

338
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

6) Basso accoppiamento tra le linee di segnale.


7) Possibilita' di wired-or.
8) Elevata reiezione di modo comune.
9) Stabilita' delle caratteristiche al variare della temperatura.
10) Facile pilotaggio di linee.
11) Tecnologia impiegabile in realizzazioni MSI e LSI.

Quali svantaggi si possono citare:

1) Dissipazione di potenza non trascurabile.


2) Bassa immunita' al rumore.
3) Difficile interfacciamento con le altre famiglie logiche.
4) Aumento notevole dei tempi di propagazione in presenza di carichi
capacitivi.

Gli elementi ECL sono correntemente impiegati nella realizzazione di strumentazione,


quali contatori ad alta velocita', sistemi a sintesi di frequenza, ecc, nel campo del calcolo
automatico, per la realizzazione di unita' logico-aritmetiche, memorie ultraveloci, ecc., nei
sistemi di comunicazione e nella conversione A/D veloce.

13.7) I dispositivi MOS.


Praticamente assenti agli inizi della produzione dei circuiti integrati, i dispositivi MOS
(Metal Oxide Semiconductor) sono diventati via via una larga frazione della produzione totale
ed attualmente dominano nel campo dell'integrazione a larga scala, in particolare per quanto
riguarda memorie, microprocessori e circuiti "custom".
E' opportuno ricordare che, a differenza di un transistore a giunzione, che sfrutta le
correnti sia dei portatori maggioritari che minoritari, il MOS utilizza solo i portatori maggio-
ritari e per tale motivo viene spesso chiamato transistore unipolare. Esso ha una resistenza di
ingresso elevatissima, e' piu' semplice da fabbricare e richiede sulla superficie del "chip" di
silicio un'area notevolmente minore che non il transistore bipolare.
Allo stesso modo in cui esistono due tipi di transistore a giunzione, PNP e NPN, cosi'
esistono i MOS a canale N o NMOS e i MOS a canale P o PMOS. Inoltre esistono per ciascun
tipo due modi di funzionamento: il primo, detto "enhancement mode" o "modo a rinforzo"
presenta la caratteristica di mantenere il transistore interdetto fino a che non viene applicata
una sufficiente tensione tra gate e source, mentre il secondo detto "depletion mode" o "modo
a svuotamento" richiede un'opportuna polarizzazione non nulla per inibire la conduzione.
Inizialmente la maggior parte dei dispositivi MOS e’ stata realizzata in tecnologia
PMOS enhancement mode, malgrado che gli NMOS siano piu' veloci e di area minore, in
quanto la tecnologia NMOS era piu' difficile e costosa. Solo in tempi relativamente recenti,
con l'introduzione della tecnologia di impianto ionico, i dispositivi NMOS ed in particolare
quelli depletion mode sono diventati abbastanza comuni. In fig. 13.7.1 sono illustrate le forme
idealizzate e i simboli usati per i MOS a canale N e per quelli a canale P rispettivamente.

339
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

source gate drain source gate drain


metallo metallo
isolamento (SiO )
p 2 isolamento (SiO )
p 2
silicio n n
n p silicio

substrato

drain d drain d
gate substrato gate substrato
g
g
source s source s

figura 13.7.1

13.8) Logica MOS statica.


La forma piu' semplice di circuito logico MOS e' l'invertitore illustrato in fig. 13.8.1 (a).
Il circuito base e', come si vede, sostanzialmente simile a quello della logica RTL; nella
pratica tuttavia il resistore RL e' rimpiazzato da un secondo transistore opportunamente
polarizzato, che opera come un generatore di corrente. Il relativo circuito, in forma idealizzata
e' riportato in fig. 13.8.1 (b) e la motivazione per cui si ricorre a tale arrangiamento circuitale
risiede nel fatto che un MOS occupa sul chip molto meno spazio che non un resistore ed e'
piu' facile da realizzare.
In fig. 13.8.1 (c) e' riportata poi la tabella delle condizioni operative.

RL
d d Tl
- - -
VDD Vz Tr Vz
g g VGG
Vx s + Vx s VDD
+ +

(a) Vx Vz (b)

Vx < V t 0

Vx > Vt V

(c)

figura 13.8.1

Per un corretto funzionamento, cioe' per far si' che quando Tr e' in conduzione la
tensione di uscita sia sufficientemente bassa, in modo da non far passare in conduzione i
transistori di altre porte collegate, i due transistori Tr e TL hanno in conduzione un rapporto di

340
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

resistenza pari a 1:20. Di conseguenza Tr occupa sul chip un'area notevolmente maggiore che
non TL.
Molto spesso VDD e VGG sono connessi allo stesso terminale; in tal caso tuttavia
l'impedenza di uscita diventa molto elevata, la tensione di uscita a transistore interdetto e'
minore di VDD e le costanti di tempo dovute alle capacita' parassite diminuiscono di molto la
velocita' operativa.

- -
Vx VGG VDD Vz
Vy
+ +

Vx Vy Vz X Y Z

VL VL VH 0 0 1
VL VH VL 0 1 0

VH VL VL 1 0 0

VH VH VL 1 1 0

VH = 0 V VL = VDD Z = (X+Y) = X . Y

figura 13.8.2

E' facile, a partire dalla struttura dell'invertitore, ottenere porte logiche NAND e NOR,
connettendo in serie o in parallelo altri transistori MOS. In fig. 13.8.2 e' riportato il circuito
della porta logica che in logica positiva realizza la funzione NOR, mentre in fig. 13.8.3 vi e' il
circuito della porta logica NAND.

Vz
V GG VDD
Vx Vy

Vx Vy Vz
X Y Z
VL VL VH 0 0 1
VL VH VH 0 1 1

VH VL VH 1 0 1
VH VH VL 1 1 0

VH = 0 V V L = VDD Z = X.Y= X+ Y

figura 13.8.3

E' opportuno far rilevare che la struttura di tali porte e' molto simile a quella della
tecnologia RTL; non si hanno tuttavia problemi di fan-out, in quanto l'impedenza di ingresso

341
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

di un transistore MOS e' talmente elevata da poter essere considerata, almeno in prima ap-
prossimazione, infinita.

13.9) Logica MOS dinamica.


Malgrado che la dissipazione di potenza dei dispositivi MOS sia notevolmente inferiore
a quella dei dispositivi bipolari, vi e' una notevole varieta' di applicazioni in cui una
dissipazione ancora minore sarebbe auspicabile.
Per ottenere tale obiettivo sono percorribili due strade; la prima conduce alla realiz-
zazione di logiche CMOS, in cui sono usati contemporaneamente transistori PMOS e NMOS
e di cui si parlera' in seguito; l'altra via riduce la potenza dissipata applicando l'alimentazione
al circuito solo a intervalli di tempo, in modo che potenza venga dissipata solo quando e'
strettamente necessario. Un tal modo di procedere e' possibile in quanto si puo' memorizzare
l'informazione nella capacita' parassita gate-source durante gli intervalli in cui l'alimentazione
viene a mancare. Operando tuttavia in questa maniera l'informazione e' disponibile in uscita
solo quando e' presente l'alimentazione; il dato logico e' cioe' sincronizzato con
l'alimentazione.
Circuiti del tipo appena descritto prendono il nome di circuiti MOS dinamici, in
contrapposizione a quelli descritti al paragrafo precedente, detti statici e nei quali
l'informazione di uscita e' sempre disponibile.

VDD VDD
1
1 2

t
T T5
2
2
A
T3 T6 t
T1 T4
Vx C4

figura 13.9.1

Lo schema di principio della piu' semplice logica MOS dinamica, detta a due fasi, e'
riportato in fig. 13.9.1. In essa sono rappresentati due invertitori connessi in cascata, che
tuttavia devono venir considerati come un unico stadio della logica MOS dinamica.
Si noti che rispetto alla logica MOS statica si possono rilevare le seguenti differenze:

1) I gates dei transistori di carico T2 e T5 non sono connessi direttamente a


VGG, ma a e 2 e pertanto conducono solo quando tali segnali
vengono posti uguali a VGG.

2) L'uscita di ogni invertitore non e' connessa direttamente all'ingresso


dell'invertitore successivo, ma attraverso un transistore di

342
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

accoppiamento (T3 e T6). Anche i transistori di accoppiamento sono


connessi a 1 e 2 e conducono pertanto solo quando la tensione sul
loro gate e' pari a VGG.

VDD VDD

T2 T3 T2 T3

T1 T4 T1 T4
Vx Vx

(a)
(b)

figura 13.9.2

Quando 1 e 2 sono entrambi a valore nullo nel circuito non circola corrente. Non si ha
quindi dissipazione e la situazione illustrata e' quella di fig. 13.9.2 (a). Quando il valore di 1
passa a VGG i transistori T2 e T3 passano in conduzione; il segnale al drain di T1 assumera'
allora il valore determinato dallo stato logico dell'ingresso e tale valore verra' trasferito
attraverso T3 alla capacita C4 associata all'ingresso di T4, dove verra' memorizzato e si
manterra' anche dopo il ritorno di 1 a zero. Infine quando 2 diventa uguale a VGG
l'informazione viene trasferita in uscita. Il principale vantaggio di un tal modo di operare
consiste nel fatto che si ha dissipazione solo durante gli intervalli di tempo durante i quali 1 e
2 sono diversi da zero e solo durante tali intervalli i transistori T2 e T4 sono in conduzione. I
due segnali di clock possono esser distanziati anche notevolmente tra di loro e pertanto la
dissipazione diventa una frazione abbastanza piccola di quella che si avrebbe per lo stesso
circuito realizzato in logica MOS statica.
Per il tempo rimanente l'informazione e' immagazzinata come carica nelle capacita' di
ingresso e a causa delle resistenze parassite decade via via che passa il tempo.
La costante di tempo di scarica determina evidentemente il massimo intervallo tra gli
impulsi di clock. La massima frequenza di clock e' invece determinata dal tempo necessario a
caricare la capacita' ad un determinato livello, in quanto, una volta che sia assegnato il valore
delle tensioni 1 e 2, il semiperiodo attivo di tali segnali non puo' essere inferiore al tempo di
carica necessario.
Per quanto riguarda l'ingresso esso deve assumere il valore logico voluto solo durante
1, mentre per il resto del tempo il suo valore non ha alcuna importanza.
2 ed e' pertanto ritardata di un tempo pari a un
ciclo di clock. Da questo punto di vista il circuito preso in esame puo' anche essere
considerato un registro a scorrimento in quanto trasferisce l'informazione di ingresso da stadio
a stadio per ogni impulso di clock.

13.9.1) MOS dinamici a rapporto minimo.


Nei circuiti fino a questo momento considerati esiste un'esigenza comune da rispettare;
quella cioe' che la resistenza di conduzione dei MOS attivi sia notevolmente inferiore di
quella dei MOS di carico, in modo da avere una tensione di uscita sufficientemente prossima

343
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

allo zero nello stato basso. Tale esigenza obbliga a costruire sullo stesso chip transistori di
dimensioni notevolmente diverse tra di loro.
Esiste tuttavia una variante della logica MOS dinamica a due fasi che permette di
realizzare tutti i transistori con la stessa area, aumentando pertanto la densita' di integrazione e
permettendo di ottenere velocita' di funzionamento piu' elevate. Lo schema di principio di
questa realizzazione circuitale e' riportato in fig. 13.9.3.

1 2 1

VDD

T1 T5 T9

C1 C3 C5

2 1 2

T2 T6 T10

T3 T7 T11
T4 C2 C4 T12 C6
T8
Ingresso

figura 13.9.3

Quando e' applicato 1, conduce T1 e la capacita' C1 si carica. Immediatamente dopo 1


viene tolto e viene applicato 2. In tal caso passano in conduzione T2 e T3 che fanno si' che su
C2 venga trasferito il valore determinato dallo stato di T4. E' evidente che in questo caso non
vi e' alcuna esigenza di mantenere bassa la resistenza di conduzione di T4, in quanto il suo
compito e' unicamente quello di scaricare o meno a massa la capacita' C1. Nasce invece
l'esigenza di rendere C1 notevolmente maggiore di C2 in quanto durante l'intervallo 2 queste
due capacita' si suddividono la carica. Sempre durante l'intervallo 2 la capacita' C3 si carica
alla tensione VDD. Successivamente viene azzerato 2 e si ripresenta 1 rendendo possibile il
trasferimento dell'informazione allo stadio successivo e cosi' via. Questo tipo di circuito
permette di eliminare completamente la linea VDD sostituendola con i segnali di clock, come
illustrato in fig. 13.9.4.

1 2 1

T1 T5 T9

C1 C3 C5

2 1 2

T2 T6 T10

T3 T7 T11
C2 C4 T12 C6
T4 T8
Ingresso

figura 13.9.4

344
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

13.9.2) MOS dinamici a quattro fasi.


Esistono circuiti MOS dinamici a quattro fasi, sviluppo di quelli a due fasi, che
permettono di ottenere dimensioni minime, maggior velocita' operativa e minore dissipazione.
La sola corrente necessaria al funzionamento e' quella che serve a caricare e scaricare le
capacita' nodali e viene prelevata direttamente dai segnali di clock.

1 3 1 3 1 3

T T T T T T
11 14 21 24 31 34

2 T 4 T 2 T 4 T 2 T 4 T
12 15 22 25 32 35
N1 N2 N3 N4 N5

T C T C 21 T C 22 T C 31 T C T
13 12 16 23 26 33 36
Ingresso 32

1 3 1 3 1 3

bit 1 bit 2 bit 3

figura 13.9.5

Per illustrarne il funzionamento si fara' riferimento al registro a scorrimento di fig.


13.9.5, mentre in fig. 13.9.6 sono riportate le relative forme d'onda.

ingresso

figura 13.9.6

Negli intervalli 1 e 2 i transistori T11 e T12 passano in conduzione, mentre T13


conduce o meno in funzione della tensione di ingresso. Comunque sia, considerate le
resistenze di conduzione offerete dai vari MOS, la capacita' C12 si carica a una tensione
negativa. Alla fine di 1 T12 rimane in conduzione per effetto di 2 e se T13 e' conduttore la
capacita' C12 si scarica a massa. Se invece la tensione di ingresso e' nulla, T13 rimane
interdetto e C12 mantiene la sua carica negativa. Con un breve ritardo rispetto alla fine di 2
vengono applicati gli impulsi 3 e 4, il cui effetto e' quello di accumulare su C21 una carica

345
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

negativa. Alla fine di 3 l'informazione presente su C12 viene trasferita invertita su C21. Dopo
un ciclo completo di clock pertanto l'informazione e' stata trasferita dall'ingresso all'uscita del
primo stadio. Ad ogni ulteriore ciclo di clock l'informazione viene spostata attraverso gli stadi
e compare all'uscita con un ritardo in periodi di clock pari al numero degli stadi del registro.
L'informazione di ingresso viene letta durante il periodo 2, quella di uscita e' disponibile
dalla fine di 3 all'inizio dell' impulso 3 successivo.

13.10) La famiglia CMOS.


La famiglia CMOS (Complementary Metal Oxide Silicon), presente sul mercato gia' da
molti anni, ha rispetto ad altre famiglie logiche alcune proprieta' del tutto insolite. Anzitutto i
suoi ingressi sono ad elevatissima impedenza, tali che dal punto di vista puramente ohmico
possono essere considerati dei circuiti aperti. In condizioni statiche poi il loro consumo e'
praticamente nullo, non essendoci alcuna circolazione di corrente. Inoltre la tensione di
alimentazione puo' essere liberamente scelta in un campo che va da 3 a 15 volt e non richiede
affatto di essere stabilizzata e ben filtrata. In fig. 13.10.1 e' riportato lo schema base della
famiglia, rappresentante un circuito invertitore. Esso consiste in due transistori MOS,
ambedue a rinforzo, di cui il superiore e' a canale P, l'inferiore a canale N.

VDD
s

g Vx Vz X Z
d
d
0 VDD 0 1
g
s Vz
Vx VDD 0 1 0

figura 13.10.1

Per non ingenerare confusione non viene usata la terminologia usuale per i circuiti
MOS, ma si indica di solito con il simbolo di massa il "source" del transistore inferiore e con
VCC il "source" del transistore superiore.
Il funzionamento del circuito e' riassunto nella tabella di fig. 13.10.1 ed e' evidente.
Quando la tensione di ingresso Vx e' nulla, il MOS a canale N e' interdetto mentre quello a
canale P e' conduttore, essendo la sua tensione "gate-source" pari a VCC. La tensione di uscita
e' quindi pari a quella di alimentazione. Quando invece la Vx diviene pari a VCC, il transistore
a canale P si interdice, mentre passa in conduzione quello a canale N.; la tensione di uscita e'
quindi pari a zero.
Si vede che in ambedue gli stati uno dei due MOS e' interdetto; non vi e' pertanto
circolazione di corrente se si trascura la debolissima corrente di perdita dei MOS. Pertanto i
livelli logici sono VCC e 0 (corrispondenti alle costanti logiche 1 e 0 in logica positiva) poiche'
in un MOS conduttore, in cui pero' non scorra corrente, non si ha caduta di tensione. Tenendo
poi presente che l'impedenza di ingresso di un MOS e' elevatissima (> 1012 ohm + 5
picofarad) e che il carico di ciascun gate e' formato dagli ingressi dei gates a valle, i livelli
logici si possono ritenere a buona ragione uguali alla tensione di alimentazione e a zero.

346
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Durante la commutazione invece vi e' un brevissimo istante in cui ambedue i transistori


possono risultare conduttori. La durata di questo intervallo dipende dai tempi di salita e di
discesa dei dispositivi e dalla tensione di alimentazione. Considerando che il carico di ciascun
MOS e' prevalentemente capacitivo e' allora opportuno esaminare come il tempo di salita e di
discesa siano influenzati dalla tensione di alimentazione e dalla capacita' di carico.
In fig. 13.10.2 e' riportata una tipica caratteristica di un transistore MOS. E' interessante
notare che per ciascuna curva caratteristica e' possibile individuare due zone; una prima in cui
il transistore si comporta come una resistenza e una seconda in cui il comportamento e' simile
ad un generatore di corrente e nella quale la IDS e' indipendente da VDS.
Pilotando quindi con questi dispositivi un carico capacitivo, fino a che la VDS sara' tale
da mantenere il MOS nella zona "generatore", la tensione di uscita avra' un andamento a
rampa; passando poi alla zona "resistore" si avra' un andamento esponenziale.

I (ma)
DS
VGS= 15 V

45
IDS
VGS = 10 V d
30
g V DS
V GS= 5V VGS s
15

V (V)
DS
0 5 10 15

figura 13.10.2

Aumentando la tensione di alimentazione aumenta l'escursione di tensione del carico, e,


almeno per quanto riguarda la zona di carica a rampa, questo fatto tende a rallentare la logica.
Tuttavia l'aumento della tensione di alimentazione aumenta con legge quadratica la corrente
erogata nella zona "generatore" e la conduttanza nella zona "resistore". In conclusione quindi
si puo' affermare che al crescere della tensione di alimentazione diminuiscono i tempi di salita
e di discesa. E' questa una caratteristica esclusiva della logica CMOS.

13.10.1) Caratteristica di trasferimento.


Per tutti i transistori MOS esiste un valore di tensione VGS, detto tensione di soglia e di
solito indicato con VT, al di sotto del quale il transistore non conduce (si ricordi che si sta
parlando di transistori a rinforzo). Tale soglia di conduzione e' indipendente dalle tensioni di
alimentazione ed e' influenzata in pratica unicamente dalla tecnologia usata per la fabbrica-
zione del MOS stesso. Da valori elevati, superiori addirittura a 4 volt, tale soglia si e' andata
via via abbassando e con le tecnologie piu' moderne si situa oggi nell'intorno del volt.
Si assuma allora, per ragioni di semplicita' nell'esaminare la caratteristica di trasfe-
rimento dell'invertitore, che i due MOS complementari abbiano caratteristiche perfettamente
complementari e che la tensione di soglia sia pari a 2 volt.
Se la tensione di alimentazione e' inferiore alla tensione di soglia evidentemente nessuno
dei due transistori MOS puo' entrare in conduzione e il circuito non puo' funzionare.

347
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Se VCC uguaglia la tensione di soglia, l'andamento della caratteristica di trasferimento e'


quello riportato in fig. 13.10.3 (a). Si noti tuttavia che la caratteristica e' valida solo nel caso di
un carico capacitivo, in quanto i due transistori conducono solo per Vi = 0 e Vi = 2 volt. I tratti
orizzontali sono giustificati dal fatto che quando i transistori sono interdetti la tensione di
uscita della porta viene memorizzata nella capacita' di carico.

Vo Vo
(a) (b)
4 4

3
Vcc = VT 3
VT < V cc < 2 VT

2 2

1 1

Vi Vi
0 1 2 3 4 0 1 2 3 4

Vo Vo

4 (c) 4 (d)
3 3
Vcc = 2VT Vcc > 2VT
2 2

1 1

Vi Vi
0 1 2 3 4 0 1 2 3 4

figura 13.10.3

Se VCC rimane compresa tra una e due volte il valore della tensione di soglia (fig.
13.10.3 (b)), si ha via via una diminuzione del tratto in cui ambedue i transistori sono bloccati,
fino a che, in corrispondenza a VCC = 2 VT, il ciclo di isteresi scompare (fig. 13.10.3 (c)). In
tutti questi casi comunque non circola corrente durante la commutazione nei due transistori.
Quando invece VCC supera il valore 2 VT si crea una zona in cui ambedue i transistori
sono conduttori. Ogni volta in cui Vi passa in tale zona, si ha un impulso di corrente assorbita
dall'alimentazione, una caduta di tensione nei transistori e la caratteristica di funzionamento si
arrotonda come e' illustrato in fig. 13.10.3.(d). In tale figura con il tratto continuo sono
riportate le caratteristiche idealizzate di commutazione dei singoli MOS, mentre l'effettiva
caratteristica di trasferimento e' a tratteggio.

13.10.2) Comportamento al variare dell’ alimentazione.


Si e' gia' visto che per un dato ammontare del carico capacitivo l'aumento della tensione
di alimentazione fa aumentare la velocita' operativa; aumenta tuttavia anche la potenza
dissipata a causa della corrente che attraversa ambedue i transistori nel periodo in cui
conducono contemporaneamente.
In fig. 13.10.5 sono riportate le caratteristiche tipiche di una porta CMOS. E' bene
notare anzitutto la grandissima dinamica del parametro potenza dissipata che va da 10-8 W in
condizioni statiche a oltre 10 mW a 1 MHz. Notevole influenza sul consumo hanno sia la
capacita' di carico che la tensione di alimentazione. E' pertanto azzardato affermare che la
logica CMOS sia quella a consumo minimo, poiche' se tale affermazione e' senz'altro vera a
bassa frequenza, a frequenze superiori al MHz il consumo diventa paragonabile o addirittura
superiore a quello della logica TTL.

348
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

P ( W) t pHL
tot
t pHL
10 5 (nsec.)
60

Ta = 25 oC V = 15 V 10 V
DD 40
10 4

5V
20

3
10
0 5 10 VDD (V)

102
t pLH
t pHL
(nsec)
10 1
C L= 50 pF 100 VDD = 5V

V DD = 10 V
0
10 50
V DD = 15 V

10-1 f (Hz) 0 20 40 60 C L (pF)


3 4 5 6 7
10 10 10 10 10

figura 13.10.5

13.10.3) Immunita' al rumore.


I circuiti CMOS hanno un'elevata immunita' al rumore, il cui valore tipico e' 0.45 volte
la tensione di alimentazione VCC. Se invece di fare riferimento al margine di rumore reale si
esamina il margine di rumore apparente, calcolato sulla base dei valori minimi e massimi
garantiti, si ottiene comunque un margine di rumore di 1 volt, superiore senza dubbio a quello
di qualsiasi altra famiglia logica, eccezion fatta per la HTL. In fig. 13.10.6 sono riportati i
livelli garantiti di ingresso e di uscita in funzione della tensione di alimentazione e sono
evidenziati i margini di rumore a livello alto e a livello basso.

15 V

13.5

margine di rumore allo stato alto 12.5

V OH min

V IH min

4.05
margine di rumore allo stato basso
3.05
V IL max 2.5

1.45 1.5
0.45 V OL max

figura 13.10.6

349
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

13.10.4) Struttura delle porte logiche.


In fig. 13.10.7 sono riportati gli schemi circuitali delle porte CMOS NOR e NAND,
assieme alle loro tavole di funzionamento, che peraltro e' evidente.
E' opportuno far notare che per ciascun ingresso e' richiesto un invertitore, cioe' due transistori
MOS. E' questo un punto a sfavore della tecnologia CMOS che ne limita l'impiego nel settore
dell'integrazione a larga scala.

Vcc
Vx Vy Vz X Y Z
p
0 0 Vcc 0 0 1
p 0 Vcc 0 0 1 0
V Vy
Vcc 0 0 1 0 0
x
Vcc Vcc 0 1 1 0
n n
Vz

Z=X+Y

Vcc

p p Vx Vy Vz X Y Z

0 0 Vcc 0 0 1
n 0 Vcc Vcc 0 1 1
Vz Vcc 0 Vcc 1 0 1
Vx n Vcc Vcc 0 1 1 0
Vy

Z = X.Y

figura 13.10.7

13.10.5) Considerazioni generali sull'uso della famiglia CMOS.


A differenza delle famiglie bipolari, in cui gli ingressi non usati possono al limite anche
essere lasciati aperti, nella famiglia CMOS condizione essenziale per il funzionamento del
circuito e' non lasciare alcun ingresso volante. Gli ingressi infatti, a causa della loro
elevatissima impedenza, captano il rumore ambientale facendo commutare in modo in-
controllabile la porta.
Gli ingressi non usati vanno pertanto connessi di volta in volta a massa, alla tensione di
alimentazione o a un altro ingresso usato. La scelta non e' del tutto arbitraria, poiche' influenza
la capacita' della porta di pilotare carichi, soprattutto capacitivi. Ad esempio nella porta
NAND di fig. 13.10.7 un ingresso non usato collegato alla tensione di alimentazione mantiene
interdetto in permanenza uno dei due MOS in parallelo, mentre quando lo stesso ingresso
viene connesso in parallelo ad un altro ingresso usato, raddoppia la capacita' di pilotaggio
della porta allo stato alto. Analogamente nella porta NOR il collegamento in parallelo degli
ingressi aumenta la possibilita' di pilotaggio allo stato basso. Quando si voglia aumentare la
capacita' di pilotaggio in ambedue gli stati anziche' in uno solo, gli ingressi e le uscite di un
certo numero di porte possono essere posti in parallelo.

350
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Infine e' bene far notare che, poiche' la famiglia puo' funzionare su un ampio campo di
tensioni di alimentazione ed e' dotata di un'ottima immunita' al rumore, l'alimentazione stessa
non richiede ne' di essere stabilizzata, ne' eccessivamente filtrata. Utilizzando la famiglia
CMOS si semplifica quindi il progetto dell'alimentatore e se ne riduce il costo.

13.11) Interfacciamento delle famiglie logiche.


Al giorno d'oggi le famiglie logiche piu' diffuse sono senza dubbio la TTL e la CMOS;
si verifica tuttavia di frequente il caso in cui un sistema utilizzi contemporaneamente diverse
tecnologie, anche diverse dalla due citate. E' necessario in tal caso adattare le une alle altre
con opportuni circuiti di interfaccia. Nel seguito verranno presi in esame alcuni casi tipici, con
esclusione dei circuiti MOS, per i quali i problemi di interfacciamento risultano condizionati
dalla particolare tecnologia in gioco (a bassa o a alta soglia, a gate metallico o no, a canale N o
P, ecc.)

13.11.1) Interfaccia TTL - DTL.


Come e' stato in precedenza accennato, le famiglie TTL e DTL sono perfettamente
compatibili tra di loro essendo alimentate con la stessa tensione nominale ed essendo
ambedue famiglie che erogano corrente dall'ingresso quando quest'ultimo si trova allo stato
basso. Tuttavia, se nel pilotaggio da TTL a DTL non vi e' alcun problema, quando invece un
elemento DTL pilota un TTL il fan-out massimo e' 8 per le porte con resistenza di carico di 2
kohm, 4 per quelle la cui resistenza di carico e' 6 kohm.

13.11.2) Interfaccia TTL - ECL.


L'uso contemporaneo di elementi TTL e ECL nello stesso circuito offre al progettista un
notevole grado di liberta' ed apre l'intero spettro delle frequenze VHF ai vantaggi delle misure
digitali e dell'elaborazione del segnale con tecniche di commutazione.

+ 5.2 +- 5% volt

110
180
TTL ECL
750

figura 13.11.1

Il metodo piu' diretto per interfacciare tali elementi, utilizzabile tuttavia solo per piccoli
sistemi, utilizza un'unica alimentazione di 5 o 5.2 volt, come illustrato in fig. 13.11.1. E'
necessario in tal caso disaccoppiare molto accuratamente l'alimentazione, considerato che la
TTL e' una famiglia che autogenera rumore e che la ECL ha un margine di rumore piuttosto
piccolo. Tale disaccoppiamento puo' essere ottenuto utilizzando un condensatore da 100 na-
nofarad per ogni contenitore ECL. Nel caso tuttavia in cui il sistema comprenda piu' di una
diecina di chip e' opportuno mantenere separate le alimentazioni per i TTL e per gli ECL,
come mostrato in fig. 13.11.2.

351
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

+5V

TTL

470
ECL
750
- 5.2 V

figura 13.11.2

In entrambi i casi il resistore posto in serie all'uscita TTL limita l'escursione logica,
sposta il livello del segnale ed assicura un'impedenza sufficientemente bassa per garantire una
corretta trasmissione del segnale ed una buona immunita' rispetto al rumore ambiente. Nel
caso in cui la porta ECL sia gia' terminata a massa tramite una resistenza da 2 kohm, come
talvolta avviene, il resistore da 750 ohm va aumentato a 1200 ohm.

+ 5.2 V

TTL
ECL

2k 120 220

figura 13.11.3

Piu' complesso e' invece l'adattamento da segnale ECL a TTL. E' necessario in tal caso
usare un amplificatore di tensione in modo da portare l'escursione logica delle porte ECL
(tipicamente di 0.8 volt) ad almeno 2.5 volt. In fig. 13.11.3 e' illustrato un circuito di
interfaccia a singola alimentazione, mentre in fig. 13.11.4 si ha un circuito che usa alimenta-
zioni separate per la parte ECL e per quella TTL.

5V
330

TTL

ECL

2k 120
- 5.2 V

figura 13.11.4

352
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

13.11.3) Interfacciamento della famiglia CMOS con altre logiche.


Nella pratica molto frequentemente si rende necessario interfacciare elementi CMOS
con altri elementi logici.
I problemi da affrontare sono in tal caso, molto sinteticamente, i seguenti:

1) L'uscita di un elemento CMOS deve soddisfare le richieste di tensione e di


corrente di ingresso dell'elemento pilotato.
2) 2) Nel caso in cui la connessione da realizzare proceda da un qualsiasi
elemento logico verso un elemento CMOS, l'uscita dell'elemento da
interfacciare deve avere un'escursione del segnale logico la piu' vicina
possibile ai due estremi della tensione di alimentazione degli elementi CMOS.

Le specifiche pertanto sono relativamente semplici e non pongono di solito grossi


problemi circuitali. Il caso piu' comune e' l'interfacciamento TTL-CMOS e CMOS-TTL. Nel
primo caso non vi e' alcun particolare accorgimento da prendere, salvo l'aggiunta di un
eventuale resistore di "pull - up" in uscita dell'elemento TTL. Nel secondo caso invece non e'
in pratica possibile pilotare direttamente una porta TTL standard in quanto un'uscita CMOS,
anche se TTL compatibile, e' bene che non assorba o eroghi correnti superiori al milliampere.
Il problema puo' venir risolto o ricorrendo ad un apposito buffer (4009, 4010, 74C901
ecc.) o utilizzando come elemento di interfaccia una porta TTL low power, che ha correnti
notevolmente inferiori alla standard, pur essendo con essa compatibile, oppure usando una
porta CMOS NOR con due o meglio ancora quattro ingressi connessi in parallelo.

13.11.4) Pilotaggio di piccoli carichi.


Per collegare ad una porta componenti diversi di quelli della famiglia e' necessario tener
conto dei limiti di tensione e corrente che le varie porte hanno sia per quanto riguarda
l'ingresso che per quanto riguarda l'uscita.
La fig. 13.11.5 illustra le due possibilità che si hanno per alimentare un carico di-
rettamente dalla porta. Nel primo caso (a) il carico riceve potenza quando l'uscita della porta e'
bassa e la massima corrente che puo' essere controllata e' specificata dal costruttore, allo
stesso modo in cui e' specificata la massima tensione applicabile all'uscita della porta.

RL
I load
I sink

Vo Vo
RL

(a) (b)
figura 13.11.5

Nel secondo caso (b) il carico viene alimentato quando la porta si trova nello stato alto.
Il tipo di connessione assume particolare importanza quando, come nel caso delle porte
TTL, l'impedenza di uscita e' notevolmente diversa nei due stati. Nel caso (a) infatti, purche'

353
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Isink non superi i 16 mA, la porta lavora in condizioni nominali, mentre nel caso (b) ci si
trova in condizioni, che nell'ambito di una rete formata solo da elementi logici della famiglia,
non si verificano mai.
Poiche' l'impedenza di uscita nello stato alto (150 ohm) e' considerevolmente maggiore
di quella allo stato basso (12 ohm), la capacita' di pilotaggio risulta ridotta. In pratica il valore
minimo della resistenza di carico si aggira sui 180 ohm e con tale valore di carico l'uscita allo
stato alto risulta di poco piu' di 2 volt.
Un tipico carico che puo' essere pilotato direttamente dalla porta TTL e' il LED, secondo
lo schema della fig. 13.11.6.

Vcc = 5 V
V = 1.6 - 2.5 volt
L
IL
Rc I L < 16 mA

VL R c = (5 - 0.4 - VL )/IL

figura 13.11.6

Lo stesso carico evidentemente non puo' essere pilotato da una porta LPTTL o CMOS se
non con l'interposizione di un transistore.

13.11.5) Interconnessione con transistori.


Spesso e' necessario controllare tensioni o correnti piu' elevate di quelle sopportabili da
un circuito integrato; in queste condizioni si puo' usare un transistore di caratteristiche
adeguate. Con l'impiego di un transistore inoltre e' possibile ottenere livelli logici per i quali
non sia disponibile un'interfaccia standard.
Nel seguito saranno illustrati i problemi di interfacciamento di porte TTL con tran-
sistori; tuttavia i concetti esposti valgono qualsiasi sia il tipo di interfacciamento che si vuole
realizzare.
Il circuito di fig. 13.11.7 e' il piu' efficiente, ma ha lo svantaggio di richiedere una porta
con uscita a collettore aperto.

Vcc

360 Ib

I b > 10 mA

figura 13.11.7

Gli altri due, riportati in fig. 13.11.8, che si usano con stadi di uscita a "totem - pole",
limitano la corrente di uscita della porta con un resistore in serie alla base.

354
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Vcc

360
560 330

1k

I b> 3 mA I b > 5 mA

figura 13.11.8

Il circuito della fig. 13.11.8 (b) aumenta la capacita' di pilotaggio della porta pilota allo
stato alto con un resistore esterno di "pull-up". La corrente che scorre su tale resistore pilota la
base del transistore quando la porta si trova allo stato alto, mentre e' assorbita dal transistore
inferiore del "totem-pole" nello stato basso; in tal modo si sfrutta la caratteristica della porta
TTL di essere in grado di assorbire una corrente maggiore di quella che e' in grado di erogare.
Il resistore connesso poi tra base e massa rende piu' veloce l'interdizione del transistore e
migliora la stabilita' termica del circuito.
In tutti i tre circuiti appena presentati il carico e' connesso tra collettore del transistore e
un' opportuna tensione di alimentazione VL il cui valore, assolutamente indipendente dalla
tensione VCC di alimentazione della logica, e' determinato dal carico pilotato; il transistore poi
andra' scelto sulla base della tensione VL e della corrente richiesta. E' bene che il transistore
lavori in condizioni di saturazione abbastanza spinta per garantire una buona stabilita' dei
punti di lavoro e una bassa dissipazione di potenza. Qualora con un unico stadio non si
riuscisse a soddisfare le specifiche di progetto sara' necessario ricorrere a circuiti con piu'
stadi.
Infine in fig. 13.11.9 e' presentato un circuito per il pilotaggio di carichi senza
l'inversione di fase introdotta dai circuiti precedenti.
E' opportuno far notare che la realizzazione circuitale illustrata e' utile per pilotare
carichi a bassa corrente, come ad esempio displays a scarica nei gas, poiche' la corrente che
scorre nel carico e' assorbita totalmente dalla porta e non puo' quindi superare i 16 mA.

V V cc = 5 V
L

RL

figura 13.11.9

Quando si debba invece pilotare un ingresso TTL con sorgenti esterne, rispettando la
bassa impedenza e le specifiche di tensione dell'ingresso stesso, non sempre il problema e' di

355
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

facile soluzione. In fig. 13.11.10 sono presentati due circuiti che permettono di interfacciare
una sorgente esterna con un ingresso TTL.

Vcc
10 k
100 k
10 k
TTL
5.6 k 5.6 k
10 k TTL

(a) figura 13.11.10


(b)

Ambedue i circuiti possono sopportare segnali di ingresso nel campo compreso tra 100 e
-100 volt, mentre cambiano di stato con segnali dell'ordine del volt. Il diodo posto tra base e
massa protegge la giunzione base emettitore da tensioni negative che potrebbero provocarne il
breakdown.
Il circuito di fig. 13.11.10 (b) possiede inoltre un filtro RC di ingresso che sopprime il
rumore ad alta frequenza e una reazione positiva che impedisce alla porta di rimanere nella
fascia di incertezza in presenza di segnali di ingresso lentamente variabili.

13.11.6) Spostamento dei livelli di tensione.


In fig. 13.11.11 e' presentato un circuito che permette di spostare il livello di tensione
del segnale da TTL a valori negativi.

Vcc

R2 R 3 = R2

TTL R3

Vo
R1

-V

figura 13.11.11

Il partitore R2, R3 fissa a VCC/2 volt il potenziale dell'emettitore del transistore.


Pertanto tale transistore e' interdetto quando la porta si trova allo stato alto, su R1 non circola
corrente e la tensione di uscita si porta a -V.

356
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Quando invece l'uscita della porta va allo stato basso il transistore passa in conduzione
e, tenendo presente che R2 e' uguale a R3, la tensione di uscita assume il valore:

Vcc . R 1 V.R 2
V0
R 2 2. R1 R 2 2. R1

quando si trascuri la caduta ai capi del transistore.

13.11.7) Interfacce per il pilotaggio di linee.


I circuiti per il pilotaggio di linee sono circuiti di interfaccia che convertono i segnali di
uscita di una porta, spesso di tipo TTL, in segnali adatti a linee di trasmissione (line drivers)
oppure riconvertono questi ultimi nuovamente in segnali adatti alla logica (line receivers).
L'esigenza di disporre di tali circuiti nasce dal fatto che, come si e' visto in precedenza, i
dispositivi logici appartenenti alle varie famiglie non sono di solito adatti a pilotare
direttamente le linee. E' opportuno forse richiamare alcune delle conclusioni raggiunte.
Le connessioni tra gli elementi circuitali devono essere quanto piu' possibile corte e non
devono procedere affiancate o addirittura attorcigliate assieme; le connessioni devono venir
eseguite preferibilmente da punto a punto e su un piano di massa che riduce gli accoppiamenti
tra i conduttori.
Le connessioni unifilari non devono superare una certa lunghezza massima, che va da
pochi centimetri per gli elementi ECL alla sessantina di centimetri per quelli TTL standard.
Lunghezze superiori richiedono l'uso di coppia ritorta o di cavo coassiale. Il cavo coassiale da'
maggiori garanzie contro l'accoppiamento tra segnali, ma presenta l'inconveniente di avere
un'impedenza caratteristica (normalmente 50 ohm) troppo bassa per essere adeguatamente
pilotato da un elemento logico.
Resistori di "pull-up" al lato ricevitore migliorano la situazione per quanto riguarda gli
effetti nocivi delle riflessioni, se il loro valore e' pari all'impedenza caratteristica della linea.
Disgraziatamente un resistore di valore pari all'impedenza caratteristica costituisce in molti
casi un carico eccessivo per una porta standard, che deve poter erogare o assorbire nei due
stati la corrente che vi circola. In particolare per le porte TTL la soluzione non e' praticabile e
il pensare di connettere una resistenza di terminazione tra uscita e massa anziche' tra uscita e
alimentazione peggiora ulteriormente la situazione. In tal caso la porta dovrebbe fornire una
corrente relativamente elevata allo stato alto, anziche' assorbirla allo stato basso.
I line drivers e i line receivers permettono di superare tali difficolta', sia per l'elevato
fan-out posseduto, sia perche' spesso possiedono uscite bilanciate e ingressi differenziali. In
tal caso si possono ottenere elevate reiezioni di modo comune pilotando linee simmetriche e
adattando perfettamente la linea con carichi pari alla sua impedenza caratteristica.

13.11.8) Forme e modalita' operative dei circuiti di trasmissione dati.


I circuiti di trasmissione dati si presentano in due forme principali; circuiti con tra-
smissione su linea sbilanciata e circuiti che utilizzano la trasmissione differenziale su linea
bilanciata.
La trasmissione su linea sbilanciata utilizza una linea di segnale e una linea comune di
terra per il ritorno del segnale stesso (fig. 13.11.12). Il suo piu' evidente vantaggio risiede nella
semplicita' in quanto e' necessario un unico filo per circuito. Gli svantaggi sono determinati
dalla sensibilita' al rumore VN e agli spostamenti del potenziale di terra VGS. I rumori indotti
sono causati da accoppiamenti magnetici o capacitivi con linee di segnale adiacenti o con altri

357
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

generatori di rumore. Gli spostamenti del potenziale di massa sono dovuti alle cadute nel
circuito di massa per effetto della circolazione di corrente, essendo tale circuito dotato di
resistenza e induttanza finite anziche' nulle.

Trasmettitore Ricevitore

RS
Ingresso linea di segnale R IN
VN Uscita

Vo VR

VGS
ritorno comune di terra

figura 13.11.12

I due disturbi VN e VGS si sommano al segnale prodotto dal trasmettitore e il ricevitore


non e' in alcun modo in grado di discriminare tra segnale e disturbo. L'immunita' al rumore di
un circuito sbilanciato puo' tuttavia essere aumentata adottando le seguenti precauzioni:

1) Aumentare la tensione di uscita del trasmettitore. Tale accorgimento ha tuttavia


lo svantaggio di far salire la dissipazione di potenza.
2) Usare cavi schermati e ridurre la resistenza del circuito di massa. Tale
precauzione tuttavia, pur riducendo il livello del disturbo, fa lievitare i costi.
3) Aggiungere un'isteresi al lato ricevitore. Si ottiene in tal modo un aumento del
margine di rumore in continua, ma si introduce una distorsione temporale sul
segnale.

trasmettitore differenziale ricevitore differenziale

ingresso
VN uscita
Vdiff
VN

VGS

figura 13.11.13

Un circuito differenziale bilanciato, illustrato in fig. 13.11.13, usa per ogni circuito una
coppia di fili intrecciati, un ricevitore e un trasmettitore differenziali. La linea bifilare ritorta e'
in grado di eliminare le correnti indotte per accoppiamento magnetico. I disturbi che invece si
generano per accoppiamento capacitivo hanno lo stesso effetto per ambedue i conduttori e
costituiscono quindi per il ricevitore un segnale di modo comune. Anche lo spostamento del
potenziale di terra puo' essere considerato un segnale di modo comune. Se il ricevitore, come
normalmente avviene, ha un'elevata reiezione di modo comune, esso e' in grado di separare il

358
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

segnale dal disturbo, permettendo una corretta trasmissione delle informazioni anche in
ambienti che non consentono l'utilizzo di linee sbilanciate.

uscita d

Ro
R0 R0
trasmettitore trasmettitore
2 2
uscita c

R0 R0
2 2

ricevitore half duplex ricevitore


uscita a uscita b
uscita a b c d
bus di distribuzione

R0 R0

2 2

ingresso a b c d

abilitazione
bus dati

figura 13.11.14

Vi sono poi due modalita' operative per i circuiti di trasmissione dati, simplex e
multiplex. Il circuito di tipo simplex permette il flusso dei dati in una sola direzione. Un cir-
cuito di tipo multiplex permette un flusso non contemporaneo di dati nelle due direzioni (half-
duplex), contemporaneo (full-duplex) o multidirezionale (bus o party line). In generale un
circuito multiplex ha due o piu' coppie di trasmettitori e ricevitori sulla stessa linea, con il
vincolo che solo un trasmettitore puo' essere attivo a un determinato istante. Alcune soluzioni
possibili per la trasmissione multiplex sono riportate in fig. 13.11.14.
I sistemi simplex sono piu' semplici da realizzare e minimizzano i problemi di tem-
porizzazione, mentre quelli multiplex sfruttano meglio il mezzo trasmissivo, ma sono piu'
difficili da progettare.
Quando si opera in modo multiplex e' necessario tener presenti i seguenti problemi, in
particolare quando si abbia a che fare con una struttura a bus.

1) E' necessario progettare un protocollo o comunque una metodologia che


consenta di stabilire il collegamento tra le unita' che devono colloquiare e
risolvere i conflitti di accesso al canale trasmissivo. La sequenza di protocollo
coinvolge normalmente i seguenti passi:
- La porta trasmittente deve segnalare la sua intenzione di utilizzare il bus (nor-
malmente tale segnalazione viene effettuata con una richiesta di interruzione).
- Il controllore del bus deve servire l'interruzione segnalando l'avvenuta accetta-
zione della richiesta e dando l'autorizzazione a procedere.
- La porta assume a questo punto il controllo del bus, inviando i dati, preceduti
da un codice che specifica a chi tali dati siano diretti.
- La porta o le porte riceventi devono accettare i dati, dando segnalazione
all'indietro dell'avvenuta ricezione.

359
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

- La porta trasmittente deve a questo punto prendere atto dell'avvenuta


ricezione rilasciando il controllo del bus in modo che altre porte possano
accedervi.
La modalita' di gestione del bus puo' essere ad interrogazione o asincrona.
Nel primo caso un controllore centrale del bus interroga in sequenza le varie
porte. Se non vi e' alcun dato da trasmettere la porta interrogata lo segnala e il
controllore passa alla porta successiva. In caso contrario il controllo viene
ceduto alla porta e alla fine della trasmissione viene riassunto dal controllore.
In modalita' asincrona ciascuna porta che voglia trasmettere dei dati segnala
tale fatto al controllore e la sua richiesta viene soddisfatta secondo
un'opportuno criterio di priorita', ottenuto con mezzi hardware o software. Un
criterio, certamente non il piu' efficiente, potrebbe essere quello di dare
priorita' piu' elevata alle porte che si trovano piu' vicine al controllore, come
avviene in molti minicomputer.
2) E' necessario considerare gli effetti che si generano quando viene tolta
l'alimentazione a qualche unita' collegata. I trasmettitori e i ricevitori integrati
contengono, come ogni altro circuito integrato, diodi parassiti, che nelle
normali operazioni sono polarizzati inversamente. A meno che non siano state
utilizzate particolari tecniche di progetto, quando viene a mancare
l'alimentazione questi diodi si polarizzano direttamente e possono essere causa
di malfunzionamento o di danni al circuito.
3) Le temporizzazioni del protocollo devono tenere in considerazione i diversi
tempi di propagazione tra le porte del sistema.
4) Ambedue gli estremi della linea devono essere opportunamente terminati per
evitare pericolose riflessioni.
5) Le connessioni sulla linea devono essere di lunghezza minima. Per avere le
minime perturbazioni e' opportuno che lo spezzone di collegamento abbia un
tempo di propagazione inferiore a 1/8 del tempo di salita e di discesa del
segnale presente al punto di connessione.
6) Se vengono usati trasmettitori con uscita "3-state" e' necessario poter
distinguere tra un dispositivo che e' in trasmissione e un dispositivo che e' in
condizioni di disattivazione. Nei sistemi a due stati il problema non si pone in
quanto uno 0 logico (codificato normalmente con un livello di tensione alto)
indica sia l'effettiva trasmissione di uno zero logico che lo stato di
disattivazione della porta, mentre un 1 logico (livello di tensione basso) indica
la trasmissione di un valore 1 e null'altro.
7) E' necessario tenere in considerazione anche il formato dei dati. Le operazioni
in parallelo sono certamente piu' rapide, ma senza dubbio piu' costose, in
quanto richiedono una linea di trasmissione e la relativa interfaccia per ciascun
bit del dato. D'altra parte la trasmissione seriale puo' essere complicata dalla
necessita' di predisporre ai due estremi del collegamento convertitori
parallelo/seriali e seriali/paralleli.

E' infine opportuno prendere in considerazione alcuni problemi collegati al modo


operativo a interrogazione. E' indispensabile valutare il tempo necessario per accedere e ri-
cevere la conferma da una porta in relazione con il volume dei dati normalmente trasmessi
dalle porte stesse e in relazione al numero delle porte. Se queste ultime sono in gran numero,

360
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

una cospicua aliquota del tempo sara' dedicata alle operazioni di interrogazione e solo una
piccola frazione rimarra' disponibile allo scambio di informazioni. Se in piu' vi e' anche un
traffico relativamente alto per ciascuna porta, tale fatto puo' dar luogo ad un eccessivo tempo
di attesa tra l'istante in cui il dato e' pronto a essere trasmesso e l'istante di effettiva
trasmissione e questa condizione e' assolutamente inaccettabile in sistemi in tempo reale.
Il problema puo' venir risolto spezzando un bus di grandi dimensioni in diversi bus
"satelliti" ciascuno con il proprio controllore a interrogazione e istituendo un protocollo in
relazione allo scambio di informazioni con il bus centrale.

13.11.9) Effetto delle linee nelle comunicazioni a lunga distanza.


Sotto diversi punti di vista le linee di trasmissione si comportano nei confronti del
segnale come un filtro passa basso con perdite. Un fronte ripido del segnale applicato
all'ingresso della linea si arrotonda e assume un andamento esponenziale via via che si pro-
paga lungo la linea stessa; in aggiunta le perdite che si hanno lungo la linea danno luogo a una
riduzione dell'ampiezza del segnale.
Questi due effetti pongono un limite alla velocita' con cui i dati possono essere tra-
smessi, in funzione del tipo e della lunghezza della linea. Tuttavia l'effetto maggiormente
limitante e' la deformazione del segnale; se infatti un nuovo dato viene inviato in linea prima
che il transitorio relativo al bit immediatamente precedente sia esaurito, possono verificarsi
spiacevoli inconvenienti, quali uscite dipendenti dal pattern ricevuto, "jitter" o addirittura
perdita di qualche impulso. Questo fenomeno viene chiamato interferenza intersimbolo ed e'
dovuto al fatto che, quando il ricevitore e' un dispositivo a soglia, come normalmente avviene,
il precedente bit di dati causa uno spostamento temporale del bit di dati attuale. L'interferenza
intersimbolo si genera ogni volta che la durata di un bit e' inferiore al tempo di salita o discesa
all'estremita' ricevente. La fig. 13.11.15 illustra tale effetto.

ingresso del
trasmettitore

tensione alla soglia


fine della linea

uscita del
ricevitore

figura 13.11.15

Un segnale di clock non soffre di interferenza intersimbolo essendo un pattern altamente


simmetrico e quindi predicibile. Un pattern di dati casuale invece ne puo' soffrire. La durata
minima di bit si ha quando un singolo bit e' preceduto e seguito da una lunga stringa di bit di
polarita' opposta.
Per misurare l'ammontare dell'interferenza intersimbolo e l'entita' del "jitter" si devono
usare delle lunghe sequenze casuali o pseudocasuali. Un circuito utile a visualizzare
l'interferenza intersimbolo e' riportato in fig. 13.11.16.

361
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

PE P0 P1 P2 P3
J 4 bit
CP shift register Q3
9300
K
MR Q 0 Q 1 Q 2 Q 3
1/2 9614

line driver

D5 D0 D1
clock
1/2 9328 250
CP Q7
8 bit
all'oscilloscopio shift register
MR

linea sotto test

Vcc
D5 D0 D1

1/2 9328
Q
7
CP 8 bit
22 k shift register
MR

inizializzazione

figura 13.11.16

Poiche' l'oscilloscopio con cui viene osservata la forma d'onda all'estremita' della linea
viene triggerato ogni volta che un nuovo dato viene generato dal circuito pseudocasuale, sullo
schermo si vedra' la sovrapposizione di lunghe sequenze di uni e zeri e cioe' la transizione
uno/zero o zero/uno seguite da diversi pattern di dati. Il circuito illustrato e' in grado di
generare sequenze pseudocasuali con ripetizione pari a 220-1; una sequenza di tale tipo e'
sufficientemente lunga per permettere la visualizzazione dell'interferenza intersimbolo causata
dai pattern precedenti fino a una profondita' di 20 bit.
In fig. 13.11.17 e' mostrato come la sovrapposizione delle forma d'onda misurate
all'estremita' ricevente della linea origini una visualizzazione stabile sullo schermo.

"1" isolato
"0" e "1" e "0"

"0" isolato "1" e "0" e "1"

sovrapposizione
"0" e "1"
di segnali
1 bit 1 bit

"1" e "0"

figura 13.11.17

La figura prodotta prende il nome di "pattern binario a occhio" per la sua somiglianza
con la sagoma stilizzata di un occhio.

362
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Tale pattern e' un mezzo molto semplice per misurare la qualita' dei segnali. La dispersione
del pattern in corrispondenza al livello di soglia del ricevitore permette di misurare il "time
jitter" percentuale dovuto all'interferenza intersimbolo.
Con riferimento alla fig. 13.11.18 il jitter sara' dato percentualmente da:

t
Jitter percentuale =
TUI

dove con TUI si e' indicato l'intervallo unitario di bit.


Se poi il livello di soglia e' spostato rispetto al suo valore ottimo, situato a meta'
dell'escursione di tensione prodotta dal trasmettitore, allora il dato sara' affetto oltre che dalla
distorsione intersimbolo, anche da un'ulteriore distorsione di tempo.

Tui

Livello di soglia

figura 13.11.18

Lo spostamento del livello di soglia verso il livello 1 fara' si' che gli uni ricevuti saranno
relativamente piu' brevi degli zeri. Analogamente uno spostamento verso lo zero accorcera' gli
zeri ricevuti. Tale effetto e' chiamato distorsione di polarizzazione.
L'apertura del pattern binario a occhio fornisce direttamente il margine di rumore del
sistema. Quando l'occhio e' completamente chiuso allora per quella lunghezza di linea e alla
velocita' di trasmissione di prova non risulta possibile una trasmissione priva di errori senza
ricorrere a tecniche di equalizzazione.
Usando il pattern ad occhio per indicare la qualita' del segnale, si puo' costruire per
ciascuna particolare linea un grafico, da cui si puo' ricavare il jitter percentuale in funzione
della lunghezza della linea e della velocita' di trasmissione, una volta che sia stata assegnata la
codifica impulsiva utilizzata (NRZ, RZ polare, modulazione digitale binaria di fase, ecc.).
In fig. 13.11.19 e' riportato un esempio per la codifica NRZ, rappresentativo delle prestazioni
ottenibili con la coppia ritorta. Il grafico mostra il "caso peggiore" cioe' il massimo jitter che ci
si puo' aspettare con una data lunghezza di linea e un'assegnata velocita' di trasmissione, ma si
puo' ritenere valido solo quando siano soddisfatte le seguenti condizioni:

1) I livelli dell'uno e dello zero del trasmettitore sono stabili.


2) La soglia del ricevitore e' equidistante da tali livelli.

363
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

3) La linea e' terminata perfettamente in modo da evitare riflessioni.

Se una qualsiasi delle precedenti condizioni non e' soddisfatta la qualita' del segnale e'
minore di quella che si ricava dal grafico. Di conseguenza il periodo di bit deve essere almeno
quattro volte maggiore del tempo di salita e di discesa alla terminazione di linea per tener
conto delle tolleranze dei circuiti integrati con cui trasmettitore e ricevitore sono realizzati.
Se la linea viene pilotata in tensione e non e' correttamente terminata, le curve di qualita'
del segnale vanno spostate verso sinistra (cioe' verso lunghezze minori a parita' di velocita' di
trasmissione). Verifiche sperimentali hanno permesso di determinare che il coefficiente di
riduzione e' circa 1/3. In altre parole una linea non terminata di 100 metri si comporta nei
confronti dell'interferenza intersimbolo come una linea di 300 metri chiusa sulla sua
impedenza caratteristica.

10000

100 % occhio binario chiuso - dati probabilmente


non ricostruibili

50 %

30 % jitter percentuale
20 %
La resistenza del cavo causa una
perdita nel segnale di circa 6 dB V 10 %
1000
5%

lunghezza REGIONE OPERATIVA


della linea
(piedi)
RACCOMANDATA

100
t ~t =2t
d ui r

t d ritardo della linea a 1.7 nsec/piede


pari approssimativamente a 2 volte tui= 4 t r minima
il tempo di salita del segnale durata dell'impulso
pari a 4 volte il tempo
di salita del segnale

10
10 k 100 k 1M 10 M 100 M
velocita' dei dat i NRZ (bit per secondo)

figura 13.11.19

Quando, stabilite una certa velocita' di trasmissione e una certa lunghezza della linea, si
va a cadere tra la linea TUI = 4.Tr e la linea del jitter percentuale del 100 % si rende necessaria
una misura diretta sul sistema con il metodo del pattern binario ad occhio. Tale procedura e'
raccomandabile anche quando la codifica di trasmissione e' diversa dalla NRZ.

13.11.10) Scelta dei trasmettitori e dei ricevitori di linea.


Il problema della scelta di un particolare trasmettitore o ricevitore di linea viene a
dipendere piu' dalle caratteristiche desiderate per il sistema che dalle caratteristiche elettriche
dei dispositivi.

364
Ô» º¿³·¹´·» ´±¹·½¸»
Ý¿°·¬±´± ïí

Le prestazioni complessive del sistema dipendono infatti essenzialmente dalla forma e


dalle modalita' operative scelte per la trasmissione e solo in seconda istanza dal tipo di
trasmettitore e ricevitore. E' necessario che il progettista tenga nella giusta considerazione le
relazioni esistenti tra rumore esterno e margine di rumore, qualita' del segnale e lunghezza
della linea, struttura seriale o parallela e costo e prestazioni. Nei paragrafi precedenti si e'
accennato ai principali problemi che si devono affrontare nel progetto di un circuito di
comunicazione. Vi sono tuttavia alcune considerazioni aggiuntive da fare.

1) Quando si lavora con linee lunghe (maggiori di 15 metri) il fattore che


maggiormente limita la velocita' di trasmissione e' il tempo di salita e di discesa
del segnale sulla linea. L'uso del pattern binario ad occhio permette di valutare
agevolmente la qualita' del segnale.
2) Le linee bilanciate sono preferibili rispetto quelle sbilanciate. Optoisolatori e
trasformatori permettono di operare con tecniche di modo comune e nel
contempo offrono un ottimo isolamento da terra. E' abbastanza comune in tal
caso usare codifiche prive di componente continua e autosincronizzate quali la
RZ polare o la modulazione digitale binaria di fase.
3) E' necessario limitare il numero totale di porte di un sistema multiplex in modo
tale che la combinazione in parallelo delle impedenze di ingresso dei ricevitori
e di quelle di uscita dei trasmettitori disabilitati risulti comunque molto
maggiore dell'impedenza caratteristica della linea.
4) Per il corretto funzionamento dei trasmettitori e dei ricevitori si rende
necessario un ritorno comune di terra. Esso puo' venir realizzato collegando lo
schermo della linea ai piedini di terra degli integrati ad essa collegati.
5) Per velocita' di trasmissione superiori a 10 Mbit/sec. e' necessario utilizzare
elementi ECL anziche' TTL. I trasmettitori e i ricevitori TTL compatibili hanno
infatti ritardi di propagazione eccessivi, compresi tra 20 e 50 nsec.
6) Le alimentazioni dei ricevitori e dei trasmettitori di linea vanno disaccoppiate
con condensatori di valore compreso tra 10 e 100 nanofarad. E' di solito
sufficiente un condensatore ogni 2/4 dispositivi.

365
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

CAPITOLO XIV
LE MEMORIE E I MICROPROCESSORI

14.1) Introduzione.
Un peso notevolissimo nel campo dell'integrazione a larga scala e' ricoperto al giorno
d'oggi dalle memorie, che rappresentano attualmente circa i due terzi delle totalita' dei circuiti
integrati prodotti. Ancora oggi si assiste ad un continuo aumento del numero di bit disponibili
sul singolo chip, che approssimativamente quadruplica ogni tre anni.
Non esiste stranamente sulle memorie a semiconduttore quell'ampiezza di informazione
che ci si potrebbe aspettare per componenti che rivestono una cosi' grande importanza.
Probabilmente tale situazione prende origine, a differenza dei circuiti MSI e SSI, da conside-
razioni di competitivita' tra le industrie produttrici che non hanno alcun interesse a divulgare
informazioni troppo dettagliate sui propri prodotti.

14.2) Classificazione delle memorie.


Le memorie a semiconduttore sono dei dispositivi elettronici costituiti da un insieme di
celle elementari, ciascuna delle quali e' in grado di immagazzinare un'informazione binaria.
Questo insieme di celle elementari e' dotato di apposite linee di comunicazione per accedere a
ogni singola cella. Una possibile classificazione delle memorie e' riportata nella tabella
sottostante.
Tale classificazione vede una prima grande suddivisione in memorie ad accesso casuale
(RAM) e memorie di sola lettura (ROM). Nelle prime un dato puo' essere scritto e letto in
qualsiasi cella, con un tempo di accesso che e' praticamente lo stesso sia che l'operazione sia
di scrittura che quando l'operazione e' di lettura.

TABELLA 1
----------------- dinamiche (MOS)

RAM

---------------- statiche (MOS)


(bipolari)

---------------- a maschera (MOS)


---------------- PROM (bipolari)
ROM
---------------- EPROM (MOS)
---------------- EEPROM o EAROM (MOS)

366
Nelle seconde invece la normale operazione e' solo quella di lettura in quanto o la
scrittura non e' permessa o richiede un tempo troppo lungo rispetto a quella di lettura. Un
vantaggio delle ROM tuttavia risiede nel fatto che l'informazione si conserva anche quando
l'alimentazione viene a mancare, a differenza delle RAM in cui l'informazione viene persa.
Per tale motivo le ROM vengono anche dette memorie non volatili.
Le ROM possono poi essere suddivise ulteriormente in alcune sottoclassi, per ciascuna
delle quali e' bene accennare ad alcune delle caratteristiche piu' importanti.

-- ROM a maschera. Sono memorie di sola lettura nelle quali i dati


vengono immagazzinati mediante un opportuno processo di
mascheratura durante la fabbricazione. E' impossibile modificare i dati
di un dispositivo finito. L'utente, all'atto dell'ordinazione, deve
specificare con un'opportuna codifica tutta l'informazione che deve
venir scritta nella memoria. La struttura fisica del componente e'
particolarmente semplice e l'organizzazione di tale tipo di memorie e'
sempre a matrice. In commercio si possono trovare ROM a maschera
con diversi gradi di parallelismo, di cui i piu' comuni sono comunque
4 e 8.

-- PROM o ROM programmabili. Sono memorie a sola lettura in cui


tuttavia i dati vengono inseriti dall'utente finale. La scrittura di un dato
avviene o per la fusione di opportuni collegamenti o con la
perforazione di una giunzione. Il dato, una volta scritto, non puo'
essere in alcun modo cancellato. Vantaggio sostanziale rispetto alle
ROM e' l'eliminazione dei tempi di attesa tra ordinazione della ROM e
la sua consegna, malgrado che il loro costo unitario sia superiore a
quello delle ROM a maschera. E' necessario tuttavia tener presente che
la produzione di ROM a maschera non e' economicamente
conveniente per quantitativi inferiori ai 1000 pezzi.

-- EPROM. Sono memorie a prevalente lettura, utilizzate quando siano


necessarie memorie non volatili, ma in cui i dati memorizzati possano
venir di volta in volta modificati. In questo caso i dati, scritti con
mezzi elettrici, possono venir cancellati, rendendo la memoria
nuovamente disponibile, esponendo il chip a radiazione ultravioletta
attraverso un' apposita finestra in vetro di quarzo.

-- EEPROM (spesso dette anche EAROM). Sono memorie molto simili


alle EPROM, ma la cancellazione di un dato viene effettuata
elettricamente, permettendo quindi di mantenere il dispositivo nel
sistema in cui e' installato. Le operazione di scrittura tuttavia sono
normalmente molto piu' lente delle operazioni di lettura. Dal punto di
vista dell'impiego e delle terminazioni EPROM e EAROM sono del
tutto analoghe alle ROM e alle PROM. Per alcuni modelli addirittura
esiste con queste ultime una completa compatibilita' sia elettrica che
meccanica (compatibilita' pin to pin).

367
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

14.3) Struttura base di una memoria.


Una memoria e' essenzialmente costituita delle seguenti parti:
1) Una matrice di celle;
2) Un decodificatore di indirizzo;
3) Un circuito di controllo dell'ingresso e dell'uscita.
In memorie di piccole dimensioni, ad esempio in memorie da 16 celle, il circuito di
indirizzamento puo' essere realizzato con un semplice selettore (linear select), come illustrato
in fig. 14.3.1.

M1 M4

16

M 16

figura 14.3.1

E' opportuno far notare in tale struttura circuitale la complessita' dovuta alla presenza
n
dei 2 collegamenti elettrici necessari all'abilitazione delle singole celle. La complessita'
inoltre aumenta in modo esponenziale all'aumentare del numero n di bit.
Una valida alternativa e' l'indirizzamento a matrice, illustrato in fig. 14.3.2 (coincident
select).

M1
1

Selettore
di
riga M4
4

1 4

Selettore di colonna

figura 14.3.2

368
Si ottiene in tal modo una notevole semplificazione della rete dei collegamenti. Pertanto
si puo' ritenere che, tranne per memorie di minime dimensioni, la struttura di base sia quella di
fig. 14.3.3.

D
e cella di memoria
c
o linea di parola
d
i r
indirizzo di f d i
riga i i g
c linea
a a dei dati
matrice di
t
o celle
r
e

Din Circuito di controllo I/O Dout

Decodificatore di colonna

indirizzo di colonna

figura 14.3.3

Il decodificatore di riga selezione un'intera riga di celle. I dati immagazzinati nelle celle
connesse con la linea selezionata sono trasferiti al circuito di controllo dell'ingresso e
dell'uscita.
A questo punto il dato che interessa viene trasferito all'uscita selezionandolo con il
decodificatore di colonna.
Ogni dispositivo di memoria possiede almeno i seguenti segnali:

1) Indirizzo (Address) composto dai segnali da applicare ai


decodificatori. All'utente non e' normalmente possibile distinguere tra
i bit di selezione di riga e di colonna. L'indirizzo deve pertanto essere
considerato come un tutto unico.
2) Lettura/scrittura (read/write). E' presente ovviamente solo quando
necessario e permette di scegliere tra un'operazione di scrittura o una
di lettura in o da una determinata cella.
3) Selezione di chip (chip select) che permette o meno di abilitare la
memoria in questione. Tale segnale si rende indispensabile quando si
vogliano realizzare memorie di grandi dimensioni, superiori a quelle
del singolo chip, oppure quando memorie ed altri dispositivi accedono
allo stesso bus per il trasferimento dei dati.
4) Ingresso e uscita (I/O). In certe realizzazioni le linee di ingresso e di
uscita possono coincidere.
5) Alimentazione (supply). Alcune realizzazioni, quali EPROM e
EAROM, possono richiedere piu' di una tensione di alimentazione;
tuttavia nella maggior parte dei casi e' sufficiente un'unica tensione.

La combinazione di tutti questi segnali organizza il dispositivo di memoria.

369
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Piu' matrici del tipo descritto possono essere utilizzate per accedere ad informazioni di
lunghezza superiore al bit. Si avranno ovviamente tante linee di ingresso/uscita quanti sono i
bit di informazione cui si vuol accedere contemporaneamente. Si parla in tal caso di
parallelismo della memoria, intendendo con tale termine il numero di bit per parola, dove pa-
rola e' l'insieme di bit cui si accede contemporaneamente con un unico indirizzo. Nelle
memorie standard il grado di parallelismo e' di solito una potenza di due.

14.4) Struttura delle celle delle memorie RAM.


Prima di descrivere i principi di funzionamento di una memoria RAM e' opportuno
accennare alle regole fondamentali cui bisogna attenersi nel progetto di una cella di memoria:

1) Una cella di memoria deve occupare sul chip la minima superficie


possibile.
2) I processi di fabbricazione per la sua realizzazione devono essere i piu'
semplici possibile.
3) Le operazioni di lettura e scrittura devono essere le piu' rapide
possibile.
4) La potenza dissipata va minimizzata.

I primi due punti sono di carattere prevalentemente economico, mentre gli ultimi due
riguardano le prestazioni del dispositivo.
Le memorie RAM si suddividono poi in memorie bipolari e MOS, statiche e dinamiche.
Le memorie bipolari sono piuttosto rare, di capacita' ridotta, e vengono utilizzate solo in
quelle applicazioni in cui sono richieste elevate velocita' di accesso. La distinzione tra
dispositivi statici e dinamici e' gia' stata illustrata al capitolo XIII. Nel caso delle memorie
tuttavia tale distinzione si riflette anche in profonde modificazioni strutturali e di impiego.

14.4.1) Struttura di una cella RAM statica.


Una possibile configurazione logica di una cella RAM statica e' riportata in fig. 14.4.1.
Il cuore della cella e' un semplice circuito bistabile che comunica con le linee dati
attraverso buffer 3-state. Tali buffer, rispettivamente di lettura e di scrittura, sono controllati
da due porte AND i cui ingressi sono il segnale di selezione di riga, quello di colonna e quello
di read/write (R/W).

DATA

write buffer
read buffer

connessione wired OR

read buffer
write buffer

Y DATA
R/W
X

figura 14.4.1

Quando sia X che Y sono a livello basso, ambedue le uscite degli AND si trovano a
livello basso e pertanto i quattro buffer 3-state risultano disabilitati. Quando invece X, Y e

370
R/W sono alti risultano abilitati i write buffer permettendo un'operazione di scrittura nella
cella; cambiando lo stato della linea R/W si disabilitano i write buffer mentre vengono abi-
litati i buffer di lettura. Il valore contenuto nella cella viene in tal caso trasferito alle linee dati.
Realizzare una memoria RAM utilizzando la cella appena descritta e' molto semplice. In
fig. 14.4.2 e' riportato lo schema di interconnessione per una memoria da 4 bit, per la quale
sono necessarie solo quattro porte in piu' rispetto a quelle necessarie per la realizzazione delle
singole celle.

data in buffer data out buffer

DATA IN DATA OUT


DATA
R/W

DATA

R/W

D D D D
Y R/W Y R/W
0 X 1 X
0 0

X
0

D D D D
Y0 R/W Y1 R/W
X1 X1

X1

Y0 Y1

figura 14.4.2

Un'osservazione piu' attenta della cella proposta fa tuttavia osservare che le esigenze di
progetto enunciate all'inizio del paragrafo 14.4 non sono sufficientemente rispettate. Infatti un
circuito costituito da 8 porte, (escludendo le connessioni "wired-or" che non occupano uno
spazio significativo) da 5 linee di segnale e da almeno 2 linee di alimentazione non puo' certo
considerarsi efficiente in termini di superficie di silicio occupata.

DATA

write buffer
read buffer

connessione wired OR

read buffer
write buffer
DATA

Y
figura 14.4.3

Un primo miglioramento si puo' ottenere eliminando la necessita' di una linea di


read/write per ogni cella, secondo quanto illustrato in fig. 14.4.3.

371
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Le due porte AND a tre ingressi della cella originaria si riducono ad un'unica porta AND
a due ingressi che controlla sia il buffer di lettura che quello di scrittura. In questo caso si puo'
allora sostituire la coppia di buffer con un semplice transistore MOS utilizzato come
interruttore.
La cella che cosi' si ricava potrebbe gia' essere accettabile, ma un ulteriore livello di
semplificazione puo' essere raggiunto eliminando la porta AND e riorganizzando la con-
figurazione della memoria in modo tale che tutte le celle di una riga siano parzialmente ac-
cessibili, mentre solo la cella della colonna selezionata lo sia totalmente. La nuova configu-
razione circuitale e' illustrata in fig. 14.4.4 mentre in fig. 14.4.5 e' riportato lo schema com-
pleto di una RAM da 4 bit.

Vdd

BIT (Y) BIT (Y)


Vss

figura 14.4.4

La cella cosi' ottenuta e' realizzata con soli sei transistori e le linee di segnale si sono
ridotte a tre. E' questa la struttura tipo della cella utilizzata nella maggior parte dei casi per
realizzare memorie RAM statiche.

D D D D
X X
X0

D D D D
X X
R.W=0
X1
BIT BIT BIT BIT

Y0 Y1 Amplificatore
differenziale
Data in -
Data bus +
Data out

Data bus
R/W
CS DB

DB

figura 14.4.5

La costruzione di una memoria completa, che utilizzi la cella a sei transistori, introduce
alcuni nuovi concetti e terminologie. Significativa e' la sostituzione delle linee dei dati con le

372
cosiddette "bit line" che alimentano un bus dati comune. Le "bit line" sono isolate dal bus dati
da interruttori MOS comandati dall' indirizzo di colonna.
Il bus dati a sua volta e' pilotato da una coppia di buffer 3-state in fase di scrittura,
mentre in fase di lettura comunica con l'esterno tramite un amplificatore differenziale e un
ulteriore buffer 3-state. Il controllo della RAM e' modificato dalla presenza del segnale CS di
"chip select", che negli esempi fatti precedentemente non era presente. Tale segnale si rende
necessario in quanto le RAM, in un sistema di memoria, sono disposte in modo matriciale
come le celle che costituiscono la singola RAM ed i vari chip condividono lo stesso bus dati
per trasmettere le informazioni. Ovviamente deve essere selezionato un solo chip per volta,
mentre gli altri devono essere completamente ininfluenti sia per quanto riguarda i dati di
ingresso che quelli di uscita. Questo risultato puo' essere raggiunto tramite il segnale CS di
fig. 14.4.5.
Si supponga, a titolo di esempio, di voler modificare il contenuto della cella X0, Y1 da
"0" a "1". I segnali da applicare alla memoria saranno allora X0, Y1 e CS alti, mentre X1 e Y0
dovranno essere tenuti bassi. Con questa combinazione di ingresso vengono attivati i buffer di
ingresso e di conseguenza DB si mettera' a livello alto e DB a livello basso. Y1 poi chiude gli
interruttori della relativa colonna, mentre X0 chiude gli interruttori MOS della cella X0, Y1.
Le "bit line" a questo punto si trovano in una situazione di conflitto per effetto del dato
gia' memorizzato in precedenza nella cella e del nuovo valore da scrivere; tuttavia con un
opportuno dimensionamento della parti componenti si puo' far si' che il nuovo dato prevalga,
forzando la cella nella nuova situazione.
Durante queste operazioni il segnale R/W, a livello basso, mantiene il buffer di uscita
disattivato, in modo che durante il ciclo di scrittura il dato presente sul bus dati non venga
trasferito in uscita.
Si noti che gli interruttori MOS della cella X0, Y0 sono anch'essi chiusi, trasferendo
quindi il contenuto della cella sulle "bit line" della colonna Y0. Tuttavia il valore basso di X1
impedisce un'interazione con la cella X1, Y0, mentre il livello basso di Y0 impedisce il tra-
sferimento del dato dalle "bit line" al bus dati.
In modo del tutto analogo puo' essere compiuta l'operazione di lettura.

14.4.2) Struttura di una cella RAM dinamica.


Una cella RAM dinamica si puo' considerare derivata da quella statica di fig. 14.4.4, in
cui tuttavia siano stati eliminati i transistori di carico. Il dato viene in questo caso
memorizzato nelle capacita' parassite di gate, come illustrato in fig. 14.4.6 (a).
In questa struttura circuitale si tende pertanto a perdere il dato se non si interviene con
un'operazione di riscrittura prima che la tensione ai capi della capacita' sia scesa al di sotto di
un determinato livello. Quest'operazione di riscrittura e' detta rinfresco (refresh) del dato.
Nella cella a quattro transistori tuttavia quelli T1 e T2 funzionano in modo comple-
mentare e di conseguenza si e' in presenza di una ridondanza di informazione.
Una cella ottenuta eliminando uno di questi transistori e' la cella a tre transistori di fig.
14.4.6 (b). In fase di lettura il dato e' decodificato dallo stato del transistore T1, in conduzione
o meno in funzione della carica immagazzinata nella capacita' parassita gate-source. Pertanto
quando T3 e' in conduzione T1 controlla il passaggio di corrente sulla linea dei dati (R) e
funge quindi da convertitore tensione-corrente.
Quando poi non si consideri la funzione di scrittura del dato, si puo' giungere alla cella a
1 transistore sempre illustrata in fig. 14.4.6 (c).

373
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

linea dei dati (W) linea dei dati (R)

linea di parola linea di parola (R) linea di parola

T T4
3 T
T2 3 T1
T1
T1 T2

linea di parola (W)


linea dei dati (D) linea dei dati (D) linea dei dati
(a) Cella a 4 transistori (b) Cella a 3 transistori (c) Cella a 1 transistore

figura 14.4.6

L'operazione di lettura in tal caso avviene come segue. In un primo tempo la tensione
sulla linea dei dati viene mantenuta allo stato alto; successivamente, quando T3 viene portato
in conduzione alzando il livello di tensione della linea di parola, un amplificatore a soglia
(sense amplifier) legge uno "0" o un "1", come illustrato in fig. 14.4.7, in funzione della
variazione di tensione che viene a verificarsi o meno sulla linea dei dati.

Tensione della linea dei dati

lettura di un "1"

T1 ON

attivazione del lettura di uno "0"


sense amplifier

tempo

figura 14.4.7

Ogni linea dei dati e' collegata a un "sense amplifier", che corrisponde al circuito di
controllo di I/O di fig. 14.3.3.
Per ottenere elevate sensibilita' e per questioni di stabilita' il "sense amplifier" e' spesso
realizzato in configurazione differenziale.

14.4.3) Struttura di una memoria RAM dinamica.


A titolo di esempio verranno illustrati in questo paragrafo i principi secondo i quali
funziona una semplice memoria RAM dinamica a 4 bit, il cui schema e' riportato in fig.
14.4.8.
Le forme d'onda che controllano questo circuito sono riportate in fig. 14.4.9.

374
Si osservi che un ciclo, sia esso di lettura oppure di scrittura, puo' essere suddiviso in
due periodi distinti, detti rispettivamente periodo attivo e periodo di precarica.

linee dei dati

V rif V rif

Precarica Precarica

X0

Cb C C C
s b s

X1

C C C C
b s b s

V V
rif rif

Tristate sense refresh Tristate sense refresh


amplifier amplifier
read read

write read
Y Y

data bus
ingresso uscita
dati dati
figura 14.4.8

Durante il periodo attivo vengono eseguite le operazioni richieste, cioe' la lettura o la


scrittura di un dato, mentre durante il periodo di precarica la memoria viene preparata per le
operazioni successive. Durante quest'ultimo periodo, con riferimento alla fig. 14.4.8, non si fa
altro che connettere le linee dei dati, mediante i rispettivi MOS controllati dall'impulso di
precarica, alla tensione di riferimento Vrif, di valore intermedio tra i livelli di tensione cor-
rispondenti allo "0" e all'"1" logico.

CICLO DI LETTURA - Ingresso WRITE basso


indirizzi

precarica

READ

refresh

Uscita dati
dato valido

CICLO DI SCRITTURA - Ingresso READ basso


WRITE

Ingresso dati
periodo attivo precarica

figura 14.4.9

Alla fine del periodo di precarica la linea dei dati si trovera' ad una tensione che in
pratica coincide con Vrif, poiche' l'amplificatore di rinfresco si trova nel suo stato ad alta
impedenza.

375
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Appena terminato il periodo di precarica le linee di indirizzo selezionate si portano a


livello alto. La linea X fara' condurre i MOS delle due celle situate sulla medesima riga,
connettendo le corrispondenti capacita' Cs alle linee dei dati. Di conseguenza le cariche della
capacita' Cs e della capacita' Cb si ridistribuiscono in modo che sulla linea dei dati si abbia una
tensione pari a:

C s . Vs C b . Vrif
VR
Cs Cb

Tale tensione viene confrontata dal "sense amplifier" con Vrif e quindi la rivelazione del
dato memorizzato in ciascuna cella avviene senza difficolta'. Il dato della colonna selezionata
passa poi sul bus dati e, tramite il "data out buffer", passa al terminale di uscita.
Se a questo punto il ciclo terminasse, i dati presenti nelle celle lette risulterebbero
fortemente degradati; la lettura sarebbe cioe' di tipo distruttivo. Gli amplificatori di refresh
ovviano a tale inconveniente, ripristinando i corretti valori di tensione sulle celle. E' ovvio che
tutte le celle accessibili dalla stessa linea devono venir rinfrescate contemporaneamente.
Si noti che nel ciclo di lettura descritto, durante il periodo attivo, l'indirizzamento ter-
mina prima di qualsiasi altro segnale, allo scopo di proteggere i dati contenuti nelle celle, che
potrebbero deteriorarsi se piu' segnali commutassero contemporaneamente prima che la cella
fosse stata isolata dal resto del sistema.
L'operazione di scrittura e' relativamente piu' semplice. Il segnale write abilita il dato
presente in buffer, che attraverso l'amplificatore di refresh viene trasferito sulla linea dati
desiderata.
Si noti che ciascuna cella richiede solo due componenti, due linee di segnale e una linea
di alimentazione (la linea di massa). Inoltre in condizioni di riposo la cella non dissipa
potenza. A fronte di questi vantaggi si ha un aumento del tempo di accesso, determinato dal
periodo di precarica e dalla necessita' di assicurare che ciascuna riga sia periodicamente in-
dirizzata per assicurare il refresh dei dati.
Oltre alla necessita' di refresh e' inoltre di considerevole importanza l'istante di inizio del
funzionamento del "sense amplifier". RAM dinamiche veloci richiedono che il "sense
amplifier" inizi a funzionare il prima possibile; tuttavia anticipare troppo l'inizio del funzio-
namento riduce eccessivamente l'ampiezza della tensione sulla linea dei dati e puo' dar luogo a
fenomeni di instabilita'. La relazione ricavata per VR vale infatti solo a regime.
La miglior temporizzazione e' funzione di diversi fattori, quali il rapporto tra la capacita'
delle linee dei dati e quelle delle celle di memoria, la sensibilita' del "sense amplifier", la
generazione interna di rumori e altre condizioni.
Le considerazioni sul rumore, molto importanti poiche' il "sense amplifier" deve operare
su livelli di tensione abbastanza bassi, portano a particolari geometrie nella disposizione delle
celle di memoria, che tendono ad ottimizzare la velocita' di funzionamento e l'immunita' al
rumore. Non si ritiene tuttavia utile in questa sede approfondire tale argomento.

14.5) Esempio di utilizzazione di memorie ROM.


Nel presente paragrafo verra' esaminato l'impiego di memorie ROM al fine di utilizzare
un monitor televisivo come display alfanumerico.
Il principio di funzionamento di tale sistema, capace di visualizzare 16 righe, ciascuna
contenente un massimo di 64 caratteri, puo' essere visto con l'ausilio dello schema a blocchi di
fig. 14.5.1.

376
impulso di riga impulso
di quadro
reset

Clock Clock Contatore modulo 64


2 1 C C0
5

load P6 A4 M0
M5
Generatore
reset
Q Memoria RAM
Shift 5
di da 64 x 16 parole
register caratteri da 6 bit
P Q1 M9 M6
0
A0

Uscita video
B3 B0 D3 D0
Contatore modulo 11 Contatore modulo 16

reset reset

figura 14.5.1

Ogni carattere sia separato da quello successivo da due spazi, e ogni linea di caratteri sia
separata dalla successiva da quattro spazi, come illustrato in fig. 14.5.2.
In tal modo, supponendo che ciascun carattere sia realizzato con una matrice 5 x 7,
l'effettivo spazio riservato ad ogni carattere, comprensivo dell'area di separazione tra caratteri
e tra righe, risulta essere di 7 x 11.

11

figura 14.5.2

L'intera pagina alfanumerica visualizzata venga poi prelevata da una memoria RAM da
64 x 16 = 1024 parole da 6 bit, in ciascuna delle quali e' contenuto il codice del carattere da

377
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

visualizzare. I bit di indirizzo di questa memoria saranno pertanto 10 (M0-M9) di cui i primi 6
(M0-M5) individuano la posizione sulla riga in cui visualizzare il carattere, gli ultimi quattro
(M6-M9) una delle 16 righe costituenti la pagina. I 6 bit del dato (A0-A5), uscita della parola
indirizzata, vengono inviati all'ingresso del generatore di caratteri.
Il funzionamento puo' essere descritto nel modo seguente. L'impulso di quadro azzera:
1) Il contatore modulo 64, necessario a indirizzare i 64 caratteri che
formano ciascuna riga.
2) Il contatore modulo 16 necessario ad indirizzare ciascuna riga della
pagina.
3) Il contatore modulo 11 utilizzato per la scansione delle sette righe che
costituiscono ciascun carattere (ingressi R0, R1, R2 del generatore di
caratteri) e le quattro righe che costituiscono la spaziatura verticale.
L'impulso di riga e' inviato al contatore modulo 11 e al generatore di clock (clock1) che
fornisce un treno di 64 impulsi all'ingresso del contatore modulo 64.
Un secondo generatore di clock (clock2), sincronizzato con il clock1, permette di se-
rializzare, utilizzando uno shift-register, l'uscita parallela (Q1,..,Q5) del generatore di caratteri.
Q1-Q5 sono i cinque bit che formano una linea del carattere e vengono inviati ai primi cinque
ingressi paralleli (P0, .., P4) dello shift-register, mentre gli ultimi due ingressi paralleli (P5 e
P6) vengono mantenuti costantemente a zero in modo da realizzare la spaziatura orizzontale
tra i diversi caratteri della stessa riga.
Pertanto per ogni impulso fornito dal clock1 si hanno 7 impulsi di clock2.
I sette bit presenti agli ingressi paralleli dello shift-register vengono caricati nel registro
stesso con un opportuno ritardo in modo da evitare errori di caricamento per mezzo di un
segnale di "load" ricavato dal clock1.

Stato del contatore B3 B 2 B 1 B 0 Reset


0 0000 0

1 0001 0

2 0010 0

3 0011 0

4 0100 0

5 0101 0

6 0110 0

7 0111 1

8 1000 1
9 1001 1
10 1010 1

Reset B 3 B 0 . B1 . B 2

figura 14.5.3

Il contatore modulo 11 effettua il conteggio degli impulsi di riga e fornisce i tre bit di
indirizzamento B0, B1 e B2 agli ingressi R0, R1 e R2 del generatore di caratteri, in modo da

378
individuare in sequenza, durante i primi 7 impulsi di ciascun gruppo di 11 impulsi, le sette ri-
ghe che costituiscono il carattere, mentre durante i successivi quattro impulsi e' necessario
azzerare totalmente lo shift-register, in modo da realizzare la spaziatura verticale.
E' necessario pertanto realizzare la semplice funzione logica illustrata in fig. 14.5.3.
Il contatore modulo 16 totalizza i gruppi di 11 linee video, cioe' incrementa il suo stato
ogni 11 impulsi di riga. Le sue uscite (D0, ..., D3) vengono inviate alla memoria RAM (M6-
M9) in modo da indirizzare successivamente le 16 righe che costituiscono la pagina.
Infine i sei bit di uscita del contatore modulo 64 (C0-C5 ) sono connessi ai primi sei bit
di indirizzo della RAM, per individuare in successione la locazione che contiene il codice di
ciascuno dei 64 caratteri che costituiscono la riga.

14.6) I microprocessori.
Al capitolo X sono stati presentati i problemi relativi ai sistemi a larga scala e si e'
pervenuti a un possibile formalismo per la rappresentazione di sistemi sequenziali con un
elevato numero di stati. E' opportuno ricordare che la soluzione proposta, a partire da un
modello di circuito suddiviso in una parte sequenziale di controllo e in una parte di memo-
rizzazione ed elaborazione dei dati, conduceva alla messa a punto di una sorta di linguaggio di
programmazione in grado di descrivere in modo non equivoco il funzionamento di qualsiasi
circuito, per quanto complesso esso fosse.
Il logico sviluppo di questo modo di affrontare il problema consiste evidentemente nel
passare dai circuiti in logica cablata, sia pure descritti attraverso un linguaggio [regolare], a
dispositivi LSI effettivamente programmabili, in modo che le funzioni logiche di un certo
dispositivo non siano piu' realizzate da un hardware, ma da un programma, cioe' da una
sequenza di istruzioni memorizzate in un qualche dispositivo (normalmente una RAM). Tali
considerazioni hanno condotto i costruttori a realizzare circuiti LSI utilizzabili dal massimo
numero di clienti nella applicazioni piu' svariate. Nascevano in tal modo ,verso l'inizio degli
anni 70, i microprocessori, la cui struttura e', al livello minimo, quella di un'unita' centrale di
un calcolatore di uso generale. Sostanzialmente la struttura e' quella schematicamente
illustrata in fig. 14.6.1 in cui si nota immediatamente l'analogia con il modello introdotto al
paragrafo 10.1.

indirizzi dati

UNITA' DI UNITA' DI
clock
CONTROLLO CALCOLO

istruzioni dati

figura 14.6.1

La flessibilita' del sistema, alternativo rispetto a logiche cablate TTL o CMOS, e' molto
elevata, in quanto con la sostituzione del programma si puo' cambiare completamente la
funzione svolta o comunque adattarla facilmente a nuove esigenze nel frattempo intervenute.

379
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Malgrado la scarsa potenzialita' dei primi microprocessori introdotti, il successo delle


logiche programmate e' stato immediato e si e' via via espanso in rapporto ad una serie di
vantaggi conseguibili, che sono sintetizzabili nelle voci:
1) Costo
2) Tempo di sviluppo di un progetto
3) Affidabilita' del sistema
In effetti la tendenza del mercato, a partire dal momento in cui i microprocessori sono
stati introdotti, e' stata quella di offrire dispositivi sempre piu' sofisticati e potenti a costi
sempre minori. Non e' azzardato affermare che i microprocessori moderni offrono a prezzi
contenutissimi prestazioni addirittura superiori a quelle che solo poco tempo prima erano
proprie dei minicalcolatori.
Oltre a cio' un sistema basato sull'utilizzo del microprocessore presenta dei notevoli
vantaggi per quanto riguarda la velocita' del progetto e della messa a punto. Molto spesso si
puo' fare riferimento a un'unita' standard e a schede modulari utilizzabili in diversi progetti,
mentre il massimo sforzo progettuale va rivolto alla messa a punto del software. In ogni caso i
microprocessori presenti sul mercato offrono dei supporti software non indifferenti,
permettendo una notevole riduzione dei tempi di sviluppo.
Un sistema a microprocessore infine presenta un'affidabilita' maggiore che non un
sistema a logica cablata. Infatti la maggior parte delle funzioni logiche richieste sono realiz-
zate in un unico chip; diminuisce pertanto il numero di componenti e di interconnessioni e
diminuisce corrispondentemente la probabilita' di guasto.
Oltre ai vantaggi citati e' appena opportuno far notare che i sistemi a microprocessore
possono essere modificati, in modo anche pesante, con estreme facilita'. Tale fatto permette un
adeguamento molto rapido alle richieste del mercato, giocando un ruolo molto favorevole in
relazione all'obsolescenza dei prodotti.

14.7) Approccio al progetto di sistemi a microprocessore.


Da quanto e' stato appena detto discende immediatamente che un progettista che voglia
far uso di microprocessori deve conoscere non solo i problemi relativi alle caratteristiche
elettriche e funzionali dei dispositivi usati, ma deve possedere anche una buona conoscenza
delle tecniche fondamentali della programmazione. La conoscenza delle caratteristiche
elettriche e funzionali si rende necessaria per realizzare, a partire dal microprocessore un
microcalcolatore, la cui struttura tipica e' riportata in fig. 14.7.1.
Le nozioni di programmazione si rendono invece necessarie per la messa a punto del
programma da inserire in ROM. Le conoscenze in campo hardware e quelle relative alla
programmazione non sono tuttavia slegate tra di loro, ma interagiscono nel corso del progetto;
una determinata realizzazione circuitale vincola nello sviluppo del software, cosi' come la
scelta di un determinato algoritmo puo' rendere obbligate determinate soluzioni circuitali. Non
e' pertanto corretto affermare, come ancora qualcuno fa, che l'avvento dei microprocessori
abbia ridotto il progetto logico ad una pura messa a punto di nuovi software.
Quale che sia l'impostazione che si vuole dare al progetto, o con i soli circuiti a bassa e
media scala di integrazione o con i microprocessori, e' necessario in primo luogo analizzare la
funzione che il progetto vuol realizzare, in modo da ricavarne uno schema di flusso in cui
siano evidenziati gli stati fondamentali della macchina. Per specificare le transizioni tra uno
stato e l'altro e' necessario poi conoscere la configurazione dei segnali di ingresso (comandi e

380
dati) e le loro temporizzazioni. Infine si deve valutare la quantita' dei dati che devono essere
disponibili alla macchina per le successive elaborazioni, in modo da definire la quantita' di
memoria necessaria.

USCITA

ROM Micro CPU RAM

INGRESSO

figura 14.7.1

Stabilite queste caratteristiche fondamentali, si deve poi scegliere la tecnologia con cui
realizzare il progetto. Se fino a qualche anno fa la scelta poteva poteva venir fatta essen-
2
zialmente sulla base della dissipazione di potenza (tecnologie NMOS o PMOS, CMOS, I L) e
della velocita' (TTL, STTL, ECL), l'avvento dei microprocessori ha introdotto un nuovo
livello di scelta; occorre cioe' scegliere se sia piu' opportuno realizzare il progetto con circuiti
SSI e MSI oppure con circuiti microprocessori LSI.
Il criterio fondamentale di scelta e' il rapporto costo-prestazioni, risultato di molti
fattori. Uno schema operativo semplificato per compiere tale scelta e' riportato in fig. 14.7.2.
E' bene tuttavia commentare, sia pure molto sinteticamente, alcuni dei fattori che
condizionano la decisione.
a) Quantita' delle funzioni da realizzare.
Tale parametro e' approssimativamente proporzionale al numero di elementi SSI e MSI
necessari. Usando invece microprocessori tale proporzionalita' si sposa invece alla dimensione
della memoria di programma.
b) Parallelismo dei segnali e dei dati.
Questo parametro gioca un ruolo notevolmente importante quale criterio di scelta. I
microprocessori sono infatti strutturati per elaborare dati con parallelismo 4, 8 , 16 o piu'. E'
abbastanza evidente che ottenere le stesse prestazioni con circuiti SSI e MSI e' notevolmente
piu' difficoltoso e costoso.
c) Espandibilita' del sistema.
Utilizzando microprocessori l'espansione il piu' delle volte si riduce all'aggiunta di
circuiti di I/O e di nuova memoria. Con circuiti SSI e MSI la cosa e' invece notevolmente piu'
difficoltosa.

381
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Progetto del sistema

no Occorre realizzare si
molte funzioni

no Si richiede si si Esiste un micropoces- no


flessibilita' funzionale sore di sufficiente velo-
cita'

MICRO
ELABORATORE

no Le prestazioni si
devono essere espanse

no Gli stati di macchina


si
sono molti

no E' necessaria molta si


memoria

LOGICA SPARSA

figura 14.7.2

d) Necessita' di utilizzare temporizzazioni complesse.


Quando sorga la necessita' di misurare con una certa precisione intervalli di tempo l'uso
di microprocessori si rivela un metodo poco efficiente. E' preferibile in tal caso usare logiche
SSI e MSI. Tuttavia per superare tale difficolta' sono stati sviluppati dispositivi programmabili
di temporizzazione utilizzabili da microprocessore.
e) Memoria dati.
Se il numero di dati da elaborare e' notevole, l'uso di un microprocessore diventa
pressocche' indispensabile. I microprocessori infatti contengono al loro interno tutti i circuiti
(registri di indirizzo e di dati) necessari alla gestione di memorie anche di notevole dimen-
sione.
f) Capacita' decisionali.
Quando il problema da risolvere prevede la necessita' di eseguire salti condizionati, cioe'
di scegliere tra due stati successivi di macchina in funzione di certe condizioni di ingresso
(cfr. capitolo X), l'uso di microprocessori diventa praticamente obbligato. Realizzare le stesse
funzioni con circuiti MSI/SSI e' abbastanza complicato, come e' stato illustrato al capitolo X,.
Un discorso del tutto analogo si puo' fare anche per i trasferimenti condizionati.
g) Tempo di sviluppo.
Lo sviluppo di un sistema a microprocessore puo' sembrare a prima vista piu' difficile e
lungo che non quello dei tradizionali circuiti in logica cablata.
E' vero viceversa che, con l'uso degli opportuni sistemi di sviluppo hardware e software,
la realizzazione di un sistema a microprocessore si ottiene normalmente in tempi piu' brevi
che non quelli del corrispondente circuito in logica cablata.

382
Va tuttavia osservato che hardware e software non possono essere sviluppati indi-
pendentemente, ma interagiscono tra di loro secondo lo schema di fig. 14.7.3.

Supporti PROGETTO Supporti


di sviluppo H/W del sistema di sviluppo S/W

Prototipo H/W con Sviluppo del S/W


emulatore ROM con assembler

modifiche H/W Modifiche S/W


Messa a punto del
prototipo

S/W ROM

figura 14.7.3

E' opportuno far notare che caratteristica fondamentale dei sistemi di sviluppo hardware
e' quella di condividere con il prototipo del sistema in progetto una memoria RAM, che emula
la memoria ROM del dispositivo finale. In tale memoria e' possibile caricare, modificare
quando necessario, ed esaminare in qualsiasi momento il programma che realizza le funzioni
desiderate. Tale programma, ottenibile con i supporti software, puo' essere sviluppato sia nel
linguaggio assemblatore del microprocessore utilizzato, come indicato in fig. 14.7.3, che in
linguaggi a livello piu' elevato, quali Fortran, Pascal, C, PLM o simili.
h) Costi.
Nella valutazione dei costi e' necessario evidentemente, come e' stato accennato al
capitolo X, tener conto dei costi accessori, quali quello dell' alimentatore e quelli
dell'interconnessione. L'uso di microprocessori, portando ad una drastica riduzione di com-
ponenti, permette sotto questo punto di vista di ottenere delle notevoli economie.
i) Affidabilita'.
Anche per l'affidabilita' l'uso dei microprocessori comporta notevoli vantaggi, legati
soprattutto alla diminuzione di saldature, contatti, cavi e connettori.

14.8) Struttura elementare di un microprocessore.


Si e' gia' visto al paragrafo precedente che un microprocessore puo' essere considerato
suddiviso in due blocchi fondamentali, chiamati rispettivamente unita' di calcolo e unita' di
controllo.
E' conveniente a questo punto esaminare con maggior dettaglio l'unita' di calcolo; a
questo scopo e' opportuno appoggiarsi ad un semplice esempio che permetta di esaminare in
modo non eccessivamente astratto le strutture interne del microprocessore.

383
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Si prenda pertanto in considerazione un microcalcolatore che debba eseguire le quattro


operazioni aritmetiche su numeri decimali di otto cifre. La struttura di tale microcalcolatore
sara' quella illustrata in fig. 14.8.1.
I dati, cioe' gli operandi e i comandi di operazione, pervengono al microprocessore
tramite l'ingresso I; dati e risultati parziali saranno registrati nella memoria M, i risultati finali
inviati all'uscita U. Ingresso e uscita possono essere ad esempio una tastiera e un display con
cifre a 7 segmenti. Infine i dati siano espressi in codice BCD.

TASTIERA
Display a 7 segmenti
7 8 9 /
4 5 6 *
1 2 3 -
< 0 = +

MICRO
I ELABORATORE
U

MEMORIA

figura 14.8.1

La prima cosa su cui e' necessario fissare l'attenzione e', come si e' detto, se la scelta di
un microprocessore sia effettivamente preferibile ad una realizzazione SSI/MSI. Nel presente
caso essa si rivela opportuna per i seguenti motivi:
1) Parallelismo dei dati pari a 4, facilmente gestibile con un microprocessore, molto piu'
difficile da affrontare invece con una realizzazione in logica sparsa.
2) Gestione dei dati. Ogni dato e' composto da 8 cifre e il risultato puo' avere fino a 16
cifre. E' necessario pertanto gestire una memoria di almeno 32 parole da 4 bit. La cosa
e' semplice utilizzando un microprocessore, non altrettanto in logica sparsa.
3) Espandibilita' del sistema. Nel caso di un microprocessore l'aggiunta di nuove ope-
razioni consiste nell'espansione della memoria di programma e nella messa a punto di
nuovi algoritmi e del relativo software. E' invece pressocche' impossibile con
dispositivi realizzati in logica cablata.
4 )Costo. Esistono sul mercato microprocessori con il grado di parallelismo richiesto a
prezzi paragonabili a quelli della singola parte MSI.
Il flusso elementare delle operazioni e' riportato in fig. 14.8.2.
Con i classici metodi di progetto in logica sparsa ad ogni blocco del diagramma di
flusso viene associato uno stato di macchina ed a ciascuno di questi stati viene associata una
sequenza piu' o meno lunga di operazioni elementari.
In una realizzazione a microprocessore invece, ad ogni blocco del diagramma viene
associata una routine, cioe' un insieme di istruzioni. Tali istruzioni tuttavia lavorano su reti
hardware, che devono venir specificate assieme al programma. In altre parole dallo schema di
flusso di fig. 14.8.2 e' necessario estrarre non solo sequenze di istruzioni, o in alternativa uno
schema circuitale, ma le due cose contemporaneamente.

384
ATTESA

dato presente
Componi il primo
operando in
memoria

operatore presente
Componi il
secondo operando
in memoria

Uguale presente

Esegui
l'operazione

DISPLAY

figura 14.8.2

Con riferimento al microcalcolatore di cui ci si sta occupando, si stabilisca che:


a) I due operandi di otto cifre siano allocati in memoria alle posizioni 0-7 e 8-15 ri-
spettivamente, mentre il risultato sia memorizzato alle posizioni 16-31.
b) Le cifre meno significative siano rispettivamente agli indirizzi 0,8 e 16.
Esaminando ora il diagramma di flusso di fig. 14.8.2 e interpretandolo sulla base di un
possibile algoritmo di somma, si ricava che le reti hardware associate all'operazione voluta
sono:
1) Un registro Rc in cui caricare la costante "8", lunghezza degli operandi.
2) Un flip-flop di riporto.
3) Un registro indice RI (di almeno tre bit).
4) Un registro degli indirizzi di memoria (almeno 5 bit).
5) Una memoria RAM di almeno 32 parole.
6) Un registro accumulatore AC.
7) Una rete logico-aritmetica (ALU - Aritmetic Logic Unit) in grado di
eseguire le operazioni sui due operandi e sul riporto.
8) Un bus da memoria verso accumulatore e ALU.
9) Un bus da accumulatore a memoria.
10) Un bus da registro indirizzi a memoria.
11) Una rete per decidere quando la routine e' finita.
12) Una rete che abiliti le vie logiche richieste dalle singole istruzioni
(decodifica delle istruzioni).

385
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Rc Carica la costante 8 in Rc
8

0 CY Azzera il carry

0 RI Azzera il registro indice RI

0 AR Azzera il registro degli indirizzi di memoria

AR + RI AR Punta al primo operando

(AR) AC Trasferisce la cifra nell'accumulatore

AR + RC AR Punta al secondo operando

AC + (AR) + CY AC,CY Somma i due operandi

AR + RC AR Punta alla zona di memoria riservata


al risultato
AC (AR) Trasferisce il risultato in memoria

RI + 1 RI Aggiorna il registro indice

RI = 8 Esegue 8 volte il ciclo

AR + 1 AR La cifra piu' significativa e' il riporto finale

CY (AR)

FINE

figura 145.8.3

Lo schema di flusso delle singole operazioni della routine di somma, riferite alla
struttura circuitale proposta, e' riportata in fig. 14.8.3 mentre in fig. 14.8.4 e' riportato lo
schema a blocchi funzionale del relativo circuito.

DATI Memoria

ALU Memoria

indirizzi dati
CY

MUXA MUXB

RI RC ACC AR

CPU Memoria

figura 14.8.4

386
Si nota immediatamente che in questa struttura circuitale non compare ne' la rete che
decide quando la routine e' terminata, ne' quella che abilita le vie richieste dalle singole
istruzioni. La parte circuitale che si vuol prendere in considerazione e' infatti unicamente
l'unita' di calcolo, mentre di quella di controllo si discutera' piu' avanti.

14.8.1) Unita' di calcolo di un microprocessore.


Un esame appena un po' attento dello schema di fig. 14.8.3 rivela che esso in sostanza
descrive unicamente dei trasferimenti tra registri con un'eventuale trasformazione dei dati da
parte dell'ALU, che e' una rete puramente combinatoria.
Le operazioni piu' comuni eseguite sugli operandi da un'unita' logico-aritmetica sono:

- Somma binaria (con o senza riporto)


- Complementazione
- Incremento (+1)
- Decremento (-1)
- Spostamento verso destra o verso sinistra
- Somma logica bit a bit
- Prodotto logico bit a bit
- OR esclusivo bit a bit
- Confronto

Ciascuna operazione viene scelta sulla base di un opportuno codice. In sostanza l'ALU
puo' eseguire, con una o piu' operazioni elementari, le operazioni scalari e vettoriali descritte
al capitolo X. Cio' significa che la rete di decodifica delle istruzioni, parte del centro di
controllo, deve generare:
1) Codici di operazione per l'ALU.
2) Codici di selezione per i multiplexer.
3) Codici di destinazione dell'operato.
La potenza di un microprocessore e' legata alla liberta' nelle scelta della coppia di
operandi e delle destinazione del dato in uscita. Quest'ultima puo', in linea di principio, essere:
a) L'accumulatore.
b) Uno dei possibili registri interni.
c) La RAM.
d) L'uscita esterna.
In fig. 14.8.5 e' riportato uno schema semplificato dell'unita' di calcolo del micro-
processore INTEL 8080, ormai abbondantemente superato, ma ancora utile a fini didattici.
Si noti che esiste un unico canale dati, in questo caso bidirezionale, su cui i dati
viaggiano nella direzione stabilita dal segnale DBIN. Pertanto sono presenti alcuni registri
temporanei in cui caricare gli operandi prima di utilizzarli.
Altra particolarita' notevole e' il parallelismo 16 del registro degli indirizzi di memoria,
ottenuto unendo due registri H e L da 8 bit.

387
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

BUS DATI

8 bit

BUFFER

ALU
REGISTRI
DI
LAVORO
Registro
Accumulatore
temporaneo

BUFFER
DBIN
Unita' di 16 bit
WR controllo

BUS Indirizzi

figura 14.8.5

La struttura del microprocessore presentata in fig. 14.8.5 e' di uso del tutto generale. Si
vuole intendere con cio' che e' possibile risolvere ogni algoritmo in opportune sequenze di
operazioni elementari di aritmetica e logica binaria. Pertanto programmando opportunamente
le reti interne del microprocessore e' possibile realizzare qualsiasi progetto senza ricorrere a
nessuna altra rete logica se non a registri di staticizzazione. Unica limitazione di
quest'impostazione e' la velocita' operativa, in quanto il microprocessore opera serialmente.
Si ricordi che, come gia' detto, ogni operazione elementare richiede che vengano
specificati operandi, operazione e destinazione dell'operato. Con riferimento ad una struttura
di microprocessore ulteriormente semplificata, in cui oltre all'accumulatore vi sia un unico
registro (fig. 14.8.6) si vogliano ricavare le tavole di verita' dei multiplexer, dell'ALU e quella
per la destinazione del risultato.

uscita

ALU Q
1
-Q
3
CI QA QB CO

Q
4
MUX A MUX B
Q
5

R ACC Q
6

Clock

ingresso

figura 14.8.6

388
L'insieme di bit che compare in queste tavole di verita' verra' detto "microistruzione".
Ad esempio, nella rete di fig. 14.8.6 le operazioni eseguibili dall'ALU sono selezionate se-
condo la tabella di verita' di fig. 14.8.7.
Gli operandi trasferibili all'ALU sono:
- L'accumulatore.
- Il registro R.
- Un ingresso esterno.

Q 1Q 2Q 3 Operazione

000 QA + QB
001 QA - Q B

010 QA + 1

011 Scorrimento

100 QA QB

101 QA U Q B

110 QA + Q B
111 QA

figura 14.8.7

La selezione degli operandi puo' venir fatta con un ulteriore bit Q4 secondo la seguente
tabella.

Q Q Q
4 A B

0 Accumulatore Ing. esterno

1 Registro R Accumulatore

Infine il risultato generato dall'ALU, sempre presente in uscita puo' venir caricato,
utilizzando un ulteriore bit Q5, nell'accumulatore ( Q5 = 1) e/o nel registro R se un sesto bit Q6
vale 1. L'insieme dei bit Q1 - Q6 (microistruzione) deve essere definito ad ogni ciclo macchina
per mantenere il controllo nel flusso delle operazioni ed agisce direttamente sui gate dell'unita'
di calcolo.
Si puo' notare che, rispetto al modello semplificato presentato, le unita' di calcolo dei
microprocessori presenti sul mercato differiscono essenzialmente per il maggior numero di
registri e per la maggior liberta' che si ha nello scegliere tra questi registri gli operandi
dell'ALU.
Si ritorni ora per un momento allo schema di flusso di fig. 14.8.3. L'istruzione

389
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

AC AR CY AC,CY
puo' evidentemente essere eseguita in un unico ciclo macchina. Istruzioni piu' complesse, che
dovessero operare su dati scelti tra memoria, RC e RI (fig. 14.8.5), richiedono piu' di una
microistruzione. Allo stesso modo, con riferimento alla struttura circuitale di fig. 14.8.6,
mentre e' possibile con un'unica microistruzione eseguire operazioni aritmetiche o logiche tra
accumulatore e ingresso esterno, non e' possibile fare la stessa cosa tra registro R e dato di
ingresso.
In questo caso e' necessario risolvere l'operazione in due successive microistruzioni.

1) Dato di ingresso Accumulatore


2) Accumulatore + registro R Accumulatore

Questo semplicissimo esempio permette tuttavia di mettere in evidenza come, pro-


grammando opportunamente una rete logica di semplice struttura, e' possibile risolvere anche
algoritmi complessi.
Vi sono evidentemente approcci alternativi per risolvere il problema di eseguire
operazioni piu' complesse di quelle permesse dalla rete di fig. 14.8.6 con un'unica istruzione.
Un primo modo di operare e' quello di realizzare microprocessori con reti di
"multiplexing" piu' complesse. Si ha in tal modo una scelta maggiore tra gli operandi, ma la
microistruzione diventa piu' complessa in quanto e' necessario un maggior numero di bit di
controllo. I programmi diventano evidentemente piu' semplici in quanto diminuisce il numero
totale di istruzioni. Questa via non puo' tuttavia essere spinta oltre un certo limite; non si puo'
infatti aumentare eccessivamente la complessita' dei dispositivi LSI senza imbattersi in
problemi di integrabilita' e di testabilita' dei circuiti.
Un secondo modo di operare consiste nell'associare al microprocessore (nella sezione di
controllo) una rete di decodifica dei comandi capace di eseguire due o piu' microistruzioni in
sequenza a partire da un unico codice di istruzione. L'esecuzione dell'istruzione (non piu'
microistruzione) coinvolge evidentemente piu' di un ciclo macchina e permette operazioni di
complessita' medio-alta.
L'adozione di sequenziatori sempre piu' complessi e' la soluzione piu' comunemente
utilizzata dai progettisti di microprocessori MOS. In piu' l'introduzione di sequenziatori che
permettono il controllo del flusso dei dati risolve anche il problema del numero di piedini del
dispositivo.
Un microprocessore, che appartiene gia' alla storia di questi dispositivi, ma e' suffi-
cientemente significativo per gli scopi che ci si propone, e', come gia' accennato, l'INTEL
8080. Per tale microprocessore il parallelismi dei dati e' 8, quello degli indirizzi 16, mentre le
istruzioni sono codici da 8 bit. In totale, considerando distinti i dati in ingresso e in uscita, si
hanno in totale 40 segnali. Se ad essi si dovessero aggiungere tutti i segnali di controllo
necessari, il numero di piedini sul chip diverrebbe eccessivo. Si e' pertanto scelta la soluzione
di avere un solo bus dati bidirezionale, la cui direzione di funzionamento e' determinata dalla
stato del sequenziatore interno (fig. 14.8.8).

390
D -D
7 0
bus dati bidirezionale

Buffer / latch del


bus dati
BUS DATI INTERNO

MUX

ACC Reg. TMP FLAG registro istruzioni Reg. temp. W Reg. temp. Z

B C

ACC latch D E
Decodifica istruzioni
ALU H L
e
codifica cicli macchina
Stack pointer

Contatore di programma

INCR/DECR latch indirizzi


corr. dec.

Temporizzazione
e controllo
data bus interr. hold wait control Clock Buffer del bus indirizzi
write control control control

WR INTE HOLD WAIT SYNC


A 10 - A0
DBIN INT HOLD ACK READY RESET 1 2

bus indirizzi

figura 14.8.8

Questo sequenziatore non solo genera i segnali interni per il controllo dei circuiti di
ingresso e di uscita, ma anche quelli per i dispositivi esterni (ad esempio memorie RAM), che
assieme al microprocessore formano il microcalcolatore.
Elaboratori del tipo descritto vengono chiamati "a insieme fisso di istruzioni" in
contrapposizione a quelli microprogrammati, di cui verra' dato in cenno nel seguito.
A titolo di esempio e con riferimento alla fig. 14.8.8 si consideri passo a passo il
trasferimento di un dato dal registro B alla memoria.
All'inizio delle operazioni l'indirizzo dell'istruzione da eseguire e' contenuto in un
registro chiamato "contatore di programma (PC)", mentre l'indirizzo della posizione di me-
moria in cui si vuole trasferire il contenuto del registro B e' contenuto nella coppia di registri a
8 bit H e L.
Gli stati successivi del sequenziatore, coincidenti ciascuno con un ciclo macchina, sono:

T1 .............................................. PC bus indirizzi


T2 ............................................... PC 1 PC
M1
T3 ........... Istruzione(bus dati) registro istruzioni
T4 .......... Registro B Registro temporaneo TMP

T5 ....................................... H, L bus indirizzi


M 2 T6
T7 .......... Registro temporaneo TMP bus dati

391
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Si osservi che:

1) Sono necessari 7 stati per eseguire l'istruzione.


2) Gli stati sono raggruppabili in due "fasi di macchina", ciascuna delle quali
inizia con l'invio di un indirizzo sul bus indirizzi.
3) L'uso di un registro temporaneo, ne' visibile, ne' accessibile al
programmatore, facilita tuttavia la scrittura del programma.
4) Il bus dati viene occupato due volte; una prima volta per trasferire da
memoria a registro istruzioni l'istruzione stessa; una seconda volta per trasferire il
contenuto del registro B alla voluta posizione di memoria. Sono necessari due
tempi T6 e T7 poiche' il dato e' da 16 bit, mentre il bus dati e' da 8 bit.

Il codice di istruzione, ricavabile dalla specifiche dell' 8080, relativo alle operazioni
appena descritte, e' il seguente:

D7 D 6 D5 D 4 D3 D2 D1 D0
0 1 1 1 0 0 0 0
Gli ultimi 3 bit (D2, D1, D0) specificano il registro su cui operare secondo la seguente
tabella.

D D D Registro
2 1 0

000 Registro B

001 Registro C

010 Registro D
011 Registro E
100 Registro H

101 Registro L
110 --------
111 Accumulatore

In generale si puo' affermare che ciascuna microistruzione o istruzione e' suddividibile


in campi, il primo dei quali e' detto "codice operativo" e stabilisce l'operazione da eseguire,
mentre gli altri sono usati per selezionare gli operandi o per il controllo di vie di
comunicazione o di reti interne al microprocessore.
Ritornando ora alla routine di somma, illustrata nel diagramma di flusso di fig. 14.8.3 si
puo' notare che le istruzioni vengono eseguite in sequenza fino al test del registro RI. Il valore

392
successivo del contatore di programma dipende dal risultato del test; quando il contenuto del
registro e' pari a 8 il contatore di programma avanza di un passo, mentre in caso contrario
viene riposizionato all'indirizzo relativo dell'istruzione

0 AR

14.8.2) Unita' di controllo.


Da quanto esposto al paragrafo precedente si deduce immediatamente che per l'unita' di
controllo del programma esistono due modi di funzionamento (fig. 14.8.9):
1) Incremento, eseguito automaticamente ad ogni lettura della memoria di programma.

indirizzo verso la
memoria di programma

registro
clock contatore
di programma

comando multiplexer
selezione

incremento

indirizzo di salto

figura 14.8.9

2) Salto assoluto, eseguito sulla base di un'istruzione e ottenuto con la sostituzione del
contenuto attuale del contatore di programma con l'indirizzo specificato nella relativa
istruzione di salto.
Il salto puo' essere indipendente da condizioni (salto incondizionato) o essere eseguito
solo al verificarsi di determinate condizioni (salto condizionato).
In quest'ultimo caso l'istruzione deve specificare il codice di selezione della condizione
che deve essere verificata affinche' il salto venga eseguito. Tale informazione viene
interpretata dalla rete di decodifica delle istruzioni, che genera il segnale di controllo verso
l'ingresso del contatore di programma (fig. 14.8.10).
Le condizioni di salto C1, C2, .... , Cn sono normalmente memorizzate in un opportuno
registro (flag) e il loro valore dipende dal risultato delle operazioni eseguite nell'ALU.
L'assieme dell'unita' di decodifica delle istruzioni, dell'eventuale sequenziatore che
controlla la temporizzazione delle operazioni elementari necessarie all'esecuzione di un ciclo
di istruzione, dei circuiti destinati all'incremento automatico del contatore di programma e
della rete di verifica delle condizioni costituisce in sostanza l'unita' di controllo del micro-
processore.

393
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Istruzioni dalla
memoria di programma

Registro
istruzioni
Selezione salto incondizionato

Decodifica Comando
istruzioni selezione
Selezione salto
condizionato

Multiplexer

C1 C2 CN

Condizioni di salto

figura 14.8.10

Tale unita' di controllo puo' essere, come gia' accennato, cablata o microprogrammata. Il
metodo classico di progetto associa ad ogni stato di macchina la configurazione di un certo
N
numero N di flip-flop; di conseguenza il massimo numero di stati di macchina e' 2 .
Ogni stato di macchina genera poi dei segnali che si traducono in sequenze di comandi e
in elaborazione dei dati. Lo stato successivo dipende dallo stato attuale, dagli ingressi esterni e
dai risultati delle elaborazioni. I flip-flop di stato e l'interconnessione ricavata avvalendosi di
questa impostazione costituiscono un'unita' di controllo cablata (fig. 14.8.11).
Una struttura di questo tipo implica una notevole rigidita' di progetto e un costo elevato
quando si presenta una qualche necessita' di modifica. E' inoltre necessario contenere il
massimo numero di stati.

comandi verso H/W

Generazione dei comandi

comandi
Flip-Flop di stato
stato attuale

Generazione dello stato


successivo

Condizioni
esterne

figura 14.8.11

394
Sostituendo i flip-flop di stato con un contatore di microprogramma e la rete di ge-
nerazione dell'indirizzo successivo con i circuiti di fig. 14.8.12 (a) e (b) si ottiene un'unita' di
controllo microprogrammata.

Indirizzi

Registro
Controllo indirizzi
del salto
Logica di generazione
dell'indirizzo successivo

Controllo Logica Latch


dei flag di flag LATCH output

input output
FLAG
X - BUS

(a)

Indirizzi memoria R/W dati a memoria R/W

Memoria di
microprogramma N x CPE3002

indirizzi microistruzioni
dati da I/O dati da memoria R/W
3001

(b)

figura 14.8.12

In questo caso il controllo si trova situato nella memoria e ogni modifica di comandi o
di flusso logico della routine si riduce ad una modifica dei codici di operazione residenti nella
memoria di microprogramma.

14.9) Dal microprocessore al microcalcolatore.


Al paragrafo precedente sono state prese in considerazione le strutture interne del
microprocessore, prendendo in esame la configurazione e le funzioni dell'ALU, dei registri,
della rete di decodifica delle istruzioni e dell'unita' di controllo. E' stato inoltre messo in luce
come possono esistere due grandi categorie di microprocessori; quelli con un insieme fisso di
istruzioni e quelli microprogrammati.
Tra i primi, realizzati normalmente in tecnologia MOS, ricadono in pratica tutti i
microprocessori con parallelismo 8 bit, quali l'8085, il 6502 e gran parte di quelli a 16 e 32
bit.
Nella seconda categoria, realizzata per lo piu' in tecnologia TTL-Schottky, sono
compresi normalmente i microprocessori modulari (bit-slice) con cui possono essere realizzati
microcalcolatori veloci con grado di parallelismo qualsiasi.
In ambedue i casi tuttavia la realizzazione di un microcalcolatore richiede
l'interconnessione del microprocessore con tutto un insieme di circuiti ausiliari, quali circuiti

395
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

di memoria, circuiti di ingresso e uscita (I/O), circuiti speciali, quali ad esempio i circuiti di
accesso diretto in memoria. E' quindi evidentemente necessario conoscere quali siano i circuiti
accessori disponibili sul mercato, non solo per minimizzare i costi del progetto, ma anche per
minimizzare l'hardware aggiunto, semplificare il software e rendere piu' affidabile l'intero
dispositivo.

14.9.1) Connessione e organizzazione della memoria.


Fin dall'inizio del presente capitolo sono state prese in esame le principali caratteristiche
degli elementi di memoria disponibili.
Scopo del presente paragrafo sara' quindi quello di dare delle indicazioni di massima su
come la memoria debba venir scelta, anche se la rapidita' con cui i circuiti di memoria si sono
evoluti e tuttora si evolvono verso livelli di integrazione sempre piu' elevati, rende il problema
abbastanza difficile.
Nel progetto di un sistema microcalcolatore la memoria occupa una posizione fon-
damentale. Da un lato essa condiziona il costo dell'intero sistema, dall'altro essa e' indi-
spensabile in quanto il microcalcolatore deve essere controllato da un programma e tale pro-
gramma non puo' che risiedere in memoria.
Tralasciando per il momento i problemi legati alla messa a punto del programma e'
opportuno osservare che e' bene che quest'ultimo sia registrato su un supporto non volatile,
tranne per i calcolatori di tipo "general purpose"; il programma pertanto risiedera' normal-
mente in una memoria di sola lettura (ROM, PROM, EPROM, EAROM).
Per quanto riguarda invece i dati su cui il microelaboratore opera e' necessario viceversa
prevedere una memoria di lettura/ scrittura (RAM statica e dinamica).
Nella sua piu' grossolana rappresentazione il sistema di memoria di un microcalcolatore
puo' essere strutturato come illustrato in fig. 14.9.1.

indirizzi
MICRO
ELABORATORE dati

Registri di controlli
stato
lettura lettura

scrittura

MEMORIA DATI MEMORIA PROGRAMMA


(RAM) (ROM PROM)

figura 14.9.1

E' opportuno notare che, durante lo sviluppo di un programma per un microelaboratore,


la frequenza delle modifiche da apportare passa da un valor massimo iniziale praticamente a
zero quando si e' giunti alla fase finale dello sviluppo. Pertanto e' preferibile usare
inizialmente per la memoria di programma dei dispositivi RAM che emulino la ROM da
montare alla fine dello sviluppo per passare poi a delle EPROM quando la frequenza delle
modifiche tende a diminuire. Solo alla conclusione della fase di progetto il programma potra'
essere riversato su PROM oppure su ROM a maschera, se il volume di produzione deve

396
raggiungere almeno qualche centinaio di esemplari. Infatti una ROM a maschera, come e' gia'
stato fatto notare, diventa economicamente conveniente solo se realizzata in un numero
notevole di esemplari. Disgraziatamente, nella malaugurata ipotesi che si rendesse necessaria
una modifica, la ROM a maschera richiede un notevole impegno economico, non solo per la
realizzazione della nuova maschera, ma anche per il costo degli elementi di memoria
eventualmente gia' acquisiti e presenti a magazzino.
Per quanto riguarda la memoria per i dati si puo' ovviamente scegliere tra memorie
statiche e dinamiche. E' opportuno ricordare che una memoria statica si avvale di una cella
bistabile e mantiene l'informazione per tutto il tempo durante il quale l'alimentazione viene
mantenuta. Nelle memorie dinamiche invece la cella, in cui l'informazione e' accumulata
come carica elettrica, si comporta come un dispositivo monostabile rendendo necessaria
l'operazione periodica di "refresh". Tuttavia grossi vantaggi delle memorie dinamiche nei
confronti di quelle statiche sono:

-- Maggiori dimensioni in bit su singolo "chip", dovute alla maggiore


integrabilita' delle celle dinamiche.
-- Dissipazioni notevolemente inferiori.
-- Minor costo a parita' di dimensioni.

A fronte di questi vantaggi le memorie dinamiche sono mediamente piu' lente di quelle
statiche.
In generale si puo' anzi affermare che la velocita' di un chip di memoria, sia essa statica
o dinamica, diminuisce al crescere delle dimensioni. L'uso dei chip di notevoli dimensioni
permette tuttavia di semplificare i circuiti di decodifica degli indirizzi e la gestione dei banchi
di memoria.
Tuttavia non sono solo la velocita' e le dimensioni a determinare qual'e' il tipo di
memoria da connettere al microelaboratore, ma tutta una serie di altre considerazioni, tra le
quali si possono citare le tensioni di alimentazione, la maniera con cui la memoria viene in-
terfacciata con la CPU e i segnali di controllo necessari. Alcuni di questi punti riguardano
semplicemente la funzionalita' della memoria, altri, quali le tensioni di alimentazione e il
modo di interfacciamento possono avere rilevanti interazioni con i costi.
La massima velocita', cui una memoria puo' funzionare, e' determinata dal tempo di
accesso della memoria stessa, definito come l'intervallo di tempo tra l'istante in cui l'indirizzo
viene presentato e quello in cui il dato voluto e' disponibile. La conoscenza della velocita'
della memoria e' uno degli elementi che permettono di stabilire se le prestazioni di un
microcalcolatore sono tali da soddisfare le specifiche del progetto che si sta sviluppando.
Normalmente non e' necessario che la memoria abbia un tempo di accesso tale da permettere
al microprocessore di funzionare alla massima velocita' possibile; e' possibile nella grande
generalita' dei casi utilizzare circuiti di memoria relativamente lenti, in quanto meno costosi.
In tal caso tuttavia e' necessario rallentare il microprocessore in modo da sincronizzarne il
funzionamento con il ciclo di funzionamento della memoria; tale operazione puo' venir fatta
associando alla memoria un semplice circuito che generi un segnale di "dato pronto" quando
il contenuto della memoria e' sicuramente disponibile. Il microprocessore, dopo aver fornito
l'indirizzo della posizione di memoria da leggere esegue il test di tale segnale e finche' esso
non si presenta rimane in uno stato di attesa (wait state), secondo lo schema illustrato in fig.
14.9.2.

397
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Un meccanismo di tal genere esiste praticamente in tutti i microprocessori attualmente


sul mercato, in quanto permette di utilizzare, ove possibile, dispositivi di memoria piu' lenti e
meno costosi.
Le tensioni di alimentazione assumono una notevole importanza in quanto il costo
dell'alimentatore puo' essere tra i piu' importanti nel progetto di un microcalcolatore. Per
quanto riguarda i microprocessori, siano essi bipolari, MOS o CMOS la tendenza attuale e'
quella di utilizzare un'unica tensione di alimentazione, normalmente di 5 volt.

PC Bus indirizzi T1

PC + 1 PC T2

wait Dato pronto M


1

Istruzione Bus dati T3

T4 T4

H,L Bus indirizzi T1

T2 T2

M
2
wait Dato pronto

Dato Registro A T3

figura 14.9.2

Il discorso si complica quando al microprocessore vengono associati circuiti di memoria


e di interfaccia. In tal caso possono rendersi necessarie diverse tensioni di alimentazione (+5
V, -5 V, +12 V) che complicano il progetto dell'alimentatore, anche se la tendenza odierna e'
quella di passare a dispositivi con un'unica tensione di alimentazione compatibile con quella
del microprocessore usato.
Infine l'interfacciamento tra memoria e microprocessore puo' essere logicamente
suddiviso in tre parti: gli indirizzi, i dati e i controlli. Tuttavia questa suddivisione logica tra i
diversi flussi di informazioni solo in alcuni casi corrisponde ad un'analoga suddivisione fisica
dei relativi canali trasmissivi; solo in alcuni casi cioe' e' nettamente distinguibile un bus per gli

398
indirizzi, uno per i dati e uno per i controlli. Molto spesso infatti lo stesso supporto fisico
viene utilizzato in tempi diversi per la trasmissione di informazioni diverse.
Per quanto riguarda i controlli, il minimo indispensabile e' dato dai segnali di:

-- READ che comanda un'operazione di lettura dalla memoria.


-- WRITE che permette di effettuare un'operazione di scrittura in
memoria.
-- READY cioe' il segnale di dato pronto che permette di sincronizzare le
operazioni tra microprocessore e memoria.

Pertanto la piu' semplice struttura che si possa immaginare per l'interfaccia tra memoria
e microprocessore avra' l'aspetto di quella illustrata in fig. 14.9.3.

indirizzi
read
write

MICRO ready

Dati

Decodifica RAM
chip
indirizzi select

figura 14.9.3

I brevissimi cenni dati sull'organizzazione e l'interconnessione della memoria con il


microprocessore non hanno alcuna pretesa di completezza ne' di sistematicita'; infatti il mondo
dei circuiti di memoria a semiconduttore e' estremamente vario e in rapida espansione, con
l'introduzione quasi quotidiana di nuovi dispositivi. Gia' in questo rapido excursus non si e'
parlato di dispositivi largamente usati, quali le memorie CCD, quelle FIFO, ne' di dispositivi
particolari, quali ad esempio le memorie a doppio accesso. Scopo del presente paragrafo era
tuttavia quello di mettere in luce la necessita' di valutare attentamente tutte le possibili
soluzioni, analizzando attentamente le possibilita' di dialogo tra memoria e microprocessore.
Una buona organizzazione e un corretto modo di indirizzamento della memoria infatti
permettono molto spesso di compensare la maggior lentezza di certi tipi di dispositivi, a
vantaggio dei costi e delle prestazioni complessive del microcalcolatore.

14.9.2) I circuiti di I/O.


I circuiti di I/O collegano il microcalcolatore con il modo circostante e pertanto, in
relazione alla molteplicita' delle applicazioni possibili, essi sono specializzati per ogni singola
applicazione, malgrado che trovino impiego in un ambito in cui l'hardware e' del tutto
generalizzato.

399
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Le interfacce del microcomputer vanno ottimizzate, sia per ragioni di costo com-
plessivo, sia perche' il microcalcolatore trova molto spesso i suoi limiti dinamici proprio nelle
operazioni di I/O.
A differenza del microprocessore, campo di applicazione incontrastato di tecnologie
LSI, la periferia richiede frequentemente un largo impiego di parti MSI/SSI; tuttavia per al-
cune applicazioni, ricorrenti in un numero molto elevato di progetti, sono stati realizzati cir-
cuiti LSI di input/output (porte di I/O) che hanno permesso di risolvere allo stesso tempo
problemi sia di hardware che di software. Tali componenti sono andati ad arricchire le varie
famiglie di microprocessori, rendendo possibile realizzare un microcalcolatore avvalendosi di
blocchi funzionali appartenenti tutti alla stessa famiglia.
Si ricordi che tutti i microcalcolatori sono organizzati attorno a tre bus, detti rispet-
tivamente dei dati, degli indirizzi e dei controlli.
Nelle configurazioni piu' semplici tutti gli scambi di informazioni tra mondo esterno e
memoria avvengono tramite il microprocessore, al quale viene riservato il controllo di tutti i
bus. Nelle configurazioni piu' complesse invece anche gli organi di I/O possono assumere il
controllo dei bus e trasferire dati direttamente dalla/alla memoria. In ogni caso i dati viaggiano
sul bus dei dati mentre sul bus degli indirizzi, oltre agli indirizzi delle locazioni di memoria
interessate all'operazione, viene inviato il codice di selezione della porta di I/O utilizzata e sul
bus controlli compaiono i segnali essenziali necessari al funzionamento della porta.
Come struttura, sia pure estremamente semplificata, le porte di ingresso possono essere
ridotte a buffer con uscita ad alta impedenza (3-state) e quelle di uscita a registri (latch); la
selezione della porta voluta richiede una rete di decodifica degli indirizzi, mentre la porta
stessa viene attivata da segnali di controllo, che possono essere gli stessi segnali
READ/WRITE utilizzati per la lettura/scrittura in memoria. Tutte le porte MSI/LSI hanno poi
la possibilita' di generare un "interrupt" verso il microprocessore.
I piu' comuni circuiti di input/output sono:
1) Circuiti per la trasmissione e la ricezione seriale dei dati che possono funzionare sia
in modo asincrono (UART) sia sincrono/asincrono (USART). La velocita' di trasmissione e di
ricezione e il formato dei dati sono generalmente programmabili da software e in trasmissione
viene aggiunto in modo automatico un eventuale bit di parita' e uno o piu' bit di stop, mentre
in ricezione vengono controllati vari tipi di errore. L'estrema semplicita' di uso e la notevole
complessita' delle funzioni eseguite fanno si' che i dispositivi UART/USART siano i
dispositivi di interfaccia piu' usati, in quanto l'unico compito lasciato al progettista del sistema
e' quello di ottimizzare le procedure di trasmissione.
2) Circuiti di interfaccia parallela programmabili, che permettono la trasmissione di un
completo byte allo stesso tempo da/verso un'unita' periferica. Oltre ai bit del dato sono
ovviamente presenti un certo numero di segnali di controllo che permettono di governare il
flusso di informazioni tra periferia e calcolatore. Le varie linee di comunicazione con la
periferia possono essere programmate in vario modo; ad esempio come "ingressi" o come
"uscite", oppure come segnali di controllo del flusso informativo. La programmazione e'
molto spesso individuale per ciascun bit e si puo' ottenere addirittura una procedura di
colloquio "hand-shaking" in modo automatico. La procedura di caratterizzazione del
funzionamento di una porta parallela viene normalmente fatta durante la fase di
inizializzazione del microcalcolatore. Non e' possibile dare altri dati generali su questo tipo di
porta, in quanto molte delle loro caratteristiche sono intimamente legate alle caratteristiche del
microprocessore alla cui famiglia appartengono.

400
3) Altri circuiti LSI disponibili per operazioni di I/O piu' sofisticate sono le memorie
FIFO e il DMA controller. Le memorie FIFO (First In-First Out) permettono di risolvere i
problemi di sincronizzazione nella trasmissione parallela, diventando una coda d'attesa in cui i
dati entrano quando si rende disponibile un posto ed escono quando vengono richiesti
dall'utilizzatore. Si rivelano particolarmente adatte per la gestione di periferiche quali le
stampanti in quanto permettono una notevole semplificazione del software e riducono il
tempo di occupazione della CPU, necessario alle operazioni di stampa.
Il DMA (direct memory access) permette lo scambio di dati tra memoria e unita'
periferiche senza l'intervento del microprocessore. Tutta l'operazione di trasferimento e quindi
tutti i bus del microcalcolatore sono completamente controllati dal DMA controller, mentre il
microprocessore e' temporaneamente in stato di attesa (HOLD). Vantaggio di un tal modo di
operare e' la notevole accelerazione delle operazioni di trasferimento.
Prima di dare il via alle operazioni del DMA e' necessario che il microcalcolatore
fornisca tre parametri: l'indirizzo di memoria da/in cui iniziare a trasferire i dati, la lunghezza
del blocco di dati da trasferire e il codice identificativo della porta di I/O da usare.
Si noti che con l'introduzione del DMA controller il microprocessore perde la sua
funzione centrale nel microcalcolatore, ma diventa assieme alle porte di I/O uno degli utenti
dei bus e della memoria.
Un dato di fatto e' che comunque i circuiti di I/O evolvono verso strutture complesse,
anche se la nascita di circuiti LSI per risolvere problemi di interfaccia con il mondo esterno e'
determinata dal mercato, cioe' dal numero di potenziali clienti. Essi tuttavia sono la strada che
permette di risolvere certi conflitti di tempo nell'ambito del software, determinati dalle
"ridotte" prestazioni dinamiche dei microprocessori.
La scelta tra una soluzione hardware e una soluzione software dello stesso problema di
I/O e' tuttavia di solito determinata da una valutazione dei costi: costi di sviluppo, dei
componenti LSI, dei bit di memoria ROM necessari in relazione alle prestazioni complessive
del progetto.
La tendenza che tuttavia gia' da diversi anni si e' delineata e che sembra essere una
strategia vincente e quella di trasferire un gran numero di funzioni dal software all'hardware,
anche se tale tendenza sembra essere stranamente in contrasto con le esigenze che hanno
portato alla nascita e allo sviluppo dei microprocessori.
E' infine necessario osservare che chi intendesse progettare con elementi LSI, tra cui
anche microprocessori, deve non solo possedere le necessarie competenze nell'ambito
dell'hardware e del software, ma anche avere la necessaria visione sistemistica che gli per-
metta di interconnettere blocchi logici di notevole complessita', quali le parti LSI, avendo
tuttavia come obiettivo finale l'ottimizzazione dell'intero progetto.

14.9.3) I supporti software e hardware.


Come gia' accennato, lo sviluppo di un progetto con microprocessori richiede nuovi
metodi e nuovi strumenti di lavoro rispetto a quelli correntemente usati nei tradizionali pro-
getti di circuiti di commutazione.
Infatti gran parte dello sviluppo hardware tradizionale viene eliminato del fatto che e' lo
stesso microprocessore che genera i segnali di indirizzo, i dati e i segnali di controllo con
modalita' di durata, forma e livello logico che sono stati determinati a priori dal costruttore. La
stessa standardizzazione delle interfacce verso la memoria e verso il mondo esterno riduce in
misura considerevole la possibilita' di errori di interconnessione tra le diverse parti, che d'altra
parte sono sempre in numero ridotto.

401
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Il progetto e' caratterizzato in buona misura dalla messa a punto di un programma da


inserire nelle memorie ROM; sono pertanto molto piu' frequenti errori determinati da errate
sequenze di istruzioni che non errori circuitali veri e propri.
Di conseguenza l'uso di oscilloscopio, generatori di segnali, analizzatori di stati ecc.
deve venir integrato con l'uso di nuovi strumenti sia hardware che software che permettano la
verifica, nella sua totalita', della correttezza del dispositivo realizzato.

Supporti software di progetto.


Lo sviluppo di una qualsivoglia routine per un sistema a microprocessore richiede
innanzitutto la conoscenza circuitale del sistema su cui la routine stessa deve lavorare. Per
quanto riguarda le parti circuitali esterne al microcalcolatore e' necessario conoscere la fun-
zione di ciascun segnale dell'interfaccia, il suo valore logico e le relative temporizzazioni. Per
quanto riguarda il microprocessore e' necessario definire a priori:

1) L'indirizzo iniziale della memoria ROM in cui verra' registrato il


programma.
2) Gli indirizzi della memoria RAM disponibile per i dati.
3) Gli indirizzi delle porte di I/O interessate ad operazioni di trasferimento
di dati.

Quando l'hardware e' completamente definito risultano definiti anche i codici di


istruzione in binario. Questo fatto, ovvio per i microprocessori ad insieme fisso di istruzioni,
non lo e' altrettanto per i microprocessori "bit slice" in cui al progettista rimane la liberta' di
definire le istruzioni sulla base delle microistruzioni disponibili.
Risultano inoltre definiti anche gli indirizzi della memoria e delle porte di input/output e
le eventuali maschere per il test e l'elaborazione dei singoli bit.
L'insieme di tutti questi codici binari costituisce il linguaggio macchina ed e' in questo
linguaggio che deve venir realizzato qualsiasi programma (programma oggetto) per il
microprocessore, indipendentemente da quale sia il punto di partenza del processo di svi-
luppo.
E' abbastanza evidente che lo sviluppo di una routine direttamente in linguaggio
macchina e' un procedimento difficile e scarsamente efficace; normalmente il programma
viene scritto in un linguaggio composto da simboli mnemonici in corrispondenza biunivoca
con i codici del linguaggio macchina. La programmazione in tale linguaggio simbolico e' piu'
semplice e nettamente piu' efficiente; il programma inoltre risulta piu' facilmente leggibile e
interpretabile.
Evidentemente il programma simbolico, per poter essere utilizzato sul microcalcolatore
deve venir tradotto in linguaggio macchina per mezzo di un opportuno programma di
traduzione detto ASSEMBLATORE (ASSEMBLER).
Generalmente i costruttori forniscono il linguaggio Assembler per i microprocessori a
insieme fisso di istruzioni. Per quelli microprogrammati vengono forniti i cosiddetti linguaggi
microassemblatori che possono essere personalizzati a seconda delle necessita', definendo
nuovi codici di istruzione allo stesso modo in cui tale operazione e' possibile in campo
hardware.
Comunque sia il linguaggio Assembler e' uno dei supporti software fondamentali per lo
sviluppo dei programmi; piu' precisamente e' possibile operare una distinzione tra linguaggi
assembler veri e propri, cioe' quei traduttori utilizzati su calcolatori (o microcalcolatori) che

402
hanno lo stesso linguaggio macchina del programma oggetto realizzato e transassembler, cioe'
quei traduttori utilizzati su calcolatori con linguaggio macchina diverso da quello del
programma oggetto prodotto.
Quest'ultima impostazione permette di sviluppare i programmi su calcolatori propri o di
facile accesso, ma ha tuttavia il difetto che l'unica verifica possibile e' quella della correttezza
formale del programma prodotto. Non e' infatti possibile eseguire un controllo in tempo reale
del programma prodotto in quanto il calcolatore utilizzato per lo sviluppo e quello cui il
programma e' destinato sono affatto diversi e comunque le loro temporizzazioni non
coincidono.
L'impiego di linguaggi assembler propriamente detti, attraverso l'utilizzo di opportuni
sistemi di sviluppo per microprocessori, appare attualmente la soluzione piu' attraente e
completa.
Nello sviluppo di un programma tuttavia e' necessario disporre di altri strumenti che non
semplicemente l'assembler per consentire un lavoro semplice e ordinato. Tra essi possono
essere citati come elementi pressocche' essenziali il Monitor, il Sistema operativo, l'Editor e i
Compilatori. E' opportuno per ciascuno di questi moduli dare un cenno delle principali
funzioni svolte.
1) Il Monitor e' un programma, che puo' venir definito come la versione piu' ridotta ed
elementare di un sistema operativo. Esso consente le seguenti operazioni:

- Inizializzare il sistema;
- Caricare in memoria programmi da un organo di input;
- Visualizzare il contenuto dei vari registri;
- Modificare il contenuto della memoria e dei registri;
- Eseguire programmi residenti in memoria.

Il monitor e' il minimo indispensabile per poter operare nella messa a punto del software
di un microcalcolatore. Molto spesso tuttavia i sistemi specializzati per lo sviluppo di tale
software sono dotati di unita' di memoria di massa, quali floppy disk, su cui sono registrati sia
i programmi, che via via vengono messi a punto, sia gli strumenti software che durante tale
processo potessero rendersi necessari.
2) Il Sistema Operativo e' un insieme di moduli costituenti un programma complesso
che, oltre a svolgere le funzioni gia' descritte per il Monitor, permettono la gestione degli
archivi su disco e il colloquio con il modo esterno in maniera ben piu' raffinata di quanto il
Monitor non consenta.
3) L'Editor e' un modulo che permette di stendere e memorizzare successivamente su
disco i programmi necessari allo sviluppo del progetto, utilizzando istruzioni in un opportuno
linguaggio simbolico. Oltre alla possibilità di creare un testo ex novo, l'Editor permette
evidentemente anche la correzione e la modifica di testi precedentemente memorizzati,
inserendo o cancellando caratteri, parole o righe, ricercando o sostituendo sequenze di
caratteri e infine memorizzando su un supporto permanente il risultato di tali operazioni.
4) Il programma simbolico (programma sorgente) messo a punto con l'Editor viene poi
tradotto in programma oggetto con l'uso del linguaggio assemblatore, se il linguaggio
simbolico utilizzato e' l'Assembler del microprocessore per cui si sta sviluppando il software,
o utilizzando traduttori, chiamati in tal caso compilatori, a piu' alto livello, quali i compilatori
FORTRAN, PASCAL, C, PLM ecc.

403
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

In tal caso tuttavia si perde la corrispondenza biunivoca tra istruzioni del linguaggio
sorgente e istruzioni in linguaggio macchina, nel senso che un programma, di un certo numero
di istruzioni, scritto in un linguaggio sorgente che non sia l'Assembler puo' dar luogo a un
programma oggetto che contiene un numero di istruzioni nettamente superiore.

definizione dei codici


Scelta del sistema
simbolici
(indirizzi parametri) di sviluppo

Inizializzazione del sistema tramite


MONITOR

Costruzione del programma


sorgente tramite EDITOR

Traduzione tramite ASSEMBLER

Gestione dell'archivio tramite


FDOS

Simulazione e debugging del


programma mediante MONITOR
o simulatore

si
ERRORI

no
SISTEMA DEFINITIVO

figura 14.9.4

I passi successivi necessari allo sviluppo del software applicativo di un microcalcolatore


ed i programmi di base utilizzati sono illustrati in linea di massima in fig. 14.9.4.

Supporti Hardware di progetto.


Durante la messa a punto dei programmi con l'utilizzo dei supporti software appena
descritti e' necessario provare il software dopo ogni correzione, possibilmente assieme
all'hardware del progetto. Nel caso cio' non fosse possibile, soprattutto se per lo sviluppo non
ci si avvale di sistemi specializzati, si puo' ricorrere a simulatori.
Tuttavia anche quando si puo' sottoporre a test contemporaneamente hardware e
software del progetto, non e' pensabile di utilizzare delle memorie ROM per farvi risiedere il
programma messo a punto. E' necessario infatti disporre di una memoria di programma che sia
facilmente correggibile per poter apportare rapidamente le modifiche necessarie; le memorie
ROM vengono utilizzate solo quando il progetto e' consolidato.
Un utile sistema di memoria di lettura/scrittura che viene utilizzato in questa fase e'
l'emulatore di ROM, il cui schema di massima e' riportato in fig. 14.9.5.

404
L'emulatore e' realizzato con memorie RAM, ma gli indirizzi possono venir generati sia
dal microprocessore del sistema progettato (in fase di lettura) che dalla logica di governo del
sistema di sviluppo (in fase di scrittura).
Opportuni organi di input e output permettono sia un facile caricamento dei programmi
in memoria che un'agevole verifica dei contenuti di quest'ultima in qualsiasi momento.
Poiche' l'emulatore di ROM e' realizzato con memorie a lettura/scrittura esso puo' venir
impiegato per realizzare in fase di messa a punto tutta la memoria del microcalcolatore, con il
vincolo che sia rispettata un corretta decodifica degli indirizzi.

dati
Micro indirizzi
controlli
elaboratore

M
U read Dati
L
T
I MEMORIA
P
L
E
X
R/W
indirizzi
E
R
write Dati

GOVERNO

INGRESSO USCITA
(TTY, schede) (TTY, CRT)

figura 14.9.5

Quando poi il programma e' stato sufficientemente verificato, esso viene trasferito su
memorie che permettono la verifica del sistema in forma definitiva; potrebbe infatti essere
rischioso trasferire un programma direttamente dall'emulatore di ROM alle ROM stesse. Si
preferisce di solito fare ricorso a memorie EPROM compatibili pin to pin con le ROM scelte
per il progetto.
Si fa notare che durante la fase di messa a punto di un programma possono presentarsi
due esigenze, apparentemente antitetiche:
1) Si vuole che il programma venga eseguito passo a passo in modo da poter seguire in
modo dettagliato il suo evolvere, come nel caso di algoritmi matematici, controllo di segnali
statici, ecc. E' evidente che in tal caso la logica del sistema di sviluppo deve prevedere tale
possibilita' e la periferia del microcalcolatore deve permettere tale tipo di funzionamento.
2) Il programma messo a punto prevede il controllo di un processo che non permette il
funzionamento passo a passo. E' allora difficile capire quali sono le routines eseguite dal
sistema, che in un secondo esegue per lo meno 104-105 istruzioni. Si ricorre in tal caso ad uno
strumento, il tracciatore, che memorizza gli indirizzi generati nel Contatore di Programma, in
modo che possa essere ricostruito il cammino percorso. Il tracciatore non e' altro che una
memoria lettura/scrittura sincronizzata con l'evoluzione del contatore di programma.

405
Ô» ³»³±®·» » · ³·½®±°®±½»--±®·
Ý¿°·¬±´± ïì

Non e' ne' utile ne' conveniente avere una memoria di tracciamento di rilevanti
dimensioni; e' spesso sufficiente memorizzare qualche decina di istruzioni per avere le
informazioni sufficienti alla correzione di un programma. E' tuttavia necessario stabilire
quando iniziare e quando terminare il tracciamento e quindi il tracciatore deve essere dotato di
opportune logiche di confronto di indirizzi e di riconoscimento di stati. Sempre con queste
logiche e' possibile impostare dei "break-point" in cui arrestare l'esecuzione del programma
per procedere a delle verifiche.

406
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

APPENDICE A

CALCOLO DI VERITA' E ALGEBRA


BOOLEANA
a.1) Introduzione.
Si e' gia' visto al capitolo II cosa si intenda per algebra booleana e come essa possa
essere adattata allo studio dei circuiti di commutazione. In tale sede tuttavia, piu' che intro-
durre l'algebra booleana, ne sono stati presi in esame quei risultati che tornano utili nell'analisi
e nella sintesi di circuiti digitali, senza alcuna pretesa di rigore formale. Nella presente
appendice pertanto verra' ripreso l'argomento con una maggior attenzione per quanto riguarda
un suo inquadramento sistematico.
Prima di procedere tuttavia ad una definizione formale dell'algebra e' opportuno
prendere in considerazione il seguente semplice esempio.
Si voglia realizzare un sistema di allarme per le cinture di sicurezza degli autoveicoli. Vi
sia una serie di sensori atti a misurare le condizioni del sistema; un primo sensore sia piazzato
sul cambio per accorgersi se esso sia in folle o meno; un interruttore sia posto sotto ciascun
sedile anteriore ed infine ciascuna cintura sia dotata di un interruttore che da' l'informazione se
essa e' allacciata o meno. Le specifiche di progetto siano:
" Un cicalino deve suonare quando l'accensione e' attivata, il cambio e' innestato e
almeno uno dei due sedili anteriori e' occupato senza che la relativa cintura sia
allacciata.
Il problema e' sufficientemente semplice per poter essere risolto con metodi di progetto
semiempirici. E' tuttavia opportuno procedere attraverso un'analisi formale delle specifiche
assegnate, metodo che d'altra parte e' l'unico praticabile quando si ha a che fare con sistemi
piu' complessi.
Le grandezze delle specifiche di progetto possono essere listate come segue:

Suono del cicalino A


Accensione attivata I
Cambio innestato G
Sedile anteriore sinistro occupato L
Sedile anteriore destro occupato R
Cintura sinistra allacciata Bl
Cintura destra allacciata Br

A ciascuna grandezza viene cioe' associata una variabile, rappresentativa della


grandezza stessa, che puo' assumere un valore di verita' T o F a seconda che la condizione
espressa sia vera o falsa.
In generale si definira' con una variabile qualsiasi dichiarazione che possa essere
classificata come vera o falsa.

407
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

Il metodo che permette di manipolare queste variabili e di assegnare ad esse un valore


di verita' e' conosciuto come calcolo funzionale di verita' e non si limita alla manipolazione
di grandezze semplici come quelle appena introdotte.
Si puo' osservare come prima cosa che per ogni affermazione positiva esiste una
corrispondente formulazione negativa. Ad esempio:

La cintura sinistra non e' allacciata B1

Poiche' B1 e' vera quando Bl e' falsa e viceversa, essa viene chiamata la negazione di Bl
(spesso la negazione di A viene indicata simbolicamente con ~ A o con A').
Si consideri ora la proposizione:

"La cintura di sinistra non e' allacciata e il sedile anteriore sinistro e'
occupato"

B1 L

E' questa una funzione composta di verita' o affermazione composta, il cui valore di
verita' puo' essere determinato a partire dalle proposizioni componenti. Le esatte relazioni tra i
valori di verita' delle affermazioni componenti e il valore di verita' dell'affermazione composta
dipende dalla connessione (o connettivo) esistente tra le parti componenti. Nel caso in esame
il connettivo e l'AND e indica che la proposizione Bl L e' vera se e solamente se le
proposizioni elementari Bl e L sono ambedue vere. L'AND e' una relazione molto comune tra
le proposizioni e viene rappresentata con il simbolo (che d'altra parte e' gia' stato ado-
perato).
Vi sono evidentemente solo quattro possibili combinazioni di valori di verita' di due
proposizioni A e B. Si puo' pertanto definire completamente la proposizione composta A B
riportando i suoi valori di verita' in una tabella di quattro righe, come illustrato in fig. A.1.1;
tale tabella prende il nome, evidente in se stesso, di tavola di verita'.

A B A B A B
A B

F F F F F
F T F T T
T F F T T
T T T T F

figura A.1.1

La tabella definisce anche il connettivo A B che simbolizza una proposizione che e'
vera quando l'una o l'altra o ambedue le proposizioni elementari sono vere.
Il relativo connettivo potrebbe essere chiamato OR, ma l'uso comune della parola "o"
non e' sempre in accordo con la proposizione A B. Si consideri infatti l'affermazione:

"Giorgio usa vestiti grigi o azzurri"

408
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

E' evidente che tale affermazione non significa che Giorgio usi contemporaneamente
vestiti grigi e azzurri. Nel caso che si sta esaminando pertanto il connettivo prende il nome di
OR ESCLUSIVO e viene rappresentato con A B. La relativa tavola di verita' e' riportata
nell'ultima colonna di fig. A.1.1.
Il connettivo viene per contrasto chiamato OR INCLUSIVO, ma molto spesso, in
relazione al suo frequentissimo uso, lo si chiama semplicemente OR.
Prima di passare al calcolo funzionale di verita' del problema che si sta esaminando, si
puo' poi definire un altro connettivo, il cui simbolo e' . A B sta a indicare che A e B
hanno sempre lo stesso valore di verita', cioe' A e' vero se e solo se B e' vero. La relativa
tavola di verità e:

A B A B

F F T

F T F

T F F

T T T

figura A.1.2

Si possono ora rappresentare le specifiche di progetto del sistema in esame con


un'equazione funzionale di verita'. E' tuttavia opportuno rimanipolare tali specifiche in termini
di proposizioni semplici:

"L'allarme suonera' (A) se e solo se l'accensione e' attivata (I) e il cambio e'
innestato (G) e il sedile anteriore sinistro e' occupato (L) e la cintura sinistra non e'
allacciata ( Bl ) oppure il sedile anteriore destro e' occupata (R) e la cintura destra
non e' allacciata ( Br )."

A partire da tali specifiche si puo' scrivere facilmente l'equazione funzionale di verita'.


Si ottiene:
A I G L Bl R Br
Il progetto a questo punto non e' certamente terminato, ma e' stato possibile trasformare
le specifiche in una forma compatta, non ambigua ed atta a manipolazioni matematiche.
Si noti tuttavia che il progettista deve esprimere le specifiche in forma di proposizioni
messe in relazione tra di loro da connettivi ben specificati e non tutte le proposizioni
dichiarative sono tali. Ad esempio:

"L'allarme e' suonato poiche' la cintura destra non era allacciata."

409
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

non e' una funzione composta di verita' poiche' il suo valore di verita' non puo' essere de-
terminato unicamente a partire a partire dal valore di verita' delle singole proposizioni com-
ponenti. Infatti, anche se ambedue le componenti sono vere, la proposizione composta puo'
non essere vera in quanto il sedile destro potrebbe non essere occupato. In tal caso la parte
destra dell'affermazione composta e' vera, ma l'allarme potrebbe essere stato attivato dal
conducente che non ha allacciato la cintura di sicurezza. Un'affermazione del tipo appena
visto non puo' evidentemente essere manipolata tramite il calcolo funzionale di verita'.

a.2) I connettivi binari.


I connettivi definiti nelle tabelle di fig A.1.1 e A.1.2 sono chiamati binari in quanto si
riferiscono unicamente a due proposizioni semplici. Ciascun connettivo binario corrisponde
ad un'assegnazione (unica) dei valori di verita' alle quattro righe della relativa tavola di verita'.
Poiche' vi sono 16 modi diversi con cui si possono assegnare i valori di verita' alle quattro
righe, esisteranno 16 connettivi, che sono riportati in fig A.2.1 assieme ai loro relativi simboli.

A B 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
F F F F F F F F F F T T T T T T T T
F T F F F F T T T T F F F F T T T T
T F F F T T F F T T F F T T F F T T
T T F T F T F T F T F T F T F T F T

figura A.2.1

Tra questi vari connettivi, particolare interesse ha quello 13

A B
che corrisponde alla proposizione composta

"se A e' vero, allora B e' vero"

ed e' chiamato implicazione. Questo connettivo e' simile a quello "se e solamente se"
introdotto al paragrafo precedente (connettivo 9), eccetto per il fatto che B non e'
necessariamente falso se A e' falso.
Si consideri ad esempio la proposizione composta:

2 x 1 x 0 (a.2.1)

Se x=0.5 la proposizione x>0 e' certamente vera, mentre la proposizione 2>x>1 e' falsa.
Non vi e' tuttavia contraddizione con la proposizione (a.2.1) nel suo complesso, che e' vera
come e' stato definito nella tabella di fig. A.2.1. Il valore di verita' dell'implicazione (che

410
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

spesso e' anche detta if - then) puo' a prima vista apparire non molto naturale, ma questo
concetto e' necessario in molti argomenti matematici. E' tuttavia bene puntualizzare che la
distinzione tra il connettivo "implicazione" e quello "se e solamente se" e' estremamente
importante. E' necessario infatti che:

A B e B A (a.2.2)

affinche' A B. Cioe':

A B A B B A (a.2.3)

La dimostrazione e' immediata e si puo' ottenere manipolando e confrontando le ri-


spettive tavole di verita'.

A B A B A B B A A B (A B) (B A) A B
F F T F F T F F T T
F T T F T T F T F F
T F F T F F T F F F
T T T T T T T T T T

Poiche' compito del progettista e' quello di tradurre in una forma matematica precisa
specifiche espresse in linguaggio naturale , e' necessario tener presente che nell'uso normale
del linguaggio l'espressione "se ..... , allora ..." viene molto spesso usata con il significato di "
se e solamente se ........ , allora …".
Ad esempio una proposizione espressa in modo improprio potrebbe essere:

"Se l'interruttore e' chiuso, allora l'uscita del circuito e' di 5 volt"

che piu' correttamente dovrebbe venir scritta:

"L'uscita del circuito e' di 5 volt se e solamente se l'interruttore e'


chiuso"

Ancora di particolare interesse sono i connettivi 8 e 14, esprimibili come:

A B A B (a.2.4)
e

A B A B (a.2.5)
detti rispettivamente NAND e NOR.

a.3) Valutazione delle funzioni di verita'.


Sulla base di quanto visto ai paragrafi precedenti si possono ora prendere in consi-
derazione proposizioni complesse realizzate con piu' di un connettivo. Si supponga, ad
esempio, di voler determinare il valore di verita' della proposizione:

411
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

A A B (a.3.1)
nel caso in cui sia A che B siano false. Rimpiazzando nella (a.3.1) i rispettivi valori si ottiene:
F F F T T T (a.3.2)
L'implicazione, definita in fig. A.2.1, e' vera quando ambedue le proposizioni elementari
sono false. pertanto F F puo' essere sostituita dal valore T. Finalmente due proposizioni
vere collegate dal connettivo OR producono ancora un valore vero (T), completando in tal
modo la valutazione dell'espressione (a.3.2).

il valore di verita' delle espressioni sui due lati di tale simbolo hanno lo stesso valore di
verita'. Per le tre rimanenti combinazioni di valori di A e di B l'espressione (a.3.1) e' poi
valutata nella tabella di fig. A.3.1.

A B A A B A U (A B) AUB

F F T T T T
F T T T T T
T F F F F F
T T F T T T

figura A.3.1

Si noti che in ciascuna riga il valore di verita' coincide con quello definito per la
proposizione A B. Si puo' quindi scrivere che:

A A B A B (a.3.3)

Si osservi inoltre l'uso delle parentesi nella (a.3.1). In loro assenza la relativa
espressione potrebbe venir interpretata come:

A A B (a.3.4)

i cui valori di verita', diversi da quelli della (a.3.1) sono riportati in fig. A.3.2.

A B A AUB (A U A) B B

F F T T F F
F T T T T T
T F F T F F
T T F T T T

figura A.3.2

Dall'osservazione di tale tavola di verita' si puo' concludere che:

412
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

A A B B

L'uso delle parentesi e' evidentemente essenziale per la comprensione delle espressioni.
Una qualsiasi espressione realizzata a partire da due proposizioni mediante l'uso di un
qualsiasi numero di connettivi binari e di parentesi, che stabiliscono in maniera univoca
l'ordine delle operazioni, puo' sempre essere ridotta ad una lista di quattro valori di verita' che
corrispondono a ciascuna combinazione di valori di A e B. Poiche' in fig. A.2.1 sono riportate
tutte le 16 possibili funzioni di due variabili, l'espressione originale, per quanto complessa,
potra' sempre essere rimpiazzata da un'espressione in cui A e B sono legati da un singolo
connettivo binario.

a.4) Proposizioni composte.


Si consideri la proposizione:

Z H R D H R D (a.4.1)
L'analisi della relativa tavola di verita' si distingue da quelle condotte negli esempi del
paragrafo precedente solo in quanto il numero di righe necessarie non e' quattro, ma otto.
Essa, derivata dai valori di verita' dell'espressione (a.4.1), e':

H R D R H R (H R) D H R H RUD

F F F T F T T T
F F T T F T T T
F T F F F T T T
F T T F F T T T
T F F T T F F F
T F T T T T F T
T T F F F T T T
T T T F F T T T

figura A.4.1

Con riferimento alla fig. A.2.1 si puo' immediatamente verificare che:

A B A B

e quindi segue immediatamente che:

Z H R D H R D

La validita' di quest'ultima espressione e' dimostrata anche in fig. A.4.1, in quanto le due
tavole di verita' coincidono. Tuttavia l'ultima espressione ricavata utilizza i soli connettivi

413
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

e NOT. Si puo' dimostrare che qualsiasi proposizione composta, formata da un numero


qualsiasi di proposizioni elementari, puo' essere espressa in ogni caso sulla base di questi tre
soli connettivi binari.

a.5) Insiemi sufficienti di connettivi.


Nei paragrafi precedenti si e' visto che alcuni connettivi binari possono essere espressi
sulla base di vari altri connettivi. Si presenta quindi spontanea la domanda di quale sia
l'insieme piu' piccolo di connettivi che permette di esprimere tutte le 16 funzioni di fig. A.2.1.
Si consideri ad esempio l'insieme dei connettivi che contiene solo e . I casi in cui sia
A che B sono falsi e' chiaramente critico. Infatti sia A B che A B sono ambedue falsi e
quindi sulla base di questi due connettivi non possono essere espressi quelli che per valori
falsi di A e B assumono valore vero (la dimostrazione formale puo' essere compiuta per via
induttiva).
Si supponga ora che all'insieme precedente venga aggiunto il connettivo NOT.
L'intuizione che qualsiasi funzione possa ora essere espressa sulla base di questi tre soli
connettivi e' corretta. E' sufficiente determinare i valori di verita' delle funzioni di fig. A.5.1 e
confrontarli con quelli dei connettivi di fig. A.2.1.

f0 A A f8 A B

f1 A B f9 A B A B

f2 A B f 10 B

f3 A f11 A B
f4 B A f12 A

f5 B f13 A B
f6 A B A B f14 A B

f7 A B f15 A A

figura A.5.1

Esistono tuttavia insiemi sufficienti di connettivi ancora piu' ridotti; sia quello AND,
NOT che quello OR,NOT sono sufficienti. Infatti:

A B A B A B A B
Per esprimere facilmente le proposizioni complesse d'altra parte e' piu' conveniente fare
riferimento all'insieme AND, OR, NOT.

414
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

a.6) L'algebra booleana.


Quando si rende necessario costruire una realizzazione fisica di una tavola di verita' e'
altamente desiderabile che cio' sia fatto a costo minimo. E' possibile verificare che un
determinato circuito realizza una specifica tavola di verita' esaminandone l'uscita in corri-
spondenza a ciascuna combinazioni di ingressi e in modo del tutto simile si puo' verificare se
due funzioni sono equivalenti. Il calcolo di verita' tuttavia non fornisce una via praticabile per
la ricerca della piu' conveniente realizzazione di una data funzione.
A questo scopo e' conveniente introdurre l'algebra booleana. L'insieme piu' conveniente
di postulati per un'algebra booleana e' forse quello formulato da Huntington nel 1904.
Il primo postulato serve a definire il sistema sotto esame.

POSTULATO 1
Esiste un insieme di K oggetti o elementi, soggetti ad una relazione di equivalenza
indicata con "=" che soddisfano il principio di sostituzione.
Una coppia ordinata di elementi (x,y) si dicono soggetti alla relazione R quando
possiedono alcune proprieta' che li collegano; tale fatto viene normalmente indicato con xRy.
La relazione R e' definita come l'insieme di tutte le coppie ordinate che posseggono
quella stessa particolare proprieta', qualunque essa sia. E' del tutto banale osservare che gli
elementi x e y possono essere proposizioni logiche, numeri reali o qualsiasi altra cosa.
Per quanto segue si assumera' che R sia una relazione su un insieme di cui x e y possono
rappresentare qualsiasi elemento.
Se xRx per qualsiasi x nell'insieme di interesse, allora la relazione viene chiamata
riflessiva. Ad esempio la relazione "maggiore o uguale a" e' riflessiva, mentre quella
"maggiore di" non lo e'.
Se yRx quando xRy allora la relazione e' simmetrica. Sugli insiemi di interesse comune
una relazione simmetrica e' anche riflessiva. Un'eccezione a tale affermazione e', ad esempio,
la relazione "e' cugino di" che e' simmetrica, ma non e' riflessiva. Le due relazioni e
appena descritte sono ambedue non simmetriche.
Infine se xRy e yRz implica che xRz si dice che R e' una relazione transitiva.
Una relazione che soddisfi tutti i tre precedenti criteri viene detta relazione di
equivalenza. Un esempio di relazione di equivalenza potrebbe essere "e' membro dello
stesso gruppo di".
Una relazione di equivalenza su un insieme esegue sempre una partizione di tale in-
sieme in sottoinsiemi disgiunti, detti classi di equivalenza. Ad esempio l'insieme:

{a,A,b,B,c,C,d,D,e,E}

viene suddiviso nei due sottoinsiemi:

{a,b,c,d,e} {A,B,C,D,E}

se la relazione e' quella di essere, per ambedue gli elementi da essa legati, caratteri minuscoli
o maiuscoli. Una diversa partizione si ottiene se la relazione, anch'essa di equivalenza, sta ad
indicare che x e y sono la stessa lettera.
Lo stesso intuitivo concetto di uguaglianza e' una relazione di equivalenza. Infatti:

415
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

x=x (Riflessivita')

y=x se x = y (Simmetria)

x = z se x = y e y = z (Transitivita')
Ritornando al postulato 1) precedentemente introdotto, e' chiaro che esso sta ad indicare
che, se a = b, a puo' essere sostituito a b in qualsiasi espressione in cui compaia b, senza che
cio' vada ad influire sulla validita' dell'espressione.
I rimanenti postulati di Huntington sono:

POSTULATO 2
a) Esiste una regola di combinazione (+) definita in modo tale che a + b appartiene
a K se a e b appartengono ambedue a K.
b) Esiste una regola di combinazione (.) definita in modo tale che a.b appartiene a
K se a e b appartengono ambedue a K.

POSTULATO 3
a) Esiste un elemento 0 in K tale che per ciascun a appartenente a K a + 0 = a
(elemento neutro rispetto alla regola di combinazione +).
b) Esiste un elemento 1 in K tale che per ciascun a appartenente a K a.1 = a
(elemento neutro rispetto alla regola di combinazione .).

POSTULATO 4
Per le due regole di combinazione vale la proprieta' commutativa.

a+b=b+a (IV a)

a.b=b.a (IV b)

POSTULATO 5
Sull'insieme delle due regole di combinazione vale la proprieta' distributiva.

a + (b.c) = (a + b).(a + c) (V a)

a . (b + c) = (a.b) + (a.c) (V b)

POSTULATO 6
Per ciascun elemento a appartenente a K esiste un elemento a tale che:

a.a 0 e a a 1

416
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

POSTULATO 7
Esistono almeno due elementi x e y in K tali che x y.
Si noti che nessuno dei precedenti postulati fissa in alcun modo il numero di elementi
che appartengono a K. Di conseguenza esistono molti sistemi che soddisfano i postulati, di cui
alcuni verranno presi in esame nel seguito.
E' necessario osservare la somiglianza di questi postulati con quelli dell'algebra or-
dinaria. Tuttavia la prima legge distributiva, cioe' la distribuzione rispetto alla somma, non
coincide con quella dell'algebra ordinaria.
Un insieme di postulati deve essere consistente. Cio' sta ad indicare che nessun po-
stulato dell'insieme deve contraddire qualsiasi altro postulato. Per verificare la consistenza si
dovrebbe quindi condurre un esame postulato per postulato in modo da accertare che nessuno
di essi contraddica qualsiasi possibile gruppo di altri postulati. Il procedimento tuttavia non e'
facile e si puo' allora percorrere una via diversa. E' sufficiente in sostanza individuare un
esempio di algebra booleana di cui si conosca in modo indipendente la consistenza. In tal
caso, se tutti i postulati di Huntington sono soddisfatti, allora gli stessi postulati sono
consistenti.
L'esempio piu' semplice di algebra booleana consiste di due soli elementi, 1 e 0, definiti
in modo da soddisfare le seguenti relazioni:

1 0 0 1
1.1 1 1 1 0 0 1 1

0 0 0. 0 1. 0 0.1 0
Si vede immediatamente che i postulati 1,2,3 e 4 sono soddisfatti con queste definizioni.
Ad esempio per il postulato 3b, se a=1 si ha:

a.1=1.1=1
mentre se a = 0 si ottiene:

a.1=0.1=0
e pertanto a . 1 = a.
Il soddisfacimento della legge commutativa e' evidente e la verifica della legge di-
stributiva richiede solamente di valutare ambedue i membri delle uguaglianze per ogni pos-
sibile combinazione di valori di a,b e c.
Infine per quanto riguarda il postulato 6 per a=1 si ha:

a.a 1.1 1.0 0


a a 1 1 1 0 1

mentre per a= 0 si ottiene:

a.a 0.0 0.1 0


a a 0 0 0 1 1

417
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

In aggiunta alla consistenza assume un notevole interesse la questione


dell'indipendenza dei postulati. Per indipendenza si intende che nessun postulato puo' essere
provato a partire dagli altri.
La dimostrazione dell'indipendenza dei postulati di Huntington e' lunga e complessa.
Pertanto, non essendo essenziale per gli sviluppi successivi, essa verra' tralasciata. Non e'
infatti indispensabile partire da un insieme di postulati indipendenti. Parecchi autori infatti
considerano i teoremi che verranno dimostrati nei paragrafi successivi come dei postulati,
senza che cio' comporti alcun inconveniente.

a.7) Il calcolo di verita' visto come un'algebra booleana.


Tra il calcolo funzionale di verita' e l'algebra booleana introdotta al paragrafo precedente
esiste una corrispondenza uno a uno.
La tabella A.7.1 interpreta i valori di verita' e i connettivi logici come un elemento o una
regola di combinazione in un'algebra booleana.
E' abbastanza usuale che in letteratura non venga fatta una precisa distinzione tra le due
colonne di tabella. Infatti molto spesso la regola "." viene chiamata AND e quella "+" OR.
Per l'algebra booleana vale ovviamente il principio di dualita' introdotto al capitolo II.
Tale principio si evince chiaramente da un'osservazione appena un po' attenta dei postulati di
Huntington, che sono tutti presentati a coppie che possono essere derivate una dall’altra per
dualita’.

TABELLA A.7.1

Calcolo di verita' Algebra booleana


.
U +
F 0
T 1
A A

a.8) I teoremi fondamentali dell'algebra booleana.

LEMMA 1) Gli elementi 0 e 1 sono unici.


Si supponga per assurdo che esistano due elementi 0, indicati rispettivamente con 01 e
02. Per ciascuna coppia di elementi a e b appartenenti a K si ha:

a + 01 = a e b + 02 = b
Si ponga ora a = 02 e b = 01. Si ottiene quindi:

02 + 01 = 02 e 01 + 02 = 01

Usando la prima legge commutativa e la proprieta' transitiva dell'uguaglianza si ha:

418
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

01 = 02
Come esempio della dualita', applicata alla dimostrazione precedente si ottiene:

da a + 01 = a b + 02 = b
a . 11 = a b . 12 = b

e da 02 + 01 = 02 01 + 02 = 01
12 .11 = 12 11 + 12 = 11
e infine da:

01 = 02
si ottiene:

11 = 12

LEMMA 2) Per ciascun elemento a appartenente a K a + a = a e a . a = a

a + a = (a + a) . 1 (postulato 3b)
a a a a .a a (postulato 6)

a a a a .a (postulato 5)
a+a=a+0 (postulato 6)
a+a=a (postulato 3a)
a.a=a (dualita')

LEMMA 3) Per ciascun a appartenente a K a + 1 = 1 e a . 0 = 0

a + 1 = 1 . (a + 1) (postulato 3b)

a+1= a a.a 1 (postulato 6)

a + 1 = a a.1 (postulato 5)

a+1=a a (postulato 3b)

a+1=1 (postulato 6)

a.0=0 (dualita')

419
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

LEMMA 4) Gli elementi 1 e 0 sono distinti e 1= 0


Si supponga che a sia un elemento appartenente a K.

a.1=a (postulato 3 b)

a.0=0 (lemma 3)
Si assuma ora che 1 = 0. In tal caso le due espressioni precedenti sono soddisfatte solo
se a=0. Il postulato 7 tuttavia stabilisce che vi sono almeno due elementi distinti in K. La con-
traddizione puo' essere risolta solo concludendo che 1 0.
Per provare la seconda asserzione e' sufficiente scrivere:

1 1.1 (postulato 3b)

1 0 (postulato 6)

LEMMA 5) Per ciascuna coppia di elementi a e b appartenenti a K a + a.b


= a e a.(a+b)=a

a + a.b = a.1 + a.b (postulato 3b)

a + a.b = a.(1 + b) (postulato 4b)

a + a.b = a. 1 (lemma 3)

a + a.b = a (postulato 3b)


La seconda asserzione a.(a + b) = a si puo' dimostrare per dualita'

LEMMA 6) L'elemento a definito dal postulato 6 e' unico per ciascun a in K


La dimostrazione puo' venir fatta per contraddizione. Si supponga che esistano due
elementi distinti, a1 e a2, che soddisfano il postulato 6. Cioè:

a a1 1 a a2 1 a .a1 0 a .a 2 0

Allora:

a2 = a2.1 (postulato 3b)

a2 = (a + a1).a2 (per sostituzione)

a2 = a.a2 + a1.a2 (postulato 5b)

a2 = 0 + a1.a2 (per sostituzione)

420
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

a2 = a.a1 + a1.a2 (per sostituzione)

a2 = (a + a2).a1 (postulato 5b)

a2 = 1.a1 (per sostituzione)

a2 = a1 (postulato 3b)

LEMMA 7) Per ciascun elemento a in K a a


Si ponga a x. Si ottiene percio':

a.x 0 e a x 1 (postulato 6)
ma

a.a 0 e a a 1 (postulato 6)

Di conseguenza sia a che x soddisfano il postulato 6 come complemento di a. Per il


lemma 6 ne consegue che:

a=x

LEMMA 8) a.[(a + b) + c] = [(a + b) + c].a = a

a.[(a + b) +c] = a.(a + b) + a.c (postulato 5b)

a.[(a + b) +c] = a + a.c (lemma 5)

a.[(a + b) +c] = a = [(a + b) +c].a (postulato 4b e lemma 5)

TEOREMA 9) Per qualsiasi terna di elementi a,b,c appartenenti a K a


+ (b + c) = (a + b) + c e a.(b.c) = (a.b).c
Si intuisce immediatamente che il teorema appena enunciato altro non e' se non
l'enunciazione delle proprieta' associative dell'algebra ordinaria. Molto spesso queste
proprieta' sono considerate dei postulati, sebbene cio' non sia affatto necessario.
La dimostrazione puo' essere condotta nel modo seguente. Posto:

Z = [(a + b) + c].[a + (b + c)]


si ricava:

Z = [(a + b) + c].a + [(a + b) + c].(b + c)

421
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

Z = a + [(a + b) + c].(b + c) (lemma 8)

Z = a + {[(a + b) + c].b +[(a + b) + c].c} (postulato 5b)

Z = a + {b + [(a + b) + c].c} (lemma 8, post. 4b)

Z = a + (b + c)
Si puo' tuttavia anche scrivere:

Z = (a + b).[a + (b + c)] + c.[a + (b + c)] (postulato 5b)

Z= (a + b).[a + (b + c)] + c (lemma 8)

Z = {a.[a + (b + c)] + b.[a + (b + c)]} + c (postulato 5b)

Z = {a.[a + [B + c)] + b} + c (lemma 8)

Z = (a + b) + c
e quindi per la proprieta' transitiva

a + (b + c) = (a + b) + c
e per dualita'

a.(b.c) = (a.b).c
Una volta che le leggi associative siano state stabilite, molte espressioni possono essere
semplificate omettendo le parentesi. Ad esempio:

(a + b) + c = a + b + c

(a.b).c = a.b.c

TEOREMA 10) Per ciascuna coppia di elementi a e b in K a + a.b = a + b e


a.(a + b) = = a.b

a a. b a a.a b (postulato 5a)

a a. b a b (postulati 6 e 3b)

a.a b a .b (dualita')

422
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

Teorema 11) Per ciascuna coppia di elementi a e b in K a b a.b e


a.b a b
Le espressioni appena citate costituiscono le due forme dell'importantissima legge di De
Morgan, gia' vista in precedenza. La seconda forma e' ovviamente la forma duale della prima,
ma ci si puo' arrivare, anche a scopo di esercizio, per una via diversa che non quella della
dualita'.

a b a.b a b a. a b b (postulato 5a)

a b a.b a a b .b b a (postulato 4a)

a b a.b 1.1 1 (teorema 9, lemma 3)

a b . a.b a . a.b b . b.a (postulati 5b, 4b)

a b . a.b 0 0 0 (teorema 9, lemma 3)

In tal modo ambedue le condizioni del postulato 6 sono state soddisfatte e di con-
seguenza a + b e' l'unico complemento di a.b. Si puo' quindi scrivere che:

a b a.b o a b a.b
Queste espressioni ovviamente valgono anche quando si sostituisca ad a e b le loro
negazioni. Si ottiene allora:

a b a.b a.b
oppure

a b a.b
dai lemmi 6 e 7.

a.9) La teoria degli insiemi come esempio di algebra booleana.


Si e' gia' visto in precedenza come il calcolo funzionale di verita' sia un esempio di
algebra booleana. Poiche' esso soddisfa tutti i postulati di Huntington esso soddisfera' anche
ciascuno dei teoremi e dei lemmi enunciati al precedente paragrafo.
La teoria degli insiemi e' un secondo esempio di algebra booleana. Come insieme si puo'
intendere una qualsiasi collezione di oggetti, ma per poter parlare di un'algebra degli insiemi e'
necessario limitare gli oggetti che li compongono mediante alcuni criteri significativi. Si
definisce insieme universale quello che contiene tutti gli oggetti che soddisfano tali criteri;
per motivi che appariranno chiari piu' avanti, l'insieme universale deve contenere
necessariamente almeno un oggetto e la sua cardinalita' puo' essere finita o infinita. La
collezione dei punti di un piano o di una regione finita del piano e' un interessante esempio di
insieme universale.

423
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

Si dice che R e' un sottoinsieme dell'insieme S quando ciascun oggetto di R appartiene


anche a S e tale fatto si indica con:
R S
Solamente gli insiemi che sono sottoinsiemi dell'insieme universale permettono lo
sviluppo di un'algebra degli insiemi.
Un secondo insieme di notevole importanza e' l'insieme nullo cioe' quello che non
contiene nessun oggetto. Gli insiemi universale e nullo vengono di solito rappresentati con i
simboli Su e Sz rispettivamente.
L'unione di due insiemi R e S e' quell'insieme che contiene tutti gli oggetti sia di R che
si S. L'operazione di unione viene indicata con:

R S
L'intersezione di due insiemi R e S e' invece quell'insieme che contiene tutti gli oggetti
che appartengono sia a R che a S. L'intersezione viene indicata con:

R S
Infine il complemento di S, indicato con C(S) contiene tutti gli oggetti dell'insieme
universale che non appartengono a S.
Un modo molto efficace per rappresentare un insieme universale e' quello di considerare
i punti contenuti in un rettangolo, come illustrato in fig. A.9.1. Sempre nella stessa figura R e
S rappresentano due sottoinsiemi dell'insieme universale.
La rappresentazione del tipo appena introdotto prende il nome di diagramma di Venn.

R S

figura A.9.1

L'area tratteggiata di fig A.9.1 rappresenta l'intersezione dei due insiemi R e S. Allo
stesso modo le aree tratteggiate di fig A.9.2 rappresentano rispettivamente gli insiemi R S e
C(R).

R S

figura A.9.2

Richiamando i postulati del paragrafo a.6 si scegliera' un set di K oggetti che saranno
quegli insiemi che non contengono altri punti se non quelli dell'insieme universale. Tali

424
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

insiemi, uno dei quali e' l'insieme vuoto, sono sottoinsiemi dell'insieme universale. Se
l'uguaglianza e' assunta in modo da metter in relazione unicamente insiemi uguali, allora il
postulato 1 e' soddisfatto. Si potrebbe poi procedere sulla base della corrispondenza di tabella
1, in modo da dimostrare che anche i rimanenti postulati sono soddisfatti.

TABELLA 1
.
+
Sz 0
Su 1
C(S) S
Gli insiemi A B e A B sono sottoinsiemi di Su tali che il postulato 2 e' soddisfatto.
Poiché R Sz e R Su contengono esattamente gli stessi oggetti di R, anche il postulato 3
e' soddisfatto. Il soddisfacimento del postulato 4, le leggi commutative, e' evidente.
Sotto l'aspetto della teoria degli insiemi le leggi distributive diventano:

A (B C) = (A B) (A C)

e
A (B C) = (A B) (A C)

C
B

figura A.9.3

Il fatto che queste due equazioni siano soddisfatte si puo' facilmente dimostrare uti-
lizzando i diagrammi di Venn.
Si noti che in fig. A.9.3 l'insieme B C e' tratteggiato verticalmente, mentre l'insieme A
e' riempito con un tratteggio orizzontale. L'insieme A (B C) e' rappresentato dall'area
comunque tratteggiata.
In fig. A.9.4 l'insieme A B e' indicato con il tratteggio orizzontale, quello A C con un
tratteggio verticale. L'intersezione di questi due insiemi (A B) (A C) e' dato quindi
dall'area che contiene ambedue questi tratteggi. Le aree delle due figure A.9.3 e A.9.4, che
rappresentano i due membri della prima delle due equazioni relative alle leggi distributive
sono ovviamente uguali.

425
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

Utilizzando i diagrammi di Venn si perviene alla medesima conclusione anche per la


seconda equazione.
Dalla definizione dell'insieme complemento segue immediatamente che:

R R = Sz R R = Su
e pertanto il postulato 6 e' soddisfatto.

B C

figura A.9.4

Infine il fatto che Su e Sz siano sempre definiti e distinti garantisce che anche il po-
stulato 7 e' soddisfatto.
Nel seguito si riporta un esempio di utilizzo dell'algebra degli insiemi e di semplifi-
cazioni booleane.

ESEMPIO
Tre persone, indicate rispettivamente con A, B e C, collezionano antichi manoscritti. A
Raccoglie lavori politici in lingua inglese e romanzi in altre lingue, B raccoglie tutti i lavori
politici, eccetto quelli che siano definibili come romanzi in lingua inglese e tutti i lavori in
lingua inglese che non siano romanzi. Infine C colleziona tutti quei manoscritti in lingua
inglese che non siano classificabili come opere di fantasia oppure lavori politici in lingua
diversa dall'inglese. Si vuole determinare quali siano le opere che raccolgono l'interesse di due
o piu' dei tre collezionisti.
Si definiscano come prima cosa i vari insiemi che possono essere messi in relazione al
problema posto. Siano:

A l'insieme dei libri collezionati da A

B l'insieme dei libri collezionati da B

C l'insieme dei libri collezionati da C

E l'insieme di tutte le opere in inglese

N l'insieme di tutti i romanzi

426
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

P l'insieme di tutti gli scritti politici


L'insieme di opere collezionato da due o piu' persone sara' simbolicamente espresso da:

Z = (A B) (A C) (B C)

Si possono poi esprimere le varie proposizioni del problema nelle seguenti espressioni
simboliche della teoria degli insiemi:
A E P E N

B P E N E N

C E E P N

Si noti che sarebbe piu' conveniente, e cosi' verra' fatto nel seguito, usare i simboli
dell'algebra booleana anziche' con quelli della teoria degli insiemi (come gia' e' stato fatto per
il complemento).
Le tre espressioni ricavate possono venir semplificate. Si ottiene:

A E.P E.N
B P .E . N E .N P . E N P .E P .N E .N
P .E P . N. E E E .N P .E P .N. E P .N.E E .N
P .E. 1 N E .N. 1 P P .E E .N
C E E. P .N E P .N

Sostituendo queste espressioni nella Z si ottiene:

Z E . P E. N . P .E E .N E . P E .N . E P .N P .E E .N . E P . N

Per la legge distributiva

Z E . P E. N . P .E E .N E .N P .N P .E E .N . E .N P .N
E . P E. N . P .E E .N P .N P .E E .N . E .N P .N
E . P E. N . P .E E .N P .E.N P . E .N P .E E .N . E .N P .N
E . P E. N . P .E. 1 N E . N. 1 P P .E E .N . E .N P .N
E . P E. N . P .E E .N P .E E .N . E .N P .N
P .E E. N . E . P E. N E . N P .N
E. N P .E. E . P E. N P .N
E .N P .E. N P .E.N E .N P .E. N N E .N P .E

Si puo' quindi concludere che le opere cui piu' di una persona e' interessata sono le opere
non di fantasia in lingua inglese e gli scritti politici in lingua diversa dall'inglese.
Lo stesso problema poteva ovviamente essere risolto utilizzando i diagrammi di Venn.
Si lascia al lettore questa via di soluzione.

427
Ý¿´½±´± ¼· ª»®·¬¿Ž » ¿´¹»¾®¿ ¾±±´»¿²¿
ß°°»²¼·½» ß

Nello sviluppo dell'esempio si sono incontrate piu' volte espressioni del tipo:

x.y x.z y.z


la cui semplificazione ha richiesto ciascuna volta un numero considerevole di operazioni
elementari. Si puo' tuttavia dedurre il seguente

TEOREMA 12) Per qualsiasi terna di elementi a, b e c in K


a . b a. c b . c a . b a. c e a b .a c. b c a b .a c
Infatti:

a . b a. c b . c a . b a. c b . c . a a a . b a . b . c a. c a. b . c

a .b. 1 c a. c . 1 b a . b a. c
Il teorema e' illustrato dal diagramma di Venn di fig. A.9.5. Si noti che l'area b.c e'
parzialmente ricoperta da a.b e parzialmente da a.c.
La seconda parte del teorema si dimostra per dualita'.

B C

figura A.9.5

428
Logiche a soglia
Appendice B

APPENDICE B
LOGICHE A SOGLIA

b.1) Relazioni di ordinamento.


Una classe di funzioni di speciale interesse e' quello delle funzioni booleane "unate",
che sono di particolare importanza nella discussione delle logiche a soglia.
Si considerino le seguenti due espressioni booleane:

f1 x 1 . x 2 . x 3 x 1 . x 2 . x 4 x 3 .x 4 (b.1.1)
f2 x 1 . x 2 x 3 .x 4 (b.1.2)

Si noti che non vi e' alcun modo per esprimere la f1 senza che nella relativa espressione
compaiano sia x3 che x 3 . La funzione f2 e' invece scritta in modo tale che, se nell'espressione
compare una variabile, non vi appare il suo complemento. Una funzione che puo' essere
messa in tale forma e' una funzione unate.
Allo scopo di formalizzare la definizione di funzione unate e' opportuno introdurre il
concetto di relazione d'ordine.

Definizione b.1: Una relazione R viene detta di ordinamento parziale se e solo se e'
riflessiva, transitiva e antisimmettrica. In altre parole se:

xRx

se xRy e yRz implicano xRz

e se xRy e yRx implicano x=y

La relazione e' un esempio di relazione di ordinamento parziale sull'insieme dei


numeri reali. In aggiunta una o ambedue delle seguenti espressioni devono essere vere quando
a e b sono numeri reali:

a b o b a (b.1.3)

Un insieme di oggetti parzialemente ordinato, in cui ciascuna coppia soddisfi le


condizioni (b.1.3) e' detto totalmente ordinato. Un esempio di insieme parzialmente
ordinato, che non e' totalmente ordinato, puo' essere definito come segue.
L'insieme S sia costituito dagli insiemi A, B, A B, A B con A B e non vuoti.
Se si definisce come relazione d'ordine l'inclusione, dalla fig. B.1.1 si vede che la
relazione di ordine parziale e' soddisfatta per ciascuna coppia di elementi.

428
Logiche a soglia
Appendice B

AUB

A B

A B

figura b.1.1

Tuttavia

A B e B A

e quindi S non e' totalmente ordinato.

Definizione b.2: Sia S un insieme parzialmente ordinato dalla relazione d'ordine . Si


dice che un elemento u S e' un estremo superiore di un sottoinsieme X con X U se
qualsiasi x S soddisfa la relazione x u. L'elemento u e' poi detto estremo superiore
minimo di x se u v dove v e' un generico estremo superiore di X. In modo del tutto analogo
vengono definiti sia l'estremo inferiore che l'estremo inferiore massimo

Definizione b.3: Si dice reticolo un insieme L parzialmente ordinato da tale che per
ciascuna coppia di elementi di L esiste un estremo superiore minimo e un estremo inferiore
massimo.

ESEMPIO
Sia S l'insieme delle funzioni di commutazione delle tre variabili x1, x 2, x3. La relazione
d'ordine definita su S sia:

x y se x+y=y

L'insieme S, ordinato da tale relazione, forma un reticolo. Siano infatti a, b e c tre


elementi qualsiasi di S. Chiaramente la relazione e' riflessiva. Se poi a + b = b e b + c
= c segue che:

b + c = (a + b) + c = a + (b + c) = a + c

e quindi la relazione e' transitiva. Infine se a + b = b e b + a = a allora a = b e quindi la


relazione e' antisimmettrica e costituisce un ordinamento parziale di S. Ovviamente a (a +
b) e b (a + b) e di conseguenza a + b e' un estremo superiore di {a,b}. Sia ora u un qualsiasi
limite superiore di {a,b}. Segue che:

429
Logiche a soglia
Appendice B

u=a+u e u=b+u

e quindi

u = u + u = (a + u) + (b + u) = (a + b) + u

da cui

(a + b) u

In modo simile:

a.b a e a.b b

da cui segue che a.b e' un estremo inferiore di {a,b}. Inoltre se l e' un generico estremo
inferiore di {a,b} si ha:

l+a=a e l+b=b

e quindi:

a.b = (l + a).(l + b) = l + a.b

Di conseguenza l a.b e quindi a.b e' l'estremo inferiore massimo di {a,b}. Pertanto
l'insieme S e' ordinato dalla relazione in un reticolo.

b.2 Le funzioni "unate".


Per definire una funzione "unate e' opportuno definire un ordinamento parziale dei
vertici di un ipercubo booleano.

Definizione b.4.
Un vertice (x1, x 2, .... ,xn) e' di un vertice (y1, y2, .... ,yn) se e solo se per ciascun i xi
yi . Si definisce xi yi se yi =1 quando xi = 0.

(1,1,1)

(1,1,0) (0,1,1)
(1,0,1)

(0,1,0)

(0,0,1)
(1,0,0)

(0,0,0)

figura b.2.1

430
Logiche a soglia
Appendice B

Ciascun xi puo' assumere solamente i valori 0 e 1. Quindi (x1, x 2, .... ,xn) di


(y1, y2, .... ,yn) se e solo se yi = 1 quando xi =0. Ad esempio:

(0,1,0) (0,1,1)

mentre i vertici (0,1,0) e (1,0,1) non sono ordinati dalla relazione appena definita. Il reticolo
completo di un cubo booleano tridimensionale e' riportato in fig. B.2.1. In tale
rappresentazione un vertice X e' di qualsiasi vertice Y che si trovi nel diagramma sopra di
lui e al quale sia collegato da una linea.

Definizione b.5: Una funzione di commutazione f(X) e' motona crescente se solo se
f(X) f(Y) quando X Y, dove X rappresente il vertice (x1, x2, .... ,xn) e Y il vertice
(y1, y2, .... ,yn).
Il reticolo di fig. B.2.1 e' riportato in fig. B.2.2 (a) indicando con un circoletto nero i
vertici in cui la funzione x1 x 2 .x 3 vale 1. In fig. B.2.2 (b) vengono rappresentati i vertici
della funzione x1 x1 .x 2 .x 3 .
Si vede immediatamente che secondo la definizione b.5 la prima delle due funzioni e'
monotona crescente, mentre la seconda non lo e'.

(111) (111)

(110) (110)
(011) (011)
(101) (101)

(010) (010)

(001) (001)
(100) (100)

(000) (000)

(a) (b)
figura B.2.2

Una funzione monotona crescente e' un caso particolare di quelle che ora verranno
definite quali funzioni "unate"

Definizione b.6: Sia X j x 1j1 , x 2j 2 , Õ , x njn una n-pla in cui

x iji xi se ji 0 xiji xi se ji 1

Una funzione di commutazione f e' una funzione unate se e solo se esiste una n-pla
J=(j1, j2, .... , jn) tale che f(Xj) f(Yj) quando Xj Yj. Si dice in tal caso che la funzione f e'
unate rispetto alla n-pla J.

431
Logiche a soglia
Appendice B

Ad esempio la funzione f = x 1 x 2 . x 3 non e' monotona crescente, come si puo'


verificare in fig. B.2.3 (a). In fig. B.2.3 (b) tuttavia i vertici sono stati ordinati nel reticolo in
modo da soddisfare alla Xj Yj per J = (0,1,0). I valori funzionali sono ovviamente gli stessi,
ma si vede che f(X) f(Y) quando Xj Yj. Di conseguenza la funzione f e' secondo la
definizione b.6 unate rispetto alla n-pla (0,1,0).

(111) (101)

(110) (011) (100) (001)


(101) (111)

(010) (000)

(001) (011)
(100) (110)

(000) (010)

(a) (b)
figura B.2.3

TEOREMA b.1: Una funzione f(x1, x 2, .... , xn) e' unate rispetto alla n-pla J se e solo se
puo' essere espressa come somma di prodotti dei soli simboli x1j1 , x 2j2 ,Õ , x njn con J = (j1, j2, ....
, jn).
a) Sufficienza.
Sia f(x1, x2, .... , x n) una funzione espressa come somma di prodotti dei simboli
j j j j
x1j1 , x 2j2 ,Õ , x njn . Si supponga poi che X e Y siano due vertici tali che X Y . Se F(X) = 0
allora certamente f(X) f(Y). Si supponga invece che f(X) = 1. Definendo con P(X) il
generico prodotto di simboli dalla cui somma e' composta la funzione f, allora certamente per
qualcuno d'essi sara' verificata la condizione P(X) = 1. Poiche' Xj Yj in Y ci saranno almeno
tanti simboli x iji posti a 1 quanti ce ne sono in X. Di conseguenza P(Y)=1 e f(X) f(Y). La
funzione f(x1, x2, .... , xn) e' quindi unate.
b) Necessita'.
Si supponga che la f(x1, x2, .... , xn) sia unate ripetto alla n-pla J = (j1, j2, .... , jn) e sia Y
un qualsiasi vertice per cui f(Y) = 1. Si supponga poi che U = (u1, u2, .... , un) sia un vertice
tale che f(Uj) = 1 con Uj Yj e che non esista alcun altro vertice Vj per cui f(Vj ) f(Yj) e
Vj Uj . Si definisca poi con P(X) il prodotto di tutti i simboli x iji per cui u iji = 1. Con tale
j
definizione si ottiene immediatamente che P(U ) =1. Poiche' la f(x1, x2, .... , xn) e' unate alora
si ha che:

f(Z) =1

per tutti i Z tali che Uj Zj.

432
Logiche a soglia
Appendice B

In altre parole se p(Z) = 1 allora Uj Zj . Quindi se P(X) = 1, allora f(X) = 1 e p(X) e' un
termine della somma di prodotti con cui e' espressa la funzione f.
Un simile P(X) puo' essere trovato in corrispondenza a ciascun vertice Y per il quale sia
P(Y) = 1. Percio' la funzione f puo' essere espressa come somma di tutti questi prodotti distinti
P(X).
A titolo di esempio si determini una somma di prodotti per la funzione la cui tavola di
verita' e' riportata in fig. B.2.4, unate rispetto alla n-pla J = (0,1,0,1).
L'elemento minimo nel reticolo costruibile in relazione a J e' (0,0,0,0) = ( 0,1, 0,1) .

x1 x 2 x 3 x 4 f1

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

figura B.2.4

Un reticolo parziale in cui sono riportati i vertici in corrispondenza ai quali la funzione


vale 1 e' illustrato in fig. B.2.5.

1010

1000 1011 0010 1110

1001 0110

figura B.2.5

Si affida al lettore il compito di completare il reticolo e verificare che la funzione e'


unate.

433
Logiche a soglia
Appendice B

In accordo con il teorema b.1 e' necessario prendere in considerazione unicamente i due
vertici inferiori, in corrispondenza ai quali la funzione vale 1.
Come nella dimostrazione del teorema, la rappresentazione funzionale di f1 puo' venir
realizzata a partire da x 4j4 ,x 3j3 e da x 2j2 ,x1j1, poiche' (1,0,0,1)j = (1, 0, 0,1) = (1,1,0,0) e
(0,1,1,0)j = (0,1,1, 0) = (0,0,1,1). Pertanto:

f1 x 4 .x 3 x2 .x1
E' bene osservare che la rappresentazione in forma di somma di prodotti ottenuta e'
l'unica rappresentazione minima in questa forma.
Per determinare quando una funzione booleana sia unate si puo' far uso del seguente
teorema, del quale tuttavia non si dara' la dimostrazione.

TEOREMA b.2: Una funzione di commutazione f e' unate se e solo se:


1) L'insieme dei primi implicanti essenziali di f costituisce l'unica copertura minima
della f stessa.
2) Tale copertura minima e' la rappresentazione nella forma di somma di prodotti in cui
j1 j2
compaiono solo i simboli x1 , x 2 , , x njn per J = (j1, j2, .... , jn).
Dalla fig. B.2,6 appare evidente che l'espressione

x1 x2 .x3 x 2 .x3

e' l'unica copertura minima della funzione composta dagli implicanti primi essenziali. Tuttavia
tale copertura minima non soddisfa la seconda condizione del teorema b.2 e quindi la
funzione che si e' presa in considerazione non e' una funzione unate.

x x
2 1
x
3 00 01 11 10
0 1 1 1

1 1 1 1

figura B.2.6

b.3) Generalizzazione circuitale di logiche a resistenza-transistore.


Si consideri il gate NOR in logica RTL di fig. B.3.1. Ci si puo' ragionevolmente
chiedere quali siano le prestazioni di tale circuito quando le resistenze di ingresso non sono
tutte uguali. Per semplificare l'analisi del circuito si trascurera' la tensione base-emettitore, che
normalmente e' molto piccola rispetto alla tensione di ingresso.

434
Logiche a soglia
Appendice B

RL
V.x0 G0
I in Z
G1
V.x1

V.x n Gn
It

figura B.3.1

In tal caso si ha:

I in V.x0 .G 0 V.x1.G1 .... V.x n .G n


dove il prodotto V.xi sta ad indicare che se la variabile xi vale 1 allora alla conduttanza Gi
viene applicata la tensione V. Si ricava pertanto:
n
It I in
G i .xi
i 0 V V

Se la sommatoria delle correnti di ingresso e' sufficientemente maggiore di It/V, nella


base del transistore circola una corrente sufficiente a commutarlo e a portare a zero la tensione
di uscita. In altre parole, scegliendo opportunamente i valori delle conduttanze Gi si puo' far
si' che l'uscita assuma i voluti valori funzionali per le 2n differenti combinazioni delle variabili
di ingresso.
Si supponga ad esempio, con riferimento al circuito di fig. B.3.1, che le variabili di
ingresso siano 4 e che le quattro conduttanze di ingresso valgano rispettivamente:

G3 = 0.003 G2 = 0.002 G1 = 0.001 G0 = 0.001


Ponendo poi V = 10 volt e It = 0,025 A, si vuol tabulare il valore che l'uscita assume in
corrispondenza alle 16 possibili combinazioni dei valori degli ingressi.
Si ha:

It
0.0025
V
Ovviamente nei casi in cui x3 = x2 = 0 si ha:

G 3 .x3 G 2 .x 2 G1.x1 G 0 .x0 0.002


e quindi l'uscita delle prime quattro righe della tavola di verita' e' 1. Anche per (0100) tale
somma e' pari a 0.002 e ancora l'uscita vale 1.

435
Logiche a soglia
Appendice B

Per (0101) e (0110) la sommatoria vale 0.003 che e' un valore maggiore di It/V =
0.0025. In questo caso si ha allora:

I in 10. 0.003 0.0025 0.005 A


e una corrente di base di 5 mA puo' facilmente commutare un transistore, portando l'uscita a
0. Analogo comportamento si ha per (0111).
I rimanenti 8 casi, in cui x3 = 1, sono tali che:
3
G i .x i 0.003
0

e quindi l'uscita vale 0. La tavola di verita' completa e' riportata in fig. B.3.2.

X1 X2 X3 X4 f

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

figura B.3.2

La funzione f puo' pertanto essere espressa come:

f x3 . x 2 x1.x 0 x 3 x 2 . x1 x 0
Poiche' l'amplificatore a transistori, montato a emettitor comune, introduce comunque
un'inversione del segnale di ingresso, il circuito appena esaminato prende il nome di elemento
invertente a soglia.

436
Logiche a soglia
Appendice B

Presenta notevole interesse identificare la classe delle funzioni che possono essere
realizzate con questi dispositivi; converra' tuttavia, almeno in un primo tempo, riferirsi ad
elementi a soglia non invertenti.

b.4) Separabilita' lineare.


Una funzione booleane f(x1, x 2, .... , xn) viene detta separabile linearmente (e in tal caso
viene chiamata anche funzione a soglia) se e solo se esiste una n-pla di 1 e 0 (j0, j1, .... , Jn), un
insieme di pesi N0, N1, .... , Nn e un valore di soglia T tali che:

< T quando f = 0
n 1
S N i .x iji
i 0
T quando f = 1

essendo:

x i ..... se ... j i 0
x iji
x i .... se .... ji 1

Si puo' facilmente verificare che la funzione

f x 3 . x 2 x1 . x 0 (b.4.2)

e' linearmente separabile. Se il valore di soglia e i pesi vengono scelti proporzionali a It/V ed
ai pesi dell'esempio del paragrafo precedente, allora:

3
N i .x i T
0

se e solo se

3
It
Gi . xi
0
V

Si noti che nell'esempio citato la funzione era f x 3 x 2 . x 1 x 0 in quanto il


transistore aveva introdotto una negazione dei valori funzionali definiti dalla b.4.1. Un
conveniente insieme di pesi e' N3=3, N2=2, N1=N0=1 con un valore di soglia pari a 2.5.
La funzione b.4.2 e' pertanto separabile linearmente con la n-pla (0000). Anche la
funzione f x 3 x 2 . x 1 x 0 e' separabile linearmente con gli stessi pesi, ma rispetto alla n-
pla (1111) e con soglia pari a 5.

437
Logiche a soglia
Appendice B

TEOREMA b.3: Se si puo' trovare un insieme di pesi che soddisfa la (b.4.1) per un
valore di soglia T1 > 0 allora si puo' trovare un insieme di pesi che soddisfa la (b.4.1) per
qualsiasi T2 > 0.
Ciascun nuovo peso puo' essere ricavato dei precedenti come segue:

N i .T2
N 'i
T1

Infatti:

N i .xiji T1

e quindi:

T1.T2
N i .x iji
T2

da cui:

T2 T2
. N i .x iji .N i .xiji N 'i .x iji T2
T1 T1

TEOREMA b.4: Se ua funzione f e' separabile linearmente si possono trovare una n-


pla j'0 , j1' , , j'n e un insieme di pesi N 'i tali che ciascun N 'i sia maggiore o uguale a zero.
Si assuma che f sia separabile sulla base dei pesi N i , della soglia T e della n-pla
j0 , j1 , , jn . Per ciascun Ni < 0 si ponga ji' 1 ji in modo da formare una nuova n-pla. Si
formi poi un nuovo insieme di pesi dato da:

N 'i Ni

da cui si ha:
'
S' N 'i . x iji

Sia ora I l'insieme di tutti gli i tali che Ni < 0. Di conseguenza:

n 1 n 1
N 'i .xiji N i .xiji N i .x1i ji
N i .xiji
' '

i 0 i 0 i I i I

n 1
N i .xiji Ni N i .xiji N i .x iji Ni
i I i I i I i 0 i I

438
Logiche a soglia
Appendice B

Ne segue che:

n 1
N 'i .xiji
'

T Ni
i 0 i I
e quindi, definendo

T' T Ni
i I
si ottiene finalmente:

n 1
N 'i .xiji T'
'

i 0

A titolo di esempio si determini la funzione booleana che risulta separata linearmente


dalla seguente somma:

S 2.x2 x1 x0
e dalla soglia T = 1. Si trovi poi un insieme di pesi positivi ed una soglia che separino
linearmente la funzione.
Tabulando la somma, come illustrato in fig. B.4.1, per tutti i valori possibili delle
variabili, si ottiene la funzione:

f x2 x1 .x0

x x x S f (con T=1)
2 1 0

0 0 0 0 0
0 0 1 1 1
0 1 0 -1 0
0 1 1 0 0
1 0 0 2 1
1 0 1 3 1
1 1 0 1 1
1 1 1 2 1

figura B.4.1

Applicando ora il teorema b.4 si ha:

N '2 = N 2 = 2 N1' = N1 = 1 N '0 = N 0 = 1


e rispettivamente

T' = T N 1 = 2

439
Logiche a soglia
Appendice B

Si puo' verificare facilmente che la somma

S' 2.x 2 x1 x0

e' maggiore o uguale a 2 esattamente per quelle combinazioni di valori per cui la funzione f
vale 1.

TEOREMA b.5: Una funzione f e' separabile linearmente se e solo se la funzione f e'
separabile linearmente.
Sia infatti la funzione f separabile linearmente; esistano cioe' un insieme di pesi N i ,
una soglia T e una n-pla J tali che:

< T quando f = 0
n 1
N i .xiji
i 0
T quando f = 1
Poiche' o x iji o x1i ji
valgono 1, si puo' scrivere:

n 1 n 1 n 1
N i .xiji N i .x1i ji
Ni (b.4.3)
i 0 i 0 i 0

Si ipotizzi ora che f = 0 e quindi f 1.Percio':

n 1
N i .xiji T
i 0
Esistera' pertanto un tale che:
n 1
N i . x iji T
i 0

e dalla (b.4.3)
n 1 n 1
N i . x 1i ji
Ni T
i 0 i 0

Si e' stabilito in tal modo un insieme di pesi N i' N i , una soglia pari a N i - (T - )
e una n-pla (1-j0, 1-j1, .... , 1-jn) che soddisfa la (b.4.1) quando f = 1.
Se f = 0, cioe' quando f =1, si ha:
n 1
N i . x iji T T
i 0

e quindi dalla (b.4.3) si ottiene:

440
Logiche a soglia
Appendice B

n 1 n 1
N i . x 1i ji
Ni T
i 0 i 0

Si e' pertanto dimostrato per qualsiasi funzione booleana f che, se f e' separabile
linearmente, lo e' anche la sua negazione.
Quindi se f e' separabile linearmente lo e' anche la f e cio' completa la dimostrazione
del teorema.
A titolo di esempio si voglia determinare un insieme di pesi, una n-pla e una soglia che
permetta la separazione lineare della f quando la f e' la funzione tabulata in fig. B.4.1.
E' necessario notare che la dimostrazione del teorema b.5 e' costruttiva e fornisce un
metodo che permette di calcolare le quantita' richieste. Dall'esempio relativo alla funzione di
fig. B.4.1 si aveva:

(j0,j1,j2) = (000)

e quindi la nuova n-pla e':

(1-j0,1-j1,1-j2) = (1,1,1)

I pesi rimangono inalterati, mentre la soglia diviene:

T' = (2 - 1 + 1) - (1 - 0.5) = 1.5

E' immediato verificare che:

1.5...... quando ... f 1


S 2.x 2 x1 x 0
1.5..... quando ... f 0

L'importanza dei teoremi b.3 e b.4 risiede nel fatto che essi implicano che una funzione
puo' essere realizzata con un elemento a soglia resistore-transistore se e solo se e' separabile
linearmente.
In pratica cio' non e' strettamente vero in quanto all'aumentare della complessita' di una
funzione puo' verificarsi il caso in cui la differenza di corrente tra i casi 0 e 1 e' insufficiente a
commutare il transistore. Per funzioni semplici tuttavia il teorema b.4 assicura che il vincolo
fisico di dover usare sempre dei pesi positivi non pone limitazioni alla realizzabilita' di
funzioni separabili linearmente. Analogamente il teorema b.5 assicura che qualsiasi funzione
separabile linearmente puo' essere realizzata con elementi a soglia invertenti.

TEOREMA b.6: Se una funzione f e' separabile linearmente allora esiste un insieme di
pesi ed una soglia tali che le condizioni di separabilita' sono soddisfatte in relazione alla n-pla
(0, 0, .... , 0).
La dimostrazione di questo teorema e' molto simile a quella del teorema b.4 e non viene
pertanto qui riportata. E' bene tuttavia rilevare che puo' essere necessario far uso sia di pesi
che di valori di soglia negativi.
In relazione ai pesi ipotizzati da quest'ultimo teorema la (b.4.1) diviene:

441
Logiche a soglia
Appendice B

S Ni . x i

Uguagliando tale somma a T si ottiene l'equazione di un iperpiano

N i .x i T

I vertici dell'ipercubo booleano per i quali la funzione vale 1 si troveranno tutti nello
stesso semispazio rispetto a questo piano, mentre i vertici per i quali la funzione vale 0 si
trovano tutti nell'altro semispazio. Puo' talvolta essere necessario aggiustare lievemente il
valore di soglia T in modo da evitare che il piano contenga qualcuno dei vertici.

110 111

100 101
010 011

000
001

figura B.4.2

Si puo' facilmente verificare che il piano:

- 2 . x2 - x0 + x1 = - 1.5

separa linearmente la funzione

f(x2, x 1, x0) = x 2 x1 .x 0

La fig. B.4.2 illustra l'intersezione di questo piano con il cubo booleano tridimensionale.
Si noti che i vertici del cubo per cui la funzione f vale 1 (circoletti anneriti) si trovano tutti
dalla stessa parte del piano, mentre quelli per cui la f vale 0 si trovano tutti dall'altro lato.

b.5) Condizioni per la separabilita' lineare.


Fino a questo momento non si e' fatto altro se non determinare quando una data
funzione booleana sia linearmente separabile ed e' abbastanza probabile che non esistano altre
funzioni separabili.
Nel presente paragrafo verra' illustrato un certo numero di condizioni necessarie
affinche' una funzione sia linearmente separabile. Tuttavia, come si vedra', nessuna di queste

442
Logiche a soglia
Appendice B

condizioni sara' anche sufficiente. A tutt'oggi non si conosce alcun insieme di condizioni
necessarie e sufficienti che permettano una semplice verifica della separabilita' lineare. Per
determinare quindi la separabilita' lineare di una funzione si dovra' dapprima considerarla in
rapporto all'insieme delle condizioni necessarie, in ordine di complessita' crescente. Solo se
tutte le condizioni necessarie saranno soddisfatte si potra' tentare di determinare con tecniche
di calcolo di tentativo un insieme di pesi.

TEOREMA b.7: Una funzione separabile linearmente e' una funzione unate.
Sulla base del teorema b.4 si puo' determinare per qualsiasi funzione separabile
linearmente in relazione a una data n-pla (j0, j1, .... , jn-1) un insieme di pesi positivi.
Si consideri questa n-pla come l'elemento piu' basso di un reticolo costituito dai vertici
di un ipercubo booleano. Si supponga poi che per il vertice (a0, a1, .... , an-1) la funzione f
valga 1.
Si puo' allora scrivere:
n 1 n 1
N i .a iji Ni T
i 0 i 0

Si supponga ora che (b0, b1, .... , bn-1) sia un generico vertice del reticolo tale che se a iji
= 1 allora b iji = 1. Se ne deduce immediatamente che:

n 1 n 1
N i .biji N i .a iji T
i 0 i 0

cioe':

n 1
N i .biji T
i 0

e che la funzione f vale 1. Quindi sulla base del teorema b.1 la funzione f e' unatein
termini di x 0j 0 , x 1j1 ,.Õ , x nn 11 .
A titolo di esempiosi verifichi che la funzione separata linearmente dalla somma

S = 2.x 2 + x1 + x0

e dalla soglia T = 2 e' unate.


Come illustrazione del teorema b.7 si costruisca l'appropriato reticolo per la funzione.
La somma, che usa tutti pesi positivi, permette di dedurre che l'elemento piu' in basso del
reticolo deve essere (010) e che il reticolo stesso puo' essere costruito come illustrato in fig.
B.5.1.
I valori di S possono ora venir calcolati per ciascun vertice del cubo booleano. Un
confronto di tali valori con la soglia T = 2 mostra che solo i tre vertici per cui S = 0 o S = 1
sono associati a valori funzionali nulli. Inoltre, come ci si aspetta, i valori funzionali sono non

443
Logiche a soglia
Appendice B

decrescenti lungo un qualsiasi percorso dal basso verso l'alto lungo il reticolo. La definizione
b.6 e' quindi soddisfatta e la funzione e' quindi una funzione unate.

101
s=4

001
111 s=2
s=3 s=3
100

011
s=1
s=2 s=1
110 000

s=0
010

figura B.5.1

Quale secondo esempio, tendente a dimostrare che la condizione enunciata e' necessaria,
ma non sufficiente, si verifichi che la funzione, chiaramente unate,

f x0 .x1 x 2 .x3
non e' linearmente separabile.
Poiche' risulta che:

f(0,0,1,1) = f(1,1,0,0) = 1

se la funzione e' separabile linearmente dev'essere:

N 0 N1 T N 2 N3 T
D'altra parte f(0,1,0,1) e f(1,0,1,0) valgono 0 e quindi:

N0 N2 T N1 N3 T
Sommando tra di loro le espressioni trovate nel primo e nel secondo caso si ottiene:

N 0 N1 N 2 N 3 2. T

N 0 N1 N 2 N 3 2. T

Si puo' quindi concludere che per la funzione in esame non si puo' ottenere un insieme
di pesi e una soglia in relazione alla n-pla (0, 0, .... , 0). Pertanto la funzione non puo' essere
separata linearmente.
Indicando con V0, V1, .... , Vk i vertici di un ipercubo booleano, si puo' enunciare il
seguente teorema.

444
Logiche a soglia
Appendice B

TEOREMA b.8: Se esistono k vertici V0, V1, .... , Vk per cui una funzione f vale 1 e ka
vertici U0, U1, .... ,Uk per i quali la stessa funzione vale 0, tali che la loro somma vettoriale
soddisfi la condizione:

k k
Vj Uj
j 1 j 1

allora la funzione f non e' separabile linearmente.


Siano Vj e Uj due vertici rappresentati come vettore colonna e i pesi siano sistemati in
un vettore riga N N 0 , N 1 , Õ , N n 1 . Si puo' allora scrivere che:

S Vj N . Vj

Si supponga che esistano k vettori Vj per i quali f = 1 e k vettori Uj per i quali f = 0, tali
che:
k k
Vj Uj
j 1 j 1
Di conseguenza:

N. Vj N. Uj
cioe':

N . Vj N.U j (b.5.1)

Tuttavia se f e' separabile linearmente si deve avere:

N . Vj T e N.U j T
e

k k
N . Vj k .T N.U j (b.5.2)
1 1

Le (b.5.1) e (b.5.2) sono ovviamente contraddittorie e quindi si deve concludere che la f


non e' separabile linearmente.
Si applichi ora, ad esempio, il teorema appena dimostrato alla:

f0 = x0.x1 + x2.x3
che gia' in precedenza si e' visto non essere separabile linearmente.
Si noti che la f vale 1 per i vertici:

{x0, x1, x2, x3} = {0,0,1,1} = {1,1,0,0}

mentre vale 0 per i vertici:

445
Logiche a soglia
Appendice B

{x0, x1, x2, x3} = {0,1,0,1} = {1,0,1,0}

Esistono quindi due vettori per i quali f = 1 e due vettori per i quali f = 0, tali che:

2 2
Vj Uj
j 1 j 1

e quindi dal teorema b.8 si puo' concludere che la f non e' separabile linearmente.
Per funzioni fino a 6 variabili la forma normale suggerisce gli insiemi di valori che le
variabili devono assumere per verificare che la funzione non sia separabile linearmente. Non
ci si deve certamente proporre di applicare il teorema esaustivamente. D'altra parte anche
un'applicazione esaustiva non costituisce una condizione sufficiente per la separabilita'
lineare, come e' stato dimostrato da E.F. Moore.
Il teorema che segue e' un ulteriore modo di manipolare funzioni con un piccolo numero
di variabili, probabilmente piu' conveviente dei precedenti. Esso puo' inoltre facilitare la
determinazione dei pesi.

TEOREMA b.9: Si supponga che una funzione sia separabile linearmente sulla base
dei pesi positivi N0, N1, .... , Nn-1. Sia poi ai il numero dei vertici per cui f =1 e x iji . Sono
allora soddisfatte le seguenti condizioni:

1) Se Ni Nk allora ai ak

2) Se Ni = Nk allora ai = ak

3) Se ai > ak allora Ni > Nk

4) Se ai = ak allora i pesi possono essere scelti in modo che


Ni = Nk

Questo teorema puo' essere dimostrato utilizzando il teorema b.9 oppure con riferimento
diretto alla definizione di separabilita' lineare. Ambedue le dimostrazioni sono semplici,
ancorche' piuttosto pesanti, e per tale motivo non vengono qui riportate. Si ritiene piu'
conveniente in questa sede illustrare il teorema con il seguente

ESEMPIO
Si vuol determinare se delle due seguenti funzioni qualcuna sia separabile linearmente e
se cio' e' vero si vuol determinare un insieme appropriato di pesi e un valore di soglia.

f1 x 2 . x1 . x 0 x 4 . x 3 x 4 . x 2 x 3 . x 2 x 3 . x 0 x 4 . x1

f2 x 4 . x 3 .x 0 x 4 .x 2 x 3 .x 2 x 3 .x 1 x 4 . x 3 . x 0 x 4 .x 1 x 4 . x 0 x 2 .x 1 . x 0

446
Logiche a soglia
Appendice B

Prendendo in considerazione per prima la f1 si puo' notare che essa e' unate. Anziche'
applicare esaustivamente i teoremi b.7 e b.8 si puo' tentare di determinare un ordinamento per
le variabili. Si riporti pertanto la funzione su una mappa, come illustrato in fig. B.5.2.

x x x x
3 2 3 2
x x x x
1 0 00 01 11 10 1 0 00 01 11 10

00 1 00 1 1 1

01 1 1 01 1 1 1

11 1 1 1 11 1 1 1 1

10 1 10 1 1 1 1

x =0 x =1
4 4

figura B.5.2

Si vede immediatamente che a4 = 14, a3 = 14, a2 = 13, a1 = 12 e a0 = 12. Dal teorema


b.9 pertanto si ricava:

N4 = N3 > N2 > N1 = N0

La conoscenza dell'ordine dei simboli suggerisce la seguente fattorizzazione:

x 4 . x 3 x 2 x1 x3 . x2 x0 x 2 . x1 . x 0

In tale forma e' molto piu' evidente che il termine x 4 .x 0 non appartiene alla funzione
mentre vi appartiene x 3 .x 0 . Pertanto si deve avere:

N 4 N0 T e N3 N0 T
cioe':

N4 N3

La contraddizione tra l'espressione appena ricavata e quella precedentemente trovata


porta a concludere che la funzione f1 non e' separabile linearmente.
La funzione f2 viene riconosciuta come unate dopo aver eseguito la semplificazione:

x 4 .x 3 .x 0 x4 .x 3 .x 0 x4 .x 3
La mappa della funzione e' riportata in fig. B.5.3.

447
Logiche a soglia
Appendice B

x x x x
3 2 3 2
x x x x
1 0 00 01 11 10 1 0 00 01 11 10

00 1 1 00 1 1 1 1

01 1 1 1 01 1 1 1 1

11 1 11 1 1 1 1

10 1 10 1 1 1

x =0 x =1
4 4

figura B.5.3

Un conteggio dei vertici dice che a4 = 15, a3 = 14, a2 = 13, a1 = 13 e a0 = 12. Cio'
suggerisce la fattorizzazione:

f2 x 4 . x3 x2 x1 x0 x3 . x2 x1 x 2 .x 1 . x 0
Poiche' vi devono essere quattro pesi distinti, con solo N2 = N1, si puo' provare con la
soluzione piu' semplice:

N4 = 4 N3 = 3

N2 = N1 = 2 N0 = 1

Si noti che la piu' piccola somma dei pesi in corrispondenza ad un prodotto booleano
presente nella f2 e' uguale a 5. In altre parole la somma e' inferiore a 5 per qualsiasi altro
prodotto degli stessi simboli che non sia incluso nella funzione. pertanto il semplice insieme
di pesi ipotizzato e' sufficiente a separare linearmente la f2 se si sceglie una soglia pari a 5,
con riferimento alla n-pla (0, 0, 1, 1, 0).
Negli esempi citati ci si e' accontentati di individuare i pesi per mezzo di metodi di
tentativo e questo approccio e' probabilmente sufficiente per le funzioni che possono essere
implementate con i dispositivi a soglia facilmente relizzabili. Tuttavia algoritmi che
permettano di individuare i pesi di funzioni con elevato numero di variabili separabili
linearmente sono di un notevole interesse teorico.
Queste tecniche sono spesso implementate come programmi di calcolo e in alcuni casi
esse sono state estese fino a formare la base di tecniche adattive di riconoscimento di
configurazioni.
Come si e' accennato e come e' stato visto, non tutte le funzioni booleane sono
separabili linearmente, anzi solo una loro piccola porzione lo e'. Ad esempio solo circa il 3%
delle funzioni di quattro variabili sono separabili linermente. All'aumentare del numero di
variabili una opercentuale sempre minore risulta separabile.
In conseguenza a tale fatto molti sforzi sono stati dedicati all'individuazione di tecniche
che permettessero di realizzare funzioni non separabili linearmente utilizzando due o piu'
elementi logici a soglia. Tuttavia se la velocita' di commutazione e' un'esigenza importante da
soddiosfare e' meglio non superare i due livelli. Purtroppo a tutt'oggi non e' stato individuato

448
Logiche a soglia
Appendice B

alcun metodo generale di progetto e inoltre gli insiemi di pesi che tali tecniche individuano
sono talmente complessi da rendere pressocche' impossibile la relizzazione circuitale con
elementi di una certa semplicita'.
Un approccio piu' ragionevole sembra quello di limitarsi a considerare solo alcuni casi
speciali di funzioni a soglia (come ad esempio funzioni di maggioranza) che sono separabili
ricorrendo ad insiemi di pesi di semplice struttura.
A questo tipo di approccio sono dedicati i paragrafi successivi di questa appendice.

b.6) Dispositivi logici magnetici a soglia.


Prima di prendere in considerazione l'interconnessione di dispositivi a soglia e'
opportuno esaminare un altro tipo di realizzazione in cui il componente principale e' un
nucleo magnetico toroidale. Tale nucleo e' realizzato in ferrite con ciclo di isteresi
praticamente rettangolare e magnetizzazione residua relativamente alta, come illustrato in fig.
B.6.1.

x
2 0

N
0
Fs
F
- Fs +e
s

1
x
n-1

N
n-1

figura B.6.1

Indicando i due stati di magnetizzazione residua con 1 e 2, si supponga che il nucleo


si trovi inizialmente nello stato 1. Fino a che il campo magnetico applicato al nucleo si
mantiene inferiore a Fs, lo stato del nucleo si manterra' sul lato inferiore del ciclo di isteresi e
le variazioni di flusso saranno molto piccole. Quando il campo supera, anche di poco, Fs lo
stato di magnetizzazione cambia da 1 a 2 e rimane in tale stato finche' il campo non
diviene inferiore a -Fs.
E' abbastanza evidente che con un nucleo che abbia tale comportamento si puo'
realizzare un dispositivo a soglia, in quanto una variazione relativamente piccola dell'ingresso
causa la commutazione dell'uscita tra due stati nettamente distinti.
La realizzazione di un dispositivo a soglia e' illustrata sempre in fig. B.6.1. Vi e' un
avvolgimento separato di Ni spire per ciascun ingresso xi. Indicando co I la corrente che
circola in ciascun avvolgimento e facendo corripondere i pesi con il numero di spire Ni e la
soglia con Fs, se

I . Ni . x i Fs

il nucleo si trovera' nello stato 1 , in caso contrario in 2.

449
Logiche a soglia
Appendice B

E' necessario evidentemente avere il modo di sapere in quale dei due stati si trovi il
nucleo magnetico. A tale scopo e' presente un avvolgimento con ingresso impulsivo p e un
avvolgimento di "sense". Per determinare lo stato del nucleo all'avvolgimento p viene
applicato un impulso di corrente di ampiezza sufficiente a portare il nucleo nello stato 1 ,
indipendentemente dai valori delle variabili di ingresso. Se quando arriva l'impulso lo stato si
trova nello stato 2 , si ha una notevole variazione di flusso che induce nell'avvolgimento di
"sense" una tensione facilmente rilevabile, mentre se si trova nello stato 1 non si ha in
pratica variazione di flusso e quindi nemmeno tensione indotta.
Il diodo sulla linea di uscita evita che si abbiano impulsi si tensione di polarita' opposta
a quella utile quando il nucleo passa dallo stato 1 a quello 2.

ESEMPIO
Progettare un dispositivo magnetico a soglia che implementi la funzione:

f x1 , x 2 , x 3 x1 x 2 . x 3

utilizzando un nucleo con ciclo di isteresi uguale a quello illustrato in fig. B.6.1.
Si supponga che dall'andamento del ciclo di isteresi si rilevi che e' necessaria una forza
magnetomotrice di almeno 2.I per commutare lo stato magnetico del nucleo.
Se la corrente relativa al valore logico 1 e' I e N1 = 2 spire, N2 = N3 = 1 spira, allora la
forza magnetomotrice complessiva sara':

I . Ni . x i 2. x 1 x 2 x 3

e varra' come minimo 2.I quando:

f x1 x2 .x3 1
Quando le tre variabili di ingresso valgono contemporaneamente 1 la forza
magnetomotrice vale 4.I e quindi la corrente impulsiva nell'avvolgimento di lettura dovra'
essere come minimo 6.I per portare il nucleo nello stato 1.

b.7) La realizzazione delle funzioni simetriche con l'uso di dispositivi a soglia.


Le caratteristiche di un dispositivo fisico non sono mai costanti; ad esempio esse
variano molto spesso con la temperatura. Questo fatto, unito alle usuali limitazioni di
guadagno, pone dei limiti alla complessita' delle funzioni separabili linearmente che possono
essere realizzate utilizzando un unico elemento a soglia. Per questi motivi gli elementi a
soglia, almeno nelle loro realizzazioni analogiche, hanno trovato applicazione solo
nell'implementazione di alcune particolari classi di funzioni.
Una di queste applicazioni e' la realizzazione di funzioni simmetriche. Si puo'
facilmente verificare che i pesi (positivi), l'n-pla e la soglia sulla base dei quali la funzione
simmetrica:

S n k x 0j 0 , x1j1 , , x njn 11 (b.7.1)

e' linearmente separabile, sono:

450
Logiche a soglia
Appendice B

Ni = 1 (j0, j1, ....... , jn-1) T=k

Infatti se p delle variabili x iji valgono 1 e p < k, si avra':

N i . x iji p T

mentre se p k si ottiene:

N i . x iji p T

La realizzazione di un'arbitraria funzione simmetrica, che utilizzi piu' di un dispositivo a


soglia, si basa su funzioni elemetari del tipo di quella (b.7.1).
Si voglia ad esempio ottenere una realizzazione a resistori - transistori della funzione
simmetrica S 50,1,3,4 x 0 , x 1 , x 2 , x 3 , x 4 .
Come prima cosa e' necessario osservare che:

S50,1,3,4 S52,5 S5 2 .S5 3 S5 5

Si puo' cioe' esprimere la S 50,1,3,4 in termini di tre funzioni simmetriche, ciascuna delle
quali e' separabile linearmente. Se si volesse realizzare ciascuna di queste funzioni si
dovrebbe far uso di quattro elementi a soglia, ma vi e' un modo di procedere migliore.
Si supponga infatti di generare per prima la sola funzione S 5 3 . La sua realizzazione
mediante un elemento a soglia e' riportata in fig. B.7.1.

x0 1
1
x1
x2
x3
1

1
3
1
x4

figura B.7.1

Per la realizzazione definitiva della funzione voluta e' necessario solo un altro elemento
a soglia. Quest'ultimo puo' essere pensato come un'esecuzione invertente di S 52,5 con un
ulteriore ingresso di peso 3 che riceve l'uscita dell'elemento di fig. B.7.1, come illustrato in
fig. B.7.2.

451
Logiche a soglia
Appendice B

1
x
0
1
x

3
1 3
1
x2
x0 1
1
x3
5
x1 1
1
z
x4 x2 1
x3 1
x4 1

figura B.7.2

Quando l'uscita dell'elemento al secondo livello e' 1, cio' puo' essere interpretato come
se la soglia dell'elemento al primo livello fosse stata diminuita da 5 a 2. In tal caso e'
sufficiente che solo 2 tra i suoi cinque ingressi valgano 1 perche' il transistore commuti. Si
lascia al lettore il compito di verificare che l'uscita z verifica l'equazione (b.7.2).
La piu' importante tra le funzioni simmetriche e' forse la funzione di parita'. Nella
realizzazione di questa funzione il concetto di usare l'uscita di alcuni elementi a soglia per
controllare le soglie di elemeti a livello piu' basso, come e' stato appena illustrato, e' portato
alle sue logiche conclusioni.
Ci si limitera' a trattare funzioni di parita' e disparita' di 2k-1 variabili, con k positivo
intero. Si prenderanno cioe' in considerazione le funzioni:

S k0,2,....,2k 1
S k1,3,....,2k 1

A titolo di esempio si prendera' in considerazione la funzione di parita' per k=3.


L'estensione ad un numero di variabili superiore e' immediata e le funzioni di disparita'
possono essere ottenute osservando che:

S70,2,4,6 S71,3,5,7 (b.7.3)

Poiche' gli elementi usati sono invertenti si vede che l'elemento finale deve essere
controllato in modo da avere delle soglie apparenti pari a 1,3,5,7. La soglia deve essere 1
quando il numero di ingressi eccitati e' minore o uguale a 1, 3 qiando il numero di ingressi
eccitati e' minore o uguale a 3 e cosi' via.
Si puo' dimostrare che l'operazione e' fattibile scrivendo la seguente espressione,
equivalente alla (b.7.3):

S71,3,5,7 S 71 S73 S75 S77

S7 1 .S72,3,6,7 .S7 4 S73 .S7 4 S7 5 .S72,3,6,7 S77

Si supponga ora di tentare di realizzare l'espressione precedente con uno stadio finale a
transistori i cui ingressi siano le 7 variabili e le due funzioni S 72,3,6,7 e S 7 4 , come illustrato
in fig. B.7.3.

452
Logiche a soglia
Appendice B

j1
x1 7
fb = S
{2,3,6,7)

?
j7
x7

j1 Nb
x1
f a = S7{> 4}
Na
? j1 7
x1
j7
x7
j7
x
7

figura B.7.3

Ovviamente la soglia dovra' essere 7 quando fA = fB = 0. Dall'espressione appena


ricavata tuttavia si vede che la soglia dovra' essere ridotta a 5 quando fB = 1 e fA = 0.
Pertanto:
T' = 5 = 7 - NB
e quindi NB = 2. In modo analogo, quando fB = 0 e fA = 1 si ha:
T" = 3 = 7 - NA
e quindi NA = 4. Infine per fA = fB = 1 si verifica che:
T''' = 7 - NA - NB = 1
come voluto. La realizzazione finale e' riportata in fig. B.7.4.

1
xj1
1
fa
4
1
xj7
7

4
4

xj1
1 fb
2
1 S7{0,2,4,6}
6 1
7
xj1
1
1
xj7
7
1
xj7
7

figura B.7.4

Si noti che la f A S7 4 puo' venir realizzata con un unico elemento a soglia, mentre cio'
non e' possibile per la fB .

453
Logiche a soglia
Appendice B

Si puo' tuttavia osservare che:

fB S72,3 S76,7 S7 2 .S7 4 .S76,7

Si vede pertanto che la fB e' realizzabile utilizzando come ingressi solo le variabili di
simmetria e la fA, che e' gia' stata realizzata. Si lascia al lettore ikl compito di verificare il
valore dell'uscita per ciascun possibile numero di ingressi posto a 1. In fig. B.7.5 tuttavia sono
riportate le soglie apparenti e le uscite di ciascun elemento in corrispondenza dei diversi
possibili numeri di ingressi posti a 1.

xjii T' f T' f T' f


A A B B C C

0 4 1 2 1 1 1
1 4 1 2 1 1 0
2 4 1 2 0 3 1
3 4 1 2 0 3 0
4 4 0 6 1 5 1
5 4 0 6 1 5 0
6 4 0 6 0 7 1
7 4 0 6 0 7 0
figura B.7.5

Si noti che per poter ottenere tutte le sette possibili transizioni dell'uscita e' stato
necessario che i tre transistori, con cui sono realizzati i tre elementi a soglia, assumessero tutte
le otto possibili combinazioni di valori. In generale saranno necessari n+1 stati distinti quando
le transizioni del'uscita sono n.
Come si vedra' poco piu' avanti non e' tuttavia sempre possibile ottenere considerevoli
vantaggi nella realizzazione di funzioni simmetriche con elementi a soglia. E' sempre
possibile invece ottenere realizzazioni ottimali di circuiti di test di parita' con un numero di
ingressi pari 2k -1. In fig. B.7.6 e' riportato il circuito per 15 variabili e ulteriori estensioni ad
un numero di variabili superiore sono immediate.

1
x j1
1

8
1
x j15
15

8
8 8
1
x j1
1
12 4 4

x j15
1 x j1
1
1
14
2

1
15
15 x j1
1
1
x j15 1
15 x j15
15

figura B.7.6

454
Logiche a soglia
Appendice B

Quale ulteriore esempio si voglia realizzare la S 90,3,5,7 . Tentando di procedere come gia'
fatto nella realizzazione delle funzioni di parita', si ottiene:

S90,3,5,7 S91,2 S94 S96 S98,9

S9 1 . f a . f b S9 4 . f a S9 6 . f b S9 8

Si noti che la soglia attuale del dispositivo al primo livello dovra' essere 8. Per far si' che
la soglia sia correttamente aggiustata per i tre casi in cui meno di 8 ingressi devono
commutare il transistore, dovranno essere soddisfatte le seguenti condizioni:

8 - Nb = 6
8 - Na = 4

8 - Na - Nb = 1

e cio' e' chiaramente impossibile. E' necessario quindi utilizzare tre ingressi funzionali per
ottenere l'elemento a soglia finale. Deve cioe' essere:

S90,3,5,7 S9 1 . f c S9 4 .f a S9 6 .f b S9 8

In questo caso si possono scegliere tre funzioni linearmente separabili in termini di


variabili di simmetria come segue:

fc S9 2 fa S9 5 fb S9 7

In questo caso tuttavia non si puo' conseguire alcun risparmio utilizzando qualcuna di
queste funzioni nella realizzazione delle altre. La realizzazione completa, soluzione del
problema proposto, e' riportata in fig. B.7.7.

1
x
1

7
1
x9
1
x
1 1
x
5 1
1 9
S
x9 {0,3,5,7}

8
1
2
x9
1
2
x
1
3
2
1
x9

figura B.7.7

455
Logiche a soglia
Appendice B

Sebbene vi sia stato e vi sia tuttore un considerevole interesse nei confronti dei
dispositivi a soglia, questo interesse e' in massima parte teorico. Nessuno dei dispositivi a
soglia di tipo analogico e' oggi sufficientemente veloce per avere una larga diffusione.
Algoritmi per calcolatore che realizzino funzioni molto complesse presentano in pratica
interesse solo per la possibilita' di simulare elementi a soglia come dispositivi adattivi di
"pattern recognition". L'estensione dei dispositivi logici lineari al campo dell'intelligenza
artificiale e' poi un argomento di notevole interesse, ma non e' possibile trattarlo in questa
sede.
Per funzioni fino a 6 variabili e' possibile ottenere delle realizzazioni economiche
seguendo una procedura simile a quella impiegata per le funzioni simmetriche. Non e'
garantito tuttavia che si possa ottenere la realizzazione minima senza condurre un certo
numero di progetti di tentativo.

456

Potrebbero piacerti anche