Altifigence Academy

14 / 24 · Concept

Concevoir un registre élastique à un emplacement

Acceptez dans un emplacement vide ou remplacez un élément consommé simultanément.

Déduire ready du stockage disponible

Un tampon à un emplacement contient un bit full et un registre de charge utile. Vide, il peut accepter une entrée même si le récepteur est bloqué. Plein, il peut accepter un remplacement si le récepteur consomme la sortie existante au même front. Ainsi, input-ready vaut !full OU output-ready et output-valid vaut full. Ce tampon enregistré n’a pas de passage combinatoire direct des données.

Si input-ready est haut, le prochain full égale input-valid. Capturez la charge utile lorsqu’une entrée existe ; sinon, videz l’emplacement. Si input-ready est bas, conservez full et la charge utile. Effacer full simplement parce qu’une sortie a été transférée perd un remplacement simultané. Capturer sur input-valid seul écrase un emplacement plein et bloqué.

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
Ancien fullout-readyin-validAction
001Stocker l’entrée
101Refuser l’entrée et conserver la sortie
111Livrer l’ancien élément et stocker son remplacement
110Livrer l’ancien élément et vider l’emplacement

Stockez tag0, y9 au front 0. Bloquez au front 1. Au front 2, consommez tag0 et stockez tag1, y12 ; l’emplacement reste plein. Au front 3, consommez tag1 et videz-le s’il n’y a aucune entrée. Le remplacement permet une transaction par cycle.

Connecter plusieurs étages crée un chemin combinatoire ready vers l’amont. Enregistrer ready exige du stockage supplémentaire pour les arrivées précédant la prise d’effet du blocage. Vérifiez séparément les restrictions de chemins combinatoires propres à un bus. Quelle que soit la largeur de charge utile, stockez les données et tous les champs associés sous la même condition, puis vérifiez les quatre cas de mise à jour.

Essayez vous-même

À un front avec full=1, out-ready=1 et in-valid=1, consommez tag7 et proposez tag8. Quels sont le prochain full et out-tag ? Que se passe-t-il si full est toujours effacé à la consommation ?

Lire l’explication

Input-ready est haut : stockez donc tag8 et gardez full=1. Out-tag devient 8. Toujours effacer full perd tag8 après son acceptation.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.