Altifigence Academy

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.

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.

SystemVerilog
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 anteriorout-readyin-validAcción
001Almacenar entrada
101Rechazar entrada y conservar salida
111Entregar elemento anterior y almacenar reemplazo
110Entregar 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.

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