Altifigence Academy

7 / 24 · Konzept

Zeitliche Verhaltensregeln für Speicheranfragen und Antworten

Unterscheiden Sie synchrone Lesezugriffe, verzögerte Tags und Kollisionen an derselben Adresse.

Ein Speicher ist mehr als ein großes Registerfeld

Eine Speicherschnittstelle benötigt neben der Kapazität auch zeitliche Verhaltensregeln. Ein asynchroner Lesezugriff verändert den kombinatorischen Ausgang, sobald sich seine Adresse ändert. Ein synchroner Lesezugriff tastet eine Adresse an einer Flanke ab und verändert den Ausgang danach. Diese Modelle erfordern unterschiedliche Abläufe. Die Abbildung auf eine Speicherressource des Bausteins hängt außerdem vom Programmierstil und dem Zielwerkzeug ab. Hier spezifizieren wir sechzehn Acht-Bit-Einträge mit synchronem Lesezugriff.

Tasten Sie Adresse und Tag an Flanke k ab. Die zugehörigen Daten und der verzögerte Tag erscheinen nach dieser Flanke; ihre erste mögliche Übernahme erfolgt an Flanke k+1. Ein Lesezugriff mit einem Takt Latenz bedeutet keine sofortige kombinatorische Antwort. Die Antwortgültigkeit muss derselben Verzögerung folgen. Die Kombination eines verzögerten Werts mit dem aktuellen Eingabe-Tag führt bei aufeinanderfolgenden Anfragen zu Fehlern.

SystemVerilog
logic [7:0] mem [0:15];
logic [7:0] rd_data;
logic [3:0] rd_tag;
logic rd_valid;
always_ff @(posedge clk) begin
  if (wr_en) mem[wr_addr] <= wr_data;
  rd_valid <= req_valid;
  if (req_valid) begin
    rd_data <= mem[req_addr];
    rd_tag <= req_tag;
  end
  if (rst) rd_valid <= 1'b0;
end

Bei diesem Verhaltensmodell liefert gleichzeitiges Lesen und Schreiben einer Adresse den alten Wert, weil nichtblockierende Zuweisungen den alten Zustand lesen. Tatsächliche Speicherprimitive haben ausdrückliche Kollisionsmodi und Einschränkungen; siehe Lese-/Schreibmodi in AMD UG901 und prüfen Sie den gewünschten Modus anhand des Zielbausteins und des Syntheseergebnisses. Das Zurücksetzen von valid initialisiert das Speicherfeld nicht.

FlankeÜbernommene AnfrageWirkung
2addr=3,tag=7Alten Wert mem[3]=42 erfassen
3addr=4,tag=842,7 übernehmen und den nächsten Wert erfassen
4Keine AnfrageAntwortgültigkeit löschen

Dieser Ablauf setzt voraus, dass der Empfänger nie wartet. Wartet er an Flanke 3, kann die nächste Antwort rd_data überschreiben. Ergänzen Sie Antwortspeicher oder begrenzen Sie Anfragen anhand der verfügbaren Kapazität einschließlich bereits unterwegs befindlicher Antworten. Initialisieren Sie den Testspeicher ausdrücklich, bevor Sie Werte prüfen. Verifizieren Sie die Zuordnung von Adresse und Tag, nicht nur die Antwortdaten; ein korrekter Wert an der falschen Anfrage ist ebenfalls ein Fehler.

Selbst ausprobieren

Bei mem[3]=42 wird Adresse 3 gelesen und an derselben Flanke 99 dorthin geschrieben. Welchen Wert legt dieses Modell in rd_data ab und welchen neuen Wert hat der Speicher? Was wird für Wartezyklen am Ausgang benötigt?

Erklärung lesen

rd_data wird 42, während mem[3] zu 99 wird. Beide Zuweisungen lesen den alten Zustand. Wartezyklen erfordern Antwortspeicher und eine Annahmesteuerung, die bereits unterwegs befindliche Antworten mitzählt. Prüfen Sie den Kollisionsmodus des tatsächlichen Zielspeichers separat.

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