Material de Contador Sincronos
Material de Contador Sincronos
Material de Contador Sincronos
Elétrica
Circuitos Digitais I
Contadores Síncronos
Orientador:
Autor:
15 de agosto de 2019
Circuitos Digitais I SUMÁRIO
Sumário
1 Introdução 2
2 A tabela verdade 3
2.5 Revisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4 Revisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4 Exercício resolvido 20
1 Introdução
Contador síncrono é um circuito digital formado por flip-flops em paralelos, tal que todas
as entradas clocks estejam conectados na mesma fonte de clock. Graças a isso, a análise e
o projeto de um contador síncrono é bem diferente da análise de um contador assíncrono;
enquanto um exercício de um contador assíncrono geralmente incluí a análise de uma
forma de onda para verificar quando e como cada flip-flop reage aos clocks, além do estudo
de estado temporários e pulso espúrios, um exercício de um contador síncrono consiste em
montar um contador, seguindo uma tabela verdade e projetando as entradas dos flip-flops.
O projeto de um contador síncrono que segue uma ordem crescente utiliza mais portas
lógicas que um contador assíncrono, porém, nunca é necessário utilizar as funções preset
e clear do contador síncrono, graças a isso, esse tipo de contador é preferível para ser
utilizados em circuitos de alta frequência como a memória de um computador, onde o delay
proporcionado pelos clocks em cascata e o estado temporário do contador assíncrono é
altamente indesejável, podendo causar corrupção de dados caso um estado que não faz
parte da sequência seja lido acidentalmente, enquanto um contador assíncrono pode ser
preferível em um circuito alimentador de LEDs, onde qualquer estado errado nem seria
visto por um olho humano e os atrasos podem ser ignorados ou são até desejados para
criar um efeito cascata.
Além disso, um contador que deve seguir uma ordem que não é somente crescimento
ou decrescimento unitário provavelmente será projetado como um contador síncrono, mon-
tar um contador assíncrono que segue outra sequência requer uma lógica específica para
cada montagem, enquanto o projeto de um contador síncrono segue o mesmo padrão para
qualquer sequência e contudo é preferível por muitos.
2 A tabela verdade
Exercício do capítulo: Montar um contador síncrono que passa pela sequência alea-
tória 4 2 0 3 7 1 5 6. O objetivo final de um exercício de contador síncrono é determinar
quais as entradas dos flip-flops que compõem o contador
Colocar o estado atual em ordem crescente é sempre o primeiro passo. Um erro comum
é colocar o estado atual seguindo a ordem da sequência do contador, como o estado atual
é a primeira coluna e portanto a entrada da tabela verdade, ela deve começar em 0 e
terminar no último valor possível pela quantidade de bits.
D Qatual Qpróximo
0 0 0
0 1 0
1 0 1
1 1 1
Como já dito, o plano é deixar a entrada em função da saída. D e Qpróximo são sempre
iguais, portanto reescrever a tabela com o Qpróximo na esquerda e o D na direita não requer
nenhuma outra alteração:
T Qatual Qpróximo
0 0 0
0 1 1
1 0 1
1 1 0
T é a função toggle, ela altera o valor do estado se valer 1 ao invés de forçar um valor
específico na saída. Portanto, T deve valer 0 quando os estados atual e próximo já são
iguais e deve valer 1 caso haja mudança de valor, a tabela nova acaba seguindo a mesma
ordem da sua apresentação regular:
A tabela verdade do flip-flop tipo JK contém três bits de entrada e um único bit de saída:
J K Qatual Qpróximo
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0
Nós estamos procurando uma tabela que contém apenas o Estado Atual e o Próximo
Estado na entrada, com J e K na saída. Para transformarmos uma tabela de oito linhas
em uma tabela de quatro linhas, nós precisaremos utilizar o don’t care na saída, ou seja,
encontrar casos onde uma das saídas produzidas pela combinação das entradas pode
valer ou 0 ou 1 e conseguir manter o mesmo funcionamento no circuito. Isso é possível no
flip-flop JK:
• Se Qatual vale 0 e Qpróximo deve valer 0, a entrada pode ser a função manter (JK=002 )
ou a função reset (JK=012 );
• Se Qatual vale 0 e Qpróximo deve valer 1, a entrada pode ser a função set (JK=102 ) ou
a função toggle (JK=112 );
• Se Qatual vale 1 e Qpróximo deve valer 0, a entrada pode ser a função reset (JK=012 )
ou a função toggle (JK=112 );
• Se Qatual vale 1 e Qpróximo deve valer 1, a entrada pode ser a função manter (JK=002 )
ou a função set (JK=102 ).
O que se pode tirar disso é que o J manda na saída de uma maneira direta quando o
estado atual é 0, porque ele pode manter essa saída quando ele for 0 ou forçar a saída
para 1 se ele valer 1; o K é o seu complementar e manda na saída da mesma maneira
quando o seu estado atual é 1, porque ele mantém a saída quando ele for 0 ou força a
saída para 0 se valer 1. Ou seja, quando o seu estado atual é 0, a entrada K é irrelevante
para o sistema: é o J quem vai ou não trocar o seu valor, seguindo a mesma lógica, se o
seu estado atual é 1, a entrada J não tem mais função no sistema, apenas K determina o
próximo estado. Com isso, a nova tabela verdade do flip-flop JK tem esse formato:
Pode-se dizer que o flip-flop JK funciona como uma junção dos flip-flops tipo D e tipo T,
porque ele tem as opções de forçar um valor específico mas também de manter ou inverter
o valor atual. Graças a isso, nós continuaremos o exercício do capítulo (e todo o resto do
material) apenas pensando no flip-flop tipo JK.
Para terminar de montar a tabela verdade do nosso contador síncrono, nós precisamos
colocar um par de entrada JK para cada estágio dos estados, porque a quantidade de
flip-flops é igual a quantidade de bits.
Agora precisamos colocar o valor de cada entrada na tabela verdade. Vamos olhar para
a primeira linha da Tabela 7:
Temos que completar três pares. O valor QC Está indo de 0 para 0. Olhando para a
Tabela 6, as entradas devem ter valores J = 0 e K = X nesse caso.
Lembre-se do objetivo final do exercício: determinar quais saídas devem ser ligadas
nas entradas dos flip-flops. Ou seja, estamos atrás de uma função para JC , KC , JB , KB ,
JA e para KA , todas dependendo de QC , QB e QA . Como temos a tabela verdade, o único
passo que falta para encontrar tais funções é colocar as tabelas em mapas de Karnaugh.
Vamos fazer isso para JC . Nós temos os seus valores na tabela verdade:
JC
0
1
0
1
X
X
X
X
QB QA
00 01 11 10
0 0 1 1 0
QC
1 X X X X
QB QA
00 01 11 10
0 0 1 1 0
QC
1 X X X X
JC = QA
KC :
QB QA
00 01 11 10
0 X X X X
QC
1 1 0 1 0
KC = QB .QA + QB .QA = QB ⊕ QA
JB : KB :
QB QA QB QA
00 01 11 10 00 01 11 10
0 1 0 X X 0 X X 0 1
QC QC
1 1 1 X X 1 X X 1 1
JB = QC + QA KB = QC + QA
JA : KA :
QB QA QB QA
00 01 11 10 00 01 11 10
0 1 X X 0 0 X 0 0 X
QC QC
1 0 X X 0 1 X 1 0 X
JA = QC .QB KA = QC .QB
Com isso, projetamos o contador síncrono que segue a ordem 4 2 0 3 7 1 5 6. Para
fisicamente montar esse contador, basta pegar alguns circuitos integrados de flip-flops
tipo JK, CIs de portas lógicas (lembrando que nunca é necessária a utilização de portas
inversoras, os flip-flops contém saídas Qc .Qb .Qa ), ligar um gerador de ondas como o clock
e encaixar as saídas nas entradas seguindo o que foi projetado.
2.5 Revisão
Nesse capítulo, você aprendeu a montar um contador síncrono que passa por exata-
mente 2n estados utilizando n flip-flops tipo JK.
Na seção anterior, nós montamos um contador síncrono de três estágios que passa por
oito estados, a quantidade máxima possível. Nessa seção, vamos aprender o que deve ser
feito caso estamos projetando um contador que tem alguns estados fora da contagem
001 000
101
100
Porém, no nosso exemplo, alguns estados estão fora da contagem principal. O dia-
grama de estados sempre precisa apresentar todos os estados possíveis da contagem.
Para projetar um contador que não tem todos os estados na sua contagem principal,
nós precisamos determinar o que acontece caso o contador entre em um desses estados,
ou seja, como explicado anteriormente, vamos escolher valores para J e K e ver como
que o próximo estado reage. Nós vamos ver duas maneira de se completar um projeto que
contém esses estados fora do loop.
Estamos projetando um contador com oito estados. Nós aprendemos na seção anterior
como é o formato da tabela verdade. Vamos aplicar o que já sabemos nos estados que fa-
zem parte da sequencia e deixar apenas um _ nos próximos estados que não conhecemos
para montar a tabela verdade:
A solução mais rápida para um contador assim é forçar a contagem a ir para o primeiro
estado da sequência caso o contador seja ligado fora dela. Nesse caso, vamos colocar 001
como o próximo estado em todos os estados que não fazem parte do loop que é relevante:
Como agora nós temos o estado atual e o próximo estado em todas as linhas, podemos
completar a tabela e resolver o exercício igual o que fizemos na seção anterior, utilizando
a Tabela 6
JC : KC :
QB QA QB QA
00 01 11 10 00 01 11 10
0 0 0 1 0 0 X X X X
QC QC
1 X X X X 1 1 0 1 1
JC = QB .QA KC = QB + QA
JB : KB :
QB QA QB QA
00 01 11 10 00 01 11 10
0 0 1 X X 0 X X 1 1
QC QC
1 0 1 X X 1 X X 1 1
JB = QA KB = 1
JC : KC :
QB QA QB QA
00 01 11 10 00 01 11 10
0 1 X X 1 0 X 0 0 X
QC QC
1 1 X X 1 1 X 0 0 X
JA = 1 KA = 0
Com tudo isso, nós projetamos um contador que só passa pela sequência 1 3 5 7
que também garante que, caso o contador seja ligado em outro estado, imediatamente se
conserta para a sequência correta. O seu diagrama de estados pode ser mostrado assim:
000 010
100 110
001
111 011
101
Existe uma outra solução que tenta diminuir a quantidade de portas lógicas no circuito.
Essa solução permite a possibilidade do contador ser ligado em um estado irrelevante e
continuar a contagem em estados irrelevantes por um tempo limitado, mas ela também
garante que não haja a possibilidade de um loop errado no diagrama de estados. Esse
tipo de resolução do exercício é o mais apropriado.
O que nós vamos fazer agora é levar esses termos desconhecidos para os mapas de
Karnaugh. Lá, vamos analisar quais valores para cada um deles fica melhor na resolução
do próprio mapa, anotar, e ver como que o próximo estado reage na nossa contagem. O
funcionamento é bem parecido com o don’t care, mas nós precisamos ter o cuidado de
anotar qual valor que estamos assumindo para cada possibilidade, porque não podemos
fazer um loop que está fora da contagem.
JC QB QA
_
0 00 01 11 10
_ _ _
1 0 0 1
QC
X
X 1 X X X X
X
X
caso. Atenção: sempre mantenha sublinhado as entradas, porque depois poderemos ter
que mudar alguma coisa para impedir um loop indesejado.
QB QA
00 01 11 10
0 0 0 1 1
QC
1 X X X X
JC = QB
QB QA
00 01 11 10
0 X X X X
QC
1 0 0 1 1
KC = Q B
JB : KB :
QB QA QB QA
00 01 11 10 00 01 11 10
0 1 1 X X 0 X X 1 1
QC QC
1 1 1 X X 1 X X 1 1
JB = 1 KB = 1
JA :
QB QA KA :
QB QA
00 01 11 10
00 01 11 10
0 0 X X 0
QC 0 X 0 0 X
1 0 X X 0 QC
1 X 0 0 X
Apesar que determinados todas as entradas, é imperativo verificar o que acontece com
o próximo estado.
001 000
101
100
entradas que estamos colocando nos flip-flops até nos números fora da sequência, se ti-
véssemos colocado don’t care em todos os estados que são irrelevantes, eventualmente
nós projetaríamos esse contador defeituoso sem condições de perceber o seu problema.
Para solucionar isso, nós podemos escolher qualquer um dos estados da contagem pa-
ralela e forçar o seu próximo estado a ir para um valor ímpar, parecido com a solução mais
rápida. Uma outra possibilidade, bem específica para esse exemplo, é trocar o valor de JA .
Ele é inteiramente composto de don’t care e de valores escolhidos por nós. Originalmente
usamos JA = 0, vamos agora tentar JA = 1.
110
001
000
111 011
100
101
010
3.4 Revisão
Nesse capítulo, você aprendeu o que deve ser feito para um contador síncrono que tem
estágios fora da contagem principal.
3. Apenas no mapa que podemos preencher os sublinhados, aí, voltamos para a tabela
para preencher o próximo estado.
4 Exercício resolvido
JD : KD :
QB QA QB QA
00 01 11 10 00 01 11 10
00 1 1 _ 0 00 X X X X
01 1 1 _ 1 01 X X X X
QD QC QD QC
11 X X X X 11 1 1 1 _
10 X X X X 10 _ _ 0 1
JC : KC :
QB QA QB QA
00 01 11 10 00 01 11 10
00 1 1 _ 1 00 X X X X
01 X X X X 01 0 1 _ 1
QD QC QD QC
11 X X X X 11 1 1 0 _
10 _ _ 0 1 10 X X X X
JB : KB :
QB QA QB QA
00 01 11 10 00 01 11 10
00 1 0 X X 00 X X _ 1
01 0 1 X X 01 X X _ 1
QD QC QD QC
11 1 0 X X 11 X X 0 _
10 _ _ X X 10 X X 0 0
JA : KA :
QB QA QB QA
00 01 11 10 00 01 11 10
00 1 X X 0 00 X 1 _ X
01 1 X X 1 01 X 0 _ X
QD QC QD QC
11 0 X X _ 11 X 1 0 X
10 _ X X 0 10 X _ 1 X
JD : KD :
QB QA QB QA
00 01 11 10 00 01 11 10
00 1 1 0 0 00 X X X X
01 1 1 1 1 01 X X X X
QD QC QD QC
11 X X X X 11 1 1 1 1
10 X X X X 10 1 0 0 1
JD = QC + QB KD = Q C + Q A
JC : KC :
QB QA QB QA
00 01 11 10 00 01 11 10
00 1 1 0 1 00 X X X X
01 X X X X 01 0 1 0 1
QD QC QD QC
11 X X X X 11 1 1 0 1
10 1 1 0 1 10 X X X X
JB :
KB :
QB QA
QB QA
00 01 11 10
00 01 11 10
00 1 0 X X 1
00 X X 1
01 0 1 X X 1
01 X X 1
QD QC
QD QC
11 1 0 X X 0
11 X X 0
10 0 1 X X
10 X X 0 0
JB = QD ⊕ QC ⊕ QB ⊕ QA , utilizando a
KB = Q D
regra do mapa de Karnaugh xadrez.
KA :
JA :
QB QA
QB QA
00 01 11 10
00 01 11 10
00 X 1 0 X
00 1 X X 0
01 X 0 1 X
01 1 X X 1
QD QC
QD QC
0 11 X 1 0 X
11 0 X X
10 X 0 1 X
10 0 X X 0
KA = QD ⊕ QC ⊕ QB ⊕ QA , utilizando a
JA = QD .QC + QD .QA = QD .(QC + QA )
regra do mapa de Karnaugh xadrez.