26 / 37 · Conceito
Depuração do contador e contraexemplos mínimos
Projete testes curtos que distingam erros de reset, enable e retorno na fronteira.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
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ção | Requisito a conferir |
|---|---|
| reset=1, enable=0 | Enable não esconde reset |
| reset=1, enable=1 | Reset vence o incremento |
| count=M−1, enable=0 | Não retorna enquanto parado |
| count=M−1, enable=1 | Retorna exatamente de M−1 para 0 |
| Reset muda entre bordas | Reset 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.
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| borda | 234 | E0 → E1 → E2 |
| reset | 101 | |
| enable | 01. | |
| correto depois | 234 | 0 → 1 → 0 |
| com erro depois | 234 | 5 → 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.
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
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.