Altifigence Academy

26 / 37 · Conceito

Depuração do contador e contraexemplos mínimos

Projete testes curtos que distingam erros de reset, enable e retorno na fronteira.

Um final correto pode esconder uma sequência incorreta

Terminar em 0 não demonstra reset nem retorno modular corretos: um circuito preso em 0 também passa. São necessárias observações que distingam incremento, manutenção, resetReset Controle que retorna o estado a um valor inicial especificado. É preciso definir se é síncrono ou assíncrono e sua prioridade em relação a outros controles. Saiba mais e retorno.

Faça dois controles coincidirem deliberadamente

SituaçãoRequisito a conferir
reset=1, enable=0Enable não esconde reset
reset=1, enable=1Reset vence o incremento
count=M−1, enable=0Não retorna enquanto parado
count=M−1, enable=1Retorna exatamente de M−1 para 0
Reset muda entre bordasReset síncrono atua na próxima borda

Testar controles apenas isoladamente dificulta detectar erros de prioridade.

Cada coluna abaixo registra uma borda de subidaBorda de subida Instante em que o clock passa de 0 para 1. É diferente do nível alto, que abrange todo o intervalo com CLK=1. Saiba mais, com entradas anteriores e estado «depois» atualizado. O alinhamento não representa atraso físico de propagaçãoAtraso de propagação Tempo entre uma mudança de entrada e a estabilização da saída no valor correto. Equivalência lógica e comportamento temporal são propriedades distintas. Saiba mais. Partindo de count=5, o circuito incorreto só verifica reset dentro de enable e mantém 5 na primeira borda. Embora os valores finais coincidam, a primeira discrepância revela o defeito.

Contraexemplo mínimo: enable esconde reset
Ver os dados da forma de onda
Dados da forma de onda: cada caractere é um intervalo; um ponto mantém o estado anterior; p representa um ciclo de clock.
SinalForma de ondaValores do barramento
borda234E0 → E1 → E2
reset101
enable01.
correto depois2340 → 1 → 0
com erro depois2345 → 6 → 0

Inicie o modelo módulo 8 em 101. Selecione enable=0, reset=1 e avance o clock: deve resultar 000. O RTL incorreto com reset dentro de enable manteria 101. Retire reset e distinga manutenção com enable=0 de incremento com enable=1.

Faça reset e enable coincidirem

O reset síncrono tem prioridade sobre enable. Com enable=0, o valor armazenado é mantido. q=101; q_next = (q + 1) mod 8

Encontre a primeira discrepância com uma referência

Ck+1=rk?0:(ek?((Ck+1) mod M):Ck)C_{k+1}=r_k?0:(e_k?((C_k+1)\bmod M):C_k)

O modelo pressupõe estados normais 0–M−1; acrescente separadamente a política de recuperação fora do intervalo. Calcule e compare em cada borda. Entradas e estado logo antes da primeira discrepância são o ponto de partida mínimo da investigação.

Se falhar após 1000 ciclos, elimine estímulos desnecessários até reproduzir em 3–5 bordas. Após corrigir RTL, mantenha esse contraexemplo na regressão. Revise especificação e código separadamente para não inserir o mesmo erro simultaneamente no projeto e no teste.

Experimente

Um código incorreto coloca reset dentro de if(en) begin if(rst) ... end. Qual estado inicial e quais entradas revelam o defeito com a menor sequência?

Ler a explicação

Comece num estado não nulo e aplique uma borda com rst=1, en=0. Com prioridade de reset, deve resultar 0; o circuito incorreto mantém o estado anterior. Começar em 0 esconde o defeito.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.