47 / 63 · Conceito
Botões reais: sincronização, debounce e um único evento
Distinga sincronização e rebote dos contatos e projete um filtro de amostras consecutivas.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Um acionamento pode produzir muitas transições
Um contato mecânico pode fechar e abrir várias vezes antes de estabilizar. Além disso, o botão muda assincronamente em relação ao clock. A sincronização introduz o sinal no domínio de clock; a eliminação de rebotes interpreta transições repetidas breves como um estado estável. Dois flip-flopsFlip-flop Elemento que captura a entrada na borda de clock especificada e a mantém até a próxima. A entrada deve cumprir setup e hold. Saiba mais não eliminam automaticamente o rebote.
- Botão assíncrono: Apresenta rebote dos contatos e assincronia em relação ao clock
- Sincronização: Receba o nível de um bit no domínio de clock
- Debounce: Aceite uma mudança somente após amostras estáveis consecutivas
- Detecção de borda: Gere um evento de um ciclo ao aceitar 0→1
Esse fluxo pressupõe um nível de botão de um bit mantido por tempo suficiente. Pulsos curtos, dados multibit coerentes e o tratamento de clocks assíncronos exigem outros projetos.
Regra de N amostras consecutivas
Seja q o estado aceito, x a entrada sincronizada e count a quantidade de amostras consecutivas diferentes de q. Se x=q, zere count. Se x≠q, incremente e, na enésima amostra consecutiva, aceite q=x e retorne count a 0.
Para N=3 e q inicial 0, cada coluna é um instante de amostragem da entrada sincronizada, não uma tensão física dos contatos.
| Amostra | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| x | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
| count depois | 0 | 1 | 0 | 1 | 2 | 0 | 0 | 1 | 0 |
| q depois | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| Evento de subida | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| amostra | 234523452 | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 |
| x | 0101...01 | |
| q depois | 0....1... | |
| evento de subida | 0....10.. |
Especifique latência e largura do contador
Com intervalo , a aceitação demora aproximadamente de a conforme a fase da mudança, mais a latência do sincronizador. Para exigir conservadoramente «estável por 10 ms», considere também o intervalo entre a primeira e a última amostra ao escolher N. Mudanças breves entre amostras podem passar despercebidas: coincidência consecutiva não demonstra tensão fisicamente constante durante todo o intervalo. Defina características do botão e amostragem em conjunto.
Se count só armazena 0 a N−1, precisa de bits. Trate também N=1, que deve aceitar já a primeira amostra oposta; a ordem da comparação com N−1 importa.
Um acionamento, um evento
Se q_next for o novo estado aceito, . A tabela gera o evento na mesma amostra da aceitação. Comparar q com uma cópia atrasada um ciclo em outro registradorRegistrador Circuito que armazena vários bits de estado. Os registradores síncronos deste curso capturam a entrada especificada na borda de clock. Saiba mais pode acrescentar latência conforme o ponto de observação; especifique também quando o evento é consumido.
Experimente
Com N=3, q inicial 0 e entradas 1,1,0,1,1,1, em qual amostra o estado muda? Se N=8 e count armazena 0–7, qual largura mínima é necessária?
Ler a explicação
O 0 da terceira amostra reinicia a contagem consecutiva: 1 é aceito na sexta. Armazenar 0–7 exige três bits. Outra implementação que também armazene 8 exige quatro: confira primeiro o intervalo.