Latches vs flip-flops: o que muda na prática
Latch é um elemento de memória sensível a nível: enquanto a entrada de habilitação (ENABLE, GATE ou CLK em alguns símbolos) estiver no nível ativo, a saída pode acompanhar a entrada. Quando a habilitação desativa, o latch “segura” (memoriza) o último valor.
Flip-flop é um elemento de memória sensível à borda: ele só atualiza seu estado no instante da borda ativa do clock (subida ou descida, conforme o componente). Entre bordas, a saída permanece estável, mesmo que as entradas mudem.
Quando usar latch
- Armazenar um valor enquanto um sinal de habilitação estiver ativo (ex.: capturar um dado durante uma janela de tempo).
- Interfaces simples onde o dado é garantidamente estável durante toda a janela de ENABLE.
- Atenção: se o dado variar enquanto o latch estiver habilitado, a saída pode “seguir” e gerar glitches em lógica posterior.
Quando usar flip-flop
- Sistemas sincronizados por clock (contadores, registradores, máquinas de estado).
- Isolar mudanças de entrada para que a saída só mude em instantes definidos (bordas), reduzindo efeitos de glitches.
- Captura de eventos (ex.: amostrar um botão já condicionado) de forma previsível.
SR latch e SR flip-flop: memória básica e condição inválida
O elemento SR (Set/Reset) é a forma mais direta de memória: uma entrada força Q=1 (Set) e outra força Q=0 (Reset). O ponto crítico é a condição inválida quando Set e Reset são acionados ao mesmo tempo (depende da implementação, mas em geral é proibida).
Tabela de funcionamento (SR ativo em nível alto)
| S | R | Q(n+) | /Q(n+) | Observação |
|---|---|---|---|---|
| 0 | 0 | Q(n) | /Q(n) | Mantém estado |
| 1 | 0 | 1 | 0 | Set |
| 0 | 1 | 0 | 1 | Reset |
| 1 | 1 | ? | ? | Inválido (evitar) |
Como evitar a condição inválida:
- Garanta por lógica que S e R nunca sejam 1 simultaneamente (ex.: intertravamento com portas).
- Prefira D para armazenamento de dados (elimina o caso inválido por construção).
- Se precisar de SR por simplicidade, use sinais mutuamente exclusivos (ex.: botões separados com lógica que bloqueia o outro).
D latch e D flip-flop: o armazenador “sem ambiguidade”
O tipo D (Data) resolve o problema do SR: em vez de Set e Reset separados, existe um único dado D. Internamente, ele equivale a um SR controlado de modo que nunca ocorra S=R=1.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
D latch (sensível a nível)
Com ENABLE ativo, Q acompanha D. Com ENABLE inativo, Q mantém o último valor.
| EN | D | Q(n+) | Observação |
|---|---|---|---|
| 0 | X | Q(n) | Trava (mantém) |
| 1 | 0 | 0 | Transparente |
| 1 | 1 | 1 | Transparente |
D flip-flop (sensível à borda)
Atualiza Q apenas na borda ativa do clock. Fora da borda, mantém.
| Clock | D | Q(n+) | Observação |
|---|---|---|---|
| Borda ativa | 0 | 0 | Amostra D |
| Borda ativa | 1 | 1 | Amostra D |
| Sem borda | X | Q(n) | Mantém |
JK flip-flop: SR “corrigido” com alternância
O JK é um flip-flop que elimina a condição inválida do SR: quando J=K=1, ele alterna (toggle) em vez de entrar em estado proibido.
| J | K | Q(n+) | Observação |
|---|---|---|---|
| 0 | 0 | Q(n) | Mantém |
| 1 | 0 | 1 | Set |
| 0 | 1 | 0 | Reset |
| 1 | 1 | /Q(n) | Toggle |
Cuidados práticos: JK costuma ter mais pinos/condições (clock, preset/clear assíncronos em alguns CI). Se você só precisa armazenar um bit de dado, D é mais direto. Se você precisa alternar estado de forma controlada, JK é muito útil.
T flip-flop: alternância simples
O T (toggle) é conceitualmente um flip-flop que alterna quando T=1 e mantém quando T=0. Ele pode ser obtido a partir de um JK com J=K=T.
| T | Q(n+) | Observação |
|---|---|---|
| 0 | Q(n) | Mantém |
| 1 | /Q(n) | Toggle |
Condição inválida: o T não tem condição inválida na tabela funcional. O cuidado aqui é garantir que o clock seja “limpo” (um evento por acionamento), senão o LED pode alternar mais de uma vez por pressão.
Montagem prática 1: flip-flop D como armazenador de estado para um botão (com debounce)
Objetivo: transformar um botão em um comando digital estável, armazenado em Q, sem múltiplas transições por ruído mecânico. A ideia é: condicionar o botão (debounce) e então amostrar esse sinal em um D flip-flop.
Visão geral do bloco
- Botão + rede de condicionamento (debounce) → gera um sinal
BTN_STABLE. - Clock de amostragem (pode ser um pulso gerado a cada pressão, ou um clock lento) → entra no pino CLK do D FF.
D = BTN_STABLE→ o flip-flop guarda o valor do botão no instante da borda.- Saídas
Qe/Qdisponíveis para lógica/LED.
Passo a passo (ligação típica)
- Alimentação: conecte VCC e GND do CI conforme a família lógica usada. Adicione desacoplamento (ex.: 100 nF próximo ao CI).
- Entrada D: conecte
Dao sinalBTN_STABLE(saída do seu circuito de debounce já estudado anteriormente). - Clock: forneça um clock que represente o momento de captura. Duas opções comuns:
- Clock lento contínuo: amostra periodicamente; Q reflete o botão com atraso de até um período.
- Pulso por acionamento: um gerador de pulso (monostável/edge detector) cria uma borda única por pressão; Q atualiza apenas quando você pressiona.
- Preset/Clear (se existirem): fixe em nível inativo para não flutuar. Se quiser um estado inicial definido, use Clear para forçar Q=0 na energização (com cuidado para não deixar o pino flutuando).
- Indicador: ligue um LED (com resistor) em Q ou /Q para visualizar o estado armazenado.
O que observar
- Sem debounce, o flip-flop pode capturar bordas indesejadas se o clock for derivado do botão ou se o botão gerar múltiplas transições próximas à borda.
- Com debounce e clock bem definido, Q muda uma única vez por evento de captura.
Montagem prática 2: alternar um LED a cada pressionamento usando JK ou T
Objetivo: cada pressão do botão alterna o LED (liga/desliga). Isso é um caso clássico de toggle.
Opção A: usando JK (J=K=1)
Configuração: fixe J=1 e K=1. A cada borda ativa de clock, Q alterna.
- Fixar J e K: conecte J e K ao nível lógico 1 (conforme a família lógica, com ligação direta ou via resistor, se apropriado).
- Clock: aplique um pulso limpo por pressionamento (idealmente proveniente de um circuito de debounce + gerador de pulso). Esse pulso vai ao CLK.
- LED: conecte o LED em Q (ou /Q para lógica invertida).
- Preset/Clear: mantenha inativos; opcionalmente use Clear para iniciar com LED apagado.
Opção B: usando T (T=1)
Configuração: fixe T=1. A cada borda ativa de clock, Q alterna.
- Fixar T: conecte T ao nível lógico 1.
- Clock por pressionamento: igual ao JK, use um pulso único por evento.
- LED em Q: observe a alternância a cada pulso.
Se você só tem D flip-flop: como fazer toggle com D
Você pode obter alternância ligando D = /Q. Assim, a cada borda, Q recebe o inverso do estado atual.
D <- /Q (realimentação)
CLK <- pulso por pressionamento
Q <- LEDCuidado: mantenha a realimentação curta e bem conectada; evite fios longos em protoboard que possam captar ruído.
Condições inválidas e armadilhas comuns (e como evitar)
SR: S=R=1 (proibido)
- Problema: saída indefinida/contraditória dependendo da implementação; pode levar a comportamento imprevisível.
- Evite: intertravamento lógico, ou substitua por D/JK.
Latch transparente: “vazamento” de glitches
- Problema: com EN ativo, qualquer oscilação em D aparece em Q.
- Evite: use flip-flop por borda quando o sinal de entrada pode variar durante a janela; ou garanta que D esteja estável enquanto EN estiver ativo.
Clock vindo direto do botão
- Problema: múltiplas bordas por bounce fazem o flip-flop alternar várias vezes.
- Evite: use debounce e, de preferência, gere um pulso único por acionamento.
Pinos assíncronos flutuando (PRE/CLR)
- Problema: mudanças aleatórias de estado.
- Evite: prenda em nível inativo com ligação firme (e respeite se são ativos em 0 ou em 1).
Estratégias de teste e diagnóstico em bancada
1) Teste por estímulos controlados
- Defina entradas fixas (por exemplo, D=0 e depois D=1) e aplique bordas de clock conhecidas.
- Para JK/T, teste sequências: mantenha J=K=0 (mantém), depois J=1 K=0 (set), depois J=0 K=1 (reset), depois J=K=1 (toggle).
2) Observe Q e /Q simultaneamente
- Regra prática: em operação normal,
/Qdeve ser o inverso deQ. - Se Q e /Q estiverem iguais por longos períodos, suspeite de: ligação errada, pino errado, CI danificado, ou pinos assíncronos acionados indevidamente.
3) Verifique estados iniciais
- Ao energizar, alguns flip-flops podem iniciar em estado indefinido se não houver reset/preset. Se o seu teste exige estado conhecido, aplique Clear/Preset no início.
4) Diagnóstico de ligações (checklist rápido)
- Alimentação: VCC/GND corretos e desacoplamento próximo.
- Clock: está chegando no pino certo? A borda ativa é a esperada? O pulso tem amplitude lógica válida?
- Entradas não usadas: não deixe pinos de entrada flutuando (J, K, D, T, EN, PRE/CLR).
- LED: resistor em série correto; se ligado em /Q, a lógica fica invertida (isso pode parecer “erro” se você esperava o contrário).
- Pinagem: confirme o datasheet do CI específico; diferentes CIs têm pinagens distintas mesmo para a mesma função.
5) Teste com tabela na mão
Uma forma eficiente é executar uma sequência e anotar:
| Passo | Entradas | Ação no clock/enable | Q esperado | Q medido |
|---|---|---|---|---|
| 1 | D=0 | Borda | 0 | |
| 2 | D=1 | Borda | 1 | |
| 3 | D=0 | Sem borda | 1 (mantém) |