Altifigence Academy

14 / 24 · Konzept

Ready/Valid und angehaltener Zustand

Die Ausgabestufe hält A mit out_ready=0, während Eingabe B gültig ist. Was müssen Stufe und Sender an der nächsten Flanke tun?

Nur bei einer Übertragung fortschreiten

Ein Sender setzt valid, wenn sein aktuelles Element verfügbar ist. Ein Empfänger setzt ready, wenn er es übernehmen kann. An einer steigenden Flanke mit beiden gesetzten Signalen erfolgt eine Übertragung. Erst dann dürfen Pixelkoordinaten, Zeilenpufferzustand und die zugehörige Akkumulationseingabe fortschreiten. Fortschritt allein anhand valid verliert Daten während einer Empfängerpause; Fortschritt allein anhand ready zählt nicht existierende Eingaben.

Halten Sie bei hohem valid und niedrigem ready dieselben Daten und valid. Um bei blockierter Ausgabe weiter Eingaben anzunehmen, stellen Sie Speicher bereit und leiten Sie Bereitschaft aus seiner Restkapazität ab. Das RTL-Beispiel ist eine Stufe mit einem Element: Sie übernimmt ein neues Element, wenn sie leer ist oder das aktuelle Element ausgeben kann.

Durchgerechnete Übertragungsfolge

Für Takt Null bis vier ergeben valid=[0,1,1,1,1] und ready=[0,1,0,1,1] die Folge fire=[0,1,0,1,1]. Fünf Takte übernehmen drei Pixel. Das in Takt zwei wartende Element bleibt bis Takt drei. Ein Zeilenzähler für Breite vier hat seine erste Zeile noch nicht abgeschlossen. Die Zählung von Takten statt Übertragungen verschiebt jede spätere Fensterkoordinate.

Hält die Stufe A bei hohem out_valid und niedrigem out_ready, ist in_ready niedrig und A bleibt gespeichert. Sobald out_ready hoch wird, kann sie an derselben Flanke A ausgeben und B übernehmen. Ohne Ersatzeingabe löscht sie die Ausgabegültigkeit. Dokumentieren Sie, ob gleichzeitiger Ersatz erlaubt ist und welche Latenz daraus folgt.

Reset löscht Gültigkeit ebenso wie Daten. Ein neues Bild benötigt ein definiertes Zurücksetzen von Koordinaten und Fenstergültigkeit. Der Empfang der letzten Eingabe unterscheidet sich vom Verbrauch der letzten Ausgabe; zu frühes done kann ein neues Bild ausstehende Arbeit überschreiben lassen.

Der Code ist eine Übertragungsstufe, keine vollständige Faltungseinheit. Unterstützt Ihr installierter Ablauf Bearbeitung und Simulation von SystemVerilog, erstellen Sie eine Datei manuell und testen Sie Stabilität bei Pause und gleichzeitigen Ersatz. Hier wird keine RTL-Simulatorausführung behauptet. Das Diagramm veranschaulicht fire und ist keine aufgezeichnete Hardwarespur.

SystemVerilog
module sample_stage (
  input logic clk, reset,
  input logic in_valid,
  output logic in_ready,
  input logic signed [7:0] in_data,
  output logic out_valid,
  input logic out_ready,
  output logic signed [7:0] out_data
);
  assign in_ready = !out_valid || out_ready;
  always_ff @(posedge clk) begin
    if (reset) begin
      out_valid <= 1'b0;
      out_data <= '0;
    end else if (in_ready) begin
      out_valid <= in_valid;
      if (in_valid) out_data <= in_data;
    end
  end
endmodule
Übernommene Übertragungen bei einer Pause
Wellenformdaten anzeigen
Wellenformdaten: Jedes Zeichen steht für ein Intervall, ein Punkt hält den vorherigen Zustand und p ist ein Taktzyklus.
SignalWellenformBuswerte
clockp....
valid01111
ready01011
fire01011

Selbst ausprobieren

Die Ausgabestufe hält A mit out_ready=0, während Eingabe B gültig ist. Was müssen Stufe und Sender an der nächsten Flanke tun?

Erklärung lesen

Die Stufe setzt in_ready niedrig und hält A mit out_valid. Der Sender hält B mit in_valid. Stabile Elemente können später genau einmal übertragen werden.

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