|
||
Il display visualizza il
|
Il display visualizza il
|
Un contatore mod.8 in avanti (UP) consente di ottenere, in forma binaria, la sequenza di numeri compresi tra 0 e 7, come si mostra nel diagramma degli stati di fig.1, cioè le configurazioni binarie comprese tra 000 e 111. Sono, pertanto, necessari 3 flip-flop che sceglieremo di tipo J-K non importa se PET (Positive Edge Triggered) o NET (Negative Edge triggered).
Un contatore mod.8 indietro (DOWN) consente di ottenere, in forma binaria, la sequenza di numeri compresi tra 7 e 0, come si mostra nel diagramma degli stati di fig.2, cioè le configurazioni binarie comprese tra111 e 000. Sono, pertanto, necessari 3 flip-flop che sceglieremo di tipo J-K non importa se PET (Positive Edge Triggered) o NET (Negative Edge triggered).
Un contatore UP/DOWN consente di comandare la sequenza di conteggio in senso crescente (UP) o decrescente (DOWN). Il contatore UP (in avanti) a tre bit conta da 0 a 7; il contatore DOWN (indietro) conta da 7 a 0. Una linea digitale esterna U/D consente di selezionare la direzione del conteggio.
Si mostra, di seguito, la tabella delle transizioni che il contatore deve rispettare.
FUNZIONAMENTO UP |
FUNZIONAMENTO DOWN |
|||||
CK | Q3Q2Q1 | N | CK | Q3Q2Q1 | N | |
0 | 0 0 0 | 0 | 0 | 1 1 1 | 7 | |
1 | 0 0 1 | 1 | 1 | 1 1 0 | 6 | |
2 | 0 1 0 | 2 | 2 | 1 0 1 | 5 | |
3 | 0 1 1 | 3 | 3 | 1 0 0 | 4 | |
4 | 1 0 0 | 4 | 4 | 0 1 1 | 3 | |
5 | 1 0 1 | 5 | 5 | 0 1 0 | 2 | |
6 | 1 1 0 | 6 | 6 | 0 0 1 | 1 | |
7 | 1 1 1 | 7 | 7 | 0 0 0 | 0 | |
8 | 0 0 0 | 0 | 8 | 1 1 1 | 7 | |
9 | 0 0 1 | 1 | 9 | 1 1 0 | 6 | |
10 | 0 1 0 | 2 | 10 | 1 0 1 | 5 | |
11 | 0 1 1 | 3 | 11 | 1 0 0 | 4 | |
12 | 1 0 0 | 4 | 12 | 0 1 1 | 3 |
a) contatore sincrono binario UP a 3 bit:
J1=1, K1=1 per il flip-flop meno significativo;
J2=Q1, K2=Q1 per il secondo flip-flop;
J3=Q2·Q1, K3=Q2·Q1 per il flip - flop più significativo.
b) contatore sincrono binario DOWN a 3 bit:
J1 = K1 = 1 per il flip-flop meno significativo;
J2 = K2 = Q1 per il secondo flip-flop;
J3 = K3 = Q2·Q1 per il flip - flop più significativo.
c) contatore sincrono binario UP/DOWN a 3 bit:
J1 = K1 = 1
J2 = K2 = Q1·U/D + Q1·U/D per il secondo flip - flop;
J3 = K3 = Q2·Q1·U/D +Q2· Q1·U/D per il flip -flop più significativo.
In altre parole, gli ingressi del secondo flip -flop J2 e K2 sono pilotati
dall'uscita di un MUX (multiplexer) i cui due ingressi
(Q1 e Q1) sono le uscite del primo flip -flop e gli ingressi del
terzo flip-flop J3 e K3 sono pilotati dall'uscita di un altro MUX avente
come ingressi Q2·Q1 e Q2·Q1
.
3. Simulazione con il programma DesignLab Ev.8 della MicroSim o PSpice 9.2
In fig.3 si mostra lo schema elettrico realizzato in ambiente Schematic.
Particolare attenzione merita il MUX realizzato tramite il comando DRAW/BLOCK.
Dopo aver editato il comando DRAW/BLOCK appare, sul foglio di lavoro,
la sagoma di un rettangolo che, successivamente si potrà ridimensionare
a piacere.
Il blocco così definito assume il nome HR1 che possiamo cambiare,
ad esempio, in MUX1 semplicemente cliccando due volte in rapida successione
sul testo HR1.
Il blocco deve possedere tre ingressi che chiameremo P1, P2, S e una
uscita che chiameremo Y.
Per definire queste 4 linee digitali è sufficiente disegnare
una linea dalla sinistra del blocco fino all'interno del blocco: il programma
disegna un nodo sul lato sinistro del blocco che denomina P1 (ci sta bene).
Ripetiamo il tracciamento di una linea più in basso dall'esterno
all'interno del blocco. Il programma denomina P2 il nodo che fa apparire.
Tracciamo ancora una linea che termina sul lato inferiore del blocco
e il nodo P3 inserito dal programma lo rinominiamo S.
Tracciamo, infine, una linea che termina sul lato destro del blocco
e il nodo P4 lo denominiamo Y.
Terminato il disegno del blocco si procede alla realizzazione dello
schema logico che lo rappresenta.
Facciamo doppio click in rapida successione all'interno della sagoma
del blocco.
Ci viene chiesto di definire il nome del file che conterrà il
circuito logico che ci apprestiamo a sviluppare. Decidiamo di chiamare
tale file col nome MUX.SCH.
Ci appare un foglio vuoto di Schematic che presenta, però, quattro
connettori di nome P1, P2, S e Y.
Realizziamo lo schema elettrico come quello mostrato in fig.4.
Al termine della realizzazione del circuito di fig.4 si ritorna al livello
superiore, nello schema di fig.3, tramite il comando NAVIGATE/POP.
Poiché ci servono due multiplexer, procediamo selezionando il
blocco MUX1 (click all'interno del blocco) e ricorriamo al copia ed incolla.
Il secondo blocco, ovviamente, sarà ridenominato come MUX2.
Se tutto è stato realizzato correttamente si entra in Probe e, tramite il comando Trace add, si inseriscono le linee indicate sulla parte sinistra della fig.5.
Si osservi, infine, che per ottenere la rappresentazione in decimale del valore delle linee Q3 Q2 Q1, queste ultime devono essere rappresentate in un gruppo delimitato dalle parentesi graffe.
Dall'esame delle forme d'onda si evince che, quando U/D=0, il contatore conta in avanti e si incrementa quando il segnale di clock compie la transizione negativa (passaggio dallo stato logico alto a quello basso); quando, invece, U/D=1 il contatore conta indietro e si decrementa, anche in questo caso, durante la transizione negativa del clock.
Ciò è dovuto ai diversi tempi di ritardo di propagazione dei flip-flop: tpLH=16ns e tpHL=25ns (tipici valori della TTL standard. Le serie commerciali TTL più moderne presentano tempi di ritardo di propagazione più brevi).
Il passaggio, ad esempio, dal numero 1 (001) al 2 (010) durante il conteggio UP, comporta la contemporanea commutazione da parte di Q2 e Q1. In questo caso Q2 è più veloce perché per passare da 0 a 1 impiega 16ns mentre Q1 prima di passare da 1 a 0 impiega 25ns. Per 9ns risultano a 1 sia Q2 che Q1. In tale intervallo di tempo il contatore fornisce il valore 011 che corrisponde a 3.
Riassumendo: nonostante il contatore sia sincrono, si ottiene per quasi il 50% delle commutazioni, una non corretta modalità di conteggio. Abbiamo appena visto che il passaggio da 1 a 2 avviene secondo la sequenza 1 - 3 - 2; lo stato 3 è instabile e decade spontaneamente nello stato 2 dopo un tempo di 9ns (decisamente trascurabile per la maggior parte delle applicazioni).