Tempo e sincronismo em circuitos digitais: clock, bordas e tempos de propagação

Capítulo 7

Tempo estimado de leitura: 9 minutos

+ Exercício

Clock como referência temporal

Em muitos circuitos digitais, não basta saber se um sinal é 0 ou 1: também importa quando ele muda. O clock é um sinal periódico usado como referência de tempo para coordenar atualizações de estado. Em vez de cada parte do circuito “decidir” em momentos diferentes, o clock cria instantes bem definidos (as bordas) em que registradores e flip-flops capturam valores.

Pense no clock como um “metrônomo” do circuito: a cada batida (borda), certos elementos armazenam novos dados, e entre batidas a lógica combinacional tem tempo para calcular o próximo valor.

Combinacional vs. sequencial (diferença prática)

  • Circuito combinacional: a saída depende apenas das entradas atuais. Se uma entrada muda, a saída muda após um certo atraso. Não há memória.
  • Circuito sequencial: a saída depende das entradas atuais e de um estado armazenado (memória). Esse estado costuma ser atualizado em instantes definidos pelo clock (ex.: em uma borda).

Consequência prática: em um sistema sequencial, você quer que as entradas de um registrador estejam estáveis ao redor do instante de captura (borda do clock). Se não estiverem, o registrador pode capturar um valor errado.

Bordas do clock: subida e descida

Um clock ideal alterna entre 0 e 1 com transições instantâneas. Na prática, as transições têm inclinação, mas ainda chamamos de:

  • Borda de subida (rising edge): transição de 0 para 1.
  • Borda de descida (falling edge): transição de 1 para 0.

Muitos flip-flops são sensíveis a apenas uma borda (por exemplo, “acionado na borda de subida”). Isso significa que o valor de entrada é amostrado naquele instante, e o estado interno muda logo depois (com um pequeno atraso).

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

Período e frequência

  • Período (T): tempo de um ciclo completo do clock.
  • Frequência (f): quantos ciclos por segundo. Relação: f = 1/T.

Exemplo: se T = 20 ns, então f = 50 MHz.

Duty cycle (ciclo de trabalho)

O duty cycle é a porcentagem do período em que o clock fica em nível alto. Um clock “50%” fica metade do tempo em 1 e metade em 0.

Por que importa? Alguns circuitos usam a fase alta e a fase baixa para gerar sinais internos, ou dependem de tempos mínimos em nível alto/baixo. Duty cycle muito distorcido pode reduzir a “janela” disponível para a lógica estabilizar entre bordas relevantes.

Jitter (variação temporal)

Jitter é a variação do instante real das bordas em relação ao instante ideal. Em termos simples: o clock “não bate sempre exatamente no mesmo tempo”.

  • Jitter baixo: bordas bem regulares.
  • Jitter alto: bordas “tremidas” no tempo, reduzindo margens de segurança.

Consequência prática: jitter reduz a folga de tempo para a lógica combinacional terminar antes da próxima captura, aumentando risco de erro em altas frequências.

Tempo de propagação e por que ele causa erros

Quando uma entrada de uma porta lógica muda, a saída não muda instantaneamente. O tempo entre a mudança na entrada e a mudança observável na saída é o tempo de propagação (geralmente indicado como t_pd).

tPLH e tPHL (subida e descida podem ser diferentes)

  • tPLH: atraso para a saída ir de 0 para 1 após a entrada causar essa mudança.
  • tPHL: atraso para a saída ir de 1 para 0.

Em muitos componentes, tPLH e tPHL não são iguais. Isso pode afetar forma de onda, duty cycle e alinhamento entre sinais.

Acúmulo de atrasos em cascata

Em um caminho com várias portas em série, os atrasos se somam aproximadamente:

t_total ≈ t_pd1 + t_pd2 + ... + t_pdn

Isso é a base para estimar a frequência máxima de um sistema síncrono: a lógica entre registradores precisa “caber” dentro de um ciclo de clock (considerando margens).

Glitches (pulsos espúrios) em lógica combinacional

Mesmo que a função lógica final esteja correta, diferentes caminhos podem ter atrasos diferentes. Quando entradas mudam quase ao mesmo tempo, a saída pode passar por valores intermediários por alguns nanossegundos, gerando um glitch (um pulso curto indesejado).

Consequência prática: se um glitch atingir a entrada de um registrador perto da borda de captura, o registrador pode amostrar o valor errado, mesmo que “em média” a lógica esteja correta.

Noções de setup e hold (sem fórmulas pesadas)

Para um registrador capturar corretamente um dado, a entrada precisa estar estável em uma janela ao redor da borda do clock:

  • Setup time (t_setup): tempo mínimo que o dado deve estar estável antes da borda ativa do clock.
  • Hold time (t_hold): tempo mínimo que o dado deve permanecer estável depois da borda ativa.

Se o dado muda dentro dessa janela, podem ocorrer:

  • Contagem errada em contadores e máquinas de estado (captura de bit incorreto).
  • Comportamento intermitente: falha que “vai e volta” dependendo de temperatura, tensão, ruído e variações de fabricação.
  • Glitches capturados: um pulso curto pode ser registrado como se fosse um nível válido.

Como visualizar a janela de captura

Imagine a borda do clock como um “clique” de câmera. O setup é o tempo para o objeto parar de se mexer antes da foto; o hold é o tempo para continuar parado logo após. Se mexer durante a foto, a imagem sai borrada (dado incerto).

Passo a passo: estimando atrasos e verificando se “cabe no clock”

1) Desenhe o caminho entre registradores

Identifique um registrador de origem (que lança o dado) e um registrador de destino (que captura). Entre eles haverá um bloco combinacional (portas, multiplexadores, comparadores etc.).

2) Conte os níveis lógicos (estimativa rápida)

Uma estimativa inicial é contar quantas “camadas” de portas o sinal atravessa no pior caso. Exemplo: AND → OR → XOR = 3 níveis.

3) Multiplique por um atraso típico (estimativa grosseira)

Se você tiver um valor típico de atraso por porta (por exemplo, consultado em datasheet da família usada), estime:

t_logic ≈ N_niveis × t_pd_por_porta

Exemplo: 3 níveis × 8 ns ≈ 24 ns.

4) Compare com o período do clock

Para funcionar com folga, o tempo disponível entre bordas deve ser maior que o atraso total do caminho (incluindo atrasos do registrador e margens). Como regra prática para iniciantes: se sua estimativa de lógica já está perto do período do clock, você está em zona de risco.

5) Procure caminhos “mais longos” e sinais críticos

O caminho que tem mais níveis lógicos, mais fan-out (muitas entradas sendo dirigidas) ou mais carga tende a ser o limitante. Esse é o candidato a precisar de reestruturação (pipeline) ou redução de lógica.

Passo a passo: organizando sinais em blocos para estabilidade

Uma forma prática de evitar glitches capturados e facilitar o sincronismo é estruturar o projeto em blocos:

  • Registradores de entrada: capturam sinais vindos de fora do bloco (ou de outro clock).
  • Lógica combinacional: calcula o “próximo valor”.
  • Registradores de saída: armazenam o resultado na borda do clock.

1) Defina o que deve ser registrado

Qualquer sinal que será usado em decisões importantes (habilitar contagem, selecionar caminho, gerar pulso) tende a ser mais seguro quando registrado, porque passa a mudar apenas nas bordas do clock.

2) Separe “estado atual” e “próximo estado”

Mesmo sem entrar em formalismos, use a ideia:

  • Estado atual: saídas dos registradores.
  • Próximo estado: resultado da lógica combinacional.

Assim, a lógica pode ter glitches internamente, mas o estado só muda na borda, quando o próximo estado já deveria estar estável.

3) Evite usar sinais combinacionais como “clock”

Um erro comum é gerar um “clock” a partir de portas (gating) para acionar flip-flops. Como portas têm atrasos e podem gerar glitches, isso cria bordas extras ou deslocadas. Prefira usar enable (habilitação) com clock único, quando possível.

4) Se um sinal é crítico, registre-o

Se um sinal combinacional alimenta diretamente algo sensível (como um contador habilitado por pulso), considere registrar esse pulso (ou gerar pulso síncrono) para garantir largura mínima e alinhamento com o clock.

Atividades práticas

Atividade 1 — Estimativa de atraso em cascata

Você tem um caminho combinacional com 5 portas em série. O datasheet indica atraso típico de 6 ns por porta (use como aproximação) e pior caso de 10 ns por porta.

  • Calcule o atraso típico: t_typ ≈ 5 × 6 ns.
  • Calcule o pior caso: t_wc ≈ 5 × 10 ns.
  • Para um clock de 20 MHz (T = 50 ns), discuta: o típico “cabe”? e o pior caso “cabe” com folga?

Atividade 2 — Qual é a frequência máxima aproximada?

Considere um caminho entre registradores com atraso combinacional estimado de 32 ns. Assuma que você quer pelo menos 20% de folga no período (margem para variações e jitter).

  • Encontre um período mínimo aproximado: T_min ≈ 32 ns / 0,8.
  • Converta para frequência: f_max ≈ 1/T_min.

Atividade 3 — Identificando risco de glitch

Um sinal de saída é Y = A XOR B, e A e B vêm de caminhos com atrasos diferentes (A chega 8 ns antes de B). Se A e B mudam “ao mesmo tempo” na origem, descreva o que pode acontecer em Y durante esses 8 ns.

  • Explique por que isso pode virar um pulso curto.
  • Diga uma forma de evitar que esse pulso seja capturado por um registrador (dica: registrar Y ou registrar A e B antes do XOR).

Atividade 4 — Organize em blocos (combinacional + registradores)

Você tem um circuito que soma dois valores, compara com um limite e, se passar do limite, incrementa um contador. Reorganize em blocos síncronos:

  • Liste quais sinais devem ser registrados na entrada (ex.: operandos, limite).
  • Defina um bloco combinacional (soma + comparação).
  • Defina quais saídas devem ser registradas (ex.: resultado da comparação, enable do contador).

Objetivo: garantir que o contador só veja um enable estável e alinhado ao clock, reduzindo risco de contagem errada por glitches.

Atividade 5 — Janela de setup/hold (raciocínio qualitativo)

Um registrador captura na borda de subida. Você observa que um sinal de dado muda muito perto dessa borda e, às vezes, o sistema falha.

  • Explique com suas palavras o que significa violar setup e hold.
  • Cite duas ações práticas para aumentar a chance de o dado estar estável na borda (ex.: registrar o sinal um estágio antes; reduzir níveis lógicos no caminho; diminuir a frequência do clock).

Agora responda o exercício sobre o conteúdo:

Em um sistema síncrono, qual prática ajuda a evitar erros causados por glitches e atrasos ao acionar flip-flops e registradores?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Portas lógicas têm atraso e podem gerar glitches, então criar clocks por lógica pode produzir bordas indesejadas. Um clock único com enable e o registro de sinais críticos faz as mudanças ocorrerem nas bordas, reduzindo risco de captura incorreta.

Próximo capitúlo

Flip-flops e latches: memória digital com D, JK, T e SR

Arrow Right Icon
Capa do Ebook gratuito Eletrônica Digital para Iniciantes: Portas Lógicas, TTL/CMOS e Interfaces Básicas
47%

Eletrônica Digital para Iniciantes: Portas Lógicas, TTL/CMOS e Interfaces Básicas

Novo curso

15 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.