5 / 24 · Concepto
Interpreta las transferencias entre registros en los flancos de reloj
Separa el estado anterior del siguiente y sigue cómo las habilitaciones conservan los valores almacenados.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Todos los registros leen el estado anterior
Empieza por identificar la información que debe sobrevivir entre ciclos. Un acumulador, los operandos capturados, un contador de iteraciones y la validez de salida son estado. La suma del acumulador actual y un operando es un valor combinacional. Escribir una variable no explica por sí solo el almacenamiento; especifica el evento que captura su valor.
Este acumulador suma x únicamente en los flancos ascendentes con en activado. Con en a nivel bajo, conserva su valor. Un resultado intermedio de nueve bits hace explícita la suma; seleccionar sus ocho bits menos significativos define el comportamiento módulo 256. Las asignaciones no bloqueantes en always_ff programan el estado siguiente usando los valores leídos en el flanco actual. Interpretar el bloque como asignaciones inmediatas de software lleva a una interpretación incorrecta cuando intervienen varios registros.
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
if (rst) acc <= 8'd0;
else if (en) acc <= next_sum[7:0];
endEl reinicio es síncrono y tiene prioridad sobre la habilitación. Omitir una asignación secuencial cuando en está a nivel bajo significa que el registro conserva su valor. En cambio, omitir una asignación en una ruta combinacional puede implicar un latch no deseado. Para la lógica combinacional del estado siguiente, establece valores predeterminados y después sustitúyelos en condiciones específicas.
| Flanco | rst | en | x | acc anterior | acc nuevo |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 9 | Desconocido | 0 |
| 1 | 0 | 1 | 7 | 0 | 7 |
| 2 | 0 | 0 | 100 | 7 | 7 |
| 3 | 0 | 1 | 250 | 7 | 1 |
En el flanco 2, la entrada visible 100 no se aceptó. En el flanco 3, 7+250=257 se reduce a 1. Distinguir la presentación de la aceptación sigue siendo esencial cuando en pasa a ser valid AND ready.
Para a<=x; b<=a;, a anterior=5 y x=9 producen a nuevo=9 y b=5. Si b debe recibir 9, conecta su entrada a x. Completa primero la columna del estado anterior y después calcula conjuntamente todos los valores del estado siguiente; así se detectan desfases de un ciclo entre los datos y el control.
Inténtalo tú
Inicialmente a=4 y b=0. Las entradas x son 8 y después 12, con a<=x; b<=a en cada flanco. ¿Cuánto valen a y b tras el segundo flanco?
Leer la explicación
Tras el primer flanco, a=8 y b=4. Tras el segundo, a=12 y b=8. Cada actualización de b usa el valor anterior de a, de modo que x=12 no atraviesa ambos registros en un solo flanco.