Contadores Assíncronos

A figura abaixo mostra um contador assíncrono crescente de módulo 8 (MOD-8), que conta de 0 à 7:

cont_assincrono_3_FFs-JK.png

Video no Youtube:

Arquivo original: cont_assincrono_3_FFs-JK_1Hz.mp4

Note que neste tipo de circuito (de contador assíncrono), os seus FF's estão na configuração toggle (que alternam estado cada vez que recebem um pulso de clock).

Para entender o funcionamento deste circuito se faz necessário deduzir as formas de onda desenvolvidas nas saídas dos FF's.

Notar que os FF's estão numa estrutura "serial":

Deduzindo a forma de onda para Clock x Q0:

formas_onda_q0.png

Podem ser considerados os atrasos de propagação dos FF's:

formas_onda_q0_b.png

Note que as saídas do primeiro FF, saída Q0 está dividindo a frequência de entrada (do sinal de Clock) por 2.

Completando as formas de onda para a saída Q1 (note que FF-1 depende da saída de Q0 (FF anterior):

formas_onda_q1.png

Completando as formas de onda para a saída Q1 (note que FF-1 depende da saída de Q0 (FF anterior):

formas_onda_q2.png

Podemos então confirmar que é realizada uma sequência de contagem crescente:

formas_onda_contagem.png

Note que ao final da contagem, o circuito naturalmente “recicla”, isto é, recomeça a contagem do 0 (zero) - enquanto o sinal de clock não for pausado.

Se os atrasos de propagação forem desprezados ou se o circuito foi simulado com uma baixa frequência para o sinal de Clock os atrasos não são perceptíveis:

cont_assincrono_3_FFs-JK_ondas_1Hz.png

Podemos representar a contagem realizada na forma de uma tabela verdade para este contador (ou tabela de sequência de contagem):

cont_assincrono_3_FFs-JK_tabela_contagem.png

Obs.: O pulso de Clock 0 se refere ao instante inicial (quando o circuito é iniciado/energizado).

E também podemos representar o funcionamento deste contador na forma de um diagrama (de sequência) de estados:

cont_assincrono_3_FFs-JK_estados.png

Exercício Proposto

Desenhe as formas de onda para um circuito semelhante ao mostrado no início deste texto, mas em vez de usar FF's-JK ativados por borda de descida, use FF's por borda de subida.

Detalhes no funcionamento de um contador assíncrono

Analisando em maiores detalhes como é realizada a contagem, percebemos que:

cont_assincrono_3_FFs-JK_atrasos.png

Se percebe que a contagem não segue uma sequência perfeita. Ocorrem "glitches":

cont_assincrono_3_FFs-JK_glitches.png

Repare na figura anterior, que algumas transições não são seguem a sequência numérica esperada, assumindo estados transitórios, que duram por um período de tempo equivalente ao atraso de propagação de um FF.

Uma consulta nas especificações do FF adotado: 74LS76 rende:

pdf_74ls76_1.png

pdf_74ls76_AC-2.png

Num simulador, os atrasos de propagação podem se tornar perceptíveis se o período do sinal de clock for pouco maior que os atrasos de propagação presentes no circuito. Se o circuito anterior for simulador com:

\(f_{Clock}=10\) Mhz,

o período do sinal de Clock será de:

\(T=\dfrac{1}{f_{Clock}}=\dfrac{1}{10 \times 10^{6}}=\dfrac{1000}{10 \times 10^{9}}=100 \times 10^{-9}\) segundos ou \(T=100\) ns.

Isto implica que o atraso de propagação de um FF, em torno de \(t_{P}=20\) ns corresponde à \(=\frac{20}{100}\times100\%=0,2 \times 100\%=20\%\) de um ciclo do sinal de Clock.

De fato, uma simulação usando \(f_{Clock}=10\) MHz, envolvendo 12 pulsos de clock (período da simulação \(=12 \text{ pulsos de Clock } \times 100\)ns \(=1,2 \, \mu\)s) rende as seguintes formas de onda:

cont_assincrono_3_FFs-JK_ondas_10MHz.PNG

Nesta figura é até possível se perceber o \(t_{PLH}\) adotado por este simulador para os FF's 76LS76: \(t_{PLH}=15\)ns (notar cursor na posição TIME=115n=115 ns, então: \(t_{PLH}=115-100=15\) ns). Do modo semelhante pode ser inferido que este simular adota \(t_PHL=21\) ns para estas pastilhas.

Na última figura podem ser percebidos os "glitches". Cujo efeito fica mais ressaltado se tivermos que decodificar as saídas do contador para detectar a passagem por determinado estado (instante). de contagem, ver próximo circuito:

cont_assincrono_3_FFs-JK_com_DEC.png

Notar que as saídas \(O_i\) correspondem às saídas decodificadas em ATIVO ALTO do contador síncrono MOD-8. Isto significa que a saída \(O_6\) só deveria comutar para nível lógico ALTO uma única vez durante todo o ciclo de contagem deste contador (total de 2^3=8 pulsos de clock), quando a saída do contador atingir o número 6 (\(Q_2Q_1Q_0=110_{(2)}\)). Mas...

Se este circuito for simulado com \(f_{Clock}=10\) MHz, perceberemos as seguintes formas de onda:

cont_assincrono_3_FFs-JK_com_DEC_ondas_10MHz_glitches.png

Este mesmo circuito simulado com \(f_{Clock}=1\) Hz, rende as formas de onda mostradas à seguir:

cont_assincrono_3_FFs-JK_com_DEC_ondas_1Hz.png

A saída decodificada se aproxima do que era desejado, porém note que os glithces continuam acontecendo (ressaltados pelos pequenos picos de sinais, "spikes").

Nota-se que os glitches comprometeram a decodificação das saídas deste contador.

A próxima figura, mostra o que era desejado:

contador_saida_decodificada.jpg

Frequência máxima de operação

Com base nos diagramas de forma de onda mostrando os atrasos de propagação, se percebe que o que compromete o funcionamento de um contador síncrono é quando os atrasos acumulados incluindo seu penúltimo FF, coincide com a próxima borda ativa do sinal de Clock; neste ponto \(f_{Clock}=f_{Max}\).

Podemos reproduzir em formas de onda o que acontece quanto \(f_{Clock}=f_{Max}\), na pior situação, quando os 3 FF's são obrigados a mudar de estado, ou seja, a contagem passa de 7 para 0, ou ocorre a reciclagem; ver figura à seguir:

freq_max_002.png

Note no lado esquerdo da figura anterior (\(f_{Clock}=f_{Max}\)) que não existe uma “folga” entre o atraso de comutação de Q1 e a próxima borda ativa do sinal de clock (pulso de clock de No. 8 para 9). Neste caso, note que o contador nem produz a saída \(Q_2Q_1Q_0=000_{(2)}\) (o número 0 foi “saltado”) como se o mesmo tivesse continuado a contagem diretamente para o número 1. Perceba nesta figura que o contador também salta a contagem do número 3 para o número 5 (sem exibir nas suas saídas o número 4).

Já a mesma figura, lado direito, mostra o que acontece mesmo em frequências altas mas ainda com \(f_{Clock}<f_{Max}\). Pode ser percebido que o instante em que a contagem passa por zero pode ser bastante curta, equivalendo ao período de tempo de um glitch deste contador.

Perceba que o atraso de propagação do último FF (\(Q_2\)) não interfere na contagem, apenas impacta num atraso na apresentação dos resultados da contagem. Desde que a frequência máxima não tenha sido atingida, o contador (assíncrono) continua apresentando nas suas saídas, a sequência esperada (apesar dos gliches).

A frequência máxima de operação depende então de \(n-1\) FF's presentes na estrutura do contador assíncrono, ou neste caso em particular:

\(f_{Max}=\dfrac{1}{2 \times t_P}=\dfrac{1}{2 \times 20 \times 10^9}=\dfrac{1000}{40 \times 10^{-6}}=25 \times 10^6\) Hz ou \(f_{Max}=25\) MHz.

As próximas figuras mostras as formas de onda no circuito do contador assíncrono crescente MOD-8 para 3, com saídas decodificadas, para diferentes condições de simulação:

a) \(f_{Clok}<f_{Max}\), (\(f_{Clock}=10\) Mhz):

cont_assincrono_3_FFs-JK_com_DEC_ondas_10MHz.PNG

b) \(f_{Clock}=f_{Max}\), (\(f_{Clock}=25\) Mhz):

cont_assincrono_3_FFs-JK_com_DEC_ondas_25MHz.PNG

c) \(f_{Clock}>f_{Max}\), (\(f_{Clock}=40\) Mhz):

cont_assincrono_3_FFs-JK_com_DEC_ondas_40MHz.PNG

Perceba também que a frequência máxima de um circuito contador não está diretamente associado com a frequência máxima do FF adotado (que no caso é de \(f_{Max/\text{74LS75}}=30\) MHz no mínimo - ver especificações mostradas anteriormente).


Fim da Parte I >> Seguindo para Parte II


Circuitos Digitais II / Prof. Fernando Passold (atualizado em 27/03/2020).