Grund für die Pipeline-Verzögerung der Teilungsfunktionen von Altera?

In Quartus II hat die Standardfunktion lpm_divide einen Parameter PIPELINE_DELAY. Der Standardwert ist floor(WIDTH_Q div 2)- wobei WIDTH_Q :=die Breite des Quotienten in Bits ist.

Ich bin neugierig, warum dies ein Parameter ist, den der Benutzer ändern kann (anstatt nur das zu sein, was es ist), und ich kann nicht ganz verstehen, warum dieser Standardwert der Fall ist.

Antworten (1)

Ein Teiler ist eine Reihe von Subtraktionen und Multiplexern, die den Wert für den nächsten Schritt auswählen. Wenn es rein kombinatorisch gemacht wird, dann ist der kritische Pfad durch all diese Logik ziemlich lang (selbst mit Carry-Lookahead auf den Subtrahierern) und der Taktzyklus muss sehr langsam sein.

Aber der Prozess ist einfach zu leiten, und die Anzahl der Pipeline-Stufen, die Sie verwenden können, ist ziemlich willkürlich. Sie könnten nach jedem Subtraktions-Mux-Paar ein Pipeline-Register einfügen, oder Sie könnten zwei oder mehr Subtraktions-Mux-Stufen pro Pipeline-Register ausführen (zwei scheinen die Standardeinstellung zu sein). Sie könnten sogar so weit gehen, die Subtraktionen und Muxes separat zu leiten (oder sogar innerhalb jeder Subtraktion zu leiten), um die schnellstmögliche Taktgeschwindigkeit zu erhalten, aber das wäre ziemlich extrem.

Je mehr Pipeline-Register Sie verwenden, desto kürzer kann der kritische Pfad (und die Taktperiode) sein, aber Sie verwenden mehr Ressourcen (die Register). Außerdem steigt die Gesamtlatenz, da Sie die Einrichtungs- und Ausbreitungszeiten der Pipeline-Register in der Taktperiode berücksichtigen müssen (zusätzlich zu den Verzögerungen der Subtraktions-Mux-Logik). Dies wird mit der Anzahl der Pipeline-Stufen multipliziert, um die Gesamtlatenz zu berechnen.

Aus diesem Grund geben sie Ihnen die Kontrolle über diesen Parameter – damit Sie den richtigen Kompromiss für Ihre spezielle Anwendung auswählen können.

Beachten Sie, dass Sie mit diesem Modul unabhängig vom Wert dieses Parameters ein Ergebnis pro Taktzyklus erhalten. Wenn Sie dieses Leistungsniveau nicht benötigen, würden Sie ein anderes Modul verwenden, das den Quotienten seriell berechnet, ein (oder möglicherweise mehr als ein) Bit auf einmal.