CAPÍTULO 10
CONTADORES
Contadores estão presentes na maioria dos sistemas digitais e são usados para contar eventos. Os contadores podem ser classificados em síncronos e assíncronos.
Os contadores assíncronos são mais simples, pois não dispõem de sinal único de sincronismo, porém apresentam limitações de forma e velocidade de contagem. Por outro lado os contadores síncronos são mais rápidos e flexíveis devido à presença de um sinal de sincronismo, que os tornam mais complexos.
10.1 CONTADORES ASSÍNCRONOS
Em contadores assíncronos, a saída de um flip-flop funciona como entrada de clock para o flip-flop seguinte. A Figura 10.1 apresenta a estrutura básica de um contador binário assíncrono crescente de quatro bits.
Clk 1 1 Clk 1 1 Clk 1 1 Clk 1 1 A B C D Contar J1 Q1 Q1 J2 Q2 Q2 J4 Q4 Q4 J3 Q3 Q3 K1 K2 K3 K4
Figura 10.1 – Contador binário assíncrono crescente de quatro bits.
Como as entradas JK de cada flip-flop estão ligadas em 1, ao ocorrer uma rampa de descida na entrada de clock de um flip-flop, sua saída muda de estado. Como a saída Q de um flip-flop está ligada à entrada de clock do flip-flop seguinte, ao ocorrer uma transição de 1 para 0 nessa saída, o flip-flop seguinte é estimulado.
Assim, admitindo-se inicialmente que todas as saídas estejam inicialmente em 0, ao ocorrer o pulso Contar, a saída Q1 passa de 0 para 1. Essa transição de 0 para 1 não causa nada no flip-flop seguinte (visto que é ativo por rampa de descida) e sua saída permanece em 0, assim como as demais saídas, como indicado pela Contagem 1 da Tabela 10.1.
Tabela 10.1 – Contagem estabelecida pelo contador da Figura 10.1. Contagem D C B A 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 10 1 0 1 0 11 1 0 1 1 12 1 1 0 0 13 1 1 0 1 14 1 1 1 0 15 1 1 1 1 0 0 0 0 0
No próximo pulso Contar, a saída Q1 passa de 1 para 0, e essa mudança funciona como pulso de clock para o flip-flop seguinte, e dessa forma a saída Q2 passa para 1. Essa mudança de Q2, por sua vez, não causa nada em Q3 ou Q4, conforme indicado pela Contagem 2 da tabela. Com mais um pulso Contar, somente a saída Q1 passa de 0 para 1 (essa mudança não causa nada nos flip-flops seguintes, como indicado pela Contagem 3.
Com mais um pulso Contar, a saída Q1 passa de 1 para 0. Essa mudança funciona como pulso de clock para o flip-flop seguinte e a saída Q2 passa de 1 para 0. Essa mudança por sua vez funciona como pulso de clock para o flip-flop seguinte e a saída Q3 passa de 0 para 1, conforme indicado Contagem 4. Fica fácil perceber pela Tabela 10.1 o estabelecimento de uma contagem binária crescente. Ao atingir o valor Contagem 15, na ocorrência do próximo pulso, o contador volta ao estado inicial ou Contagem 0.
10.1.1 Contagem Decrescente
Ao invés de se conectar a saída Q de um flip-flop à entrada de Clk do flip-flop seguinte, se for conectada a saída Q passa-se a ter um contador decrescente, como ilustrado pela Figura 10.2 e pela Tabela 10.2.
Clk 1 1 Clk 1 1 Clk 1 1 Clk 1 1 A B C D Contar J1 Q1 Q1 J2 Q2 Q2 J4 Q4 Q4 J3 Q3 Q3 K1 K2 K3 K4
Figura 10.2 – Contador binário assíncrono decrescente de quatro bits. Tabela 10.1 – Contagem estabelecida pelo contador da Figura 10.2.
Contagem D C B A 0 0 0 0 0 15 1 1 1 1 14 1 1 1 0 13 1 1 0 1 12 1 1 0 0 11 1 0 1 1 10 1 0 1 0 9 1 0 0 1 8 1 0 0 0 7 0 1 1 1 6 0 1 1 0 5 0 1 0 1 4 0 1 0 0 3 0 0 1 1 2 0 0 1 0 1 0 0 0 1 0 0 0 0 0
Assim, admitindo-se inicialmente que todas as saídas estejam inicialmente em 0, ao ocorrer o pulso Contar, a saída Q1 passa de 0 para 1 e a saída Q passa de 1 para 0. Essa 1 mudança em Q funciona como pulso de clock para o flip-flop seguinte e a saída Q1 2 passa de 1 para 0 e a saída Q passa de 1 para 0, e essa mudança por sua vez funciona como 2 pulso de clock para o flip-flop seguinte e assim para os demais flip-flops, conforme indicado Contagem 15 na Tabela 10.2.
No próximo pulso Contar, a saída Q1 passa de 1 para 0 e a saída Q passa de 1 para 1
0. Essa transição de 0 para 1 não causa nada nos flip-flops seguintes, como indicado pela Contagem 14 da tabela. Dando prosseguimento ao processo, fica fácil perceber pela tabela o estabelecimento de uma contagem binária decrescente.
10.1.2 Contagem Decrescente/Decrescente
Conforme pode-se observar pelas Figuras 10.1 e 10.2, quando a entrada Q está ligada ao flip-flop seguinte tem-se um contador crescente, e quando a saída Q está ligada, tem-se um contador decrescente. Então se for possível selecionar entre Q e Q pode-se ter um contador crescente ou decrescente.
A Figura 10.3 ilustra uma forma de implementação de se fazer a seleção entre Q e Q utilizando multiplexador. Estando a linha de seleção em 0, a saída Q é passada à entrada do flip-flop seguinte e tem-se um contador crescente. Por outro lado, se a linha de seleção está em 1, a saída Q é passada à entrada do flip-flop seguinte e tem-se um contador decrescente.
1 1 1 1 M U X 1 1 M U X 1 1 M U X A B C D e Decrescent Crescente / Clk J1 Q1 Q1 K1 Clk J2 Q2 Q2 K2 Clk J3 Q3 Q3 K3 Clk J4 Q4 Q4 K4 Contar
Figura 10.3 – Contador binário assíncrono crescente/decrescente utilizando multiplexador. Pode-se obter exatamente o mesmo resultado utilizando um Ou-Exclusivo no lugar do multiplexador, como ilustrado na Figura 10.4.
1 1 1 1 A Conta e Decrescent Crescente / 1 1 B 1 1 C D Clk J4 Q4 Q4 K4 Clk J3 Q3 Q3 K3 Clk J2 Q2 Q2 K2 Clk J1 Q1 Q1 K1
Figura 10.4 – Contador binário assíncrono crescente/decrescente utilizando Ou-Exclusivo. Tabela 10.3 – Função Ou-Exclusivo.
X Y XY 0 0 0 0 1 1 1 0 1 1 1 0
Para melhor entender o uso da porta Ou-Exclusivo na seleção de contagem crescente/decrescente, considere a Tabela 10.3. Estando a variável X em 0, a saída XY é igual a Y, por outro lado, se a variável X for 1, a saída XY é igual a Y .
Considere agora o contador da Figura 10.2. Se a linha de seleção estiver em 0, significa que o valor da saída Q será aplicado no flip-flop seguinte. Por outro lado se a linha de seleção estiver em 1, significa que o valor da saída Q será invertido e aplicado no flip-flop seguinte, o que é equivalente a aplicar o valor de Q no flip-flop seguinte.
10.1.3 Valor Inicial de Contagem
Dependendo da aplicação, pode ser necessário estabelecer um valor inicial de contagem para um contador, que seja diferente de 0. Valor inicial de contagem pode ser implementado usando a abordagem apresentada na Figura 10.5.
A 1 1 Clk J K Set Clr Q Q a Inicial X Y
Figura 10.5 – Estabelecimento de condição inicial em flip-flop.
Se Inicial for igual a 0, X e Y serão iguais a 1, independente de a e nada acontece no flip-flop.
Por outro lado, se Inicial for igual a 1, o valor de a e passa a ser determinante no estado do flip-flop. Nesse caso, se a for igual a 0, X será 1 e Y será 0, que por sua vez
promove o “reset” do flip-flop, levando sua saída para 0. Ao contrário, se a for igual a 1, X será 0 e Y será 1, que por sua vez promove o “set” do flip-flop, levando sua saída para 1. Em outras palavras, se Inicial for igual a 1, a saída A assume o valor de a.
A Figura 10.6 apresenta esta abordagem no circuito do contador. Assim, se Inicial for igual a 1, a saídas ABCD assumem o valor inicial de contagem presente em abcd. Em outras palavras o valor inicial de contagem abcd é carregado no contador.
1 1 C D Contar Clk J Q Q K Set Clr 1 1 B Clk J K Set Clr Q Q 1 1 A Clk J Q Q K Set Clr 1 1 Clk J K Set Clr Q Q c d b a Inicial
Figura 10.6 – Estabelecimento de condição inicial em contador.
10.1.4 Valor Final de Contagem Cíclica
Contadores binários fazem a contagem binária cíclica de todos os valores na faixa de contagem. Assim, como exemplo, um contador de 4 bits conta de 0000 até 1111, retorna à 0000 e continua contando. Como exemplo, eventualmente pode ser necessário fazer esse contador contar somente até 9. Desta forma torna-se necessário fazer o contador reiniciar a contagem imediatamente após o 9.
A maneira mais simples de fazer isso é através do “reset” do contador quando for aparecer o número seguinte ao 9, que é 10. Como pode ser observado pela Tabela 10.1, tem-se DCBA = 1010 para 10. Nestem-se caso tem-tem-se D e B iguais a 1, e essa condição não ocorre para os demais números compreendidos entre 0 e 9. A Figura 10.7 apresenta a forma mais simples de se obter essa implementação. Como se pode observar, a condição DCBA = 1010 provoca o “reset” do contador, que retorna ao valor inicial e a contagem é retomada.
1 1 1 1 1 1 1 1 A B C D Contar Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q
Figura 10.7 – Estabelecimento de 9 como valor final de contagem cíclica.
10.1.5 Valor Final de Contagem com Parada do Contador
Eventualmente pode ser necessário fazer o contador parar em um determinado valor de contagem. Nesse caso, basta interromper o pulso Contar, como indicado pela porta lógica Ou da Figura 10.8. Ao atingir o valor de contagem desejado, que no exemplo é 9, o ponto X passa a valer 1 e a saída da porta lógica Ou torna-se 1 permanentemente, e por consequência o contador para em 9.
1 1 1 1 1 1 1 1 A B C D Clk J K Q Q Clk J K Q Q Clk J K Q Q Clk J K Q Q RA RB RC RD Contar X
Figura 10.8 – Estabelecimento de valor final de contagem com parada do contador.
A Figura 10.9 apresenta uma forma de se implementar contadores de módulo variável, isto é, contadores que permitem a seleção do valor final de contagem. Quando o valor de contagem em ABCD for igual ao valor de RARBRCRD, o nó X torna-se 1 e o contador para. O valor de RARBRCRD pode ser proveniente de chaves ou de um registrador. Esse mesmo conceito pode ser aplicado para contadores com valor final de contagem cíclica.
1 1 1 1 1 1 1 1 A B C D Clk J K Q Q Clk J K Q Q Clk J K Q Q Clk J K Q Q RA RB RC RD Contar
Figura 10.9 – Contador com valor final de contagem programável.
10.1.6 Valor de Contagem Transitório
Considere o contador binário assíncrono crescente de quatro bits da Figura 10.1 e reapresentado na Figura 10.10. Estando o contador em Contagem 7, isto é, DCBA = 0111, após a ocorrência de um sinal Contar, a contagem avança, passando para Contagem 8, isto é, DCBA = 1000. Entretanto, nesse curto intervalo de tempo, durante as transições dos flip-flops, surgem valores momentâneos ou transitórios de contagem errôneos.
Clk 1 1 Clk 1 1 Clk 1 1 Clk 1 1 A B C D Contar J1 Q1 Q1 J2 Q2 Q2 J4 Q4 Q4 J3 Q3 Q3 K1 K2 K3 K4
Figura 10.10 – Contador binário assíncrono crescente de quatro bits da Figura 10.1.
Estando o contador em DCBA = 0111, após a ocorrência de um sinal Contar, a saída Q1 passa de 1 para 0, e essa mudança funciona como pulso de clock para o flip-flop seguinte. Entretanto, antes da saída Q2 passar para 0, tem-se DCBA = 0110 por um curto intervalo de tempo. A mudança de Q2, por sua vez funciona como pulso de clock para o flip-flop seguinte, porém, antes da saída Q3 passar para 0, tem-se DCBA = 0100 brevemente. Continuando, a mudança de Q3, por sua vez aciona o flip-flop seguinte e tem-se momentaneamente DCBA = 0000. Finalmente, a mudança de Q3 aciona o último flip-flop e o contador passa para DCBA = 0000. Essas contagens transitórias estão ilustradas na Figura 10.11 onde Δt corresponde ao tempo de propagação do flip-flop. Essas contagens transitórias estão indicadas na Tabela 10.4.
A B C D Contar 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 t Δt Δt Δt Δt
Figura 10.11 – Contador binário assíncrono crescente de quatro bits da Figura 10.1.
Tabela 10.4 – Contagem transitória entre 7 e 8 no contador da Figura 10.9. Contagem D C B A 7 0 1 1 1 T6 0 1 1 0 T4 0 1 0 0 T0 0 0 0 0 8 0 1 1 1
Valores transitórios ocorrem também para outros valores de contagem, como por exemplo, entre 3 e 4, 11 e 12, 15 e 0, dentre outros. Como pode ser observado pela Tabela 10.4, entre 7 e 8 ocorreram os valores transitórios de T6, T4 e T0. Esses valores são imperceptíveis em contadores operando em baixa frequência, como é o caso de um relógio digital. Entretanto, esses valores transitórios causam problemas em circuitos operando em alta frequência, e podem ser evitados por meio de contadores síncronos.
10.2 CONTADORES SÍNCRONOS
Em contadores síncronos, o sinal de clock é aplicado simultaneamente em todos os flip-flops e consequentemente são acionados ao mesmo tempo. Desta forma não há valores errôneos intermediários de contagem, como ocorre nos contadores assíncronos. Adicionalmente contadores síncronos permitem contagens personalizadas, em vários códigos e em várias sequencias.
A seguir é apresentado, através de um exemplo, a sequencia passos de projeto de um contador síncrono, que consiste de:
1. Identificação ou estabelecimento de contagem, 2. Montagem de mapas de estado seguinte, 3. Montagem dos mapas dos flip-flops, 4. Montagem do circuito.
10.2.1 Sequencia de Contagem
Considere como exemplo a sequencia de contagem apresentada na Tabela 10.5. A sequencia de contagem é decorrente da aplicação desejada do contador. Pode-se observar que é uma contagem cíclica.
Tabela 10.5 – Exemplo de Contagem. X Y Z W 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 0
10.2.2 Mapas de Estado Seguinte
Como há quatro bits de contagem, e como nenhum valor de contagem se repete, são necessários quatro flip-flops e consequentemente necessitam-se de quatro mapas de estado seguinte, como indicado a seguir, onde X+ indica o estado seguinte de X. Desta forma, os valores a serem inseridos no mapa, correspondem aos valores seguintes de contagem.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 00 01 01 11 11 10 10 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 00 01 01 11 11 10 10 Z+ W+
Estando o contador em 0000, o próximo valor de contagem é 0001. Desta forma, localiza-se a posição XYZW = 0000 no mapa. Essa posição recebe X+Y+Z+W+ = 0001, como indicado a seguir. XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 0 01 01 11 11 10 10 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 1 01 01 11 11 10 10 Z+ W+
Agora, estando o contador em 0001, o próximo valor de contagem é 0010. Assim a posição XYZW = 0001 no mapa recebe X+Y+Z+W+ = 0010, como indicado a seguir. Em outras palavras, mapas recebem os estados ou valores seguintes de contagem.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 0 01 0 01 0 11 11 10 10 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 1 01 1 01 0 11 11 10 10 Z+ W+
Continuando, estando o contador em 0010, o próximo valor de contagem é 0011. Assim a posição XYZW = 0010 no mapa recebe X+Y+Z+W+ = 0011, como indicado a seguir.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 0 01 0 01 0 11 11 10 0 10 1 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 1 01 1 01 0 11 11 10 0 10 0 Z+ W+
Seguindo essa metodologia, completam-se os mapas, com todos os valores de contagem, como apresentado a seguir, lembrando que os mapas recebem os estados ou valores seguintes de contagem.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 0 0 00 1 0 1 1 01 1 - 1 1 01 0 - 0 0 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 10 0 - 1 0 Z+ W+
Combinações que não aparecem na contagem original recebem - (opcional), pois isso permite simplificar as leituras. Essa condição só é possível se o contador possuir um reset global. Se o contador não possuir um reset global, as combinações opcionais devem ser substituídas por 0, pois se o contador assumir um desses valores inválidos de contagem ao ser ligado, no estado seguinte (após o pulso de clock), a contagem estará em 0000.
10.2.3 Mapas de Excitação – Flip-flop SR
Os mapas de excitação dos flip-flops são obtidos à partir dos mapas de estado seguinte e das tabelas de transição dos flip-flops, apresentadas na Tabela 10.6.
Tabela 10.6– Tabela de transição do flip-flops.
Atual Segui n te Q Q+ S R J K D T 0 0 0 - 0 - 0 0 0 1 1 0 1 - 1 1 1 0 0 1 - 1 0 1 1 1 - 0 - 0 1 0
O contador será implementado com flip-flops SR, desta forma serão necessários dois mapas para cada variável (SX, RX, SY, RY, SZ, RZ, SW e RW).
Considere inicialmente o mapa de estado seguinte X+. Tendo em vista que X é a variável de interesse, o mapa deve ser dividido em X+=0 e X+=1, como indicado a seguir. Lembre-se que o mapa foi preenchido com o estado seguinte de contagem. Desta forma, tem-se e estado atual do lado de fora do mapa, e o estado seguinte dentro do mapa.
X=0 X=1 XY ZW 00 01 11 10 00 0 1 1 1 01 0 - 1 1 11 0 0 0 - 10 0 - 1 1 X+
Assim, para a posição XYZW = 0000 tem-se X=0 (estado atual fora do mapa) e X+ =0 (estado seguinte dentro do mapa). Com base na Tabela 10.6, para Q=0 (estado atual) e Q+=0 (estado seguinte), tem-se S=0 e R=-, como indicado a seguir.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 - 01 01 11 11 10 10 SX RX
Essa mesma condição é valida para as posições XYZW = 0001, 0010, 0011 e 0111, portanto, tem-se: XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 00 - 01 0 01 - 11 0 0 11 - - 10 0 10 - SX RX
Para a posição XYZW = 0100 tem-se X=0 (estado atual) e X+ =1 (estado seguinte). Com base na Tabela 10.6, para Q=0 (estado atual) e Q+=1 (estado seguinte), tem-se S=1 e R=0, como indicado a seguir.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 00 - 0 01 0 01 - 11 0 0 11 - - 10 0 10 - SX RX
Para a posição XYZW = 1111 tem-se X=1 (estado atual) e X+ =0 (estado seguinte). Com base na Tabela 10.6, para Q=1 (estado atual) e Q+=0 (estado seguinte), tem-se S=0 e R=1, como indicado a seguir.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 00 - 0 01 0 01 - 11 0 0 1 11 - - 0 10 0 10 - SX RX
Para as posições XYZW = 1100, 1101, 1110, 1000, 1001 e 1010 tem-se X=1 (estado atual) e X+ =1 (estado seguinte). Com base na Tabela 10.6, para Q=1 (estado atual) e Q+=1 (estado seguinte), tem-se S=- e R=0, como indicado a seguir.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 - - 00 - 0 0 0 01 0 - - 01 - 0 0 11 0 0 1 11 - - 0 10 0 - - 10 - 0 0 SX RX
Finalmente, as demais posições, que já eram opcionais, recebem opcional, e os mapas finais estão indicados a seguir, juntamente com as leituras de SX e RX.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 - - 00 - 0 0 0 01 0 - - - 01 - - 0 0 11 0 0 0 - 11 - - 1 - 10 0 - - - 10 - - 0 0 Z Y SX RX ZW
Os mapas de estado seguinte Y+, Z+ e W+ são apresentados a seguir. Observe atentamente como os mapas foram divididos. Novamente, tem-se e estado atual (lado de fora do mapa), e o estado seguinte (dentro do mapa).
Y=0 Y=1 Y=0 XY ZW ZW 00 01 11 10 00 0 0 1 0 01 0 - 1 0 11 0 0 1 - 10 1 - 1 1 Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 Z=0 00 0 0 0 0 W=0 00 1 0 1 1 01 1 - 1 1 W=1 01 0 - 0 0 Z=1 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 W=0 10 0 - 1 0 Z+ W+
Seguindo a mesma metodologia da variável X, são desenvolvidos os mapas das variáveis Y, Z e W, como indicado a seguir, juntamente com as respectivas leituras.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 - 0 00 - 1 0 - 01 0 - - 0 01 - - 0 - 11 0 0 - - 11 - 1 0 - 10 1 - - 1 10 0 - 0 0 W Z SY RY XY XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 0 0 00 - - - - 01 1 - 1 1 01 0 - 0 0 11 0 - - - 11 1 0 0 - 10 0 - - 0 10 1 - 0 1 W Z SZ RZ YZ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 1 0 1 1 00 0 - 0 0 01 0 - 0 0 01 1 - 1 1 11 0 - - - 11 1 0 0 - 10 0 - 1 0 10 - - 0 - W XY W Z Y SW RW ZWYW 10.2.4 Montagem do Circuito
A Figura 10.11 apresenta a implementação do contador a partir das expressões anteriores. Observe que o sinal Contar é aplicado em todos os flip-flops ao mesmo tempo, caracterizando assim um contador síncrono.
Contar Clk S R Q Q Clk S R Q Q Clk S R Q Q X Y W Clk S R Q Q Z
Figura 10.11 – Contador que implementa a contagem dada pela Tabela 10.5.
10.2.5 Mapas de Excitação – Flip-flop JK
A seguir são reapresentados os mapas de estado seguinte, com o objetivo de facilitar a visualização da obtenção dos mapas de excitação dos flip-flops JK.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 0 0 00 1 0 1 1 01 1 - 1 1 01 0 - 0 0 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 10 0 - 1 0 Z+ W+
A partir dos mapas de estado seguinte (acima) e da Tabela 10.6, obtém-se os mapas de excitação dos flip-flops JK a seguir, da mesma forma que foram obtidos os mapas de excitação dos flip-flops SR.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 - - 00 - - 0 0 01 0 - - - 01 - - 0 0 11 0 0 - - 11 - - 1 - 10 0 - - - 10 - - 0 0 Z Y JX KX ZW
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 - - 0 00 - 1 0 - 01 0 - - 0 01 - - 0 - 11 0 - - - 11 - 1 0 - 10 1 - - 1 10 - - 0 - W Z JY KY X XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 0 0 00 - - - - 01 1 - 1 1 01 - - - - 11 - - - - 11 1 0 0 - 10 - - - - 10 1 - 0 1 W JZ KZ Y XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 1 0 1 1 00 - - - - 01 - - - - 01 1 - 1 1 11 - - - - 11 1 0 0 - 10 0 - 1 0 10 - - - - XY Z Y JW KW ZY
Como pode ser observado, as leituras dos flip-flops JK são iguais ou mais simples que as expressões dos flip-flops SR.
10.2.6 Leitura Simplificada – Flip-flop JK
As leituras anteriores podem ser obtidas de forma mais rápida, sem a necessidade de montar mapas de excitação dos flip-flops. Por conveniência os mapas de estado seguinte são apresentados novamente a seguir.
Observe que os mapas estão divididos em suas respectivas variáveis. Assim, por exemplo, o mapa X é divido em X=0 e X=1.
X=0 X=1 Y=0 Y=1 Y=0 XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 Z=0 00 0 0 0 0 W=0 00 1 0 1 1 01 1 - 1 1 W=1 01 0 - 0 0 Z=1 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 W=0 10 0 - 1 0 Z+ W+
Compare o mapa de estado seguinte da variável X com os mapas de excitação do flip-flop X, que é apresentado novamente a seguir.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 - - 00 - - 0 0 01 0 - - - 01 - - 0 0 11 0 0 - - 11 - - 1 - 10 0 - - - 10 - - 0 0 X J K X
Observe que o mapa de JX é exatamente igual ao lado X=0 do mapa de X+, e que o mapa de KX é o inverso do lado X=1 do mapa de X+. Essa condição também vale para os demais mapas.
Observe também que nas expressões do flip-flop X, a variável X não aprece. Em outras palavras, X não aparece em JX YZouKX ZW . Da mesma forma Y não aparece em JY ZWouKY X , e o mesmo é válido para as demais variáveis.
Como base nessas duas observações, os mapas de excitação devem ser lidos da seguinte forma:
No lado 0 do mapa, leem-se os 1 para a expressão de J.
No lado 1 do mapa, leem-se os 0 para a expressão de K.
Considere, como exemplo os mapas X+ e Y+ reapresentados a seguir. No lado 0 do mapa X+, leem-se os 1. Assim, tem-se JX XYZ, mas como X é eliminado, tem-se
Z Y
JX . No lado 1 do mapa X+, leem-se os 0. Assim, tem-se KX XZW, mas como X é eliminado, tem-seKX ZW.
X=0 X=1 Y=0 Y=1 Y=0
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 X+ Y+
Da mesma forma, no lado 0 do mapa Y+, leem-se os 1. Assim, tem-se JY YZW, mas como X é eliminado, tem-se JY ZW. No lado 1 do mapa Y+, leem-se os 0. Assim, tem-se KY XY, mas como X é eliminado, tem-seKY X .
Assim, para completar, seguem os mapas de Z+ e W+, e suas respectivas leituras: W JZ , KZ Y, JW YZ XY e KW ZY. XY XY ZW 00 01 11 10 ZW 00 01 11 10 Z=0 00 0 0 0 0 W=0 00 1 0 1 1 01 1 - 1 1 W=1 01 0 - 0 0 Z=1 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 W=0 10 0 - 1 0 Z+ W+
10.2.7 Mapas de Excitação – Flip-flop T
A seguir são apresentados novamente os mapas de estado seguinte, com o objetivo de facilitar a visualização da obtenção dos mapas de excitação dos flip-flops T.
X=0 X=1 Y=0 Y=1 Y=0 XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 Z=0 00 0 0 0 0 W=0 00 1 0 1 1 01 1 - 1 1 W=1 01 0 - 0 0 Z=1 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 W=0 10 0 - 1 0 Z+ W+
A partir desses mapas e da tabela de transição do flip-flop T, obtém-se os mapas de excitação dos flip-flops T mostrados a seguir, da mesma forma que foram obtidos os mapas de excitação dos flip-flops SR e JK.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 0 0 00 0 1 0 0 01 0 - 0 0 01 0 - 0 0 11 0 0 1 - 11 0 1 0 - 10 0 - 0 0 10 1 - 0 1 Z Y X TX TX XYZW XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 0 0 00 1 0 1 1 01 1 - 1 1 01 1 - 1 1 11 1 0 0 - 11 1 0 0 - 10 1 - 0 1 10 0 - 1 0 Z Y W Z TZ TW XYWYZYWZW As leituras anteriores podem ser obtidas de forma mais rápida, sem a necessidade de montar mapas de excitação dos flip-flops. Observe que o lado X=0 do mapa de X+ é o mesmo que o lado X=0 do mapa de TX e o lado X=1 do mapa de X+ é o inverso do lado X=0 do mapa de TX.
Desta forma, a leitura simplificada pode ser feita diretamente no mapa de X+. No lado X=0 leem-se os 1, e no lado X=1 leem-se os 0, como indicado a seguir. Esse mesmo procedimento é usado para as demais variáveis, também como indicado a seguir.
X=0 X=1 Y=0 Y=1 Y=0
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 X+ Y+ XY XY ZW 00 01 11 10 ZW 00 01 11 10 Z=0 00 0 0 0 0 W=0 00 1 0 1 1 01 1 - 1 1 W=1 01 0 - 0 0 Z=1 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 W=0 10 0 - 1 0 Z+ W+
10.2.8 Mapas de Excitação – Flip-flop D
Como se pode observar pela tabela de transição dos flip-flops, apresentada na Tabela 10.6, o estado seguinte (Q+) é exatamente igual à entrada D. Isto decorre do fato de que o estado desejado na saída corresponde ao valor que deve ser colocado na entrada. Em outras palavras, a saída segue a entrada.
Desta forma, o mapa de X+ é exatamente o mesmo que DX. As leituras estão indicadas a seguir para todos os mapas.
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 1 1 1 00 0 0 1 0 01 0 - 1 1 01 0 - 1 0 11 0 0 0 - 11 0 0 1 - 10 0 - 1 1 10 1 - 1 1 Y X W X Z Y DX DY XYZW
XY XY ZW 00 01 11 10 ZW 00 01 11 10 00 0 0 0 0 00 1 0 1 1 01 1 - 1 1 01 0 - 0 0 11 0 1 1 - 11 0 1 1 - 10 0 - 1 0 10 0 - 1 0 YZ W Z DZ DW YZWXYWYZ 10.3 ACOPLAMENTO DE CONTADORES
Contadores são usados para contagem de eventos. Quando a quantidade de eventos fica muito grande, torna-se necessário fazer a contagem em módulos. O módulo de contagem típico é 10, e assim, a contagem de mil (000 até 999) pode ser feito utilizando três módulos. Há duas formas básicas de acoplamento; assíncrono e pseudo-síncrono.
10.3.1 Acoplamento Assíncrono
Como exemplo de acoplamento assíncrono, considere um relógio digital. Considere, por simplicidade, que se deseja usar o sinal da rede elétrica como base de tempo. Assim, como o sinal da rede elétrica tem uma frequência de 60Hz, a cada 60 pulsos tem-se o período de 1s. Em outras palavras, o sinal de 60Hz deve ser dividido por 60. A forma mais adequada de se implementar a divisão por 60 é fazer a divisão por 10 e depois por 6.
A divisão por 10 (contagem de 0 a 9) pode ser obtida com o contador previamente apresentado na Figura 10.7, cuja contagem é apresentada na Tabela 10.7. Somente ao final da contagem, a linha D passa de 1 para 0. Desta forma, a linha D pode ser usada como sinal de clock para o próximo contador.
Tabela 10.7 – Contagem do divisor por 10. Contagem D C B A 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 0 0 0 0 0
O contador de 0 a 5 (divisor por 6) pode ser implementado com o circuito da Figura 10.12, e cuja contagem é apresentado na Tabela 10.8. Somente ao final da contagem, a linha G passa de 1 para 0. Desta forma, a linha G pode ser usada como sinal de clock para o próximo contador. 1 1 1 1 1 1 1 1 E F G H Contar Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q
Figura 10.12 – Divisor por 6. Tabela 10.8 – Contagem do divisor por 10.
Contagem H G F E 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 0 0 0 0 0
A Figura 10.13 apresenta o acoplamento desses contadores (divisor por 6 e divisor por 10) para formar um contador de 00 a 59. Toda vez que a contagem no Contador 0-9 passar de 9 para 0 (reiniciar), há um pulso para o Contador 0-5. Quando o Contador 0-5 passar de 5 para 0, há um pulso para o próximo contador.
Contador
0-5
H G F EContador
0-9
D C B A Próximo contador ContarSeguindo esse procedimento, pode-se montar a estrutura de todo o relógio, como indicado na Figura 10.14. Nas saídas dos contadores de minutos e horas, deve-se colocar um mostrador para visualização do tempo.
Contador 0-5 Contador 0-9 Contador 0-5 Contador 0-9 Contador 0-5 Contador 0-9 Contador 0-2 Contador 0-9 SEGUNDOS MINUTOS HORAS 60 Hz H G F E D C B A H G F E D C B A H G F E D C B A
Figura 10.14 – Estrutura básica dos contadores de um relógio digital.
A contagem de horas merece atenção especial, pois a contagem não segue até 59, e sim somente até 23. Nesse caso, deve-se alterar o mecanismo de reset dos contadores para haver o reset no 24, como indicado na Figura 10.15. Observe que a contagem de unidades de hora há reset em 10, isto é, a contagem segue até 9 e retorna para 0. Entretanto, quando o contador de unidades de horas estiver em 4, e o contador de dezenas de horas estiver em 2, deve haver um reset global, pois a contagem deve seguir apenas até 23.
O Contador 0-5 necessita de apenas 3 bits, mas foi implementado com 4 bits, apenas por opção, para manter a quantidade de flip-flop constante nos contadores. O mesmo ocorre com o Contador 0-2.
Seguindo o mesmo procedimento anterior, pode-se implementar também a contagem de dias da semana, dias do mês, mês e até ano.
1 1 1 1 1 1 1 1 H G F E Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q 1 1 1 1 1 1 1 1 A B C D Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q Clk J K Clr Q Q Contar
Figura 10.15 – Estrutura básica do contador 00 a 23.
10.3.2 Acoplamento Pseudo-síncrono
A Figura 10.16 apresenta um contador síncrono 0 a 9 utilizando flip-flops D.
Contar Clk J K Q Q A B C D 1 1 Clk J K Q Q Clk J K Q Q Clk J K Q Q
Figura 10.16 – Contador síncrono de 0 a 9.
A Figura 10.17 ilustra a forma de se implementar um contador de 000 a 999 utilizando contadores síncrono através de acoplamento pseudo-síncrono. Observe que a contagem de dezenas só acontece quando o contador de unidades estiver em 9 (1001) e ocorrer um pulso de clock. Da mesma forma, o contador de centenas só avança quando os contadores de unidade e de dezenas estiverem simultaneamente em 9.
A porta lógica ligada na entrada do contador de unidades tem a função de garantir que o contador de unidades receba o clock no mesmo momento que outros contadores, garantindo assim o sincronismo entre todos contadores.
Contador 0-9 D C B A Contador 0-9 D C B A Contador 0-9 D C B A Contar
Figura 10.17 – Acoplamento pseudo-síncrono de contadores síncronos. 10.4 CONTADORES UTILIZANDO VHDL
Contadores utilizando VHDL.
10.5 EXERCÍCIOS
1. A partir de um contador binário assíncrono obtenha um contador Gray.
2. No contador da Figura 10.7, ao se atingir o valor final de contagem, o contador retorna a 0. Modifique esse contador para permitir o reinício em qualquer valor de contagem.
3. Em um contador síncrono, como se pode implementar valor inicial de contagem sem o uso das linhas Clear e Set?
4. Projetar um contador Gray síncrono de 4 bits utilizando flip-flops SR. 5. Repita o exercício anterior considerando flip-flops JK, T e D.
6. Projete um contador síncrono crescente no código BCDXS3 utilizando flip-flops D. 7. Repita o exercício anterior para contagem decrescente.
8. Como se pode modificar o contador dos exercícios 6 e 7 para permitir a seleção de contagem crescente/decrescente?
9. Repita os exercícios 6 e 7 para os demais tipos de flip-flops.
10. Projete um contador utilizando flip-flops JK que implemente a contagem dada na Tabela 10.9. Observe que há valores que se repetem!
Tabela 10.9 – Contagem com valores repetidos. C B A 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 0