Affrontiamo ora il problema di progettare un contatore a 3 bit che produca in uscita la sequenza dei numeri primi. Supponiamo anche che il primo valore sia 000 (anche se non è a rigori un numero primo). La sequenza di conteggio può dunque essere rappresentata nel seguente modo:
Questo grafico viene detto diagramma degli stati (state diagram) del contatore (qualche volta viene anche usato il brutto termine pallogramma). La sua interpretazione è semplice: all'interno di ogni cerchio è indicato un valore prodotto dal contatore (si dice uno stato) e le frecce indicano le transizioni da uno stato al successivo.
Possiamo anche rappresentare le transizioni di stato mediante una tabella delle transizioni, nel seguente modo:
Stato precedente | Stato successivo | ||||
Q2 | Q1 | Q0 | Q2' | Q1' | Q0' |
0 | 0 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 0 | 0 |
Si noti che la tabella delle transizioni assomiglia a una tabella di verità, ma ci sono alcune importanti differenze:
Per realizzare il nostro contatore abbiamo bisogno di tanti flip flop quanti sono i bit di stato del contatore stesso: dunque in questo caso ci servono 3 flip flop. Possiamo usare flip flop D o flip flop T.
Scegliamo di usare tre flip flop di tipo T e di realizzare un contatore sincrono. L'architettura hardware di base sarà dunque la seguente:
Si noti che non abbiamo ancora progettato la rete di comando degli ingressi T dei tre FF.
A tale scopo, osservando la tabella delle transizioni oppure il diagramma degli stati, supponiamo per esempio di trovarci nello stato iniziale 000. Lo stato successivo deve essere 010. Ciò significa che Q2 e Q0 non devono commutare, mentre Q1 deve commutare. Dunque, in base al funzionamento del FF T abbiamo
T0 = 0 T1 = 1 T2 = 0
Procedendo nello stesso modo ad analizzare le transizioni negli stati successivi, possiamo compilare la seguente tabella di verità:
Stato | Input FF | ||||
Q2 | Q1 | Q0 | T2 | T1 | T0 |
0 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | x | x | x |
0 | 1 | 0 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | x | x | x |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | x | x | x |
1 | 1 | 1 | 1 | 1 | 1 |
Le x indicano condizioni di indifferenza, in corrispondenza di quegli stati che il nostro contatore non può produrre.
Questa è una vera tabella di verità, che può essere sintetizzata nel seguente modo:
T0 = (Q2 + Q0).Q1
T1 = Q1 + Q0
T2 = Q1.Q0
La realizzazione circuitale è mostrata in figura:
Possiamo realizzare il nostro contatore anche usando FF D. In questo caso, siccome all'arrivo del fronte di clock ogni FF D copia il valore presente sull'ingresso D, la tabella di verità è molto simile alla tabella delle transizioni:
Stato | Uscite | ||||
Q2 | Q1 | Q0 | D2 | D1 | D0 |
0 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | x | x | x |
0 | 1 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | x | x | x |
1 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | x | x | x |
1 | 1 | 1 | 0 | 0 | 0 |
Sintetizzando le tre uscite abbiamo:
D0 = Q2 Q1
D1 = Q1 + Q0
D2 = (Q2 + Q1).Q0
La realizzazione circuitale del contatore è mostrata qui sotto:
Generalizzando un attimo rispetto al contatore del nostro esempio, possiamo affermare che un contatore con una sequenza di stati qualsiasi può in generale essere realizzato secondo il seguente schema di principio:
Sito realizzato in base al template offerto da
http://www.graphixmania.it