Contatore Johnson ad autocorrezione

Il contatore Johnson è una particolare applicazione dei registri a scorrimento, realizzabile con i normali flip flop, in cui l’uscita negata dell’ultimo flip-flop è collegata all’ingresso dati del primo flip-flop. I bit, ad ogni impulso di clock, scorrono da un flip-flop a quello successivo. Nel caso di 4 bit, supponendo i flip-flop inizialmente azzerati, si ottiene la seguente tabella della verità che evidenzia alcune curiose caratteristiche di funzionamento.

CK

Q1

Q2

Q3

Q4

Q4N

0

0

0

0

0

1

1

1

0

0

0

1

2

1

1

0

0

1

3

1

1

1

0

1

4

1

1

1

1

0

5

0

1

1

1

0

6

0

0

1

1

0

7

0

0

0

1

0

8

0

0

0

0

1

 Con Q4N si è indicata l’uscita negata, quella, cioè, che pilota l’ingresso D del primo F-F.

Si osservi che l’uscita Q4 per 4 impulsi di clock è a livello 0 e per quattro impulsi di clock è al livello 1. Poi si ripete la stessa situazione. La forma d’onda su Q4 (ed anche sulle altre linee) è quadra con periodo 8 volte (2 x 4 ove 4 è il numero di flip-flop impiegati) quello di clock. In generale, detto n il numero di flip-flop, su ciascuna uscita si preleva una forma d’onda rigorosamente quadra con periodo 2n rispetto a quello del clock.

Si mostra in fig.1 lo schema elettrico del contatore Johnson ad autocorrezione.

Fig.1 Contatore Johnson ad autocorrezione.

  Se le uscite Q1 Q2 Q3 e Q4 sono applicate a diodi LED questi ultimi mostreranno un effetto scenico interessante: inizialmente sono tutti spenti, poi si accendono in successione temporale uno dopo l’altro, da sinistra a destra, e poi si spengono uno dopo l’altro sempre da sinistra a destra. Imponendo un periodo di clock di 0.5s l’intera sequenza si esaurisce in 4 secondi.

  Il circuito proposto si dice contatore Johnson ad autocorrezione perché, se per qualche motivo, si dovesse venire a trovare in uno stato non previsto dal ciclo di funzionamento, in altre parole se la configurazione delle uscite non corrisponde a nessuna di quelle inserite nella tabella, dopo due soli impulso di clock il circuito rientra automaticamente nel ciclo corretto eseguendo, così, la correzione in automatico.

Ciò è reso possibile dalla funzione NAND tra  Q1 e Q2 negato. Tale funzione si applica agli ingressi di reset dei flip flop 3 e 4. L’uscita della porta NAND si porta a zero solo quando si ha: Q1=1 e Q2=0.

Dalla tabella di funzionamento ciò si ottiene solo se Q3 e Q4 sono uguali a 0. Se ciò non si verifica ci “pensa” la porta NAND ad azzerare Q3 e Q4 e, quindi, a ristabilire il corretto funzionamento. Se ci si ferma a riflettere su altre possibili situazioni anomale si giunge alla conclusione che la soluzione è proprio quella di azzerare Q3 e Q4 quando Q1 Q2 = 10.

 Fig.2 Forme d’onda del contatore Johnson ad autocorrezione.

  Prima di eseguire la simulazione bisogna ricordarsi di assegnare ai flip-flop i valori iniziali pari a 0 o a 1. Imporremo la condizione iniziale con flip-flop tutti azzerati attraverso il comando Analysis/Setup/Digital setup/All 0.

Il generatore di clock DSTM1, attivabile con la voce DigClock, ha periodo 1us: 0.5us per il livello logico basso e 0.5us per il livello logico alto.

  La forma d’onda indicata con A:PREbar è quella di uscita del generatore di clock DigClock indicato con DSTM2 in cui si è fissato un delay pari a 0.3us e un ONTIME di 50us.

In questo modo, nei 10us assegnati alla voce final time in Analysis/Setup/Transient, tale forma d’onda presenta un livello basso iniziale di 0.3us seguito dal livello logico alto. Inizialmente, quindi, si è simulato l’errore imponendo uno stato iniziale pari a 1101 (configurazione non prevista dal ciclo Johnson). Dopo due impulsi di clock si rientra nel ciclo Johnson corretto.

  L’uscita complessiva, indicata con out, fornisce il codice esadecimale dei quattro bit Q1 Q2 Q3 Q4. Il ciclo Johnson corretto percorre la sequenza: 0 8 C E F 7 3 1.  Se inizialmente il sistema è forzato nello stato D, non previsto dal ciclo, dopo un impulso di clock si porta in 6 e dopo un altro impulso di clock si porta in B (1011), si attiva la porta NAND che azzera gli ultimi due flop-flop e ciò porta il circuito spontaneamente ed immediatamente, senza l’attesa del successivo clock, nello stato 8 (1000).