Altifigence Academy

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.

Un registro almacena una función de estado siguiente

Sea QkQ_k el valor anterior al flanco, DkD_k la entrada capturada y Qk+1Q_{k+1} 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:

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

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.

SystemVerilog
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
endmodule

Es 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.

Prioridad entre reset, enable y conservación
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
flanco2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q después234.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.

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