17 / 37 · Práctica
Práctica: verifique reset, retorno modular e invariantes del contador
Compare cada flanco con una referencia y separe los efectos de inicialización, reset y ancho.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Circuito y condiciones de observación
Parta de 3 y aplique 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 en el primer 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. Después recorra 0,1,2,3,0. Aunque reset ya esté activo, el valor anterior se conserva hasta el flanco.
Antes de empezar
Prepare un proyecto Desktop de Digital Design Studio con permisos de ejecución. Guarde cada ejemplo como rtl/top.sv en su propia carpeta.
Código SystemVerilog
module top (
input logic clk,
input logic rst,
output logic [1:0] count
);
// Active-high synchronous reset: sampled only at the rising clock edge.
always_ff @(posedge clk)
if (rst) count <= 2'b00;
else count <= count + 2'b01;
endmoduleEjecución
En New analysis, seleccione Two-state single-clock v1. Clock port es clk y el periodo, 1000ps. Ejecute Preflight y Run RTL simulation con estos valores y compare resultados.
| Configuración | Valor |
|---|---|
| Valores iniciales de registros, desde el LSB | [true,true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Estímulos de entrada
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]Cada columna registra un flanco: entradas previas y estados «después» posteriores a actualizarse. La alineación ordena muestras y no representa retardo 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. E0–E4 son los flancos de 500,1500,2500,3500,4500ps. Compare todos los estados intermedios, además del final.
Ver los datos de la forma de onda
| Señal | Forma de onda | Valores del bus |
|---|---|---|
| flanco | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count antes | 23452 | 11 → 00 → 01 → 10 → 11 |
| count después | 23452 | 00 → 01 → 10 → 11 → 00 |
Comparación de resultados
5 cycles · count=00. Confirme 00 → 01 → 10 → 11 → 00 en 500,1500,2500,3500,4500ps.
Se usa RTL 0/1 de un solo reloj, sin bancos de pruebas #delay, initial o X/Z. La marca de finalización de la lección registra aprendizaje, no una simulación real.
Calcule el estado esperado en cada flanco
El registroRegistro Circuito que almacena varios bits de estado. Los registros síncronos de este curso capturan la entrada especificada en el flanco de reloj. Más información inicia en 3, pero reset prevalece en el primer flanco. Inicialización y reset son conceptos distintos.
| Flanco ascendente | rst | count antes | count después |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Sin reset, cada flanco debe cumplir:
Comprobar solo el 00 final permite pasar incluso tras estados intermedios incorrectos. Verifique la secuencia completa y la prioridad de reset por separado.
Cambie una condición cada vez
- Con estado inicial 00, la secuencia posterior al primer reset debe ser idéntica. Así comprueba independencia respecto al estado inicial.
- Con Reset cycles=2, count debe ser 00 en los dos primeros flancos; el incremento comienza un flanco más tarde.
- Con ancho de tres bits, el retorno ocurre cada ocho incrementos. Revise también anchos de constantes, matriz de inicialización y duración de ejecución.
Generalice a módulo 10
Cuatro bits representan 0–15; incrementar sin más no pasa de 9 a 0. Defina otra función, con reset prioritario:
Los estados no utilizados 10–15 vuelven a 0 al habilitar. Pueden elegirse otras políticas, pero especificación y referencia deben coincidir.
Inténtalo tú
En el contador original de dos bits, después del reset del primer flanco se incrementa 11 veces, sin enable. ¿Cuánto vale count? Calcule sin enumerar estados.
Leer la explicación
Después del reset vale 0 y , es decir, 11. «Once flancos totales» no equivale a «once incrementos después del reset»: si el primero resetea, solo hay diez incrementos.