<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Barrel-Shifter</id>
	<title>Barrel-Shifter - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Barrel-Shifter"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Barrel-Shifter&amp;action=history"/>
	<updated>2026-05-30T13:06:56Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Barrel-Shifter&amp;diff=253438&amp;oldid=prev</id>
		<title>imported&gt;APPERbot: Bot: Dateieinbindungen: 440px und hochkant nicht gemeinsam (hochkant entfernt)</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Barrel-Shifter&amp;diff=253438&amp;oldid=prev"/>
		<updated>2024-06-01T21:28:55Z</updated>

		<summary type="html">&lt;p&gt;Bot: Dateieinbindungen: 440px und hochkant nicht gemeinsam (hochkant entfernt)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;Barrel-Shifter&amp;#039;&amp;#039;&amp;#039; ist eine Schaltung der [[Digitaltechnik]], die Bitvektoren (Datenworte) schnell und in konstanter Zeit um eine beliebige Anzahl von Bits verschiebt oder rotiert. Diese Eigenschaft unterscheidet sie grundlegend von [[Schieberegister|klassischen Schieberegistern]], deren Ausführungszeit von der Verschiebedistanz abhängt und insbesondere für große Verschiebedistanzen beträchtliche Zeiten annehmen kann.&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu [[Schieberegister]]n, welche aus getakteten [[Flipflop]]s (z.&amp;amp;nbsp;B. D-Flipflops) bestehen, besitzt ein Barrel-Shifter primär keine Speicherelemente. Bei Bedarf können diese einem Barrel-Shifter vor- und/oder nachgeschaltet werden. Sind die Bits innerhalb des Barrel-Shifters zyklisch miteinander verbunden, so spricht man manchmal von einem Barrel-Rotator.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines ==&lt;br /&gt;
[[Datei:Crossbar barrel shifter.svg|mini|4-Bit breiter Barrel-Shifter realisiert als Matrix (x als Eingang, y als Ausgang)]]&lt;br /&gt;
Ein Barrel-Shifter führt eine Verschiebung um mehrere Bits asynchron durch, wobei die benötigte Zeit durch die [[Gatterlaufzeit]] des [[Schaltnetz]]es bestimmt wird. Je nach [[Schaltwerk (Technische Informatik)|(synchroner) Umgebung]], in die der Barrel-Shifter eingebettet ist, wird für die Schiebeoperation mitunter kein zusätzlicher Taktzyklus benötigt.&lt;br /&gt;
&lt;br /&gt;
Das ist der grundlegende Unterschied gegenüber einem gewöhnlichen Schieberegister, welches eine Verschiebung um n Bit sequentiell (und meist getaktet) durch n Verschiebungen um 1 Bit durchführt.&lt;br /&gt;
&lt;br /&gt;
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: &amp;#039;&amp;#039;ABCD&amp;#039;&amp;#039;, &amp;#039;&amp;#039;DABC&amp;#039;&amp;#039;, &amp;#039;&amp;#039;CDAB&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;BCDA&amp;#039;&amp;#039;. 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.&lt;br /&gt;
&lt;br /&gt;
Der Barrel-Shifter ist häufig Bestandteil von [[Mikroprozessor]]en. Ebenso kann diese Logikfunktion in einem [[Programmierbare logische Schaltung|programmierbaren Logikbaustein]] (PLD), einem [[Field Programmable Gate Array|FPGA]] oder einem [[Anwendungsspezifische integrierte Schaltung|ASIC]] als Teil einer Gesamtschaltung realisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Realisierung ==&lt;br /&gt;
[[Datei:Barrel3.png|mini|440px|Barrel-Shifter zum Rotieren (ohne [[Carry-Flag]]) von 16-bit-Worten. Eingetragen ist &amp;#039;&amp;#039;Rotiere nach Links um 13&amp;#039;&amp;#039; bzw. &amp;#039;&amp;#039;Rotiere nach rechts um 3&amp;#039;&amp;#039;.&amp;lt;br/ &amp;gt;&amp;#039;&amp;#039;Oben:&amp;#039;&amp;#039; mit einer 16×16-Matrix; &amp;#039;&amp;#039;Mitte:&amp;#039;&amp;#039; mit zwei 16×4-Matrizen; &amp;#039;&amp;#039;Unten:&amp;#039;&amp;#039; mit vier 16×2-Matrizen]]&lt;br /&gt;
&lt;br /&gt;
Barrel-Shifter können unterschiedlich implementiert werden. Die Verschiebung eines N-bit-Wortes um eine beliebige Verschiebedistanz zwischen 0 und N−1 kann man mit einem 1-aus-N-Decoder und N× N-aus-1-Multiplexern mit einem Multiplexerdurchlauf implementieren. Man kann N aber auch in Faktoren (vorzugsweise Zweierpotenzen und identisch) zerlegen, z.&amp;amp;nbsp;B. N = √N·√N oder N=2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; und dann&lt;br /&gt;
* mit zwei 1-aus-√N-Decodern und N·2× √N-aus-1-Multiplexern in zwei Schritten,&lt;br /&gt;
* mit n 1-aus-2-Decodern und N·n 2-aus-1-Multiplexern in n Schritten&lt;br /&gt;
oder allgemeiner mit N = m&amp;lt;sup&amp;gt;a&amp;lt;/sup&amp;gt;·n&amp;lt;sup&amp;gt;b&amp;lt;/sup&amp;gt; und&lt;br /&gt;
* mit a 1-aus-m-Decodern, b 1-aus-n-Decodern, N·a m-aus-1-Multiplexern und N·b n-aus-1-Multiplexern&lt;br /&gt;
durchführen.&lt;br /&gt;
&lt;br /&gt;
Der Aufwand für diese verschiedenen Implementierungen ist unterschiedlich, weiterhin gibt es Unterschiede in der Laufzeit, wenn zur Implementierung NANDs mit 4 oder 8 Eingängen zur Verfügung stehen. Aber alle Schaltungen weisen konstante und kurze Durchlaufzeiten im Bereich weniger Gatterlaufzeiten meist unterhalb von einem Taktzyklus auf.&lt;br /&gt;
                  oben   mitte   unten&lt;br /&gt;
 NAND 1 Eingang      4       4       4&lt;br /&gt;
 NAND 2 Eingänge     -       -     192&lt;br /&gt;
 NAND 3 Eingänge   320     128       -&lt;br /&gt;
 NAND 4 Eingänge    80      32       -&lt;br /&gt;
 FETs             2568    1032     776&lt;br /&gt;
 Laufzeit Input      4       4       8 Gatterlaufzeiten&lt;br /&gt;
 Laufzeit Input     80ps    80ps   160ps  FO4=20ps&lt;br /&gt;
 Laufzeit Shift      5       5       9 Gatterlaufzeiten&lt;br /&gt;
 Laufzeit Shift    120ps   120ps   200ps  FO4=20ps&lt;br /&gt;
&lt;br /&gt;
=== Realisierung mit N× N-aus-1-Multiplexern ===&lt;br /&gt;
Die N verschiedenen Verschiebeoperationen des N Bit langen Eingangs-Bitvektors werden als eine N×N-Matrix abgebildet. Die Verschiebedistanz, die als ein log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;N Bit-Wert vorliegt, wird mit einem 1-aus-N-Decoder dekodiert und selektiert einen bestimmten Eingang aller N N-aus-1-Multiplexer.&lt;br /&gt;
&lt;br /&gt;
Siehe Graphik rechts, oberes Beispiel:&amp;lt;br /&amp;gt;&lt;br /&gt;
Eine Verschiebung um 13 aktiviert die Spalte n&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;, die in einem Schritt das Datenwort um 13 nach links rotiert.&lt;br /&gt;
&lt;br /&gt;
=== Teilung in N·n× 2-aus-1-Multiplexer  ===&lt;br /&gt;
Hier nutzt man die Eigenschaft aus, die schon bei Schieberegistern ausgenutzt werden: Verschiebeoperationen sind separierbar. Es gilt:&lt;br /&gt;
:&amp;lt;math&amp;gt;S(A,x+y) = S(S(A,x),y)&amp;lt;/math&amp;gt;&lt;br /&gt;
Daher kann man die große N×N-Matrix in n 2×N-Teilmatrizen zerlegen. Auf den ersten Blick sieht diese Implementierung langsamer als die erste aus, dies gilt allerdings nur, wenn man die N-aus-1-Multiplexer aus der ersten Implementierung nicht ohnehin als kaskadierte 2-aus-1-Multiplexer implementieren muss.&lt;br /&gt;
&lt;br /&gt;
Siehe Graphik rechts, unteres Beispiel:&amp;lt;br /&amp;gt;&lt;br /&gt;
Eine Verschiebung um 13 aktiviert die Spalten s&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;, s&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, ¬s&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; und s&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;,  die in vier Schritten das Datenwort um 1·2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&amp;amp;nbsp;+&amp;amp;nbsp;1·2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;amp;nbsp;+&amp;amp;nbsp;0·2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&amp;amp;nbsp;+&amp;amp;nbsp;1·2&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;13 nach links rotieren.&lt;br /&gt;
&lt;br /&gt;
=== Teilung in N·n/2× 4-aus-1-Multiplexer  ===&lt;br /&gt;
Wenn sich effizient 4-aus-1-Multiplexer aufbauen lassen, ist diese Implementierung effizienter als die zweite.&lt;br /&gt;
&lt;br /&gt;
Siehe Graphik rechts, mittleres Beispiel:&amp;lt;br /&amp;gt;&lt;br /&gt;
Eine Verschiebung um 13 aktiviert die Spalten m&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; und n&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, die in zwei Schritten das Datenwort um 3·4&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&amp;amp;nbsp;+&amp;amp;nbsp;1·4&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;&amp;amp;nbsp;=&amp;amp;nbsp;13 nach links rotieren.&lt;br /&gt;
&lt;br /&gt;
=== Realisierung mit Hardware-Multiplizierern ===&lt;br /&gt;
Eine weitere Realisierungsmöglichkeit für das Verschieben nach links stellt das Multiplizieren mit einer Zweierpotenz dar. Insbesondere, wenn in einem FPGA vorhandene dedizierte Hardware-Multiplizierer sonst brachliegen würden, lassen sich damit effizient Barrel-Shifter realisieren, ohne universell verwendbare FPGA-Ressourcen zu benötigen.&amp;lt;ref&amp;gt;[https://www.xilinx.com/support/documentation/application_notes/xapp195.pdf Implementing Barrel Shifters Using Multipliers] (PDF; 50&amp;amp;nbsp;kB), Xilinx Application Note, Paul Gigliotti, 2004 (engl.)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es auch Barrel-Shifter als einzelne [[integrierte Schaltung]]en, wie beispielsweise der Baustein &amp;#039;&amp;#039;SN74AS897&amp;#039;&amp;#039;, welcher einen 8 Bit breiten Barrel-Shifter bietet.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Digitaltechnik]]&lt;/div&gt;</summary>
		<author><name>imported&gt;APPERbot</name></author>
	</entry>
</feed>