Barrel-Shifter

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Ein Barrel-Shifter ist ein Bauteil aus der Digitaltechnik. Es handelt sich dabei um eine spezielle Art einer kombinatorischen Schaltung, mit der binäre Verschiebungen oder Rotationen um eine beliebige, einstellbare Anzahl von Stellen erfolgen kann. Im Gegensatz zu Schieberegistern, welche wesentlich aus getakteten Flipflops wie dem D-Flipflop bestehen, ist der Barrel-Shifter eine kombinatorische Schaltung ohne Flipflops als Speicherelement. Bei Bedarf können in der digitalen Schaltung getaktete Flipflops nachgeschaltet werden, welche aber nicht für die eigentliche Funktion zwingend notwendig sind.

Sind die Bits innerhalb des Barrel-Shifters zyklisch miteinander verbunden, so spricht man auch von einem Barrel-Rotator.

Allgemeines[Bearbeiten]

4-Bit breiter Barrel-Shifter realisiert als Matrix (x als Eingang, y als Ausgang)

Im Unterschied zu gewöhnlichen Schieberegistern kann ein Barrel-Shifter in einem Schritt eine Verschiebung um mehrere Bit durchführen und vermeidet somit zeitaufwendige Schleifen bei der Durchführung mehrbittiger Schiebeoperationen. Je nach Anwendungsbereich kann dies einen erheblichen Geschwindigkeitsvorteil für das jeweilige Rechenwerk bedeuten, da diese Funktion meist in einem einzelnen Systemtakt ausgeführt werden kann.

Ein 4-Bit breiter Barrel-Rotator als einfachste Form besitzt vier Dateneingänge, zwei Steuereingänge und vier Datenausgänge. Wenn bei den Eingängen die Folge „ABCD“ anliegt, so kann als Funktion der möglichen vier Zustände an den beiden Steuereingängen folgende Ausgangsfolgen erzeugt werden: ABCD, DABC, CDAB oder BCDA. In nebenstehender Grafik sind diese vier möglichen Schaltzustände durch vier Farben in der Steuerlogik eingezeichnet: Durch den Decoder wird immer nur eine der vier eingefärbten Leitungen aktiviert und damit eines der vier Ausgangsmuster erzeugt.

Der Barrel-Shifter ist häufig Bestandteil von Mikroprozessoren. Ebenso kann diese Logikfunktion in einem programmierbaren Logikbaustein (PLD), einem FPGA oder einem ASIC als Teil einer Gesamtschaltung realisiert werden. Mit diskreten Logikbauelementen wird diese Schaltungsfunktion heute kaum mehr realisiert, da mit diesen Bauelementen die erforderlichen meist hohen Taktfrequenzen nicht erreicht werden können und der Schaltungsaufwand für den Aufbau und die Verdrahtung viel zu groß ist.

Realisierung[Bearbeiten]

Barrel-Shifter können verschiedenartig aufgebaut werden. Eine übliche Variante ist mittels Multiplexern, welche durch entsprechende Verschaltung und Steuerlogik eine Verschiebung um eine einstellbare Stellenanzahl bewirken. Um unterschiedliche Laufzeiten zu vermeiden, werden typischerweise 2-aus-1-Multiplexer kaskadiert. Je nach Breite des Barrel-Shifters werden verschieden viele 2-aus-1-Multiplexer benötigt, deren Anzahl überproportional steigt und daher für breite Barrel-Shifter zu einem entsprechend großen Schaltungsaufwand führt:

  • 64-bit – \scriptstyle 64 \cdot \log_2(64) = 64 \cdot 6 = 384
  • 32-bit – \scriptstyle 32 \cdot \log_2(32) = 32 \cdot 5 = 160
  • 16-bit – \scriptstyle 16 \cdot \log_2(16) = 16 \cdot 4 = 64
  • 8-bit – \scriptstyle   8 \cdot \log_2(8)  =  8 \cdot 3 = 24

Eine weitere Realisierungsmöglichkeit besteht in Form in digitalen Multiplizierwerken. Insbesondere wenn die digitale Schaltung, wie beispielsweise ein FPGA, nicht genutzte Hardware-Multiplizierer besitzt, lassen sich damit effizient Barrel-Shifter ohne Multiplexer realisieren.[1]

Daneben gibt es auch Barrel-Shifter als einzelne integrierte Schaltungen, wie beispielsweise der Baustein SN74AS897 welcher einen 8 Bit breiten Barrel-Shifter bietet.

Einzelnachweise[Bearbeiten]

  1. Implementing Barrel Shifters Using Multipliers (PDF; 50 kB), Xilinx Application Note, Paul Gigliotti, 2004 (engl.)