Kann ein Barrel Shifter kombinatorisch durchgeführt werden?

Mir wurde gesagt, dass die 66b/64b-Codierung in 10-Gb-Ethernet (10GBASE-R) eine Ein-Zyklus-Barrel-Stufe erfordert, die der theoretischen Terminallatenz einen notwendigen Zyklus hinzufügt.

Die Wikipedia-Seite zu Barrel Shifters besagt dies

Ein Barrel-Shifter ist eine digitale Schaltung, die ein Datenwort in einem Taktzyklus um eine bestimmte Anzahl von Bits verschieben kann .

Ist "in einem Takt" eine echte Anforderung? Können Barrel Shifter nicht kombinatorisch durchgeführt werden? Warum hat die 66b/64b-Codierung eine Endlatenz von einem Zyklus?

Um es ohne Hinzufügen eines Taktzyklus hineinzuquetschen, müsste die Laufzeit durch den Shifter von der Setup-Zeitspanne eines vorhandenen Pfads zwischen Registern abgezogen werden, was wahrscheinlich nicht ausreicht, es sei denn, das System ist im Vergleich zur möglichen Leistung drastisch untertaktet von diese Phase.

Antworten (3)

In einem TenG-Basis-r-MAC oder -PCS (TX- oder RX-Seite) benötigen Sie keinen beliebigen Barrel-Shifter für die Spurausrichtung. Sie können zwei Spurausrichtungspositionen im TX PCS als Optimierung hinzufügen, wenn Sie einen laufenden IPG verwenden möchten, der das nächste Paket auf einer 4-spurigen Grenze statt auf 8 Spuren hinzufügen kann, und Sie einen MAC haben, der mit der Hälfte emittieren kann Ausrichtung. Aber das ist nur eine Schicht von 2-Eingangs-Muxing und spart Ihnen 33 U Latenz, nur für Back-to-Back-Pakete.

Auf der RX-Seite gibt es eine Art Schalthebel im RX-Getriebe, aber das ist normalerweise Hardware in der PMA (unter dem 64/66), sodass Sie sich im Allgemeinen nicht darum kümmern müssen. Der niedrigste (seriell getaktete) Teil überspringt normalerweise nur ein wenig, wenn nach Blockausrichtung gesucht wird, anstatt Muxing durchzuführen. Die höheren Konvertierungen 32:66 oder 40:66 in Richtung der Blocklock-Seite sind beteiligte Shifter, aber auch sie kommen normalerweise in den harten PCS.

Bei der 64/66-Codierung erscheint jedes der 64 Datenbits nur an drei möglichen Bitpositionen in der Ausgabe, sodass sich dies wirklich gut in eine einzige 6-LUT packen lässt. Wenn es das Timing zulässt, können Sie wie immer die Verschiebung mit der umgebenden Logik verschmelzen, die nur durch Ihre Vorstellungskraft und das Teil begrenzt ist.

Die Tatsache, dass es einen Taktzyklus dauert, bedeutet, dass es kombinatorisch erfolgt, dh es gibt keine Speicherblöcke im Inneren. Der Punkt ist, dass in einem digitalen System die Uhr die Zeitbasis ist, daher dauert jedes Zeitintervall ein ganzzahliges Vielfaches von Taktzyklen. Da nichts augenblicklich sein kann, ist das kleinste Zeitintervall ein Taktzyklus, sodass ein rein kombinatorisches Modul (wenn es gut gebaut ist) mindestens einen Taktzyklus benötigt. Das ist sowieso eine Art Konvention.

Sie können es jedoch aus einem anderen Blickwinkel sehen: Ihre kombinatorische Logik wird einige Eingänge und einige Ausgänge haben, und da es sich um ein digital getaktetes System handelt, haben Sie ein Register am Eingang und eines am Ausgang. Wenn Sie mehr als ein Kombinationsmodul in Kaskade verbinden, können Sie sie als ein großes Kombinationsmodul WLOG sehen. Wenn Sie im Eingangsregister eine gültige Eingabe eingeben, erwarten Sie eine gültige Ausgabe im Ausgangsregister, die jedoch erst nach mindestens einem Taktzyklus verfügbar ist.

Zu Ihrer Ethernet-Frage: Wenn Sie jetzt darüber nachdenken, können Sie sicher verstehen, warum ein Zyklus hinzugefügt werden muss: In einem digitalen synchronen (getakteten) System geschieht alles an einer der Taktflanken, also müssen Sie, wenn die Eingabe gültig ist Warten Sie auf die nächste Flanke, bevor Sie die Ausgabe verbrauchen, um sicherzustellen, dass die kombinatorische Logik ihre Arbeit erledigt hat.

Sie haben es mit synchroner Logik zu tun, also FF -> Logikwolke -> FF -> Logikwolke bis zum Erbrechen. das Wiedereinrasten/Erfassen des neuen Zustands und die Präsentation für den nächsten Taktzyklus nehmen den Taktzyklus in Anspruch. Und das Muxing wird wahrscheinlich kombinatorisch durchgeführt.