Algebre booleane e progetto logico dei calcolatori digitali: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
ortografia
il contenuto è già stato spostato in sottopagine
Etichetta: Sostituito
Riga 1:
{{Algebre booleane e progetto logico dei calcolatori digitali}}
{{WIP}}
[[Algebre booleane e progetto logico dei calcolatori digitali/Copertina|Copertina]]
=Parte I=
==Algebre Booleane==
===Introduzione===
1.1. ''I sistemi aritmetici''<br/>
I calcolatori aritmetici moderni, le reti di comunicazione (come le centrali telefoniche), gli insiemi dei comandi automatici dei processi industriali (come quelli delle pile atomiche per esempio) sono, in totalità o in parte, dei sistemi aritmetici: essi hanno la caratteristica essenziale di manipolare delle informazioni discrete; cioè i segnali che sono applicati al sistema (le entrate), o quelli che sono prodotti (uscite), prendono soltanto un numero finito di valori distinti (gli stati), che non variano con continuità.<br/>
Che i valori dei segnali siano discreti può essere un risultato della costruzione del sistema: i sassolini o le dita con cui si conta possono essere un esempio.<br/>
Ma il più delle volte è in seguito ad una convenzione speciale che si quantificano delle grandezze fisiche che, macroscopicamente, ci appaiono invece come continue.<br/>
I calcolatori forniscono un esempio di questo processo di quantificazione.<br/>
I calcolatori in effetti si dividono in due categorie:<br/>
 
Questo libro introduce al tema delle algebre booleane e del progetto logico dei calcolatori digitali.
''Calcolatori analogici''<br/>
Macchine calcolatrici in cui ogni grandezza matematica o fisica, su cui swi vuole operare, viene rappresentata da una grandezza fisica variabile con continuità e nelle quali il calcolo viene eseguito costruendo un modello del sistema in esame.<br/>
Risolvono particolari tipi di problemi, simulandoli su modelli adeguati.<br/>
La principale applicazione dei calcolatori analogici si ha nello studio di sistemi descrivibili per mezzo di equazioni differenziali ordinarie ed equazioni differenziali alle derivate parziali.<br/>
Vengono altresì usati per la risoluzione di sistemi di equazioni algebriche lineari (simultanee) e per il calcolo delle [[w:radici di polinomi|radici di polinomi]].<br/>
Il regolo calcolatore, inventato nel secolo XVII, è il primo esempio di calcolatore analogico sul quale, ad es., i logaritmi sono rappresentati da lunghezze ad essi proporzionali (da cui il nome analogia).<br/>
Questo procedimento presenta però notevoli difficoltà se si lavora su dei fenomeni discontinui, ed altresì presenta l 'inconveniente che la precisione dei calcoli è limitata da quella degli organi utilizzati nel calcolatore.<br/>
I vantaggi più interessanti dei modelli analogici sono il tempo relativamente breve necessario per giungere alla soluzione del problema, ed inoltre la possibilità, una volta introdotto il problema nell'elaboratore, di esaminare in pochissimo tempo, le soluzioni corrispondenti ad un vasto campo di valori dei parametri.<br/>
 
== Libri correlati ==
''Calcolatori aritmetici(numerici o digitali)''-<br/>
* {{libro|Algebra vettoriale}}
All'analogia diretta utilizzata dal calcolatore analogico si sostituisce , nei calcolatori aritmetici, un'analogia indiretta.<br/>
* {{libro|Analisi topologica dei circuiti elettrici}}
Usufruendo della rappresentazione numerica delle grandezze, si applica l'operazione di codifica (analogia evocata prima) sulle cifre che compongono i numeri, in luogo di applicarla alle grandezze rappresentate da quest'ultimi.<br/>
* {{libro|Analisi vettoriale}}
Un calcolatore digitale rappresenta quindi numeri in forma codificata e questi assumono valori finiti o discreti.<br/>
* {{libro|Reti logiche}}
Da un punto di vista strettamente concettuale, i calcolatori digitali traggono la loro origine dalla macchina descritta dal logico matematico [[w:A.M.Touring|A.M.Touring]] nel 1936.
 
[[Categoria:Algebre booleane e progetto logico dei calcolatori digitali| ]]
1.2. ''Storia del calcolatore ''<br/>
[[Categoria:Ingegneria]]
Il primo mezzo che si possa qualificare come un calcolatore digitale è l'abaco(il pallottoliere) ideato verso il 600 a.c.<br/>
[[Categoria:Formazione superiore]]
l'abaco permette di rappresentare i numeri con la posizione delle palline o dischetti su una rastrelliera.<br/>
{{Avanzamento|75%|9 giugno 2018}}
Le somme e le sottrazioni vengono effettuate rapidamente e con efficienza spostasndo in modo appropriato i dischetti (abaculi).<br/>
{{alfabetico|A}}
I problemi di navigazione, bellici, commerciali, con conseguente necessità di risolvere calcoli di notevole mole, suscitarono, a partire dal XVII, e nel XVIII secolo, un violento impulso per lo sviluppo delle "macchine" da calcolo.<br/>
[[Categoria:Dewey 621]]
Nel 1620l'inglese E.Gunter ideava il regolo calcolatore; e dello stesso periodo erano le invenzioni di B.Pascasl (1642) e di W.Leibniz (1651): il primo ideava unamacchina addizionatrice , il secondo una moltiplicatrice; macchine funzionanti per mezzo di ruote azionate manualmente ma con riporto automatico.<br/>
Altro tentativo degno di essere menzionatoè quello di G.Poleni (1709) veneziano, che ideo una "macchina per calcolare", di cui realizzo un prototipo funzionante.<br/>
A Charles- Xavier Thomas de Colmar va il merito di aver costruito (1820) la prima calcolatrice venduta su scala commerciale.<br/>
Mentre un altro francese, Falcon, un secolo prima, aveva ideato il sistema delle schede perforate<br/>
L'inglese C.Babbage, che a diritto può essere considerato il padre del moderno calcolatore digitale, combinando le due idee su menzionate, inventava nel 1833 un dispositivo analitico e stabiliva un certo numero di principi fondamentali per la teoria dei calcolatori aritmetici.<br/>
Ma il moderno "computer" (calcolatore) è nato con lo sviluppo dei relais, dei tubi a vuoto e dei transistori: l'insieme dei dispositivi meccanici, magnetici ed elettrici di cui è costituito un calcolatore è chiamato correntemente "hardware".<br/>
Nel 1944 entra in funzione nell'università di Harward il Mark I° a relais:<br/>
 
 
nel 1946 l'Eniac (Pensilvania Univ.): a valvole.<br/>
nel 1951 Univac e IBM, primi calcolatori a valvole in commercio:
 
 
 
nel 1959 calcolatori a transistor<br/>
nel 1960 calcolatori a circuiti integrati<br/>
nel 1960 calcolatori a a dispositivi superintegrati.<br/>
Oggi esistono calcolatori che compiono 20 milioni di operazioni al secondo, cioè una operazione ogni 50 10<sup>[[-9]]</sup> sec.<br/>
E' continuata negli anni e continua con ritmo sempre più crescente la diffusione dei calcolatori sia nelle applicazioni di tipo organizzativo sia in quelle tecnico-scientifiche.
 
{{Avanzamento|100%|3 giugno 2015}}
 
===Sistemi di numerazione, aritmetica binaria===
2.1. ''struttura della memoria dal punto di vista operativo<br/>''
In un calcolatore digitale la memoria è l'organo capace di conservare dei dati e delle istruzioni codificati in un certo modo. Si pone così il problema di cercare qual è il supporto migliore per memorizzare un'informazione. Dato un dispositivo che può assumere b stati diversi, è possibile codificare un numero in una certa base associando ad ogni stato una cifra del numero in questione.<br/>
Per esempio, si pensi di avere un dispositivo capace di assumere 10 stati diversi (S<sub>0</sub>,S<sub>1</sub>,S<sub>2</sub>...S<sub>9</sub>) e di associare ad ognuno di essi una delle dieci cifre base del sistema decimale nel seguente modo;<br/>
 
:::::<math>S_0=0\quad S_1=1......S_9=9</math>
 
Ora se si vuole codificare il numero 3541 abbiamo bisogno di quattro dispositivi (perché quattro sono le cifre del numero da codificare) che chiameremo D<sub>1</sub>,D<sub>2</sub>, D<sub>3</sub> e D<sub>4</sub>, dove<br/>
D<sub>4</sub> assumerà lo stato corrispondente al numero delle unità<br/>
D<sub>3</sub> a quello delle decine<br/>
D<sub>2</sub> a quello delle centinaia<br/>
D<sub>1</sub> a quello delle migliaia.<br/>
 
{| class="wikitable"
|-
! stato !! S<sub>0</sub> !! S<sub>1</sub> !! S<sub>2</sub> !! S<sub>3</sub> !! S<sub>4</sub> !! S<sub>5</sub> !! S<sub>6</sub> !! S<sub>7</sub> !! S<sub>8</sub> !! S<sub>9</sub>
|-
| D<sub>1</sub> || || || || 3 || || || || || ||
|-
|b D<sub>2</sub> || || || || || || 5 || || || ||
|-
| D<sub>3</sub> || || || || || 4 || || || || ||
|-
| D<sub>4</sub>|| || 1 || || || || || || || ||
|}
 
In definitiva per codificare un numero di '''n''' cifre in base '''b''' occorrono '''n''' dispositivi capaci di assumere '''b''' stati diversi, ed una volta costruito un tale sistema vi si possono codificare (beninteso non contemporaneamente) '''b<sup>n</sup>''' numeri.<br/>
Vediamo ora come si può arrivare a dire che la base '''2''' è la più conveniente nel senso che a parità di numero di informazioni da memorizzare è necessario il minor numero di stati.<br/>
Si è visto che per memorizzare un numero di '''n''' cifre in base '''b''' occorre un dispositivo che contiene '''b'''x'''n''' stati diversi e capace di memorizzare '''N=b<sub>n</sub>''' informazioni diverse; il problema si pone quindi:<br/>
 
:::::<math>\N=b^{n}=cost\qquad b\cdot n=min </math>
 
Immaginando ora di far variare '''b''' ed '''n''' con continuità si hanno le condizioni estremali:
 
:::::::<math>n db+b\lg b\ dn=0</math>
 
:::::<math>\frac{\partial (b\cdot n)}{\partial b}db+\frac{\partial (b\cdot n)}{\partial n}dn=0\qquad n db+b dn=0</math>
 
dalle quali segue che '''lg b=1''' cioè '''b=e''' che si può verificare è effettivamente un punto di minimo per la funzione '''b×n''' con la condizione di '''b<sup>n</sup>=cost.'''<br/>
Poiché 2<e<3 si potrebbe scegliere tanto il 2 quanto il 3 come base ma per motivi tecnici 8ad esempio quelli riguardanti il vantaggio dei dispositivi bistabili) si è scelta la base 2.<br/>
Vediamo ciò con un esempio pratico: il numer0 999<sup>10</sup>=111101111<sub>2</sub> (il numero in basso sta ad indicare la base, il passaggio dalla base 10 alla base 2 verrà trattato in seguito). Allora volendo costruire i dispositivi atti a rappresentarli avremo:
 
{| class="wikitable"
|-
! Disp. !! S<sub>0</sub> !! S<sub>1</sub> !! S<sub>2</sub> !! S<sub>3</sub> !! S<sub>4</sub> !! S<sub>5</sub> !! S<sub>6</sub> !! S<sub>7</sub> !! S<sub>8</sub> !! S<sub>9</sub>
|-
| D<sub>1</sub> || || || || || || || || || || 9
|-
| D<sub>2</sub> || || || || || || || || || || 9
|-
| D<sub>3</sub> || || || || || || || || || || 9
|}
 
{| class="wikitable"
|-
! ..... !! D<sub>1</sub> !! D<sub>2</sub> !! D<sub>3</sub> !! D<sub>4</sub> !! D<sub>5</sub> !! D<sub>6</sub> !! D<sub>7</sub> !! D<sub>8</sub> !! D<sub>9</sub> !! D<sub>10</sub>
|-
| S<sub>0</sub> || || || || || || 0 || || || ||
|-
| S<sub>1</sub> || 1 || 1 || 1 || 1 || || 1 || 1 || 1 || 1 || 1
|}
 
è facile vedere che nel primo caso occorrono 30 stati diversi, mentre nel secondo solo 20, ed inoltre nel primo si possono memorizzare 10<sub>3</sub>=1000 informazioni menttre nel secondo 2<sup>10</sup>=1024 informazioni.<br/>
Visto che la base 2 è migliore, vediamo come sono organizzati i dispositivi atti a memorizzare un numero in tale base.<br/>
Logicamente essi saranno in gradodi assumere due stati diversia cui diamo i valori:'''1''' o '''0'''; '''+''' o '''-'''; '''vero''' o '''falso'''.<br/>
I dispositivi vengono raggruppati (fisicamente) in insiemi, l'insieme delle informazioni binarie in essi contenute viene chiamato voce.<br/>
Ad ogni insieme viene associato un numero (indirizzo) che ci permette di accedere alla voce. Per esempio se si ha bisogno di conservare da qualche parte una informazione si da al computer l'istruzione di memorizzarla nella voce per es. 001.
 
2.2. ''[[w: Sistemi di numerazione|Sistemi di numerazione]]''<br/>
La nozione di numero è una delle nozioni fondamentali dell'aritmetica e della matematica. Non tracceremo qui ne la storia di questa nozione ne descriveremo l'evoluzione che ha portato alle definizioni assiomatiche dei numeri. Constateremo solamente che in praticai numeri ci risultano accessibili grazie ad una rappresentazione che è in generale decimale, ma può anche essere di tipo differente (sessagesimale, romana...). Un metodo di rappresentazione costituisce quello che si chiama un sistema di nemerazione. Il sistema piùusato nella vita corrente è quello decimale.<br/>
Consideriamo il numero:
 
:::::::::::<math>N_{10}=15703</math>
 
Questa notazione significa in pratica che '''N''' può considerarsi risultante dalla somma:<br/>
 
::::::<math>N=1\cdot 10^4+5\cdot 10^3+7\cdot 10^2+0\cdot 10^1+3\cdot 10^0</math>
 
In altri termini, la scrittura ordinaria dei numeri è un modo di esprimerli in funzione delle cifre da '''0''' a '''9''' e delle potenze di '''10'''.<br/>
Questa notazione ha le seguenti proprietà:<br/>
-la posizione di una cifra indica la potenza di cui essa è coefficiente nel calcolo della somma<br/>
-in assenza di una potenza nella somma si mette uno'''0''' nella posizione corrispondente<br/>
non è necessario scrivere gli eventuali zeri a sinistra dell'ultima cifra non nulla.<br/>
A causa di queste proprietà si ha l'abitudine di dire che la numerazione decimale è una '''numerazione di posizione'''.<br/>
Il numero '''10''', in funzione delle cui potenze si esprime il numero '''N''', viene detto la base del sistema e sono necessari 10 simboli distinti 0, 1, 2, 3....9 per scrivere un numero.<br/>
L'utilizzazione della base 10 non è legata ad alcuna necessità logica o matematica ma probabilmente a considerazioni di tipo pratico; comunque si è fatto uso anche di altri sistemi di numerazione (base 12, 20, 60 in particolare). Si può allora generalizzare questa nozione di numerazione di posizione al modo seguente: dato un numero intero b>1, detto base del sistema del sistema di numerazione considerato, è b simboli distinti
x<sub>0</sub>, x<sub>1</sub>.....x<sub>{b-1}</sub>, si fa la convenzione di scrivere un numero intero sotto la forma:
 
:::::::<math>X_b=x_n x_{n-1}....x_0 </math>
 
e questo per convenzione significa che il numero X può essere calcolato mediante la formula
 
:::::<math>X_b=x_n b^n+x_{n-1}b^{n-1}+...+x_k b^k+...+x_0 b^0</math>
 
::::::::<math>X_b=\sum_{k=0}^{k=n} x_kb^k</math>
 
Ogni simbolo x<sub>n</sub>...x<sub>k</sub>....x<sub>0</sub> è uno fra i b simboli utilizzati per rappresentare i numeri da 0 a b-1.<br/>
Data la rappresentazione x<sub>n</sub>x<sub>{n-1}</sub>.....x<sub>0</sub> la sommatoria fornisce X univocamente, e inversamente si può dimostrare che la rappresentazione x<sub>n</sub>x<sub>{n-1}</sub>....x<sub>0</sub> di un intero è unica.<br/>
 
Nota 1:<br/>
*Per b=2 si ha un sistema di numerazione binario
* " b=8 ottale
* " b=10 decimale
* " b=12 dodecasimale
* " b=16 esadedcimale
* " b=60 sessagesimale
 
Nota 2<br/>
Se si effettua la somma in un altro sistema di numerazione , il risultato sarà un numero X. Ad esempiosi può utilizzare un sisterma di posizione ma con una base '''b'''' diversa.<br/>
Sarà allora
 
::<math>X'=X_{b'}=(x_n)_{b'}(b^n)_{b'}</math>
 
Esempio:<br/>
Consideriamo il numero rappresentato in ottale da: X<sub>8</sub>= 3017.<br/>
Questo numero può essere rappresentato in decimale al modo seguente:<br/>
 
::::::<math>X_{10}=3\cdot 8^3+0\cdot8^2+1\cdot8^1+7\cdot8^0=1551</math>
 
e quindi il numero che si scrive X<sub>8</sub>=3017 in ottale diventa X<sub>10</sub>=1551 in decimale.
Nota 3<br/>
L'indice k ha nome peso o rango: il peso più debole è 0, quello più forte è n.<br/>
 
Nota 4:<br/>
E' da notare la distinzione tra un numero e la sua rappresentazione; tale distinzione è importante ed interviene nei problemi di conversione di un numero da un sistema di numerazione ad un altro.<br/>
Le definizioni precedenti si riferiscono a numeri interi. In generale si avranno espressioni comprendenti una parte
intera ed una frazionaria che scriveremo:
 
:::::<math>X_b=x-_n x_{n-1} ...x_{-1} x_{-2}.....x_{-m}....</math>
 
espressione del numero
 
::::::::::<math>X=\sum_{i=-}^{i=n}x_i b^i</math>
 
Come nel sistema decimale la virgola separa la parte intera da quella frazionaria.
 
2.3. ''Sistema di numerazione binario''<br/>
2.3.1.Numerazione binaria.<br/>
In questo sistema un numero è rappresentato , conformemente alla definizione generale da una successione di 1 e di 0:
 
:::::<math>N_2=x_n x_{n-1}....x_0,x_{-1} x_{-2}....x_m...</math><br/>
cioè<br/>
:::::::::<math>N_2=\sum_{i=1}^{i=n}x_i2^i</math>
 
in cui i simboli x<sub>i</sub> assumono i valori o '''0''' o '''1''' per ogni valore di '''i''' sono detti cifre binarie o digits.
 
Esempio:<br/>
:::::::::<math>N_2=1011,11</math><br/>
:::::<math>N_10=2^3+2^1+2^0,2{-1}+2^{-2}=11,75</math>
 
Nota:<br/>
Con n cifre decimali è possibile rappresentare 10<sup>n</sup> numeri. Per rappresentare questi numeri nel sistema binario è necessario un numero di cifre binarie '''m''' tali che<br/>
:::::::::::<math>2^m>10^n</math><br/>
cioè<br/>
:::::::::::<math>m>3,32\cdot n</math>.
 
2.3.2. ''Addizione e sottrazione in binario. Complementazione''<br/>
''Addizione'': consideriamo due numeri<br/>
:::::<math>X=x_n x_{n-1}....x_i....x_0</math><br/>
:::::<math>Y=y_n y_{n-1}....y_i....y_0</math><br/>
Si cerca '''S=X+Y'''. A tale scopo si procede come nel sistema decimale, partendo dal rango '''0''' e determinando rango per rango la somma '''S'''. Ad ogni rango '''i''' si determina:<br/>
-la somma modulo 2 di '''x<sub>i</sub>''', '''y<sub>i</sub>''' e del riporto '''r<sub>i</sub>''' ottenuto dal rango precedente, ottenendo il digit '''s<sub>i</sub>''' della somma '''S'''.<br/>
-il riporto '''r<sub>{i+1}</sub>''' da riportare sul rango '''i+1'''.<br/>
 
queste due operazioni sono riassunte nella tabella 2.3.
{| class="wikitable"
|-
! X<sub>i</sub>
! Y<sub>i</sub>
! r<sub>i</sub>
! X<sub>i</sub>+Y<sub>i</sub>+r<sub>i</sub>
! S<sub>i</sub>
! r<sub>i</sub>
|-
| 0
| 0
| 0
| 0
| 0
| 0
|-
| 0
| 0
| 1
| 1
| 1
| 0
|-
| 0
| 1
| 0
| 1
| 1
| 0
|-
| 0
| 1
| 1
| 10
| 0
| 1
|-
| 1
| 0
| 0
| 1
| 1
| 0
|-
| 1
| 0
| 1
| 10
| 0
| 1
|-
| 1
| 1
| 0
| 10
| 0
| 1
|-
| 1
| 1
| 1
| 11
| 1
| 1
|}
 
Esempio:<br/>
::::::::<math>R:\qquad 011111100</math><br/>
::::::::<math>X:\qquad 101110110</math><br/>
::::::::<math>Y:\qquad 000001011</math><br/>
::::::::<math>S:\qquad 110000001</math>
''Sottrazione'':<br/>
In modo analogo si ha la tabella 2.4, che fornisce per ogni rango, la sottrazione '''S<sub>i</sub>''' ed il riporto '''r<sub>{i+1}</sub>''' per la sottrazione '''S=X-Y'''.<br/>
{| class="wikitable"
|-
! X<sub>i</sub>
! Y<sub>i</sub>
! r<sub>i</sub>
! X<sub>i</sub>-(Y<sub>i</sub>+r<sub>i</sub>)
! S<sub>i</sub>
! r<sub>i</sub>
|-
| 0
| 0
| 0
| 0
| 0
| 0
|-
| 0
| 0
| 1
| -1=-2+1
| 1
| 1
|-
| 0
| 1
| 0
| -1=-2+1
| 1
| 1
|-
| 0
| 1
| 1
| -2
| 0
| 1
|-
| 1
| 0
| 0
| 1
| 1
| 0
|-
| 1
| 0
| 1
| 0
| 0
| 0
|-
| 1
| 1
| 0
| 0
| 0
| 0
|-
| 1
| 1
| 1
| -1=-2+1
| 1
| 1
|}
 
:::::::<math>Tabella 2.4</math><br/>
 
Esempio:<br/>
:::::::<math>R:\qquad 01011000</math><br/>
:::::::<math>X:\qquad 10110111</math><br/>
:::::::<math>Y:\qquad 01011110</math><br/>
:::::::<math>S:\qquad 01011001</math><br/>
In pratica però si utilizza il metodo dei complementi che riconduce il calcolo della sottrazione a quello di addizione.<br/>
 
 
''Complementazione'':<br/>
Si definisce complemento vero di un numero intero binario 0<x<2<sup>n</sup> la quantità:<br/>
::::::<math>C_{2^n}(X)=2^n-X</math><br/>
Esempio:<br/>
Sia il numero X=11001 di cinque cifre. Il suo complemento vero (detto anche [[w:Complemento a due|complemento a due]]) sarà:<br/>
::::::<math>C_{2^5}X=100000-11001=111</math><br/>
Si definisce invece [[w:complemento a uno|complemento ad '''1''']]di un numero intero binario '''0<X<2'n''' la quantità:<br/>
::::::<math>C_1(X)=2^n-X-1</math><br/>
Esempio:<br/>
 
sia '''X'''=11001: Il suo complemento ad '''1''' sarà:<br/>
:::::::<math>C_1(X)=1000000-11001=110</math><br/>
Nel sistema binario il complemento ad '''1''' di un numero può essere ottenuto direttamente scambiando nella rappresentazione del numero stesso gli '''1''' con gli '''0'''. Conoscendo il complemento ad '''1''' di un numero binario si può ottenere il complemento vero sommando un '''1''':<br/>
:::::::<math>C_{2^n}(X)=C_1(X)+1</math><br />
Si può ora utilizzare la definizione di complemento e quella di classi residuo modulo '''m''' per costruire un algoritmo in grado di calcolare una sottrazione mediante una operazione di somma.<br />
Siano '''A''' e '''B''' due numeri tali che:<br />
::::::<math>0\le A\le 2^n\qquad 0\le B\le 2^n</math><br />
allora:<br />
:::::::<math>\ 0\le |A-B|\le 2^n</math><br />
Si possono presentare due casi:<br />
a) per '''A-B≥0''' si ha:<br />
:::::::<math>A-B=|A-B|_{2^n}=|a-B+2^n|_{2^n}=|A+(2^n-B)|_{2^n}</math><br />
b) per '''A-B ≤0''' si ha:<br />
:::::::<math>A-B=2^n-|A-B|=|A-B|_{2^n}</math>
Per distinguere tra i due casi è sufficiente esaminare la posizione '''n''' nella operazione '''A+C<sub>2<sup>n</sup></sub>(B)''': infatti se '''A+C<sub>2<sup>n</sup></sub>(B)≥2<sup>n</sup>''' nella n-esima posizione del risultato comparirà un '''1''' (caso a) e quindi il residuo modulo '''2<sup>n</sup>''' fornisce la differenza stessa; se invece compare lo '''0''' l'operazione fornisce il valore complementato del valore assoluto del risultato (caso b).<br />
Esempio:<br />
::::::<math>A=111\qquad , \qquad B=10</math><br />
:::<math>A-B=\quad 111-</math><br />
::::::<math>\underline {....10}</math><br/>
::::::<math>..101</math>
 
 
 
2.3.3. ''Moltiplicazione e divisione in binario''<br/>
[[File:Example of moltiplication.png|right]]
 
*''Moltiplicazione''- Il metodo di base è quello che si usa anche in decimale: a seconda che la cifra del moltiplicatore valga '''1''' o '''0'''si aggiunge o no il moltiplicando alla somma parziale, scalando ad ogni passo quest'ultima di un rango verso sinistra:<br/>
 
 
 
 
 
 
 
[[File:Example of division.png|right]]
* ''Divisione''- Il metodo di base consiste nel sottrarre , come nel sistema decimale, il divisore moltiplicato per il solo fattore possibile e cioè '''1'''.<br/>
Esempio
 
 
 
 
I metodi esposti per le quattro operazioni costituiscono solo dei procedimenti a partire dai quali sono stati trovati molti accorgimenti per accrescerne la velocità di esecuzione da parte del calcolatore.
 
2.3.4 ''Sistemi con base 2<sup>p (p≥1)</sup>''<br />
Per '''p=1''' si ha il binario puro. Per '''p>1''' si hanno dei sistemi (p=3 ottale, p=4 esadecimale) che vengono spesso utilizzati come notazioni abbreviate per il binario puro, sia per facilitare la lettura agli operatori, sia per certi calcoli. Le conversioni dalla base'''2''' alla base '''2<sup>p</sup>''' e viceversa si riconducono a dei semplici raggruppamenti di termini. Consideriamo dei numeri interri: pur di aggiungere il necessario numero di zeri a sinistra di un numero binario, si può sempre scrivere:<br />
:::::::<math>N=X_k X_{k-1}......X_0</math><br />
con<br />
::::::<math>X_i=X_{8i+1)p-1}...X_{(i+1)p-1}.....X_{ip}</math><br />
:::::::::::<math>(i=0,1...k)\qquad (l=1...p)</math><br />
cioè raggruppando le cifre binarie a gruppi di '''p''' a partire da destra.<br/>
Segue che:<br/>
:::::<math>N=\sum_{i=0}^{i=k}X_i 2^{ip}=\sum_{i=0}^(i=k)X_i (2^p)^i</math><br/>
I gruppi '''X<sub>i</sub>''' sono quindi in binario puro le rappresentazioni delle cifre di '''N''' nel sistema a base '''2<sup>p</sup>'''.<br/>
Inversamente , dato un numero '''N''' in un sistema di base '''2<sup>p</sup>''', sarà sufficiente rappresentare ogni cifra in binario per avere il numero '''N''' in binario puro.<br/>
''Esempio'': codice ottale<br/>
::::::<math>N_2=\qquad 001\qquad 011\qquad 101</math><br/>
::::::<math>N_8=\qquad ..1\qquad ...3\qquad ....5</math><br/>
Il codice ottale è quindi spesso utilizzato come notazione compatta del binario puro. Esso infatti, a causa della semplicità della procedura di conversione, permette di economizzare allora del tempo-macchina o di semplificare i dispositivi di conversione (caso di visualizzazione numerica a cifre luminose).
 
 
3.4 ''Conversioni da un sistema di numerazione ad un altro.<br/>
2.4.1 Primo metodo.<br/>
*Numeri interi: Consideriamo un numero N; lo si può scrivere mediante due basi '''b<sub>1</sub>''' e '''b<sub>2</sub>''' ottenendo per '''N''' due espressioni che chiameremo '''N<sub>b1</sub>''' e '''N<sub>b2</sub>'''. Si avrà allora:<br/>
::::::<math>N_{b_1}=x_n x_{n-1}....x_0</math><br/>
::::::<math>N_{b_2}=y_m y_{m-1}....y_0</math><br/>
con le relazioni:<br/>
::::::<math>N=\sum_{i=0}^{i=n}x_i b_1^n=\sum_{k=0}^{k=m}y_k b_2^k</math><br/>
Il problema della conversione è il seguente: data l'espressione '''N<sub>b<sub>1</sub></sub>''' nel sistema di base '''b<sub>1</sub>''' trovare l'espressione '''N<sub>b<sub>2</sub></sub>''' dello stesso numero '''N''' nel sistema di base '''b<sub>2</sub>''', o viceversa. A tale fine osserviamo che '''y<sub>0</sub>''' è il resto della divisione di '''N''' per la base '''b<sub>2</sub>'''.<br/>
Infatti:<br/>
:::::<math>N=y_m b_2^m+y_{m-1}b_2^{m-1}+...+y_1b_2+y_0</math><br/>
quindi:<br/>
:::::<math>(a)\qquad N=(y_m b_2^{m-1}+y_{m-1}b_2^{m-2}+....+y_1)b_2+y_0\qquad (0\le y_0\le b_2)</math><br/>
cioè<br/>
::::::<math>N=N_1 b_2+y_0\qquad \qquad (0\le y_0\le b_2)</math><br/>
Possiamo fare le stesse considerazioni nel numero '''N<sub>1</sub>''' e quindi y<sub>1</sub> sarà il resto della divisione di '''N<sub>1</sub>''' per '''b<sub>2</sub>''' e così via.<br/>
Si vede quindi che si ottengono le cifre successive di '''N<sub>2</sub>''' considerando i resti successivi così ottenuti:<br/>
<math>N=N_1 b_2+y_0\quad N_1= N_2 b_2+y_1\quad N_2= N_3 b_2+y_2....N_m=N_{m+1} b_2+y_m</math><br/>
in cui '''y<sub>0</sub>''', '''y<sub>1</sub>'''....'''y<sub>m</sub>''' rappresentano i resti delle divisioni successive.<br/>
Esempio: convertire '''N<sub>10=3412</sub>''' in base '''8'''.<br/>
Si cercano allora i resti successivi delle divisioni per 8. Si ottiene:<br/>
:::::<math>\frac{3412}{8}\qquad\quad resto=4</math><br/>
 
:::::<math>.\frac{426}{8}\qquad\quad resto=2</math><br/>
 
:::::<math>..\frac{53}{8}\qquad\quad resto=5</math><br/>
 
:::::<math>...\frac{6}{8}\qquad\quad resto=6</math><br/>
e quindi<br/>
:::::::::<math>N_8=6524</math><br/>
Notiamo che il metodo di conversione tra due basi '''b<sub>1</sub>''' e '''b<sub>2</sub>''' sopra esposto è in teoria applicabile nei due sensi (b<sub>1</sub>→b<sub>2</sub> e b<sub>2</sub>→b<sub>1</sub>). In pratica volendo passare dalla base '''b<sub>1</sub>''' alla base '''b<sub>2</sub>''', è necessario eseguire le operazioni di divisione nella base '''b<sub>1</sub>'''. Quindi quando i calcoli sono fatti a mano non si ricorrerà a questo metodo che per convertire un numero decimale in un'altra base, come nell'esempio visto. Lo stesso discorso non vale nel caso in cui l'operazione di conversione sia meccanizzata mediante un sistema automatico.<br/>
*''Numeri frazionari inferiori all'unità.<br/>
Consideriamo, analogamente al caso precedente, in numero '''N''' in una rappresentazione '''N<sub>b<sub>1</sub></sub>''' in un sistema di base '''b<sub>1</sub>'''; e cerchiamo la rappresentazione '''N<sub>b<sub>2</sub></sub>''' in un sistema di base '''b<sub>2</sub>'''. Notiamo che l'espressione:<br>
::::::<math>N=(0,y_{-1}y_{-2}....y_{-m}......)b_2</math><br/>
significa:<br/>
::::::<math>N=y_{1}\cdot b_2^{-1}+y_{-2}\cdot b_2^{-2}+....+y_m\cdot b_2^{-m}+.....</math>.<br/>
Moltiplicando '''N''' per '''b<sub>2</sub> si ha:<br/>
::::::<math>(b)\qquad\qquad (N\cdot b_2)=y_{-1}+y_{-2}+......+y_{-m}</math><br/>
Cioè la cifra che in ('''N×b<sub>2</sub>''') appare a sinistra della virgola è la prima cifra cercata: y<sub>-1</sub>. Possiamo ora considerare il numero ottenuto conservando solo le cifre a destra della virgola ed applicare lo stesso procedimento: cioè lo si moltiplica per '''b<sub>2</sub>''' e la cifra che risulta a sinistra della virgola sarà '''y<sub>-2</sub>''', ecc,<br/>
Il procedimento considerato può anche non avere termine, e quindi la rappresentazione di un numero frazionario può avere termine in un sistema di numerazione e non averlo in un altro.<br/>
Come per la conversione di numeri interi, si può notare che il metodo qui visto per i numeri frazionari comporta delle moltiplicazioni nel sistyemsa di partenza a base '''b<sub>1</sub>'''. Quindi , per i calcoli a mano, questo metodo si utilizza solamente per le conversioni a partire dal sistema decimale verso una generica base '''b'''.<br/>
Esempio: Convertire '''N<sub>10</sub>=0,71875''' in base 2.<br/>
:::::::::::::<math>..0,71875\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,43750\cdot 2</math><br/>
::::::<math>parte.intera\qquad 0+\qquad 0,87500\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,75000\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,50000\cdot 2</math><br/>
::::::<math>parte.intera\qquad 1+\qquad 0,00000\cdot 2</math><br/>
::::::<math>parte.intera\qquad 0+\qquad 0,00000\cdot 2</math><br/>
e quindi '''N<sub>2</sub>=0,101110''' ha termine dopo la 5<sup>a</sup> cifra.<br/>
*''Numeri con parte intera e parte frazionaria''.<br/>
Si procede in due tempi: si applica il metodo (a) alla parte intera ed il metodo (b) alla parte frazionaria. Il numero cercato si ottiene mediante unione dei due risultati.
 
 
2.4.2.''Secondo metodo''<br/>
Dato un numero avente la rappresentazione:<br/>
::::::<math>N_{b_1}=x_n x_{n-1}....x_0, x_{-1} x_{-2}....x_{-k}</math><br/>
si esprimono le cifre x<sub>n</sub>, x<sub>{n-1}</sub>,....,x<sub>0</sub>, x<sub>{-1}</sub> nel sistemadi numerazione b<sub>2</sub> e così anche per le potenze di b<sub>1</sub>: b<sub>1</sub><sup>n</sup> b<sub>1</sub><sup>(n-1)</sup>.... b<sub>1</sub>,b<sub>1</sub><sup>(-1)</sup> e si effettua la somma seguente nel sistema di base b<sub>2</sub>:<br/>
::::::::<math>(c)\qquad N_{b_2}=\sum_{-inf.}^n (x_i)_{b_2}\cdot (b_1^i)_{b_2}</math>.<br/>
In questo caso notiamo che il passaggio dalla base b<sub>1</sub> alla base b<sub>2</sub> implica che la somma (c) sia effettuata nel sistema di base b<sub>2</sub>, e quindi questo metodo è quello usato quando è necessario convertire un numero da una base generica a quella decimale nei calcoli fatti a mano.<br/>
*Esempio: convertire N<sub>2</sub>=11011,101 in base 10.<br/>
::::::<math>N_{10}=1\cdot 2^4+1\cdot 2^3+0\cdot 2^1+1\cdot 2^0+1\cdot 2^{-1}+0\cdot 2^{-2}+1\cdot 2^{-3}=</math><br/>
::::::<math>=16+8+2+1+0,5+0,125=27,625</math><br/>
::::::<math>N_{10}=27,625</math><br/>
I metodi di conversione esposti si prestano a numerose varianti: i parametri da prendere in considerazione dal punto di vista tecnico consistono essenzialmente nella rapidità di conversione e nella complessità dei dispositivi, in contrasto fra loro.
 
===Codici===
3.1 ''Generalità''<br/>
I calcolatori elettronici, per motivi di realizzazione, utilizzano una rappresentazione interna sia delle grandezze che dei simboli di tipo binario. Ad ogni numero o simbolo viene fatta corrispondere una parola binaria, cioè una successione di '''0''' ed '''1''' definendo quindi un codice binario.<br/>
In generale, stabilire una corrispondenza biunivoca tra i simboli di un insieme '''E<sub>1</sub>''' (insieme dei messaggi da codificare) e quelli di un insieme '''E<sub>2</sub>''' (insieme delle parole-codice) è per definizione ''codificare'' gli elementi di ''E<sub>1</sub>''mediante gli elementi di ''E<sub>2</sub>''.<br/>
In pratica si dice ''codice'' la corrispondenza 8cioè l'insieme delle regole di traduzione) tra gli insiemi ''E<sub>1</sub>'' e ''E<sub>2</sub>''. Il seguito del capitolo tratta i codici (essenzialmente binari) utilizzati per la rappresentazione delle informazioni. Seguirà una descrizione dei metodi per l'addizione , la sottrazione, la moltiplicazione e la divisione decimale.<br/>
Verrà inoltre trattata l'aritmetica [[w:numero in virgola mobile|floating-point]], i [[w:bit di parità|cheks di parità]] e i [[w:codice di Hamming|codici autocorrettori]].<br/>
 
3.1.1. ''Codice binario puro''
Il sistema di numerazione binario, descritto nei paragrafi precedenti, costituisce uno dei procedimenti mediante i quali si può rappresentare un numero sotto forma binaria.<br/>
Si è visto però che le conversioni binario-decimali richiedono un procedimento relativamente complesse e quindi, per evitare o semplificare il più possibile questa operazione di conversione tra dati esterni e rappresentazioni interne, si ricorre in certi casi ad un altro tipo di codifica binaria fornita dai codici di tipo ''B.C.D.''(binary-coded-decimal).<br/>
 
3.1.2. ''Codici di tipo B.C.D.<br/>
Il principio consiste nel codificare il numero rappresentato in base decimale, cifra decimale per cifra decimale ottenendo la rappresentazione binaria cercata accostando la codifica binaria delle varie cifre. La tabella '''3.1''' fornisce un esempio di codifica delle cifre decimali: si utilizza semplicemente la loro rappresentazione in binario puro prendendo il numero minimo di simboli binari, e cioè '''4'''.<br/>
[[File:Un codice B.C.D..png]]<br/>
Mediante questo codice il numero decimale 1358 sarà rappresentato da:<br/>
 
:::::<math>ooo1\quad 0011\quad 0101\quad 1000</math>
 
Per codificare in binario le 10 cifre da 0 a 9 sono necessarie almeno quattro posizioni binarie, che permettono di fornire 2<sup>4</sup>=16 combinazioni. Se si considera quindi un codice a quattro posizioni , si può definire un codice particolare scegliendo 10 combinazioni tra le sedici permesse per attribuirle alle cifre 0.1.2..9, in un certo ordine. Si ha che il numero dei codici di 10 cifre decimali mediante 4 posizioni binarie è dato dal numero di disposizioni di classe 10 di 16 oggetti, cioè:<br/>
:::::<math>D=\frac{16!}{6!}=2.9 10^10</math><br/>
In pratica però non tutti i codici così formati sono effettivamente distinti, nel senso che non consideriamo distinti due codici i quali differiscano solamente per la permutazione delle variabili, e nel circuito ad uno scambio di fili.<br/>
Inoltre , nel caso che tutte le variabili siano disponibili sotto le due forme complementata e non complementata (uscita dei flip-flop, per esempio) possono ancora essere considerati equivalenti due codici che differiscono solo per la complementazione di una o più delle quattro posizioni.<br/>
Comunque, malgrado ciò, il numero dei codici distinti resta dell'ordine dei milioni.
 
 
3.1.3. ''Codici B.C.D pesati a 4 posizioni.<br/>
Il codice utilizzato in precedenza (tabella 3.1.) e cioèp quello binario puro, è di tipo pesato. Se si pone:<br/>
:::::::<math>X=x_3 x_2 x_1 x_0</math><br/>
per la cifra decimale, x<sub>0</sub> x<sub>1</sub> x<sub>2</sub> x<sub>3</sub> simboli binari della corrispondente parola-codice, si ha:<br/>
:::::<math>X=x_3 2^3+x_2 2^2 x_1 2^1 x_0 2^0=\sum_{i=0}^{i=3}x_i 2^i</math><br/>
:::<math>(1)\qquad X=8 x_3+4 x_2+2 x_1+x_0</math>.<br/>
Le cifre 8, 4, 2, 1 costituiscono i pesi (cioè i coefficienti da attribuire a x<sub>3</sub>, x<sub>2</sub>, x<sub>1</sub>, x<sub>0</sub> quando si ricostruisce X mediante la (1)). Il codice della tabella 3.1 , detto codice (8,4,2,1) non è che un esempio
fra i tanti, di codice pesato a 4 posizioni. In un tale codice , ogni cifra decimale da 0 a 9 è rappresentata da una espressione del tipo<br/>
::::::<math>\sum_{i=0}^{i=3}x_i J_{P_i}\qquad\qquad (x_i=0\quad oppure\quad 1 ;i=0,1,2,3;J=0.1..9.</math><br/>
I coefficienti P<sub>i</sub> costituiscono i '''pesi''' caratteristici del codice considerato e si usa indicare il codice mediante la successione ordinata dei P<sub>i</sub>: si avrà quindi il codice 8421, il codice 2421, ecc. Si hanno nella tabella 3.2 cinque esempi di codici a pesi positivi.<br/>
[[File:Tabella 5 codic B.C.D.png]]<br/>
Notiamo che nel codice pesato(a quattro o più posizioni) ogni gruppo decimale codificato in binario può essere facilmente convertito in un segnale analogico a dieci livelli: sommando correnti proporzionali ai pesi si ottiene una corrente proporzionale alla cifra decimale considerata.<br/>
 
 
3.1.4 ''Codici B.C.D. non pesati a quattro posizioni.<br/>
Non tutti i codici sono pesati. Tra i codici non pesati a quattro posizioni, quello che viene più usato è il codice ''a accesso di 3''.<br/>
In questa rappresentazione, alla cifra decimale X (0≤x≤9) si fa corrispondere la rappresentazione binaria pura di X+3 (tabella 3.3)<br/>
[[File:ImmagineCodice B.C.D. non pesato.png]]<br/>
Questo tipo di codice è di lettura meno immediata rispetto al codice 8421 per un operatore umano e si presta meno bene alla conversione numerica analogica delle cifre decimali: ma dal punto di vista della realizzazione dei circuiti aritmetici esso possiede notevoli proprietà di simmetria: in particolare il fatto di essere ''autocomplementare''. Infatti per ogni X=(x<sub>3</sub>x<sub>2</sub>x<sub>1</sub>x<sub>0</sub>) si ha<br/>
:::::<math>C_9 (x)=9-x=(1-x_3), (1-x_2), (1-x_1),(1-x_0)</math><br/>
ove '''C<sub>9</sub>(x)''' è il complemento a 9 di x: per ottenere il complemento a 9 di una cifra è sufficiente complementare in binario, cifra dopo cifra, la rappresentazione '''x<sub>3</sub>x<sub>2</sub>x<sub>1</sub>x<sub>0</sub> di X. Nel caso del codice 8421 ad es., le cifre binarie di '''9-x''' non dipendono in maniera così diretta da quelle di X.<br/>
 
 
3.1.5 ''Codici B.C.D. a più di quattro posizioni.<br/>
Codice ''2 su 5''<br/>
Per questi tipi di codici B.C.D., si utilizzano 5 posizioni binarie per rappresentare le 10 cifre da 0 a 9.<br/>
A tale scopo si scelgono le 10 combinazioni binarie che hanno 2 cifre su cinque uguali ad 1.<br/>
La tabella 3.4 da un esempio di codice di questo tipo, corrispondente ad una permutazione delle dieci parole binarie in oggetto.<br/>
<br/>
Questo non è un codice pesato. La nozione di codice pesato si generalizza facilmente al caso di qualunque numero di cifre binarie. Inoltre, affinché un codice sia autocomplementare, è necessario (ma non sufficiente) che la somma dei pesi sia uguale a 9. Anche la nozione di codice ad eccesso di 3 può essere esteso a codici di eccesso di E.<br/>
 
 
3.2 ''Codici a distanza unitaria<br/>
3.2.1 Generalità (caso binario)<br/>
Si dice codice a [[w:distanza di Hamming|distanza unitaria]] un codice binario che possiede la seguente proprietà: le rappresentazioni in questo [[w:codice di Hamming|codice]] di due numeri consecutivi differiscono per una sola posizione. Se si definisce distanza di [[w:Codice di Hamming|Hammimg]] D(X,Y) fra le due parole-codice X e Y il numero di posizioni differenti, si ha che dati due numeri x<sub>{i+1}</sub> e x<sub>i</sub> aventi per parole codice X<sub>{i+1}</sub>, X<sub>i</sub> e tali che x<sub>{i+1}</sub>-x<sub>i</sub>=1, questa proprietà è espressa dalla relazione<br/>
:::::::<math>[(x_{i+1}-x_i)=1]\quad \Rightarrow \quad [D(X_i,X_{i+1})=1]</math><br/>
{| class="wikitable"
|-
! x !! X
|-
| 7 || 0111
|-
| 8 || 1000
|}<br/>
Si ha:<br/>
:::::::<math>D(X_7,X_8)=4</math>
 
 
3.2.2. Codice riflesso (Codice Gray).<br/>
costruzione di un codice [[w:codice Gray|riflesso]] ad '''n''' ranghi binari.<br/>
Questo codice è rappresentato (per 4 posizioni) nella tabella 3.5. e può essere costruito come segue:<br/>
*Considerate il blocco verticale '''(b<sub>1</sub>)''' ad una colonna e due righe. Scrivete al di sotto un blocco '''(b'<sub>1</sub>)''' simmetrico rispetto all'asse '''b<sub>1</sub>/b'<sub>1</sub>'''. Per il rango binario a sinistra (rango 1) porre degli zeri di fronte al blocco '''(b<sub>1</sub>)''' e degli '''1''' di fronte al blocco '''(b'<sub>1</sub>)'''. In tal modo si ottiene un blocco '''(b<sub>2</sub>)''' a 2 colonne e 2<sup>2</sup> righe.<br/>
Scrivete al di sotto di '''(b<sub>2</sub>)''' un blocco '''(b'<sub>2</sub>)'''simmetrico e completate il rango a sinistra (rango 2) con degli '''0''' di fronte a '''(b<sub>2</sub>)''' e degli '''1''' di fronte a '''(b'<sub>2</sub>)'''. Si ottiene così un blocco '''(b<sub>3</sub>)''' a 3 colonne e 2<sup>3</sup> righe.<br/>
Ripetere l'operazione di volta in volta, ecc.<br/>
Questo codice è un codice a distanza unitaria. infatti , se un blocco '''(b<sub>n</sub>)'''
è ottenuto in tale modo e possiede tale proprietà, il blocco '''(b<sub>(n+1)</sub>)''' la possiede anch'esso, perché:<br/>
*la cifra di sinistra cambia solo attorno all'asse di simmetria '''n''' mentre il resto della parola (parte destra) non cambia.<br/>
Là ove non cambia la cifra di sinistra si hanno solo i cambiamenti propri del blocco '''(b<sub>n</sub>)''' che è per ipotesi un codice a distanza unitaria.<br/>
Quindi '''(b<sub>n</sub>)''' possiede la proprietà di distanza unitaria essendo costruitoa partire da '''(b<sub>1</sub>)''' per cui tale proprietà è verificata.<br/>
Figura 3.5.
[[File:Codice Gray.png]]<br/>
*''Formule di conversione Binartio puro-Binario riflesso<br/>
Si verifica facilmente che le cifre '''B<sub>k</sub>''' in binario puro sono ottenute dalle cifre '''R<sub>k</sub>''' in binario riflesso mediante la relazione:<br/>
::::::::<math>(1)\qquad B_k=|\sum_{i=k}^{i=n}R_i|_2\qquad per.ogni.k</math><br/>
mentre inversamente si ha:
::::::::<math>R_k=|B_{k+1}+B_k|_2</math><br/>
*Esempio: Conversione del Binario puro 10110.<br/>
Con invarianza del valore scriviamo 010110, e operiamo come segue:<br/>
R4 = B5 XOR B4 = 0 XOR 1 = 1<br/>
R3 = B4 XOR B3 = 1 XOR 0 = 1<br/>
R2 = B3 XOR B2 = 0 XOR 1 = 1<br/>
R1 = B2 XOR B1 = 1 XOR 1 = 0<br/>
R0 = B1 XOR B0 = 1 XOR 0 = 1<br/>
ottenendo 11101 come conversione di 10110.<br/>
Queste formule di conversione mostrano che il calcolo dei simboli di rango '''k''' fa intervenire le quantità di rango superiore, ciò implica che la conversione ha inizio dai pesi maggiori. Questo costituisce un inconveniente in pratica in quanto negli organi di calcolo in binario puro, a causa della struttura del codice binario, le operazioni il più delle volte vengono fatte a partire dai pesi più piccoli.<br/>
La formula (1) si può perfò mettere sotto una forma che si presta ad un trattamento per ranghi crescenti:<br/>
::::::::<math>B_0=|\sum_{i=0}^{i=n}R_i|_2</math><br/>
::::::::<math>B_1=|\sum_{i=1}^{i=n}R_i|_2=||\sum_{i=0}^{i=n}R_i|_2+R_0|_2</math><br/>
::::::::<math>B_2=||\sum_{i=0}^{i=n}R_i|_2+|R_0+R_1|_2|_2</math><br/>
................................................<br/>
::::::::<math>B_k=||\sum_{i=0}^{i=n}R_i|_2+|\sum_{i=0}^{i=k-1}R_i|_2|_2</math><br/>
Nel caso che l'operazione di conversione sia eseguita con un procedimento in serie, questa formula da luogo ad una semplice realizzazione : è sufficiente infatti far circolare due volte la parola in codice riflesso in un '''[[w:flip-flop|flip-flop''' di tipo '''T''']] al cui ingresso arrivano successivamente le cifre: in uscita del flip-flop di tipo '''T''' (inizialmente a zero) si avrà la somma modulo 2 dei valori d'ingresso. La prima circolazione permette la determinazione del valore '''B<sub>0</sub>''', mentre durante la seconda circolazione il '''flip-flop''' darà come uscite successive i simboli '''B<sub>k</sub>'''.
 
 
3.2.3. Utilità dei codici a distanza unitaria.<br/>
I codici a distanza unitaria sono molto utili ogni qualvolta si vogliono evitare transizioni contemporaneamente su più posizioni. Consideriamo, ad es., il passaggio da '''0111''' a '''1000''' e cioè fra cifre che pur differendo di una sola unità, comportano la variazione di tutte e quattro le posizioni della rappresentazione binaria. Il passaggio, percome sono costruiti i codificatori, non avviene simultaneamente, ma attraverso gli stati scaglionati:<br/>
:::::::<math>0111\longrightarrow 0011\longrightarrow 0001\longrightarrow 0000\longrightarrow 1000</math><br/>
Quindi gli errori, riferiti al valore finale '''1\000''' sono rispettivamente per ogni stadio pari a 1,5,7,8,0. I codici a distanza unitaria non sono quindi soggetti a questo tipo di inconveniente.
 
 
3.3. ''Controllo degli errori.''<br/>
3.3.1. I circuiti di commutazione elettronici ed in particolare quelli dei calcolatori digitali non sono dotati di perfetto grado di affidabilità: si possono generare errori dovuti a cause diverse quali elementi parassiti, perdite di alimentazione, errori casuali dati da componenti oscillanti al di fuori della tolleranza, errori sistematici dovuti al cattivo funzionamento di un componente, per usura o per guasto.
 
<br />
===Teoria della commutazione===
[[File:Relè.png|right]]
4.1. ''Relais elettromagnetici con interruttori.<br/>
Numerosi sistemi elettrici hanno nei loro circuiti di comando e di controllo dei relais elettromagnetici. Un tale relais è composto essenzialmente da un elettromagnete e da una armatura mobile , portante delle lamine metalliche.<br/>
Ogni lamina è fissata all'armatura da una estremità mentre l'altra estremità è lbera e può , a seconda della posizione dell'armatura, chiudere o no un contatto. L'insieme della lamina e del punto di contatto associato, costituisce ciò che si chiama interruttore: esso può essere aperto o chiuso. A seconda che la bobina di eccitazione della elettrocalamita sia eccitata o no da una corrente, l'armatura portante si trova in una o nell'altra di due posizioni: quando non passa corrente d'eccitazione, essa si trova nella posizione detta di '''riposo''' mentre de la bobina è eccitata , l'armatura si trova in una seconda posizione.
 
[[File:Interruttori normalmente aperti e chiusi.png|right]]
 
Si può allora distinguere nella maggior parte dei relè due tipi principali di interruttori: interruttori normalmente aperti e interruttori normalmente chiusi. Gli interruttori normalmente aperti sono aperti quando l'armatura è nella posizione di riposo e chiusi quando questa è attirata dalla elettrocalamita. Gli interruttori normalmente chiusi sono chiusi quando l'armatura è nella posizione di riposo e aperti quando essa è attirata dalla elettrocalamita.<br/>
Riassumendo quindi, il relè descritto possiede le caratteristiche seguenti:<br/>
* 1) c'è un valore di ingresso costituito dallo stato della bobina di eccitazione: essa può essere eccitata o no.<br/>
* 2) vi è un certo numero di uscite, ciascuna delle quali è costituita dallo stato di chiusura o di apertura degli interruttori.<br/>
Il rapporto ingresso-uscita (cioè la relazione tramite la quale il relè apre o chiude un contatto in funzione del valore in ingresso) dipende dalla natura degli interruttori: essa può essere riassunta nella tabella seguente:
<br/>
 
4.2. ''Variazioni binarie associate ad un relè. Complemento di una variabile.''<br/>
L'esame della tabella rivela che il comportamento di un relè può essere descritto mediante delle variabili che possono assumere '''2''' valori, cioè delle variabili binarie.<br/>
<br/>
E' comodo fare astrazione dal nome delle variabili e utilizzare al posto delle coppie di simboli '''A<sub>0</sub>''', '''A<sub>1</sub>''', ecc., '''2''' simboli solamente (gli stessi per tutte le variabili). Si possono prendere per questo le cifre '''0''' e '''1''' e attribuirle in maniera arbitraria ai due stati di ogni variabile:
 
Si può osservare che quando la variabile '''X''' ha un dato valore, la variabile '''Y''' ha l'altro. Si può allora porre:<br/>
::::::<math>Y=\bar X</math><br/>
dove la variabile '''Y''' è definita in funzione di '''X''': essa si chiama il ''complemento di X'': <br/>
{| class="wikitable"
|+ complemento di X
! style="width:35px;background:#aaaaaa;" | X
! style="width:35px" | <math>\bar X</math>
|-
| 0 || 1
|-
| 1 || 0
|}
 
 
 
Si hanno allora le relazioni:<br/>
:::::::<math>\begin{cases} A=E\\X=A\\Y=\bar X=\bar A\end{cases}</math><br/>
Si vede quindi che con questa convenzione, la variabile '''X''' associata ad un interruttore normalmente aperto è uguale ad '''E''', mentre quella associata ad un interruttore normalmente chiuso è '''<math>\bar E</math>''', per cui è sufficiente una sola variabile '''E''' a definire il relè.<br/>
Nasce quindi la convenzione di associare ad ogni relè una lettera '''X'''. Il valore della variabile rappresenta lo stato di eccitazione del relè e si indicano con '''X''' gli interruttori ''normalmente aperti'' e con ''<math>\bar X</math>'' gli interruttori ''normalmente chiusi''.<br/>
Esempio: tre rappresentazioni di un circuito con interruttori:<br/>
[[File:Circuito con interruttori.png|right]] [[File:Circuiti.png|left]]<br/>
Le differenti lettereche compaiono in uno schema corrispondono ai diversi relè, i differenti simboli '''X''' e '''<math>\bar X</math>''' corrispondono agli interruttori di un relè e la presenza o l'assenza della sbarra sulla lettera informa della natura dell'interruttore (normalmente aperto o normalmente chiuso).
 
 
 
 
 
 
 
 
 
4.3. ''Funzione di trasmissione di un circuito.<br/>
In generale, dato un circuito a '''2''' terminali '''A''' e '''B''', si definisce una variabile binaria '''T<sub>AB</sub>''' chiamata '''funzione di trasmissione''' tramite la seguente convenzione:<br/>
<math>\begin{cases} T_{AB}=1, & \mbox{il }cammino\mbox{ AB}\mbox{ è}\mbox{ chiuso}\\ T_{AB}=0, & \mbox{il }cammino\mbox{ AB}\mbox{ è}\mbox{ aperto}\end{cases}</math><br/>
(a)''Trasmissione di un interruttore''<br/>
Dato un circuito costituito da un unico interruttore, si hanno le seguenti relazioni<br/>
[[File:Trasmissione di un interuttore.png|right]]<br/>
*''Interruttore normalmente aperto'':<br/>
:::::::<math>\begin{cases}T=1, &\mbox{se }\mbox{X=1}\\ T=0, &\mbox{se }\mbox{X=0}\end{cases} </math><br/>
che permette di scrivere algebricamente:<br/>
::::::<math>T=X</math><br/>
*''interruttore normalmente chiuso'':<br/>
:::::::<math>\begin{cases}T=1, &\mbox{se }\mbox{X=0}\\ T=0, &\mbox{se }\mbox{X=1}\end{cases} </math><br/>
che permette di scrivere algebricamente:<br/>
::::::<math>T=\bar X</math><br/>
 
 
 
(b) ''trasmissione in un circuito''<br/>
Si consideri il circuito costituito da ''2''' interruttori '''X''' e '''Y''' in serie (e la cui natura è generica):[[File:Trasmissione in un circuito.png|right]]<br/>
Se gli interruttori '''X''' e '''Y''' sono entrambi chiusi, il circuito è chiuso. Viceversa, se l'uno dei due interruttori è aperto, o se lo sono entrambi, il cammino tra '''A''' e '''B''' è aperto.<br/>
<br/>
Si può rappresentare tutto ciò tramite una tabella (tavola della verità) che ha per ingresso le differenti combinazioni possibili di '''X''' e '''Y''' e, come uscite , il valore della trasmissione '''T<sub>AB</sub>''' del circuito tra '''A''' e '''B'''. Così la risposta binaria del circuito appare come una funzione '''T=T(X,Y)''' delle due variabili binarie '''X''' e '''Y'''o, ancora, come una operazione sulle variabili '''X''' ed '''Y'''.<br/>
Si porrà allora:<br/>
:::::::<math>T=X*Y=XY</math><br/>
Così all'operazione di messa in serie dei '''2''' interruttori '''x''' ed '''Y''' è associata l'operazione '''(*)''' sui valori algebrici delle variabili '''X''' ed '''Y'''. Tale operazione si chiama ''prodotto''.
(c) ''Trasmissione di un circuito con 2 interruttori in parallelo''<br/>
[[File:Circuito con interruttori in paralleo.png|right]]
Si consideri il circuito costituito da '''2''' interruttori '''X''' e '''Y''' (di natura qualsiasi) posti in parallelo. Se uno dei due interruttori '''X''' o '''Y''' è chiuso, o se sono entrambi chiusi, il cammino tra '''A''' e '''B''' è chiuso. Viceversa se i due interruttori sono aperti contemporaneamente, il cammino '''AB' è aperto.<br/>
Il funzionamento del circuito '''AB''' potrà essere riassunto:<br/>
 
La risposta '''T<sub>BA</sub>''' del circuito appare come una funzione delle due variabili '''X''' e '''Y''' oppure come una operazione su '''X''' e '''Y''' che si scriverà:<br/>
::<math>T=X+Y</math><br/>
Così all'operazione di messa in parallelo di '''2''' interruttori è associata l'operazione (+) sulle risposte di '''X''' e '''Y''', ed è chiamata somma.<br/>
 
Sono così definite tre operazioni sugli interruttori.<br/>
1) La ''complementazione'': essa consiste nel sostituire ad un interruttore in parallelo''X''' un interrurrore '''<math>\bar X</math>''' dell'altro tipo: la nuova trasmissione è '''<math>T=\bar X</math>'''.<br/>
2) La messa in serie: la trasmissione risultante è '''T=X*Y'''<br/>
3) La messa in parallelo: la trasmissione risultante è '''x*y'''.<br/>
Finora si sono considerati dei circuiti costituiti da interruttori elementari, e mediante le tre suddette operazioni si sono costruiti altri circuiti, ma si possono naturalmente definire le operazioni '''-''', '''+''', * anche per dei generici circuiti.
 
''Complementazione: si dice circuito complementare di un circuito di trasmissione '''T''', un circuito che da la risposta '''<math>T_c=\bar T</math><br/>
 
''Messa in serie: '''T<sub>1</sub>*T<sub>2</sub>'''<br/>
dove '''T<sub>1</sub>''' e '''T<sub>2</sub>''' sono le risposte dei due circuiti<br/>
 
''Messa in parallelo: '''T<sub>p</sub>=T<sub>1</sub>+T<sub>2</sub>'''
 
Quindi con le operazioni di complementazione, messa in serie e messa in parallelo si può definire un procedimento di costruzione di circuiti sempre più complessi partendo da un circuito elementare. Ad ogni passo costituito da una operazione sui circuiti, si può associare una operazione algebrica sulla risposta dei circuiti. Al circuito finale si potrà quindi associare una risposta algebrica ed esprimerla in funzione di quella degli interruttori dei differenti relè.<br/>
Prima di dare qualche esempio di questo metodo, si esporranno alcune proprietà delle operazioni di '''-''', '''*''', '''+'''.<br/>
Per dimostrare queste proprietà si può procedere in due maniere:<br/>
1) Ragionando direttamente sui circuiti<br/>
2) Utilizzando le tavole di definizione delle operazioni.
 
 
4.4. Proprietà delle operazioni '''(-)''', '''(*)''', '''(+)'''.<br/>
Prima di passare alla trattazione delle operazioni '''(-)''', '''(*)''', '''(+)''', diamo qui di seguito la definizione di circuiti equivalenti.<br/>
Due circuiti si dicono equivalenti, se le variabili associate ai circuiti assumono gli stessi valori, ogni qualvolta gli interruttori, comuni ai due circuiti, si trovano nello stesso stato.<br/>
Due circuiti possono essere equivalenti anche se non tutti gli interruttori, di cui sono formati, sono in comune.<br/>
In questo caso però le variabili associate ai circuiti non devono dipendere da questi interruttori.<br/>
Si indicano le proprietà delle operazioni '''(<sup>-</sup>)''', '''(*)''', '''(+)''' con i simboli da '''R<sub>1</sub>''' a '''R<sub>20</sub>'''.<br/>
Si lascia al lettore, per esercizio, la dimostrazione di tali relazioni.
 
'''R<sub>1</sub>)'''
[[File:Proprietà associativa.png|center]]<br/>
'''R<sub>2</sub>)'''
[[File:Proprietà associativa del prodotto binario.png|center]]<br/>
'''R<sub>3</sub>)'''
[[File:Proprietà commutatva della somma binaria.png|center]]<br/>
'''R<sub>4</sub>)''' [[File:Proprietà commutativa del prodotto.png|center]]<br/>
'''R<sub>5</sub>)'''
[[File:Teorema della unicità dello 0.png|center]]<br/>
'''R<sub>6</sub>)'''
[[File:1 elemento neutro della moltiplicazione.png|center]]<br/>
'''R<sub>7</sub>)'''
[[File:Proprietà distributiva del prodotto.png|center]]<br/>
'''R<sub>8</sub>)'''
[[File:Della somma sul prodotto.png|center]]<br/>
'''R<sub>9</sub>)'''
[[File:Prodotto di una variabile per il suo complemento.png|center]]<br/>
'''R<sub>13</sub>)'''
[[File:Esisteza di massimo.png|center]]
 
A titolo di esempio diamo qui di seguito la dimostrazione della relazione<br/>
::::::::<math>A+B*C=(A+B)*(A+C)</math><BR/>
* Primo metodo: ragionamdo sui circuiti si vede che se '''A''' è aperto, i due circuiti sono chiusi solamente se '''B''' e '''C''' sono chiusi, e aperti negli altri casi.<br/>
Se '''A''' è chiuso, i due circuiti sono chiusi qualunque sia lo stato di '''B''' e '''C'''. I due circuiti hanno quindi lo stesso funzionamento per le diverse combinazioni di '''A''', '''B''', '''C'''.<br/>
*Secondo metodo:uso delle tavole.
[[File:Combinazioni possibili di tre termini nel binario.png|right]]
Essendo tre gli interruttori, abbiamo '''2<sup>3</sup>=8''' combinazioni di valori per '''A''', '''B''', '''C'''. I termini componenti la relazione sono '''6''' e cioè:<br/>
<math> A,BC,A+BC,A+B,A+C,(A+B)(A+C)</math><br/>
Calcoliamo pertanto tutte le combinazioni possibili di '''A''', '''B''', '''C''' e degli altri '''6''' termini utilizzando le regole di definizione delle operazioni '''(+)''' e '''(*).<br/>
Le colonne corrispondenti ad '''A*B*C''' e '''(A+B)*(A+C)''' sono identiche e quindi le due espressioni in questione hanno gli stessi valori per tutte le combinazioni delle variabili '''A''', '''B''' e '''C'''.<br/>
Da ciò discende l'equivalenza.
 
4.5.Esempi di applicazione<br/>
[[File:Circuito di tre relais e 6 interruttori.png|right]]
''Esempio 1'': Si consideri l'esempio in figura: esso è costituito dai tre relais '''A''', '''B''', '''C''' e '''6''' interruttori. E' possibile trovare un circuito '''R'''' equivalente nel senso che esso sarà chiuso quando '''R''' è chiuso , aperto quando '''R''' è aperto e che comporta un numero minimo di interruttori.<br/>
Il circuito '''R''' possiede tre rami in parallelo ognuno dei quali è composto di due interruttori in serie.<br/>
I rami hanno per funzioni di trasmissione:<br/>
::::::::<math>A*B,\bar A*C,B*C</math><br/>
per cui la trasmissione '''T''' del circuito '''R''' sarà:<br/>
::::::::<math>T=A*B+\bar A*C+B*C.</math><br/>
Sostituendo ad <math>A,B,C,\bar A</math> i loro valori numerici, per ognuna delle '''2<sup>3</sup>=8''' combinazioni di '''A''', '''B''' e '''C''', si ottiene il valore della trasmissione in ogni caso.<br/>
Si possono eseguire le seguenti operazioni:<br/>
:::::<math>A*B+\bar A*C+B*C=(A*B+\bar A*C)+B*C</math><br />
:::::::::::=<math>(A*B+\bar A*C)+(\bar A+A)*(B*C)</math><br />
:::::::::::=<math>(A*B+\bar A*C)+(\bar A*B*C+A*B*C)</math><br />
:::::::::::=<math>(A*C+(\bar A*B*C+A*B*C))+A*B</math><br />
:::::::::::=<math>A*B+(\bar A*C(\bar A*C*B)+A*B*C</math><br />
:::::::::::=<math>A*B+(\bar A*C+A*B*C)</math><br />
:::::::::::=<math>A*B+(A*B*C+\bar A*C)</math><br />
:::::::::::=<math>(A*B+A*B*C)+\bar A*C</math><br />
:::::::::::=<math>A*B+\bar A*C</math><br />
Si ottiene quindi un nuovo circuito, equivalente al primo, ma costituito solo da '''4''' interruttori:
 
[[File:Funzione T.png|right]]
Volendo conoscere i valori della funzione '''T''' abbinata al circuito in questione, è sufficiente considerarla con l'ausilio di una tabella della verità:
 
 
[[File:Cicuito a quattro trasmissioni.png|right]]
 
 
 
''Esempio 2: Si consideri il circuito in figura. Quando esso sarà aperto?<br/>
::<math>T=\bar A*\bar B*\bar C+\bar C+\bar A*C+A*C</math><br/>
:::<math>=(\bar A*\bar B*\bar C+\bar C)+(\bar A*C+A*C)</math><br/>
:::<math>=\bar C+(\bar A*C+A*C)</math><br/>
:::<math>=\bar C+1*C</math><br/>
:::<math>=\bar C+C=1</math><br/>
::<math>T=1</math><br/>
Il circuito è dunque sempre chiuso ed è equivalente ad una semplice connessione. Con questi esempi si è messo in evidenza come si possano sostituire i ragionamentoi diretti sui circuiti con delle operazioni algebriche.<br/>
Negli esempi precedenti si è visto come , dato un circuito, mediante il disegno delle disposizioni dei suoi interruttori, se ne possa trovare l'espressione logica che lo rappresenta.<br/>
Su questa espressione logica si può operare utilizzando le proprietà '''R<sub>1</sub>'''....'''R<sub>20</sub>''' ottenendo così dei circuiti equivalenti: operando opportunamente si può pensare di ottenere circuiti con minimo numero di interruttori.<br/>
Si è visto inoltre come, volendo conoscere i valori assunti dalla funzione di trasmissione di un circuito, questi si possono dedurre utilizzando una tabella della verità.<br/>
Esiste ora il problema inverso: progettare un circuito che si comporti secondo una tabella della verità fissata a priori.<br/>
[[File:Tabella della verità-.png|right]]<br/>
Sia allora noto il numero di interruttori necessari: tale informazione , e la tabella della verità, spiegano completamente il comportamento del circuito. Si consideri il circuito dato nell'esempio 1: di esso , in questo caso, si sa che èp fornito di tre interruttori '''A''','''B''' e '''C''' ed è data la sua tabella della verità.<br/>
Se si considera la funzione '''T''', come somma delle funzioni '''T<sub>1</sub>''','''T<sub>2</sub>''','''T<sub>3</sub>''' e '''T<sub>4</sub>''', essa assumerà il valore '''1''' se, e soltanto se una delle funzioni '''T<sub>1</sub>''','''T<sub>2</sub>,'''T<sub>3</sub>''' e '''T<sub>4</sub>''', ha il valore '''1'''. Così la funzione '''T''' varrà '''1''' sempre e soltanto in corrispondenza alle combinazioni prefissate. Se si considera ora una qualsiasi delle funzioni '''T<sub>i</sub>''' (i=1...4) si nota che essa assumerà il valore '''1''' se la si rappresenta come prodotto degli interruttori: questi ultimi ovviamente saranno rappresentati nella forma non complementata se valgono ''1'', nella forma complementata se valgono '''0'''. Nell'esempio precedente si ottiene:<br/>
:::::<math>T=\bar A*\bar B*C+\bar A*B*C+A*B*\bar C+A*B*C</math><br/>
Trovata l'espressione logica, si può cercare di semplificarla con i metodi studiati e, successivamente , disegnare il diagramma del circuiuto trovato.<br/>
:::::<math>T=\bar A*\bar B*C+\bar A*B*C+A*B*+A*B(\bar C+C)</math><br/
::::::<math>=(\bar A*\bar B*C+\bar A*B*C)+A*B</math><br/>
::::::<math>=\bar A*C(\bar B+B)+A*B</math><br/>
::::::<math>=\bar A*C+A*B</math><br/>
[[File:Cicuito costituito da 3 relais e 4 interruttori.png|center]]
 
Esempio 3: Con il seguente esempio si vuole illustrare il processo completo costituito dal prendere in considerazione un problema e trovarne le soluzioni in termini di dispositivi fisici. Un fattore ha un granaio la cui porta rimane facilmente aperta: la capra della fattoria ha la tendenza di avvicinarsi a questo deposito. Terzo elemento del problema è un lupo che circola nei pressi della fattoria. Il fattore decide allora di costruire un circuito con tre interruttori: uno che segnali se la porta del granaio è aperta o chiusa, uno per la '''capra in vista''', uno per il '''lupo in vista'''.<br/>
Un garzone viene poi messo a controllare la situazione; se una o più delle circostanze predette si manifesta, egli deve premere il pulsante corrispondente. Se la situazione diventa pericolosa , il sistema darà l'allarme e il fattore si comporterà di conseguenza. E' ovviamente il fattore, ideatore del circuito , che deve definire quando una situazione è pericolosa: egli potrà per esempio assumere che:<br/>
1) la situazione tranquilla se il lupo e la capra non sono contemporaneamente visibili.<br/>
2) il lupo non costituisce un pericolo per il grano.<br/>
Riassumendo queste considerazioni in una tabella della verità, si ottiene:<br/>
[[File:Tabella della verità (lupo).png|right]]<br/>
dove '''L=lupo''', '''C=capra''', '''P=porta'''.<br/>
Funzione di trasmissione:<br/>
:<math>T=\bar P*L*C+P*C*\bar L+P*C*L</math><br/>
1)Disposizione '''011'''- il lupo può mangiare la capra se non sono separati.<br/>
2)Disposizione '''110'''- la porta è aperta e la capra è nelle vicinanze<br/>
3)Disposizione '''111'''- entrambe le situazioni pericolose sono presenti.<br/>
Riducendo l'espressione della funzione di trasmissione si ottiene:<br/>
:::<math>\bar P*C*L+P*C=C*(\bar P*L+P)=C*(P+L).</math><br/>
Il circuito cercato sarà quindi:<br/>
[[File:Circuito allarme.png|center]]
 
 
4.6.''funzioni di due variabili.<br/>
Si sono definite in precedenza le due funzioni di due variabili, chiamate '''X*Y''' e '''X+Y''', mediante l'uso di una tavola nella quale viene rappresentato il valore della funzione pe rogni combinazione dei valori delle due variabili '''X''' e '''Y'''. Si può usare questo procedimento per definire altre funzioni di 2 variabili. per fare questo si consideri ancora la lista delle combinazioni di ingresso e si consideri il fatto che, per ognuna di esse , si può scegliere di attribuire come valore di uscita il valore '''1''' o il valore '''0'''. Poiche esistono 4 combiunazioni di ingresso, a ciascuna delle quali si può fare corrispondere 2 valori, in conseguenza esistono '''2<sup>4</sup>=16''' funzioni possibili di 2 variabili.<br/>
[[File:Funzioni di 2 variabili.png|left]]<br/>
Queste diverse funzioni possono ora essere espresse mediante le operazioni '''*''' e '''+''' e l'operaziione di complementazione.<br/>
1) Si consideri per esempio la funzione '''T<sub>1</sub>''':<br/>
'''T<sub>1</sub>''' vale '''1''' quando '''X''' e '''Y''' valgono zero tutti e due, cioè quando <math>\bar X</math> e <math>\bar Y</math> valgono 1 e zero in tutti gli altri casi per cui:<br/>
:::::<math>T_1=\bar X*\bar Y</math><br/>
Considerando la tavolka della verità si può verificare che effettivamente la colonna corrispondente e '''T<sub>1</sub>''' e '''<math>\bar X*\bar Y</math>''' hanno lo stesso valore per ogni combinazione dei valori di '''X''' e '''Y'''.<br/>
[[File:Tavola della verita di T1.png|center]]<br/>
In generale si otterrà:<br/>
:::::::::<math> T_0=0\qquad\qquad\qquad\qquad T_8=X*Y</math><br />
:::::::::<math>T_1=\bar X*\bar Y\qquad\qquad T_9=X*Y+\bar X*\bar Y</math><br />
:::::::::<math>T_2=\bar X*Y\qquad\qquad\qquad T_{10}=Y</mATH><br />
:::::::::<math>T_3=\bar X\qquad\qquad\qquad T_{11}=\bar X+Y</math><br />
:::::::::<math>T_4=X*\bar Y\qquad\qquad\qquad T_{12}=X</math><br />
:::::::::<math>T_5=\bar Y\qquad\qquad\qquad T_{13}=X+\bar Y</math><br />
:::::::::<math>T_6=X*\bar Y+\bar X*Y\qquad\qquad T_{14}</math><br />
:::::::::<math>T_7=\bar X+\bar Y\qquad\qquad\qquad T_{15}=1</math><br />
Si è così definita nell'insieme dei circuiti con interruttori un'algebra che viene chiamata '''algebra dei contatti''' o '''algebra di commutazione'''.<br />
In segutito si introdurranno altri elementi di commutazione ; principalmente elementi elettronici e magnetici8 che si possono organizzare in reti complesse e che potranno essere4 studiati grazie ad un'algebra che si rivelerà avere la stessa struttura dell'algebra dei contatti.
 
 
===Algebra delle classi-Algebra della logica===
5.1.Insiemi<br />
Introduciamo il concetto di insieme mediante esempi.<br />
L'insieme degli italiani, l'insieme dei numeri interi, ecc. Gli enti che fanno parte di un insieme vengono chiamati '''elementi'''.<br />
Per scrivere che un elemento '''X''' appartiene ad un '''insieme A''', si usa la notazione:<br />
:::::::::<math>X\in A</math><br />
Inversamente , se '''X''' non appartiene ad '''A''' si scriverà:<br />
:::::::::<math>X\notin A</math><br />
Inoltre, per rappresentare un insieme , si utilizzeranno delle parentesi, all'interno delle quali si troveranno gli elementi stessi, oppure il simbolo dell'elemento generale con l'enuncuato della proprietà comune a tutti gli elementi dell'insieme.<br />
Così se '''R''' è l'insieme delle radici della equazione.<br />
::::::::<math>x^3-6 x^2+11 x-6=0</math><br />
si avrà:<br />
:::::::::;:'''R={1,2,3}'''<br/>
oppure:<br/>
::::::::'''R={x|x<sup>3</sup>-6x<sup>2</sup>+11x-6=0}'''<br/>
e questa seconda notazione si leggerà: '''R''' è l'insieme degli elementi '''x''' tali che si abbia:
::::::::<math>x^3-6 x^2+11 x-6=0</math><br/>
Si dice che due insiemi , '''A''' e '''B''', sono uguali (0 identici)se essi sono formati dagli stessi elementi: e si scrive '''A=B'''.<br/>
In altri termini, ogni elemento '''x''' appartenente ad '''A''' appartiene a '''B''' e viceversa.
 
'''1) Esempio''': gli insiemi:<br />
:::::<math>\begin{cases}A=\{x\ |\ e\ un\ numero\ pari\}\\B=2\end{cases}</math><br/>
dove '''{x}'' è l'insieme costituito dal solo elemento '''2''', sono uguali.<br/>
Si dice che un insieme '''A''' è un sottoinsieme di un insieme '''B'''se ogni elemento di '''A''' appartiene a '''B''' (si dice anche che '''A''' è incluso in '''B''' o che '''A''' è una parte di '''B''', o infine, che '''B''' contiene '''A''') e si utilizzano le notazioni:<br/>
:::::<math>1)\qquad\qquad A\subseteq B</math><br />
:::::<math>2)\qquad\qquad B\supseteq A</math><br/>
Nella definizione data, come nelle notazioni 1) e 2), non si esclude il caso in Dato un insieme '''A''' come sottoinsieme di un insieme '''U''', si chiama '''complemento di A rispetto ad U''' l'insieme dei punti di '''U''' che non appartengono ad '''A'''.<br/>
Si scrive:<br/>
:::<math>U-A\qquad\qquad oppure\qquad C_u(A)</math><br/>
Si può scrivere, utilizzando le notazioni di cui sopra:<br/>
:::::<math>U-A=\{x|\ x\in U\qquad e\qquad x\notin A\}</math>
 
'''Esempio''': se '''U''' è l'insieme dei numeri reali ed '''A''' quello dei numeri razionali, '''U-A''' è l'insieme dei numeri irrazionali.<br/>
 
L'insieme '''U-A''' è un complemento relativo. Quando non vi è ambiguità sull'insieme '''U''' da considerare, si può definire un '''complemento assoluto''' come l'insieme dei punti che non appartengono ad '''A''' e lo si denota con la espressione:<br/>
:::::<math>\bar A=\{x\ |\ x\ \notin A\}</math><br/>
Si noti che l'operazione con la quale si ottiene '''<math>\bar A</math>''' da '''A''', cioè la complementazione, è una operazione ad un solo termine.<br/>
 
Definiamo ora operazioni a 2 termini (binarie).<br/>
a)L'unione di due termini '''A''' e '''B''' è l'insieme dei punti che appartengono ad '''A''' o a '''B''' oppure ad entrambi contemporaneamente.<br/>
L'unione di '''A''' e '''B''' è rappresentata:<br/>
::<math>A\cup B=\{x\ |\ x\in A\quad oppure\quad x \in B\quad oppure\quad x\in A\quad e\quad x\in B\}</math>.<br/>
Così l'unione dell'insieme dei punti del segmento '''0≤x≤1''' e del segmento '''0,5≤x≤1,5''' è l'insieme dei punti del segmento '''0≤x≤1,5'''.<br/>
b)L'intersezione di due insiemi '''A''' e '''B''' è l'insieme dei punti che appartengono contemporaneamente ad '''A''' ed a '''B''' e si rappresenta:<br/>
:::::<math>A\cap B=\{x\ |\ x \in A\quad e\quad x \in B\}</math>.<br/>
Per esempio l'intersezione dei numeri primi e dell'insieme dei numeri pari è l'insieme '''{2}'''.<br/>
E' comodo introdurre un insieme il quale non possiede alcun elemento: esso si chiama '''elemento vuoto''' e lo si rappresenta con il simbolo '''Φ'''.<br/>
Segue che l'uguaglianza:<br/>
:::::<math>A\cap B=\Phi</math><br/>
significa che gli insiemi ''A''' e '''B''' non hanno alcun punto in comune. Si dice anche che essi sono disgiunti. Analogamente è conveniente introdurre un insieme contenente tutti gli elementi possibili: insieme universale o universo (e lo si noterà con il simbolo '''U.I, ecc.''').<br/>
Dato un insieme '''E''', i suoi sottoinsiemi possono essere considerati come gli elementi dell'[[w:insieme potenza|insieme potenza]] '''P(E)''' o '''2<sup>E</sup>''' (insieme delle parti di E costituito dai sottoinsiemi di E, inclusi l'insieme vuoto e quello improprio).<br/>
''Esempio'': <math>E=\{1,2,3\}</math><br/>
::::<math>P(E)=\{\Phi,\{1\},\{2\},\{3\},\{1,2\},\{1,3\},\{2,3\},\{1,2,3\}\}</math><br/>
P(E) è dunque un insieme di insiemi dei suoi sottoinsiemi: sono particolarmente interessanti quelli chiamati '''ricoprenti di E''' o parti di '''E'''.<br/>
Dato un insieme '''E''' (appartenente all'insieme universale U'''), si chiama [[w:ricoprimento|ricoprimento]] di '''E''' un insieme delle parti di '''E''' un insieme delle parti di '''E'''tale che '''E''' sia uguale alla loro unione.<br/>
''Esempi: l'insieme dei numeri interi, dei numeri razionali, dei numeri irrazionali e dei numeri trascendenti, costituisce un ricoprimento dell'insieme dei numeri reali.<br/>
Un ricoprimento di '''E''' sia tale che due insiemi qualunque di esso siano disgiunti. Ogni punto di '''E''' si trova allora in un insieme della [[w:partizione|partizione]], ed uno solo.<br/>
Così l'insieme dei numeri razionali e dei numeri irrazionali , costituiscono una partizione dell'insieme dei reali.
 
 
Quesste differenti definizioni possono ricevere una interpretazione grafica chiamata '''Diagrammi di Venn'''<br/>
L'insieme universale è rappresentato con un rettangolo e gli insiemi '''A''' e '''B''' ecc. sono rappresentati come '''cerchi'''.<br/>
Nelle figure seguenti si dà l'interpretazione delle diverse operazioni definite precedentemente:<br/>
[[File:Diagramma di Venn-rappresentazione delle operazioni di complemetazione, inione e intersezione.png|center]]
 
 
5.2.''Algebra delle classi''.<br/>
Si consideri un insieme'''I''' che starà a rappresentare , nel seguito, l'[[w:insieme universale|insieme universale]]. I differenti sottoinsiemi di '''I''' formano essi stessi un insieme, sul quale si possono definire le tre operazioni di: '''unione''', '''intersezione''' e '''complementazione'''. L'insieme dei sottoinsiemi di '''I''' costituisce così un'algebra denominata '''algebra delle classi'''.<br/>
A partire dalle definizioni di insieme, sottoinsieme, e delle 3 operazioni di cui sopra, si possono dimostrare diverse proprietà di questa algebra. Esse si possono giustificare con l'aiuto dei '''diagrammi di Venn''', oppure con rigorose dimostrazioni , partendo dalle definizioni.<br/>
::::::<math>E_1)\qquad\qquad (A\cup B)\cup C=A\cup (B\cup C)</math><br/>
E' la proprietà detta dell'associatività dell'unione '''∪'''.<br/>
[[File:Associatività dell'unione.png]]
 
 
::::::<math>E_2)\qquad\qquad (A\cap B)\cap C=A\cap (B\cap C)</math><br>
E' la legge d'associatività dell'0perazione di intersezione.<br/>
[[File:Associatività dell'operazione di intersezione.png]]
 
 
::::::<math>E_3)\qquad\qquad A\cup B=B\cup A</math><br>
essa è la legge di '''commutatività''' dell'0perazione di unione '''∪'''; risulta dalla definizione di '''A∪B''': il risultato non dipende evidentemente dall'ordine dei due operandi '''A''' e '''B'''.
 
 
::::::<math>E_4)\qquad\qquad A\cap B=B\cap A</math><br>
legge di commutatività dell'operazione d'intersezione.
 
 
::::::<math>E_5)\qquad\qquad A\cup \Phi=A</math><br>
'''Φ''' non contiene nessun elemento quindi la sua unione con l'insieme '''A''' non è altro che '''A''' stesso.
 
 
::::::<math>E_6)\qquad\qquad A\cap I=A</math><br>
Essendo '''A''' contenuto in '''I''' (per definizione), i punti comuni ad ''A''' ed '''I''' sono tutti quelli di '''A'''.
 
 
::::::<math>E_7)\qquad\qquad A\cap (B\cup C)=(A\cap B)\cup (A\cap C)</math><br>
[[File:Legge di distibuitività dell'intersezione rispetto all'unione..png]]
 
 
:<math>E_8)\qquad\qquad A\cup (B\cap C)=(A\cup B)\cap (A\cup C)</math><br>
[[File:Legge di distributività dell'unione rispetto all'intgersedzone..png]]<br/>
Legge di distributività dell'unione rispetto all'intersezione.
 
 
:<math>E_9)\qquad\qquad A\cap \bar A=\Phi</math><br>
Un insieme '''A''' ed il suo complementare <math>\bar A</math> non hanno alcun punto in comune : essa è una conseguenza della definizione di <math>\bar A</math>
 
 
:<math>E_{10})\qquad\qquad A\cup \bar A=I</math><br>
L'unione di un insieme '''A''' e del suo complementare <math>\bar A</math> è sempre l'insieme universale. Esso è una conseguenza della definizione di <math>\bar A</math>. quindi il complementare <math>\bar A</math> di '''A''' soddisfa alle due relazioni : '''E<sub>9</sub>''' e '''E<sub>10</sub>'''.<br/>
Inversamente, se un insieme '''B''' soddisfa alle relazioni:<br/>
:<math>E_9\quad A\cap B=\Phi\quad e\quad E_{10}\quad A\cup B=I</math><br>
Esso è il complemento di '''A'''; ossia:<br/>
:::::::::::<math>B=\bar A</math><br/>
Infatti, sia un elemento '''x∈B''', la '''E'<sub>9</sub>''' afferma che '''x∉A''' e la '''E'<sub>10</sub>''' che '''x∈I'''.<br/>
Dunque '''x''' appartiene ad '''<math>I-A=\bar A</math>''', '''<math>x\in \bar A</math>'''. Dunque <math>B\subset \bar A</math>. Ma ogni elemento di '''A''', d'altra parte, verifica '''E<sub>9</sub>''' ed '''E<sub>10</sub>'''; dunque se '''<math>x\in \bar A</math>''', '''<math>x\in B</math>'''; per cui '''<math>\bar A\subset B</math>'''.<br/>
Da cui '''<math>\bar A=B</math>'''. In altri termini, le due relazioni '''E'<sub>9</sub>''' e '''E'<sub>10</sub>''' hanno per soluzioni '''<math>\bar A</math>''' e le si utilizzeranno, in pratica, per definire direttamente '''<math>\bar A</math>'''.
 
 
:<math>E_{11})\qquad A\cup A=A</math><br>
Legge di [[w:idempotenza|idempotenza]] per la unione '''U'''.
 
:<math>E_{12})\qquad A\cap A=A</math><br>
Legge di idempotenza per la intersezione '''∩'''.
 
:<math>E_{13})\qquad A\cup I=I</math><br>
 
:<math>E_{14})\qquad A\cap \Phi=\Phi</math><br>
 
:<math>E_{15})\qquad A\cup (A\cap B)=A</math><br>
Prima legge d'[[w:assorbimento|assorbimento]].<br/>
L'intersezione '''E=A∩B''' è un sottoinsieme di '''A'''; l'ulteriore unione di '''E''' con '''A''' non può che dare '''A'''.
 
 
:<math>E_{16})\qquad A\cap (A\cup B)=A</math><br>
seconda legge di assorbimennto.<br/>
'''A''' è contenuto in '''E=A∪B''', da cui '''A∩E=A.
 
:<math>E_{17})\qquad A\cup (\bar A\cap B)=A\cup B</math><br>
 
:<math>E_{18})\qquad A\cap A(\bar A\cup B)=A\cap B</math><br>
 
:<math>E_{19})\qquad \overline {A\cup B}=\bar A\cap\bar B</math><br>
 
''Primo teorema di Morgan per gli insiemi:<br/>
Esso si enuncia dicendo che il complementare della unione è uguale all'intersezione dei complementari.
 
Secondo teorema di De Morgan:<br/>
:<math>E_{21})\qquad \overline {A\cup B}=\bar A\cap \bar B</math><br>
Il complemento delle intersezioni è uguale all'unione dei complementari.
 
 
5.3.<math>\underline {Algebra\ della\ logica}</math><br/>
<math>\underline {Proposizioni}</math> - Valore logico delle proposizioni.<br/>
Se si esamina il linguaggio di cui si fa uso ogni giorno, e più particolarmente quello che serve come mezzo per esprimere un ragionamento scientifico, se ne possono discernere degli elementi detti <math>\underline {proposizioni}</math>: legandole tra di loro , si può costruire l'enunciato di un teorema, la dimostrazione di un teorema, una definizione, ecc..<br/>
Questa articolazione del linguaggio in <math>\underline {proposizioni}</math> è, del resto, una delle caratteristiche fondamentali del linguaggio umano.<br/>
Così le espressioni:<br/>
:1) "11 è un numero primo"<br/>
:2) "il triangolo '''ABC'' è rattangolo"<br/>
costituiscono delle '''proposizioni'''.<br/>
Ciascuna di queste proposizioni, può essere esaminata sotto l'aspetto della sua verità o della sua falsità.<br/>
Per esempio: la proposizione 1) è vera mentre la 2) può essere esaminata con il criterio su accennato e deve essere possibile se essa è vera o falsa.<br/>
Nel seguito si studieranno le proposizioni e si supporrà che le proposizioni esaminate non possano essere che vere o false.<br/>
 
 
'''<math>\underline {Operazioni\ sulle\ proposizioni}</math>'''<br/>
Continuando l'esame del linguaggio ordinsrio, si puòl mettere in evidenza tutta una classe di parole, o anche di espressioni più complesse, che però non sono proposizioni ma elementi di legame tra proposizioni: '''e''', '''o''', '''ma''', '''oppure''', '''"implica che"''', '''"equivale a dire che"''', ecc.. Nel linguaggio corrente, queste operazioni di legame delle proposizioni elementari, formando proposizioni più complesse, non sono prive di ambiguità.<br/>
Nondimeno, le nozioni di proposizione e di legami, forniscono lo spunto per un insieme di concetti matematici che, in questo caso, saranno dotati di una definizione rigorosa.
 
 
<math>\underline {Prodotto\ logico\ -\ Operazione\ AND}</math><br/>
Consideriamo per esempio le due proposizioni:<br/>
:"x è un numero primo"<br/>
:"Il triangolo ABC è rettangolo"<br/>
Con l'aiuto della congiunzione '''"e"''' (AND) si può formare una nuova proposizione che si enuncerà: '''" x è un numero primo E il triangolo ABC è rettangolo"'''.<br/>
Quando essa sarà vera?<br/>
Questa nuova proposizione sarà considerata come vera, quando le due proposizioni componenti sono vere tutte e due, e falsa in tutti gli altri casi. Ovviamente si sarebbe potuto considerare altre due proposizioni, ad esempio:<br/>
:"Roma è la capitale d'Italia"<br/>
:"Il clima italiano è mite"<br/>
e costruire in maniera analoga una proposizione nuova con la congiunzione '''"e"'''(AND).<br/>
Si vede dunque che l'operazione '''AND''' da una proposizione nuova , a partire da due proposizioni componenti, in una maniera caratterizzata essenzialmente dal modo in cui si determina se essa è falsa o vera , conoscendo la falsità o la verità delle componenti, ma, in fondo, indipendentemente dal senso e dalla natura delle proposizioni. Si può aòòora rappresentare ogni proposizione, con una variabile capace di prendere soltanto i due valori logici rappresentati von '''V''' (vero) e '''F''' (falso).<br/>
L'0perazione di '''AND''' allora, tra due proposizioni generiche '''P''' e '''Q''' verrà definita dalla tavola '''AND'''.<br/>
Si definisce così una delle operazioni della logica matematica: essa viene indicata con il simbolo '''∧''' e si chiama operazione di '''AND''' o prodotto logico. Una tavola come quella a fianco prende il nome di '''tavola della Verità''': essa descrive , per tutte le combinazioni possibili, il valore (vero o falso) della proposizione composta , in funzione dei valori delle proposizioni componenti.<br/>
 
 
<math>\underline {operazione\ di\ OR\ inclusivo}</math> (somma logica)<br/>
[[File:Tavola della verità OR.png|right]]<br/>
Si consideri la frase (nell'algebra ordinaria)<br/>
:"il prodotto '''X Y''' è nullo se '''x=0''', '''y≠0'''; oppure se '''x≠0''', '''y=0'''; oppure '''x=0''', '''y=0.'''"<br/>
La proposizione '''(x=0)''' oppure '''(y=0)''' fornisce un esempio di una nuova operazione che si può definire rigorosamente mediante una tavola<br/>
Date due proposizioni '''P''' e '''Q''' si chiamerà '''"proposizione P OR Q"''' e si scriverà '''"P V Q"''', la proposizione composta definita dalla tavola affiancata.<br/>
L'operazione '''V''', così definita, prende il nome di '''somma logica'''.
 
 
:<math>\underline {Negazione\ di\ una\ proposizione}</math><br/>
[[File:Operazione not.png|right]]
A partire da una proposizione come '''"oggi piove"''', possiamo formulare una seconda proposizione '''"oggi non piove"'''. E' chiaro che se la prima è vera, la seconda è falsa e viceversa. Si può quindi definire l'operazione di negazione: la negazione di una proposizione '''P''' viene rappresentata con il simbolo '''()P'''; ed è data dalla tavola affiancata. Conformemente all'uso generale , si preferisce rappresentare i due valori logici di una variabile, non con i simboli '''V''' ed '''F''' ma con i simboli '''0''' ed '''1'''; si noti però che si tratta di una convenzione pratica alla quale l'aritmetica è completamente estranea. Tra le due convenzioni possibili si è scelta la seguente:<br/>
:::::::<math> V=1\qquad F=0</math><br/>
E' facile riscrivere la tavole precedenti con il nuovo simbolismo.
 
Oltre alle tre operazioni logiche fin qui studiate, possiamo, con lo stesso metodo di definizione, costruire '''2<sup>4</sup>=16''' tavole della verità di due variabili che definiscono altrettante operazioni o funzioni logiche:
[[File:Funzioni logiche.png]]
 
 
:<math>\underline {Funzione\ OR\ esclusiva (F6)}</math><br/>
[[File:OR esclusivo ed inclusivo.png|right]]
 
E' il nome dato alla funzione '''F6''': si confrontino le due tavole della verità di '''P⊕Q''' e '''P v Q'''<br/>
Si noti che '''P ⊕ Q''' ha il valore '''1''' quando '''P''' e '''Q''' hanno valori logici differenti e '''0''' altrimenti.<br/>
Al contrario la proposizione '''P v Q''' assume il valore '''1''' anche per '''P=1''' e '''Q=1'''<br/>
 
:math>\underline {Esempio}</math>
Il prodotto delle variabili algebriche non nulle '''A''' e '''B''' è negativose '''A''' oppure '''B''' sono negative.
 
 
 
 
[[File:Equivalenza (F9).png|right]]
:<math>\underline {Equivalenza}</math>: '''P ↔ Q''' (F9).<br/>
Con l'operazione '''⇔''' si otterrà una nuova proposizione e si scriverà '''P ↔ Q'''; vera quando '''P''' e '''Q''' hanno lo stesso valore logico e falsa nel caso contrario: essa si chiama equivalenza di '''P''' e '''Q'''; oppure implicazione reciproca di '''P''' e '''Q'''.<br/>
Si noti come le due proposizioni '''P ↔ Q''' e '''P ⊕ Q''' sono l'una la negazione dell'altra. Il nome di implicazione di '''P ↔ Q''' trova giustificazione nella operazione seguente.
 
 
[[File:Implicazione (F11).png|right]]
:<math>\underline {Implicazione\ (F11)}</math>
E' la funzione '''P → Q'''. Essa traduce il senso, talvolta vago, della nozione di [[w:implicazione logica|implicazione]] nel linguaggio ordinario: quando '''P''' è vero, anche '''Q''' è vero (se piove allora ci sono le nubi): quindi '''P → Q''' è vero se '''P=1''' e '''Q=1'''.<br/>
Inoltre, quando '''P''' è falso, niente impedisce che '''Q''' assuma un valore arbitrario '''1''' o '''0''' e quindi '''P → Q''' è considerata vera nei due casi in cui '''P=0'''. In breve: '''Q''' non può essere falsa quando '''P''' è vera.<br/>
Il simbolo '''P → Q''' si legge: '''P implica Q''' oppure '''P è una condizione sufficiente per avere Q'''.
[[File:Implicazione logica naturale.png|right]]
<br/>
La funzione '''F13''' rappresenta in maniera analoga la funzione '''Q → P'''. Si consideri la proposizione '''(P → Q)∧(Q → P)''': si può costruire la tabella della verità affiancata.<br/>
La colonna di destra è la stessa di quella della operzaione '''P ↔ Q''' ciò che giustifica il simbolo e il nome di implicazione reciproca della operazione '''↔'''.
 
 
:<math>\underline {Funzione\ di\ Scheffer\ P/Q\ o\ Incompatibilita\ (NAND) }</math><br/>
[[File:F7 - incompatibilità logica.png|right]]
 
 
E' la funzione '''F7'''.<br/>
La proposizione '''P/Q''' è falsa quando '''P''' e '''Q''' sono entrambi veri , e vera in tutti gli altri casi. Questo giustifica il nome di '''Incompatibilità '''di '''P''' e '''Q'''.<br/>
Essa è anche uguale alla negazione della funzione '''F8'''.
 
 
 
 
 
:<math>\underline {Funzione\ di\ Peirce\ (funzione\ NOR)\ P\downarrow Q}</math>
[[File:Funzione di Peirce (NOR).png|right]]
E' la funzione '''F1'''.<br/>
La proposizione <math> P \downarrow Q</math> è vera quando ne '''P''' ne '''Q''' sono vere.<br/>
Essa è anche uguale a:<br/>
:::::::::<math>\overline {P\vee Q}</math>.
 
 
 
:<math>Tautologie\ e\ contraddizioni</math>
Una ''proposizione composta'', che è falsa per tutti i valori logici possibili delle '''n''' proposizioni componenti, è una contraddizione.<br/>
Una ''proposizione composta'' che è vera per tutti i valori logici delle '''n''' proposizioni componenti, è una tautologia.
 
:<math>\underline {Esempio\ 1}</math>. Principio della doppia negazione (tautologia).<br/>
:::::::::::::<math>P\leftrightarrow \bar\bar P </math><br/>
[[File:Doppia negazione.png|center]]<br/>
''ogni proposizione equivale alla negazione della sua negazione''.
 
[[File:Principio di identità.png|right]]<br/>
:<math>\underline {Esempio\ 2}</math>
 
Principio d'identità:<br/>
Ogni proposizione implica se stessa.
 
 
[[File:Principio del terzo escluso.png|right]]
 
:<math>\underline {Esempio\ 3}</math>
 
Principio del terzo escluso: <math> P\vee\bar P</math>
 
ogni proposizione è '''vera''' o '''falsa'''.
 
 
 
 
:<math>\underline {Esempio\ 4}- P\land\bar P</math>: contraddizione.<br/>
*Ogni proposizione non può essere contemporaneamente vera o falsa.
*Qualche proprietà delle funzioni '''AND''', '''OR''' e '''negazione'''.
*Nel seduito compaiono un certo numero di identità algebriche che legano le tre operazioni '''AND''', '''OR''' e '''negazione''' ('''∧''', '''∨''', '''-''').<br/>
Esse si presentano sotto forma di tautologie e di contraddizioni che figurano in certe identià.
 
<math>L_1\qquad\qquad (P\vee Q)\vee R\leftrightarrow P\vee (Q\vee R)\qquad\qquad associativita\ dell'\ operazione\ OR</math><br/>
<math>L_2\qquad\qquad (P\land Q)\land R\leftrightarrow P\land (Q\land R)\qquad\qquad associativita\ dell'\ operazione\ AND</math><br/>
<math>L_3\qquad\qquad P\vee Q\leftrightarrow Q\vee P\qquad\qquad\qquad\quad\quad commutativita\ dell'\ operazione\ OR</math><br/>
<math>L_4\qquad\qquad P\land Q\leftrightarrow Q\land P\qquad\qquad\qquad\quad\quad commutativita\ dell'\ operazione\ AND</math><br/>
<math>L_5\qquad\qquad P\vee P\qquad\qquad\qquad\qquad\qquad\qquad tautologia</math><br/>
<math>L_6\qquad\qquad P\land P\qquad\qquad\qquad\qquad\qquad\qquad contraddizione</math><br/>
<math>L_7\qquad\qquad P\land (Q\vee R)\leftrightarrow (P\land Q)\vee(P\land R)\quad distributvita\ di\ AND\ rispetto\ ad\ OR</math><br/>
<math>L_8\qquad\qquad P\vee (Q\land R)\leftrightarrow (P\vee Q)\land (P\vee R)\quad distributvita\ di\ OR\ rispetto\ ad\ AND</math><br/>
<math>L_9\qquad\qquad \neg (P\land \neg P)\qquad\qquad\qquad\qquad\quad principio\ di\ contraddizione</math><br/>
<math>L_{10}\qquad\qquad P\vee \neg P\qquad\qquad\qquad\qquad\qquad principio\ del\ terzo\ escluso</math><br/>
<math>L_{11}\qquad\qquad P\vee P\leftrightarrow P\qquad\qquad\quad\quad\quad\quad\ \ idempotenza\ di \ OR</math><br/>
<math>L_{15}\qquad\qquad P\vee (P\land Q)\leftrightarrow P\qquad\quad\quad\quad \ \ assorbimento</math><br/>
<math>L_{16}\qquad\qquad P\land (P\vee Q)\leftrightarrow P\qquad\quad\quad\quad \ \ assorbimento</math><br/>
<math>L_{17}\qquad\qquad P\vee (\neg P\land Q)\leftrightarrow P\vee Q</math><br/>
<math>L_{18}\qquad\qquad P\land (\neg P\vee Q)\leftrightarrow P\land Q</math><br/>
<math>L_{19}\qquad\qquad \neg (P\vee Q)\leftrightarrow (\neg P\land\neg Q)\qquad\ \ \ teorema\ \ di\ Morgan</math><br/>
<math>L_{20}\qquad\qquad \neg (P\land Q)\leftrightarrow (\neg P\vee\neg Q)\qquad\ \ \ teorema\ \ di\ Morgan</math><br/>
 
 
'''Esempi d'applicazione'''<br/>
<math>1)\ \ \underline {Nullita\ di\ un\ prodotto\ algebrico\ ordinario }</math><br/>
Nell'algebra ordinaria perché un prodotto '''m = a x b x c''' sia '''≠ 0''' è necessario e suffciente che sia '''a ≠ 0''', '''b ≠ 0''', '''c ≠ 0'''.<br/>
Si ha dunque:<br/>
::::::::<math>(a\times b\times c\ne 0 )\leftrightarrow (a\ne 0)\land (b\ne 0)\land (c\ne 0)</math><br/>
Inversamente perchèp sia '''m = 0''': <br/>
::::::::<math>(a\times b\times c = 0 )\leftrightarrow (a = 0)\vee (b = 0)\vee (c = 0)</math><br/>
 
<math>2)\ \ \underline {Regole\ dei\ segni\ nell'\ algebra\ ordinaria}</math><br/>
Si consideri il prodotto '''M = a x b''' <br/>
:::::::::::<math>a\ \ne 0\qquad\qquad b\ \ne 0</math><br/>
la regola dei segni si scrivera: <br/>
::::::<math>(a\times b> 0)\leftrightarrow {[(a<0)\land (b<0)]\vee [(a>0)\land (b>0)]}</math>
::::::<math>(a\times b> 0)\leftrightarrow {[(a<0)\leftrightarrow {(b<0)}]}</math>
::::::<math>(a\times b> 0)\leftrightarrow {[(a>0)\leftrightarrow {(b<0)}]}</math><br/>
inversamente:<br/>
::::::<math>(a\times b< 0)\leftrightarrow {[(a<0)\oplus (b<0)]}</math>
::::::<math>(a\times b< 0)\leftrightarrow {[(a>0)\oplus (b>0)]}</math>
::::::<math>(a\times b< 0)\leftrightarrow {[(a<0)\leftrightarrow {(b>0)}]}</math>
 
===Algebre Booleane===
:<math>6.1\quad \underline {Definizioni\ Assiomatiche}</math><br/>
Si chiamera algebra di Boole o algebra Booleana il sistema:<br/>
:::::::<math>B=<E, (+),(\cdot) \ , 0, 1, > </math>
dove:<br />
 
*1) '''E''' è un insieme non vuoto che contiene almeno due elementi, e cioè '''1''' e '''0''',
* 2) '''(+)''' e '''(<math>\cdot</math>)''' sono due operazioni binarie definite su '''E''' e tali che '''E''' sia chiuso rispetto ad esse.
* 3) su '''E''' è definita una relazione di equivalenza, rappresentata dalla notazione '''=''' (e si legge uguale), e come tale soddisfacente, '''<math>\forall\ x,\ y,\ z\in E</math>''' alle seguenti relazioni.<br/>
::::<math>1)\qquad\qquad (x=y)\leftrightarrow {(y=x)}\qquad\qquad simmetria</math>
::::<math>2)\qquad\qquad\qquad X=X\qquad\qquad\qquad\qquad riflessivata</math>
::::<math>3)\qquad\qquad (x=y)\land (y=z)\rightarrow {(x=z)}\qquad transitivita</math>
e tale che, <math>\forall\ A,\ B,\ C,\ \in E</math>, risultano soddisfatti i seguenti assiomi:<br/>
:::::::::<math>Assiomi\ A_{i,j}</math>
::::::::<math>\underline {associativita}</math>
::<math>A1.1\qquad (A+B)+C=A+(B+C)\qquad A1.2\qquad (A\cdot B)\cdot C=A\cdot(B\cdot C)</math>
::::::::<math>\underline {commutativita}</math>
::<math>A2.1\qquad A+B=B+A\qquad \qquad\qquad\qquad A2.2\quad \ A\cdot B=B\cdot A</math>
::::::::<math>\underline {distributivita}</math>
::<math>A3.1\qquad A\cdot (B+C)=(A\cdot B)+(A\cdot C)\quad A3.2\quad \ A\cdot B=B\cdot A</math>
::<math>A4.1\qquad A+0=0+A\qquad\qquad\qquad\qquad\ \ A4.2\qquad A\cdot 1=1\cdot A=A</math>
 
Nei precedenti due capitoli, abbiamo studiato l'algebra dei circuiti, l'algebra delle classi e l'algebra della logica; tutte e tre queste algebre rappresentano esempi di strutture algebriche Booleane. La definizione assiomatica dell'algebra di Boole riassume infatti le regole di calcolo incontrate nello studio delle algebre su menzionate. Per quanto riguarda l'applicazione dell'algebra astratta di Boole, vogliamo fare un breve cenno ad alcuni risultati dell'algebra dei circuiti (più avanti considereremo esempi di applicazione). Partendo dalla constatazione che operazioni quali ''connettere in serie'', ''connettere in parallelo'' due o più interruttori elettrici e ''invertire'' un interruttore (chiuderlo se esso è aperto, aprirlo se esso è chiuso), soddisfano a tutti gli assiomi '''A<sub>i,j</sub>(i=1,..,5); J=1, 2)''' si giunge alla conclusione che ogni risultato , ottenuto in sede astratta pe le algebre di Boole, può essere tradotto in termini di interrruttori, o più in generale, di circuiti.
 
:<math>6.2\quad\underline {Relazioni\ fondamentali\ in\ una\ algebra\ di\ Boole}</math>
Gli assiomi precedenti ci permettono di dimostrare diversi teoremi. Per semplificare le dimostrazioni si scriverà a destra di ogni identità o equazione, gli assiomi o i teroremi utilizzati.<br />
Si hanno i seguenti teoremi:
 
:<math>\underline {T1}\qquad\quad\ A+A=A\qquad\qquad infatti:</math>
::::<math>\ A+A=(A+A)\cdot 1\ \ \ \ \ \ (A4.2)</math>
::::<math>\ =(A+A)\cdot (A+\bar A)\ \ \ \ \ \ (A5.1)</math>
::::<math>\ =A+(A\cdot \bar A)\ \ \ \ \ \ \ \ \ \ \ \ \ \ (A3.2)</math>
::::<math>\ =A+0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A5.2)</math>
::::<math>\ =A\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.1)</math><br />
In maniera più generale si può dimostrare (per ricorrenza per esempio) che:<br />
:::<math>A+A+A.....+A=A</math>
 
 
:<math>\underline {T2}\qquad\quad\ A\cdot A=A\qquad\qquad infatti:</math>
::::<math>\ A\cdot A=(A\cdot A)+0\ \ \ \ \ \ (A4.1)</math>
::::<math>\ A\cdot A=(A\cdot A)+(A\cdot \bar A)\ \ \ \ \ \ (A5.2)</math>
::::<math>\ =A\cdot (A+\bar A)\ \ \ \ \ \ (A3.1)</math>
::::<math>\ =A\cdot 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A5.1)</math>
::::<math>\ =A\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.2)</math><br />
In maniera analoga si potrà generalizzare il risultato nella maniera seguente:<br />
:::<math>A\cdot A\cdot A.....\cdot A=A</math>
 
(T1) e (T2) costituiscono le proprietà di idempotenza; ossia che in un'algebra di Boole non vi sono ne multipli ne potenze.
 
:<math>\underline {T3}\qquad\quad\ A+1=1\qquad\qquad infatti:</math>
::::<math>\ A+1=(A+1)\cdot 1\ \ \ \ \ \ (A4.2)</math>
::::<math>\ =(A+1)\cdot (A+\bar A)\ \ \ \ \ (A5.1)</math>
::::<math>\ =A+(1\cdot \bar A)\ \ \ \ \ \ \ \ \ \ \ \ \ \ (A3.2)</math>
::::<math>\ =A+\bar A\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.2)</math>
::::<math>\ =1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A5.1)</math>
 
 
:<math>\underline {T4}\qquad\underline {A\cdot 0=0}\qquad\qquad infatti:</math>
::::<math>\ A\cdot 0=(A\cdot 0)+0\ \ \ \ \ \ \ \ (A4.1)</math>
::::<math>\ =(A\cdot 0)+(A\cdot\bar A)\ \ \ \ \ \ \ \ (A5.2)</math>
::::<math>\ =A\cdot (0+\bar A)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A3.1)</math>
::::<math>\ =A\cdot\bar A)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.1)</math>
::::<math>\ =0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A5.2)</math>
 
 
:<math>\underline {T5}\qquad\underline {A+(A\cdot B)=A}\ \ (legge\ di\ assorbimento) \qquad\qquad infatti:</math>
 
::::<math>\ A+(A\cdot B)=(A\cdot 1)+(A\cdot B)\ \ \ \ \ \ \ \ \ \ (A4.2)</math><br />
::::<math>\ A\cdot (1+B)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A3.1)</math><br/>
::::<math>\ A\cdot 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (T3)</math><br/>
::::<math>\ A\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.2)</math>
 
 
:<math>\underline {T6}\qquad\underline {A\cdot (A+B)=A}\ \ (legge\ di\ assorbimento) \qquad\qquad infatti:</math>
 
::::<math>\ A\cdot (A+B)=(A\cdot A)+(A\cdot B)\ \ \ \ \ \ \ \ \ \ \ (3.1)</math><br/>
::::<math>\ A+(A\cdot B)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (T2)</math>
::::<math>\ A\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (T5)</math>
 
 
:<math>\underline {T7}\qquad\underline {A+(\bar A\cdot B)=A+B}\qquad\qquad infatti:</math>
::::<math>\ A+(\bar A\cdot B)=(A+\bar A)\cdot (A+B)\ \ \ \ \ \ \ \ \ \ (A3.2)</math>
::::<math>\ 1\cdot (A+B)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A5.1)</math>
::::<math>\ A+B\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.2)</math>
 
 
:<math>\underline {T8}\qquad\underline {A\cdot(\bar A+ B)=A\cdot B}\qquad\qquad infatti:</math>
::::<math>\ A\cdot (\bar A+B))=(A\cdot\bar A)+(A\cdot B)\ \ \ \ \ \ \ \ \ \ \ (A3.1)</math>
::::<math>\ 0+(A\cdot B)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A5.2)</math>
::::<math>\ A\cdot B\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.1)</math>
 
 
:<math>\underline {T9}\qquad\underline {Il\ complemento\ \bar A\ di\ un\ elemento\ A\ e\ unico}</math><br/>
::::<math>\ bar A_1=\bar A_1\cdot 1\ \ \ \ \ \ \ \ \ \ \ \ (A4.2)</math>
 
Ragionando per assurdo, si supponga che l'elemento '''A''' possieda due componenti <math>\bar A_1</math> e <math>\bar A_2</math>. In virtù dell'assioma '''(A5)'''si avranno le relazioni:<br/>
::::::::::<math>\begin{cases} A+\bar A_1=1 \\ A\cdot \bar A_1=0
\end{cases}</math>
::::::::::<math>\begin{cases} A+\bar A_2=1 \\ A\cdot \bar A_2=0
\end{cases}</math><br/>
Si ha allora:<br/>
::::<math>\ \bar A_1=\bar A_1\cdot 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (A4.2)</math>
:::::<math> =\bar A_1\cdot (A+\bar A_2)\ \ \ \ \ \ \ \ \ \ \ \ \ (A5.1)</math>
:::::<math> =\bar A_1\cdot A+\bar A_1\cdot\bar A_2\ \ \ \ \ \ (A3.1)</math>
:::::<math> =0+\bar A_1\cdot\bar A_2\ \ \ \ \ \ \ (A5.2)</math>
:::::<math> =A\cdot\bar A_2+\bar A_1\cdot\bar A_2\ \ \ \ \ \ \ (A5.2)</math>
:::::<math> =\bar A_2\cdot A+\bar A_2\cdot\bar A_1\ \ \ \ \ \ \ (A2.2)</math>
:::::<math> =\bar A_2\cdot (A+\bar A_1)\ \ \ \ \ \ \ (A3.1)</math>
:::::<math> =\bar A_2\cdot 1\ \ \ \ \ \ \ (A5.1)</math>
:::::<math> =\bar A_2\ \ \ \ \ \ \ (A4.2)</math><br/>
Quindi '''A_1''' e '''A_2''' non possono che essere uguali.<br/>
Si chiama '''complementazione''' l'operazione che consiste nel far corrispondere l'elemento <math>\bar A \ ad\ A</math>.
 
 
:<math>\underline {T10}\qquad \bar\bar A=A\ \ \ \ \ involuzione</math><br/>
Si consideri l'elemento <math>\bar A</math> e si cerchi il suo complemento che verrà scritto <math>\bar\bar A</math>.<br/>
Si avrà:<br/>
::::::::::<math>\begin{cases} A+\bar\bar A=1 \\ \bar A\cdot \bar\bar A= 0
\end{cases}</math><br/>
d'altra parte:<br/>
::::::::::<math>\begin{cases} A+\bar A=1 \\ A\cdot \bar A=0
\end{cases}</math><br/>
Si ha allora che <math>\bar A \ e\ \bar\bar A</math> soddisfano alle stesse equazioni e poiché per il teorema '''T9''', il complemento è unico, segue che <math>\bar\bar A=A</math><br/>
 
 
:<math>\underline {T11}\qquad \bar (A+B)=\bar A\cdot\bar B \ \ \ \ \ primo\ teorema\ di\ de\ Morgan</math><br/>
Si cercherà il complemento di<math>\bar A\cdot\bar B</math> e si dimostrerà che esso è '''A+B'''.<br/>
Si consideri la quantità <math>(A+B)+(\bar A\cdot\bar B)</math>:<br/>
<math>(A+B)+(\bar A\cdot\bar B)=[(A+B)+\bar A]\cdot [(A+B)+\bar B]</math>
:::::<math> =[A+(B+\bar A)]\cdot [A+(B+\bar B)]</math>
:::::<math> =[(A+\bar A)+B]\cdot [A+(B+\bar B)]</math>
:::::<math> =(1+B)\cdot (A+1)</math>
:::::<math> =1\cdot 1</math><br/>
Analogamente si ha:<br/>
<math>(A+B)\cdot (\bar A\cdot\bar B)=(\bar A\cdot\bar B)\cdot (A+B)</math>
:::::<math> =(\bar A\cdot\bar B)\cdot A+(\bar A\cdot\bar B)\cdot B</math>
:::::<math> =(\bar A\cdot A)\cdot\bar B+\bar A\cdot (\bar B\cdot B) </math>
:::::<math> =0\cdot \bar B+\bar A\cdot 0</math>
:::::<math> =0</math><br/><br/>
Dunque <math>x=A+B\ e\ y=\bar A\cdot \bar B</math> verificano le due equazioni:<br/>
::::::::::<math>\begin{cases} x+y=1 \\ x\cdot y= 0 \end{cases}</math><br/>
per cui <math>A+B</math> è il complemento (unico) di <math>\bar A\cdot\bar B</math>: dunque<br/>
:::::::<math>A+B=\overline {(\bar A\cdot\bar B)}</math>
:::::::<math>\overline {(a+B)}=\overline {\overline {(\bar A\cdot\bar B)}}=\bar A\cdot\bar B</math>
:::::::<math>\overline {(A+B)}=\bar A\cdot\bar B</math>
 
 
:<math>\underline {T12}\qquad \bar (A+B)=\bar A\cdot\bar B \ \ \ \ \ secondo\ teorema\ di\ de\ Morgan</math><br/>
Si consideri il secondo membro e se ne prenda il complemento:<br/>
:::::::<math>\overline {(\bar A+\bar B)}=\bar\bar A\cdot \bar\bar B\ \ \ \ \ \ \ \ (T11)</math>
:::::::::<math> =A\cdot B\ \ \ \ \ \ \ \ \ \ \ \ \ \ (T10)</math><br/>
Si consideri ancora il complemento dei due membri:<br/>
:::::::<math>\overline{\overline {(\bar A+\bar B)}}=\overline {A\cdot B}</math>
:::::::<math>\bar A+\bar B=\overline {A\cdot B}\ \ \ \ \ \ \ \ \ \ \ (T10)</math>
 
 
:<math>6.3\quad \underline {Espressioni\ duali\ -\ Principio\ di\ dualita}</math><br/>Si considerino le coppie degli assiomi '''Ai.j'''. Due assiomi di una qualunque di queste coppie si corrispondono nella maniera indicata nella tabella seguente (dove '''x''' rappresenta la variabile generica che figura negli assiomi).<br/>
::::::::<math>Regole\ di\ dualizzazione</math>
:::::::::::<math>+ \ \ \ \cdot</math>
:::::::::::<math>\cdot \ \ \ +</math>
:::::::::::<math>0 \ \ \ 1</math>
:::::::::::<math>1 \ \ \ 0</math>
:::::::::::<math>x \ \ \ x</math>
:::::::::::<math>x \ \ \ x</math><br/>
Con questo procedimento , da un assioma di una coppia, si deduce l'altro.<br/>
Per esempio, a partire da '''A1.1''':<br/>
::::::::::<math>A+(B+C)=(A+B)+C</math>
si può scrivere immediatamente '''A1.2<br/>
::::::::::<math>A\cdot (B\cdot C)=(A\cdot B)\cdot C</math><br/>
Si dice che i due assiomi di una tale coppia sono duali: oppure che le identità che li esprimono sono duali. In generale, si chiameranno '''espressioni duali''' due espressioni algebriche che si deducono l'una dall'altra meddiante le regole della tabella precedente.<br/>
:<math>Esempio\ di\ espressioni\ duali</math>
::::::::::<math>A+(B\cdot C)\ \ \ \ \ A\cdot (B+C)</math>
:::::::::<math>A\cdot \bar B+\bar A\cdot B\ \ \ \ \ \ \ (A+\bar B)\cdot (\bar A+B)</math><br/>
Il fatto che gli assiomi di un'algebra di Boole si raggruppino in coppie duali costituisce già una particolarità interessante. Ma più interessante è la considerazione che se ne trae sotto la forma detta del '''Principio di dualità'''. Si consideeri un terorema valido su un'algebra di Boole; per dimostrarlo si deve applicare una successione di operazioni che, in ultima analisi, è una applicazione , in tappe successive, degli assiomi. Se ora si sostituisce ad ognuna di queste operazioni intermedie l'0perazione duale, si otterrà, ovviamente, il risultato duale; si potrà quindi fare a meno di dimostrare il duale di un teorema.<br/>
Il principio di dualità si può cosi enunciare:<br/>
''''Ad ogni teorema , vero in un'algebra di Boole, corrisponde un teorema duale che è altrettanto vero''''.<br/>
Data una espressione E si indicherà con E l'espressione duale.
 
:<math>6.4\quad \underline {Esempi\ di\ algebra\ di\ Boole}</math><br/>
[[File:Somma prodotto e negazione.png|right]]
:<math>6.4.1\quad \underline {Algebra\ a\ due\ elementi}</math><br/>
Si consideri un insieme '''I''' a due elementi: siano '''0''' ed '''1'''; definiamo su questo insieme '''{0,1}''' 3 operazioni, date dalla tavola '''6.1'''.<br/>
L'insieme '''{0,1}''' fornito delle operazioni '''+''','''*''','''neg''' ha una struttura algebrica Booleana:<br/>
:::::::<math> B=<{0,1}, +, * , neg, 0, 1></math><br/>
Per giustificare tale asserzione, è sufficiente dimostrare che gli assiomi '''Ai.j''' sono soddisfatti.<br/>
Cominciamo col verificare gli assiomi '''A4.1''' e '''A4.2'''.<br/>
In sede di definizione dell'algebra di Boole, si era detto che l'insieme '''E''' doveva essere composto da almeno due elementi, e che tali elementi devevano essere '''0''' e '''1'''; per cui il nostro insieme '''I''' soddisfa a questa prima proprietà.<br/>
Passiamo a verificare ora la '''A4.1''':<br/>
:<math> A4.1\qquad\qquad A+0=0+A=A</math><br/>
cioè, quale che sia l'elemento <math>A\in E</math>, associato con l'elemento <math>0\in E</math> mediante l'operatore '''(+)''', il risultato di tale applicazione deve essere ancora '''A'''. E questo si verifica puntualmente nel nostro insieme '''I'''; verifichiamo l'assioma '''A4.1''' prima con l'elemento '''<math>1\in I</math>''' e quindi con l'elemento '''<math>0\in I</math>''':<br/>
:<math>A4.1\qquad\qquad 1+0=1\qquad\qquad 0+0=0</math><br/>
abbiamo cioè riottenuto gli elementi '''1''' e '''0''' sfruttando la definizione dell'0perazione '''(+)''' (vedi tabella 6.1a).<br/>
Analogo discorso si farà per l'assioma '''A4.2''':<br/>
:<math>A4.2\qquad\qquad A\cdot 1=1\cdot A=A</math><br/>
usufruendo della tabella '''6.1b''', che riguarda l'operatore '''(<math>\cdot </math>)''' verifichiamo tale assioma per l'insieme '''I'''.<br/>
:<math>\qquad\qquad 0\cdot 1=0\qquad\qquad 1\cdot 1=1</math><br/>
Per quanto riguarda l'assioma '''A5''':<br/>
:<math>A5.1\qquad A+\bar A=1\qquad\qquad A5.2\qquad A\cdot \bar A=0</math><br/>
usufruendo della tabella '''6.1''', possiamo facilmente verificarlo ponendo '''A=1''', '''A=0''' e viceversa:<br/>
:<math>A5.1\qquad \begin{cases} 1+\bar 1=1\\0+\bar 0=1\end{cases}\qquad\qquad A5.2\quad \begin{cases} 1\cdot \bar 1=0\\0\cdot \bar 0=0\end{cases}</math><br/>
Lasciamo come esercizioal lettore la verifica dei restanti assiomi.
 
 
:<math>6.4.2\quad \underline {Algebra\ delle\ classi}</math><br/>
Un secondo esempio di algebra di Boole è quello costituito dall'insieme di tutti i sottoinsiemi di un dato insieme '''M''' quando per '''∪, ∩ e −''', si prendano rispettivasmente le ordinarie operazioni di '''riunione''', '''intersezione''' e '''complementazione''' tra insiemi, e perle costanti '''0''' e '''1''' ris\ ettivamente l'insieme vuoto '''Φ''' e l'insieme delle parti '''I<sub>M</sub>''':<br/>
 
:::::<math>B_M=<I_M,\cap{},\cup {},\bar {}\ ,\phi,I_M> </math>
Per vedere che gli assiomi '''Ai.j''' sono verificati è sufficiente considerare le relazioni incontrate nel '''5°''' capitolo.<br/>
Giova rilevare che '''M''' non è necessariamente finito; se lo è, se contiene cioè '''n''' (>2) elementi, l'algebra di Boole '''B<sub>M</sub>''' ne contiene '''2<sup>n</sup>'''.
 
:<math>6.4.3\quad \underline {Algebra \ delle\ proposizioni}</math><br/>
Consideriamo un insieme '''L''' di proposizioni, fornito delle operazioni <math>\land,\lor,\sim </math> tale che se <math>P,Q\in L</math> , si abbia <math>\sim P\in L, P\land Q\in L, P\lor Q\in L</math>. In queste condizioni gli assiomi '''Ai,j''' prenderanno la forma delle relazioni (L<sub>1</sub>...L<sub>10</sub>): l'insieme '''L''' delle proposizioni, con le operazioni <math>\land,\lor,\sim </math> è un'algebra di Boole:<br/>
:::::::<math>B_L=<L, \lor , \land, \sim , P, P> </math><br/>
L'algebra delle proposizioni ha l'implicazione reciproca (↔) come relazione di equivalenza.
 
 
:<math>6.4.4\quad \underline {Algebra\ dei\ vettori\ ad\ n\ dimensioni}</math><br>
Si consideri [[w:matrice|l'insieme]] dei vettori binari ad n dimensioni. Un vettore binario (matrice riga) '''X''' è un insieme ordinato di variabili (componenti) capaci di assumere uno dei valori:'''0''' e '''1''':<br/>
::<math>X=(x_1,x_2, ...,xi ...,x_n)=(x_i)\quad x_i\in {0,1}\quad (i=1...n)</math><br/>
Questo insieme comprende:<br/>
::::<math>\begin{matrix}\underbrace{2\cdot 2\cdot 2...\cdot 2}_{n\ fattori}\end{matrix}=2^n\quad {elementi}</math><br/>
Si possono introdurre [[w:matrice|le operazioni seguenti]]:<br/>
1) Prodotto<br/>
Dati due vettori '''X''' e '''Y''' <br/>
 
1) Prodotto<br/>
Dati due vettori '''X''' e '''Y'''<br/>
::::<math>X=(x_1,x_2....,x-n)=(x_i)</math><br/>
::::<math>Y=(y_1,y_2....,y_n)=(y_i)</math><br/>
si chiama prodotto booleano di '''X''' e '''Y''', denotato con <math>X\cdot Y</math>, il vettore<br/>
::<math>X\cdot Y=(x_1\cdot y_1,x_2\cdot y_2....x_i\cdot y_i....x_n\cdot y_n)=(x_i\cdot y_i) </math><br/>
2) Somma.<br/>
Dati due vettori '''X''' e '''Y''' definiti come sopra, si chiama somma booleana di '''X''' e '''Y''' il vettore:<br/>
:::<math>X+Y=(x<-1+y_1,....x_i+y_i,....x_n+y_n)=(x_i+y_i)</math><br/>
3) Complemento:<br/>
Dato un vettore <math>X=(x_1,..,x_i,...,x_n)</math> il complemento di '''X''' è il vettore:<br/>
:::<math>\overline {X}=(\overline {x_1},....\overline {x_i},....\overline {x_n})=(\overline {x_i})</math><br/>
Le operazioni '''+''', '''.''', '''-''', sulle variabili '''x,y''' sono quelle definite nell'algebra a due elementi.<br/>
4) Vettore nullo
Per definizione esso è un vettore formato unicamente da zeri:<br/>
::::<math>0=(0,0, ...,0)\qquad (x_i=0\quad i=1,...n)</math><br/>
5) Vettore unità<br/>
E' il vettore formato unicamente da '''1''':<br/>
:::<math>1=(1_1,1_2,...1_i,...1_)\qquad x_i=1\qquad i=(1....n)</math><br/>
In queste condizioni l'insieme dei vettori binari ad '''n''' dimensioni, fornito di queste tre operazioni, è un'algebra di Boole a 2<sup>n</sup> elementi, con '''0''' e '''1''' per elementi costanti:<br/>
::::<math>B=<{x},+,\cdot, -, 0,1></math><br/>
Si può dimostrare l'asserto facendo vedere che gli assiomi'''A1.1''' sono verificati per i vettori si troverà ogni volta che la dimostrazione si riporta alle componenti. Ora, per quest' ultime, gli assiomi sono verificati in quanto si tratta di un'algebra di Boole a due elementi.<br/>
Si verifichi per esempio l'assioma '''A1.1'''. Si ha:<br/>
::::(X+Y)+Z=X+(Y+Z)<br/>
ma ciò equivale a scrivere:<br/>
:::<math>[(x_i+y_i)+z_i=x_i+(y_i+z_i)]\longleftrightarrow [i(i=1,2,3...,n)(x_i+y_i)z_i=x_i+(y_i+z_i)]</math><br/>
Per ogni '''i''' quest'ultima relazione è vera in quanto abbiamo visto che per le componenti gli assiomi sono verificati (algebra a due elementi).<br/>
Per l'equivalenza, discende che anche la proposizione vettoriale è vera.<br/>
L'assioma '''(A1.1)''' è dunque verificato.<br/>
In maniera analoga si dimostrano gli alti assiomi.
 
:<math>6.5\quad \underline {variabili \ ed\ espressioni\ booleane}</math><br/>
Variabile booleana: è una variabile i cui valori appartengono ad una algebra di boole. Le lettere che abbiamo usato nelle definizioni degli assiomi e dei teoremi fino ad ora, rappresentano tali variabili. Si dirà anche che l'algebra considerata costituisce il dominio della variabile.<br/>
 
'''Espressione booleana''': si chiamerà espressione booleana, o forma booleana, ogni espressione algebrica formata, a partire dalle variabili e dalle costanti appartenenti ad un'algebra booleana, mediante un numero finito di applicazioni delle operazioni '''( <math> +,\cdot ,\bar {} \ )</math>'''.<br/>
Più precisamente si può dire:<br/>
*1) '''0''' e '''1''' sono espressioni<br/>
*2) ogni variabile '''x''' è una espressione<br/>
*3) se '''A''' è una espresssione, anche '''<math>\bar A</math>''' lo è<br/>
*4) se '''A''' e '''B''' sono espressioni, anche '''A+B''' e '''A*B''' lo sono<br/>
*5) un'espressione può essere ottenuta applicando le regole'''1,2,3 e 4''' un numero finito di volte.<br/>
 
:<math>\underline {Valore \ di\ una\ espressione\ booleana}</math><br/>
Funzioni generate da una espressione.<br/>
Data una espressione booleana ad '''n''' variabili, e sia<br/>
:::<math>G(x_1,x_2.....x_n)</math>,<br/>
se si sostituiscono le variabili con degli elementi particolari di '''E''', che è l'insieme sostegno, si ottiene come risultato dell'espressione un elemento di '''E'''.<br/>
Si chiama '''assegnazione''' (dei valori alle variabili) ogni combinazione <math>(a_1,a_2...a_n)</math> di valori particolari attribuiti alle variabili <math>(x_1.x_2...x_n)</math>. L'elemento ottenuto, calcolando la '''G''' in corrispondenza dell'assegnazione <math>(a_1,a_2...a_n)</math>, è il valore dell'espressione a tale assegnazione.<br/>
Sia data ad esempio l'espressione:<br/>
:::<math>G(A,B,C)=A\cdot B+A\cdot C+B\cdot C+\bar A\cdot \bar B\cdot \bar C</math><br/>
il suo valore per la combinazione ( 1,0,1 ) (cioè A=1, B=0, C=1) sarà:<br/>
:::<math>G(1,0,1)=1\cdot 0+1\cdot 1+0\cdot 1+0\cdot 1\cdot 0=1</math><br/>
Se si calcolano i valori dell'espressione in corrispondenza a tutte le possibili combinazioni dei valori delle variabili, si definisce una funzione '''<math>f_G(x_1...x_n) </math>''' di '''E<sup>n</sup>''' in '''E.''' Si dirà allora che l'espressione '''G''' genera la funzione in questione e, inversamente, che '''G''' è un'espressione o una rappresentanza di '''f<sub>G</sub>'''.<br/>
Consideriamo ad esempio la funzione ''Somma di due variabili'' che, ad ogni coppia di valori, associa la loro somma; l'espressione sarà:<br/>
::::<math>S(A,B)=A+B</math><br/>
avremo:<br/>
:::<math>S80,0)=0\quad S(0,1)=1\quad S(1,0)=1\quad S(1,1)=1</math><br/>
in tal modo abbiamo definito la funzione somma; cioè la corrispondenza che, mediante '''S(A,B)''', viene generata tra '''E<sup>2</sup>''' ed '''E'''.<br/>
Vi è inoltre da notare che un'espressione definisce un'unica funzione mentre, per una funzione data di '''E<sup>n</sup>''' in '''E''', esistono infinite (a causa, ad esempio, della legge di idempotenza) espressioni che la generano. Così nell'algebra<br/>
::::<math>B=<|0,1|, + ,\cdot , \bar {} , 0 , 1 ></math><br/>
le espressioni<br/>
:::<math>A\cdot \bar B+\bar A\cdot B\qquad A\cdot \bar B+\bar A\cdot B+\bar A\cdot B\qquad \overline { (A+\bar B)(\bar A+B)}</math><br/>
rappresentano la stessa funzione definita dalla tabella:<br/>
{| class="wikitable"
|-
! A !! B !! f(A,B)
|-
| 0|| 0 || 0
|-
| 0 || 1 || 1
|-
| 1 || 0 || 1
|-
| 1 || 1 || 0
|}
 
:<math> \underline {uguaglianza\ di\ 2\ espressioni\ booleane}</math><br/>
Si dice che 2 espressioni sono uguali (o equivalenti) se esse assumono gli stessi valori per ogni assegnazione di valori delle vasrabili, cioè se esse generano la stessa funzione.<br/>
L'uguaglianza di due espressioni '''G''' e '''G<sup>'</sup>''' sarà rappresentata dal segno '''='''. Si può verificare che essa è una relazione di equivalenza nel senso usuale.
 
:<math>6.6\quad \underline {forme\ canoniche\ .\ Teorema\ di\ Shannon}</math><br/>
Come si è detto precedentemente, una funzione booleana può essere rappresentata da infinite espressioni algebriche; tra tutte queste però, ve ne sono due particolari che prendono il nome di forme canoniche: Per giungere alla definizione di tali forme, occorre enunciare il seguente teorema:
 
:::<math>\underline {Teorema\ di\ Shannon\ per\ espressioni\ ad\ una\ variabile}</math><br/>
Ogni espressione booleana di una variabile si può sempre esprimere medfiante una espressione del tipo:<br/>
:::<math>F(x)=F(1)* x+F(0)* \bar x\qquad\qquad (\sigma)</math><br/>
 
dove con '''F(1)''' e '''F(0)''' s'intende la funzione calcolata per i valori '''1''' e '''0''' della variabile.<br/>
Verifichiamo la validità di tale teorema perle funzioni base:<br/>
 
a)Funzioni costanti: '''F(x)=A''', in tal caso l'espressione è indipendente dal valore della variabile; si ha cioè:
 
:::::<math>F(x)=F(1)=F(0)=A</math>
 
per cui applicando gli assiomi visti nel paragrafo '''6.1''' si può scrivere:
 
:::::<math>F(x)=A=A\cdot 1=A(x+\bar x)=A x+a \bar x=F(1)x+F(0)\bar x</math>.
 
b)La funzione assume il valore della variabile '''x''': P(x)=x; avremo:
 
:::::<math>P(1)=1\qquad\qquad\qquad P(0)=0</math>
 
per cui:
 
:::::<math>P(x)=x=x+0=x+0\cdot\bar x=1\cdot x+0\cdot\bar x=P(1)x+P(0)\bar x</math>
 
c)La funzione assume il valore della variabile complimentata: '''<math>G(x)=\bar x</math>''' avremo:
 
:::::<math>G(1)=0\qquad\qquad G(0)=1</math>
 
per cui:
 
::::<math>G(x)=\bar x=0+\bar x=0\cdot x+\bar x=0\cdot x+1\cdot \bar x=G(1)x+G(0)\bar x</math>
 
Tenendo presente che ogni espressione booleana non sarà altro che una combinazione delle tre espressioni '''a), b), c),''' si può dimostrare la validità del teorema di '''Shannon''' per ogni espressione di una funzione ad una variabile. Per ottenere ciò è sufficiente far vedere che: date due funzioni '''F(x)''' e '''G(x)''' verificanti la (<math>\sigma</math>), allora anche il loro '''prodotto''', la loro '''somma''', ed il '''complemento''' di una di esse la verificano.
 
d) Sia '''H(x)=F(x)*G(x)''' e quindi '''H(1)=F(1)G(1)''' e '''H(0)=F(0)G(0)''' applicando la <math>(\sigma)</math> su '''F(x)''' e '''G(x)''' otterremo:
 
:::<math>H(x)=[F(1)x+G(1)\bar x]\cdot [G(0)x+G(0)\bar x]</math>
 
e) Sia '''K(x)=F(x)+G(x)''' quindi
 
:::<math>K(1)=F(1)+G(1)\qquad\qquad e\qquad\qquad K(0)=F(0)+G(0)</math>
 
applicando la (<math>\sigma</math>) su '''F(x)''' e '''G(x)''' otterremo:
 
:::<math>K(x)=[F(1)x+F(0)\bar x]+[G(1)x+G(0)\bar x]=</math><br/>
:::<math>[F(1)+G(1)]x+[F(0)+G(0)]\bar x=K(1)x+K(0)\bar x</math>
 
f) Sia '''<math>N(x)=\overline {F(x)}</math>''' e quindi
 
:::::<math>N(1)=\overline {F(1)}\qquad\qquad e \qquad\qquad N(0)=\overline {F(0)}</math>
 
applicando la (<math>\sigma</math>) su '''F(x)''' e per il primo e secondo teorema di Morgan avremo:
 
:::::<math>N(x)=\overline {F(1)x+F(0)\bar x=}</math><br/>
:::::<math>\overline {F(1)x}\cdot \overline{F(0) \bar x}=[ {\overline {F(1)}+\bar x}]\cdot [ {\overline {F(0)}+\bar \bar x}]=</math><br/>
:::::<math>\overline {F(1)}\cdot \overline {F(0)}+\overline{F(0)}\bar x+\overline{F(1)}x+\bar x x=</math><br/>
:::::<math>[\overline{F(1)}\cdot\overline{F(0)}]\cdot 1+\overline{F(0)}\bar x+\overline{F(1)} x=</math><br/>
:::::<math>[\overline{F(1)}\cdot\overline{F(0)}] (x+\bar x)+\overline{F(0)}\bar x+\overline{F(1)} x=</math><br/>
:::::<math>\overline{F(1)}\cdot\overline{F(0)}\cdot x+\overline{F(1)}\cdot\overline{F(0)}\cdot\bar x+\overline{F(0)}\cdot\bar x+\overline{F(1)}\cdot x=</math><br/>
:::::<math>[\overline{F(1)}\cdot\overline{F(0)}+\overline{F(1)}]\cdot x ]+[\overline{F(1)}\cdot \overline{F(0)}+\overline {F(0)}]\cdot\bar x=</math><br/>
:::::<math>\overline{F(1)}\cdot x+\overline{F(0)}\cdot\bar x=N(1)\cdot x+N(0)\cdot\bar x</math>
 
Abbiamo così dimostrato che le operazioni , in una espressione di una funzione booleana, conservano la proprietà di '''Shannon''' e ciò ci permette sempre di ridurre l'espressione ad una forma lineare ed omogenea nelle variabili '''<math>x</math>''' e '''<math>\bar x</math>''':
 
:::::<math>f(x)=A x+B \bar x\qquad\qquad (dove\ A=F(1) e B=F(0))</math>
 
nella quale compaiono solo due costanti '''F(1)''', '''F(0)''' facilmente determinabili data l'espressione della funzione.
 
::<math>\underline{Teorema\ di\ Shannon\ per\ espressioni\ ad\ n\ variabili}</math><br/>
E' possibile enunciare il teorema di '''Shannon''' anche per espressioni ad '''n''' variabili: ma prima di fornire tale enunciato, esponiamo il procedimento con cui si giunge a tale generalizzazione del teorema.<br/>
si consideri una espressione ad '''n''' variabili:
 
::::::<math>F(x_1,x_2,....,x_n</math>
 
e si supponga di fissare (cioè considerare costanti) '''n-1''' variabili: l'espressione '''F''' è allora una espressione ad una variabile, che gode quindi della proprietà di '''Shannon''' e può, di conseguenza, essere espressa nella forma:
 
:::<math>F(x_1,x_2,...,x_n)=F(1,x_2,x_3,...,x_n)x_1+F(0,x_2,x_3,...,x_n) \bar {x_1}</math>
 
I termini '''<math>F(1,x_2,...,x_n)''' e '''F(0,x_2,...,x_n</math>''' sono, non considerando più '''<math>x_2,...,x_n</math>''' costanti, delle espressioni ad '''n-1''' variabili, nelle quuali noi possiamo di nuovo fissare momentaneamenten '''n-2''' variabili, per esempio le ultime '''n-2''', ed applicare ancora alla variabile '''x_2''' il teorema di '''Shannon'''. Da cui:
 
:<math>F(x_1,x_2,...,x_n)=[F(1,1,x_3,...,x_n)x_2+F(1,0,x_3,...,x_n)\bar {x_2}]\cdot {x_1}+</math><br/>
::::::<math>[F(0,1,x_3,...,x_n)x_2+F(0,0,x_3,...,x_n)\bar {x_2}]\cdot\bar {x_1}=</math><br/>
::::::<math>F(1,1,x_3,...,x_n)x_1 x_2+F(1,0,x_3,...,x_n)x_1\bar {x_2}+</math><br/>
::::::<math>+F(0,1,x_3,...,x_n)\bar x_1 x_2+F(0,0,x_3,...,x_n)\bar x_1\bar {x_2}</math><br/>
 
Si può continuare ad applicare il teorema di '''Shannon''' fino all'esaurimento delle variabili; infine si otterrà la seguente espressione:
 
:::<math>F(x_1,x_2,...,x_n)=\sum_{e=0,0,..,0}^{e=1,1,..,1}F(e_1,e_2,...,e_n) e_1^{e_1} e_2^{e_2}...e_n^{e_n}</math>
 
con la convenzione:
 
::::<math>x_i^{e_i}=\begin{cases}x_i,&\mbox{quando}\quad{e_i=1}\\\bar x,&\mbox{quando}\quad{e_i=0}\end{cases}</math>
 
ed '''<math>e=(e_1,e_2,...,ee_n)</math>''' vettore binarioad '''n''' dimensioni.<br/>
Per scrivere in maniera più compatta, si può pensare di considerare '''"e"''' come la rappresentazione binaria di un numero.<br/>
Da ciò la notazione abbreviata:
 
:::<math>(\sigma ')\qquad F(x_1,x_2,...,x_n)=\sum_{e=0}^{e=2^n-1}F(e)x_1^{e_1}x_2^{e_2}...x_n^{e_n}</math>
 
ed ora possiamo enunciare il teorema di '''Shannon''' per espressioni ad '''n''' variabili:
 
::::::ogni funzione booleana di '''n''' variabili, si può sempre<br/>
::::::esprimere mediante una espressione del tipo <math>(\sigma ')</math>.
 
La forma algebrica del secondo menbro di <math>(\sigma ')</math> porta il nome di '''[[w:Forma normale disgiuntiva|forma canonica disgiunta]]''', volendo indicare con questa terminologia, cher essa è una somma di prodotti.<br/>
In essa compaiono i <math>2^n</math> possibili coefficienti '''F(e)''' ed altrettanti monomi della forma:
 
:::::<math>(\alpha)\qquad e_1^{e_1} x_2^{e_2}...e_i^{e_i}...x_n^{e_n}</math>
 
Una espressione booleana ad '''n''' variabili è quindi conosciuta quando si hanno i <math>2^n</math> coefficienti di '''F(e)'''.<br/>
Un prodotto della forma <math>(\alpha)</math> si chiama '''[[w:Algebra di Boole|prodotto fondamentale]].'''
 
::''Espressioni duali''<br/>
Applicando il principio di dualità si deducono le formule seguenti:
 
:::::<math>F(x)=[F(1)+\bar x]\cdot[F(0)+x]</math>
 
(teorema di Shannon duale) da cui:
 
::<math>F(x_1,x_2,...,x_i,...,x_n)=\prod_{e=0,0,..,0}^{e=1,1,..,1}[F(\bar {e_1},..,\bar {e_n})+x_1^{e_1}+x_2^{e_2}+..+x_n^{e_n}]</math>
 
che prende il nome di '''forma congiuntiva'''.<br/>
Essa è un prodotto di somme. Le somme della forma:
 
:::::::<math>x_1^{e_1}+x_2^{e_2}+...+x_i^{e_i}+...+x_n^{e_n}</math>
 
sono chiamate somme '''somme fondamentali'''.<br/>
In maniera più compatta si scriverà:
 
::<math>F(x_1,x_2,...,x_i,...,x_n)=\prod_{e=0}^{e=2^n -1}[F(2^n -1-e)+x_1^{e_1}+x_2^{e_2}+..+x_n^{e_n}]</math>
 
dove <math>2^n -1-e</math> = complemento ad 1 di e.
 
:<math>6.7\quad \underline {Metodo\ pratico\ del\ calcolo\ di\ un\ complemento}</math><br/>
Consideriamo l'espressione '''<math>E(x_1,x_2,...x_n)</math>'''. Per calcolare il complemento non è necessario applicare passo passo i teoremi di De Morgan: è sufficiente sostituire l'espressione '''<math>E(x_1,x_2,...x_n)</math>''' con l'espressione '''<math>\overline{E(x_1,x_2,...x_n)}</math>''', ottenuta con le regole seguenti:
 
[[File:Regole di complementazione.png|right]]
 
Si noterà che questa tabella è differente, nelle ultime righe, da quella che definisce la regola di dualizzazione:<br/>
:<math>\underline{Esempio}</math><br/>
:<math>F(A,B,C)=\overline{A\cdot \bar B+\bar C\cdot \bar D+\bar A\cdot \bar B}+A\cdot{B}+B\cdot{C}</math>
 
Per definizione si ha:
 
:<math>F(A,B,C)=\overline{\overline{A\cdot \bar B+\bar C\cdot \bar D+\bar A\cdot \bar B}+A\cdot{B}+B\cdot{C}}</math>
 
Per semplificare tale espressione si può applicare il teorema di '''De Morgan''' oppure la regola sopra enunciata; applichiamo entrambe, e confrontiamo l'uguaglianza dei risultati.
 
:<math>\underline{Primo\ metodo}</math><br/>
:::::<math>\overline F=\overline{\overline{A\cdot \bar B+\bar C\cdot \bar D+\bar A\cdot B}}\cdot {\overline{A\cdot B+B\cdot C}}=</math><br/>
:::::<math>(A\cdot{\bar B+\bar C\cdot\bar D+\bar A\cdot B})\cdot ({\overline{A\cdot B}\cdot {\overline{B\cdot C}}})=</math><br/>
:::::<math>(A\cdot{\bar B+\bar C\cdot\bar D+\bar A\cdot B})\cdot (\bar A+\bar B)\cdot (\bar B+\bar C)</math><br/>
 
:<math>\underline{Secondo\ metodo}</math><br/>
:::::<math>(A\cdot{\bar B+\bar C\cdot\bar D+\bar A\cdot B})\cdot (\bar A+\bar B)\cdot (\bar B+\bar C)</math><br/>
 
come si vede questo secondo metodo è molto più rapido.
 
 
:<math>6.8\quad \underline { riduzione\ ad\ un\ livello\ di\ complementazione\ in\ una\ espressione}</math><br/
Data una espressione che comporta più livelli di complementazione sovrapposti, come ad esempio:
 
:::::<math>F=\overline{\bar A+B+\overline{C+D}+E}</math>
 
è sempre possibile ricondurre una tale espressione ad una forma dove le complementazioni appaiono, al massimo, ad un livello.<br/>
Che ciò sia sempre possibile è una conseguenza dell'esistenza delle forme canoniche.<br/>
Comunque, applicando ripetutamente i teoremi di '''De Morgan''', si può verificare tale affermazione senza dover ricorrere4 alle forme canoniche.<br/>
Per l'espressione precedente si avrà:
 
:::::<math>F=\overline{(\bar A+B)}\cdot \overline{\overline{(C+D)}+E}=(A\cdot \bar B)\cdot (C+D)\cdot \bar E</math>}
 
cioè si è ottenuta una espressione dove gli elementi sono complimentati al massimo una volta.<br/>
Tale espressione si potrà sviluppare in somma di prodotti:
 
:::::<math>F=A\cdot \bar B\cdot C\cdot \bar E+A\cdot \bar B\cdot D\cdot \bar E</math>
 
 
 
:<math>6.9\quad \underline {Relazione\ tra\ espressione\ duale\ e\ complemento.}</math><br/>
Data una espressione di una funzione '''<math>F(x_1,x_2,...,x_n)</math>''' le tavole delle regole di dualizzazione e di complementazione permettono di dedurre due espressioni associate alla funzione data:
 
[[File:Tabella duale e complemento.png|right]]<br/>
 
:::::<math>\sim F(x_1,x_2,...x_n)\qquad\qquad (duale)</math><br/>
:::::<math>\bar F(x1,x2,...,x_n)\qquad\qquad (complemento)</math>
 
La relazio0ne che lega queste due funzioni è
 
:::::<math>\sim F(x1,x_2,...,x_n)=)\bar F(\bar x_1,\bar x_2,...,\bar x_n)\qquad\qquad (\beta)</math>
 
i procedimenti per costruire le espressioni '''F,sim F,\bar F''' possono essere riassunte nella tabella a fianco.<br/>
F è costituita da un numero finito di operazioni '''+, *, -''', a partire dalle variabili e dalle costanti '''0''' ed '''1'''; e si vede che applicando passo passo la corrispondenza della tabella, la relazione <math>(\beta)</math> è verificata.
 
===Funzioni Booleane===
: <math>7.1\quad \underline {definizioni}</math><br/>
Si definisce variabile binaria, quella variabile che ha per dominio l'insiema '''{0,1}''' composto di 2 elementi. Il [[w:prodotto cartesiano|prodotto cartesiano]] di tale insieme per se stesso, cioè l' insieme delle coppie ordinate (a<sub>1</sub>,a<sub>2</sub>)di elementi in '''{0,1}''', verrà indicato con '''{0,1}<sup>2</sup>''' = '''{0,1}x{0,1}'''.<br/>
Iterando ilragionamento, l'insieme '''{0,1}<sup>n</sup>={0,1}x{0,1}x...{0,1}''' sarà composto dalle n-ple ordinate '''a<sub>1</sub>, a<sub>2</sub>...a<sub>n</sub>)''', di elementi in '''{0,1}'''. A questo punto è possibile definire la funzione booleana di '''n''' variabili(od anche funzione binaria, o funzione di commutazione) come una applicazione di '''{0,1}<sup>n</sup>''' in '''{0,1}'''.<br/>
Abbiamo già detto che una funzione booleana piò essere espressa o mediante una classe di espressioni booleane equivalenti, oppure mediante una tabella della verità nella quale in corrispondenza di ogni combinazione delle '''n''' variabili deve scrivere il valore associato della funzione. Se si assume come convenzione di scrivere le combinazioni delle '''n''' variabili in ordine crescente, cioè in modo tale che leggendole come numeri binari, esse rappresentino la sequenza di numeri da '''0''' a '''2<sup>n</sup>-1''', allora non sarà necessario scrivere tutta la tabella, ma risulterà sufficiente scrivere solo i valori della funzione.
[[ File:Combinazioni di variabili con valore della funzione pari ad 1.png|right]]<br/>
Le tabelle della verità possono essere anche ‎di tipo rettangolare, e cioè le '''n''' variabili sono ripartite in due insiemi disgiunti (x<sub>1</sub>,...,x<sub>s</sub>) e (x<sub>{s+1}</sub>,...,x<sub>{n}</sub>)<br/>
A ciascuno dei due insiemi si assegna una delle due dimensioni del rettangolo e su di essa l'insieme di variabili assume tutte le possibili combinazioni: ad ogni combinazione corrisponde una colonna (o una riga).<br/>
Spieghiamo con un esempio il funzionamento del nuovo tipo di tabella, paragonandolo alla tabella usata fino ad ora nella quale però, per brevità, non prenderemo in esame le combinazioni che corrispondono ad un valore nullo della funzione.<br/>
Sia '''f(x<sub>1</sub>, x<sub>2</sub>, x<sub>4</sub>, x<sub>5</sub>)''' definita dalla tabella '''(a)''' a fianco:<br/>
 
 
[[File:Tabella rettangolare.png|right]]<br/>
Volendo riscrivere la tabella , questa volta in forma rettangolare procediamo prima nel seguente modo:<br/>
Consideriamo , ad esempio, la '''5<sup>a</sup>''' colonna. Ad essa corrisponde l'assegnazione '''(x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>)=(100)''' ed alla '''2<sup>a</sup>''' riga corrisponde l'assegnazione '''(x<sub>4</sub> x<sub>5</sub>9=(01)'''. Se ora consideriamo contemporaneamente le due assegnazioni, esse corrispondono all'unica '''(x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>, x<sub>4</sub>, x<sub>5</sub>)=(10001)'''. A tale combinazione , nella tabella '''(a)''', corrisponde il valore '''1''' (della funzione); Nella tabella '''b''' (a fianco), allora, scriveremo all'intersezione della '''5<sup>a</sup>''' colonna con la '''2<br/>
up>a</sup>''' riga il valore '''1'''.
 
[[File:Tabella rettangolare b2.png|right]]<br/>
La tabella completa avrà la forma della tabella '''b<sub>2</sub>''' accanto:<br/>
E' sotto questa forma che utilizzeremo soprattutto le tabelle della verità: messa infatti sotto questa forma conveniente (diagramma di Karnaugh), una simile tabella è un mezzo per la semplificazione delle espressioni algebriche.<br/>
Inoltre questa forma serve ogni qualvolta si vuole mettere in rilievo il ruolo di una certa variabile; in tal caso le si attribuirà un lato della tabella.<br/>
 
: <math>7.2\qquad \underline {Altri\ modi\ di\ definire\ una\ funzione\ booleana}</math><br/>
: <math> \underline {Vettore\ caratteristico}</math><br/>
La colonna di desrta della tavola della verità, del '''1<sup>°</sup>''' tipo , è un vettore binario.<br/>
[[File:Vettore caratteristico.png|right]]<br/>
Se si conservano le convenzioni fatte sulle combinazioni delle variabili, la conoscenza di questo vettore è sufficiente a definire la funzione. Chiameremo tale vettore '''vettore caratteristico''' della funzione '''f''' e lo denoteremo con:<br/>
::<math>V_f=(V_0, V_1,...V_k,...V_{2^n -1})</math><br/>
dove '''V<sub>k</sub>''' è il valore della funzione associata a quella combinazione binaria delle variabili, che rappresenta il numero '''k.''' (Esempio figura accanto)<br/>
 
 
: <math> \underline {Rappresentazione\ decimale}</math><br/>
:: <math> \underline {Prima\ rappresentazione}</math><br/>
Il Vettore '''V<sub>f</sub>''' costituisce la rappresentazione binaria di un numero intero compreso tra '''0''' e '''2<sup>n</sup>-1'''.<br/>
Si può allora definire la funzione mediante l'equivalenza decimale di questo numero:<br/>
::::<math>N_{10}^f=\sum_{i=0}^{2^n-1}v_i*2^n-1-i</math><br/>
:<math>\underline {Esempio\ 2\ :}</math><br/>
::::<math>V_f=(1 0 1 0 0 1 1 0)</math><br/>
:::<math>N_{10}^f=2^7+2^5+2^2+2^1=166</math><br/>
:: <math> \underline {Seconda\ rappresentazione}</math><br/>
Forniamo una '''2<sup>a</sup>''' rappresentazione del vettore caratteristico: rappresentazione molto usata anche se meno compatta della prima<br/>
Se si esamina l'esempio '''1<sup>°</sup>''', si vede che il vattore caratteristico assume il valore '''1''' in corrispondenza a quelle combinazioni che rappresentano i numeri decimali '''0,2,5,6'''. Allora si può rappresentare il vettore caratteristico, fornendo quest'insieme di valori decimali.<br/>
:<math>\underline {Esempio\ 3\ :}</math><br/>
:::<math>V_f=(1 0 1 0 0 1 1 0)=(0, 2, 5, 6)</math><br/>
::::<math>1^a\ rappr.\qquad\qquad 2^a\ rappr.</math>
 
 
: <math>7.3\qquad \underline {Operazioni\ sulle\ funzioni\ booleane}</math><br/>
Usando le tavole della verità, che ci permettono di definire le funzioni booleane, possiamo ora definire le operazioni di '''somma''', '''prodotto''' e '''complementazione delle funzioni'''.<br/>
[[File:F+g.png|right]]
:: <math>\underline {Somma\ di\ 2\ funzioni\ f+g}</math><br>
Date le due funzioni '''f''' e '''g''', ad '''n''' variabili, con i vettori caratteristici '''V<sub>f</sub>''' e '''V<sub>g</sub>''', la funzione '''somma di f è g''' è quella il cui vettore caratteristico è '''V<sub>f</sub>+V<sub>g</sub>''' (vedi 6.4.4).<br/>
Si ha dunque per definizione:<br/>
::::<math>V_{f+g}=V_f+V_g</math><br/>
 
:: <math>\underline {prodotto\ di\ 2\ funzioni:\ f*g}</math><br>
[[File:Prodotto di 2 funzioni.png|right]]
In maniera analoga , il prodotto di '''f''' e '''g''' è la funzione di vettore caratteristico '''V<sub>f</sub>*V<sub>g</sub>''':
 
 
::::<math>V_{f*g}=V_f*V_g</math>
 
 
:: <math>\underline {complemento\ di\ una\ funzione:\ \lnot f}</math><br>
[[File:Complemento di una funzione.png|right]]<br/>
E' la funzione notata '''<math>\lnot f</math>''' e definita mediante <math>\lnot V_f</math><br/>
Per definizione si ha quindi:<br/>
 
 
 
::::<math>\lnot V_f=V_{\lnot f}</math>
 
:: <math>\underline {funzione\ identicamente\ nulla:\ (0)}</math><br>
E' la funzione il cui vettore caratteristico è il vettore nullo.
 
:: <math>\underline {funzione\ identicamente\ uguale\ ad\ 1}</math><br>
E' la funzione il cui vettore caratteristico è il vettore (1).
 
 
L'insieme delle funzioni booleane ad '''n''' variabili possiede 2<sup>n</sup> elementi distinti.Infatti ogni vettore caratteristico è formato da una sequenza di 2<sup>n</sup> elementi: l'insieme delle funzioni sarà dato da tutte le possibili combinazioni (disposizioni con ripetizione) di questi 2<sup>n</sup> elementi; per cui avremo 2<sup>2<sup>n</sup></sup> vettori distinti.<br/>
E' mediante l'aiuto dei vettori caratteristici che noi abbiamo definito sull'insieme delle funzioni booleane le operazioni '''+, *, <sup>-</sup>'''.<br/>
Questi ultimi formano un'algebra di Boole a '''2<sup>N</sup>''' = '''2<sup>2<sup>n</sup></sup>''' elementi e quindi segue che l'insieme delle funzioni di '''n''' variabili, munite di queste operazioni, formano ugualmente un'algebra di Boole a '''2<sup>N</sup>''' elementi.
 
:<math>7.4\qquad \underline {espressioni\ algebriche\ di\ una\ funzione\ booleana}</math><br>
Esaminiamo ora il seguente problema: data una funzione booleana di '''n''' variabili '''x<sub>1</sub>...x<sub>n</sub>''' conosciuta mediante la sua tavola della verità, trovarne una rappresentazione algebrica.<br/>
Per fare ciò definiamo alcune funzioni di '''n''' variabili che ci saranno utili in seguito.<br/>
:: <math>\underline {prodotto\ fondamentale}</math><br>
::::: <math>\underline {Definizione}</math>: Si chiama prodotto fondamentale o '''[[w:mintermine|minterm]]''' ad '''n''' variabili un prodotto della forma:<br/>
::::<math>P=x_1^{e_1}*x_2^{e_2}*...*x_n^{e_n}=\sum_{i=1}^{i=n}x_i^{e_i}</math><br/>
:con <math>x_i^{e_i}=x_i\qquad se\quad e_i=1\qquad cioe\quad x^1=x</math><br/>
:con <math>x_i^{e_i}=\bar x_i\qquad se\quad e_i=0\qquad cioe\quad x^0=\bar x</math>
 
In altri termini un prodotto fondamentale è un prodotto di '''n''' variabili (dirette o complamentate) in cui ogni variabile compare una sola volta.
 
 
:: <math>\underline {tavole\ della\ verita\ di\ un\ prodotto\ fondamentale}</math><br>
Affinché il prodotto<br/>
:::::<math>P=e_1^{e_1}\cdot x_2^{e_2}\cdot ....\cdot x_n^{e_n} </math><br/>
sia uguale ad '''1''', è necessario e sufficiente che tutti i suoi fattori siano uguali ad '''1.'''<br/>
Cioè che si abbia:
:::::<math>e_i^{e_i}=1\qquad (i=1,2.....n)</math><br/>
Ora con riguardo a quanto detto nel par.6.6 si ha:<br/><br/>
:::::<math>e_i^{e_i}\begin{cases}=x_i&\mbox{se}\quad e_i=1\\=\bar x_i&\mbox{se}\quad e_i=0\end{cases}</math><br/>
Quindi perché <math>e_i^{e_i}</math>=1, è necessario e suffciente che '''x<sub>i</sub>'''='''e<sub>i</sub>'''.<br/>
[[File:Prodotto fodamentale 101.png|right]]
Per cui affinché '''P=1''' è necessario e sufficiente che si abbia:<br/>
:::::<math>x_i=e_i\qquad (i=1,2,....,n)</math><br/>
Il prodotto fondamentale '''P''' è dunque uguale ad '''1''' quando le variabili assumono le cmbinazioni '''(e<sub>1</sub>, e<sub>2</sub>,...e<sub>n</sub>)'''; cioè quando si ha che:<br/>
:::::<math>x_1=e_1\quad x_2=e_2,....x_n=e_n)</math><br/>
Per esempio, il prodotto fondamentale <math>x_1^1 x_2^0 x_3^1</math> assumerà il valore '''1''' solo per la combinazione (1 0 1); cioè, se esprimiamo tale prodotto sotto forma di tabella, avremo (tabella affiancata):<br/>
Diremo che una funzione è generata da un prodotto fondamentale, quando la sua tabella (o il vettore caratteristico è del tipo di cui alla tabella mostrata, e rappresentiamo la funzione con l'espressione:<br/>
:::::<math>f=P=e_1^{e_1}\cdot ..........\cdot e_n^{e_n}</math><br/>
dove '''e<sub>1</sub>....e<sub>n</sub>''' è la combinazione di valori per cui il prodotto fondamentale risulta uguale ad '''1'''.<br/>
[[File:Tabelle A e B.png|right]]<br/>
Consideriamo ora la funzione a tre variabili definita dalla tabella A e prendiamo in esame le tre funzioni '''f<sub>1</sub>''','''f<sub>2</sub>''', '''f<sub>3</sub>''' definite dalla tabella B: ora, confrontando i vettori '''V<sub>f</sub>''', '''V<sub>{f<sub>1</sub>}</sub>''', '''V<sub>{f<sub>2</sub>}</sub>''', '''V<sub>{f<sub>3</sub>}</sub>''', è facile verificare che le quattro funzioni soddisfano la seguente reelazione:<br/>
:::::<math>f=f_1+f_2+f_3</math><br/>
dove le '''f<sub>1</sub>''', '''f<sub>2</sub>''', '''f<sub>3</sub>''', sono generate, ciascuna, da un prodotto fondamentale. Indichiamo quest'ultimo prodotto con '''m<sub>abc</sub>''', dove '''abc''' è la combinazione binaria che rende uguale ad '''1''' tale prodotto; cioè avremo:<br/>
:::::<math>m_{abc}=x_1^a\cdot x_2^b\cdot x_3^c</math><br/>
Se ora consideriamo i tre prodotti fondamentali che generano le funzioni '''f<sub>1</sub>''','''f<sub>2</sub>''','''f<sub>3</sub>''', e trasformiamo il numero binario '''abc''' in decimale, avremo le seguenti notazioni:<br/>
::::<math>m_{001}=x_1^0 x_2^0 x_3^1=\bar x_1 \bar x_2 x_3=m_1\qquad (001_2=1_{10})</math><br/>
::::<math>m_{010}=x_1^0 x_2^1 x_3^0=\bar x_1 x_2 \bar x_3=m_1\qquad (010_2=2_{10})</math><br/>
::::<math>m_{100}=x_1^1 x_2^0 x_3^0= x_1 \bar x_2 \bar x_3=m_1\qquad (100_2=4_{10})</math><br/>
ed inoltre , essendo le tre funzioni generate da tali prodotti, si può scrivere:<br/>
:::::<math>f_1=m_1\qquad f_2=m_2\qquad f_3=m_4</math><br/>
da cui<br/>
::<math>f=f_1+f_2+f_3=m_1+m_2+m_4=\bar x_1 \bar x_2 x_3+\bar x_1 x_2 \bar x_3+x_1 \bar x_2 \bar x_3</math><br/>
E' chiaro che il ragionamento effettuato nel caso di tre variabili e su di una funzione particolare , vale anche in generale; e che ogni funzione booleana si può esprimere come somma booleana dei prodotti fondamentali.<br/>
Per fare ciò si seguiranno le seguenti regole:<br/>
#- si scrivono tutti i prodotti fondamentali corrispondenti alle combinazioni delle variabili per le quali la funzione '''f(x<sub>1</sub>...x<sub>n</sub>)''' vale 1.<br/>
#- si forma la somma booleana di tutti questi prodotti.<br/>
 
L'espressione così ottenuta, costituisce una rappresentazione algebrica della funzione, chiamata '''prima forma canonica''' o '''[[w:Forma canonica (algebra di Boole)|forma canonica disgiuntiva.]]'''<br/>
Si ha:<br/>
:::::<math>f(x_1,..x_i,..x_n)=\sum_{e_1..e_n=0}^{e_1..e_n=2^n-1}</math><br/>
La prima forma canonica è unica: il carattere di unicità risulta direttamente dalla corrispondenza biunivoca che esiste tra i prodotti fondamentali componenti la forma canonica e le combinazioni binarie della tabella della verità per le quali la funzione vale '''1'''.<br/>
[[File:Tabella della funzione f.png|right]]
:: <math>\underline {esempio}</math><br>
Si voglia determinare la forma canonica disgiuntiva della funzione '''f''' definita dalla tabella relativa.<br/>
Per fare ciò, determiniamo prima i tre prodotti fondamentali:<br/>
 
::<math>m_{001}=m_1=x_1^0 x_2^0 x_3^1=\bar x_1\bar x_2 x_3</math><br/>
::<math>m_{101}=m_5=x_1^1 x_2^0 x_3^1=x_1 \bar x_2 x_3</math><br/>
::<math>m_{111}=m_7=x_1 x_2 x_3</math>
 
da ciò ne discende che la forma canonica disgiuntiva della funzione sarà:
 
::<math>f=\bar x_1 \bar x_2 x_3+x_1 \bar x_2 x_3+x_1 x_2 x_3</math>
 
:: <math>\underline {somma\ fondamentale}</math><br>
Si chiama '''somma findamentale''', o '''[[w:maxtermine|maxterm]]''' una espressione della forma:<br/>
 
:::::<math>S=e_1^{e_1}+...+x_i{e_i}.....+x_n^{e_n}=\sum_{i=0^i=n}x_i^{e_i} </math>
 
dove, per le '''x<sub>i</sub><sup>e<sub>i</sub></sup>''', valgono le convenzioni fatte precedentemente.<br/>
In altri termini, una somma fondamentale ad '''n''' variabili è una somma delle '''n''' variabili (dirette o complementate) dove ciascuna delle'''x<sub>i</sub>''' compare una sola volta.
 
::<math>\underline {tavola\ della\ verita\ di\ una\ somma\ fondamentale\ di\ n\ variabili}</math><br>
Affinché la somma:<br/>
 
:::::<math>S=x_1^{e_1}+...+x_i^{e_i}+...+x_n^{e_n}</math>
 
sia nulla, è necessario e sufficiente che tutti i suoi termini siano nulli: cioè che si abbia:
 
:::::<math>x_i^{e_i}=0\qquad (i=1,2,.....,n)\qquad\qquad\ ovvero\ x_i=\bar e_i</math>
 
unque, perché '''S''' sia nulla, è necessario e sufficiente che la combinazione delle variabili sia identica a quella delle '''e<sub>i</sub>''' complementate.<br/>
Riassumendo: la somma '''S''' ha una tavola della verità che è nulla in corrispondenzaad una sola combinazione delle variabili:
 
:::::<math>(\bar e_1,\bar e_2...\bar e_n)</math>
 
e vale '''1''' per tutte le altre.<br/>
Inversamente , ogni funzione avente una tavola della verità di questo tipo, cioè nulla per una sola combinazione (a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>) delle variabili, potrà essere rappresentata con una somma fondamentale:
 
:::::<math>f=x_1^{\bar a_1}+x_2^{\bar a_2}+...+x_n^{\bar a_n}</math>
 
cioè se (a<sub>1</sub> a<sub>2</sub>...a<sub>n</sub>) è l'unica combinazione che annulla la '''f''' potremo scrivere tale funzione come somma delle '''x<sub>i</sub>''' aventi, per indice superiore, i valori complementari della '''n-pla'''.<br/>
::<math>\underline {esempio}</math>.<br/>
[[File:Esempio somma fondamentale.png|right]]
à1- La somma fondamentale
 
:::::<math>x_1+\bar x_2+\bar x_3+x_4=x_1^1+x_2^0+x_3^0+x_4^1</math>
 
è nulla per la combinazione '''0110''' e per questa soltanto.<br/>
2- Si consideri la funzione definita dalla tabella affiancata: essendo '''011''' l'unica combinazione che annulla la '''f''' si può scrivere:
 
 
[[File:Definizione tabellare di funzioni.png|right]]
 
:::::<math>f=x_1^\bar 0+x_2^\bar 1+x_3^\bar 1=x_1+\bar x_2+\bar x_3</math>
 
 
 
3-Si considerino le funzioni '''f,f<sub>1</sub>,f<sub>2</sub>,f<sub>3</sub>''' definite dalla tabella sulla destra:<br />
esaminando 9 vettori caratteristici delle funzioni si vede che si può scrivere '''f=f<sub>1</sub>''' '''f<sub>2</sub>''' '''f<sub>3</sub>''', dove '''f<sub>1</sub>''', '''f<sub>2</sub>''', '''f<sub>3</sub>''', sono funzioni generate da somme fondamentali associate agli '''zeri''' della colonna '''f'''<br />
Si ha inoltre che:
 
:::::<math>f_1=x_1+x_2+\bar x_3</math>
 
:::::<math>f_2=x_1+\bar x_2+x_3</math>
 
:::::<math>f_3=\bar x_1+f_2+x_3</math>
 
da cui<br/>
:::<math>f=(x_1+x_2+\bar x_3)\cdot (x_1+\bar x_2+x_3)\cdot (\bar x_1+f_2+x_3)</math>.
 
 
::<math>\underline {forma\ canonica\ congiuntiva\ di\ una\ funzione\ ad\ n\ variabili}</math>
Ragionando come nel caso della forma disgiuntiva, si vede che ogni funzione potrà essere espressa come un prodotto di somme fondamentali, utilizzando le regole seguenti:
# scrivere tutte le somme fondamentali corrispondenti alle combinazioni per le quali la funzione '''f=(x<sub>1</sub>...x<sub>n</sub>)''' vale zero.
# scrivere il prodotto di queste somme.
 
L'espressione così ottenuta, costituisce una rappresentazione algebrica della funzione, chiamata: '''seconda forma canonica''' o '''forma canonica congiuntiva'''.<br/>
Si scriverà in generale:<br/>
 
::<math>f(x_1,x_2....x_n)=\prod_{e_1..e_n=0}^{e_1..e_n=2^n-1}[f(\bar e_1...\bar e_n)+x_1^{e_1}+...+x_n^{e_n}]</math>
 
 
[[File:Forma canonica congiuntiva di una funzione a tre variabili.png|right]]
 
::<math>\underline {esempio}:</math><br/>
Si voglia determinare la forma canonica congiuntiva della funzione tabellata a fianco:<br/>
Le somme fondamentali sono:
:::::<math>f_1=x_1+x_2+\bar x_3</math>
:::::<math>f_2=x_1+\bar x_2+\bar x_3</math>
:::::<math>f_3=\bar x_1+x_2+\bar x_3</math>
:::::<math>f_4=\bar x_1+\bar x_2+\bar x_3</math>
 
e la funzione '''f''' avrà la seguente forma canonica congiuntiva:
 
::;<math>f=(x_1+x_2+\bar x_3)+(x_1+\bar x_2+\bar x_3)+(\bar x_1+x_2+\bar x_3)+(\bar x_1+\bar x_2+\bar x_3)</math>
 
La seconda forma canonica, come la prima, è unica. Ciò discende dall'identico processo logico seguito.<br/>
Un'altra considerazione è che nella forma canonica disgiuntiva i termini il cui coefficiente risulta essere <math>f(e_1...e_n)</math> scompaiono se '''f''' è nulla.
Nella forma canonica congiuntiva, i fattori scompaiono dal prodotto quando <math>f(\bar e_1...\bar e_n)</math> vale'''1''', cioè quando il fattore è della forma
 
:::::::<math>1+x=1</math>.
 
 
::<math>\underline {qualche\ notazione\ abbreviata}</math><br/>
Prodotti fondamentali:<br/>
::<math>si\ ponga\qquad\qquad m_i=e_1^{e_1}\cdot x_2^{e_2}....x_n^{e_n}</math>
 
dove <math>i=e_1 e_2...e_n</math> è un indice espresso nella base decimale e tale che <math>0\le i\le 2^n-1</math>, mentre <math>e_1 e_2....e_n</math> è la sua rappresentazione binaria.
 
::<math>si\ ha\qquad\qquad m_i\cdot m_j=0\qquad\qquad per\ i\ne j</math>
 
in quanto'''i''' e '''j''' sono i numeri che corrispondono all'unica combinazione binaria che rende uguale ad '''1''' il prodotto fondamentale.<br/>
Somme fondamentali:<br/>
::<math>\qquad\qquad Si\ ponga\qquad\qquad M_i=x_1^{e_1}+x_2^{e_2}+......+x_n^{e_n}</math>
 
dove per <math>i=e_1 e_2....e_n</math> vale quanto sopra.<br/>
::<math>Si\ avra\qquad\qquad M_1+M_2=1\qquad\qquad per\ i\ne j</math>
 
Forma canonica disgiuntiva
:::::<math>f=\sum_{i=0}^{i=2^n-1} f(i) m_i</math>
 
Forma canonica congiuntiva
 
:::::<math>f=\prod_{i=0}^{i=2^n-1}f(2^n -1 -i)+M_i</math>
 
<math>poiche\quad \bar e_1\bar e_2....\bar e^n=2^n -1 -i\qquad\qquad se\ si\ pone\quad i=e_1 e_2....e_n.</math>
 
 
: <math>7.5\qquad \underline { funzioni\ duali}</math><br/>
Data una funzione <math>f(x_1,x_2,...,x_n)</math>, si chiama funzione duale la funzione <math>\tilde f{(x_1,x_2,...x_n)}</math> che soddisfa alla relazione
 
<math>\tilde f{(x_1,x_2,..,x_n)}=\overline {f(\bar x_1,..,\bar x_n)}=f(x_1,...,x_n)</math>
 
Proprietà
 
::1- duale di una funzione duale<br/>
:::::<math>\tilde{\tilde f}=f</math>
infatti<br/>
:::::<math>\tilde{\tilde{f}}=\tilde{\tilde{(f)}}=(\bar{\bar{f}}(\bar{x_1},...\bar{x_n}))=f(x_1,..,x_n)</math>
 
::2- duale di una somma<br/>
:::::<math>\sim{\sum_i{x_i}}=\overline {\sum_i \bar x_i}=\prod_i x_i</math>
 
::3- duale di un prodotto<br/>
:::::<math>\sim \prod_i x_i=\overline {\prod_i \bar x_i}=\sum_i x_i</math>
 
::4- duale di un complemento<br/>
:::::<math> \sim (\bar A)=\overline {\overline {(\bar A)}}=\bar A</math>
 
::5- duale di una funzione costante<br/>
Poiché stiamo considerendo un'algebra a due elementi '''0''' e '''1''', le funzioni costanti possono assumere solo l'uno o l'altro di questi due valori, per cui se:
 
:::::<math>f(x_1,x_2,...,x_n)=0</math>
 
allora si ha che<br/>
 
:::::<math>f(\bar x_1,\bar x_2,...,\bar x_n)=0</math>
 
in quanto il valore di una funzione costante non dipende dall'assegnazione delle variabili. Risulta allora:
 
:::::<math>\sim f(x_1,...,x_n)=\bar f(\bar x_1,...,\bar x_n)=1</math>
 
Nella stessa maniera si ha che se
 
:::::<math>f(x_1,...,x_n)=1</math>
 
allora
 
:::::<math>\sim f(x_1,...,x_n)=0</math>
 
:Riassumendo possiamo dire che, data una espressione rappresentante una funzione, si ottiene l'espressione della funzione duale sostituendo a '''+''' con '''<math>\bullet </math>''', '''<math>\bullet </math>''' con '''+''' e lasciando le variabili (complementate o no) tali e quali e sostituendo '''0''' con '''1''', e '''1''' con '''0'''; regole che sono le stesse viste nel capitolo '''6''' in generale.
 
 
: <math>7.6\qquad \underline { funzioni\ particolari}</math><br/>
Nel capitolo '''5''' sono state definite le funzioni di '''AND''', '''OR''', '''PEIRCE''', '''SHEFFER''', di due argomenti; vogliamo ora dedfinire di nuovo tali funzioni attribuendo loro '''n''' argomenti. <con ciò non intendiamo dire che la singola funzione opera ripetutamente fino all'esaurimento delle variabili, bensì che essa viene considerata una operazione '''n-aria''' che opera contemporaneamente sulla '''n-pla''' di argomenti.<br/>
Questa osservazione rivela la sua importanza in considerazione del fatto che non tutte le funzioni sopranominate godono della proprietà associativa e quindi, se la funzione non opera contemporaneamente su tutti gli argomenti, otterremmo risultati diversi a seconda delle associazioni fatte, e di conseguenza arbitrari.<br/>
 
: <math>7.6.1\qquad \underline { funzione\ di\ AND\ ad\ n\ variabili}</math><br/>
E' la funzione che vale
 
:::::<math>f(n)=\begin{cases} 1, & \mbox{quando }x_1=x_2=...=x_n=1 \\ 0, & \mbox{atrimenti } \end{cases}</math>
 
si scrive
 
:::::<math>f=x_1\cdot x_2\cdot ....\cdot x_n</mayh>
 
: <math>7.6.2\qquad \underline { funzione\ di\ OR\ ad\ n\ variabili}</math><br/>
E' la funzione che vale
 
:::::<math>f(n)=\begin{cases} 1, & \mbox{quando }x_1=x_2=...=x_n=0 \\ 0, & \mbox{atrimenti } \end{cases}</math>
 
si scrive
 
:::::<math>f=x_1+x_2+....+x_n</math>
 
: <math>7.6.3\qquad \underline { funzione\ di\ PEIRCE\ ad\ n\ variabili\ o\ funzione\ di\ NOR }</math><br/>
E' la funzione che vale
 
:::::<math>f(n)=\begin{cases} 1, & \mbox{quando }x_1=x_2=...=x_n=0 \\ 0, & \mbox{atrimenti } \end{cases}</math>
 
e si scrive
 
:::::<math>f=x_1\downarrow x_2\downarrow x_3...\downarrow x_n=\downarrow_{i=1}^{i=n}x_i</math>
 
questa funzione è definita anche per '''n=1''' cioè:
 
:::::<math>\downarrow x=x\downarrow=\begin{cases} 1, & \mbox{se }x=0 \\ 0, & \mbox{se }x=1 \end{cases}\qquad {da\ cui\ \downarrow x=x\downarrow =\bar x}</math>
 
Per la funzione '''PEIRCE''' non vale la legge associativa.
 
: <math>7.6.4\qquad \underline { funzione\ di\ SHEFFER\ ad\ n\ variabili\ o\ funzione\ di\ NAND }</math><br/>
E' la funzione che vale
 
:::::<math>f(n)=\begin{cases} 0, & \mbox{quando }x_1=x_2=...=x_n=1 \\ 1, & \mbox{altrimenti } \end{cases}</math>
 
si scrive
 
:::::<math>f=x_1/x_2/.../x_n=/_{i=1}^{i=n}x_i</math>
 
anche la funzione di '''SHEFFER''' è definita se '''n=1''' cioè <math>/x=x/=\bar x</math>, e non gode della proprietà associativa.
 
 
: <math>7.7.\qquad \underline { proprieta\ degli\ operatori\ \downarrow \ e\ / }</math><br/>
 
: <math>7.7.1\qquad \underline { Espressione\ degli\ operarori\ \downarrow \ e\ /\ mediante\ (+), (\cdot ), (-) }</math><br/>
Tenendo presente le definizioni ora date, vediamo che la funzione '''PERIRCE''' vale '''1''' per una sola combinazione di valori delle variabili, ma allora possiamo facilmente scrivere tale funzione, mediante la '''1<sup>a</sup> forma canonica''', come il prodotto fondamentale '''m<sub>0</sub>''' cioè:
 
:::<math>\downarrow_{i=0}^{i=n}x_i=\downarrow x_2\downarrow x_3\downarrow ...\downarrow x_n=m_0=x_1^0 x_2^0....x_n^0=\bar x_1\cdot \bar x_2\cdot ....\cdot \bar x_n</math>
o ancora ,tenendo presente le regole della complementazione
 
:::::<math>\downarrow_{i=0}^{=n}x_i=\prod_i\bar x_i=\overline {\sum_i x_i}</math>
 
Viceversa, la funzione di '''SHEFFER''', si annulla in un solo caso; quindi possiamo esprimerla facilmente, mediante la '''2<sup>a</sup> forma canonica''', come la somma fondamentale '''M<sub>0</sub>''' cioè:
 
:::<math>/_{i=0}^{i=n}x_i=x_1/x_2/.../x_n=M_{00..0}=M_0=x_1^0+x_2^0+...+x_n^0=\sum_i\bar x_i</math>
 
o ancora, tenendo presente le regole della complementazione
 
:::::<math>/_{i=0}^{i=n}x_i=\sum_i\bar x_i=\overline {\prod_i x_i}</math>
 
 
 
: <math>7.7.2.\qquad \underline {Proprieta\ di\ dualita'}</math><br/>
::::<math>\underline {di\ complementazione\ ,\ di\ pseudo\ associativita'\ ed\ altre\ ,\ di\downarrow {}\ e\ /}</math><br/>
Consideriamo la funzione di '''PEIRCE''' <math>x_1\downarrow x_2\downarrow ...\downarrow x_n</math> ad '''n''' variabili.<br/>
Si può scrivere:
 
:::<math>\overline {\bar x_1\downarrow...\bar x_n\downarrow}=\overline {\prod_i\bar \bar x_i}=\overline {\prod_i x_i}=\sum_i\bar x_i=x_1/x_2/.../x_n</math>
 
Dunque la funzione duale della funzione di '''Peirce''' (<math>\downarrow </math>) è la funzione di '''Sceffer''' (/).<br/>
Viceversa: considerando la funzione di '''Sheffer''' '''x<sub>1</sub>/x<sub>2</sub>/.../x<sub>n</sub>''' ad '''n''' variabili, si può scrivere:
 
:::::<math>\overline{\bar x_1\bar x_2/..\bar x_n}=\overline{\sum_i\overline{\overline{x_i}}}=\overline{\sum_i x_i}=\prod_i{\bar x_i}=x_1\downarrow{}x_2\downarrow{}..\downarrow {x_n}</math>
 
Quindi la [[w:Algebra di Boole|funzione duale]] di Sheffer '''(/)''' è la funzione di Peirce <math>(\downarrow)</math>.<br/>
Consideriamo la finzione di Peirce espressa mediante l'operazione '''(*)''', si ha: <math>\downarrow_i x_i=\prod_i\bar x_i</math> complementando ambo i membri si ottiene:
 
:::::<math>\overline{\downarrow_i x_i}=\overline{\prod_i \bar x_i}=\sum_i x_i\qquad\qquad (a)</math>
 
ma la funzione di Sheffer era stata espressa mediante una somma cioè:
 
:::::<math>/_ix_i=\sum_i \bar x_i\qquad\qquad \qquad (b)</math>
 
da cui confrontando la '''(a)''' con la '''(b)''' risulta:
 
:::::<math>\overline{\downarrow_i x_i}=/_i \bar x_i</math>
 
Ripetendo il ragionamento sulla funzione di Sheffer, espresso mediante la somma si ottiene:
 
:::::<math>\overline{/_i x_i}=\downarrow _i \bar x_i</math>
 
Le ultime due relazioni generalizzano in un certo senso la formula di De Morgan:
 
:::::<math>\overline{\sum_i x_i}=\prod_i \bar x_i=\downarrow{x_i}</math><br/>
:::::<math>\overline{\prod_i}x_i=\sum_i \bar x_i=/x_i</math>
 
:''Pseudo associatività''<br/>
Come abbiamo già detto, gli operatori di Sheffer e di Peirce non sono associativi. Consideriamo le espressioni:
 
:::::<math>F=A\downarrow{(B\downarrow{C})}</math><br/>
:::::<math>F'=(A\downarrow{B})\downarrow{C}</math>
 
si ha che <math>F\ne F'</math>, infatti:
 
::<math>F=\overline{A+(B\downarrow{C})}=\bar{A}\cdot{\overline{B\downarrow{C}}}=\bar{A}\cdot{\overline{\overline{(B+C)}}}=\bar{A}(B+C)=\bar{A}B+\bar{A}C</math><br/>
::<math>F'=\overline{(A\downarrow{B})+C}=\overline{A\downarrow{B}}\cdot{\bar{C}}=(A+B)\bar{C}=A\bar{C}+B\bar{C}</math>
 
Dunque, per un insieme di dati valori '''ABC''', '''F''' e '''F'''' non sono necessariamente uguali. In altri termini l'operazione '''<math>\downarrow{}</math>''' non è associativa. Si vedrà in maniera analoga che l'operazione '''/''' non è associativa.<br/>
Tuttavia tali operatori godono di una notevole proprietà detta pseudo associatività:
 
:::::<math>A\downarrow{B}\downarrow{C}=A\downarrow{\overline{(B\downarrow{C})}}=\overline{(A\downarrow{B})}\downarrow{C}</math><br/>
::''dimostrazione''<br/>
 
:::::<math>A\downarrow{\overline{(B\downarrow{C})}}=A\downarrow{(B+C)}=\bar{A}\overline{(B+C)}=\bar{A}\bar{B}\bar{C}=A\downarrow{B}\downarrow{C}</math><br/>
:::::<math>\overline{A\downarrow{B}}\downarrow{C}=(A+B)\downarrow{C}=\overline{(A+B)}\cdot{\bar{C}}=\bar{A}\bar{B}\bar{C}=A\downarrow{B}\downarrow{C}</math>
 
Queste proprietà si generalizzano, nel caso di '''n''' variabili, come segue:
:<math>\overline{x_1\downarrow{x_2}\downarrow{}...\downarrow{x_k}}\downarrow{k_{k+1}}\downarrow{}...\downarrow{x_n}=x_1\downarrow{x_2}...\overline{x_k\downarrow{x_{k+1}}...\downarrow{x_n}}\qquad\qquad{(1<k<n)}</math><br/>
:::<math>\overline{x_1/{x_2}/{}.../{x_k}}/{k_{k+1}}/{}.../{x_n}=x_1/{x_2}...\overline{x_k/{x_{k+1}}.../{x_n}}\qquad\qquad{(1<k<n)}</math><br/>
 
Dalla definizione dell''''operatore''' '''<math>\downarrow{}</math>''' si deducono le seguenti relazioni:
 
::::<math>\begin{cases}x_1\downarrow{x_2}...\downarrow{x_n}\downarrow{0}=x_1\downarrow{x_2}\downarrow{}...\downarrow{x_n}\qquad{(n>1)}\\x_1\downarrow{x_2}\downarrow{}...\downarrow{x_n\downarrow{1}}=0\end{cases}</math><br/>
::::<math>\begin{cases}x_1/{x_2}.../{x_n}/{1}=x_1/{x_2}/{}.../{x_n}\qquad{(n>1)}\\x_1/x_2/.../x_n/0=1\end{cases}</math><br/>
::::<math>\begin{cases}0\downarrow{x}=x\downarrow{0}=\bar x\qquad{(n=1)}\\1/x=x/1=\bar{x}\end{cases}</math><br/>
 
 
: <math>7.7.3.\qquad \underline {Espressione\ degli\ operatori\ (\cdot{}),(+),(-)}</math><br/>
::::<math>\underline{mediante\ gli\ operatori\ (\downarrow{})\ e\ (/)\ (n\ variabili)}</math><br/>
:''Operazione ''<math>(\cdot )</math><br/>
:::::<math>x_1\downarrow{x_2}\downarrow{}...\downarrow{x_n}=\bar{x_1}\cdot{\bar{x_2}}\cdot{}...\cdot{\bar{x_n}}</math><br/>
 
ponendo <<math>x_i=\bar{A_i}</math>
:::::<math>\prod_{i}A_i=A_1\cdot{A_2}\cdot{}...\cdot{}\cdot{A_n}=\bar{A_1}\downarrow{\bar{A_2}}\downarrow{}...\downarrow{\bar{A_n}}=\downarrow{_i}\bar{A_i}</math>
 
:''Operazione (+)''<br/>
In maniera analoga si ha :
 
:::::<math>x_1/x_2/.../x_n=\bar{x_1}+\bar{x_2}+...+\bar{x_n}</math><br/>
 
ponendo <math>x_i=\bar{A_i}</math><br/>
:::::<math>\sum_i{A_i}=A_1+A_2+...+A_n=\bar{A_1}/\bar{A_2}/.../\bar{A_n}=/_i\bar{A_i}</math>
 
:''Complemento (-)''<br/>
E' facile verificare dalle definizioni che
 
:::::<math>\bar{A}=\overline{A+A+...+A}=A\downarrow{A\downarrow{}...\downarrow{A}}</math>
 
Analogamente:<br/>
:::::<math>\bar{A}=\overline{A\cdot{A}\cdot{}...\cdot{A}}=A/A/.../A</math>
 
Inoltre grazie a delle proprietà già viste è possibile esprimere il complemento anche nel modo seguente:<br/>
:::::<math>\bar{x}=0\downarrow{x}=x\downarrow{0}</math><br/>
:::::<math>\bar{x}=1/x=x/1</math>}
 
Da ciò è facile vedere che:<br/>
:::::<math>x\downarrow{\bar{x}}=\overline{x/\bar{x}}=0</math>
 
 
: <math>7.7.4.\qquad \underline {Forme\ canoniche\ di\ Sheffer\ (n\ variabili)}</math><br/>
[[File:Definizione tabellare di una funzione.png|right]]
A partire dalle due forme canoniche è facile ottenere delle espressioni utilizzanti <math>\downarrow{}</math> e '''/''', che si possono chiamare forme canoniche di Sheffer.<br/>
Consideriamo la funzione '''F''' a tre variabili, '''A,B,C''', definita dalla tabella collaterale.<br/>Per la prima forma canonica abbiamo che:
 
:::::<math>F=\bar{A}BC+\bar{A}\bar{B}C+AB\bar{C}</math>
 
::a) possiamo allora scrivere:
 
:::::<math>F=\overline{(\overline{\bar A B C}) (\overline{\bar A \bar B C}) (\overline{A B \bar C})}</math>
 
(teorema di '''De Morgan''' e doppia negazione)<br/>
Per la definizione di '''/''' si ha:
 
:::::<math>F=(\bar A/B/C)(\bar A / \bar B / C)(A / B / \bar C)</math>
 
Quindi: conoscendo la prima forma canonica, si ottiene una espressione della funzione mediante l'operatore di '''/''', sostituendo semplicemente tutti i segni operativi '''(+)''', '''(*)''' con '''/''' e racchiudendo tra parentesi i gruppi di lettere corrispondenti ai prodotti fondamentali.
 
::b) Consideriamo ora la seconda forma canonica:<br/>
::<math>F=(A+B+C)(A+\bar B+C)(\bar A+B+C)(\bar A+B+\bar C)(\bar A+\bar B+\bar C)</math>
 
possiamo scrfivere:<br/>
::<math>F=(\overline{\bar A\cdot\bar B\cdot\bar C}) (\overline{\bar A\cdot B\cdot\bar C})(\overline{A\cdot\bar B\cdot \bar C }) (\overline{A\cdot\bar B\cdot C})(\overline{ A\cdot B \cdot C})</math><br/>
::<math>F=(\bar A\cdot\bar B\cdot\bar C)\downarrow{} (\bar A\cdot B\cdot\C)\downarrow {}(A\cdot\bar B\cdot\bar C)\downarrow{} (A\cdot\bar B\cdot C)\downarrow{}(A\cdot B\cdot C)</math>
::<math>F=(A\downarrow B\downarrow C)\downarrow{} (A\downarrow \bar B\downarrow C)\downarrow {}(\bar A\downarrow B\downarrow C )\downarrow{} (\bar A\downarrow B\downarrow \bar C)\downarrow{}(\bar A\downarrow \bar B\downarrow\bar C)</math>
 
Donde la regola:<br/>
:::a partire dalla seconda forma canonica, si ottiene una espressione della funzione
:::medianter l'operatore '''<math>\downarrow{}</math>''' sostituendo '''(+)''', '''<math>(\cdot{})</math>''' con '''(<math>\downarrow{})</math>''' e racchiudendo in parentesi i gruppi corrispondenti alle somme fondamentali della seconda forma canonica.
 
 
: <math>7.8\qquad \underline {Funzione\ OR\ esclusivo\ \bigoplus{}\ (XOR)}</math><br/>
Anche questa funzione l'abbiamo incontrata già, e sommariamente trattataal capitolo '''5.3'''.<br/>
Oltre che con il nome di '''OR''' esclusivo, questa funzione la si può incontrare anche sotto il nome di '''inequivalenza''', '''dilemma''' e '''addizione ''' modulo 2.Mentre i primi tre nomi traggono origine dall'algebra delle proposizioni, '''addizione modulo 2'''
trova la sua giustificazione nel fatto che: se si considera come risultato di una somma la classe '''resto mod.2''' a cui appartiene il risultato vero, allora si ottengono gli stessi valori della funzione '''XOR''', cioè:
 
===Rappresentazione geometrica delle funzioni booleane e loro minimizzazxioine===
:8.1 <math>\underline {Diagrammi\ di\ Venn}</math><br/>
I diagrammi di Venn sono una rappresentazione grafica delle relazioni tra insiemi, ed in particolare , delle operazioni di unione, intersezione e complementazione. Si è visto inoltre che ogni algebra di insiemi con le operazioni sopra citate è un'algebra du Boole. Ne segue che questi diagrammi di Venn possono essere utilizzati per rappresentare le operazioni sulle funzioni di commutazione che formano esse stesse un'algebra di Boole. Per fare ciò è sufficiente utilizzare la seguente corrispondenza tra gli insiemi e le funzioni booleane: ad ogni insieme '''E<sub>i</sub>''' si associa la funzione cararreistica '''X<sub>i</sub>'''.<br/>
Questo comporta la corrispondenza tra operazioni su insiemi e funzioni caratteristiche:<br/>
:::::'''<math>E_i\cup E_j\iff X_i+ X_j</math>'''<br/>
:::::<math>E_i\cap E_j\iff X_i\cdot X_j</math><br/>
::::::<math>\bar E\iff \bar X_i</math><br/>
Dati '''n''' insiemi '''E<sub>1</sub>...E<sub>n</sub>''' rappresentati su un diagramma di Venn, essi definiscono 2<sup>n</sup> sottoinsiemi caratterizzati dalla loro '''inclusione''' o '''non inclusione''' in ciascuno degli insiemi '''E<sub>1</sub>...E<sub>n</sub>'''.<br/>
[[File:Venn diagram of subsets of three sets.png|right]]<br/>
Ogni insieme esistente nel diagramma di Venn può essere definito mediante una selezione degli insiemi '''E<sub>1</sub>...E<sub>n</sub>''':br/>
[[File:Tavola di definizione di una funzione caratteristica.png|right]]<br/>
[[File:Riunione di insiemi disgiuinti.png|right]] <br/>
La funzione caratteristica '''E''' definita nella tavola (8.1) è quindi rappresentata dall'insieme E dal diagramma di Wenn (8.2).<br/>
E è dato dagli insiemi colorati.<br/>
L'insieme '''E''' può essere anche definito mediante una espressione:<br/>
 
 
:<math>E=(\bar E_1\cap \bar E_2\cap E_3)\cup (\bar E_1\cap E_2\cap E_3)\cup (E_1\cap \bar E_2\cap \bar E_3)\cup (E_1\cap E_2\cap E_3)</math><br/>
se ne deduce per '''X''' l'espressione:<br/>
::::<math>X=\bar X_1\bar X_2 X_3+\bar X_1 X_2 X_3+X_1\bar X_2\bar X_3+X_1 X_2 X_3</math><br/>
 
Ci proponiamo di semplificare le espressioni di '''E''' e di '''X'''<br/>
:<math>E=(\bar E_1\cap \bar E_2\cap E_3)\cup (\bar E_1\cap E_2\cap E_3)\cup (E_1\cap \bar E_2\cap \bar E_3)\cup (E_1\cap E_2\cap E_3)=</math><br/>
:::<math>(\bar E_1\cap \bar E_2\cap E_3)\cup (\bar E_1\cap E_2\cap E_3)\cup (E_1\cap \bar E_2\cap \bar E_3)\cup (\bar E_1\cap E_2\cap E_3)\cup (E_1\cap E_2\cap E_3)=</math><br/>
:::<math>[(E_1\cap \bar E_1)\cup (E_2\cap E_3)]\cup [\bar E_1\cap ( E_2\cup \bar E_2)\cap E_3]\cup (E_1\cap \bar E_2\cap \bar E_3)=</math><Br/>
:::<math>(E_2\cap E_3)\cup (\bar E_1\cap E_3)\cup (E_1\cap \bar E_2\cap \bar E_3)</math>
 
 
:<math>X=\bar X_1 \bar X_2 X_3+\bar X_1 X_2 X_3+X_1 \bar X_2 \bar X_3+X_1 X_2 X_3</math>=<br/>
:::<math>(X_1 X_2 X_3+\bar X_1 X_2 X_3)+(\bar X_1 \bar X_2 X_3+\bar X_1 X_2 X_3)+X_1 \bar X_2 \bar X_3</math>=<br/>
:::<math>[(X_1 +\bar X_1)X_2 X_3]+[\bar X_1 (X_2+\bar X_2)X_3]X_1 \bar X_2 \bar X_3</math>=<br/>
:::<math>X_2 X_3+\bar X_1 X_3+X_1 \bar X_2 \bar X_3</math>
 
Ma la semplificazione si può ottenere anche osservando che l'insieme '''E''' può essere ottenuto come:<br/>
::1)riunione di 4 insiemi disgiunti (8.2a)<br/>
::2)riunione di 3 insiemi disgiunti (8.2b)<br/>
Considerando quindi semplicemente il diagramma di Wenn si ottiene:
 
:::::<math>E=(E_1\cap\bar E_2\cap\bar E_3)\cup(E_2\cap E_3)\cup(\bar E_1\cap E_3)\ \ \ \ \ e\ di\ conseguenza</math><br/>
:::::<math>X=X_1\bar X_2\bar X_3+X_2 X_3+\bar X_1 X_3</math>
 
espressioni ottenute in precedenza in via algebrica.<br/>
Riassumendo, il digramma di '''Wenn''' permette di sostituire le operazioni algebriche con l'esame delle configurazioni geometriche, e questo metodo può essere utilizzato soprattutto per la semplificazione delle espressioni.
 
 
:8.2 <math>\underline {Diagrammi\ di\ Karnaugh}</math><br/>
Esporremo ora il metodo per la semplificazione delle funzioni dovuto a Karnaugh. Tale metodo ci permetterà di eseguire le minimizzazioni con una certa speditezza , ed è conveniente applicarlo a funzioni con al massimo 6 variabili.<br/>
per poter applicare questo procedimento, è necessario conoscere le rappresentazioni delle funzioni col metodo di Karnaugh. Rappresentazioni che permettono di visualizzare una funzione sotto forma di superficie e sono una applicazione della teoria degli insiemi-Nelle tavole della verità abbiamo visto che, nelle colonne delle variabili, ad ogni riga corrisponde un valore possibile della variabile presa in considerazione.<br/>
Nei diagrammi di Karnaugh, anziché far corrispondere una riga, per ogni valore della variabile, si fa corrispondere una superficie delimitata da un quadretto. Costruiamo per esempio il diagramma di Karnaugh per una funzione '''X''' dipendente da due variabili:<br/>
 
::::::::::::::::::::::::<math>tavola\ della\ verita'\ (8.2)</math><br/>
[[File:Tavola della verità (8.2).png|right]]
:::::::::<math>X=A+A\cdot B</math><br/>
 
La tavola (8.2) della verità di questa funzione ha quattro righe, corrispondenti alle 4 possibili combinazioni dei valori assunti dalle variabili.<br/>
 
 
 
[[File:Diagramma di Karnaugh di due variabili.png|right]]<br/>
Il diagramma di Karnaugh corrispondente avra due righe e 4 caselle, essendo i valori di '''A''' (prima variabile) posti sopra le caselle orizzontalmente ed i valori della seconda variabile posti a fianco in verticale.<br/>
Nei quadretti interni distribuiremo i valori assunti dalla funzione. La tavola della verità (8.2) avrà il diagramma affiancato.
 
::<math>\underline {I\ diagrammi\ di\ Karnaugh\ per\ tre,\ quattro\ o\ piu'\ variabili}</math><br/>
[[File:Tabella della verità per una funzione a tre variabili.png|right]]<br/>
[[File:Diagramma di Karnaugh per una funzione a tre variabili.png|right]]<br/>
 
 
 
La tavola della verità della funzione <math>X=(A+\bar B)C</math> a tre variabili ha '''8''' righe.
 
 
 
 
 
 
 
 
 
 
Il corrispondente diagramma di Karnaugh avrà '''8''' caselle, ognuna associata ad una delle '''8''' combinazioni possibili, poste su due colonne e '''4''' righe. Ad una variabile si assegnano le due colonne, una per il valore '''0''' l'altra per il valore '''1'''; alle altre variabili si fanno corrispondere le '''4''' righe, ognuna relativa alle combinazioni:<br/>
::::::::::'''0 0''', '''0 1''', '''1 1''', '''1 0'''<br/>
Notiamo che nella tavola della verità le combinazioni sono:<br/>
::::::::::'''0 0''', '''0 1''', '''1 0''', '''1 1'''<br/>
mentre nei diagrammi di Karnaugh avremo le ultime due cifre invertite (vedere tabella 8.4).<br/>
Poiché ad ogni casella corrisponde il valore che la funzione assume per i particolari valori delle variabili, è stato scelto opportunamente l'ordine delle righe, per fare in modo che, passando da un quadratino al successivo, si abbia il cambiamento di una sola variabile.<br/>
:::::<math>Diagramma\ di\ Karnaugh\ a\ quattro\ variabili</math><br/>
 
[[File:Diagramma di Karnaugh a quattro variabili.png|right]]<br/>
Una tabella della verità a quattro variabili ha '''16 righe''' corrispondenti a tutte le possibili combinazioni. Il Diagramma di Karnaugh avrà '''16''' caselle, disposte su quattro righe e quattro colonne. Si assegneranno le quattro colonne alle possibili combinazioni delle prime due variabili e le quattro righe alle combinazioni '''00,01, 11, 10''' delle altre due.<br/>
Se le variabili fossero 5 o 6 si userebbero dei Diagrammi multipli: la forma cui proposta non è l'unica ma quella di uso più corrente.
[[File:Diagramma di Karnaugh a sei vbariabili.png|right]]<br/>
[[ File:Diagramma di Karnaugh a cinque variabili.png|left]]<br/>
 
 
 
 
{{Avanzamento|100%|24 settembre 2016}}
 
=Parte II=
==Circuiti logici e calcolatori digitali==
===circuiti logici e di memoria===
1.1 Rappresentazione di una [[w:Digitale (informatica)|informazione digitale]].<br/>
:1.1.1 ''Struttura fondamentale dei [[w:Circuito digitale|circuiti digitali]].''<br/>
Si distinguono nei circuiti digitali, tre tipi fondamentali:
 
# Circuiti di memorizzazione: cioè capaci di ricevere, conservare, restituire i segnali delle informazioni.
# Circuiti operatori: cioè capaci di realizzare le funzioni booleane a partire dai segnali delle [[w:Informazione|informazioni]].
# Circuiti di connessione: cioè capaci di trasferire i segnali.
[[File:Rappresentazione di una informazione digitale.png|right]]
Nella forma più semplice la struttura unitaria è composta di:<br/>
:-due circuiti di memorizzazione '''(A,B)''' in cui sono conservate delle informazioni '''(I<sub>1</sub>,I<sub>2</sub>)''' e capaci di emettere i corrispondenti segnali '''(i<sub>1</sub>,i<sub>2</sub>)'''.<br/>
:-un operatore capace di realizzare la funzione dei segnali tali che:<br/>
:::::<math>i_3=f(ki_1,i_2)--------I_3=f(I_1,I_2</math><br/>
:-un circuito di memorizzazione '''(C)''' che riceve il segnale '''(i<sub>3</sub>)''' emesso dall'operatore e capace di conservare l'informazione corrispondente '''I<sub>3</sub>'''.<br/
:-connessioni tra questi circuiti.
 
 
 
 
Un segnale '''i''', rappresentativo di una informazione '''I''', sarà una grandezza fisica suscettibile di assumere nel tempo due diversi valori determinati dai circuiti emettitori e operatori.<br/>
Si cercano in genere quei dispositivi , legati a grandezze fisiche, capaci di assumere due distinti sati di eqwuilibrio stabile.<br/>
Una generica informazione sarà rappresentata da un insieme di segnali elementari. Nei calcolatori elettronici moderni i segnali rappresentativi delle informazioni, sono generalmente costituiti da tensioni o correnti elettriche.
 
:-Segnali elettrici rappresentativi delle informazioni.<br/>
Precisiamo il senso booleano che si può attribuire ad un segnale trasmesso nell'insieme dei componenti di un calcolatore digitale. Consideriamo un segnale elettrico variabile nel tempo (ad esempio, una tensione): '''A=V(t)'''.<br/>
Consideriamo due livelli di riferimento '''m<sub>0</sub>''' e '''m<sub>1</sub>''' con la seguente convenzione sulla informazione binaria contenuta in '''V(t)''':
 
:::::<math>1\qquad\qquad V(t)\le m_1</math>
:::::<math>0\qquad\qquad V(t)\le m_0</math>
 
Naturalmente le cifre binarie '''0''' ed '''1''' non implicano che l'informazione sia espressa nella '''base 2''', ma solo che l'informazione è espressa in un linguaggio a due distinti valori che potrebbero essere rappresentati dagli elementi di una generica coppia '''(+,-)''', (<sub>0</sub>,-).<br/>
La differenza <math>\Delta</math> fra i due livelli è determinata dal potere risolutivo degli strumenti e determina a sua volta la differenza fra massima e minima ampiezza dei possibili segnali.<br/>
 
[[File:Segnale elettrico variabile nel tempo.png|right]]
 
Considerando la figura 1.2 notiamo che, nel tempo, il segnale è:<br/>
:::perfettamente definito in uno dei due possibili valori negli intervalli
 
:::::::'''(t<sub>2</sub>,t<sub>3</sub>),(t<sub>6</sub>,t<sub>7</sub>),(t<sub>4</sub>,t<sub>5</sub>,t<sub>8</sub>),(t<sub>7</sub>),...'''<br/>
 
:::indeterminato negli intervaali
 
:::::::'''(t<sub>1</sub>,t<sub>2</sub>),(t<sub>3</sub>,t<sub>4</sub>),(t<sub>5</sub>,t<sub>6</sub>),(t<sub>7</sub>,t<sub>8</sub>),...'''
 
e di conseguenza il segnale deve essere utilizzato solo in istanti ben determinati dagli intervalli di ambiguità.
 
 
:1.1.2 ''Strutture sequenziali''<br/>
L'analisi tecnica dell'andamento temporale del segnale, in funzione dei componenti del circuito e nelle condizioni più sfavorevoli, corrispondenti a zone di ambiguità di maggiore larghezza, permette di stabilire gli intervalli temporali entro i quali ha senso esaminare il valore dell'informazione.<br/>
Il succedersi, nel tempo, di questi intervalli, può essere regolare o irregolare. Nel secondo caso, si parla di circuiti asincroni ed è il funzionamento interno di ogni circuito che determina gli intervalli opportuni.<br/>
Più frequentemente siha una ripetizione regolare nel tempo di tali intervalli (circuiti sincroni) con periodo '''Θ'''. Si può dire che , durante l'intervallo di tempo di un periodo binario, il segnale è atto a rappresentare una informazione binaria elementare. Oggi si superano valori di periodo corrispondenti ai 10 nano-secondi (=!0<sup>-9</sup> sec).
 
Consideriamo adesso una informazione rappresentata da impulsi secondo la convenzione:
[[File:Temporizzatore.png|right]]
 
:<math>valore\ 1\quad preseza\ di\ impulso</math>
:<math>valore\ 0\quad assenza\ di\ impulso</math>
 
cioè avendo sostituito alla nozione di livello rappresentativo quella di presenza o assenza di impulso.<br/>
Nella figura si è riportato un segnale ideale di impulso, cioè privo di zone di ambiguità, per mettere in evidenza che esistono altre cause per le quali il segnale è significativo solo in brevi intervalli di tempo, e cioè si deve escludere anche il tempo che il segnale impiega per ripristinare la condizione iniziale (eventuale ritorno a zero).<br/>
Gli intervalli di tempo significativi sono scanditi con un segnale di riferimento '''H''', detto segnale di orologio. Si può aggiungere che il segnale di orologio è rappresentativo della tautologia.
 
:1.1.3 ''Convenzioni della logica''<br/>
La scelta che, nel caso appena visto, ha associato il valore '''1''' alla presenza di impulso, è arbitraria. Distinguiamo una logica (intesa qui in pratica come metodo di
 
[[File:Livelli logici.png|right]]
 
realizzazione elettronica di operatori logici) positiva, relativa alla convenzione di associare il valore '''1''' al livello più alto '''(+)''' ed una logica negativa alla convenzione il valore '''0'''al livello inferiore '''(-)'''.<br/>
In generale , se con una convenzione si ha funzione booleana, con la convenzione opposta si ha la funzione duale, infatti:
::<math>\bar F=(\bar x_1, \bar x_2,...,\bar x_n)=\sim F=(x_1, x_2,...,x_n)</math>
 
 
[[File:Porte logiche DIN.png|right]]<br/>
 
:1.1.4 ''Porte e livelli''<br/>
Ai circuiti che realizzano i vari operatori logici si da il nome di porte. Nella figura si anno il simbolo in standard DIN (acronimo di Deutsches Institut fuer Normun) di [[w:Invertitore|complementazione]] e quelli, pure in standard DIN, di '''AND''', '''OR''', '''XOR''', '''NOR''', '''NAND''' a tre ingressi.<br/>
Si da nome di livelli ai successivi stadi determinati dagli operatori elementari, attraverso i quali passa il segnale prima di giungere alla realizzazione del segnale risultante.<br/>
Considerando le funzioni booleane si vede che ad ogni livello si ha un cambiamento di forma (disgiuntiva o congiuntiva).<br/>
[[File:Funzione booleana.png|right]]<br/>
::''Esempio: consideriamo la funzione
 
:::::<math>Y=(X\bar Z+\bar X Z)(X+T)+(X\ Z\ T)</math>
 
Si hanno 4 livelli e 7 porte:
 
La nozione di livello è molto importante dal punto di vista tecnico, essendo il numero dei livelli pari al numeto massimo di porte attraversate successivamente da un segnale fornisce una stima del tempo di propagazione del segnale.<br/>
Notiamo infine che non tutti i segnali devono necessariamente percorrere lo stesso numero di livelli. In una tecnica sincrona è necessario per tenerne conto compensare le differenze con opportuni ritardi.<br/>
Ogni forma booleana elementare richiede, per essere realizzata, almeno due livelli di operatori elementari.
 
 
:1.1.5 ''Circuiti combinatori e circuiti sequenziali''
 
[[File:Circuiti logici equivalenti.png|right]]<br/>
[[File:Circuiti logici equivalenti (3) e (4).png|right]]
 
Un circuito di commutazione è un circuito i cui segnali seguono una logica a due valori, come nel caso booleano. Distinguiamo due tipi di circuiti: combinatori e sequenziali.<br/>
Un circuito combinatorio è un circuito tale che ad ogni insieme di stati d'ingresso completamente specificato fa corrispondere un ben determinato insieme di stati d'uscita. Ad uno stesso insieme di stati in uscita possono corrispondere più insiemi di stati in ingresso.<br/>
Ad esempio, i circuiti in figura (1), (2), (3) e (4):
<math>\bar A B C+\bar A \bar B C+A B \bar C=A B \bar C+\bar A C=(A/B/\bar C)/(\bar A/C)=(\bar A\downarrow\bar C)\downarrow (A\downarrow C)\downarrow (A\downarrow \bar B)</math>
 
Un circuito sequenziale è un circuito per il quale delle variabili interne, associate ad elementi di memoria, intervengono nella funzione di uscita. L'insieme degli stati di uscita è quindi una funzione non solo delle variabilidi ingresso, ma anche degli stati precedenti.
 
 
:1,2 ''Circuiti di memoria''<br/>
::1.2.1 ''Introduzione del tempo nelle funzioni booleane''<br/>
La nozione del tempo è indissociabile dalla formulazione delle funzioni in dipendenza dalla evoluzione temporale delle operazioni.<br/>
Notiamo che l'algebra di Boole non permette di introdurre il tempo come variabile indipendente nella formulazione delle funzioni.<br/>
Ciò costituisce un inconveniente soprattutto nello studio dei circuiti sequenziali; per lo più si cerca di ricondurre lo schema di un circuito sequenziale a quello di un circuito combinatorio in cui gli insiemi di stato delle variabili sono legati da un ordine logico dipendente dal tempo.<br/>
Per lo studio dei circuiti digitali si opera una discretizzazione del tempo in intervalli (regolari o non). L'insieme di questi intervalli costituisce la sequenza temporale fondamentale:
 
:::::<math>\tau=\begin{Bmatrix}...t_{-3}, t_{-2}, t_{-1}, t_0, t_1, t_2, t_3,... \end{Bmatrix}</math>
 
::<math>t_0\qquad\qquad e'\ l'istante\ attuale</math><br/>
::<math>...t_{-3}, tg_{-2}, t_{-1}\qquad\qquad sono\ gli\ istanti\ precedenti</math><br/>
::<math>t_1, t_2, t_3...\qquad\qquad sono\ gli\ istanti\ successivi</math>
 
::1.2.2 <br/>
* ''Ritardo''
Come prima conseguenza dell'introduzione del tempo, bisogna determinare dei circuiti atti a restituire una informazione in un intervallo di tempo diverso da quello della sua formazione.<br/>
Un primo procedimento di spostamento nel tempo di una informazione consiste nel fare percorrere al segnale rappresentativo, un elemento di ritardo tale che il segnale risultante sia sempre rappresentativo della stessa informazione:
 
 
Esprimiamo la funzione di ritardo tramite un operatore '''Δ''' che agisce sulla sequenza temporale:
 
[[File:Operatore 'delta' ritardante.png|right]]
(essendo '''X''' il ritardo scritto in numero di periodi '''Θ''' della sequenza temporale) si ha:
 
::::<math>Y_{n+x}=\Delta_x (A_n)=A_n</math>
 
L'operatore '''Δ''' è commutativo e associativo.
 
* ''Funzioni sequenziali elementari''.<br/>
Combinando l'operatore '''Δ''' con una generica operazione booleana si realizza una funzione sequenziale elementare, cioè una funzione booleana in cui il tempo interviene come variabile indipendente.<br/>
[[File:Funzione sequenziale elementare.png|left]][[File:Tabella della verità di una funzione sequenziale elementare.png|right]]
Ad esempio:
 
:::::<math>Y_0=\Delta_x (A_{-x} \cdot B_{-x})</math>
 
 
 
:1.2.3
::* ''Circuiti chiusi (o ad anello)''<br/>
La combinazione dell'operatore '''Δ''' e di operatori booleani conducono alla realizzazione di particolari funzioni sequenziali, in cui una delle variabili di ingresso è la funzione di uscita. La realizzazione pratica consiste in un circuito comprendente un percorso chiuso o anello, in cui una connessione riporta fra gli ingressi un valore di uscita (feed-back).
 
Esempio 1:
[[File:Crcuito chiusi o ad anello.png|left]][[File:Tabella funzione sequenziale a cirfcuito chiuso.png|right]]
 
:::::<math>Y_0=\Delta_1 (A_1+Y_1)</math>
:::::<math>(\tau=1\cdot \delta)</math><br/>
Questo circuito funziona da memoria.
 
 
Esmpio 2:<br/>
 
 
 
 
Questo circuiti fornisce risposta affermativa in funzione della diparitàdella sequenza binaria A.
 
 
:1.2.4<br/>
::* ''Memorie elementari''<br/>
[[File:Operatore memoria elementare.png|right]]
 
Un secondo procedimento (cfr. il ritardo) di spostamento nel tempo di una informazione booleana consiste nel registrarne opportunamente il valore conservandolo in memoria.<br/>
Nel caso delle informazioni binarie elementari, questa funzione è svolta da un operatore logico '''<math>\Gamma</math>''' detto memoria elementare.<br/>
:::::<math>\Gamma (S, R)=Z</math><br/>
I due segnali esterni , '''S''' ed '''R''', impongono all'uscita '''Z''' i valori:<br/>
:::::<math>S=1\qquad\qquad Z=1\qquad\qquad \bar Z=0</math>
:::::<math>R=1\qquad\qquad Z=0\qquad\qquad \bar Z=1</math><br/>
Questo elemento di memoria registra il valore di un segnale '''S''' e conserva un segnale rappresentativo di tale valore finché un segnale '''R''' non lo riporta a zero.<br/>
L'operatore <math>\Gamma (S,R)</math> quindi è suscettibile di:<br/>
# ricevere un segnale
# conservare il segnale ricevuto
# essere azzerato<br/>
Si suddividono i circuiti di memoria in due categorie in funzione delle strutture tecniche richieste:<br/>
:a) memorie elementari statiche: la cui realizzazione tecnica più usuale è il '''Flip-Flop''' (ved,§ 1.3.3).<br/>
:b) memorie dinamiche elementari: sono basate sulla presenza o assenza di circolazione di un impulso in un circuito di ritardo. Quindi, al contrario per esempio della linea di ritardo costituita da elementi bipolari, una memoria dinamica necessita di un circuito chiuso o ad anello.<br/>
::''[[w:Flip-flop|Flip-Flop S-R]]''<br/>
Dal punto di vista funzionale il '''F/F S-R''' presenta due ingressi detti '''S''' (Set) ed '''R''' (Reset), e due uscite complementari '''Z''' e '''<math>\bar Z</math>'''. Il funzionamento è il seguente:<br/>
* un segnale su '''S''' mette o lascia il '''F/F''' nello stato '''1''' (iscrizione dell'1)
* un segnale su '''R''' mette o lascia il '''F/F''' nello stato '''0''' (iscrizione dell'0)
* un segnale nullo lascia invariato il '''F/F'''
* la combinazione '''11''' in ingresso è proibita<br/>
Lo stato interno della memoria è accessibile mediante l'esame della combinazione <math>Z \bar Z</math> di uscita fra le due possibili (01 e 10). Si può introdurre anche una variabile di stato interno '''Q''' e si hanno le due possibili scelte:<br/>
::;:;:<math>Q=Z\qquad\qquad oppure \qquad\qquad Q=\bar Z</math>
Assumendo '''Q=Z''' il funzionamento di un '''F/F S-R''' è rappresentato nella tabella seguente:<br/>
[[File:Flip-Flop S-R.png|center]]<br/>
Risulta:<br/>
:<math>Z_{n+1}=\bar Z_nS_n\bar R_n+Z_n\bar S_n\bar R_n+Z_nS_n\bar R_n=(S_n+Z_n)\bar R_n</math><br/>
Se inoltre la combinazione logica '''S_nR_n=1''' (corrispondente alla combinazione 3 e 7 della tabella) è resa materialmente impossibile si può fare uso dei termini eliminati <math>\bar Z_nS_n R_n\ e\ Z_n S_n R_n</math> per minimizzare ulteriormente
l'espressione, ottenedo:<br/>
::::::<math>Z_{n+1}=S_n + Z_n \bar R_n</math>
 
::''[[w:Flip-flop|Flip-Flop J-K]]''<br/>
File:Excerpt from functional table for FLIP-FLOP JK..png|right]]
Si comporta come un '''F/F S-R''' con '''J''' ingresso di '''set'''. E' però ammessa la combinazione '''11''' in ingresso e l'effetto è quello di far cambiare lo stato interno cioè:
 
:::::::::::::::immagine<br/>
Risulta quindi:<br/>
::<math>Z_{n+1}=\bar Z_n S_n\bar R_n+Z_n\bar S_n\bar R_n+Z_nS_n\bar R_n+\bar Z_n S_n R_n=\bar Z_nS_n+Z_n\bar R_n</math>
 
 
 
::''[[w:Flip-flop|Flip-Flop T]]''<br/>
[[File:Operatore memoria elementare per Flip Flop T.png|left]][[File:Tavola della verità per Flip-Flop tipo T.png|right]]
 
 
E' un '''Flip-Flop''' ad un solo ingresso '''T''' e tale da cambiare stato ad ogni segnale in ingresso.
 
'''Z<sub>n+1</sub>=T<sub>n</sub>⊕Z<sub>n</sub>'''
 
 
 
 
 
:1.2.5<br/>
::''Memorie elementari dinamiche'''<br/>
* ''Flip-Flop dinamico di tipo '''S-R'''.<br/>
Consideriamo il circuito in figura . I segnali d'ingresso arrivano in '''S''' e in '''R''', l'ingresso '''H''' è quello dell'orologio: il segnale applicate consiste in una successione regolare di impulsi. In uscita della porta '''OR''' si trova un ritardo '''δ''' pari al periodo dell'orologio.<br/>
[[ File:Memoria dinamica-Flip-Flop S-R.png|right]]
 
 
In tal modo il circuito funzione come un '''Flip-Flop''' a due stati caratterizzati dalla presenza o dall'assenza di una ricircolazione di un impulso nel percorso chiuso '''abcda'''.<br/>
Consideriamo per esempio uno stato iniziale caratterizzato dall'assenza di impulso in '''abcda'''.<br/>
Un impulso su '''S''' in sincronismo con '''H''' ricircola con periodo '''δ''' finchè non arriva un impulso in '''R'''(con cui si blocca il rientro dell'impulso) e questo sia che si applichi o no degli impulsi in '''S'''. Viceversa, se si applica un impulso su '''R''' in sincronismo con '''H''', l'impulso circolante che si trova in '''a''' non può rientrare nell'anello e la ricircolazione è interrotta. Si è così ritornati allo stato iniziale. Questo è il funzionamento del '''F/F''' di tipo '''S-R''' descritto prima, a parte il fatto che è permessa la combinazione di ingresso '''S=1''', '''R=1''' per '''Z<sub>n</sub>=0''', 1 con '''Z<sub>n+1</sub>=1'''. Ciò permette di urilizzare la seconda espressione minimizzata trovata per il '''F/F S-R''' e, aggiungendo la variabile '''H<sub>n</sub>''' rappresentativa dell'orologio si verifica che il circuito formisce la:<br/>
:::::<math>z_{n+1}=H_n(S_n+Z_n\bar R_n)</math>
 
* ''Flip-Flop dinamico tipo T''<br/>
[[File:Memoria dinamica-Flip-Flop T.png|right]]<br/>
Con la medesima convenzione fatta per il Flip-Flop SR si ha, per il circuito a lato,
 
:::::<math>Z_{n+1}=H_n(T_n\oplus Z_n)</math><br/>
 
[[File:Esempio sequenza di ingresso e di uscita per un Flip-Flop.png|right]]
 
che realizza un Flip-Flop di tipo T. L'uscita '''Z''', quando si applica un impulso in '''T''', vale '''1''' ogni due impulsi, realizza quindi un divisore per due:
 
sequenza d'ingresso e di uscita per un Flip-Flop di tipo T con stato interno inizialmente nullo.
 
 
* ''Circuito dinamico di ritardo''
[[File:Ritardo di sequenza.png|right]]<br/>
[[File:Circuito di ritardo dinamico.png|right]]<br/>
Il circuito in figura fornisce in uscita una sequenza uguale a quella in ingresso , ma ritardata di un periodo di orologio.
 
Un impulso 1 in ingresso pone in 1 il Flip-Flop: l'impulso in uscita viene ritardato di un periodo e passa, in sincronia con l'impulso di orologio, per la porta di ''AND''. L'uscita è l'impulso ritardato. Questo impulso di uscita viene rinviato tramite una porta di ''AND'' all'ingresso ''R'' solo se il nuovo impulso è zero. Se invece il nuovo impulso fosse stati ''1'' l'iumpulso si reset sarebbe stato inibito dalla relativa porta di ''AND''. Si può verificare che il circuito, con ''<math>R_n=\bar S_n Z_n</math>'', fornisce la:
 
::::<math>Z_{n+1}=H_n (\bar Z_n S_n+Z_n S_n)=H_n S_n</math>
 
'''1.3 Aspetti tecnologici'''<br/>
* ''1.3.1 Tecniche a semiconduttori''<br/>
La comparsa sul mercato di singoli componenti semi-conduttori ha rivoluzionato la tencia dei circuiti elettronici.<br/>
I semi conduttori sono conosciuti da tempo (primi rivelatori radio), ma solo dopo il 1950 la loro realizzazione industriale ha ottenuto i requisiti necessari per poter sostituire i tubi a vuoto.<br/>
Un semiconduttore ''intrinseco'' cioè allo stato puro è un conduttore cattivo in una vasta zona di temperatura. L'introduzione di impurità modifica profondamente le proprietà di conducibilità elettrica: sin hanno allora i semi-conduttori estrinseci. A seconda della natura della impurità il materiale semi-conduttore si comporta come donatore o come accettore di elettroni. Nel primo caso si dice di tipo '''N''' (negativo) e la conducibilità avviene per trasporto di elettroni, nel secondo caso si dice di tipo '''P''' (positivo) e la conducibilità viene descritta in termini di '''buche''' o ''lacune positive''<br/>
Uno dei semi-conduttori più usati è il [[w:smiconduttore|cristallo di germanio]] (Ge). I cristalli semi conduttori sono ottenuti, a partire dal cristallo puro, per introduzione di impurità: antimonio (Sb), bismuto (Bi) o arsenico (As) per il tipo '''N'''; alluminio (Al), boro (B), rame (Cu) per il tipo '''P'''. Oltre il germanio sono in uso anche il selenio ed il silicio.
 
 
* ''[[w:diodo a giuunzione|Diodi a giunzione]]''<br/>
Sono realizzati dal contatto di cristalli di tipo '''P''' e '''N''': si forma una barriera di potenziale che contrasta il passaggio della corrente elettrica in una delle due direzioni.<br/>
[[File:Grafico i funzione di V.png|right]]
La curva caratteristica ''i'' in funzione della tensione ''V''' ai capi è riportata nel grafico a latere.<br/>
Da quanto accennato sui diodi a proposito dei tubi a vuoto e dei semi-conduttori si può astrarre il comportamento del diodo ideale: elemento unidirezionale capace di far scorrere in un solo senso una corrente comunque elevata con resistenza interna ''R<sub>i</sub>'' e differenza di tensione ai capi nulla; mentre presenta infinita resistenza interna al passaggio di corrente nel senso opposto. Il comportamento dipende dal segno della differenza di potenziale applicata ([[w:Giunsione N|polarizzazione diretta ed inversa rispettivamente]]).<br/>
[[File:Comportamento di un diodo ideale.png|right]]
 
 
::::::::Sulla destra grafico del compotamento di un diodo ideale
 
 
 
* ''Porte a diodi''<br>
[[File:Porta a diodi.png|right]]<br>
La figura di fianco rappresenta una porta a diodi e resistori. Schematizzando i diodi come ideali si vede che se una o entrambe le tensioni di ingresso sono negative (-), inferiori
alla tensione '''+''', l'uscita avrà tensione '''-''', viceversa se entrambi gli ingressi hanno tensione '''+''' l'uscita avrà tensione '''+'''. Nel primo caso si ha passaggio di corrente e nel secondo no. Con i diodi reali si avrà valore non nullo della resistenza nel primo caso e valore finito nel secondo.<br/>
Analogamente dalla figura qui affiancata segue la costruzione della funzione ''F2''.
[[File:Porta a diodi funzione F2.png|right]]
 
 
In logica positiva (conf.par,1.1.3)il circuito attinente la funzione '''F1''' realizza una porta '''AND''', mentre quello attinente la funzione '''F2'''realizza una porta '''OR'''<br/>
Con la convenzione logica negativa i due circuiti realizzano le funzioni duali e cioè '''OR''' e '''AND'''' rispettivamente.<br/>
L'inconveniente maggiore nell'uso del semi-conduttori risiede nelle condizioni di funzionamento. Nonostante i continui miglioramenti è sempre necessario, con precauzioni di condizionamento di aria, di refrigerazione ... mantenere il funzionamento in un ristretto intervallo di temperatura
 
 
* ''1.3.2 Transistori''<br/>
[[File:Comportamento ideale di un transistor.png|right]]<br/>
Notiamo che le porte '''AND''' e '''OR''' non sono sufficienti poe la realizzazione di una funzione booleana; da un punto di vista logico è necessario aggiungere un circuito atto a realizzare la complementazione.<br/>
Questo tipo di circuito non si può ottenere con i componenti visti sinora, che erano tutti di tipo passivo. Infatti la complementazione di un segnale può richiedere che il segnale passi da un livello basso ad uno alto, cioè debba essere amplificato, e questo può essere ottenuto solo con componenti attivi. I componenti attivi sono necessari anche per la rigenerazione di un segnale che, a causa dell'attenuazione, rischi di essere inferiore del suo livello rappresentativo.<br/>
[[File:Transistor NPN.png|right]]<br/>
Fra gli elementi attivi facciamo cenno ai transistori. Il transistor a giunzione comprende due giunzioni che separano tre regioni semi-.conduttrici di cui le estreme dello stesso tipo e quella intermedia di tipo opposto. Si hanno quindi le due forme possibili '''PNP''' e '''NPN'''.<br/>
Una delle due estremità , l'emettitore, molto ricco di impurità, può emettere un gran numero di cariche che sono più o meno raccolte dall'altra estremità, il collettore, formato di cristalli meno ricchi di impurità.
[[File:Comportamento ideale di un transistor.png |right]]<br/<>
Il flusso di cariche è regolato dallo stato della regione intermedia, la base. Poiché devono rappresentare gli stati '''0''' e '''1''' in modo che risultino distinguibili senza ambiguità, i transistori vengono fatti lavorare esclusivamente nelle due opposte condizioni di ''interidzione'' e ''saturazione''<br/>
Schematizziamo il comportamento ideale di un transistor: mandando alla base una corrente nulla, è nulla la corrente di collettore; il transistor si comporta come un contatto aperto (interdizione) e la tensione di collettore è uguale a quella di alimentazione, non essendo il resistore '''R''' percorso da corrente. Inversamente mandando alla basse una debole corrente il transistor si comporta come un corto circuito (saturazione), la tensione di collettore va a zero e quindi ai capi del resistore '''R''' si ha una differenza di potenziale pari alla tensione di alimentazione.<br/>
Il comportamento reale di un transistore è rappresentato dalle seguenti caratteristiche:
[[File:Caratteristica operativa di un transistore.png |center]]
Quindi con una debole corrente di base (dell'ordine delle decine di '''μA''') si regola una corrente di collettore da valori molto bassi a valori dell'ordine di grandezza dei '''mA''';
e quindi, essendo la corrente di collettore maggiore di quella necessaria per controllarla, si parla di '''guadagno di corrente'''.<br/>
Corrispondentemente si ha, in interdizione, una differenza di tensione '''(ΔV)<sub>int</sub>''' non nulla ai capi del transistor e la tensione del collettore non è quella di alimentazione bensì quella di alimentazione diminuita di '''(ΔV)<sub>int</sub>''': '''(V<sub>CE</sub>)<sub>int</sub>=V<sub>A</sub>-(ΔV)<sub>int</sub>''' essendo '''V<sub>A</sub>''' la tensione di alimentazione.<br/>
Nel caso di saturazione si ha ai capi del transistor una differenza di tensione non più pari alla tensione di alimentazione, ma leggermente inferiore, per cui la tensione di collettore assume un valore non nullo ''(V<sub>CE</sub>)=V<sub>A</sub>-(ΔV)<sub>sat</sub>''.<br/>
I valori ''(V<sub>CE</sub>)<sub>sat</sub>'' e ''(V<sub>CE</sub>)<sub>int</sub>'' sono tali da essere considerati rappresentativi dei valori logici ''0'' e ''1'' in logica positiva.
 
* Invertitore a transistor.
[[File:Segnali invertiti e tabella della verità.png |right]]
Per quanto detto il transistor tipo '''PNC''' nel circuito aggregato realizza una funzione '''NOT'': infatti lavorando nelle opposte zone di saturazione ed interdizione è tale da fornire per un imput in '''B''' come nel circuito l'outpt riportato in '''C''', al limite per un transistor ideale con la tabella della verità in cui '''x''' è il valore di imput ed '''F(x)''' quello di output.
* Circuiti '''NAND''' e '''NOR''' a transistor.<br/>
[[File:Cifrcuiti NAND e NOR.png|right]]<br/>
[[File:Tabella della verità NAND e NOR.png|right]]<br/>
[[File:Simboli dei circuiti NAND e NOR.png|right]]
L'interesse dei circuiti che realizzano gli operatori '''NAND''' e '''NOR''' consiste nel fatto che detti operatori costituiscono , singolarmente, degli insiemi funzionalmente completi (cfr. Parte 1<sup>a</sup>, Cap.VII<sup>°</sup>).<br/>
In linea di principio gli elementi visti fin qui sono sufficienti per formare un circuito '''NAND''' o '''NOR'''. Infatti è sufficiente un circuito formato da una porta a diodi (paragrafo 1.3.2), e da un invertitore a transistor. Il circuito così formato appartiene alla famiglia dei '''D-T-L''' (Diodo-Transistor-Logic).<br/>
I circuiti affiancati fanno parte della famiglia '''D-C-T-L''' (Direct-Coupled-Transistor-Logic) e realizzano le funzioni '''NAND''' e '''NOR'''tramite l'uso dei transistor in luogo dei diodi.<br/>
Consideriamo il circuito '''NAND''': solo se entrambi i transistor conducono ci sarà una caduta di tensione ai capi del resistore ed il potenziale in '''G<sub>1</sub>''' sarà basso. Invece considerando il circuito '''NOR''' risulta che è sufficiente che uno solo dei due transistor conduca perchè il potenziale di '''G<sub>2</sub>''' sia basso. Ne segue la tabella della verità mostrata.<br/>
Analogamente a quanto detto a proposito delle porte a diodi la funzione '''G<sub>1</sub>''' e '''G<sub>2</sub>''' in logica positiva realizzano le funzioni '''NAND''' e '''NOR''' rispettivamente, mentre in logica negativa realizzano le funzioni duali '''NOR''' e '''NAND''' rispettivamente.<br/>
In simboli i circuiti '''NAND''' e '''NOR''' oltre che come indicato al paragrafo 1.1.4 possono anche essere indicati con i simboli del codice DIN qui raffigurati.
 
* ''Flip-Flop''<br/>
Quanto visto finora è sufficiente per comprendere la struttura di un '''Flip-Flop''', il
cui funzionamento logico si é visto al paragrafo 1.2.4.<br/>
Limitiamoci a considerare il caso in cui la combinazione '''S<sub>n</sub>=R<sub>n</sub>=1''' è proibita , riscriviamo la funzione di uscita '''Z<sub>n+1</sub>''' ed il suo complemento '''<math>\bar Z_{n+1}</math>''' in funzione degli ingressi '''S<sub>n</sub>''' e '''R<sub>n</sub>''' tramite l'operatore '''NOR''':
[[File:Flip-Flop logic circuit..png|right]]<br/>
::<math>Z_{n+1}=(S_n+Z_n)\cdot \bar R_n=\overline {(S_n+R_n)}\downarrow R_n=(S_n\downarrow Z_n)\downarrow R_n</math><br/>
ed inoltre, considerando che in questo caso si ha <math>S_n\bar R_n=S_n</math> si ha anche:<br/>
[[File:Simplified circuit diagram of Flip-Flop S-R.png|right]]<br/>
<math>\bar R_{Z+1}=\overline{(S_n+Z_n)\cdot \R_n}=\overline {S_n+Z_n\cdot \bar R_n}=\overline {S_n+(\bar Z_n\downarrow R_n)}=S_n\downarrow (\bar Z_n\downarrow R_n)</math><br/>
Queste due funzioni sono realizzate col circuito logico evidenziato a lato.<br/>
E' ora sufficiente considerare due circuiti '''NOR''', e connettere simmetricamente l'uscita di uno dei due circuiti ad uno dei due ingressi dell'altro per ottenere uno schema semplificato di Flip-Flop.(vedasi figura)<br/>
Pertanto, quando la coppia di transistor di ingresso '''S''' e '''Z''' conduce (caso di saturazione) il potenziale del comune collettore (segnale '''<math>\bar Z</math>''') mantiene a livello basso quello di una delle basi dell'altra coppia di transistor che, per quanto detto, si trova in condizione di interdizione.<br/>
Vi sono pertanto due stati di equilibrio stabile, caratterizzati dal fatto che una delle due coppie di transistor è in saturazione e l'altra in interdizione.<br/>
Quando il circuito si trova in uno dei due stati, identificabili tramite le funzioni di uscita '''<math>Z</math>''' e '''<math>\bar Z</math>''', vi rimane indefinitamente, realizzando cioè la funzione di memoria. Tramite segnali di comando esternisi ottiene che il circuito commuti all'altro dei due possibili stati; questi segnali ('''S''' e '''R''') vengono mandatia una delle basidi una coppia di transistor. Il passaggiodi un Flip-Flop dallo stato '''0''' allo stat '''1''' si dice '''setting''', quello dallo stato '''1''' allo stato '''0''' di '''resettig'''. Il comando che provoca la commutazione può essere o un livello di tensione (comando in continua) o impulso di tensione (comando in alternata).
 
===Circuiti di un calcolatore digitale (a)===
:2.1 ''Addizionatore e sottrattre binario''<br/>
Siano le variabili '''x<sub>i</sub>''', '''y<sub>i</sub>''', '''r<sub>i</sub>''', '''s<sub>i</sub>''' e '''r<sub>{i+1} </sub>''' definite nel cap.2 Parte I<sup>a</sup>, a proposito della somma e della sottrazione di due numeri binari.<br/>
Facendo la convenzione di rappresentate '''l'i''' aritmetico mediante l''''!''' della logica booleana, lo '''0''' aritmetico mediante lo '''0''' booleano, ed utilizzando gli stessi simboli di variabile per i due tipi di grandezza , si possono estrarre dalle tavole del Cap.2 Parte I le tavole della verità che definiscono , per un singolo rango la somma e la sottrazione.
 
[[File:Truth Table of Half Adder.png|right]]<br/>
:2.1.1 Semiaddizionatore (half-adder)<br/>
Questo circuito è un blocco fondamentale costituito da 3 porte di '''AND''' ed una porta di '''OR'''. Il suo funzionamento viene stasabilito mediante la adiacente tavola della verità<br/>
[[File:Half-Adder logic diagram.png|right]]
E' da notare che questo circuito presenta due output separati: uno per la somma e l'altro per il riporto.<br/>
Le due funzioni booleane descritte dalla tavola sono:
 
::::<math>S_i=Y_i \bar X_i+X_i \bar Y_i=X_i \oplus Y_i</math>
:::::<math>r_{i+1}=X_i\cdot Y_i</math><br/>
Il diagramma logico di un semi addizionatore sarà quindi quello evidenziato a lato<br/>
Il circuito che genera la funzione '''S<sub>i</sub>''' viene anche impigato come porta di '''⊕''' (or esclusivo)
 
[[File:Full Adder Truth Table (2).png|right]]<br/>
:2.1.2 ''Addizionatore elementare (Full Adder)''<br/>
Il processo della somma binaria consiste in questo caso nella addizione contemporanea delle due variabili '''X<sub>i</sub>''' e '''Y<sub>i</sub>''' edel riporto '''r<sub>i</sub>''' ottenuto durante la somma parziale precedente . La tabella della verità relativa '''S<sub>i</sub>''' e '''r<sub>i+1</sub>''' sarà quindi quella qui adiacente:
 
* ''Equazione booleana di un addizionatore''
 
::Forma canonica:<br/>
::::<math>S_i=\bar X_i\bar Y_i r_i+\bar X_i Y_i \bar r_i+X_i \bar Y_i \bar r_i \bar r_i+X_i Y_i r_i</math>
 
::Altre espressioni:<br/>
Per '''S<sub>i</sub>''', si può scrivere:<br/>
::::<math>S_i=(\bar X_i \bar Y_i+X_i Y_i)r_i+(\bar X_i Y_i+X_i \bar Y_i)r_i</math><br/>
:::::<math>=\overline {(X_i\oplus Y_i)}+(X_i\oplus Y_i)\bar r_i</math><br/>
:::::<math>=(X_i\oplus Y_i)\oplus r_i</math><br/>
:::::<math>=X_i\oplus Y_i\oplus r_i</math><br/>
La funzione '''r<sub>i+1</sub>''' essere semplificata:<br/>
::::<math>r_{i+1}=\bar X_i Y_i r_i+X_i \bar Y_i r_i+X_i Y_i \bar r_i+x_i Y_i r_i+X_i Y_i r_i+X_i Y_i r_i</math><br/>
:::::<math>=(\bar X_i+X_i)Y_i r_i+(\bar Y_i+ Y_i)X_i r_i+(r_i +\bar r_i)X_i Y_i</math><br/>
:::::=<math>=X_i Y_i+Y_i r_i+r_i X_i</math><br/>
:::::<math>=X_i Y_i\oplus Y_i r_i\oplus r_i X_i</math><br/>
Per comodità , possiamo scrivere ulteriormente:<br/>
::::<math>S_i=(X_i\oplus Y_i)\oplus r_i</math><br/>
::::<math>r_{i+1}=X_i Y_i(r_i +\bar r_i)+r_i(X_i \bar Y_i+\bar X_i Y_i)</math><br/>
:::::<math>=X_i Y_i+r_i(X_i\oplus Y_i)</math>
 
Quindi '''S<sub>i</sub>''' e '''r<sub>i+1</sub>''' possono essere ottenuti mediante due reti: la prima sarà '''<math>X_i\oplus Y_i</math>''' e '''<math>X_i Y_i</math>''', la seconda '''<Math>(X_i\oplus Y_i)\oplus r_i</math>''' e '''<math>(X_i\oplus Y_i) r_i</math>'''.<br/>
[[File:Full Adder with 3 inputs.png|right]]
 
 
Ciascuna di queste reti è un semiaddizionatore.<br/>
Connettendole come da figura ed utilizzando una porta supplementare '''OR''' per formare '''<math>r_{i+1}</math>''', si ottiene un addizionatore elementare a tre ingressi '''<math>X_i, Y_i, r_i</math>'''.
 
Mediante altre trasformazioni algebriche, si possono ovviamente ottenere altri schemi.<br/>
Per esmpio, considerando le espressioni:
 
::::<math>S_i=\bar X_i \bar Y_i r_i+\bar X_i Y_i \bar r_i+X_i \bar Y_i \bar r_i+X_i Y_i r_i</math><br/>
::::<math>r_{r+1}=X_i Y_i+X_i r_i+X_i r_i</math>
 
[[File:Full Adler with 3 entries.png|right]]<br/>
 
si avrà il seguente schema:
 
L'addizionatore elementare che realizza le funzioni '''S<sub>i</sub>''' e '''r<sub>i+1</sub>''', può essere utilizzato sia in un addizionatore in serie che in un addizionatore in parallelo.
 
[[File:Addizionatore in serie.png|right]]<br/>
:2.1.3 ''Addizionatore in serie-Addizionatore in parallelo''<br/>
Nell'addizionatore in serie le cifre degli operandi '''X''' e '''Y''' (X<sub>i</sub>,Y<sub>i</sub>) si presentano negli istanti successivi '''i'''.<br/>
Una memoria '''M''' (per esempio una linea di ritardo con ritardo di un bit) conserva il riporto '''r<sub>i+1</sub>''', elaborato all'istante '''i''', fino all'istante '''i+1''' (vedi figura)<br/>
 
[[File:Parallel Adder Logic Diagram (2).png|right]]
 
Nell'addizionatore in parallelo, le cifre '''X<sub>i</sub>''' e '''Y<sub>i</sub>''' '''(i=0,...,n)''' degli operandi '''X''' e '''Y''' si presentano in entrata in parallelo (simultaneamente<br/>
Con '''n+1''' cifre, il circuito possiede '''2(n+1)''' ingressi '''(X<sub>i</sub>,Y<sub>i</sub>)''' e '''n+1''' uscite.<br/>
Nella versione più classica (forma iterativa) esso possiede '''n+1''' blocchi o '''stadi''': uno stadio di rango '''0''' che è un semiaddizionatore ed '''n''' stadi costituiti da addizionatori elementari del tipo descritto in (2.1.2) (rango i>0).<br/>
Il riporto elaborato al rango '''i''' (r<sub>i+1</sub>) costituisce uno degli ingressi dello stadio '''i+1'''.<br/>
Nella figura posta accanto '''n=3'''.<br/>
Si noterà che la lunghezza massima che i segnali devono attraversare è di '''n+1''' stadi , ossia di '''2(n+1)''' livelli se i blocchi sono appunto a 2 livelli.<br/>
Per certe condizioni (X=2<sup>n+1</sup>-1, Y=1 per es.) la lunghezza di propagazione del riporto è effettivamente uguale a questo valore..<br/>
Un addizionatore in parallelo completa l'addizione in un tempo che è determinato dal tempo di arrivo di un digit più il tempo di propagazione dell'eventuale riporto, mentre un addizionatore seriale richiede '''n''' intervalli di tempo (digit times). Quindi l'addizionatore parallelo ha il vantaggio di essere veloce, mentre quello seriale ha il vantaggio di avere meno circuiti.
 
[[File:Tabella della verità per la sottrazione binaria.png|right]]
 
:2.1.4 ''Sottrazione binaria''<br/>
Mediante la tabella della verità affiancata si può definire il funzionamento di un blocco chiamato '''semi-sottrattore (half-subtractor)''' binario.Si fa l'ipotesi che il minuend0 '''X'''e il sottraendo '''Y'''siano positivi e tali che '''X≥Y'''.<br/>
Le equazioni booleane che definiscono la differenza e la ritenuta in una sottrazione binaria sono dunque:
 
::::<math>d_i=\bar X_i Y_i+X_i \bar Y_I=X_i \oplus Y_i</math><br/>
 
::::<math>r_{i+1}=\bar X_i Y_i</math>
 
[[File:Half Subtractor.png|right]]
 
[[File:TrueTable for Full Subtractor.png|right]]
 
Solo la seconda equazione differisce da quella ottenuta per l'addizione: essa si può dedurre da quella del par.2.1.1 sostituendo '''<math>X_i</math>''' con '''<math>\bar X_i</math>'''.<br/>
Un semisottrattore genera la differenza '''d''' e la ritenuta '''r<sub>i+1</sub>''' mediante il minuendo '''X<sub>i</sub>''' e il sottraendo '''Y<sub>i</sub>'''.<br/>
 
 
Volendo invece ottenere la differenza '''d<sub>i</sub>'''e la ritenuta '''r<sub>i+1</sub>''' considerando il sottraendo '''X<sub>i</sub>''', il minuendo '''Y<sub>i</sub>''' e la ritenuta '''r<sub>i</sub>''' del passo precedente, si ottiene la tabella della verità annessa al fianco.<br/>
 
Le equazioni booleane corrispondenti sono:
 
 
 
::::<math>d_i=\bar X_i \bar Y_i r_i+\bar X_i y_i \bar r_i+X_i \bar Y_i \bar r_i+X_i Y_i r_i=X_i\oplus Y_i\oplus r_i</math>
 
::::<math>r_{i+1}=\bar X_i \bar Y_i r_i+\bar X_i Y_i \bar r_i+\bar X_i Y_i r_i+X_i Y_i r_i=\bar X_i Y_i+r_i(\bar X_i\oplus Y_i)</math><br/>
 
 
 
Uno dei possibili modi di realizzare un sottrattore elementare completo consiste nel considerare due semisottrattori.
 
[[File:Full Subtractor logic diagram.png|center]]
 
Il semi-sottrattore ed il sottrattore completo possono essere utilizzati per costruire sottrattori in serie e in parallelo, sempre con l'ipotesi xhe '''X''' e '''Y''' siano senza segno e con '''X≥Y'''.<br/>
In seguito vedremo la realizzazione della sottrazione mediante l'uso dei complementi ad 1 e a 2. Infatti un circuito costruito per sommare numeri rappresentati con segno e modulo è molto più completodi quello che utilizza una rappresentazione complementata di numeri negativi.<br/>
 
 
:2.2 ''Circuito di complementazione (ad 1)''<br/>
Sia il numero '''X=X<sub>n-1</sub> X<sub>n-2</sub>...X<sub>0</sub>''', il suo complemento ad 1 è il numero '''<math>C_1 (X)</math>''' che ha per rappresentazione '''<math>\bar X</math>''':
 
::::<math>C_1 (X)=\bar X=\bar X_{n-1} \bar X_{n-2}...\bar X_k...\bar X_1 \bar X_0</math>
 
Si suppone '''X''' intero:
 
:::::<math>Es.\qquad X=0 1 0 1 1 0</math>
 
::::::<math>C_1(X)=1 0 1 0 0 1</math>
 
::<math>Si\ ha\qquad X+C_1(X)=X+\bar X=2^n -1</math>
 
Infatti, se si costruisce la somma , cifra dopo cifra, si ha:
 
:::::<math>\begin{cases}S_k=X_k\oplus\bar X_k\oplus r_k=r_k\oplus 1=\bar r_k\\r_{k+1}=X_k\bar X_k+r_k(X_k\oplus \bar X_k)=r_k\end{cases}</math>
 
da cui, essendo '''r<sub>0</sub>=0''',
 
:<math>\begin{cases}S_k=1\\r_h=0\end{cases}\qquad\qquad per\ ogni\ k\ (k=0,...,n-1) </math>
 
:::::<math>S=\begin{matrix}\overbrace{1 1 1...1 1}^{n\ cifre}\end{matrix}=2^n - 1</math>
 
Un cirfcuito complementatore (ad 1) converte un numero binario avuto in input in un output che ne è il complemento ad 1.<br/>
Un complementatore può essere costruito in modo da ricevere un input seriale oppure uno in parallelo.<br/>
[[File:Complementatori seriale e in parallelo.png|right]]
 
In figura sono mostrati due complementatori che forniscono in output il valore <math>P\oplus x</math>, essendo '''P''' il valore di un opportuno segnale di controllo: si ottiene il '''complemento ad 1''' quando '''P=1''', infatti:
 
::::::<math>\bar X=X\oplus 1</math>
 
se la variabile di controllo è '''P=0''' in output si ha la stessa variabile di ingresso '''X'''.<br/>
La figura a sinistra delle due mostra un complementatore seriale nel cui '''input''' X compare una sequenza binaria rappresentante un numero binario.<br/>
Questo circuito può essere usato come complementatore parallelo: è necessario allora avere un numero di circuiti pari al numero di bit del numero binario.<br/>
L'altra figura rappresenta un complementatore in parallelo: i due output del Flip-Flop '''X''' costituiscono i due inputs. Ovviamente ci devono essere tanti di questi circuiti quanti sono i bits del numero binario.<br/>
Questo circuito a sua volta può essere utilizzato come complementatore seriale: sarà allora richiesto un solo circuito e lo stato del Flip-Flop cambierà ad ogni digit time generando così una sequenza binaria rappresentante il nujmero binario.
 
:2.3-''circuito di complentazione a 2''<br/>
Sia il numero binario '''X''' si chiama complemento vero o complemento a 2, la quantità <math>C_2(X)=2^n - X</math>.<br/>
Si ha dunque:<br/>
:::::<math>C_2(X)=C_1(X)+1</math><br/>
::: <math>con \qquad\qquad X=(X_{n-1} X_{n-2}...X_k...X_1 X_0)</math><br/>
::::::: <math>C_1(X)=(\bar X_{n-1}...\bar X_k...\bar X_0)</math><br/>
Aggiungendo '''1''' a '''C<sub>1</sub>(X) si ottiene:<br/>
:::::<math>C_2(X)=(Y_n-1 Y_n-2...X_k...Y_0)=Y</math><br/>
Ricordando come si esprimono in algebra booleana le somme e i riporti di una addizione della aritmetica booleana, si ha:<br/>
:::::<math>Y_0=\bar X_0\oplus 1\qquad\qquad\qquad</math><br/>
:::::<math>Y_1=\bar X_1\oplus r_1=\bar X_1\oplus \bar X_0\qquad\qquad r_2=\bar X_\ \bar X_0</math><br/>
:::::<math>X_2=\bar X_2\oplus r_2=\bar X_2\oplus \bar X_1\bar X_0\qquad\qquad r_3=\bar X_2 \bar X_1 \bar X_0</math><br/>
:::::::::.<br/>
:::::::::.<br/>
:::::<math>Y_k=\bar X_k\oplus \prod_{i=0}^{i=k-1} \bar X_i=X_k\oplus 1\oplus \prod_{i=0}^{i=k-1}\bar X_i=</math><br/>
:::::<math>X_k\oplus \overline {(\prod_{i=0}^{i=k-1} \bar X_i)}=X_k\oplus \sum_ {i=0}^{i=k-1}X_i</math><br/>
Ponendo:<br/>
:::::<math>Z_k=\sum_{i=0}^{i=k-1}X_i</math><br/>
si ottengono le seguenti equazioni di un circuito complementare a 2 seriale:
 
[[File:Complementatore a 2 di tipo seriale.png|right]]
 
 
:::::<math>\begin{cases}Y_k=X_k\oplus Z_k\\Z_{k+1}=Z_k+X_k\end{cases}</math>
 
Tenendo presente l'equazione booleana di un Fip-Flop SR, si può pensare di realizzare l'equazione <math>Z_{k+1}=Z_k+X_k</math> mediante un '''SR''' con l'ingresso '''R''' sempre mantenuto a '''0''' e con lo stato interno iniziale '''Z<sub>0</sub>=0'''.<br/>
Nella figura è descritto un complementatore a 2 di tipo seriale per numeri binari senza segno.
 
[[File:Complementatore a 2 seriale per numeri binari con segno.png|right]]
 
Nella seguente figura è descritto invece un complementatore seriale a 2 per numeri binari con segno: la sua caratteristica è determinata dal fatto che se il numero è negativo (bit del segno uguale ad 1), esso esce in output complementato a 2, se l'input invece è positivo , il numero uscirà nella forma vera.<br/>
Si fa l'assunzione che il bit del segno arrivi come primo bit nella sequenza di input: gli seguiranno i bits delle cifre significative in ordine di peso crescente.<br/>
Quando il bit del segno, arriva in input , esso passa attraverso la '''via a''' e compare invariato in output.<br/>
Nel frattempo un segnale di controllo del segno selezione la '''via c'''.<br/>
Se il bit del segno è '''0''' (numero positivo), il Flip-Flop '''S''' rimane nello stato '''0''' e i bit successivi del numero passano attraverso la '''via a''' ed appaiono in output.<br/>
Se il bit del segno è '''1''' (numero negativo), il Flipo-Flop '''S''' viene messo nello '''stato 1'''. La '''via a''' viene interdetta e la '''via b''' viene permessa.<br/>
I bits successivi del numero passeranno allora per la '''via b''' e verranno complementati nella maniera descritta per numeri senza segno.<br/>
Osservando la figura del diagramma logico del complementate a 2 di tipo seriale si verifica la regola pratica per ottenere il complemento a 2 (detto anche complemento vero) di un numero binario. Essa consiste nel lasciare inalterati tutti gli zeri prima del primo '''1''' incontrato nel risalire la parola '''X''' partendo dai pesi più deboli e procedendo verso quelli più forti, nel lasciare inalterato questo '''1''', e nel complementare tutte le cifre a sinistra di questo '''1'''.<br/>
:::<math>Esempio\ \ \ \ X=0110100</math><br/>
::::::<math> C_2(X)=1001100</math><br/>
Se consideriamo il circuito dell'accennata figura notiamo che il Flip-Flop interviene in due porte di AND: in una i bits di '''X''' entrano in forma negata e nell'altra no.<br/>
Ora, consideriamo un input seriale a partire dai pesi più deboli, i bit '''0''' non cambiano lo stato iniziale del Flip-Flop la cui uscita Z=0 interdcde la pota AND relativa negata dei bits di X, e questo fino all'arrivo del primo bit 1, dopo il quale lo stato del Flip-Flop cambia; si ha la situazione inversa della precedente , in cui l'uscita <math>\bar Z=0</math> interdisce la porta AND relativa ai bits di X.<br/>
Si ha inoltre:<br/>
:::::<math>X+C_2(X)=2^n=0\ mod\ 2^n</math><br/>
Si vede quindi che, facendo le operazioni modulo 2<sup>n</sup>, si ottengono gli stessi risultati sia operando con '''X-Y''' che con '''X+C<sub>2</sub>(Y).<br/>
Quanto affermato sopra, è già stato dimostrato con l'ausilio del calcolo dei residui nel Cap.2 parte I.<br/>
Dimostriamo ora la veridicità mediante l'algebra di Boole.
Poniamo:<br/>
:::::<math>C_2(Y)=Y'=(Y'_{n-1}Y'_{n-2}...Y'_0)</math><br/>
Le operazioni '''X-Y''' e '''X+C<sub>2</sub>(Y)=X+Y'''' sono definite in forma ricorrente dalle equazioni:<br/>
:::::<math>(X-Y)\ \ \ \begin{cases}S_k=X_k\oplus Y_k\oplus r_k\\r_{k+1}=\bar X_kY_k\oplus Y_kr_k\oplus \bar X_kr_k\end{cases}</math>
 
:::::<math>(X+Y')\ \ \ \begin{cases}S'_k=X_k\oplus Y'_k\oplus r'_k\\r_{k+1}=X_kY'_k\oplus Y'_kr'_k\oplus X_kr'_k\end{cases}</math><br/>
Supponiamo che al rango '''k''' si abbia '''S'<sub>k</sub>=S<sub>k</sub>''':<br/>Si ha allora:<br/>
:::::<math>X_k\oplus Y_k\oplus r_k=X_k\oplus [Y_k\oplus (\sum_{i=0}^{i=k-1}Y_i)]\oplus r'_k</math><br/>
cioè<br/>
:::::<math>r'_k=r_k\oplus (\sum_{i=0}^{i=k-1}Y_i)</math><br/>
Si deduce immediatamente:<br/>
:::<math>r'_{k+1}=X_k[Y_k\oplus (\sum_{i=0}^{k-1}Y_i)]\oplus [Y_k\oplus (\sum_{i=0}^{k-1}Y_i)]\cdot [r_k\oplus (\sum_{i=0}^{k-1}Y_i)]\oplus X_k[r_k\oplus (\sum_{i=0}^{k-1}Y_i)]=</math><br/>
:::<math>X_k Y_k\oplus Y_k r_k\oplus X_k r_k\oplus (\sum_{i=0}^{k-1}Y_i)(Y_k\oplus r_k\oplus 1)</math><br/>
da cui<br/>
:::<math>r'_{k+1}=r_{k+1}\oplus Y_k \oplus (\sum_{i=0}^{k-1}Y_i)(Y_k\oplus r_k \oplus 1=</math><br/>
:::<math>r_{k+1}[Y_k \oplus Y_k (\sum_{i=0}^{k-1}Y_i)\oplus (\sum_{i=0}^{k-1}Y_i]\oplus r_k(\coprod_{i=0}^{k-1}\bar Y_i)=</math><br/>
:::<math>r_{k+1}\oplus (\sum _{i=0}^{i=k}Y_i)\oplus r_k (\coprod_{i=0}^{k-1}\bar Y_i)</math><br/>
Consideriamo l'ultimo termine: si ha:<br/>
:::<math>r_k(\coprod_{i=0}^{k-1}\bar Y_i)=(\bar x_{k-1}Y_{k-1}\oplus Y_{k-1}r_{k-1}\oplus \bar x_{k-1}r_{k-1})(\coprod _{i=0}^{k-1} \bar Y_i)=</math><br/>
:::<math>\bar X_{k-1}\bar Y_{k-1}r_{k-1}(\coprod_{i=0}^{k-2}\bar Y_i)</math><br/>
e quindi iterando il procedimento, si ha:<br/>
:::<math>r_k(\coprod _{i=0}^{k-1}\bar Y_i)=(\coprod_{i=0}^{k-1} \bar X_i \bar Y_i) r_0=0\ \ \ \ in\ quanto\ r_0=0</math><br/>
Da cui:<br/>
:::<math>r'_{k+1}=r_{k+1}\oplus (\sum_{i=0}^{i=k}Yi)</math><br/>
di conseguenza<br/>
:::::<math>S'_{k+1}=S_{k+1}</math><br/>
E quindi se '''S'<sub>k</sub>=''' '''S<sub>k</sub>''' si ha '''S'<sub>k+1</sub>=S<sub>k+1</sub>'''<br/>
Poiché '''S'<sub>0</sub>=S<sub>0</sub>=(X<sub>0</sub>⊕Y<sub>0</sub>)''', la relazione di uguaglianza sussiste per ogni rango K: S'<sub>k</sub>=S<sub>k</sub>.<br/>
[[File:Complementatore a 2 in parallelo.png|right]]
Per quanto riguarda un complementatore a 2 parallelo, esso consiste in '''n''' complementatori ad 1, in un addizionatore parallelo ad '''n''' bit e in un Flip-Flop '''C'''. Con '''n''' si è indicato il numero dei bit che compongono il numero binario. Il bit del segno passa inalterato nel circuito. Per ottenere il complemento a 2 del numero, se ne trova prima il complemento ad 1 e quindi si somma 1 al bit meno significativo '''[C<sub>2</sub>(X)=C<sub>1</sub>(X)+1]'''<br/>
L'addizioned di '''1''' al bit meno significativo la si ottiene ponendo inizialmente il '''Flip-Flop C''' ello stato '''1'''1; in tal modo questa operazione consiste nell'addizionare due addendi di cui uno nullo, ma con un riporto iniziale di '''1''', e quindi sostanzialmente ogni adder dell'addizionatore parallelo lavora com un '''half-adder'''.<br/>
 
:2.4-''Controlli di parità''<br/>
Si chiama '''Bit di Parità''', una cifra binaria che si aggiunge talvolta ad una parola binaria in modo da scoprire eventuali errori di trasmissione.<br/>
Data una parola '''X''' ad '''n''' posizioni:<br/>
:::::<math>X=X_n X_{n-1}....X_1</math><br/>
Si usa trasmettere la parola ad '''n+1''' posizioni :<br/>
:::::<math>X'=X_n X_{n-1}....X_1 P</math><br/>
dove '''P''' è tale che il numero totale degli '''1''' della parola '''X'''' sia pari.<br/>
Esempio:<br/>
::::::<math>\begin{cases}X=1 1 0 1 0 1 1 0\\X'=1 1 0 1 0 1 1 0 1\end{cases}</math><br/>
::::::<math>\begin{cases}X=1 0 0 1 0 1 1 0\\X'=1 0 0 1 0 1 1 0 0\end{cases}</math><br/>
Si piò fare un'altra convenzione e definire un bit di disparità, tale che il numero totale degli 1 sia dispari.<br/>
Con questa nuova convenzione , non vi può essere un numero '''X'''' formato da zeri.<br/>
Questa combinazione risulta essere proibita, e la sua presenza può servire a mettere in evidenza certi difetti di funzionamento (come per esempio un difetto di alimentazione).<br/>
Si ha la corrispondenza:<br/>
:::::<math>\begin{cases}P=1\ \ \ \ \sum_{i=1}^n X_i \ \ \ e'\ dispari \\P=0\ \ \ \ \sum_{i=1}^n X_i \ \ \ e'\ pari\end{cases}</math><br/>
e quindi:<br>
::::::<math>P=|\sum_{i=n}^n X_i|_2</math><br/>
dove '''P''' e '''X<sub>i</sub>''' sono variabili aritmetiche. Con la convenzione già usata, considerando '''P''' e '''X<sub>i</sub>''' variabili booleane, si ha:<br/>
:::::<math>P=X_i\oplus X_2\oplus....\oplus X_i\oplus....\oplus X_n=\oplus \sum_{i=1}^n X_i</math><br/>
Il bit di parità indica gli errori di trasmissione su di un numero dispari di posizioni.<br/>
Come circuito di controllo, si può pensare un Flip-Flop di tipo '''T''' dove lo stato interno '''Q<sub>0</sub>''' iniziale è posto a zero.<br/>
:::::<math>P=Q_0\oplus\sum_{i=1}^n x_i</math><br/>
:-''Addizione di 2 numeri con bit di parità''<br/>
Consideriamo 2 numeri binari '''X''' e '''Y''' ad '''n''' cifre:<br/>
::::<math>\begin{cases}X=x_{n-1} x_{n-2}...x_0 \ \ \ P_0\\Y=y_{n-1} y_{n-2}...y_0\ \ \ P_y\end{cases}</math><br/>
alle '''n''' cifre siano stati aggiunti i bit di parità '''P<sub>x</sub>''' e '''P<sub>y</sub>''':<br/>
::::<math>\begin{cases}P_x=\oplus \sum_{k=0}^{k=n-1} x_k\\P_y=\oplus \sum_{k=0}^{k=n-1} y_k\end{cases}</math><br/>
chiamiamo '''P<sub>s</sub>''' la cifra di parità '''x+y'''.<br/>
Calcoliamo l'espressione di '''P<sub>s</sub>''' mediante le equazioni che danno la somma '''s<sub>k</sub>''' e il riporto '''r<sub>k+1</sub>''' di rango '''K''' in funzione di '''x<sub>k</sub>, y<sub>k</sub>, r<sub>k</sub>'''.<br/>
Poniamo:<br/>
:::::<math>S=s_{n-1} s_{n-2}....s_0</math><br/>
(Supponiamo quindi che '''S''' sia anch'essa di '''n''' cifre).<br/>
Si ha allora:<br/>
:::::<math>P_s=s_{n-1}\oplus s_{n-2}\oplus....\oplus s_0=\oplus \sum_{k=0}^{n-1}s_k</math><br/>
:::::<math>=\oplus \sum_{k=0}^{n-1} (x_k\oplus y_k \oplus r_k)</math><br/>
:::::<math>=(\oplus \sum_{k=0}^{n-1} x_k)\oplus (\oplus \sum _{k=0}^{n-1} y_k)\oplus (\oplus \sum _{k=0}^{n-1}r_k)</math><br/>
:::::<math>=P_x\oplus P_y\oplus (\oplus \sum_{k=0}^{n-1} r_k) \ \ \ \ \ \ \ \ \ (1.7.1)</math><br/>
La cifra di parità '''P<sub>s</sub>''' di '''S=X+Y''' è quindi la somma modulo 2 delle cifre dparità '''P<sub>x</sub>''' e '''P<sub>y</sub>'''di '''X''' e '''Y''' e dei riporti '''r<sub>k</sub> (k=0, ..., n-1).<br/>
 
:''Nota''-Quando la cifra '''P<sub>s</sub>'' calcolatamediane la somma effettivamente ottenuta e la cifra '''P<sub>s</sub>''' calcolata mediante la (1.7.1) sono differenti, vi è errore. Poiché tutte le operazioni aritmetiche in un calcolatore sono effettuate, in ultima analisi, mediante addizioni , il procedimento sopra esposto può essere, in teoria, esteso come verifica di una qualunque operazione aritmetica.<br/>
 
:''2.5-Circuito per il confronto di 2 numeri binari''.<br/>
Il problema che ci si propone di risolvere è quello di effettuare una operazione di confronto tra due numeri binari ad n bit in modo da determinare quale dei due ha valore maggiore in modulo.<br/>
In un primo tempo costruiremo un comparatore seriale nel cui input arrivano i bits da confrontare secondo la sequenza determinata dal crescere del rango. Sia dunque la parola binaria:<br/>
:::::<math>X=x_{n-1}x_{n-2}....x_k.....x_1x_0</math><br/>
chiameremo con '''X(k)''' la parola tronca formata dalle '''k+1''' cifre di peso più debole (ranghi da 0 a k).
 
[[File:Variabile binaria.png|right]]<br/>
[[File:Tabella riassuntiva delle diffrenze.png|right]]
:::::<math>X(k)=x_k x_{k-1} ....x_0</math><br/>
Consideramo quindi due numeri '''X''' e '''Y''' e la variabile binaria definita dalla corrispondenza
 
Da queste condizioni segue che:<br/>
::::::::::::<math>Se \ \ \ \ \ \ x_k=y_k</math><br/>
::::::::::::<math>Allora \ \ \ S_k=S_{k-1}</math>
 
d'altra parte, se '''x<sub>k</sub>≠y<sub>k</sub>''', la diseguaglianza tra '''x<sub>k</sub>''' e '''y<sub>k</sub>''' da una parte, '''x(k)''' '''y(k)''' sono definite nello stesso verso.
 
quanto detto può, può essere riassunto dalla tabella seguente.<br/>
Si ha dunque:<br/>
:::<math>S_k=\bar S_{k-1} x_k \bar y_k+S_{k-1}\bar x_k\bar y_k+S_{k-1}x_k\bar y_k+S_{k-1}x_k y_k=</math><br/>
:::<math>(x_k\bar y_k+x_k y_k S_{k-1})+(\bar x_k \bar y_k S_{k-1}+x_k \bar y_k)=</math><br/>
:::<math>x_k \bar y_k+x_k S_{k-1}+x_k \bar y_k+\bar y_k S_{k-1}=x_k \bar y_k+x_k S_{k-1}+\bar y_k S_{k-1}</math>
 
Si riconosce per '''S<sub>k</sub>''' l'espressione della ritenuta ottenuta durante l'operazione '''Y-X'''.
 
:::<math>S_k=\bar S_{k-1} x_k \bar y_k+S_{k-1}\bar x_k\bar y_k+S_{k-1}x_k\bar y_k+S_{k-1}x_k y_k=</math><br/>
Si vede quindi che '''S<sub>n-1</sub>=1''' quando l'operazione '''Y-X''' produce una ritenuta al rango '''n-1''', situazione che si deve verificare quando '''x>y'''. Per confrontare i due numeri però non è necessaqrio determinare la differenza : infatti è sufficiente il valore '''S<sub>n-1</sub>''' della ultima ritenuta di questa differenza. Per costruire il circuito, conviene però mettere la equazione.
 
:::<math>S_k=\bar S_{k-1} x_k \bar y_k+S_{k-1}\bar x_k\bar y_k+S_{k-1}x_k\bar y_k+S_{k-1}x_k y_k</math><br/>
 
sotto la forma seguente:
 
:::<math>S_k=\bar S_{k-1} x_k \bar y_k\oplus S_{k-1}\bar x_k\bar y_k\oplus S_{k-1}x_k\bar y_k\oplus S_{k-1}x_k y_k=</math><br/>
:::<math>\bar S_{k-1} x_k \bar y_k\oplus S_{k-1}\bar x_k(y_k\oplus 1)\oplus S_{k-1}x_k(y_k\oplus 1)\oplus S_{k-1}x_ky_k=</math><br/>
:::<math>\bar S_{k-1}x_k\bar y:k\oplus S_{k-1}\bar x_ky:k\oplus S_{k-1}=</math><br/>
:::<math>(\bar S_{k-1}x_k\bar y_k\oplus S_{k-1}\bar x_ky_k)\oplus S_{k-1}=</math><br/>
:::<math>(\bar S_{k-1}x_k\bar y_k + S_{k-1}\bar x_ky_k)\oplus S_{k-1}</math><br/>
[[File:Circuito per il confronto di due numeri binari..png|right]]
 
 
 
Per realizzare questo circuito, è sufficiente considerare un '''Flip-Flop''' di tipo '''T''' in cui '''S<sub>k-1</sub>''' rappresenta lo stato interno ed il resto dell'espressione costituisce l'ingresso del '''Flip-Flop''' mentre l'uscita determina la funzione di confronto tra i due numeri '''X''' e '''Y'''.<br/>
L'operazione realizzata da l circuito ha termine ovviamente quando in input si sono presentati tutti gli '''n''' bits di ''X''' e '''Y'''.<br/>
[[File:Tabella di un comparatore seriale.png|right]]
Supponiamo invece che i bits di '''X''' e '''Y''' si presentino nell'ordine determinato dai pesi decrescenti: il circuito in questo caso sarà molto più semplice in quanto non ci sarà bisogno di utilizzare un circuito sequenziale.<br/>
La tabella di un comparatore seriale in cui l'input sia costituito da bits di peso decrescente sarà come quella affiancata.<br/>
[[File:Comparatore sertiale a peso decrescente.png|right]]
 
 
 
Da tale tabella si deduce il circuito a latere
 
Appena '''x_k≠y_k''' si arrestano i confronti.
 
 
:''Comparatore parallelo<br/>
Un comparatore parallelo sarà costituito da '''n''' circuiti comparatori in cui gli '''n''' bitsdi '''X''' e '''Y''' verranno confrontati separatamente e contemporaneamente.<br/>
La prima coppia di bits '''x<sub>i</sub>''' e '''y<sub>i</sub>''' (i=n-1,n-2,...,0) che differisce , determina l'uscita finale del comparatore, a prescindere dal valore di '''x<sub>i-1</sub>''', '''y<sub>i-1</sub>''',...ecc.<br/>
Nel seguito viene costruito un circuito comparatore in parallelo di 2 numeri di 2 bit: un circuito relativo a parole a '''n''' bits, avrà l'uscita uguale a quello di figura 2.5.2 e 2 circuiti '''NAND''' in più per ogni coppia di bit addizionale.<br/>
Siano quindi da confrontare i due numeri; '''X=x<sub>1</sub> x<sub>0</sub>''' e '''Y=y<sub>1</sub> y<sub>0</sub>'''.<br/>
La tabella della verità relativa al problema del confronto in parallelo sarà:
 
:<math>1) x > y\quad S_1=\bar x_1 x_0 \bar y_1 \bar y_0+x_1 \bar x_0 \bar y_1 \bar y_o+x_1 \bar x_0 \bar y_1 y_0+x_1 x_0 \bar y_1 \bar y_0+x_1 x_0 y_1 \bar y_1 y_0+x_1 x_0 y_1 \bar y_0</math>
[[File:Diagramma di Karnaugh di X maggiore di Y.png|right]]<br/>
 
Semplificando la funzione mediante un diagramma di Karnaugh si ha:
 
:::<math> S_1=x_1 \bar y_1+x_0 \bar y_1 \bar y_0+\bar y_0 x_1 x_0=</math><br>
::::<math>\overline {\overline {x_1\bar y_1+x_0\bar y_0(x_1+\bar y_1)}}=</math><br/>
 
::::<math>\overline {\overline {x_1\bar y_1}\cdot \overline {x_0\bar y_0 \overline {\overline {(x_1+\bar y_1 )}}}}=</math>
 
::::<math>\overline {\overline {x_1 \bar y_1}\cdot \overline {x_0 \bar y_0(\overline {\bar x_1\cdot y_1})}}</math>
 
 
 
:<math>2)-x+y\quad S_2=\bar x_1\bar x_0\bar y_1y_0+\bar x_1\bar x_0 y_1\bar y_0+\bar x_1 \bar x_0 y_1 y_0+\bar x_1x_0 y_1\bar u_0+\bar x_1 x_0y_1y_0+x_1\bar x_0y_1y_0</math>
 
[[File:Diagramma di Karnaugh per X minore di Y.png|right]]
 
Semplificando la funzioine mediante un diagramma di Karnaugh si ha:
 
:::<math>S_2=\bar x_1y_1+\bar x_0y_1y_0+\bar x_1\bar x_0y_0=</math>
 
::::<math>\overline {\overline {\bar x_1y_1+y_0\bar x_0(y_1+\bar x_1)}}=</math>
 
::::<math>\overline {\overline {\bar x_1y_1}\cdot \overline {y_0\bar x_0 \overline {\overline {(y_1+\bar x_1)}}}}= </math>
 
::::<math>\overline {\overline {\bar x_1y_1}\cdot \overline {y_0\bar x_0 \overline {(\bar y_1\cdot x_1)}}} </math>
 
[[File:Comparatore parallelo a 2 numeri.png|right]]
 
 
 
 
:<math>3)-\quad X=Y</math><br/>
Dalla tabella della verità si deduce che:
 
::::<math>S_3=\overline {S_1+S_2}</math>
 
Utilizzando alloa delle porte di '''NAND (/)''' si costruirà il circuito a latere
 
 
:<math>2.6\quad Convertitore\ codice\ binaio\ puro-binario\ riflesso\ e\ viceversa</math>.<br/>
Sia il numero binario '''X''' e siano le sue due rappresentazioni binarie:
 
::::::<math>in\ binaro\ puro\ X\ sia\qquad B=(B_n B_{n-1}....B_0)</math><br/>
::::::<math>in\ binario\ riflesso\ X\ sia\qquad R=R_n R_{}...R_0).</math>
 
Le formule di conversione (Cap.3 parte I) sono:
 
:::::<math>(R\longrightarrow B):\qquad \oplus B_p= \sum_{j=p}^{j=n}R_j</math><br/>
:::::<math>(B\longrightarrow R):\qquad R_p=B_p\oplus B_{p+1}\ ;\ R_n=B_n</math>
 
Le conversioni si fanno più facilmente dalle cifre di peso più forte.<br/>
In queste condizioni, poniamo, per la conversione binario riflesso-binario puro:
 
::::::<math>\begin{cases}Z_p=B_{n-p}\\Q_p=B{n-p-1}\ \ \ \ \ (p\ge 1), Q_B=0\\E_p=R_{n-p}\end{cases}</math><br/>
Si ha:<br/>
::::::<math>\begin{cases}Q_p=Q_p\oplus E_p\\Z_p=Q_p\oplus E_p\end{cases}</math>
 
[[File:Convertitore codice riflesso -binario puro.png|right]]
 
Mediante le equazioni trovate possiamo dedure lo schema del circuito che realizza la conversione da un codice riflesso ad uno binario puro: per avere la uscita '''Z<sub>p</sub>''' è sufficiente una porta di '''XOR''' mentre per l'uscita '''Q<sub>p+1</sub>''' è necessario utilizzare un '''Flip-Flop T'''
 
Per la conversione binario puro-binario riflesso, si pone:
 
:::::<math>\begin{cases}Q_k=B_{n-k+1}\\E_k=B_{n-k}\\Z_k=R_{n-k}\end{cases}</math><br/>
[[File:Convertitore binario puro-binario iflesso.png|right]]<br/>
 
si ha quindi<br/>
:::::<math>\begin{cases}Q_{k+1}=E_k\\Z_k=Q_k\oplus E_k\qquad\qquad \ con\ Q_0=0\end{cases}</math>
 
Da cui il circuito nella figura accanto:<br/>
 
 
''<math>2.7\ -\ contatori</math>''<br/>
2.7.1 Si chiama [[w:contatore|contatore]] un circuito capace di prendere nota del numero di impulsi che arrivano in '''input''' e conservare il risultato dell'operazione di conteggio.<br/>
Se un contatore somma ogni qual volta arriva un impulso in input, esso pende il nome di '''forward counter''' o '''up counter'''. Se un contatore assume inizialmente una certa configurazione rappresentante un numero ed ad ogni impulso in input sottrae da questo numero, esso viene chiamato '''reverse counter''' o '''down counter'''.<br/>
Se un contatore è provvisto di due terminali di input in modo da addizionare se gli impulsi arrivano ad uno dei terminali di input e da sottrarre per gli impulsi che arivano all'altro input , esso viene chiamato '''reversible counter''' o '''up-down counter'''.<br/>
I contatori vengono classificati anche in base alla maniera di memorizzare il numero del conteggio.<br/>
Se il numero memorizzato è un numero binario, in codice binario puro il contatore è un contatore binario.<br/>
Se il numero memorizzato è un numero decimale è un contatore decimale.<br/>
Se il digit decimale viene rappresentato mediante un codice binario il contatore è un ''' binay-codet decimal digit counter'''.<br/>
Vi sono inoltre contatori capaci di esprimere il conteggio in altri codici binari (p.es.codice Gray). Pe ottenere le equazioni booleane di un contatore binario puro si può pocedee in due modi.
 
 
2.7.2 ''Primo modo per la determinazione booleana di un contatore binario.<br/>
::::''<math> Incremento\ in\ codice\ binario\ puro.</math>''<Br/>
[[File:Addizione.png|right]]
Il passaggio da un numero '''X''' al numero '''X+1''' può essere rappresentato mediante certe relazioni booleane che legano la rappresentazione dei numeri '''X''' e '''X+1'''. Consideriamo infatti l'addizione:<br/>
Si ha:<br/>
:::::<math>x_0^'=x_0\oplus 1=\bar x_0\ \ \ \ \ \ \ \ \ \ \ \ r_1=x_0\cdot 1</math><br/>
:::::<math>x_1^'=x_1\oplus r_1=x_1\oplus x_0\ \ \ \ \ r_2=x_1x_0</math><br/>
:::::<math>x_2^'=x_2\oplus r_2=x_2\oplus x_1x_0\ \ r_3=x_2x_1x_0</math><br/>
:::::<math>- - - - - - - - - - - \ \ - - - - - </math><br/>
:::::<math>x_k^'=x_k\oplus r_k=x_k\oplus \coprod_{i=0}^{i=k-1} x_i\ ;\ r_{k+1}=\coprod_{i=0}^{i=k} x_i</math><br/>
:::::<math>\begin{cases}x_k^'=x_k\oplus\coprod_{i=0}^{i=k-1}x_i\\r_{k+1}=\coprod_{i=0}^{i=k}x_i\end{cases}</math><br/>
Le relazioni che rappresentano il numero '''x+1''' in funzione di '''x''' sono:<br/>
:::::<math>\begin{cases}x_k^'=x_k\oplus\coprod_{i=0}^{i=k-1}x_i\\r_{k+1}=\coprod_{i=0}^{i=k}x_i\end{cases}\ \ \ \ (2.7.2)</math><br/>
 
::::''<math> Decremento\ in\ codice\ binario\ puro.</math><br/>
Si ha:<br/>
Le relazioni che danno la rappresentazione del numero '''X-1''' in funzione di quella di '''X''' possono essere ottenute con il seguente procedimento: [[File:Decremento in codice binario puro.png|right]]<br/>
:::::<math>x_0^{''}=x_0\oplus 1=\bar x_0\ \ \ \ \ \ \ \ \ \ \ \ r_1=\bar x_0</math><br/>
:::::<math>x_1^{''}=x_1\oplus r_1=x_1\oplus \bar x_0\ \ \ \ \ r_2=\bar x_1 r_1=\bar x_1\bar x_0</math><br/>
:::::<math>x_2^{''}=x_2\oplus r_2=x_2\oplus {\bar x_1\bar x_0}\ \ r_3=\bar x_2 r_2=\bar x_2\bar x_1</math><br/>
:::::<math>- - - - - - - - - - - \ \ - - - - - </math><br/>
:::::<math>x_k^{''}=x_k\oplus r_k=x_k\oplus \coprod_{i=0}^{i=k-1} \bar x_i\ ;\ r_{k+1}=\coprod_{i=0}^{i=k} \bar x_i</math><br/>
:::::<math>\begin{cases}x_k{''}=x_k\oplus\coprod_{i=0}^{i=k-1}\bar x_i\\r_{k+1}=\coprod_{i=0}^{i=k}\bar x_i\end{cases}\ \ \ \ \ (2.7.3)</math><br/>
 
Le rrelazioni (2.7.2) rappresentano il meccanismo di un '''u-counter''' e le (2.7.3) quelle di un '''down-counter), entrambi un codice binario puro. Si noterà che si passa dall'incremento al decremento complementando le variabili che compaiono nella ritenuta.<br/>
Complementando ambo i membri della relazione (2.7.3) si ottiene:
 
:::::::::<math>\bar x_k^{''}=\bar x_k\oplus \coprod_{i=0}^{k-1}\bar x_i</math><br/>
che insieme alla:<br/>
::::::::::<math>r_{k+1}=\coprod_{i=0}^k \bar x_i</math>
dà la relazione di incremento per i numeri corrispondenti alle parole binarie complementate. Infatti chiamiamo [[w:valore assluto||A|]] il valore rappresentato dal nome '''A''', si ha:<br/>
::::::<math>|x^'|=|x|+1</math><br/>
::::::<math>|x^{''}=|x|-1</math><br/>
::::::<math>|\bar x^'|=2^n-1-|x^'|=2^n-1-|x|-1=|\bar x|-1</math><br/>
::::::<math>|\bar x^{''}|=2^n-1-|x^{''}|=2^n-1-|x|+1=|\bar x|+1</math><br/>
Se si chiama con '''E''' la variabile d'entrata del circuito, con l'indice '''n''' si indica il tempo dell'orologio '''(n≥0)''', si ottengono le seguenti equazioni:<br/>
 
::<math>\ \ up -counter:\ \ \ \ \ x_k^{n+1}=x_k^n\oplus E^n (\coprod_{i=0}^{k-1}x_i)_n</math><br/>
 
::<math>\ \ down- counter:\ \ x_k^{n+1}=x_k^n\oplus E^n (\coprod_{i=0}^{k-1}\bar x_i)_n</math><br/>
[[File:Contatore a 16 stadi (up-counter).png|right]]<br/>
[[File:Up counter in binario puro.png|right]]
 
Le figure '''A''' e '''B''' rappresentano degli '''up-conter''' a 16 stadi interni quattro stadi binari). L'orologio non viene indicato). <br/>
La generalizzazione al caso di '''m''' stadi (2<sup>m</sup> stadi interni) è immediata.<br/>
Si noterà che per '''m''' elevato non è possibile connettere i '''Flip-Flop''' mediante una logica ad '''1''' livello come in figura '''A''' in quanto per il rango '''k''' è necessari una porta a '''k''' entrate.<br7>
Si possono allora realizzare i prodotti '''π x<sub>i</sub>''' mediante funzioni di funzioni come in figura '''B'''.<br/>
Nella configurazione data, sono sufficienti delle porte '''AND''' a due entrate: risulta essere più lungo però il tempo di propagazione del riporto.<br/>
Per il rango '''k''' ci vuole un tempo '''k''' volte maggiore di quello necessario per il contatore '''A'''.<br/>
 
[[File:Up- down counte.png|right]]
 
Le cifre '''x<sub>k</sub>''' di rango '''k''' ad un certo istante '''n''' sono ovviamente rappresentate dagli stati interni dei '''Flip.Flop T''' di rango corrispondente mentre le uscite complimentate rappresentano le '''<math>\bar x_k</math>.'''<br/>
Le '''x<sub>k</sub>''' fanno parte della rappresentazione di '''x+1''' mentre le '''<math>\bar x_k</math>''' sono la rappresentazione binaria di '''<math>\bar x-1</math>.<br/>
La costruzione di un '''down-counter''' risulta ovvia e la si può vedere facilmente nel grafico sovrastante dove e rappresentato un '''up-down counter'''<br/>
Nello schema sono state aggiunte delle linee di ritardo: esse stanno ad indicare che l'input delle porte di '''AND''' che proviene dai '''Flip-Flop''' è lo stato dei '''Flip-Flop''' prima che essi vengano commutati.<br/>
Se i '''Flip-Flop''' posseggono un loro ritardo sufficiente, questi ritardi aggiuntivi non sono necessari.<br/>
Comde si è appunto supposto nelle figure A e B).<br/>
Il disegno logico di un contatore binario può essere ricavato utilizzando una tavola della verità. La tavola mostra non solo le relazioni tra i successivi stati dei '''Flip-Flop''' ma anche gli stati di imput dei '''Flip-Flop''' che causano una commutazione di questi Flp-Flop. Consideriamo un up-counter binario a tre stadi e proponiamoci di costruirlo con Flip-Flop di tipo '''T'''.<br/>
[[File:Tvola della verita di un up-counter.png|right]]
 
La tavola della verità di questo contatore è mostrata nella figura '''D'''.<br/>
In questa tavola i tre flip-flop e le loro uscite sono rappresentati con le variabili '''A<sub>3</sub>,A<sub>2</sub>,A<sub>1</sub>''' rappresentano i loro rispettivi '''input'''; '''p''' rappresenta gli impulsi in input da conteggiare; '''t<sub>0</sub>, t<sub>1</sub>..ecc.''' rappresentano la sequenza temporale degli impulsi.<br/>
Le tre colonne relative agli '''A''' mostrano la sequenza desiderata degli stati dei tre flip-flop. Le ultime tre colonne mostrano i valori veri richiesti per gli '''input''' '''a<sub>3t</sub>''', '''a<sub>2t</sub>''', '''a<sub>1t</sub>''', capaci di cambiare lo stato del contatore.<br/>
In queste tte colonne , lo '''0''' significa che non è richiesto alcun impulso nell'input del flipo-flop , mentreun '''1''' significa che è necessario un impulso nell'imput del flip-flop.<br/>
Questi '''0''' e questi '''1''' sono ottenuti dalla commutazione dello stato dei '''Flip-Flop''' indicata nelle tre colonne relative agli '''A'''.<br/>
Per esempio, quando lo stato del contatore viene cambiato da '''000''' a '''001''', gli stati di '''A<sub>3</sub>''' e '''A<sub>2</sub>''' non cambiano, quindi i valori di '''a<sub>3t</sub>''' e '''a<sub>2t</sub>'''sono entrambi '''0''' nella prima riga delle colonne relative a '''a<sub>3t</sub>''' e '''a<sub>2t</sub>'''.<br/>
Però lo stato di '''A<sub>1</sub>''' cambia da '''0''' a '''1'''; quindi il valore di '''a<sub>1t</sub>''' è '''1''' nella prima riga dell'ultima colonna. Gli altri valori delle ultime tre colonne vengono ottenuti nella stessa maniera.<br/>
Da notare che all'istante '''t<sub>8</sub>'''lo stato del contatore è '''000''' lo stesso che all'istante '''t<sub>0</sub>'''<br/>
Il contatore quindi ha un compotamednto ciclico.<br/>
Le equazioni di input per i tre '''Flip-Flop''' dedotte dalla tabella della verità '''D''' sono:
 
:::::::<math>a_{1t}=p</math><br/>
:::::::<math>2_{2t}=A_1\cdot p</math><br/>
:::::::<math>3_{3t}=A_2\cdot A_1\cdot p</math>
 
che possono essere anche scritte come:<br/>
 
:::::::<math>a_{1t}=p</math><br/>
:::::::<math>2_{2t}=A_1\cdot a_{1t}</math><br/>
:::::::<math>3_{3t}=A_2\cdot a_{2t}</math>
 
Quando le equazioni di input vengono sostituite nell'equazione di stato di un '''Flip-Flop T''' '''(Q<sub>n+1</sub>=Q<sub>n</sub> ⊕ E<sub>n</sub>)''' si ottiene:
 
:::::::<math> A_1 (\pi)=A_1 \oplus p</math><br/>
:::::::<math> A_2 (\pi)=A_2 \oplus A_1 p</math><br/>
:::::::<math>A_3(\pi)=A_3\oplus A_2 A_1 p</math>
 
Queste sono le equazioni di stato di un contatore e descrivono lo stato dei tre '''Flip-Flop'''.<br/>
Applicando queste equazioni a quelle precedenti di '''input''' si ottengono i circuiti di fig.'''A''' e '''B'''.<br/>
[[File:Tavola della verità per flip-flop SR.png|right]]<br/>
Al posto di un '''Flip-Flop T''', si può pensare di utilizzare un '''SR''' per costruire un contatore binario. Nella tavola '''E''' compaiono le condizioni necessarie per costruire un '''up-counter''' binario mediante '''Flip-Flop SR'''.<br/>
In questa tabella '''a<sub>3r</sub>''', '''a<sub>2r</sub>''', '''a<sub>1r</sub>''', rappresentano gli input di riset (R) nei tre '''Flip-Flop''' ed '''a<sub>3s</sub>''', '''a<sub>2s</sub>''', '''a<sub>1s</sub>''', i tre set inputs, '''p''' rappresenta gli impulsi di input da conteggiare; '''t<sub>0</sub>''', '''t<sub>1</sub>''', ecc. rappresentano la sequenza temporale degli impulsi di input.<br/>
Gli '''0''' e gli '''1''' delle ultime sei colonne sono anche qui ottenuti mediante i cambiamenti di stato dei '''Flip-Flop''' indicati nelle tre prime colonne. Essi però differiscono da quelli della tabella '''D'''. Nella tabella '''E''' l' '''1''' nella colonna dell' '''input reset''' (colonne sei, otto, dieci) indica il cambiamento di stato del '''Flip-Flop''' da '''1''' a '''0''', mentre lo '''0''' indica tutti gli altri casi (da 0 a0, da 1 a 1, da 0 a 1).<br/>
L'1 nella colonna dell' '''input reset''' (colonne sette, nove, undici) indica il cambiamento dello stato del '''Flip-Flop''' da '''0''' a '''1''' mentre lo '''0''' indica tutti gli altri casi (da 0 a 0, da 1 a 1, da 1 a 0). Per esempio, quando lo stato del contatore cambia da '''000''' a '''001''', gli stati di '''A<sub>3</sub>''' e '''A<sub>2</sub>''' rimangono immutati, per cui i valori di '''a<sub>3r</sub>''', '''a<sub>3s</sub>''', '''a<sub>2r</sub>''', '''a<sub>2s</sub>''' sono '''0''' nella prima riga delle colonne sei, sette, otto e nove.<br/>
Lo stato '''A<sub>1</sub>''' però deve cambiare da '''0''' a '''1''', quindi il valore di '''a<sub>1r</sub>''' è '''0''' mentre il valore di '''a<sub>1s</sub>''' è '''1''' nella prima riga delle due ultime colonne rispettivamente. I valori degli altri input '''set''' e '''reset''' sono ottenuti nella stessa maniera.<br/>
Dalla tabella '''E''' possiamo ottenere le equazioni di input dei tre '''Flip-Flop''':<br/>
::::::<math>a_{1s}=\bar A_1\cdot p</math><br/>
::::::<math>a_{2s}=\bar A_2\cdot A_1\cdot p=\bar A_2\cdot a_{1r}</math><br/>
::::::<math>a_{3s}=\bar A_3\cdot A_2\cdot A_1\cdot p=\bar A_3\cdot a_{2r}\ \ \ \ \ \ 2.7.10</math><br/>
::::::<math>a_{1r}=A_1\cdot p</math><br/>
::::::<math>a_{2r}=A_2\cdot A_1\cdot p=A_2 \cdot a_{1r}</math><br/>
::::::<math>a_{3r}=A_3\cdot A_2\cdot A_1\cdot p=A_3\cdot a_{2r}</math><br/>
 
se si sostituiscono le equazioni di input nella equazione di stato di un '''Flip-Flop SR''' (<math>Q_{n+1}=Q_n \bar R_n + S_n</math>), si ottengono le equazioni '''2.7.8''', cioè le equazioni di stato di un '''up-counter''' binario.<br/>
[[File:Contatore binario con half-adders e flip-flop SR.png|right]]
 
Le equazioni 2.7.10 si possono scrivere in un altro modo.<br/>
Alle prime tre equazioni di 2.7.10 si aggiungono rispettivamente i termini '''<math>A_1\cdot \bar p, A_2\cdot \bar a_{1r}, A_3\cdot \bar a_{2r}</math>'''; queste somme logiche non cambiano il valore delle espressioni di partenza.<br/>
Le sei equazioni diventano allora:<br/>
::::::<math>a_{1s}=A_1\oplus p\ \ \ \ \ \ \ a_{1r}=A_1\cdot p</math><br/>
::::::<math>a_{2s}=A_2\oplus a_{1r}\ \ \ \ \ a_{2r}=A_2\cdot a_{1r}</math><br/>
::::::<math>a_{3s}=A_3\oplus a_{2r}\ \ \ \ \ a_{3r}=A_3\cdot a_{2r}</math><br/>
Si noti che queste sono le equazioni delle somme e del riporto in output di un '''half-adder'''.<br/>
Quindi '''a<sub>1s</sub>''' e '''a<sub>1r</sub>''' sono rispettivamente la somma e il riporto di un '''half-adder''' i cui input sono '''A_1''' e '''p'''.<br/>
In modo equivalente , si ha che '''a<sub>2s</sub>''' e '''a<sub>2r</sub>''' come '''a<sub>3s</sub>''' e '''a<sub>3r</sub>''' sono le uscite di '''half-addeers'''.<br/>
Il contatore binario utlizzante degli '''half-adder''' e dei '''flip-flop SR''', viene mostrat in figura '''F'''.
 
 
:<math>2.8\ Contatori\ decimali.</math><br/>
I contatori decimali sono circuiti che accettano degli impulsi in input, li contano e ogni volta che la somma totale risulti essere '''10''', ritornano allo stato iniziale emettendo sulla linea di uscita un impulso di riporto (dettom carry o overflow).<br/>
Tali contatori di capacità '''10''' vengono chiamati '''decadi'''.<br/>
Interconnettendo '''m''' elementi decimali di conteggio di questo tipo, in modo che l'uscita di un elemento '''J-1''' serva come ingresso all'elemnto '''J''', si può realizzare un contatore di capacità '''10<sup>m</sup>.<br/>
Per codificare i 10 stati interni si usano generalmente codifiche di tipo binario con almeno '''4''' digit binari.<br/>
[[File:Codice 8421.png|right]]<br/>
Si è visto (cap.III°, parte I<sup>a</sup>) che quando la cifra decimale corrispondente deve essere convertita in analogico, può essere utile considerare un codice ponderato. Infatti nel caso di una conversione in tensione sarà sufficiente fare la somma ponderata delle correnti corrispondenti ai 4 digit binari.<br/>
Nella tabella posta accanto compaiono il codice '''8421''' '''(I)''' e quello ad '''eccesso di 3''' '''(II)'''<br/>
Ci proponiamo nel seguito di costruire un contatore relativo al codice '''8421''' e quello relativo al codice '''ad eccesso di tre'''.<br/>
[[File:Rappresentazione contatore decimale in codice 8421.png|right]]<br/>
La configurazione generale di un contatore decimale relativo al codice '''8421''' sarà:<br/>
Il numero rappresentato dallo stato interno dei Flip-Flop '''A<sub>4</sub>, A<sub>3</sub>, A<sub>2</sub> A<sub>1</sub>''', raggiungeà al massimo '''1001''', equivalente al digit decimale '''9'''.<br/>
Appena arriva un nuovo impulso, il contatore assume lo stato '''0000''' (equivalente al digit decimale 0), e produce un riporto che servirà come input per incrementare la seconda decade.<br/>
[[File:Tabella 2.8.2.png|right]]
Queste considerazioni e la conoscenza delle proprietà dei '''Flip-Flop T''' che vogliamo utilizzare per realizzare il circuito , ci permettono di scrivere ls seguente tabella (2.8.2):
 
Possiamo scrivere le equazioni di input '''a<sub>4t</sub>, a<sub>3t</sub>, a<sub>2t</sub>, a<sub>1t</sub>''' direttamente dalla tabella '''2.8.2'''.<br/>
[[File:Diagrammi di Kanaugh per contatore digitale.png|right]]
 
 
 
 
 
Possiamo semplificare le espressioni boolea
ne mediante diagrammi di Karnaugh; in questa semplificazione si può far uso anche degli stati non esistenti '''1010, 1011, 1100, 1101, 1110, 1111 (segnati con crocetta).<br/>
La variabile '''p''' è una variabile d'ingresso ma poiché vale sempre '''1''', è inutile prenderla in considerazione durante la semplificazione.<br/>
Dai digrammi si esplicano:<br/>
::::::<math>a_{1t}=p</math><br/>
::::::<math>a_{2t}=A_1 \bar A_4\cdot p</math><br/>
::::::<math>a_{3t}=A_1 A_2\bar A_4\cdot p</math><br/>
::::::<math>a_{4t}=\bar A_4 A_3 A_2 A_1 \cdot p+A_4 A_1\cdot p </math><br/>
Sostituendo questi valori di input nella equazione di stato di un Flip-Flop si ottengono le equazioni di stato di una decade relativa al codice 8421:<br/>
::::::<math>A_1()=A_1\oplus p</math>
::::::<math>A_2()=A_2\oplus A_1 \bar A_4 p</math>
::::::<math>A_3()=A_3\oplus A_1 A_2 \bar A_4 p</math>
::::::<math>A_4()=A_4 \oplus (\bar A_4 A_3 A_2 A_1 p +A_4 A_1 p)</math>
 
[[File:Decade relativa al codice 8421.png|right]]
 
 
 
 
 
Nella figura viene dato il diagramma logico di una realizzazione di questo circuito.
 
[[File:Tabella relativa a contatore codice accesso tre.png|right]]
 
 
 
 
 
 
Supponiamo ora di voler costruire un contatore per un codice a accesso di tre.<br/>
La tabella della verità relativa viene data in figura 2.8.4<BR/>
Semplificando con Karnaugh si ottengono le equazioni di input seguenti:<br/>
::::::<math>a_{1t}=p</math>
::::::<math>a_{2t}=A_1 p+A_4 A_3 p</math><br/>
::::::<math>A_{3t}=a_1 a_2 P+a_4 a_3 p</math><br/>
::::::<math>a_{4t}=A_1 A_2 A_3 p+A_4 A_3 p</math><br/>
 
[[File:Decade per codici ad eccesso di tre.png|right]]<br/>
Per le semplificazioni si sono considerate anche le combinazioni che non compaiono nel codice ad eccesso di tre.<br/>
Dalle equazioni di input si deduce una possibile realizzazione del circuito (2.8.5): decadi per codici ad eccesso di tre.
 
 
::<math>2.9\ -\ Contatori\ in\ codice\ binario\ riflesso</math><br/>
Determiniamo per prima cosa le relazioni che legano due parole codice '''<math>y_i</math>''' e '''<math>y_{i+1}</math>''' rappresentanti in codice rilflesso due numeri '''<math>x_i</math>''' e '''<math>x_{i+1}</math>''' consecutivi, cioè tali che '''<math>x_{i+1}-x_i=1</math>.<br/>
Si è visto (cap.3 parte I) che <math>y_1</math> e <math>y_{i+1}</math> devono essere adiacenti.<br/>
Si possono avere due e si può scrivere cosìcasi.<br/>
:- primo caso:<math>x_i pari</math><br/>
Si ha allora:<br/>
::::::<math>\begin{cases}x_i=x_nx_{n-1}..x_k..x_1 0\\ e\ quindi \\x_{i+1}=x_nx_{n-1}..x_k..x_1 1\end{cases}</math><br/>
a questi due numeri corrispondono le seguenti rappresentazioni in codice Gray:<br/>
::::<math>y_i=x_n(x_{n-1}\oplus x_n)(x_{n-2}\oplus x_{n-1})..(x_{k}\oplus x_{k+1})..(x_1\oplus x_2)(0\oplus x_1)</math><br/>
:::<math>\bar y_{i+1}=x_n(x_{n-1}\oplus x_n)(x_{n-2}\oplus x_{n-1})..(x_{k}\oplus x_{k+1})..(x_1\oplus x_2)(1\oplus x_1)</math><br/>
Si ha quindi:<br/>
:::::<math>y_i\oplus y_{i+1}=000..0..0 1\ \ \ \ (2.9.1)</math><br/>
Quindi se <math>y_i</math> rappresenta in codice Gray un intero pari, si ottiene <math>y_{i+1}</math>, complemetando il digit più a destra.<br/>
:-Secondo caso: <math>x_i</math> dispari:<br/>
<math>x_i</math> comincia a destra con un '''1''' e si può scrvere così:<br/>
::::::<math>x_i=x_nx_{n-1}..x_{k+1}..0\ 1\ 1..1\ 1</math><br/>
::::::<math>x_{i+1}=x_nx_{n-1}..x_{k+1}..1\ 0\ 0..0\ 0</math><br/>
Da cui:<br/>
::::::<math>y_i=x_n(x_{n-1}\oplus x_n)..(x_{k+1}\oplus x_{k+2})x_{k+1}1\ 0\ 0.. 0\ 0</math><br/>
::::::<math>y_{i+1}=x_n(x_{n-1}\oplus x_n)..(x_{k+1}\oplus x_{k+2})\bar x_{k+1}1\ 0\ 0.. 0\ 0</math><br/>
e:
::::::<math>y_i\oplus y_{i+1}=0\ 0\ ..0\ 1..0\ 0..0\ 0\ \ \ \ \ \ (2.9.2)</math><br/>
Quindi, quando <math>y_i</math> rappresenta in codice Gray un numero dispari, si ottiene la rappresentazione del numero successivo complementando la prima cifra a sinistra del primo '''1''' incontrato partendo da destra.<br/>
Consideriamo ora un contatore '''R=(R<sub>m</sub>...R<sub>k</sub>...R<sub>0</sub>)''' binario riflesso in cui '''R<sub>k</sub>''' sono gli stati interni di '''Flip-Flop T''' ed indicano il valore delle cifre di rango '''K''' in codice Gray.<br/>
 
Chiamiamo con <math>r^n_k</math> l'ingesso del '''Flip-Flop T''' di rango '''k''' all'istante '''n'''; si avrà:
 
::::::<math>R^{n+1}_k=R^n_k\oplus r^n_k</math>
 
da cui:
 
::::::<math>R^{n+1}_k\oplus R^n_k=r^n_k</math>
 
Conoscendo lo stato di parità del numero <math>R^n</math>, si possono dedurre dalla '''(2.9.1)''' e '''(2.9.2)''', le <math>r^n_k</math>, cioè i valori di ingresso da dare ai singoli '''Flip-Flop''' in modo da ottenere il numero <math>R^{n+1}</math>.<br/>
Ora, la parità del numero '''<math>R^n</math>''' consideerato è dato dal digit '''<math>B_0</math>''' della rappresentazione in binario puro.<br/>
::::::<math>B_0=\oplus \sum_{k=0}^k=m R_k</math><br/>
::::::<math>B_0=0\ per\ R^n\ pari</math><br/>
::::::<math>B_0=1\ per\ R^n\ dispari</math><br/>
 
Si deducono le seguenti relazioni:<br/>
 
::::::<math>r^n_0=R^n_0\oplus R^{n+1}_0=\bar B^n_0 E^n\ \ \ \ \ (k=0)</math><br/>
::::::<math>r^n_k=R^n_k\oplus R^{n+1}_k=R^n_{k-1}\bar R^n_{k-2}...\bar R^n_1\ \bar R^n_0\ B^n_0\ E^n\ \ \ (1=k=m)</math>
 
dove '''E''' rappresenta la variabile d'ingresso del contatore.<br/>
 
[[File:Contatore in binario riflesso.png|right]]
 
[[File:Contatore in binario riflesso (bis).png|right]]
 
 
Ponendo:<br/>
::<math>R^n_{-1}=\bar B^n_0\ \ \ \ \begin{cases}R^n_{-1}=0, R^n\ e'\ dispari\\R^n_{-1}=1, R^n\ e'\ pari\end{cases}</math><br/>
Si ha allora per <math>0\le k \le m</math>
 
<math>r^n_k=R^n_k\oplus R^{n+1}_k=R^n_{k-1}\bar R^n_{k-2}\bar R^n_{k-3}...\bar R^n_1\bar R^n_0\bar R^n_{-1}E^n\ \ (2.9.3)</math><br/>
<math>\bar R^n_{-1}=\oplus \sum_{k=0}^m\ R^n_k</math>
 
Nelle figure (2.9.4 e 2.9.4bis)sono rappresentati 2 contatori in codice binario riflesso ottenuti applicando le formule '''(2.9.3)''' o considerando una decomposizione analoga a quella fatta nel caso dei contatori in binario puro. E' da notare inoltre il segno '''-''' su tutte le <math>R_i</math> salvo quella di rango '''k-1''' e la presenza della variabile <math>R_{-1}</math> rappresentata da un Flip-Flop supplementare di parità.<br/>
Questo Flip-Flop di rango '''-1''', commuterà ogni volta che si applicherà un '''1''' al suo ingresso.
 
 
:2.10 - ''Diagrammi di stato''<br/>
Consideriamo a titolo di esempio, un addizionatore binario seriale (fig.2.1.3) ed assumiamo che la configurazione della memoria '''M''', che conserva fino all'istante '''i+1''' il valore del riporto <math>r_{i+1}</math> ottenuto all'istante '''i''', sia rappresentativa dello stato interno del circuito.
[[File:Diagramma di stato.png|right]]
 
A partire da uno stato iniziale '''<math>r_i=0</math>''' risulta che le tre combinazioni di ingresso di '''<math>x_i\ y_i</math>''' (cfr.§2.1.2) '''00,01,10''' il valore di <math>r_i</math>, e cioè lo stato interno del circuito non cambia; mentre per la combinazione '''<math>x_i=y_i=1</math>''' lo stato interno passa dal valore '''0''' al valore '''1'''. Analogamente si può considerare per quali combinazioni delle variabili d'ingresso lo stato interno rimane uguale ad '''1''' e per quale valore cambia invece nuovamente da '''1''' a '''0'''. Si può quindi riscrivere la tavola della verità di '''§ 2.1.2''' sotto la forma di diagramma di stato, in cui '''<math>x_i y_i</math>''' rappresenta la combinazione dei valori d'ingresso, '''<math>r_i</math>''' lo stato interno; ed in funzione dei valori di <math>r_i</math> e di '''<math>x_i y_i</math>''' sono riportati in ogni casella, separati da una '''/''', il nuovo stato interno '''<math>r_{i+1}</math>''' ed il valore di uscita '''<math>s_i</math>'''.
 
 
[[File:Diagamma di stato a vertici rappresentativi.png|right]]
 
[[File:Grafo di stato 2.10.1 a.png|right]]
 
Si può equivalentemente rappresentare il comportamento del circuito per mezzo di un grafo composto da vertici rappresentativi dello stato interno e da archi orientati tra le coppie di vertici.<br/>
Gli archi orientati sono rappresentativi dei valori di ingresso che determinano il passaggio dello stato interno dasl vertice di partenza a quello di arrivo, e recano, separati da una barra, oltre a questi valori , anche i corrispondenti valori di uscita.<br/>
Nell'esempio in esame si ha quindi il grafo posto di fianco:
 
Il grafo di una rete sequenziale contiene dunque le stesse informazioni della tabella della verità; con esso però si mette in particolare evidenza la connessione logica degli stati che il sistema può assumere. Una altra rappresentazione molto usata ha nome di diagramma di stato ed indica gli stati successivamente assunti dal sistema.<br/>
Un semplice esempio riguarda il diagramma di stato di un contatore binario modulo 2<sup>3</sup> in (2.10.1 a). Il nujmero binario racchiuso nel circolo indica lo stato dei tre Flip-Flop , e le frecce indicano la sequenza dei cambiamenti di stato (cnf:§2.7)<br/>
[[File:Diagramma di stato di un contatore decimale.png|right]]
 
Un contatore decimale ,o decade, richieder invece 10 stati distinti. Il diagramma di stato. Il diagramma di stato di un tale contatore con codice '''8.4.2.1''' è riportato in (2.10.1 b). br/>
 
Se come visto nel '''§ 2.7.3''' con <math>a_{it}</math> (i=1,2,3,4) si rappresentano i valori di input capaci di cambiare lo stato dei quattro rispettivi Flip-Flop , dal diagramma di statosi possono ottenere, senza costruire la tabella della verità, le equazioni di input ricavate nel '''§2.8'''. Ad esempio , infatti, considerando che i numeri racchiusinel circoletto rappresentano i valori assunti di volta in volta dall'insieme ordinato <math>A_4\ A_3\ A_2\ A_1</math> e se consideriamo in particolare lo stato <math>A_2</math>, inizialmente posty a '''0''', notiamo che detto stato commuta sempre e solo a partire da una configurazione del tipo '''0\ -\ - 1''' e quindi l'equazione di input relativa al Flip-Flop di stato <math>A_2</math> tenuto conto della variabile d'ingesso '''p''', deve essere:
 
::::::<math>a_{2t}=A_1\ A_2\ p</math>.
 
===Circuiti di un calcolatore digitale (b)===
:3.1 <br/>
::-''registri di scorrimento''<br/>
Un [[w:Registro a scorrimento|registro]] in un calcolatore digitale è un circuito di memorizzazione di ampiezza, in generale, pari a una parola (o voce) di macchina.<br/>
Poiché una parola di macchina consiste di un numero determinato di '''bit''', e poichèp un Flipo-Flop è un elemento di memorizzazione binario, un registro è costituito da un insieme di Flip-Flop.<br/>
[[File:Rappresentazione simbolica di un registro a scorrimento.png|right]]
In figura 3.1.1 viene data la rappresentazione simbolica di un registro: ogni quadrato rappresenta un Flip-Flop.<br/>
[[File:Registri a scorrimento.png|right]]
 
La lettera '''A''' indica il registro '''A''' e la lettera '''A<sub>i</sub>''' il Flip-Flop i-esimo.<br/>
Un registro a scorrimento (o shift rergister) permette di fare scorrere il proprio contenuto sulla destra , o sulla sinistra o in entrasmbe le direzioni; in fig.3.1.2<sub>a</sub> compare la rappresentazione simbolica di un registro di shift. Un registro di shift a '''n bits''' fa scorrere un bit alla volta richiedendo quindi '''n''' operazioni di shift per inserire o edstrarre una parola seriale di '''n bits'''.<br/>
 
Circuiti addizionali sono richiestinel registro di shift se una parola deve essere inserita o prelevata in parallelo: infatti un registro può convertire una parola seriale in una parallelo (3.1.2b)o una parallela in una seriale (3.1.2c).
 
Connettendo l'output all'input di un egistro di shift , quest'ultimo un '''circulating regster (3.1.2d)
 
 
 
::-''Equazioi logiche di un [[w:registro a scorrimento| registro di shift]]''<br/>
 
[[File:Registro a scorrimento costituito da Flip-Flop.png|right]]
Un regisro di shift richiede una memorizzazione temporanea tra due Flip-Flop adiacenti in modo che venga conservata l'informazione di un Flip-Flop che sta per cambiare e utilizzare tale memorizzazione come input per il Flip-Flop successivo. In fig.3.1.3 compare un registro di shift in cui l'elemento base è costituito da Flip-Flop SR.<br/>
L'output di questo Flip-Flop SR viene indicato con lettera maiuscola '''A<sub>n</sub>''' o il complemento '''<math>\bar A_n</math>'''; gli inputs sono indicati con lettere minuscole, '''a<sub>nr</sub>''' e '''a<sub>ns</sub>''', e rappresentano gli input '''reset''' e '''set''' dell'n-simo Flip-Flop.<br/>
La lettera '''p''' rappresenta il segnale di clock che determina l'operazione di '''shift'''. Come si è già visto a proposito dei contatori, anche per i registri di shift vi sono due tipi di equazioni logiche.<br/>
[[File:Tabella stato di registro.png|right]]<br/>
Il primo tipo descrive lo stato del registro : gli stati dei singoli Flip-Flop di un registro a scorrimento sono
rappresentati nella tabella affinacata, da cui si deduce l'equazione di stato<br/>
::::::<math>A_n(t)=A_{n-1}\cdot p</math><br/>
Questa equazione indica che lo stato dello n-esimo Flip-Flop dopo l'intervallo temporale '''τ''' è lo stato del Flip-Flop (n-1)-esimo.
[[File:Rappresentazione impulsi set reset.png|right]]<br/>
Il secondo tipo di equazioni logiche descrive l'input del Flip-Flop. I valori che devono essere assuntidagli impulsi '''Set''' e '''Rerset'''del Flip-Flop n-desimo sono rappresentati nella figura adiacente.
 
Da cui si deducono le equazioni di input dei Flip-Flop di un registro di shift:
 
::::::<math>a_{nr}=\bar A_{n-1}\cdot p</math><br/>
::::::<math>a_{ns}=A_{n-1}\cdot p</math>
 
Da queste considrazioni è stato dedotto il circuito di fig.3.1.3
 
 
:3.2<br/>
::''-Trasferimento dell'informazione''<br/>
L'informazione conservata in un registro costituisce una parola: mediante un trasferimento di informazione, cerchiamo di realizzare il trasferimento della una parola da un registro ad un altro o un trasferimento multiplo da uno o più registri ad altri registri.<br/>
L'importanza di una operazione di trasferimento consiste non solo nel trasferimento stesso, ma nella possibilità di compiere operazioni logiche sulla parola durante il trasferimento. Il trasferimento dell'informazione traa vari regfistri è l'operazione base mediante la quale possono essere realizzati la elaborazione dei dati, le decisioni logiche, ecc., in un calcolatore: inizialmente le informazioni sono conservate in una unità di memoria da cui vengono trasferite nei vari registri secondo una certa sequenza.<br/>
Sono stati sviluppati dei metodi simbolici per poter rappresentare questo processo di trasferimento delle informazioni: in primo luogo un trasferimento viene espresso mediante una istruzione simbolica <br/>
Le equazioni logiche ed i diagrammi logici possono essere quindi ottenuti dalle istruzioni simboliche.<br>
Per poter descrivere un tale procedimento simbolico si sono mostrati nel seguente elenco i simboli utilizzati.
 
{| class="wikitable"
|-
! Simboli !! Descrizione dei simboli
|-
| Lettere maiuscole || indicano i registri
|-
| Indice i || Denota lo i<sup>esimo</sup> bit di un registro
|-
| Parentesi () || Indicano il contenuto di un registro
|-
| Doppia freccia <math>\Longrightarrow</math> || Indica il trasferimento di una parola da un registro all'altro
|-
| Parentesi [] || Porzione di registro il cui contenuto ha una dipendenza funzionale del registro stesso
|-
| Due punti : || Due punti (preceduti da una variabile booleana) indicano il verificarsi dell'istruzione segujente quando la variabile ha il valore 1
|-
| Freccia semplice <math>\longrightarrow</math> || Indica una sequenza di stati
|-
| Segno + || Questo simbolo ha due significati: 1) una operazione logica OR quando esso è usato tra variabili booleane; 2) un'addizione aritmetica quando è usato tra numeri
|-
| Segno - || Questo simbolo indica una operazione aritmetica
|}
Per esempio (A) indica il contenuto del registro (A) e (A<sub>i</sub>) indica il contenuto dell'i<sup>simo</sup> bit del registro A; (A,B) indica il contenuto dei registri A e B che vengono usati insieme come un unico registro.<br/>
Con (A)<math>\Longrightarrow</math> B si indica che il contenuto del registro A viene trasferito in B e <math>0\Longrightarrow</math> A significa che degli zeri vengono inseriti in A. L'operazione di shift a sinistra viene indicata con <math>(A_i)\Longrightarrow A_{i+1}</math>, supponendo che l'indice i incrementato indichi un bit significativo di rango superiore.<br/>
L'operazione di shift a destra sarà alloa:<br/>
::::::<math>(A_i)\Longrightarrow A_{i-1}</math>
 
[[File:Tavola della verita (3.2.3).png|right]]<br/>
Le espressioni simboliche '''<math>S_n[A]</math>''' e '''<math>N_m[A]</math>''', indicano la parte segno e la parte numerica del registro '''A'''. L'espressione <math>P_i:0\Longrightarrow A</math> indica che, quando '''p<sub>i</sub>''' ha il valore '''1''', viene eseguita l'istruzione che azzera il registro '''A'''.<br/>
Mediante questo simbolismo, si può descrivere una operazione di trasferimento: supponiamo di avere una parole di 3 bit nel registro '''A''' e di trasgerirla in '''B''' al momento in cui viene dato il via da un segnale '''P<sub>1</sub>''' proveniente dall'unità di controllo del calcolatore.<br/>
Tale operazione si esprimerà nella forma
 
::<math>P_1:(A)\Longrightarrow B \ \ \ \ (3.2.2)</math><br/>
[[File:Trasferimento dal registo A al registo B.png|right]]
 
 
Supponendo che i registri siano costituiti da Flip-Flop T, dalla (3.2.2)si deduce ta tavola della verità (3.2.3).<br/>
In questa tabella, il trasferimento inizia quando l'impulso '''p''' dell'orologio è uguale ad '''1''': '''<math>b_{it}</math>''' indica il valore d'ingresso del Flipo-Flop rappresentativo dell'<math>i^{esimo}</math> bit nel registro '''B'''.
 
::<math>b_{it}=(A_i\oplus B_i)\cdot P_1\cdot P \ \ \ \ per\ \ i=1,2,3</math>
 
Queste equazioni indicano che l'0perazione di trasferimento in un registro '''B''' costituito da Flip-Flop T viene realizzato mediante un '''XOR'''. Nella figura collocata di fianco compare il diagramma logico (trasferimento in parallelo di una parola dal registro A al registro B) che descrive la connessione dei due registri. <br/>
L'esempio presente si riferisce ad un trasferimento in parallelo di una parola: una informazione può essere però trasferita in forma sequenziale.<br/>
Come esempio, consideriamo la somma aritmetica tra due numeri binari entrambi di cinque bit: siano essi conservatinei registri di shift A e B (fig.3.2.5). L'addizione avviene quando '''P<sub>1</sub>''', proveniente dalla unità di controllo, assume il valore '''1'''.<br/>
[[File:Diagramma logico addizonatgore seriale binario.png|right]]<br/>
Nella addizione seriale , coppie di bits corrispondenti dei due numeri vengono sommati allo stesso istante, quindi i due numeri vengono fatti scorrere del registro a trasferimento dagli impulsi di orologio '''P<sub>1</sub>, P<sub>2</sub>, P<sub>3</sub>, P<sub>4</sub> e P<sub>5</sub>'''.<br/>
Il trasferimento può essere espresso dalla seguente formula simbolica:
 
::::<math>P_1 P_i:\ \ \ \ (B_i)\Longrightarrow B_{i-1}</math>
:::::<math>0\Longrightarrow B_5</math>
::::<math>(A_i)\Longrightarrow A_{i-1}\ \ \ \ \ \ \ \ \ \ per\ i=1,....,5</math>
 
 
 
::::<math>\ \ \ \ \ \ S_i\Longrightarrow A_5</math>
:::::C_{i+1} = <math>\triangle C_i</math>
 
dove '''S<sub>i</sub>''' e '''C<sub>i</sub>''' sono le funzioni descritte nel cap.II parte II.<br/>
Le prime tre istruzioni simboliche indicano lo shift a destra dei registri '''A''' e '''B'''.<br/>
Le ultime due istruzioni descrivono la connessione del bit di riporto e la memorizzazione del bit somma nel Flip-Flop A<sub>5</sub>.<br/>
Il diagramma logico di questo addizionatore binario seriale è mostrato in (3.2.5)<br/>
Il metodo simbolico visto ora può essere utilizzato sia per costruire i diagrammi logici di un circuito , sia le equazioni logiche di quest'ultimo. Nella figura compare il diagramma logico di un accumulatore binario seriale. Esso consiste in un addizionatore seriale per eseguire la somma e in un registro a scorrimento per conservare uno degli addendi prima della addizione o la somma dopo l'addizione.
 
 
:3.3<br/>
::''-Accumulatori binari''<br/>
[[File:Diagramma logico di un accumulatore seriale.png|right]]
Per accumulatore binario, si intende un circuito in cui un registro memorizza un numero binario e appena ne riceve un'altr4o , quest'ultimo viene sommato (o sottratto) dal primo numero ee quindi viene memorizzata la somma (o la differenza).
Un accumulatore può essere costruito per operazioni in parallelo o in serie.<br/>
Nella figura compare il diagramma logico di un accumulatore binario seriale. Esso consiste in un addizionatore seriale per eseguire la somma e in un registro a scorrimento per conservare uno degli addendi prima della
della addizione o la somma dopo l'addizione.<br/>
La sottrazione può essere ottenuta mediante la somma del complemento a 2 del numero.<br/>
 
[[File:Diagramma logico di un accumulatore binario parallelo..png|left]]<br/>
Se l'addizionatore seriale di fig.3.3.1 viene sostituito con un sottrattore seriale o con un addizionatore-sotttattore seriale, l'accumulatore può eseguire la sottrazione o entrambe le operazioni di somma e sottrazione.<br/>
In figura 3.3.2 viene mostrato un accumulatore binario parallelo.<br/>
Ogni Flip-flop dell'accumulatore funziona come un contatore modulo 2.<br/>
Il primo addendo è inizialmente conservato in questi contatori<br/>
Durante l'addizione ogni contatorer contegga gli impulsi rappresentativi del bit di addendo o di riprto, e genera un segnale di riporto quando il suo stato cambia da '''1''' a '''0'''.<br/>
Il diagramma logico di un accumulatore binario parallelo relativo all'addizione viene ora descritto mediante il metodo simbolico.<br/>
 
[[File:Diagramma di accumulatore binario parallelo (addizione).png|left]][[File:Diagramma di accumulatore binario parallelo sottrattore.png|right]]<br/>
In fig.3.3.3 consideriamo l'i-esimo stadio: l'addizione può essere decomposta in due pass; durante il primo vrengono sommati i bits '''A<sub>i</sub>''' e '''B<sub>i</sub>''', durante il secondo vengono addizionate la somma risultante dal primo passo e il bit di riporto dovuto all'operazione di somma compiuta sui bit di rango inferiore.<br/>
Le istruzioni simboliche di questi due passi sono:
 
::::::<math>P_1 p_1:B_i\cdot(\bar A_i)+\bar B_i(A_i)\Longrightarrow A_i</math>
::::::<math>P_1 p_1:\ C_{i-1}(\bar A_i)+\bar C_{i-1}\ (A_i)\Longrightarrow A_i</math>
 
In queste istruzioni la somma di '''A<sub>i</sub>''' e '''B<sub>i</sub>''' avviene al clock pulse '''p<sub>1</sub>'''; la somma del risultante bit '''A<sub>i</sub>'''e del riporto '''C<sub>i-1</sub>''' avviene all'impulso seguente '''p<sub>2</sub>'''. Entrambe le addizioni hanno luogo dutasnte lo stato '''P<sub>1</sub>''' che da l'ordine di addizionare da pate dell'unità di controllo.<br/>
Il bit di riporto può essere formato in più modi.<br/>
Per esempio:
 
::::::<math>C_i=B_i\bar S_i+C_{i-1}S_i</math>
 
dove '''<math>S_i</math>''' e '''math>\bar S_i</math> sono le uscite del Flip-Flop '''A<sub>i</sub>''' dopo il clock pulse '''P<sub>1</sub><br/>
La linea di ritardo assicura che il cambio di stato dello Flip-flop '''A<sub>i</sub>'''avvenga dopo che si sia formato il nuovo riporto.<br/>
Un accumulatore può essere anche predisposto ad eseguire una sottrazione . In questo caso le istruzioni simboliche
relative alla differenza sono le stesse di quelle relative alla somma mentre cambia l'espressione booleana che dà il riporto.<br/>
Chiameremo inoltre '''P<sub>2</sub>''' lo stato del calcolatore che indica l'operazione di sottrazione.
 
::::::<math>P_2p_1:B_i(\bar A_i)+\bar B_1(A_i)\Longrightarrow A_i</math>
::::::<math>P_2p_2:R_{i-1}(\bar A_i)+\bar R_{i-1}(A_i)\Longrightarrow A_i</math>
 
dove R<sub>i</sub> è la ritenuta:
 
::::::<math>R_i=D_iB_i+\bar D_iR_{i-1}</math>
 
essendo D<sub>i</sub> la differenza allo i<sup>simo</sup> stadio.<br/>
Nella figura 3.3.4 compare il diagramma logico di un accumulatore-sottrattore.
 
Nella figura 3.3.4 compare il diagramma logico di un accumulatore-sottrattore.
 
[[File:Accumulatore addizionatore-sottrattore.png|right]]<br/>
 
Si può ora formare un accumulatore relativo sia all'addizione che alla sottrazione.
 
Esaminando infatti i diagrammi 3.3.3 e 3.3.4 si vede che l'unica differenza tra i due consiste nella connessione della uscita del Flipo-Flop '''A<sub>i</sub>.<br/>
Un accumulatore per addizione e sottrazione può allora essere costruito usando quattro addizionali porte di '''AND''' e due addizionali circuiti '''OR'''. (fig-3.3.5)<br/>
Quando lo stato è '''P<sub>1</sub>''', l'accumulatore somma, quando lostato è '''P<sub>2</sub>''', avviene la sottrazione.
 
 
:3.4-Matrici di commutazione''<br/>
Un importante circuito di un elaboratore digitale è costituito dalle matrici di commutazione, descrittenelseguito del paragrafo mediante l'ausilio delle matrici booleane.<br/>
::3.4.1 ''Circuiti di commutazione con uscita multipla''<br/>
Un circuito di commutazione con output multiplo può essere descritto mediante un certo numero di funzioni booleane.<br/>
Prendiamo come esempio il full-adder relativo ad un singolo bit.<br/>
Le tavole della verità sono date nel capitolo II° parte II<sup>da</sup> e da queste si ottengono le formule per la somma '''S''' e il riporto '''C<sub>0</sub>''':
 
::::::<math>S=\bar X<br />\bar YC_i+\bar XY\bar C_i+x\bar Y\bar C_i+XYC_i</math>
::::::<math>C_0=\bar XYC_i+X\bar YC_i+XY\bar C_i+XYC_i</math>
 
dove '''X''', '''Y''' e '''C<sub>i</sub>'''sono rispettivamente gli addendi, e il bit di riporto.<br/>
Queste funzioni possono essere scritte mediante i prodotti fondamentali:
 
::::::<math>S=m_1+m_2+m_4+m_7</math>
::::::<math>C_0m_3+m_5+m_6+m_7</math>
 
Le due funzioni '''S''' e '''C_0''' possono però essere espresse anche come:
 
<math>S=(0\times m_0)+(1\times m_1)+(1\times m_2)+(0\times m_3)+(1\times m_4)+(0\times m_5)+(0\times m_6)+(1\times m_7)\ \ (3.4.1)</math>
<math>C_0=(0\times m_0)+(0\times m_1)+(0\times m_2)+(1\times m_3)+(0\times m_4)+(1\times m_5)+(1\times m_6)+(1\times m_7)\ \ (3.4.2)</math><br/>
Queste due ultime equazioni possono essere rappresentate mediante matrici booleane , come segue:
 
[[File:Matrice booleana.png|right]]
 
o con notazione matriciale:<br/>
::::::<math>\begin{bmatrix}0\end{bmatrix}=\begin{bmatrix}B\end{bmatrix}\times \begin{bmatrix}m\end{bmatrix}</math>
 
dove '''[0]''', '''[B]''' e '''[m]''' sono rispettivamente la matrice di uscita , la matrice booleana '''B''' e la matrice dei prodotti fondamentali.<br/>
La moltiplicazione della matrice '''B''' per la matrice '''m''' segue le regole ordinarie della moltiplicazione dell'algebra matriciale.<br/>
In altre parole, gli elementi della matrice '''0''' sono la somma dei prodotti dei termini di '''m''' per i corrispondenti bit della matrice '''B''', come mostrato nella 3.4.1 e 3.4.2.
 
La matrice '''B''' è costituita da due righe e otto colonne: ogni riga rappresenta una uscita mentre ogni colonna rappresenta un '''minterm'''.<br/>
Gli '''1''' dela riga '''01101001''' rappresentano i termini '''m<sub>1</sub>, m<sub>2</sub>, m<sub>4</sub> m<sub>7</sub>''' mentre quelli della riga '''00010111''' rappresentano i termini '''m<sub>3</sub>, m<sub>5</sub>, m<sub>6</sub>, m<sub>7</sub>''': cioè la matrice booleana '''B''' rappresenta un insieme dei vettori caratteristici delle finzioni booleane '''S''' e '''C<sub>0</sub>'''.<br/>
Le espressioni booleane per '''S''' e '''C<sub>0</sub>''' possono essere scritte mediante i '''maxterm''' (somme fondamentali).
 
::::::<math>S=M_0\ M_3\ M_5\ M_6</math>
::::::<math>C_0=M_0\ M_1\ M_2\ M_4</math>
 
espressioni equivalenti a :
 
::::::<math>S=(0+M_0)(1+M_1)(1+M_2)(0+M_3)(1+M_4)(0+M_5)(0+M_6)(1+M_7)\ \ \ \ (3.4.4)</math>
::::::<math>C_0=(0+M_0)(0+M_1)(0+M_2)(1+M_3)(0+M_4)(1+M_5)(1+M_6)(1+M_7)\ \ \ \ (3.4.5)</math>
 
Rappresentando le formule (3.4.3) e (3.4.4) mediante matrici booleane, si ha:
 
::::::::<math>\begin{bmatrix}S\\C_0\end{bmatrix}=\begin{bmatrix}0&1&1&0&1&0&0&1\\0&0&0&1&0&1&1&1\end{bmatrix}\times \begin{bmatrix}M_0\\M_1\\M_2\\M_3\\M_4\\M_5\\M_6\\M_7\end{bmatrix}\ \ \ \ (3.4.6)</math><br/>
 
o con la notazione matriciale:<br/>
::::::<math>\begin{bmatrix}0\end{bmatrix}=\begin{bmatrix}B\end{bmatrix}\times \begin{bmatrix}M\end{bmatrix}</math><br/>
dove '''[M]''' è la matrice '''M''' dei maxterm.<br/>
In questo caso la moltiplicazione della matrice '''B''' per la matrice '''M''' non segue le regole ordinarie della moltiplicazione dell'algebra matriciale.<br/>
Infatti, come si vede dalle (3.4.4) e (3.4.5) il generico elemento della matrice prodotto è definito come il prodotto delle somme dei singoli termini di '''M''' con il corrispondente bit della matrice '''B'''.<br/>
Le funzioni (3.4.3) e (3.4.6) ottenute mediante notazioni matriciali, risultano espresse nelle due forme canoniche e le matrici booleane '''B''' delle due forme risultano identiche.<br/>
Quindi, quando di un circuito a più uscite, si conosce la matrice '''B''' della notazione matriciale booleana e quest'ultima è data in forma canonica, sono conosciute immediatamente anche le equazioni booleane di tutti gli output, sia nella forma canonica disgiuntiva che in quella congiuntiva.<br/>
Ovviamente si possono trovare immediatamente le espressioni <math>\bar S</math> e <math>\bar C_0</math>. Infatti:
 
::::::<math>\bar S=m_0+m_3+m_5+m_6</math>
::::::<math>\bar C_0=m_0+m_1+m_2+m_4</math>
 
oppure><br/>
::::::<math>\begin{bmatrix}\bar 0\end{bmatrix}=\begin{bmatrix}\bar B\end{bmatrix}\times \begin{bmatrix}m\end{bmatrix}</math>
 
Da cui le espressioni matriciali booleane:<br/>
::::::::<math>\begin{bmatrix}\bar S\\\bar C_0\end{bmatrix}=\begin{bmatrix}0&1&1&0&1&0&0&1\\0&0&0&1&0&1&1&1\end{bmatrix}\times \begin{bmatrix}m_0\\m_1\\m_2\\m_3\\m_4\\m_5\\m_6\\m_7\end{bmatrix}\ \ \ \ (3.4.7)</math><br/>
oppure<br/>
::::::<math>\begin{bmatrix}\bar 0\end{bmatrix}=\begin{bmatrix}\bar B\end{bmatrix}\times \begin{bmatrix}m\end{bmatrix}</math><br/>
dove [<math>\bar 0</math>] è la matrice di uscita complementare e [<math>\bar B</math>] è la matrice '''B''' complementata.<br/>
E' da notare che ogni bit di <math>\bar B</math> è il complemento a 1 del corrispondente bit della matrice '''B'''<br/>
La moltiplicazione della matrice <magth>\bar B</math> per la matrice '''m''' segue le regole dellamoltiplicazione dell'algebra matriciale.:<br/>
Usando i maxterms, si ha invece:
 
::::::<math>\bar S=M_1\ M_2\ M_4\ M_7</math>
::::::<math>\bar C_0=M_3\ M_5\ M_6\ M_7</math>
 
da cui, le forme matriciali sono:<br/>
::::::::<math>\begin{bmatrix}\bar S\\\bar C_0\end{bmatrix}=\begin{bmatrix}1&0&0&1&0&1&1&0\\1&1&1&0&1&0&0&0\end{bmatrix}\times \begin{bmatrix}M_0\\M_1\\M_2\\M_3\\M_4\\M_5\\M_6\\M_7\end{bmatrix}\ \ \ \ (3.4.8)</math><br/>
oppure:<br/>
::::::<math>\begin{bmatrix}\bar 0\end{bmatrix}=\begin{bmatrix}\bar B\end{bmatrix}\times \begin{bmatrix}M\end{bmatrix}</math><br/>
La moltiplicazione della matrice '''B''' con la matrice '''M''' non segue le reggole ordinarie dell'algebra matriciale ma è definita da (3.4.4) e (3.4.5).
 
 
 
::4.4.2-''Matrici di commutazione rettangolari''<br/>
[[File:Matrice rettangolare utilizzante circuito AND.png|right]]<br/>
La matrice di commutazione è un circuito con output multiplo: essa realizza una matrice booleana.<br/>
Le matrici più comuni sono quelle rettangolari, ad albero e a doppio albero.<br/>
Esistono però anche altri tipi di matrici.<br/>
Una matrice rettangolare che utilizza solo porte di '''AND''' è rappresentata in fig.3.4.1.<br/>
Tale matrice è relativa a tre variabili booleane e coinvolge nella sua realizzazione tre coppie di input e otto output.<br7>
Per ogni prodotto delle tre variabili di input esiste uno ed uno solo output.<br/>
Le funzioni booleane dei 8 output sono:
 
:::::: <math>f_0\ =\ m_0\ =\ \bar A\bar B \bar C\ \ \ \ \ \ \ \ \ f_1\ =\ m_1\ =\ \bar A\bar B\ C</math>
::::::<math>f_2\ =\ m_2\ =\ \bar A\ B\bar C\ \ \ \ \ \ \ \ \ f_3\ =\ m_3\ =\ \bar A\ B\ C</math>
::::::<math>f_4\ =\ m_4\ =\ A\bar B\bar C\ \ \ \ \ \ \ \ \ f_5\ =\ m_5\ =\ A\bar B\ C</math>
::::::<math>f_6\ =\ m_6\ =\ A\ B\bar C\ \ \ \ \ \ \ \ \ f_7\ =\ m_7\ =\ A\ B\ C</math><br/>
[[File:Forma matriciale di un circuito.png|right]]
 
Il circuito può anche essere espresso mediante una forma matriciale:<br/>
In questa matrice booleana compare un solo 1 in ogni riga e tutti gli 1 si vengono a trovare sulla diagonale principale.<br/>
Per la realizzazione del circuito non sono necessarie porte di '''OR'''.<br/> Questa è la forma più semplice che può assumere una matrice '''B''' relativa ad una matrice di commutazione avente tre coppie di input ed otto output.<br/>
Si vede da fig.3.4.1, che per tre variabili sono necessarie otto porte di AND a tre ingressi. All'input di ogni AND led tre variabili di input possono comparire sia in forma diretta che in forma complimentata.<br/>
Per n coppie di variabili di input, il numero di input relativi alla porta di AND diventa di '''n 2<sub>n</sub>'''; cioè un numero molto elevato per un valore grande di '''n'''.<br/>
Matrici più economiche si ottengono mediante strutture ad albero 0 a doppio albero (vedi fig.3.4.3).<br/>
Una matrice retangolare con tre variabili di input e utilizzante porte di '''OR''' risulta essere uguale a quella di fig.3.4.1, dfove le porte di '''AND''' sono sostituite con porte di '''OR'''.<br/>
Le funzioni booleane delle otto uscite sono:<br/>
:::::: <math>f_0\ =\ M_0\ =\ A+ B + C\ \ \ \ \ \ \ \ \ f_1\ =\ M_1\ =\ A+B+\bar C</math>
::::::<math>f_2\ =\ M_2\ =\ A+\bar B+ C\ \ \ \ \ \ \ \ \ f_3\ =\ M_3\ =\ A+\bar B+\bar C</math>
::::::<math>f_4\ =\ M_4\ =\bar A+ B+ C\ \ \ \ \ \ \ \ \ f_5\ =\ M_5\ =\bar A+ B+\bar C</math>
::::::<math>f_6\ =\ M_6\ =\bar A+\bar B+ C\ \ \ \ \ \ \ \ \ f_7\ =\ M_7\ =\bar A+\bar B+\bar C</math><br/> <br/>
[[File:Forma logica di una matrice di commutazione.png|right]]
 
 
 
 
 
La matrice di commutazione si può allora rappresentare nella forma logica:<br/>
Il numero di input per le porte '''OR''' risulta essere anche esso '''2<sup>n</sup>
 
 
::3.4.3 - ''Matrici di commutazione ad albero''<br/>
In figura 3.4.2 è rappresentata una matrice di commutazione adalbero costruita da circuiti '''AND''' e con quattro variabili booleane per input.<br/>
Vi sono quindi quattro coppie di input e 16 output.<br/>
Le equazioni booleane dei 16 output sono:<br/>
:::<math>f_0=[(\bar A\bar B)\bar C]\bar D\ \ \ f_5=[(\bar A B)\bar C]\bar D\ \ \ \ \ f_{10}=[(A\bar B)C]\bar D</math><br/>
:::<math>f_1=[(\bar A\bar B)\bar C]D\ \ \ f_6=[(\bar A B)C]\bar D\ \ \ \ \ f_{11}=[(A\bar B)C]D</math><br/>
:::<math>f_2=[(\bar A\bar B)C]\bar D\ \ \ f_7=[(\bar A B)C]D\ \ \ \ \ f_{12}=[(AB)\bar C]\bar D\ \ \ \ (3.4.9)</math><br/>
:::<math>f_3=[(\bar A\bar B)C]D\ \ \ f_8=[(A\bar B)\bar C]\bar D\ \ \ \ \ f_{13}=[(AB)\bar C]D</math><br/>
:::<math>f_4=[(\bar A B)\bar C]\bar D\ \ \ f_9=[(A\bar B)\bar C]D\ \ \ \ f_{14}=[(AB)C]\bar D\ \ \ f_{15}=[(AB)C]D</math><br/>
Le precedenti equazioni booleane possono essere scritte in forma matriciale. In questo caso, la matrice booleana è a livello multiplo ed i diversi livelli vengono indicati dalle precedenti parentesi tonde e quadre.<br/>
Vedremo in seguito tali rappresentazioni matriciali.<br/>
La seguente (3.4.2) è la rappresentazione di una matrice di commutazione ad albero con circuiti AND.
[[File:Matrice di commutazione adf albero con circuiti AND.png|center]]<br/>
Nelle equazioni (3.4.9), le parentes onde e quadre indicano anche la maniera di connettere i blocchi di '''AND''' di fig.3.4.2.<br/>
Per '''n=2''', sono necessari '''2<sub>3</sub>'input per gli '''AND'''-<br/>
Per '''n=3''', sono richiesti per gli AND 2<sub>3</sub> + 2<sub>4</sub> inputs.<br/>
Per '''n coppie''' di variabili, è richiesto un numero '''N''' di inputs per ogni AND, dove '''N''' è dato da:<br/>
::::::<math>N=\sum_{r=2}^n2^{r+1}</math><br/>
Rispetto alla matrice rettangolare , la matrice ad albero richiede un minor numero di inputs di AND.<br/>
Funzioni booleane di matrici di matrici ad albero aventi blocchi di '''OR''' hanno espressioni simili a quelli di (3.4.9), in termini però di somme fondamentali e la loro realizzazione circuitale si ottiene da quella di fig.3.4.2 sostituendo alle porte di '''AND''' quelle di '''OR'''.<br/>
In fig.3.4.3 viene mostrata una matrice a doppio albero con porte di '''AND''', quattro coppie di variabili di input e 2<sup>4</sup> outputs.<br/>
Questa configurazione richiede un numero di inpus di ''AND'''inferiore a quello delle configurazioni ad albero o rettangolari.<br/>
Le equazioni booleane dei 16 outputs del circuito sono:
:::<math>f_0=(\bar A\bar B)(\bar C\bar D)\ \ \ f_5=(\bar A B)(\bar C D)\ \ \ \ \ f_{10}=(A\bar B)(C\bar D)</math><br/>
:::<math>f_1=(\bar A\bar B)(\bar C D)\ \ \ f_6=(\bar A B)(c\bar D)\ \ \ \ \ \ f_{11}=(A\bar B)(C D)</math><br/>
:::<math>f_2=(\bar A\bar B)(C\bar D)\ \ \ f_7=(\bar A B)(C D)\ \ \ \ \ f_{12}=(A B)(\bar C\bar D)\ \ \ \ (3.4.10)</math><br/>
:::<math>f_3=(\bar A\bar B)(C D)\ \ \ f_8=(A\bar B)(\bar C\bar D)\ \ \ \ \ f_{13}=(A B)(\bar C D)</math><br/>
:::<math>f_4=(\bar A B)(\bar C\bar D)\ \ \ f_9=(A\bar B)(\bar C D)\ \ \ \ \ f_{14}=(A B)(\bar D)\ \ \ \ f_{15}=(A B)(C D)</math><br/>
[[File:Matrice di commutazione a doppio albeero con circuiti AND.png|right]]
 
 
 
 
 
 
 
 
 
 
Le funzioni pfrercedenti possono essere scritte mediante una formulazione matriciale: la matrice booleana è anche in questo caso a livelli multipli.<br/>
Le parentesi delle equazioni (3.4.10) indicano il modo di connettere i blocchi di '''AND''' di fig.3.4.3.
 
[[File:Matrici a doppio albero con otto coppie di inputs e 256 outputs.png|right]]<br/>
 
 
 
 
 
 
In figura 3.4.4 viene mostrato come si può realizzare una matrice con otto coppie di inputs e 256 outputs.<br/>
Gli otto inputs vengono divisi in due gruppi di quattro variabili ciascuno.<br/>
Se '''n''' non è multiplo di quattro, si può seguire lo stesso procedimento, solo che la configurazione risultante non sarà simmetrica.
 
 
::3.4.4-''Confronto tra i vari tipi di matrici''<br/>
[[File:Valori assunti dal numero di input per un n compreso tra 2 e 12..png|right]]<br/>
I tre tipi di matrici di commutazione (rettangolare, ad albero, a doppio albero)realizzano le stesse operazioni logiche ma richiedono un numero differente di inputs per le porte di '''AND''' (o di OR).<br/>
In tavola 3.4.5 vengono rappresentati i valori assunti dal numero di inputs per un '''n''' compreso tra 2 e 12.<br/>
Si noterà il rapido crescere degli inputs delle porte di AND in una matrice rettamgolare , all'aumento di '''n'''.<br/>
In una matrice ad albero, ogni volta che l'input aumenta di una coppia, il numero richiesto di input diventa più del doppio mentre in una matrice a doppio albero il numero risulta minore del doppio.<br/>
Queste differenze diventano molto sensibili quando '''n''' è, per es., dell'ordine di 12.<br/>
Ma lo studio degli input delle porte di '''AND''' non è sufficiente per la scelta della particolare matrice di commutazione.<br/>
Un'altra considerazione da fare è quella relativa al numero di livelli che un segnale deve attraversare dall'input all'output.<br/>
In una matrice rettangolare, il segnale passa attraverso un solo livello; per una matrice ad albero, esso deve passare attraverso '''n-1''' livelli.<br/>
In una matrice a doppio albero il segnale passa attraverso un livello per '''n=2''', due livelli per '''n=3 e 4''', tre livelli per '''n=5 fino a 8''', e quattro livelli per '''n''' che va da 9 a 16.
 
 
::-3.4.5 ''Applicazioni delle matrici di Commutazione''
 
[[File:Decodifcatore.png|right]]
 
[[File:Matrice di selezione e distribuzione.png|right]]<br/>
In figura 3.4.6 (Matrici di commutazione usate come decodificatori e codificat0ri) e 3.4.7 (Matrici di commutazione usate come selettori e distributori) sono illustrate alcune applicazioni delle matrici di commutazione.<br/>
In fig.3.4.6 (a) appare un decodificatore.<br/>
Vi sono '''n''' coppie di inputs e '''2<sup>n</sup>''' uscite. Come si vedrà nei capitoli seguenti, una porzione di una parola di istruzione di un calcolatore digitale costituisce un codice operativo ed il decodificatore utilizza tale codice per identificare l'istruzione da seguire e dare inizio alla sua esecuzione.<br/>
L'uscita di un decodifcatre può essere inferiore a '''2<sup>n</sup>''' terminali, se lo si desidera.<br/>
Una variante di un decodificatore può essere un traduttore che traduca, per esempio, un numero in codice binario decimale nella corrispondente cifra decimale.<br/>
In questo caso vi sono quattro coppie di input (nel caso di un codice a quattro bit) e 10 uscite che rappresentano le 10 cifre decimali.<br/>
In fig.3.4.6(b) viene mostrato un codificatore: in esso vi sono '''2<sup>n</sup>''' input e '''n coppie''' di outputs.<br/>
Per esempio, le ventisei lettere dell'alfabeto possono essere codificate mediante ventisei combinazioni di cinque variabili booleane.<br/>
In fig.3.4.7.(a) viene mostrata una matrice di selezione . In questa matrice vi sono due gruppi di inputs e una uscita.<br/>
Un gruppo, costituito da '''2<sup>n</sup>''' terminali di inputs, è connesso alla sorgente dei segnali, e l'altro grippo , costituito ds da '''n''' coppie di inputs, viene attivato da un codice selezionato.<br/>
In uscita , ad ogni istante, compare un solo segnale. Per esempio, una parola seriale può essere letta dal dispositivo di un canale selezionato su tamburo magnetico.<br/>
In questo caso le '''n''' coppie di input di fig.3.4.7(a) rappresentano l'indirizzo del canale, i '''2<sup>n</sup>''' input provengono dal dispositivo di lettura e l'output dà la parola letta.<br/>
Viceversa, un distributore, come da fig.3.4.7(b), ha '''2<sup>n</sup>''' uscite, un segnale sorgente ed '''n''' coppie di input.<br/>
Il segnale viene distribuito nelle varie uscite mediante una data combinazione delle '''n''' coppie di entrata.<br/>
 
[[File:Matrice di commutazione usata come commutatore.png|right]]<br/>
Per esempio, una parola seriale che arriva da una sorgente di segnali viene distribuita al canale selezionato su tamburo magnetico.<br/>
Se le '''n''' coppie di fig.3.4.6(a) provengono da un contatore binario che conteggia una sequenza di impulsi di orologio, il circuito risultante si dice commutatore (fig.3.4.8):<br/>
In un commutatore , le uscite sono selezionate una dopo l'altra, secondo la sequenza degli stati del contatore.<br/>
Per esempio, un commutatore può essere usato per inviare segnali ai vari canali secondo una particolare sequenza temporale.<br/>
Le matrici possono essere anche usate come generatori di sequenza o come filtri di sequenze.<br/>
 
 
::3.4.6 - ''Esempi di matrici di commutazione''
[[File:Full adder con AND-OR matix.png|left]]<br/>
[[File:Full adder con OR-AND matirx.png|right]]<br/>
[[File:Tabella della verità (fig.3.4.11).png|right]]<br/>
[[File:Matrici booleane.png|right]]<br/>
[[File:Matrice di conversione (codice 8.4.2.1-codice decimale).png|right]]<br/>
 
(.a)- Un Full-adder può essere considerato una matrice di commutazione: le equazioni '''3.4.2''' e '''3.4.2''', ne danno la rappresentazione booleane.<br/>
 
In '''fig.3.4.9''' compare il diagramma logico: la porzione di sinistra del circuito è costituito da una matrice rettangolare di porte di AND.
 
vi sono solo sette porte di '''AND''' in quanto nelle equazioni 3.4.1, 3.4.2, compaiono solo sette prodotti fondamnetali (sugli otto possibili determinati dalle tre variabili booleane).
 
Le linee orizzontali aggiuntive costituiscono gli '''input''' dei due circuiti '''OR''' i cui '''output''' sono '''S''' e '''C<sub>0</sub>''': la disposizione delle connessioni degli input per le porte '''OR''' corrisponde alla disposizione dei bit '''1''' e '''0''' delle righe nella matrice booleana '''B''' che compare in '''3.4.3''' per la rappresentazione matriciale del '''Full-adder'''.
 
La matrice rappresentativa di un '''Full-adder''' viene chiamata una '''AND-OR matrix'''.<br/>
 
Se la sintesi del circuito viene fatta partendo dalle operazioni '''3.4.4''', la matrice risultante viene chiamata '''OR-AND matrix''' (fig.4.4.10)
 
 
(.b)- La matrice rettangolare di fig.3.4.11 è la sintesi della tabella della verità posta qui sul lato destro.<br/>
 
La matrice rappresenta un traduttore che converte un digit codificato nel codice binario '''8.4.2.1''', nel corrispondente digit decimale.
 
Poiché delle sedici combinazioni possibili dovute alle quattro variabili booleane solo le prime 10 vengono prese in considerazione, la matrice di fig.3.4.11, è il diagramma logico delle matrici booleane seguenti
 
Analogamentesi possono costruire matrici di conversione relative ai codici tipo '''ad eccesso ditre'''. etc..
 
 
 
(.c)- Le matrici '''a)''' e '''b)''' sono rappresentate in forma booleana da matrici booleane di tipo elementare.<br/>
Volendo usare matrici a più livelli, si possono usare matrici booleane di forma non elementare.<br/>
Un circuito di confronto tra due numeri binari è anch'esso un circuito a più uscite: siano '''A''' e '''B''' le due parole binarie da confrontare. Il modo di operare del comparatore è descritto dalle seguenti equazioni booleane (supponendo che '''A''' e '''B''' siano costituite da tre bit ciascuna):<br/>
[[File:Comparatore realizzato mediante matrice.png|right]]
 
[[File:Forma matriciale non elementare.png|right]]<br/>
 
 
:::<math>f=f_1 f_2 f_3</math>
:::<math>f_1=\bar A_1\bar B_1+A_1B_1</math>
:::<math>f_2=\bar A_2\bar B_2+A_2B_2</math>
:::<math>f_3=\bar A_3\bar B_3+A_3B_3</math>
 
 
 
 
 
 
Le funzioni '''f<sub>1</sub>''', '''f<sub>2</sub>''', '''f<sub>3</sub>''' diventano rispettivamente uguali ad '''1''' quando la prima, la secondas e la terza coppia di '''bit''' corrispondenti sono uguali e la funzione '''f''' diventa '''1''' quando le '''f<sub>1</sub>''', '''f<sub>2</sub>''', '''f<sub>3</sub>''' sono tutte uguali ad '''1'''.<br/>
 
Le quattro funzioni possono essere scritte mediante la forma matriciale non elementare rappresentata a destra::
 
Questa funzione viene realizzata dalla matrice di fig.3.4.12. Questa è una matrice AND-OR-AND con 21 input. Se la funzione ì viene scritta mediante prodotti fondamentali la corrispondente matrice rettangolare richiede 56 inputs.
 
 
::3.5- ''Generatori di sequenze binarie''<br/>
Per sequenza binaria si intende una sequenza temporale di bit '''1''' e '''0'''., L'intervallo di tempo che intercorre tra due bit adiascenti viene chiamato '''bit time''' o '''digit time'''.<br/>
Un numero decimale codificato in '''BCD''' può essere rappresentato con diverse sequenze binarie. Per esempio, consideriamo il numero decimale '''159'''. Nel codice '''8.4.2.1''' esso diventa '''001,0101,10001'''.<br/>
In fig.3.5.1 vengono fatti vedere quattro possibili modi di rappresentare questo numero.<br/>
[[File:Codici.png|right]]<br/>
In fig.3.5.1(a), tutti i digits e i bits appaiono in una sequenza binaria. essa è una rappresentazione del tipo '''serial digit-serial bit'''.<br/>
Se i digit arrivano sequenzialmente mentre i bit sono in parallelo (fig.3.5.1(b)), si ha una rappresentazione '''serial digit-parallel bits'''<br/>
In fig.3.5.1(c) i digits sono in parallelo e i bits in serie: si ha quindi una rappresentazione '''parallel digit-serizal bits'''<br/>
In fig.3.5.1(d) sia i bits che i digits sono in parallelo. avremo così una rappresentazione '''parallel digit.parallel bits'''<br/>
In un calcolatore digitale lascelta della rappresentazione dipende da diverse considerazioni quali la velocità di calcolo, il numero dei componenti ect.<br/>
Una matrice di commutazione può essere considerata come un filtro di sequernza o un generatore di sequenza.<br/>
Se la matrice filtra secondo un certo criterio una sequenza di input, viene detta '''binary sequence filter''': tali sono ad esempio il full adder ed il traduttore. Per ogni insieme di input viene prodotto come output un altro insieme di sequenze binarie.<br/>
 
Se viene considerato come input di una matrice solo una certa scelta di sequenze binarie e l'uscita è uconosciuta sequenza , si dice che la matrice è un '''binary sequence generator'''.<br/>
[[File:Generatore di sequenze binarie.png|right]]<br/>
[[File:Matrice per generazione P greco.png|left]]<br/>
[[File:Matrice booleana di tavola 3.5.4..png|right]]<br/>
[[File:Generatore dellq costante P greca tramite una matrice AND-OR.png|right]]<br/>
In fig.3.5.2 viene mostrato un generatore di sequenze binarie: un contatore binario conteggia gli impulsi di un orologio: per ogni stato del contatore, la matrice produce un output costituito da un digit '''BCD'''<br/>
Quindi mentre un contatore binario conteggia, viene generato un numero decimale del tipo '''serial-digit parallel bit'''.<br/>
La matrice descritta in tav.3.5.3 permette di generare la costante '''π''': l'output del contatore binario è rappresentato mediante le lettere '''A,B,C,D''' e l'output della matrice dalle lettere '''W,X,Y,Z'''.<br/>
Entrambi gli output sono espressi in numeri binari. il contenuto delle colonne '''W,X,Y,Z''' rappresenta il numero decimale 3141592653589793 , dove si assume che la virgola sia posta tra i primi due bit più significativi.<br/>
Le quattro funzioni di output possono essere scritte partendo dalla tavola 3.5.3. Se queste funzioni vengono minimizzate, si ottiene la matrice booleana di tav.3.5.4.<br/>
La matrice booleana è in forma elementare: in fig.3.5.5 compare un generatore della costante '''π''' sotto forma di '''AND-OR MATRIX'''.
 
 
::3.6-''Semplificazione delle matrici booleane''<br/
Nei paragrafi precedenti è stato mostrato come un circuito di commutazione con output multiplo può essere rappresentato mediante una matrice booleana d forma canonica, di forma elementare o non.<br/>
Nel seguito verranno riassunte le caratteristiche di una matrice booleana:
::1) Ogni riga della matrice rappresenta una funzione booleana ovvero un output della matrice di commutazione.<br/>
Il numero delle righe nella matrice non può essere ridotto a meno che una riga non sia composta da soli zeri oppure due o più righe siano identiche.<br/>
::2) Ogni colonna della matrice rappresenta un prodotto (od una somma).<br/>
Il numero delle colonne è riducibile e si deve cercare di renderlo minimo.<br/>
::3) Se una riga della matrice consiste di tutti 0, la riga ed il suo output possono essere tolti dalla matrice.<br/>
::4) Se una colonna nella matrice consiste di tutti 0, il termine corrispondente nella matrice [n] o [M] può essere eleminato.<br/>
::5) Se vi è un solo '''1''' in ogni riga, la matrice di commutazione consiste di sole porte di '''AND''' (oppure di OR).<br/>
::6) Se vi è più di un '''1''' in almeno una riga, la matrice di commutazione è una matrice '''AND-OR''' quando la matrice della funzione è della forma '''[m]''' oppure una matrice '''OR-AND''' se la matrice della funzione è della forma '''[M]'''.<br/>
::7) Quando un output di una matrice booleana, risulta essere una variabile di un prodotto (o di una somma) di un'altra rappresentazione matriciale, la risultante matrice di commutazione ha due o più livelli.<br/>
Con la semplificazione di una matrice booleana, si ottiene di conseguenza quella della matrice di commutazione risultante.<br/>
Il procedimento che si segue è quello di minimizzare le singole funzioni booleane con i soliti metodi.<br/>
Se la matrice data è in forma canonica e non può essere minimizzata e il numero di bit '''1''' è superiore a quelli '''0''', la matrice '''B''' booleana complementare risulta più semplice.<br/>
La semplificazione può essere ottenuta talvolta esprimendo la matrice in forma non elementare.
 
 
::3.7-''generazione di segnali di controllo.''<br/>
Un calcolatore digitale opera per passi successivi e durante ogni passo viene eseguita una micro-istruzione. Esempi di micro-istruzioni sono gli '''schift''', il '''conteggio''', il '''trasferimento''', la '''somma''', l '''azzeramento''', la '''complementazione'''. Una sequenza di '''micro-istruzioni''' costruita per raggiungere un determinato scopo costituisce una '''operazione'''.<br/>
Un calcolatore digitale è progettato per eseguire un certo insieme di operazioni. Queste operazioni son codificate mediante un certo numero di bits: specificando il codice operativo tramite i bits che fanno parte di una voce si puo informare il calcolatore di eseguire la corrispondente operazione.Per le istruzioni semplici , ogni istruzione consiste in un codice operativo e in un indirizzo (vedere cap.IV parte II).<br/>
Il programmatore scrive una sequenza di istruzioni e questa costituisce un programma capace di risolvere un certo problema.<br/>
Quando un calcolatore riceve un'istruzione, il codice operativo contenuto in quest'ultima viene trasferito e memorizzato in un registro di operazioni. Sono necessari allora dei circuiti logici capaci di generare in corrispondenza al codice operativo dei segnali di controllo appropriati che comandano una sequenza di micro-operazioni.<br/>
[[File:Configurazione di un generatore di segnali di controllo.png|right]]<br/>
La fig.3.7.1 mostra una semplice configurazione per la generazione di segnali di controllo.<br/>
Essa è costituita da un registro, un decodificatore, un orologio, un distributore di livelli temporali, una matrice di controllo.<br/>
Supponiamo che in un calcolatore siano previste 16 operazioni e che queste siano codificate con un codice operativo a 4 bit:
siano '''f<sub>i</sub>''' con '''i''' da 0...a 15.<br/>
Assumiamo che vi siano 10 micro-operazioni (con cui vengono formate 16 sequenze di micro operazioni rappresentative delle sedici operazioni) e che i segnali di controllo per queste micro-operazioni siano designate con '''m<sub>j</sub>''', j=0,...,9.<br/>
Il fine perseguito dal circuito di fig.3.7.1 è quello di generare, per ogni codice operativo contenuto nel registro delle operazioni, una corrispondente sequenza di segnali di controllo di micro-operazioni.<br/>
Quando la parte del codice operativo di una istruzione viene memorizzata nell'Operation register, il decodificatore a 16 linee di uscita (ognuna per uno dei 16 codici operativi) attiva una e una sola linea.<br/>
[[File:Clock pulses and timing levels.png|right]]<br/>
Nello stesso istante, dei livelli temporali vengono generati mediante un orologio da un '''timing level generator'''.<br/>
Supponiamo che vi siano 5 linee di uscita del generatore di livelli ed indichiamole con '''t<sub>k</sub>''' k=1,...,5: i livelli generati da tali linee vengono mostrati in fig.3.7.2.<br/>
Questi livelli costituiscono una sequenza temporale chiamata '''ciclo temporale di base'''<br/>
Il numero di livelli in un ciclo base è scelto generalmente in modo da poter eseguire una istruzione (quindi controllare una sequenza di micro-operazioni).<br/>
Per certe istruzioni quali la moltiplicazione e la divisione spesso vengono usati più di un ciclo base e quindi viene aggiunto un contatore (che non figura in fig.3.7.1) in modo da conteggiare il richiesto numero di cicli base. L'nput della matrice di controllo è costituito dalle 16 linee '''f<sub>i</sub>''', output del codificatore e dalle 5 linee '''t<sub>k</sub>''', outputs del generatore di livelli temporali.<br/>
La matrice ha 10 linee di uscita e il segnale di ciascuna di queste linee controlla una specifica micro-operazione.<br/>
Questi segnali sono rappresentati dalla lettera '''m<sub>j</sub>'''
Ogni mirco-operazione è realizzata DALLA COMBINAZIONE DEL SEGNALE DI CONGTROLLO E DA UN SEGNALE DI OROLOGIO.<BR/>
Le funzioni relative alla matrice di controllo sono, per esempio, quelle del seguente sistema di equazioni logiche:<br/>
:::::<math>m_0=(f_3t_1+f_7t_3+f_9t_4)p</math><br/>
:::::<math>m_1=(f_8t_1+f_4t_2+f_{12}t_5)p</math><br/>
:::::---------------<br/>
:::::<math>m_9=(f_{11}t_2+f_7t_4+f_{15}t_5)p</math><br/>
dove '''p''' rappresenta il segnale dell'orologio. La prtima equazione dice che la micro-operazione '''m<sub>0</sub>''' è controllata dal codice operativo al livello temporale '''t<sub>1</sub>''', o dal codice operativo '''f<sub>7</sub>''' al livello '''t<sub>3</sub>''', o dal codice operativo '''f<sub>9</sub>''' al livello '''t<sub>4</sub>''': la micro-operazione viene eseguita quando compare il segnale '''p''' dell' orologio. La matrice di controllo del sistema di equazioni logicheè essenzialmente una matrice di commutazione '''AND-OR'''.
 
===Progetto logico di un calcolatore digitale===
Nei capitoli precedenti sono stati descritti i circuiti logici capaci di manipolare le informazioni e di memorizzarle ed è stato presentato un metodo algebrico utile alla rappresentazione di questi circuiti.<br/>
Nel presente capitolo si cercherà di presentare il progetto logico di un semplice calcolatore digitale.
 
:4.1-''Progetto del calcolatore''<br/>
Un calcolatore digitale opera mediante delle informazioni , numeriche o di altro tipo, rappresentate in forma digitale.<br/>
Dal punto di vista del progetto logico, un calcolatore digitale può essere idealmente descritto come l'insieme de dispositivi di memoria bistabili (per es. Flip-Flop) connessi da reti logiche.<br/>
Lo stato di queste memorie di tipo discreto cambia in certi istanti; lo stato iniziale viene fissato dal programma.<br/>
La programmazione di un problema per un calcolatore digitale consiste nella preparazione di una sequenza di istruzioni mediante la quale il problema dato viene risolto dal calcolatore.<br/>
Per questo fine, la programmazione comprende l'analisi del problema, la preparazione di un diagramma a blocchi, e la codifica delle istruzioni. Il progetto di un calcolatore digitale può essere diviso in tre fasi: progetto del sistema, progetto logico, progetto dei circuiti.<br/>
Nella prima fase vengono prese in considerazione le richieste del problema e le specifiche del calcolatore tenendo conto del costo, delle dimensioni, della manutenzione, ecc. Questa fase richiede siano precisate le operazioni richieste (aritmetiche, logiche , e altre), la velocità delle operazioni , i metodi per il controllo degli errori ed altri dispositivi quali:registri indice, interruttori, ecc., capaci di fornire un uso più efficiente della macchina.<br/>
Si può includere in questa fase la selezione del tipo di circuiti logici, il tipo di memoria e le sue capacità, la qualità e la quantità dei dispositivi di '''input-output'''.<br/>
La seconda fase stabilisce il formato della parola, la configurazione della macchina e l istruzioni di macchina; questa fase termina una volta stabilito un insieme di equazioni logiche o un insieme di diagrammi logici dettagliati.<br/>
La terza fase comporta il progetto dei circuiti logici, della memoria e dei dispositivi di '''ingresso-uscita'''.<bra sua volta, />
Il progetto logico di un calcolatore può essere, a sua volta, diviso in tre fasi: progetto funzionale, progetto simbolico, progetto dettagliato. Nella prima fase viene stabilito, innanzi tutto, il formato della parola. Vengono scelti i registri, i contatori, le matrici, gli addizionatori e gli altri elementi; questi vengono completati con la memoria scelta ed i dispositivi di input-output in modo da stabilire un particolare insieme di istruzioni di macchina:<br/>
Nella seconda fase viene stabilita la sequenza di controllo del programma e le istruzioni di macchina vengono espresse in istruzioni simboliche. Durante questa fase è utile uno studio dettagliato della sequenza di operazioni relative alle istruzioni di macchina<br/>
Nella terza fase viene elaborato un insieme di equazioni logiche od un insieme di diagrammi logici che descrivono le singole le singole operazioni del calcolatore.<br/>
Nell'attuale progetto logico di un semplice calcolatore digitale , vengono costruite in modo completo le equazioni logiche ; i diagrammi logici verranno mostrati abbastanza dettagliatamente in modo che il diagramma copleto possa essere ricavato dal lettore.
 
::4.2-''Progetto del sistema''<br/>
Il calcolatore che verrà illustrato nel seguito fornisce un esempio di progetto logico di un calcolatore digitale capace di memorizzare un programma (stored-program computer) e capace di eseguire un certo numero di operazioni elementari quali la somma, la sottrazione, lo shift a destra e a sinistra di un bit, il trasferimento condizionato e incondizionato. Per semplicità il funzionamento del calcolatore si considera sincrono, binario e parallelo.
 
::4.3-''Progertto funzionale''<br/>
La prima fase del progetto del progetto logico è il progetto funzionale: innanzi tutto viene stabilito il formato della parola.<br/>
La configurazione del calcolatore viene formulata scegliendo i registri, le matrici, la memoria ed i dispositivi di '''input-output'''.
Vengono stabilite le istruzioni di macchina e si dà una breve descrizione della sequenza operativa.<br/>
 
::''Formatto della parola''<br/>
Una parola (o voce) in un calcolatore è un insieme ordinato di digits che viene trattato dal calcolatre come una unità unitaria.<br/>
Si dice che il calcolatore ha una struttura a parole (a voci) se un da e che questa sia piccola.to numero o una istruzione viene rappresentata mediante una parola.<br/>
Per facilitare lo studio del nostro ipotetico calcolatore, supponiamo di fissare la lunghezza della parola e che questa sia piccola. Come vedremo una parola corta consente un numero piccolo di istruzioni di macchina e di indirizzi di memoria.<br/>
La lunghezza di parla scelta per questo esempio è di '''9''' bits:
::::::<math>x=x_o x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8</math><br/>
Una parola viene trattata dalla unità aritmetica come un numero: in questo caso il formato della parola viene chiamato '''formato del numero '''.<br/>
Sempre in questo esempio, il numero viene dato in una rappresentazione binaria frazionaria con i numeri negativi dati dal complemento a 2 del corrispondente numero positivo.<br/>
Il punt0 binario viene rappresentato idealmente tra i bits '''x_0''' e '''x_1''', mentre '''x_0''' rappresenta il segno.<br/>
Poichè il valore di un numero binario con segno è compreso nell'intervallo '''-1≤x<1''' il nostro calcolatore viene chiamato '''binary fractional computer'''.<br/>
Quanto detto non costituisce una vera restrizione per i calcoli, poiché un numero furi dell'intervallo sopra indicato può essere rappresentato nel calcolatore moltiplicandolo per '''2<sup>n</sup>''', con un appropriato valore di '''n'''.<br/>
La moltiplicazione per '''2<sup>n</sup>''' non è altro che una operazione di '''shift'''.<br/>
Poiché il punto binario è fisso, il calcolatore è un '''fixed-point computer'''.<br/>
Esso differisce da un '''floating-point computer''', capace di lavorare con una aritmetica in virgola mobile.<br/>
[[File:Formato istruzioni.png|right]]<br/>
La parola considerata come istruzione è suddivisa in due parti (campi): il codice operativo e l'indirizzo. Il formato istruzione del nostro calcolatore sarà quindi:<br/>
Con un solo indirizzo, questo formato viene chiamato '''simple -address format'''<br/>
La porzione di tre bit chiamata codice operativo costituisce un codice binario di una operazione di macchina: perr es. esso indica un trasferimento, una operazione aritmetica o logica.<br/>
I sei bits della parte indirizzo costituiscono il numero dell'indirizzo di memoria di una voce; questa parola di memoria viene chiamata operando. Un tale formato di istruzione indica che una operazione (specificata dalla porzione di codice operativo) viene eseguita sull'operando conservato nella posizione di memoria specificata dalla porzione di indirizzo.<br/>
Certe istruzioni non necessitano di operandi:in questo caso la parte relativa all'indirizzo può essere usata per altri scopi.
 
 
::''configurazione del calcolatore''<br/>
[[File:Configurazione di un semplice calcolatore digitale.png|right]]<br/>
[[File:Memory resgister.png|right|right]]
La configurazione del nostro calcolatore ipotetico è mostrata in fig.4.3.1.<br/>
Per essere uno '''stored-programm computer''' il calcolatore deve memorizzare sia i numeri che le istruzioni.<br/>
Questa considerazione fa introdurre l'unità di memoria (indicata cin i registri '''M'''): la sua capacità è di 64 parole di 9 bits ciascuna.<br/>
Come mostrato in figura 4.3.2, questi flip-flop sono denotati con '''M<sub>(ji)</sub>''', dove '''j''' indica la '''J<sup>(sima)</sup>''' parola ed '''i''' il '''bit<sup>(simo)</sup>.<br/>ene messo tra il registr '''C'''
Ad ogni locazione di memoria viene attribuito un indirizzo : la selezione degli indirizzi viene fatta mediante il '''memory register C'''.<br/>
Il registro '''C''' consiste di 6 '''Flipo-Flop''' (fig.4.3.2).<br/>
Un duplicatore di indirizzi viene messo tra il registro '''C''' e la memoria.<br/>
Perché il calcolatore possa eseguire operazioni aritmetiche, occorre introdurre una unità aritmetica, capace in questo caso semplice di sole somme e sottrazioni.<br/>
Un accumulatore (registro A) è sufficiente come unità aritmetica: esso consiste in 9 bits, in modo da memorizzare una intera parola (fig.4.3.2)
 
[[File:Registri di un calcolatore digitale semplice.png|right]]
 
Quando una istruzione viene presa dalla memoria, essa viene conservata temporaneamente in un registro per essere successivamente eseguita. L'apposito registro viene chiamato '''intruction register''' '''(R)''' ed è ovviamente di 9 bits<br/>
I bit '''R<sub>0</sub> R<sub>1</sub> R<sub>2</sub>''' memorizzano il codice operativo, mentre i 6 bits da '''R<sub>3</sub>''' a '''R<sub>9</sub>''' conservano la parte indirizzo della parola istruzione.<br/>
La necessità di eseguire un controllo di sequenze introduce la '''program control unit'''.<br/>
Il nostro calcolatore ha un '''operation counter''' '''(F)''', di 4 bits (fig.4.3.2), I tre bits '''F<sub>2</sub> F<sub>3</sub> F<sub>4</sub>''', danno il codice operativo.<br/>
L'operation counter conteggia gli impulsi di un orologio e genera i segnali di controllo mediante un decodificatore di operazioni.<br/>
Un generatore di impulsi d'orologio da una sequenza di impilsi temporsali con periodo '''τ'''.<br/>
L'impulso di orologio serve a sincronizzare le operazioni del calcolatore.<br/>
Un altro clock-pulse generator ( non indicato in fig.4.3.1) genera un singolo impulso: esso è sotto il controllo dell'operatore che in questa maniera, può osservare il procedere del calcolatore passo per passo.<br/>
Altro dispositivo di controllo è il Fliop-Flop '''G''', capace di avviare od arrestare le operazioni del calcolatore.<br/>
Il controllo del Flipo-Flop '''G''' è accessibile all'esterno mediante lo switch (interruttore) '''S'''.<br/>
Come dispositivi di input capaci di inserire in memoria dati e istruzioni, vi sono gli switchs '''Q''' mentre per fornire i risultati ci possono essere dei dispositivi luminosi ( non indicati in fig.4.3.1). Sia gli switchs '''Q''' che i dispositivi luminosi sono connessi ai singoli bit di memoria.<br/>
I dispositivi luminosi sono anche connessi ai singoli bit dei registri in modo da osservare le operazioni del calcolatore durante eventuali test.
 
 
::''Istruzioni di macchina''<br/>
Formuliamo ora l'insieme di istruzioni che la macchina è capace di eseguire.<br/>
La lista di istruzioni capace di risolvere un certo problema deve essere ovviamente codificata prima di essere caricata nel calcolatore in modo che le istruzioni stesse siano comprensibili alla macchina:<br/>
Le istruzioni eseguibili da questo calcolatore ipoteticosno raggruppate in tabella 4.3.3 seguente<br/>
{|
|-
! Codice........... !! Istruzione !! Desceizione dell'istruzione
|-
| 000 uvwxyz || Addizione || Prende il numero dalla memoria all'indirizzo uvwxyz, lo mette nel regisro R; somma il conternuto di R al contenuto del registro A e conserva il risultato nel registro A.
|-
| 001 uvwxyz || Sottrazione || Prende il numero dalla memoria all'indirizzo uvwxyz, lo mette nel regisro R; sottrae il conternuto di R al contenuto del registro A e conserva il risultato nel registro A.
 
|-
| 010 uvwxyz || trasferimento condizionato || Se A<sub>0</sub>=1 (segno di A negativo) si prende come nuova istruzione quells contenuta nella memoria all'indirizzo uvwxyz; se A<sub>0</sub>=0 (segno di A positivo), si prende la nuova istruzione in sequenza.
|-
| 100 uvwxyz || trasferimento incondizionato || Prende la nuova istruzione dalla memoria di indirizzo uvwxyz.
|-
| 011 uvwxyz || Memorizzazione || Memorizza il contenuto del registro A nell'indirizzo uvwxyz di memoria
|-
| 1011000 yz || Shift a destra || Il contenuto del registro A viene shiftato a destra di 1 bit.|-
|-
| 1010100 yz || Shift a sinistra || Ilo contenuto del registro A viene shiftato a sinistra di 1 bit.
|-
| 1010010 yz || Azzera l'accumulatore || Si azzera l'accumulatore A
|-
| 1010001 yz || Stop || Stop della macchina e nel registro C compare l'indirizzo 000000.
|}
 
Poiché la macchina non o0mpie alcuna operazione in relazione agli organi di input-output, non sono previste istruzioni relative ad operazioni di ingresso-uscita.<br/>
La quantità uvwxyz indica uno dei 64 possibili indirizzi di memoria.<br/>
E' da osservare che le ultime quattro istruzioni di tabella 4.3.3 non fanno riferimento a posizioni di memoria (cioè non è necessario un operando e quindi la parte indirizzo può essere utilizzata nella codificazione del codice operativo).<br/>
Quindi, pur avendo solo 3-bit a disposizione del codice, si hanno in effett nove operazioni.
 
::''sequenza operativa del calcolatore''<br/>
Facendo riferimento alla configurazione di fig-4.3.1, le istruzioni codificate che formano un programma vengono inserite per prima cosa in memoria tramite l'interruttore '''Q''' attraverso la porta '''A<sub>7</sub>'''.<br/>
L'operatore pone l'interruttore '''S''' in posizione '''ON''' e la macchina incomincia a funzionare.<br/>
Lo stato di tutti i registri viene cambiato tramite i segnali di controllo provenienti dallo '''operation counter'''.<br/>
Questi cambiamenti possono solo aver luogo in concomitanza degli impulsi di orologio.<br/>
Quando la macchina opera per la prima volta, il contenuto del registro '''C''' è '''000000'''; per cui la prima parola di memoria è la prima istruzione.<br/>
Il segnale di controllo '''h''' trasferisce questa istruzione dall'unità di memoria al registro '''R''' tramite le porte '''A<sub>3</sub>''' e '''A<sub>4</sub>'''.<br/>
La parte codice operativo della istruzione che si trova ora nel registro '''R''' viene trasferita al registro '''F''' tramite la porta '''A<sub>8</sub>''' sotto il controllo del segnale '''i''', mentre il segnale di controllo '''c''' trasferisce la parte indirizzo tramite la porta '''A<sub>1</sub>''' al registro '''C'''.<br/>
Il codice operativo nel registro '''F''' è ora decodificato e vengono generati i comandi necessari all'esecuzione dell'istruzione,<br/>
Per le operazioni aritmetiche, il segnale di controllo '''d''' trasferisce, attraverso le porte '''A<sub>3</sub>''' e '''A<sub>4</sub>''', un numero dalla memoria al registro '''R''', ed il segnale di controllo '''g''' determina, mediante la porta '''A<sub>9</sub>''', la realizzazione di una specifica operazione aritmetica sul numero contenuto in '''R''' e su quello inizialmente in '''A'''.<br/>
Per le operazioni di '''shift''' e di azzeramento dell'accumulatore si ha il segnale di controllo '''f'''.<br/>
L'operazione di trasferimento relativa alla sequenza di controllo avviene sotto i segnali '''b''' o '''H''', mentre il segnale '''e''', selezionando la porta '''A<sub>6</sub>''', conserva mediante la porta '''A<sub>5</sub>''', il controllo dellaccumulatore nella memoria all'indirizzo che si trova nel registro '''C'''.<br/>
L'ultima istruzione del programma in memoria è in genere una istruzione di '''stop''': l''''operation counter''' invia il segnale di controllo '''a''' al Flip-Flop '''G''' e la macchina si ferma.
 
::4.4-''Fase di progettazione simbolica''<br/>
In questa fase viene stabilita la sequenza di controllo del programma e le operazioni di macchina vengono rappresentate mediante espressioni simboliche.<br/>
Tra i simboli già introdotti nel Cap.3 Parte II<sup>a</sup>, dobbiamo introdurre il seguente: '''< >''', con cui indichiamo l'indirizzo di una parola di memoria e precisamente '''M<C>''' indica la locazione di memoria il cui indirizzo è nel registro '''C'''. <br/>
Le istruzioni indicate in tabella 4.3.3 vengono ora espresse in termini di espressioni simboliche elencate nella seguente tabella 4.4.1 <br/>
{|
|-
! Istruzioni.....................................................<br/>
!! Operazioni richieste............... !! Operazioni ausiliarie
|-
| Addizione (000uvwxyz) || (M<C>=>R ; (R)+(A)=>A || (Ad[R])=>C ; (C)+10=>C
|-
| Sottrazione (001uvwxyz) || (M<C>R=>R ; (A)-(R)=>A || come sopra
|-
| Trasferimento condizionato (010uvwxyz) || nessuno || come sopra se A<sub>0</sub>=0 nessuno se A<sub>0</sub>=1
|-
| Memorizzazione (011uvwxyz) || (A)=>M<C> || (Ad[R])=>C ; (C)+1=>C
|-
| Trasferimento incondizionato (100uvwxyz) || nessuno || nessuno
|-
| Shift right (1011000) || (A<sub>{i-1}</sub>=>A<sub>i</sub> ; (A)<sub>0</sub>=>A<sub>0</sub> || (Ad[R])?>C ; (C)+1=>C
|-
| Test Shift left (1010100yz || (A<sub>i+1</sub>)=>A<sub>i</sub> ; (A<sub>0</sub>)=>A<sub>8</sub> || come sopra
|-
| Azzeramento accumulatore (1010010yz || 0=>A || come sopra
|-
| Stop (10010001yz) || 0=>G ;0=>C ; 1=>F || nessuna
|-
| Comando d'avvio (manuale) || 1=>G || nessuna
|-
| Comando inserimento dati (manuale) || (Q<sub>ij)</sub>=>M<sub>ij</sub> || nessuna
|} <br/>
L'addizione mostrata in tabella 4.3.3 è costituita da due operazioni La prima operazione consiste nel ''prendere un numero dalla memoria di indirizzo '''uvwxyz''' e metterlo nel registro '''R''''', simbolicamente.<br/>
:::::<math>(M<C>)\Rightarrow R</math><br/>
dove '''C''' contiene l'indirizzo di memoria '''uvwxyz.<br/>
La seconda operzione è: ''addizionare il contenuto del registro '''R''' al contenuto del registro '''A''', e conserva il risultato nel registro '''A'''.
Simbolicamente si ha:<br/>
:::::<math>(R)+(A)\Rightarrow A</math><br/>
Nella tabella 4.4.1 compaiono le due espressioni simboliche per la istruzione di addizione. Si hanno inoltre due espressioni simboliche simili alle precedenti , per la sottrazione.<br/>
L'istruzione di memorizzazione del contenuto del registro '''(A)''' nella memoria di indirizzo '''uvwxyz''', si esprime come:<br/>
:::::<math>(A)\Rightarrow M<C></math><br/>
dove '''C''' contiene il riferimento all'indirizzo di memoria '''uvwxyz'''.<br/>
L'istruzione di ''shift''' a destra consiste nello spostare il contenuto del registro '''A''' di un bit a destra e simbolicamente:<br/>
:::::<math>(A_{i-1})\Rightarrow A_i\ \ \ \ \ dove\ i=1,....,8</math><br/>
:::::<math>(A_0)\Rightarrow A_0</math><br/>
La seconda espressione dice che lo '''shift''' a destra richiede che il bit più a sinistra del registro '''A''' conservi il valore originale durante l'operazione di scorrimento.<br/>
L'operazione di '''shift''' a sinistra richiede che il contenuto del registro '''A''' sia spostato di 1 bit a sinistra:<br/>
:::::<math>(A_{i+1})\Rightarrow A_i\ \ \ \ \ dove\ i=1,....,7</math><br/>
:::::<math>(A_0)\Rightarrow A_8</math><br/>
Questa operazione di '''shift''' a sinistra muove il bit più a sinistra del registro '''A''' in maniera circolare.<br/>
L'azzeramento dell'accumulatore diventa:<br/>
:::::<math>0\Rightarrow A</math><br/>
L'istruzione di '''stop''' consiste nell'arrestare la macchina e porre nel registro '''C''' il primo indirizzo '''000000'''; simbolicamente:<br/>
:::::<math>0\Rightarrow G\ \ \ \ \ e\ \ \ \ \ 0\Rightarrow C</math><br/>
L'operazione di avvio del calcolo e di inserimento delle istruzioni dei dati in memoria non vengono indicate in tabella 4.4.1 in quanto operazioni manuali.<br/>
Simbolicamente, esse sono:<br/>
:::::<math>1\Rightarrow G\ \ \ \ \ e\ \ \ \ \ (Q_{ji})\Rightarrow M_{ji}</math><br/>
La prima espressione indica il set del Flip-Flop '''G''' mentre la seconda indica l'inserimento del contrnuto dell'interruttore '''Q<sub>ji</sub>''' nel bit di memoria '''M<sub>ji</sub>'''<br/>
 
 
::4.4.1-''Ciclo d'istruzione e ciclo di esecuzione''<br/>
Sia le istruzioni che i dati di un programma capace di risolvere un certo problema vengono inizialmente conservati in memoria.<br/>
Il programmatore scrive queste istruzioni in una sequenza in accordo con l'ordine degli indirizzi di memoria in cui queste istruzioni verranno memorizzate.<br/>
Nel nostro calcolatore ipotetico la prima istruzione del programma viene messa nella posizione '''000000'''.<br/>
Il calcolatore esegue la sequenza di istruzioni conservata in memoria: esso opera secondo una sequenza interna eseguendo ogni istruzione come vengono chiamate , una dopo l'altra, dal programma.<br/>
La sequenza interna passa da un ciclo d'istruzione ad un ciclo di esecuzione.<br/>
Durante il '''ciclo istruzione''' viene presa una istruzione dalla memoria e il calcolatore viene posto nelle condizioni di poter compiere la esecuzione di una sola istruzione.<br/>
Durante il '''ciclo esecuzione''' viene eseguita l'istruzione ed il calcolatore viene posto nelle condizioni di poter tornare al '''ciclo istruzione'''.<br/>
In fig-4.4.2 sono raffigurati entrambi i cicli.<br/>
[[File:Tabella 4.4.2.png|right]]<br/>
Durante la fase del ciclo di istruzione vi sono quattro operazioni (fig-4.4.3a); la prima permette di prendere una istruzione: una parola viene presa dalla memoria il cui indirizzo è nel registro '''C''' (000000 per la prima istruzione ) e trasferita nel registro '''R'''; simbolicamente:<br/>
:::::<math>(M<C>)\Rightarrow R</math><br/>
Il contenuto di '''C''' (memory-address) durante questa operazione è un '''instruction address'''.<br/>
La seconda e terza operazione (che avvengono contemporaneamente) sono operazioni di trasferimento mediante le quali vengono trasferite la porzione del codice operativo dal registro '''R''', Op[R], nella porzione istruzione del registro '''F''', e la parte indirizzo di '''R''', '''Ad[R]''' nel registro '''C''':<br/>
:::::<math>Op[R]\Rightarrow I[F]</math><br/>
:::::<math>Ad[R]\Rightarrow C</math><br/>
A questo istante la la parte indirizzo di '''R''', è un '''operand address''' e quindi non è più l'indirizzo di istruzione menzionato nella fase precedente.<br/>
Dopo il trasferimento la parte di codice operativo fa generare dal decodificatore di operazioni, dei segnali di comando, dando cosi inizio all'esecuzione della istruzione mentre l'indirizzo dell'operando si trova ora nel registro '''R''':<br/>
Normalmente questo '''ciclo istruzione''' è completo: nel nostro calcolatore ipotetico, data la sua semplicità, è necessaria una quarta operazione che trasferisca l'indirizzo della istruzione contenuta in '''C''' nella parte indirizzo di '''R''':<br/>
:::::<math>(C)\Rightarrow Ad[R]</math> <br/>
Il motivo di questa ulteriore operazione è dovuto al fatto che la parte indirizzo del registro '''R''' (operand address) viene trasferita nel registro '''C''' e quindi l'indirizzo della istruzione contenuta in '''C''' (000000 per la prima istruzione) viene perduto.<br/>
[[File:Operazioni durante cicli di istruzione e di esecuzione.png|right]]<br/>
Questo indirizzo della istruzione che è stato preso in considerazione deve essere conservato in qualche maniera in quanto l'indirizzo della nuova istruzione è ottnuto da quello della presente, sommando '''1'''.<br/>
Poiché la parte indirizzo del registro '''R''' è stata trasferita nel registro '''C''' e non è usata per il momento. l'indirizzo della presente istruzione può essere trasferito per una memorizzazione temporanea nella parte indirizzo del registro '''R'''.<br/>
In altre parole, l'indirizzo della presente istruzione contenuto in '''C''' viene trasferito in '''R''' e nello stesso istante l'indirizzo dell'operando contenuto i '''R''' viene trasferito in '''C'''.<br/>
Questi due trasferimenti simultanei sono possibili se si fa l'ipotesi che i Flip-Flop dei registri '''R''' e '''C''' abbiano un delay sufficiente.<br/>
In un calcolatore digitale ordinario con capacità di memorizzazione di programmi c'è generalmente un ulteriore contatore di istruzioni atto a memorizzare l'indirizzo della attuale istruzione e, tramite incremento di 1 unità dopo l'esecuzione di una istruzione si determina l'indirizzo della nuova istruzione da eseguire.<br/>
In tal caso non è necessaria l'operazione di trasferimento da '''C''' ad '''R'''precedentemente descritta.<br/>
Le operazioni che avvengono durante il '''ciclo istruzioni''' sono sempre le stesse , mentre quelle che compaioni durante il '''ciclo esecuzione''' dipendono dal codice operativo dell'istruzione.<br/>
In fig-4.4.3b si è preso in considerazione il ciclo esecutivo di una istruzione d'addizione: esoo incomincia prendendo la parola operando dalla memoria localizzata dall''''operand address''' contenuto in '''C'''. La parola operando è trasferita nel registro '''R''' che viene utilizzato attualmente come memoria temporanea:<br/>
:::::<math>(M<C>)\Rightarrow R</math><br/>
Durante l'operazione di caricamento dell'operando , il contenuto della parte indirizzo di '''R''' che alro non è se non l'indirizzo della attuale istruzione, viene trasferito in '''C''':<br/>
:::::<math>Ad[R]Rightarrow C</math><br/>
L'operando ora contenuto in '''R'' viene addizionato al contenuto del registro '''<a''' (che è un accumulatore):<br/>
:::::<math>(R)+(A)\Rightarrow A</math><br/>
Infine, il contenuto del registro '''C''' (contenente l'indirizzo della attuale istruzione) viene incrementato di '''1''' diventando cosi l'indirizzo della nuova istruzione:<br/>
:::::<math>(C)+1\Rightarrow C</math><br/>
Cosi il ciclo esecutivo risulta completo.<br/>
La nuova istruzione è pronta per essere presa dalla memoria mediante la prima operazione del '''ciclo istruzione''' dell'indirizzo di memoria indicato dal contenuto di '''C'''.<br/>
Nel caso di una istruzione di trasferimento incondizionato, l'indirizzo della nuova istruzione è dato dall'indirizzo dell'operando.<br/>
Nel caso di una istruzione di trasferimento condizionato, la sequenza proce de come nel caso del trasferimento incondizionato , se la condizione è verificata '''(A<sub>0</sub>=1)'''; se la condizione non è verificata (A<sub>0</sub>=0), la nuova istruzione da eseguire viene determinata mediante l'operatore '''(C)+1=>C.<br/>
L'operazione ausiliaria '''(1=>F)''' viene spiegata nel seguito.<br/>
 
 
::-4.4.2 ''Diagramma di stato''<br/>
L'[[w:control unit|unità di controllo]] del programma (registro F) del nostro calcolatore ipotetico consiste in un contatore e in un decodificatore associato (fig-4.3.2).<br/>
Gli stati del contatore rappresentano gli stati del calcolatore; quindi la sequenza degli stati del contatore controlla la sequenza operativa del calcolatore.<br/>
Poiché sono contemplate nove operazioni, sono richiesti all''''operation counter''' nove stati, e ciò implica un minimo di 4 Flip-Flop, '''F<sub>1</sub>,F<sub>2</sub>,F<sub>3</sub>,F<sub>4</sub>'''.<br/>
I Flip-Flop '''f<sub>2</sub>''' e '''f<sub>4</sub>''' costituiscono la parte istruzione del registro '''F(o I[F]); in essi vengono memorizzati i 3 bit della porzione codice operativa del registro istruzioni '''R'''.<br/>
Per un contatore cob quattro flip-flop, si possono presentare 16 stati; essi vengono indicati con la notazione '''f<sub>i</sub>''' in tabella 4.4.4 (l'indice '''i''' rappresenta il numero binario corrispondente di 4 bit).<br/>
ogni atato rappresenta 1 segnale di comando. come si vede da tavola 4.4.4.<br/>
 
 
:::::<math>(tavola\ 4.4.4)\ \ Stati\ dello\ operation\ counter</math>
{|Class="wikitable" style="text-align:center"
|-
! operation counter F<sub>1</sub> F<sub>2</sub> F<sub>3</sub> F<sub>4</sub>.......... !!stato................. !! segnali di comando
|-
| 0 0 0 0 || f<sub>0</sub> || comando di addizione
|-
| 0 0 0 1 || f<sub>1</sub> || comando di sottrazione
|-
| 0 0 1 0 || f<sub>2</sub> || comando di trasferimento condizionale
|-
| 0 0 1 1 || f<sub>3</sub> || comando di imaggazinaggio
|-
| 0 1 0 0 || f<sub>4</sub> || comando ciclo istruzioni
|-
| 0 1 0 1 || f<sub>5</sub> || comando per f<sub>12</sub>, f<sub>13</sub>, f<sub>14</sub>, f<sub>15</sub>
|-
| 0 1 1 0 || f<sub>6</sub> || non usato
|-
| 0 1 1 1 || f<sub>7</sub> || non usato
|-
| 1 0 0 0 || f<sub>8</sub> || comando operazione di addizione
|-
| 1 0 0 1 || f<sub>9</sub> || comando operazione di sottrazione
|-
| 1 0 1 0 || f<sub>10</sub> || comando ciclo istruzioni
|-
| 1 0 1 1 || f<sub>11</sub> || comando operazione aggiunta di 1
|-
| 1 1 0 0 || f<sub>12</sub> || comando di scorrimento a destra
|-
| 1 1 0 1 || f<sub>13</sub> || comando di scorrimento a sinistra
|-
| 1 1 1 0 || f<sub>14</sub> || comando di svuotamento dell'accumulatore
|-
|1 1 1 1 || f<sub>15</sub> ||comando di arresto
|
|}
 
Poiché sono sufficienti 14 stati, i comandi '''f<sub>6</sub>''' e '''f<sub>7</sub>''' non vengono usati. Gli stati '''f<sub>4</sub>''' e '''f<sub>10</sub>'''sono quelli corrispondenti al ciclo istruzione ; gli stati rimanenti corrispondono al ciclo esecutivo.<br/>
Poiché vi sono 9 istruzioni , vi sono nove possibili percorsi da '''f<sub>10</sub>''' a '''f<sub>4</sub>'''; durante il ciclo esecutivo, la sequenza operativa segue una di queste nove vie.<br/>
Quando il calcolatore esegue un programma, non fa altro che percorrere ciclicamente queste vie del diagramma di stato (fig-4.4.5) in accordo con le istruzioni programmate.<br/>
La scelta dei 14 segnali di comando tra i 16 possibili stati del contatore non è del tutto arbitraria ma è stata fatta cercando di semplificare la logica del circuito.<br/>
Infatti gli stati '''f<sub>0</sub>, f<sub>1</sub>, f<sub>2</sub>, f<sub>3</sub>, f<sub>4</sub>, f<sub>5</sub>''' sono relativi a comandi di istruzioni e questa scelta fa si che il Flip-Flop '''F<sub>1</sub>''' sia uguale a '''0''' per tutti i comandi di istruzione , semplificando cosi la logica del circuito.<br/>
Mediante la tabella 4.4.4 e conoscendo la sequenza di controllo relativa ai cicli-istruzione e cicli.esecuzione si può costrure la figura 4.4.5 detta anche diagramma di stato in cui compaiono gli stati del calcolatoredopo le singole operazioni e le operazioni conseguenti ad ogni singolo stato.<br/>
In figura 4.4.5 l'operazione di prendere una istruzione in memoria durante il ciclo-istruzione avviene allo stato '''f<sub>4</sub>''', mentre le altre tre operzioni relative al ciclo-istruzione avvengono allo stato '''f<sub>10</sub>'''.<br/>
La sequenza interna dedl ciclo esecutivodipende dal contenuto dei Flip-Flop '''R<sub>0</sub>, R<sub>1</sub>, R<sub>2</sub>'''.<br/>
Vi sono sei strade: per l'addizione, la sottrazione, il trasferimento condizionato, il trasferimento incondizionato, il comando di memorizzazione, inoltre vi sono le strade che compaiono quando'''R<sub>0</sub>R<sub>1</sub>R<sub>2</sub>''' è 101
e indicano le operazioni di '''left-shift''', '''right-shift''', '''clear accumulator''' e '''stop'''.<br/>
L'operazione che costruisce l'indirizzo relativo all'istruzione successiva (detto anche indirizzo di ritorno) avviene negli stati f<sub>0</sub>, f<sub>1</sub>, f<sub>2</sub>, f<sub>3</sub> e f<sub>5</sub> mentre non è necessaria se l'istruzione appena eseguita è un trasferimento incondizionato.<br/>
Uno zero viene inserito nel Flip-Flop '''G''' allo stato '''f<sub>5</sub>''' se '''C<sub>3</sub>''' è '''1'''.<br/>
L'oprazione di incremento di '''1''' avviene durante lo stato '''f<sub>11</sub>'''.<br/>
L'operazione di prendere dalla memoria l'operando avviene durante gli stati '''f<sub>0</sub>''' e '''f<sub>1</sub>''' mentre le operazioni di addizione e di sottrazione vengono eseguite agli stati '''f<sub>8</sub>''' e '''f<sub>9</sub>''' rispettivamente.<br/>
Allo stato '''f<sub>15</sub>''', il comando di stop inserisce tutti '''0''' nel registro '''C''' e tutti '''1''' nel registro '''F'''.<br/>
L''''operation counter''' continua a conteggiare i segnali dell'orologio ma il suo stato rimane '''f<sub>15</sub>''' a causa dell'operazione '''1=>F''':<br/>
Perciò, sotto il comando di stop il calcolatore non si arresta ma viene sospesa solo la sequenza operativa.<br/
Quando lo switch ''S''' viene messo nello stato '''off''' , il Flip-Flop '''G''' assume lo stato '''0''': il calcolatore continua ad eseguire l'istruzione in corsofino a quando l''''operation counter''', raggiunge lo stato '''f<sub>4</sub>'''.<br/>
A questo punto, l'operation counter assume lo stato '''f<sub>15</sub>''' e rimane in tale stato.<br/>
Quando la sequenza è stata sospesa, può essere ripristinata ponendo lo switch '''S''' nella posizione '''ON'''<br/>
Quando questo accade, il Flip-Flop '''G''' assume lo stato '''1''' e l'operation counter assume lo stato'''f<sub>4</sub><br/>
Poiché il contenuto del registro '''C''' era stato cambiato in '''000000''', il calcolatore comincia dall'istruzione contenuta nella prima posizione di memoria.<br/>
[[File:State-operation diagram of the simple digital computer..png|center]]
 
 
::4.5-''Equazioni logiche''.<br/>
Durante questa fase vengono derivate le equazioni logiche dei circuiti, partendo dalle espressioni simboliche di figura 4.4.5.<br/>
Queste equazioni rappresentano le equazioni di '''input''' dei Flip-flop dei registri '''F,A,C,R,M''' e del Flip-Flop '''G'''.
 
4.5.1-Operation counter.<br/>
Nell'operation counter vi sono quattro Flip-Flop '''F<sub>1</sub>,F<sub>2</sub>,F<sub>3</sub>,F<sub>4</sub>''': esso deve realizzare la sequenza di figura 4.4.5 ed assumere lo stato '''1111''' quando '''G''' è '''0'''.<br/>
Da figura 4.4.5 si ha allora che lo stato del Flip-Flop '''F<sub>1</sub>''' cambia quando dallo stato '''f<sub>4</sub>''' (0100) si passa allo stato '''f<sub>10</sub>''' (1010).<br/>
Cambia inoltre quando '''f<sub>10</sub>''' (1010) diventa '''f<sub>0</sub>''' (0000), con '''R<sub>0</sub>,R<sub>1</sub>,R<sub>2</sub>''' (000).<br/>
In breve lo stato del Flip-Flop '''F<sub>1</sub>''' cambia quando si presenta una delle sei seguenti condizioni.<br/>
::<math>f_10\bar R_0\bar R_1\bar R_2+f_10\bar R_0\bar R_1 R_2+f_10\bar R_0R_1\bar R_2+f_10\bar R_1R_2+f_10R_0|bar R_1R_2+f_10R_0\bar R_1|bar R_2=f_10</math><br/>
Le altre condzioni che detertminano il cambiamento dello stato di '''F<sub>1</sub>''' possono essere dedotte con considerazioni simili, tenendo sempre presente il diagramma di stato di figura 4.4.5.<br/>
Chiamando quindi '''p''' l'impulso d'orologio che commuta i Flip-Flop
, si hanno le seguenti equazioni di '''input''' per '''F<sub>1</sub>, F<sub>2</sub>, F<sub>3</sub>, F<sub>4</sub>'''.<br/>
::<math>f_{1t}=[f_4+f_{10}+f_0+f_1f_2\bar A_0+f_3+f_5(C_0+C_1+C_2+C_3)+f_{11}+f_{15}G]p</math><br/>
::<math>f_{2t}=[f_4G+f_{10}R_0+f_2A_0+f_{11}+f{12}+f_{13}+f_{14}]p</math><br/>
::<math>f_{3t}=[f_4+f_{10}\bar R_1+f_2A_0+f_5(C_2+C_3)+f_8+f_9+f_{11}+f_{12}+f_{13}+f_{15}G]p</math><br/>
::<math>f_{4t}=[f_4\bar G+f_{10}R_2+f_2\bar A_0+f_5(C_0+C_2)+f_8+f_{11}+f_{12}+f_{14}+f_{15}G]p</math><br/>
[[File:Valori assunti da Flip-Flop.png|right]]<br/>
Quando il contatore si trova nello stato '''f<sub>15</sub>''' ed il Flip-Flop G ha valore '''0''', viene richiesta l'operazione '''1=>F''': in tavola 4.5.2 vengono mostrati i valori assunti dai Flip-Flop '''F<sub>i</sub>''' durante tale operazione.
 
Le equazioni di input dei Flip-Flop '''F''' in tale caso saranno:<br/>
:::::<math>f_{it}=\bar F_i G f_{15} p\ \ \ \ \ i=1,...4\ \ (4.5.3</math><br/>
Poiché '''f<sub>15</sub>''' è '''F<sub>1</sub>F<sub>2</sub>F<sub>3</sub>F<sub>4</sub>'''=1111, negF<sub>i</sub> f<sub>15</sub> nella equazione 4.5.3 è sempre '''0''', e quindi l'equazione (4.5.3) non è necessaria.<br/>
Le equazioni 4.5.1 sono le equazioni di input del registro '''F'''-<br/>
In fig-4.5.4 compare il diagramma logico relativo alle (4.5.1).<br/>
[[File:Diagrazmma logico dell'operatio counter e decoder.png|center]]<br/>
 
 
4.5.2 Accumulatore<br/>
Come mostrato nel diagramma 4.4.5, l'accumulatore interviene durante l'esecuzione delle operazioni relative agli stati:<br/>
:::::<math>f_8 : [R]+(A)\Rightarrow A</math><br/>
:::::<math>f_9 : (A)-(R)\Rightarrow A</math><br/>
:::::<math>f_{12}:(A_0)\Rightarrow A_0\ \ \ \ (A_{i-1})\Rightarrow A_i\ \ \ \ i=1,...,8</math><br/>
:::::<math>f_{13}:(A_0)\Rightarrow A_8\ \ \ \ (A_{i+1})\Rightarrow A_i\ \ \ \ i=0,...,7</math><br/>
:::::<math>f_{14}:=\Rightarrow A</math><br/>
Durante l'operazione di addizione relativa allo stato '''f<sub>8</sub>,A<sub>i</sub>''' e '''R<sub>i</sub>''' sono gli '''i<sup>simi</sup>''' bits degli addendi.<br/>
'''K<sub>i</sub>''' è il riporto dovuto alla somma fatta sugli (i+1)<sup>simi</sup> bits.<br/>
L'operazione di somma viene mostrata in tabella 4.5.5.<br/>
::<math> Tabella\ 4.5.5</math>
{| class="wikitable" style ="text-align:center"
|-
! A<sub>i</sub> !! R<sub>i</sub> !! K<sub>i</sub> !! K<sub>i-1</sub> !! A<sub>i</sub> t !! Q<sub>it</sub>
|-
| 0 || 0 || 0 || 0 || 0 || 0
|-
| 0 || 0 || 1 || 0 || 1 || 1
|-
| 0 || 1 || 0 || 0 || 1 || 1
|-
| 0 || 1 || 1 || 1 || 0 || 0
|-
| 1 || 0 || 0 || 0 || 1 || 0
|-
| 1 || 0 || 1 || 1 || 0 || 1
|-
| 1 || 1 || 0 || 1 || 0 || 1
|-
| 1 || 1 || 1 || 1 || 1 || 0
|}
 
Da tale tabella, si ricavano le seguenti equazioni di input:<br/>
:::::<math>Q_{it}=(R\oplus K_i)f_8p\ \ \ \ i=0,...,8\ \ \ \ \ (4.5.6)</math><br/>
mentre per il riporto si ha:br/>
:::::<math>K_{i-1}=(R_iK_i+R_iA_i+A_iK_i)f_8P\ \ \ \ i=1,....,8</math><br/>
:::::<math>K_8=0</math><br/>
Per l'operazione di sottrazione relativa allo stato '''f<sub>9</sub>''', A<sub>i</sub> e R<sub>i</sub> sono rispettvamente l'i<sup>simo</sup> bit del minuendo e dell'i<sup>simo</sup> bit del sottraendo.<br/>
Le ewquazioni di inpute del riportto sono le stesse di (4.5.6) ad eccezione di '''R<sub>i</sub>''' che viene sostituito da <math>\bar R_i</math> e '''K<sub>8</sub>''' viene sostituito da '''1'''in modo da sostituire il c ontenuto di '''R'''con il suo complemento a 2.<br/>
Le equazioni di input e del riporto sono quindi:<br/>
::::<math>a_{it}=(\bar R_i\oplus K_i)f_9 p\ \ \ \ \ i=0,....,8\ \ \ (4.5.7)</math><br/>
::::<math>K_{i-1}=\bar R_iK_i+\bar R_iA_i+A_iK_i)f_9 p\ \ \ \ i=1,..,8</math><br/>
::::<math>K_8=f_9 p</math><br/>
[[File:Operazione di scorrimento a destra.png|right]]<br/>
L'operazione di scorrimento a destra avviene allo stato '''f<sub>12</sub>'''.<br/>
Esso fa scorrere il contenuto dell'accumulatore di un bit a destra mentre lo stato di '''A<sub>0</sub>''' rimane inalterato.<br/>
La tabella (4.5.8) rappresenta l'operazione di scorrimento a destra.<br/>
Le equazioni di input sono:<br/>
:::::<math>a_{it}=(A_{i-1}\oplus A_i f_{12} p\ \ \ \ i=1,...,8</math><br/>
Non vi è alcuna equazione per '''a<sub>0t</sub>''' in quanto lo stato del Flip-Flop '''A<sub>0</sub>''' non deve cambiare.<br/>
L'operazione di scorrimento a sinistra avvierne allo stato '''f<sub>13</sub>'''.<br/>
Essa fa scorrere il contenuto dell'accumulatore di un bit verso sinistra mentre lo stao di '''A<sub>8</sub>'''viene sostituito da quello di '''A<sub>0</sub>'''.<br/>
[[File:Azzeramento dellaaccumulatore.png|right]]
Le equazioni di input saranno:<br/>
:::::<math>a_{it}=(A_i\oplus A_{i+1} f_{13} p\ \ \ \ i=0,...,7</math><br/>
:::::<math>a_{8t}=(A_0\oplus A_8 f_{13} p</math><br/>
L'operazione di azzeramento dell'accumulatore avviene allo stato '''f<sub>14</sub>''' (tabella 4.5.9):<br/>
Le equazioni di input sono:<br/>
:::::<math>a_{it}=A_if_{14} p\ \ \ \ i=0,...,8</math><br/>
quindi le equazioni di input dei Flip-Flop che costituiscono l'accumulatore '''A''' saranno:<br/>
::<math>a_{it}=(R_ip\oplus K_i)f_8p+(\bar R_i\oplus K_i)f_9p+(A_{i-1}\oplus A_i)f_{12}p+(A_i\oplus A_{i+1}f_{13}p+A_if_{14}p\ \ \ \ \ i=1,...,7</math><br/>
::math>a_{0t}=(A_0\oplus K_0)f_8p+(\bar R_0\oplus K_0)f_9p+(A_0\oplus A_1)f_{13}p+a_0f_{14}p</math><br/>
::math>a_{8t}=(A_8\oplus K_8)f_8p+(\bar R_8\oplus K_8)f_9p+(A_7\oplus A_8)f_{12}p+(A_0\oplus A_8)f_{13}p+a_8f_{14}p</math><br/>
::<math>K_{i-1}=(R_iK_i+R_iA_i+A_iK_i)f_8p+(\bar R_iK_i+|bar R_iA_i+A_iK_i)f_9p</math><br/>
i=1,...,8<br/>
::<math>K_8=f_9p</math><br/>
Il diagramma logico dell'i<sup>simo</sup> stadio dell'accumulatore viene presentato in fig.4.5.10<br/>
[[File:Diagramma logico di uno stadio dell'accumulatore.png|center]]<br/>
 
 
4.5.3 - Memory address register.<br/>
 
 
Nel diagramma di stato di fig-4.4.5, il registro '''C''' deve permettere le seguenti operazioni:<br/>
::<math>f_{10}+ f_0+f_1+f_2\bar A_0+f_3+f_5\ \ \ :(Ad[R])\Rightarrow C\ \ \ :(C)+1\Rightarrow C\ \ \ :0\Rightarrow C</math><br/>
La tabella della verità relativa alla operazione (Ad[R]=>C è quella posta a fianco.<br/>
Le equazioni di input da tale tavola sono:<br/>
:::::<math>C_{it}=(R_{i+3}\oplus C_i)gp\ \ \ \ i=0,...,5</math><br/>
:::::<math>g=f_{10}+ f_0+f_1+f_2\bar A_0+f_3+f_5</math><br/>
L'operazione '''(C)+1=>C''' avviene allo stato '''f<sub>11</sub>''': durante questa operazione , il registro '''C''' funziona come un contatore binario.<br/>
Le equazioni di input saranno quindi: <br/>
::::<math>C_{5t}=f_{11}p</math><br/>
::::<math>C_{4t}=C_5f_{11}p=C_5c{5t}</math><br/>
::::<math>C_{3t}=C_4C_5f_{11}p=C_4c_{4t}</math><br/>
::::<math>C_{2t}=C_3C_4C_5f_{11}p=C_3c_{3t}</math><br/>
::::<math>C_{1t}=C_2C_3C_4C_5f_{11}p=C_2c_{2t}</math><br/>
::::<math>C_{0t}=C_1C_2C_3C_4C_5f_{11}p=C_1c{1t}</math><br/>
La terza operazione, quella inerente all'azzeramento del registro '''C''', viene eseguita allo stato '''<math>f_{15}\bar G</math>'''<br/>
La tavola della Verità corrispondente è uguale a quella di Fig-4.5.9.<BR/>
Le equazioni di input sono:<br/>
:::::<math>c_{it}=C_1f_{15}\bar Gp</math><br/>
In definitiva, le equazioni di input dei Flip-Flop relativi al memory-address register sono:<br/>
::::<math>c_{0t}=C_1C_2C_3C_4C_5f_{11}p+(R_3\oplus C_0)gp+C_0f_{15}\bar G p</math><br/>
::::<math>c_{1t}=C_2C_3C_4C_5f_{11}p+(R_4\oplus C_1)gp+C_1f_{15}\bar G p</math><br/>
::::<math>c_{2t}=C_3C_4C_5f_{11}p+(R_5\oplus C_2)gp+C_2f_{15}\bar G p</math><br/>
::::<math>c_{3t}=C_4C_5f_{11}p+(R_6\oplus C_3)gp+C_3f_{15}\bar G p</math><br/>
::::<math>c_{4t}=C_5f_{11}p+(R_7\oplus C_4)gp+C_4f_{15}\bar G p</math><br/>
::::<math>c_{5t}=f_{11}p+(R_8\oplus C_5)gp+C_5f_{15}\bar G p</math><br/>
dove :::<math>g=f_{10}+f_0+f_1+f_2\bar A_0+f_3+f_5</math><br/>
In fig-4.5.11 compare un diagramma logico relativo al memory-address register.<br/ In questa figura è indicat anche l'address decoder , che non è altro che una matrice con 6 coppie di input e 64 output.<br/>
Gli output '''D<sub>j</sub>''' (j<sup>sima</sup> parola) del decodificatore sono rappresentati come:<br/>
:::::<math>D_0=\bar C_0 \bar C_1 \bar C_2 \bar C_3 \bar C_4 \bar C_5</math><br/>
:::::<math>D_1=\bar C_0 \bar C_1 \bar C_2 \bar C_3 \bar C_4 C_5</math><br/>
:::::<math>..................</math><br/>
:::::<math>D_{63}=C_0C_1C_2C_3C_4C_5\ \ \ \ \ \ \ \ (4.5.12)</math><br/>
[[File:Logic diagrtam of the memory-address register.png|center]]<br/>
 
 
4.5.4-Instruction register.<br/
L'instruction register permette la memorizzazione temporanea di una parola presa dall'unità di memoria:<br/>
Come è mostrato in fig-4.4.5, sono richieste le esecuzioni delle seguenti operazioni:<br/>
::::::<math>f_{10}:(C)\Rightarrow Ad[R]</math><br/>
::::::<math>f_0,f_1,f_4:(M<C>)\Rightarrow R</math><br/>
 
 
 
La prima operazione, relativa al trasferimento del contenuto del registro '''C''' nella parte indirizzo del registro '''R''' ha la tabella della verità affiancata.<br/>
Le equazioni di input saranno quindi:<br/>
:::::<math>r_{it}=(C_{i-3}\oplus R_i)f_{10}p\ \ \ \ \ i=3,...,8</math><br/>
La seconda operazione prende una parola dalla memoria il cui indirizzo è dato dal contenuto del registro '''C'''e la conserva nel registro '''R'''.<br/>
Lindirizzo contenuto viene indicato con la notazione '''D<sub>j</sub>''', dove '''J''' specifica la '''j<sup>sima</sup>''' parola.<br/>
Nella memoria del nostro ipotetico calcolatore vi sono 576 bits conservati in 64 parole; essi vengono espressi con il simbolo '''M<sub>ji</sub>'''il quale indica il contenuto del '''i<sub>simo</sub>''' bit relativo alla'''j<sub>sima</sub>''' parola.<br/>
L'operazione di trasferimento del bit '''M<sub>ji</sub>''' dalla memoria all'i<sub>simo</sub> bit del registro '''R'''è la stesssa di quella di tabella 4.5.13, dove '''C<sub>i-3</sub>''' viene sostituito da '''M<sub>ji</sub>'''<br/>
Le equazioni di input sono:<br/>
:::::<math>r_{it}=(\bar M_{ji}R_i+M_{ji}\bar R_i)(f_0+f_1+f_4)p</math><br/>
Le equazioni precedenti non sono complete in quanto contemplano solo il trasferimento del contenuto del bit '''M<sub>ji</sub>''' e non considerano la selezione della voce di indirizzo '''D<sub>j</sub>'''Se il bit '''i<sup>simo</sup>''' della '''j<sub>sima</sub>''' parola in m3emoria viene selezionato mediante il comando '''D<sub>j</sub>''' (il quale può esseree uno qualsiasi dei 64 comandi di indirizzo) '''M<sub>ji</sub>''' e <math>\bar M_{ji}</math> vengono sostituiti dalle equazioni seguenti:<br/>
:::::<math>\sum_{j=0}^{63} M_{ji} D_j=M_{0i}D_0+.....+M_{63i}D_{63}</math><br/>
:::::<math>\sum_{j=0}^{63} \bar M_{ji} D_j=M_{0i}D_0+.....+M_{63i}D_{63}</math><br/>
Per cui, le equazioni di input diventano:<br/>
:::<math>r_{it}=[\bar R_i(\sum_{j=0}^{63}M_{ji}D_j)+ R_i(\sum_{j=0}^{63}\bar M_{ji}D_j)](f_0+f_1+f_4)p\ \ \ \ i=0,...,8</math><br/>
In definitiva, le equazioni di input del registro '''R''' saranno:<br/>
:::<math>r_{it}=[\bar R_i(\sum_{j=0}^{63}M_{ji}D_j)+ R_i(\sum_{j=0}^{63}\bar M_{ji}D_j)](f_0+f_1+f_4)p\ \ \ \ i=0,...,2</math><br/>
:::<math>r_{it}=[\bar R_i(\sum_{j=0}^{63}M_{ji}D_j)+ R_i(\sum_{j=0}^{63}\bar M_{ji}D_j)](f_0+f_1+f_4)p+(C_{i-3}\oplus R_i)f_{10}\ \ \ \ i=3,...,8</math><br/>
dove '''D<sub>j</sub>''' è dato dall'equazione (4.5.12).<br/>
In fig-4.5.14, cvompare il diagramma logico dello '''i<sup>simo</sup>''' stadio del registro '''R'''.<br/>
[[File:Diagramma logico dello i-esimo stadio dello instruction register.png|center]]<br/>
 
 
4.5.5-Unità di memoria.<br/>
La memoria nel nostro ipotetico calcolatore è costituita da un insieme di 576 Flip-Flop: essa deve poter eseguire le due operazioni seguenti:<br/>
::::::<math>f_3:(A)\Rightarrow M<C></math>
::::::<math>mnuale\ :(Q_{ji}\Rightarrow M_{ji}</math><br/>
La prima operazione memorizza il contenuto dell'accumulatore nella memoria con l'indirizzo selezionato da '''D<sub>j</sub>''' allo stato '''f<sub>3</sub>''':<br/>
::::::<math>f_3D_j:(A_i)\Rightarrow M_{ji}\ \ \ \ \ i=0,...,8</math><br/>
Le equazioni di input saranno allora:<br/>
::::<math>m_{jit}=(A_i\oplus M_{ji})f_3D_j p\ \ \ \ i=o,..,8\ \ \ \ j=0,...,63</math><br/>
[[File:Operazione di input.png|right]]
La seconda operazione consiste nell'inserire delle parole in memoria mediante gli interruttori '''Q'''<br/>
Se '''Q<sub>ji</sub>''' indica l'interruttore connesso al bit di memoria '''M<sub>ji</sub>''', l'operazione ha la tabella di verità affiancata.<br/>
La forma finale delle equazioni di input della unità di memoria è:<br/>
:::::<math>m_{ji}=(A_i\oplus M_{ji})f_3D_jp+(Q_{ji}\oplus M_{ji}p\ \ \ \ i=0,...,8\ \ \ \ j=o,...,63</math><br/>
In fig-4.5.15 compare un diagramma logico abbreviato del registro di memoria.<br/>
[[File:Diagramma logico abbreviato del registro di memoria.png|center]]<br/>
 
 
4.5.6-Start-stop Flip-Flop.<br/>
La partenza e l'arresto del calcolatore vengono controllati mediante il Flip-Flop '''G''', il quale viene a sua volta attivato dall'interruttore '''S''' mediante operazione manuale.<br/>
Le due operazioni richieste sono:<br/>
:::::<math>f_5C_3:0\Rightarrow G</math><br/>
:::::<math>manuale:(S)\Rightarrow G</math><br/>
La prima operazione cambia il Flip-Flop '''G''' nello stato '''0''' quando compare lo stato '''f_5''' e '''C_3''' è '''1'''; le equazioni di input sono quindi:<br/>
:::::::<math>g_t=Gf_5C_3p</math><br/>
La seconda operazione mette in '''ON''' od in '''OFF''' l'interruttore '''S''' per permettere l'avvio o l'arresto della macchina.<br/>
L'equazione di input è:<br/>
:::::::<math>g_t=Gf_5C_3p+(S\oplus G9p</math><br/>
[[File:Figure 4.5.16.png|center]]
 
 
 
::4.6-''Un calcolatore completo'' <br/>
Nei paragrafi precedenti abbiamo stabilito le equazioni di '''input''' di tutti i registri del nostro ipotetico calcolatore.<br/>
la configurazione del calcolatore dato in fig-4.3.1 può essere ora completata dando le equazioni simboliche relative ai singoli registri.(fig-4.6.1)<br&>
Questo diagramma può essere reso più dettagliato usando i diagrammi logici stabiliti nei precedenti paragrafi.<br/>
La procedura operativa del nostro calcolatore sarà la seguente:<br/>
-1 Accensione del calcolatore. Se il Flip-Flop di avvio-arresto si trova nello stato '''1''' durante questo periodo, il calcolatore funzioneera in maniera irregolare.<br/>
-2 Si mette lo switch '''S''' nella posizione '''off'''.<br/>
Questo implica che lo start-stop Flip-Flop sia nello stato '''0''', lo operation counter in '''1111''' e l'indirizzo contenuto nel memory address register uguale a '''000000'''.<br/>
Si inserisce il programma in memoria mediante gli interruttori '''Q'''.<br/>
-3 Si mette lo switch '''S''' nella posizione '''ON'''.<br/>
Il Flip-Flop '''G'''assume lo stati '''1''' e la macchina comincia ad esguire il programma.<br/>
La prima istruzione si trova nella memoria di indirizzo '''000000'''.<br/>
-4 Il programma deve terminare con una istruzione di stop: questa ultima inserisce '''0''' in '''G''', '''1111''' in '''F''' e '''000000''' in '''C'''.<br/>
Un nuovo programma può essere inserito nella memoria ed il calcolatore può iniziare il calcolo rimettendo lo switch nella posizione '''ON'''.<br/>
-5 Si leggono i risultati ottenuti mediante dispositivi luminosi connessi ai Flip-Flop di memoria (non mostrati nei diagrammi precedenti).<br/>
[[File:Operazioni in un calcolatore digitale semplificato.png|center]]
{{Avanzamento|100%|24 settembre 2016}}