14 / 37 · Concepto
Flip-flops, enable y prioridad de control
Defina conservación, carga y reset como estado siguiente y evite crear puertas de reloj involuntarias.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Un registro almacena una función de estado siguiente
Sea el valor anterior al flanco, la entrada capturada y el valor actualizado. Un 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 con prioridad de reset sobre enable cumple:
Con enable=0, el almacenamiento se conserva aunque D cambie. Omitir explícitamente esa rama en un bloque secuencial es distinto de omitir una asignación combinacional: conservar el registro forma parte de su especificación.
module enabled_register (
input logic clk, rst, en,
input logic [7:0] d,
output logic [7:0] q
);
always_ff @(posedge clk) begin
if (rst) q <= 8'b0;
else if (en) q <= d;
end
endmoduleEs un reset síncrono activo en alto. Si reset y enable coinciden en 1 durante un flanco, se almacena 0. Invertir el orden cambia la función: documente la prioridad en código y pruebas, además de comentarios.
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. Las entradas son anteriores al flanco; el estado marcado «después» es posterior a la actualización. Las columnas ordenan muestras, no dibujan retardos físicos 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. Q inicia en 0xA5: la primera columna conserva, la segunda escribe y la tercera enfrenta reset con enable.
Ver los datos de la forma de onda
| Señal | Forma de onda | Valores del bus |
|---|---|---|
| flanco | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 99 → 77 |
| Q después | 234. | A5 → 3C → 00 |
Enable no recorta directamente el reloj
Usar arbitrariamente gated_clk = clk & en como reloj permite que cambios de en produzcan pulsos cortos o flancos inesperados. El flujo de síntesis e implementación decide cómo mapear el RTL con clock enable. La reducción de potencia mediante clock gating se diseña por separado con celdas adecuadas y verificación temporal.
Las prioridades se revelan cuando se solapan reset, load y enable; activar cada control por separado no basta. Por ejemplo, con q=A5, en=0 y d=3C, q se conserva; si en=1 en el siguiente flanco, debe almacenar 3C.
Inténtalo tú
Partiendo de q=0xA5, pase un flanco con rst=1, en=1, d=0x3C y el siguiente con rst=0, en=0. ¿Qué vale q después de cada flanco?
Leer la explicación
En el primero, 0 porque reset tiene prioridad; en el segundo sigue en 0 porque enable=0. Si reset se anidara dentro de en, podría perderse con en=0; pruebe también esa combinación.