14 / 24 · Concepto
Diseña un registro elástico de una posición
Acepta en una posición vacía o sustituye un elemento consumido simultáneamente.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Deduce ready del almacenamiento disponible
Un búfer de una posición contiene un bit full y un registro de carga útil. Cuando está vacío, puede aceptar una entrada incluso si el receptor está detenido. Cuando está lleno, puede aceptar un reemplazo si el receptor consume la salida existente en ese flanco. Por tanto, input-ready es !full OR output-ready y output-valid es full. Este búfer registrado no permite el paso combinacional directo de datos.
Si input-ready está a nivel alto, el siguiente full es igual a input-valid. Captura la carga útil cuando existe una entrada; en caso contrario, vacía la posición. Si input-ready está a nivel bajo, conserva full y la carga útil. Borrar full solo porque se transfirió una salida pierde un reemplazo simultáneo. Capturar únicamente con input-valid sobrescribe una posición llena y detenida.
module elastic_byte (
input logic clk, rst,
input logic in_valid,
output logic in_ready,
input logic [7:0] in_data, in_tag,
output logic out_valid,
input logic out_ready,
output logic [7:0] out_data, out_tag
);
logic full;
assign in_ready = !full || out_ready;
assign out_valid = full;
always_ff @(posedge clk) begin
if (rst) full <= 1'b0;
else if (in_ready) begin
full <= in_valid;
if (in_valid) begin
out_data <= in_data;
out_tag <= in_tag;
end
end
end
endmodule| full anterior | out-ready | in-valid | Acción |
|---|---|---|---|
| 0 | 0 | 1 | Almacenar entrada |
| 1 | 0 | 1 | Rechazar entrada y conservar salida |
| 1 | 1 | 1 | Entregar elemento anterior y almacenar reemplazo |
| 1 | 1 | 0 | Entregar elemento anterior y vaciar posición |
Almacena tag0,y9 en el flanco 0. Detén en el flanco 1. En el flanco 2, consume tag0 y almacena tag1,y12; la posición sigue llena. En el flanco 3, consume tag1 y vacíala si no existe ninguna entrada. El reemplazo permite una transacción por ciclo.
Conectar muchas etapas crea una ruta combinacional hacia atrás de ready. Registrar ready requiere almacenamiento adicional para las llegadas anteriores al momento en que surte efecto la notificación de detención. Comprueba por separado las restricciones de caminos combinacionales específicas de cada bus. Independientemente de la anchura de la carga útil, almacena los datos y todos los campos acompañantes bajo la misma condición y verifica los cuatro casos de actualización.
Inténtalo tú
En un flanco con full=1, out-ready=1 e in-valid=1, consume tag7 y ofrece tag8. ¿Cuáles son el siguiente full y out-tag? ¿Qué falla si full se borra siempre al consumir?
Leer la explicación
Input-ready está a nivel alto, así que almacena tag8 y conserva full=1. Out-tag pasa a valer 8. Borrar siempre full pierde tag8 después de aceptarlo.