Altifigence Academy

26 / 37 · Concepto

Depuración del contador y contraejemplos mínimos

Diseñe pruebas cortas que distingan fallos de reset, enable y retorno en el límite.

Un final correcto puede ocultar una secuencia incorrecta

Terminar en 0 no demuestra reset ni retorno modular correctos: un circuito atascado en 0 también pasa. Hacen falta observaciones que distingan incremento, conservación, resetReset Control que devuelve el estado a un valor inicial especificado. Deben definirse su carácter síncrono o asíncrono y su prioridad frente a otros controles. Más información y retorno.

Haga coincidir dos controles deliberadamente

SituaciónRequisito que comprobar
reset=1, enable=0Enable no oculta reset
reset=1, enable=1Reset vence al incremento
count=M−1, enable=0No retorna mientras está detenido
count=M−1, enable=1Retorna exactamente de M−1 a 0
Reset cambia entre flancosEl reset síncrono actúa en el próximo flanco

Probar controles únicamente por separado dificulta detectar errores de prioridad.

Cada columna siguiente registra un flanco ascendenteFlanco ascendente Instante en que el reloj pasa de 0 a 1. Se distingue del nivel alto, que abarca todo el intervalo con CLK=1. Más información, con entradas anteriores y estado «después» actualizado. La alineación no representa retardo físico de propagaciónRetardo de propagación Tiempo desde un cambio de entrada hasta que la salida se estabiliza en el valor correcto. La equivalencia lógica y el comportamiento temporal son propiedades distintas. Más información. Desde count=5, el circuito incorrecto solo comprueba reset dentro de enable y conserva 5 en el primer flanco. Aunque los finales coinciden, la primera discrepancia revela el fallo.

Contraejemplo mínimo: enable oculta reset
Ver los datos de la forma de onda
Datos de la forma de onda: cada carácter es un intervalo; un punto conserva el estado anterior; p representa un ciclo de reloj.
SeñalForma de ondaValores del bus
flanco234E0 → E1 → E2
reset101
enable01.
correcto después2340 → 1 → 0
con error después2345 → 6 → 0

Inicie el modelo módulo 8 en 101. Seleccione enable=0, reset=1 y avance el reloj: debe resultar 000. El RTL incorrecto con reset dentro de enable mantendría 101. Retire reset y distinga conservación con enable=0 de incremento con enable=1.

Haga coincidir reset y enable

El reset síncrono tiene prioridad sobre enable. Con enable=0, se conserva el valor almacenado. q=101; q_next = (q + 1) mod 8

Encuentre la primera discrepancia con una referencia

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)

El modelo supone estados normales 0–M−1; añada por separado la política de recuperación fuera de rango. Calcule y compare en cada flanco. Las entradas y el estado justo antes de la primera discrepancia son el punto de partida mínimo para investigar.

Si falla tras 1000 ciclos, elimine estímulos innecesarios hasta reproducirlo en 3–5 flancos. Tras corregir RTL, conserve ese contraejemplo en regresión. Revise por separado especificación y código para no introducir simultáneamente el mismo error en diseño y prueba.

Inténtalo tú

Un código incorrecto encierra reset en if(en) begin if(rst) ... end. ¿Qué estado inicial y entradas revelan el fallo con la secuencia más corta?

Leer la explicación

Parta de un estado no nulo y aplique un flanco con rst=1, en=0. Con prioridad de reset debe quedar 0; el circuito incorrecto conserva el estado anterior. Partir de 0 oculta el fallo.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.