Altifigence Academy

14 / 24 · Konzept

Ein elastisches Register mit einem Speicherplatz entwerfen

Übernehmen Sie in einen leeren Platz oder ersetzen Sie ein gleichzeitig verbrauchtes Element.

Ready aus verfügbarem Speicher ableiten

Ein Puffer mit einem Platz enthält ein full-Bit und ein Nutzdatenregister. Ist er leer, kann er eine Eingabe übernehmen, auch wenn der Empfänger wartet. Ist er voll, kann er ein Ersatzelement übernehmen, wenn der Empfänger die vorhandene Ausgabe an dieser Flanke übernimmt. Daher gilt input-ready = !full OR output-ready und output-valid = full. Dieser registrierte Puffer besitzt keinen kombinatorischen Datendurchgriff.

Ist input-ready hoch, entspricht das nächste full dem input-valid. Erfassen Sie die Nutzdaten, wenn eine Eingabe vorhanden ist; andernfalls leeren Sie den Platz. Ist input-ready niedrig, erhalten Sie full und Nutzdaten. Wird full allein deshalb gelöscht, weil eine Ausgabe übertragen wurde, geht ein gleichzeitiger Ersatz verloren. Eine Erfassung allein anhand von input-valid überschreibt einen vollen, angehaltenen Platz.

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
Altes fullout-readyin-validAktion
001Eingabe speichern
101Eingabe ablehnen und Ausgabe halten
111Altes Element ausgeben und Ersatz speichern
110Altes Element ausgeben und Platz leeren

Speichern Sie tag0,y9 an Flanke 0. Warten Sie an Flanke 1. Übernehmen Sie an Flanke 2 tag0 am Ausgang und speichern Sie tag1,y12; der Platz bleibt voll. Übernehmen Sie an Flanke 3 tag1 und leeren Sie den Platz, falls keine Eingabe vorliegt. Der Ersatz ermöglicht eine Transaktion pro Takt.

Die Verbindung vieler Stufen erzeugt einen rückwärts laufenden kombinatorischen ready-Pfad. Die Registrierung von ready erfordert zusätzlichen Speicher für eintreffende Elemente, bevor die Warteinformation wirksam wird. Prüfen Sie busspezifische Einschränkungen kombinatorischer Pfade separat. Speichern Sie unabhängig von der Nutzdatenbreite die Daten und jedes Begleitfeld unter derselben Bedingung und verifizieren Sie alle vier Aktualisierungsfälle.

Selbst ausprobieren

An einer Flanke mit full=1, out-ready=1 und in-valid=1 wird tag7 verbraucht und tag8 angeboten. Welche Werte haben nächstes full und out-tag? Was geht schief, wenn full beim Verbrauch immer gelöscht wird?

Erklärung lesen

Input-ready ist hoch, also wird tag8 gespeichert und full=1 beibehalten. Out-tag wird 8. Ein grundsätzliches Löschen von full verliert tag8 nach seiner Übernahme.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.