Construa um contador em anel de 5 estados distintos usando FFs-JK.

Passo 1

O enunciado pede para construir um contador em anel com 5 estados distintos usando flip‑flops JK. Informações e objetivos claros:
  • Deve haver exatamente 5 estados distintos que se repetem ciclicamente.
  • Usaremos 5 flip‑flops JK, um para cada bit do anel.
  • Preciso fornecer as entradas J e K de cada flip‑flop em função dos estados atuais (ou seja, em função dos saídas Q_i).
  • Não foi dada uma sequência explícita, então vou adotar a sequência natural de um ring counter com um único bit ‘1’ circulando: \,00001 \to 00010 \to 00100 \to 01000 \to 10000 \to 00001\,.

Passo 2

Rápida aula sobre o flip‑flop JK (essencial para projetar):
  • Cada JK flip‑flop tem entradas J e K e saída atual Q. Na borda ativa do clock a saída muda segundo a tabela de excitação abaixo.
  • Tabela de excitação (a forma prática que vamos usar):
\begin{array}{c c | c c} Q & Q^{+} & J & K\\hline 0 & 0 & 0 & X\\\\ 0 & 1 & 1 & X\\\\ 1 & 0 & X & 1\\\\ 1 & 1 & X & 0 \end{array}
Significado: para forçar 0\to1 precisamos J=1; para forçar 1\to0 precisamos K=1; nos casos onde a entrada é “don’t care” ( X) podemos escolher 0 ou 1 conforme conveniência para simplificar as expressões lógicas.

Passo 3

Definir notação e a sequência escolhida:
  • Denoto as saídas atuais dos cinco FFs por \,Q_4,Q_3,Q_2,Q_1,Q_0 (onde o vetor de estado é \,Q_4Q_3Q_2Q_1Q_0).
  • Vou usar a rotação para a esquerda do único ‘1’ (padrão do ring counter): a próxima saída de cada flip‑flop será igual à saída do flip‑flop anterior. Em fórmula:
Q_0^{+}=Q_4,\quad Q_1^{+}=Q_0,\quad Q_2^{+}=Q_1,\quad Q_3^{+}=Q_2,\quad Q_4^{+}=Q_3.

Passo 4

Ligando a tabela de excitação com a relação Q^{+}:
  • Para um dado flip‑flop i (com saída atual Q_i e próximo estado Q_i^{+}=Q_{\text{prev}}, sendo Q_{\text{prev}} a saída anterior na cadeia), analisamos as quatro possibilidades:
    • Se Q_i=0 e Q_{\text{prev}}=0 então 0\to0: precisamos J_i=0 (e K_i pode ser 0 ou X); escolher K_i=0.
    • Se Q_i=0 e Q_{\text{prev}}=1 então 0\to1: precisamos J_i=1.
    • Se Q_i=1 e Q_{\text{prev}}=0 então 1\to0: precisamos K_i=1.
    • Se Q_i=1 e Q_{\text{prev}}=1 então 1\to1: precisamos K_i=0.
  • A partir desses casos, obtemos as fórmulas booleanas gerais para as entradas J_i e K_i.

Passo 5

Derivação das expressões lógicas gerais (passo a passo didático):
  • Queremos J_i=1 somente quando Q_i=0 e Q_{\text{prev}}=1. Em lógica booleana isso é:
J_i = Q_{\text{prev}}\\ \overline{Q_i}.
Aqui \overline{Q_i} significa negação de Q_i.
  • Queremos K_i=1 somente quando Q_i=1 e Q_{\text{prev}}=0. Em lógica:
K_i = \overline{Q_{\text{prev}}}\\ Q_i.
  • Essas duas expressões satisfazem a tabela de excitação (quando o termo de interesse não é verdadeiro, colocamos 0 nas entradas para evitar mudanças não desejadas).

Passo 6

Aplicando as fórmulas ao nosso anel de 5 bits (escrevendo explicitamente para cada flip‑flop):
  • Para o flip‑flop que gera Q_0^{+} (o “0”): o bit anterior é Q_4. Logo
J_0 = Q_4\,\overline{Q_0},\qquad K_0=\overline{Q_4}\,Q_0.
  • Para Q_1^{+} (anterior Q_0):
J_1 = Q_0\,\overline{Q_1},\qquad K_1=\overline{Q_0}\,Q_1.
  • Para Q_2^{+} (anterior Q_1):
J_2 = Q_1\,\overline{Q_2},\qquad K_2=\overline{Q_1}\,Q_2.
  • Para Q_3^{+} (anterior Q_2):
J_3 = Q_2\,\overline{Q_3},\qquad K_3=\overline{Q_2}\,Q_3.
  • Para Q_4^{+} (anterior Q_3):
J_4 = Q_3\,\overline{Q_4},\qquad K_4=\overline{Q_3}\,Q_4.

Passo 7

Como montar fisicamente (orientação prática para a prova):
  • Cada J_i é uma porta AND entre Q_{\text{prev}} e \overline{Q_i}. Cada K_i é uma porta AND entre \overline{Q_{\text{prev}}} e Q_i.
  • Portanto, para implementar bastam inversores para gerar \overline{Q_i} e \overline{Q_{\text{prev}}}, e 2 ANDs por flip‑flop. Ligações: J_i\to entrada J do FF i; K_i\to entrada K do FF i. Todas as bordas de clock conectadas ao mesmo sinal de clock (clock síncrono).
  • Se preferir minimizar portas, note que J_i e K_i são mutuamente exclusivos (não ambos 1 simultaneamente), então não há conflito.

Passo 8

Inicialização e comportamento ante estados inválidos:
  • Um ring counter puro precisa ser inicializado com um único ‘1’ (por exemplo 00001) para percorrer os 5 estados esperados. Se o anel cair em 00000 (estado morto) não sairá dele com a lógica acima.
  • Na prática adiciona‑se um circuito de preset/clear assíncrono para setar um dos FFs em 1 ao ligar, ou um circuito de detecção de 00000 que força, no próximo ciclo, o estado correto.
  • Alternativa robusta: usar um registrador de deslocamento com realimentação que garante ciclo de 5 estados (Johnson counter) — mas isso seria outro projeto. Aqui mantivemos o ring clássico de 5 estados.

Passo 9

Verificação rápida com um passo (exemplo numérico para ganhar confiança):
  • Suponha estado atual \,Q_4Q_3Q_2Q_1Q_0 = 00001.
    • Para o FF0: Q_4=0,\\ Q_0=1 então J_0=0\cdot\overline{1}=0,\\ K_0=\overline{0}\cdot 1=1 1\to0 no próximo clock, fica Q_0^{+}=0.
    • Para o FF1: Q_0=1,\\ Q_1=0 então J_1=1\cdot\overline{0}=1,\\ K_1=\overline{1}\cdot0=0 0\to1, Q_1^{+}=1.
    • Os outros FFs mantêm 0. Resultado: \,00010, que é o estado esperado. Assim a lógica efetivamente rotaciona o ‘1’.

Resposta

J_0 = Q_4\,\overline{Q_0},\quad K_0=\overline{Q_4}\,Q_0
J_1 = Q_0\,\overline{Q_1},\quad K_1=\overline{Q_0}\,Q_1
J_2 = Q_1\,\overline{Q_2},\quad K_2=\overline{Q_1}\,Q_2
J_3 = Q_2\,\overline{Q_3},\quad K_3=\overline{Q_2}\,Q_3
J_4 = Q_3\,\overline{Q_4},\quad K_4=\overline{Q_3}\,Q_4

Exercícios relacionados