← Zurück zum BlogSchieberegister

Schieberegister meistern: Von der seriellen zur parallelen Umwandlung

Schieberegister reihen D-Flipflops aneinander, um Daten pro Taktimpuls um ein Bit zu verschieben. Bauen Sie SIPO-, PISO- und PIPO-Varianten und lernen Sie ihren Einsatz in UARTs und LED-Matrix-Treibern kennen.

DennyDenny
7 Min. Lesezeit
Chalkboard feature illustration for “Schieberegister meistern: Von der seriellen zur parallelen Umwandlung”

Kurzfassung: Ein Schieberegister ist eine Kette von D-Flipflops, bei der der Ausgang jeder Stufe den Eingang der nächsten speist. Bei jeder Taktflanke verschiebt sich jedes Bit um eine Position. Die Konfigurationen sind SISO, SIPO (seriell-zu-parallel – für 74HC595-LED-Treiber), PISO (parallel-zu-seriell – für UART-Sender) und PIPO.

Ein Schieberegister bewegt Daten in Hardware mit einem Bit pro Taktzyklus. Es bildet die Brücke zwischen serieller Übertragung und paralleler Speicherung. Verwandte Strukturen finden sich in UARTs, LED-Treibern, Serialisierern, Deserialisierern und einigen Prozessor-Datenpfaden zum Schieben; leistungsstarke Shifter können jedoch stattdessen kombinatorische Barrel-Shifter-Netzwerke verwenden.

Was genau ist ein Schieberegister?

Im Kern ist ein Schieberegister eine synchrone sequentielle Schaltung. Es besteht aus einer Kette von Flipflops – typischerweise D_FLIP_FLOP –, die wie bei einer „Eimerkette“ verbunden sind. Jede Stufe speichert genau ein Datenbit. Wenn ein Taktimpuls eintrifft, bewegt sich jedes Bit im Register um eine Position nach rechts oder links, ähnlich wie Fahrgäste, die in einem Zug einen Sitz weiterrücken.

D_FLIP_FLOP-Komponentendiagramm

Die SHIFT_REGISTER-Komponente von digisim.io abstrahiert diese Komplexität, doch die Ausbreitung wird am deutlichsten, wenn Sie ein Register aus einzelnen D_FLIP_FLOP-Einheiten aufbauen.

D_FLIP_FLOP-Komponente erkunden

Die mathematische Grundlage

Das Verhalten einer einzelnen Stufe eines Schieberegisters wird durch die charakteristische Gleichung des D_FLIP_FLOP bestimmt:

Qnext=DQ_{next} = D

In einem mehrstufigen Schieberegister ist der Eingang DD der nn-ten Stufe mit dem Ausgang QQ der (n−1)(n-1)-ten Stufe verbunden. Daher lässt sich der Zustand des gesamten Registers zum Zeitpunkt t+1t+1 so beschreiben:

Qn(t+1)=Qn−1(t)Q_n(t+1) = Q_{n-1}(t)

Diese einfache Beziehung ermöglicht es den Daten, durch die Hardware zu „fließen“.

Die vier Formen der Datenbewegung

Nicht alle Schieberegister sind gleich aufgebaut. Je nachdem, wie Daten eintreten und austreten, unterscheiden wir vier Haupttypen. Diese Unterschiede zu verstehen ist wesentlich, um für eine gegebene Anwendung die richtige Konfiguration zu wählen.

1. SISO: Serial-In, Serial-Out

Eingang: Ein Bit pro Taktzyklus. Ausgang: Ein Bit pro Taktzyklus, verzögert.

SISO ist die einfachste Form. Daten treten Bit für Bit ein und verlassen das Register am entgegengesetzten Ende ebenfalls Bit für Bit. Es funktioniert als digitale Zyklusverzögerung: Bei einem 4-Bit-SISO-Register erscheint ein jetzt eintretendes Bit nach vier aktiven Taktflanken am entfernten Ausgang. Deshalb eignen sich SISO-Register zum Ausrichten bereits synchroner Steuer- oder Datenströme. Ein gewöhnliches Schieberegister allein ist keine vollständige Lösung für die Überquerung von Taktdomänen.

2. SIPO: Serial-In, Parallel-Out

Eingang: Ein Bit pro Taktzyklus. Ausgang: Alle Bits stehen gleichzeitig zur Verfügung.

SIPO ist die „Erweiterungs“-Konfiguration. Sie führen einen seriellen Bitstrom zu; sobald das Register gefüllt ist, lesen Sie alle Ausgänge (Q0,Q1,Q2,Q3Q_0, Q_1, Q_2, Q_3) gleichzeitig. Geräte mit seriellem Eingang und parallelem Ausgang werden häufig verwendet, um digitale Ausgänge zu erweitern – etwa um Gruppen von Anzeigen mit weniger Controller-Pins anzusteuern. Der weiter unten behandelte IC 74HC595 kombiniert ein Schieberegister mit einem separaten Ausgangsspeicherregister.

3. PISO: Parallel-In, Serial-Out

Eingang: Alle Bits werden gleichzeitig geladen. Ausgang: Ein Bit pro Taktzyklus.

PISO führt die Umkehrung von SIPO aus. Es übernimmt ein ganzes Daten„wort“ – beispielsweise 8 Bit eines Datenbusses – und serialisiert es zu einem Strom einzelner Bits. Ein UART-Sender enthält diese Grundfunktion, ergänzt um Logik für Rahmenbildung, Baudrate, Parität, Status und Pufferung.

4. PIPO: Parallel-In, Parallel-Out

Eingang: Alle Bits werden gleichzeitig geladen. Ausgang: Alle Bits stehen gleichzeitig zur Verfügung.

Ein PIPO kann Daten parallel laden und parallel ausgeben. Für sich genommen verhält es sich wie ein Standardregister – nützlich, um ein Wort an einer Taktflanke zu erfassen. Ein „universelles“ Schieberegister kombiniert paralleles Laden mit durch Steuersignale ausgewählten Links- und Rechtsschiebemodi. Bei einem vorzeichenlosen Wert ohne Überlauf multipliziert ein logisches Linksschieben um eine Stelle mit zwei; logisches Rechtsschieben führt eine ganzzahlige Division durch zwei aus. Vorzeichenbehaftete Arithmetik und Überlauf erfordern zusätzliche Sorgfalt.

Schieberegister-Komponente

Die technische Spezifikation: Eine 4-Bit-SIPO-Wahrheitstabelle

Sehen wir uns an, wie ein 4-Bit-SIPO-Register (Serial-In, Parallel-Out) über vier Taktzyklen arbeitet. Angenommen, wir schieben die Binärfolge 10111011 ein (beginnend mit dem Bit ganz rechts).

TaktimpulsSerieller Eingang (DinD_{in})Q3Q_3Q2Q_2Q1Q_1Q0Q_0
Initial00000
T1T_111000
T2T_211100
T3T_300110
T4T_411011

Beachten Sie, wie die bei T1T_1 eingetretene „1“ von Q3Q_3 nach Q2Q_2, dann nach Q1Q_1 und schließlich nach Q0Q_0 wandert. Das ist das „Schieben“ in Aktion.

Häufiger Stolperstein: Timing und Ausbreitungsverzögerungen

Alle Stufen tasten ihre Eingänge an derselben aktiven Flanke ab. Der zuvor gespeicherte Wert rückt um eine Position weiter, weil ein Flipflop seinen Ausgang erst nach seiner Clock-to-Q-Verzögerung ändert. Für den korrekten Betrieb müssen sowohl die Setup-Prüfung mit maximaler Verzögerung als auch die Hold-Prüfung mit minimaler Verzögerung erfüllt sein.

Drei wichtige Parameter sind:

  1. Setup-Zeit (tsetupt_{setup}): Die Mindestzeit, während der die Daten vor der Taktflanke stabil sein müssen.
  2. Hold-Zeit (tholdt_{hold}): Die Mindestzeit, während der die Daten nach der Taktflanke stabil bleiben müssen.
  3. Clock-to-Q-Verzögerung (tcqt_{cq}): Die Zeit von der aktiven Taktflanke bis sich der QQ-Ausgang der sendenden Stufe ändert.

Für eine direkte Verbindung von Stufe zu Stufe lautet eine vereinfachte Hold-Bedingung:

tcq,min+troute,min≥thold+tskew+Uholdt_{cq,min} + t_{route,min} \ge t_{hold} + t_{skew} + U_{hold}

Hier bedeutet ein positives tskewt_{skew}, dass der Erfassungstakt gemäß der im Leitfaden zu Clock Skew verwendeten Vorzeichenkonvention später eintrifft. Für Setup werden die maximalen Clock-to-Q- und Leitungsverzögerungen verwendet. Die statische Timing-Analyse prüft diese Bedingungen mit den charakterisierten Verzögerungen des Zielbausteins; ein funktionaler Wellenformbetrachter kann keinen physikalischen Timing-Abschluss nachweisen. Lesen Sie Setup, Hold und Metastabilität zu den zugrunde liegenden Einschränkungen.

Schieberegister-Demo öffnen

Verhalten mit dem OSCILLOSCOPE_8CH überprüfen

Wenn Sie ein SHIFT_REGISTER_8BIT aufbauen, reicht der Blick auf die OUTPUT_LIGHT-Komponenten nicht aus – bei hohen Taktfrequenzen blinken sie zu schnell, um sie mit dem Auge zu verfolgen.

So überprüfen Sie Ihre Schaltung wirklich:

  1. Verbinden Sie CLOCK mit Kanal 1 des OSCILLOSCOPE_8CH.
  2. Verbinden Sie den seriellen Eingang mit Kanal 2.
  3. Verbinden Sie die parallelen Ausgänge (Q0Q_0 bis Q5Q_5) mit den verbleibenden Kanälen.

Wenn Sie die Simulation ausführen, sollte die Kurve ein Treppenmuster zeigen: Das abgetastete serielle Bit erscheint nach einer aktiven Flanke in der ersten Stufe und rückt an jeder folgenden Flanke um eine Stufe weiter. Nutzen Sie diese Ansicht, um logische Fehler bei Bitreihenfolge, Enables, Resets und Zykluszahl zu finden. Sofern das Modell keine charakterisierten Verzögerungen enthält, beweist oder widerlegt die scheinbare Ausrichtung der Wellenformen nicht das Einhalten von Setup- und Hold-Zeiten in physischer Hardware.

Anwendungen in der Praxis: Von 1978 bis heute

Schieberegister sind nicht bloß akademische Übungen; sie gehören zu den Arbeitstieren der Elektronikindustrie.

1. Der 74HC595 und LED-Steuerung

Der 74HC595 ist ein 8-Bit-Schieberegister mit seriellem Eingang und parallelem Ausgang sowie einem separaten Speicherregister. Ein Controller kann Daten einschieben und anschließend alle acht Ausgangsbits gemeinsam mit einem Latch-Signal aktualisieren. Bausteine lassen sich kaskadieren, doch Anzahl und Art der Lasten werden durch Ausgangsstrom, gesamten Gehäusestrom, Taktfrequenz, Signalintegrität und Aktualisierungsanforderungen begrenzt; große LED-Systeme benötigen geeignete Treiber statt unbegrenzter direkter Erweiterung.

2. UART/USART neben einem Intel 8086

Der Intel 8086 enthielt keine integrierte UART. Ein System konnte ihn mit einem Peripheriebaustein wie Intels 8251A USART kombinieren. Konzeptionell schreibt der Prozessor ein Byte parallel in den Baustein; die Sendelogik rahmt die Daten und schiebt die Bits auf die serielle Leitung. Die Empfangslogik tastet einen seriellen Rahmen ab und stellt das wiedergewonnene Byte über den parallelen Bus bereit. Moderne UART-Implementierungen ergänzen die zugrunde liegende Schiebeoperation um Baudratenerzeugung, Start-/Stoppbit-Behandlung, Statusflags und Pufferung.

3. Multiplikation und Division

Wussten Sie, dass das Verschieben einer Binärzahl um eine Position nach links mathematisch einer Multiplikation mit 2 entspricht?

10112(1110)≪1=101102(2210)1011_2 (11_{10}) \ll 1 = 10110_2 (22_{10})

Moderne ALUs (Arithmetic Logic Units) verwenden schnelle Schieberegister, um diese Operationen in einem einzigen Taktzyklus auszuführen.

Ihr erstes Schieberegister auf digisim.io bauen

Bereit, selbst loszulegen? Befolgen Sie diese Schritte, um ein 4-Bit-SIPO-Register aufzubauen:

  1. Platzieren Sie die Stufen: Ziehen Sie vier D_FLIP_FLOP-Komponenten auf die Arbeitsfläche.
  2. Verketten Sie die Daten: Verbinden Sie den QQ-Ausgang des ersten Flipflops mit dem DD-Eingang des zweiten. Wiederholen Sie das für alle Stufen.
  3. Gemeinsamer Takt: Platzieren Sie eine CLOCK-Komponente und verbinden Sie sie mit dem Takteingang aller vier Flipflops. Das ist entscheidend – sie müssen synchron sein.
  4. Ein- und Ausgänge: Verbinden Sie einen INPUT_SWITCH mit dem DD-Eingang des ersten Flipflops. Verbinden Sie jeden QQ-Ausgang mit einem OUTPUT_LIGHT.
  5. Der SimCast-Vorteil: Nutzen Sie die SimCast-Funktion, um das Verhalten Ihrer Schaltung aufzuzeichnen. Betätigen Sie den Eingangsschalter, geben Sie einen Taktimpuls und beobachten Sie, wie die „1“ durch die Leuchten wandert.

Die 8-Bit-SIPO-Vorlage ausprobieren

Abschließende Gedanken

Das Schieberegister ist der beste Beweis dafür, dass aus einfachen Bauteilen komplexes Verhalten entstehen kann. Indem wir nur einige Flipflops aneinanderreihen, gewinnen wir die Fähigkeit, Datenformate umzuwandeln, Signale zu verzögern und Berechnungen auszuführen.

Versuchen Sie, ein bidirektionales 4-Bit-Schieberegister zu bauen, das abhängig von einem Steuerschalter nach links und rechts schieben kann – kombinieren Sie dazu ein SHIFT_REGISTER mit einem Multiplexer am Dateneingang jeder Stufe.

Lesen Sie weiter zu SISO-, SIPO-, PISO- und PIPO-Modi, oder öffnen Sie die D-Flipflop-Komponentenreferenz – das Speicherelement hinter diesem Lehrmodell.

Machen Sie aus der Idee eine funktionierende Schaltung.