Altifigence Academy

11 / 24 · Übung

Praktikum: zwei Stufen und Leerstellen verfolgen

Berechnen Sie den Folgezustand aus dem alten Zustand und vergleichen Sie Ausgabe-Tags, Werte und Flanken.

Gemeinsam aktualisierte Register modellieren

Erstellen Sie ein Taktmodell der zweistufigen Funktion f(a,b)=3(a+b). Jede Iteration stellt eine steigende Flanke dar. Übernehmen Sie zunächst altes s2 am Ausgang. Berechnen Sie anschließend die neue zweite Stufe aus altem s1 und aktualisieren Sie dann beide Stufen. Wird s1 vor der Berechnung von s2 aktualisiert, kann eine Eingabe fälschlich an einer Flanke zwei Register durchlaufen.

Fügen Sie pipeline-model.mjs manuell Ihrem Projekt hinzu, speichern Sie die Datei und führen Sie node pipeline-model.mjs in einem Node.js-Terminal aus. Übernehmen Sie vier Eingaben an Flanke 0 bis 3 und leeren Sie die Pipeline dann an Flanke 4 und 5. Bei dieser Festlegung mit stets bereitem Empfänger werden alle Eingaben übernommen. Null bezeichnet eine leere Stufe und nicht den Zahlenwert Null. Auch ein gültiges Nullergebnis stellt eine Transaktion dar.

javascript
import assert from 'node:assert/strict';
const inputs = [[1,2], [250,10], [100,0], [255,255]];
let s1 = null, s2 = null;
const seen = [];
for (let edge = 0; edge < 6; edge++) {
  if (s2 !== null) seen.push({ edge, ...s2 });
  const next2 = s1 === null ? null : {
    tag: s1.tag, y: (s1.sum * 3) % 256
  };
  const next1 = edge < inputs.length ? {
    tag: edge, sum: inputs[edge][0] + inputs[edge][1]
  } : null;
  s1 = next1;
  s2 = next2;
}
assert.deepEqual(seen, [
  { edge: 2, tag: 0, y: 9 },
  { edge: 3, tag: 1, y: 12 },
  { edge: 4, tag: 2, y: 44 },
  { edge: 5, tag: 3, y: 250 }
]);
assert.equal(s1, null);
assert.equal(s2, null);
console.log('PIPELINE PASS: 4 ordered results, latency=2');
FlankeÜbernommene EingabeÜbertragene Ausgabe
0tag0:1+2Keine
1tag1:250+10Keine
2tag2:100+0tag0:y9
3tag3:255+255tag1:y12
4Leerstelletag2:y44
5Leerstelletag3:y250

Die zweite Transaktion erhält die Summe 260 und kürzt 780 auf 12. Die letzte kürzt 1530 auf 250. Der ausdrückliche Vergleich von Flanke, Tag und Wert entdeckt zeitliche ebenso wie arithmetische Fehler. Leerstellen beim Leeren löschen beide Stufen, damit alte Ausgaben nicht wiederholt werden.

Um fehlende Eingaben zu untersuchen, fügen Sie null an ausgewählten Übernahmeflanken ein und erhöhen Sie Tags nur für übernommene Transaktionen. Die Ausgabelücken folgen den Leerstellen, während gültige Transaktionen eine Latenz von zwei Flanken behalten. Dieses Modell hat keinen Rückstau vom Ausgang. Das nächste Kapitel ergänzt elastisches Verhalten. Erfolgreiche Node-Prüfungen bestätigen dieses Zustandsmodell, keine HDL-Kompilierung und keinen DDS-Simulationslauf.

Selbst ausprobieren

An Flanke 1 liegt keine Eingabe an und B,C,D werden an Flanke 2,3,4 übernommen. An welchen Flanken werden die Tags 0 bis 3 ausgegeben?

Erklärung lesen

A wird an Flanke 2 übertragen. B,C,D werden an Flanke 4,5,6 übertragen. Flanke 3 ist eine Leerstelle am Ausgang. Vergeben Sie Tags nach der Übernahmereihenfolge 0,1,2,3 statt nach der tatsächlichen Flankennummer.

Lesson files

pipeline-model.mjs ↓

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