5 / 20 · Konzept
Die Verhaltensregeln an einer steigenden Flanke
Legen Sie Flankennummerierung, registrierte Weitergabe, Akkumulation und Initialisierungsvorrang fest.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Die in diesem Kurs verwendete Zeitkonvention
Reset und Löschen enden vor E0, der ersten steigenden Flanke, die Daten verarbeitet. Eingaben sind unmittelbar vor E_t stabil. An dieser Flanke akkumuliert ein PE ein Produkt aus seinen Eingaben vor der Flanke und speichert dieselben Eingaben in seinen Weitergaberegistern nach rechts und unten. Neue Akkumulator- und Weitergabewerte sind unmittelbar nach E_t beobachtbar. Ein Nachbar verarbeitet die registrierten Werte an E_(t+1).
Diese Grundvariante hat weder ein separates Eingangsregister noch einen Multiplizierer mit Pipeline oder eine Stufe zur Serialisierung der Ausgabe. Wird eines ergänzt, müssen Ablauf und Ergebnislatenz erneut betrachtet werden. „Ein Ergebnis an Flanke Null“ meint den aktualisierten Akkumulator nach E0, nicht davor. Initialisierungsflanken werden bei der Anzahl der Rechenflanken nicht mitgezählt. Löschen hat Vorrang vor MAC; gleichzeitiges Löschen und erstes Datenpaar verwirft daher dieses Paar. Löschen Sie zuerst und führen Sie die Daten an der folgenden Flanke zu.
Zwei Aufgaben in einem PE
Mit A=1 und B=5 an E0 aktualisiert PE(0,0) seinen Akkumulator auf fünf und gibt die Operanden in Register weiter. An E1 addieren die Randoperanden 2 und 7 vierzehn und ergeben neunzehn. An derselben Flanke können benachbarte PEs die ersten registrierten Operanden verarbeiten. Würde ein Token innerhalb einer Flanke zwei PEs durchlaufen, wären unsere späteren Versatzgleichungen ungültig.
Nichtblockierende Zuweisungen beschreiben dieses Lesen vor und Schreiben nach der Flanke. Auch eine Testbench muss konsistent nach der Zustandsaktualisierung abtasten, mit einem geeigneten Clocking-Block oder Abtastbereich des Simulators. Verlassen Sie sich nicht auf die zufällige Reihenfolge von Prozessen in der Active-Region.
Vorrang und eine globale Pause
Die Priorität lautet Reset, dann Löschen, dann advance. Reset und Löschen leeren Akkumulatoren und Gültigkeitszustand. Bei advance=0 hält jedes PE seinen Akkumulator, Weitergabewerte, Gültigkeitsflags und Tags. Auch der Ablaufplaner am Rand hält an. Eine advance-Flanke führt einen logischen Schritt aus. Eine gültige Null ist ein echter Operand; ein ungültiges Token wird unabhängig von seinen Datenbits ignoriert.
Beträgt ein Akkumulator fünf und pausiert das Array für zwei physische Flanken, bleibt er fünf. Die nächste advance-Flanke führt den nächsten logischen Schritt aus. Berichten Sie physische Taktflanken getrennt von logischen advance-Schritten. Initialisierung wirkt auch während einer Pause und verhindert, dass alte Tokens in den nächsten Auftrag gelangen.
Selbst ausprobieren
Das Löschen endet an E−1. Verarbeiten Sie (1,5) an E0, pausieren Sie an E1 und verarbeiten Sie (2,7) an E2. Geben Sie den Akkumulator nach jeder Flanke und die Nummern der logischen Schritte an.
Erklärung lesen
Nach E0 gilt acc=5 und logischer Schritt Null ist abgeschlossen. E1 hält acc=5. Nach E2 gilt acc=19 und logischer Schritt eins ist abgeschlossen. Es gab drei physische und zwei advance-Flanken.