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):
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:
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
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 FFi; K_i\to entrada K do FFi. 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’.