Algebre booleane e progetto logico dei calcolatori digitali/Circuiti di un calcolatore digitale (a): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 11:
Questo circuito è un blocco fondamentale costituito da 3 porte di '''AND''' e una porta di '''OR'''. Il suo funzionamento viene stabilito mediante la tavola di verità:
 
[[File:Truth Table of Half Adder.png|rightcenter]]
 
È da notare che questo circuito presenta due output separati: uno per la somma e l'altro per il riporto.
Riga 70:
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>'''.
 
[[File:Full Adder with 3 inputs.png|rightcenter]]
 
Ciascuna di queste reti è un semiaddizionatore.
Riga 92:
=== Addizionatore in serie-Addizionatore in parallelo ===
 
[[File:Addizionatore in serie.png|rightcenter]]
 
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'''.
Riga 98:
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).
 
[[File:Parallel Adder Logic Diagram (2).png|leftcenter]]
 
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).
Riga 118:
=== Sottrazione binaria ===
 
[[File:Tabella della verità per la sottrazione binaria.png|rightcenter]]
 
Mediante la tabella della verità a fianco si può definire il funzionamento di un blocco chiamato '''semi-sottrattore''' (half-subtractor) binario. Si fa l'ipotesi che il minuendo '''X'''e il sottraendo '''Y''' siano positivi e tali che '''X≥Y'''.
Riga 128:
::::<math>r_{i+1}=\bar X_i Y_i</math>
 
[[File:Half Subtractor.png|rightcenter]]
 
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>'''.
Riga 134:
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>'''.
 
[[File:TrueTable for Full Subtractor.png|rightcenter]]
 
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.
Riga 180:
Un complementatore può essere costruito in modo da ricevere un input seriale oppure uno in parallelo.
 
[[File:Complementatori seriale e in parallelo.png|rightcenter]]
 
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 a 1''' quando '''P=1''', infatti:
Riga 232:
:::::<math>Z_k=\sum_{i=0}^{i=k-1}X_i</math>
 
[[File:Complementatore a 2 di tipo seriale.png|rightcenter]]
 
si ottengono le seguenti equazioni di un circuito complementare a 2 seriale:
Riga 242:
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|rightcenter]]
 
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.
Riga 332:
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>.
 
[[File:Complementatore a 2 in parallelo.png|rightcenter]]
 
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]'''
Riga 427:
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|rightcenter]]
 
[[File:Tabella riassuntiva delle diffrenze.png|rightcenter]]
 
:::::<math>X(k)=x_k x_{k-1} ....x_0</math>
Riga 473:
:::<math>(\bar S_{k-1}x_k\bar y_k + S_{k-1}\bar x_ky_k)\oplus S_{k-1}</math>
 
[[File:Circuito per il confronto di due numeri binari..png|rightcenter]]
 
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'''.
Riga 479:
L'operazione realizzata da l circuito ha termine ovviamente quando in input si sono presentati tutti gli '''n''' bits di ''X''' e '''Y'''.
 
[[File:Tabella di un comparatore seriale.png|rightcenter]]
 
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.
Riga 485:
La tabella di un comparatore seriale in cui l'input sia costituito da bits di peso decrescente sarà come quella affiancata.
 
[[File:Comparatore sertiale a peso decrescente.png|rightcenter]]
 
Da tale tabella si deduce il circuito a lato.
Riga 505:
:<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|rightcenter]]
 
Semplificando la funzione mediante un diagramma di Karnaugh si ha:
Riga 519:
:<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|rightcenter]]
 
Semplificando la funzione mediante un diagramma di Karnaugh si ha:
Riga 531:
::::<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|rightcenter]]
 
:<math>3)-\quad X=Y</math>
Riga 565:
::::::<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|rightcenter]]
 
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'''.
Riga 573:
:::::<math>\begin{cases}Q_k=B_{n-k+1}\\E_k=B_{n-k}\\Z_k=R_{n-k}\end{cases}</math>
 
[[File:Convertitore binario puro-binario iflesso.png|rightcenter]]
 
si ha quindi
Riga 603:
==== Incremento in codice binario puro ====
 
[[File:Addizione.png|rightcenter]]
 
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:
Riga 627:
==== Decremento in codice binario puro ====
 
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|rightcenter]]
 
:::::<math>x_0^{''}=x_0\oplus 1=\bar x_0\ \ \ \ \ \ \ \ \ \ \ \ r_1=\bar x_0</math>
Riga 666:
::<math>\ \ down- counter:\ \ x_k^{n+1}=x_k^n\oplus E^n (\coprod_{i=0}^{k-1}\bar x_i) _n</math>
 
[[File:Contatore a 16 stadi (up-counter).png|rightcenter]]
 
[[File:Up counter in binario puro.png|rightcenter]]
 
Le figure '''A''' e '''B''' rappresentano degli '''up-conter''' a 16 stadi interni quattro stadi binari). L'orologio non viene indicato).
Riga 681:
Per il rango '''k''' ci vuole un tempo '''k''' volte maggiore di quello necessario per il contatore '''A'''.
 
[[File:Up- down counte.png|rightcenter]]
 
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>.'''
Riga 697:
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 input 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'''.
 
[[File:Tvola della verita di un up-counter.png|rightcenter]]
 
La tavola della verità di questo contatore è mostrata nella figura '''D'''.
Riga 745:
Applicando queste equazioni a quelle precedenti di '''input''' si ottengono i circuiti di fig.'''A''' e '''B'''.
 
[[File:Tavola della verità per flip-flop SR.png|rightcenter]]
 
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'''.
Riga 773:
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.
[[File:Contatore binario con half-adders e flip-flop SR.png|rightcenter]]
 
Le equazioni 2.7.10 si possono scrivere in un altro modo.
Riga 804:
Per codificare i 10 stati interni si usano generalmente codifiche di tipo binario con almeno '''4''' digit binari.
 
[[File:Codice 8421.png|rightcenter]]
 
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.
Riga 812:
Ci proponiamo nel seguito di costruire un contatore relativo al codice '''8421''' e quello relativo al codice '''ad eccesso di tre'''.
[[File:Rappresentazione contatore decimale in codice 8421.png|rightcenter]]
 
La configurazione generale di un contatore decimale relativo al codice '''8421''' sarà:
Riga 820:
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.
 
[[File:Tabella 2.8.2.png|rightcenter]]
 
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):
Riga 826:
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'''.
 
[[File:Diagrammi di Kanaugh per contatore digitale.png|rightcenter]]
 
Possiamo semplificare le espressioni boolea
Riga 869:
::::::<math>a_{4t}=A_1 A_2 A_3 p+A_4 A_3 p</math>
 
[[File:Decade per codici ad eccesso di tre.png|rightcenter]]
 
Per le semplificazioni si sono considerate anche le combinazioni che non compaiono nel codice ad eccesso di tre.