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.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
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ón | Requisito que comprobar |
|---|---|
| reset=1, enable=0 | Enable no oculta reset |
| reset=1, enable=1 | Reset vence al incremento |
| count=M−1, enable=0 | No retorna mientras está detenido |
| count=M−1, enable=1 | Retorna exactamente de M−1 a 0 |
| Reset cambia entre flancos | El 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.
Ver los datos de la forma de onda
| Señal | Forma de onda | Valores del bus |
|---|---|---|
| flanco | 234 | E0 → E1 → E2 |
| reset | 101 | |
| enable | 01. | |
| correcto después | 234 | 0 → 1 → 0 |
| con error después | 234 | 5 → 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.
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
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.