Contatore sincrono UP/DOWN mod.8
a cura del prof. Giuseppe Spalierno docente di Elettronica


contasu

 

contagiu

Il display visualizza il 
contenuto del contatore. 
Contatore in avanti mod.8

Il display visualizza il 
contenuto del contatore. 
Contatore indietro mod.8


1. Premessa

Un contatore digitale si dice sincrono se il clock esterno è applicato simultaneamente agli ingressi di clock di tutti i flip - flop che lo costituiscono.

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

diagramma degli stati UP
Fig.1 Diagramma degli stati per un contatore UP mod.8.

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

Fig.2 Diagramma degli stati per un contatore down mod.8.

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.

 

Tabella delle transizioni per un contatore UP ed un contatore DOWN entrambi binari a 3 bit 

FUNZIONAMENTO UP 
 (linea U/D=0)

 

FUNZIONAMENTO DOWN 
 (linea U/D=1)

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
 

2. Equazioni di funzionamento

Il metodo di progettazione dei contatori sincroni porta alle seguenti funzioni da applicare agli ingressi J e K dei flip-flop utilizzati.

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 = Q2Q1    per il flip - flop più significativo. 


c) contatore sincrono binario UP/DOWN a 3 bit:  

J1 = K1 = 1

 per il flip-flop meno significativo (come nei casi precedenti); 

   J2 = K2 = Q1U/D + Q1U/D  per il secondo flip - flop; 

    J3 = K3 = Q2Q1U/D +Q2 Q1U/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.

CONTATORE MOD.8 U/D
Fig.3 Schema logico del contatore sincrono UP/DOWN a tre bit.
 

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.

MUX
Fig.4 Realizzazione a porte NAND di un MUX a 2 ingressi.

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.

4. Impostazione della simulazione

Per ottenere il generatore di clock DSTM1 avente all'interno la dicitura CLK, si attiva il comando DRAW/GET NEW PART (oppure CTRL+G) e si digita, nel campo part name, DigClock.
Doppio click nel DigClock per definire ONTIME=0.5us e OFFTIME=0.5us (peraltro già preimpostati).
La linea U/D, per la selezione della direzione del conteggio, viene applicata all'ingresso S dei due MUX ed è definita da un altro generatore di clock, DSTM2 avente ONSTATE=10us e OFFSTATE=10us.
In tal modo il contatore conterà in avanti per 10 impulsi di clock e indietro per altri 10 impulsi di clock nell'intervallo di tempo di 20 us.
Se si decide di inizializzare a zero i flip-flop il contatore assumerà i seguenti valori come mostrato in fig.5.
Per ottenere la simulazione del funzionamento come in fig.3 fare come segue:
  1. si attiva il comando ANALYSIS/SETUP,
  2. si clicca sul pulsante DIGITAL SETUP;
  3. nella maschera flip - flop initialization si attiva all 0 ;
  4. si clicca su OK;
  5. si abilita la casella transient;
  6. si clicca sul pulsante transient e si definiscono i seguenti valori:
    1. print step = 200ns;
    2. final time= 20us;
  7. si termina con OK e successivamente con CLOSE.
Si può procedere alla simulazione attivando il comando ANALYSIS/SIMULATE (oppure il tasto funzione F11).

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.

Forme d'onda
Fig.5 Forme d'onda del contatore sincrono UP/DOWN a tre bit ottenute col programma Probe.

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.

5. Osservazioni

Un'analisi più attenta dei risultati porta ad osservare degli spike nella configurazione decimale del contatore in corrispondenza del passaggio da un numero dispari ad un numero pari durante il conteggio UP e del passaggio da un numero pari ad un numero dispari durante il conteggio DOWN.

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