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?
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
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.
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
endmoduleWellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| clock | p.... | |
| valid | 01111 | |
| ready | 01011 | |
| fire | 01011 |
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.