Digitaltechnik
Schaltungen mit nur zwei Zuständen: Zahlensysteme und Codes, Boolesche Algebra und Schaltnetze, Flipflops und Automaten, Timing und Logikfamilien, Speicher und FPGA.
01 / 06Start & Landkarte
Landkarte
Warum digital gewonnen hat — und wo nicht
Wie dieses Modul zum Rest des Hubs steht
- Klaus Fricke, Digitaltechnik, Springer Vieweg.
- Harris & Harris, Digital Design and Computer Architecture, Morgan Kaufmann — verbindet Digitaltechnik und Rechnerbau, mit RISC-V-Ausgabe.
- nand2tetris und nandgame.com — vom NAND-Gatter zum funktionierenden Rechner, kostenlos.
02 / 06Zahlensysteme & Codes
Die Systeme
| System | Basis | Ziffern | Schreibweise | Wofür |
|---|---|---|---|---|
| Binär | 2 | 0, 1 | 0b1010, 1010₂ | Bitmasken, Register, Portbelegungen |
| Oktal | 8 | 0–7 | 0o755, 0755 | Unix-Dateirechte, historische Rechner |
| Dezimal | 10 | 0–9 | 42 | Alles, was Menschen lesen |
| Hexadezimal | 16 | 0–9, A–F | 0x2A, 2Ah | Adressen, Registerwerte — eine Hexziffer ist genau ein Nibble (4 Bit) |
Zahlensystem-Umrechner
Negative Zahlen: das Zweierkomplement
Durchgesetzt hat sich genau ein Verfahren, weil es die Hardware am einfachsten macht: derselbe Addierer funktioniert für positive und negative Zahlen. Vorzeichen-Betrag und Einerkomplement scheiterten an zwei Nullen und Fallunterscheidungen.
Bilden
Alle Bits invertieren, dann 1 addieren. Aus 5 (0000 0101) wird 1111 1011 = −5.Erkennen
Das höchstwertige Bit ist das Vorzeichenbit: 1 heißt negativ. Zurückrechnen: Wert = Bitmuster − 2ⁿ (1111 1011 = 251 − 256 = −5).Wertebereich merken
Bei n Bit: −2^(n−1) bis +2^(n−1) − 1. Bei 8 Bit also −128 … +127 — asymmetrisch, weil die Null zu den positiven Mustern zählt.Überlauf erkennen
Vorzeichenlos: Carry-Flag (250 + 10 = 4 bei 8 Bit). Vorzeichenbehaftet: Overflow-Flag (100 + 50 = −106). Prozessoren führen beide getrennt — deshalb gibt es in Assembler eigene Sprungbefehle je Vorzeichenklasse.abs(−128) ist bei 8 Bit nicht darstellbar und liefert wieder −128; dasselbe gilt für INT32_MIN in C. In sicherheitsrelevantem Code wird dieser Fall explizit geprüft — er ist die Ursache mehrerer bekannter Sicherheitslücken.Weitere Codes
| Code | Prinzip | Wo er vorkommt |
|---|---|---|
| BCD | Jede Dezimalziffer in 4 Bit | Echtzeituhren (DS3231), Siebensegmentanzeigen — spart die Division durch 10 |
| Gray-Code | Je Schritt ändert sich genau ein Bit | Absolutwertgeber, Drehgeber, Zeiger über Taktdomänen (Timing) |
| One-Hot | Genau ein Bit gesetzt | Zustandsautomaten in FPGAs — schnell, weil kein Decoder nötig |
| ASCII | 7 Bit je Zeichen | Ziffern ab 0x30, Großbuchstaben ab 0x41, Kleinbuchstaben ab 0x61 (Differenz 0x20) |
| UTF-8 | 1–4 Byte je Zeichen, ASCII-kompatibel | Der Standard für Text; ein Umlaut belegt zwei Byte — bei Displaypuffern oft übersehen |
Bitoperationen, die man im Schlaf können muss
unsigned für Bitoperationen. Ein Shift ins Vorzeichenbit eines int ist in C undefiniert — 1u << 31 statt 1 << 31. Bei Registerzugriffen zusätzlich volatile beachten.Endianness
Erste Prüfung bei absurden Sensorwerten über I²C/SPI: Bytes tauschen und schauen, ob es plausibel wird — die Bytes kommen in der einen Reihenfolge und werden in der anderen zusammengesetzt.
Fließkomma: IEEE 754
| Typ | Bits | Signifikante Dezimalstellen | Bereich | Anmerkung |
|---|---|---|---|---|
| half (fp16) | 16 | ≈ 3,3 | ±6,5·10⁴ | Neuronale Netze, Grafik |
| bfloat16 | 16 | ≈ 2,4 | wie float32 | Exponentbereich wie float, weniger Mantisse — für maschinelles Lernen |
| float (single) | 32 | ≈ 7,2 | ±3,4·10³⁸ | Der Standard auf Mikrocontrollern mit FPU |
| double | 64 | ≈ 15,9 | ±1,8·10³⁰⁸ | Standard in C für Literale und auf dem PC |
if (x == 0.1) schlägt fehl. Mit Toleranz vergleichen: fabs(x − y) < eps, eps relativ zur Größenordnung.NaN == NaN ist falsch; eine einzige NaN im Regelkreis vergiftet jeden Folgewert.Festkomma: die unterschätzte Alternative
Eine Ganzzahl mit gedachtem Komma: Q15 heißt 1 Vorzeichenbit und 15 Nachkommabits (Bereich −1 … knapp +1), Q16.16 heißt 16 Vor- und 16 Nachkommabits.
Vorteile
- Deterministisch — gleiches Ergebnis auf jeder Plattform
- Ohne FPU um Größenordnungen schneller
- Konstante absolute Auflösung, kein NaN/Inf
Nachteile
- Wertebereich muss vorher bekannt sein
- Nach jeder Multiplikation schieben; Überlauf selbst behandeln (Sättigung einbauen)
- Weniger lesbarer Code
Ganzzahlen: die Stolpersteine in C
| Falle | Was passiert | Richtig |
|---|---|---|
| Integer Promotion | uint8_t a = 200, b = 100; — a + b wird als int gerechnet: 300, nicht 44 | Bewusst casten, wenn Umlauf gewünscht ist |
| Vorzeichenbehafteter Überlauf | Undefiniertes Verhalten; der Compiler darf Prüfungen wegoptimieren (unsigned läuft dagegen definiert um) | Vorher prüfen oder __builtin_add_overflow |
| Vergleich signed/unsigned | if (i < sizeof(x)) mit int i = −1 ist wahr — −1 wird riesig unsigned | Gleiche Vorzeichenklasse, Warnungen einschalten |
| Division rundet zur Null | −7/2 ist −3, nicht −4 | Für kaufmännische Rundung: (a + b/2) / b bei positiven Werten |
| Zeitvergleich mit Überlauf | if (millis() > ziel) bricht beim Zählerüberlauf | if ((int32_t)(millis() − ziel) >= 0) — die Differenz ist überlaufsicher |
-Wall -Wextra für Warnungen und -fsanitize=undefined in PC-Testläufen — findet Überläufe und undefiniertes Verhalten zur Laufzeit, bevor sie auf dem Zielsystem als Spuk auftauchen.- Fricke, Digitaltechnik, Kapitel Zahlensysteme und Codes.
- IEEE 754-2019 — Standard for Floating-Point Arithmetic; David Goldberg, What Every Computer Scientist Should Know About Floating-Point Arithmetic, ACM Computing Surveys 1991.
- Sean Anderson, Bit Twiddling Hacks, Stanford; float.exposed — Bitmuster interaktiv.
- ISO/IEC 9899 (C-Standard) und MISRA C:2023 — Integer-Konvertierungen und undefiniertes Verhalten.
03 / 06Boolesche Algebra & Schaltnetze
Die Grundverknüpfungen
| A | B | UND | ODER | NAND | NOR | XOR |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 |
Die Gesetze
Von der Wahrheitstabelle zur minimierten Gleichung
KV-Diagramm aufstellen
Wahrheitstabelle so umsortieren, dass sich zwischen Nachbarfeldern genau ein Eingang ändert (Gray-Code an den Rändern).Blöcke bilden, so groß wie möglich
Nur Einsen, in Zweierpotenzgrößen (1, 2, 4, 8, 16), Rechtecke. Jede Verdopplung spart eine Variable; Überlappung ist erlaubt und meist nötig. Das Diagramm ist ein Torus: Ränder und die vier Ecken grenzen aneinander.Don't-Care nutzen
Nie auftretende Kombinationen mit X markieren und als 1 oder 0 werten — je nachdem, was größere Blöcke ergibt. Oft der größte Gewinn.Terme ablesen
Pro Block ein UND-Term aus den Variablen, die sich im Block nicht ändern; alle Terme mit ODER verbinden.Ab fünf Variablen übernimmt der Rechner: Quine-McCluskey exakt, Espresso als Heuristik — beides steckt in jeder Synthesesoftware. Von Hand rechnet man KV-Diagramme trotzdem, weil sie das Gefühl dafür geben, wo Aufwand entsteht.
Hazards
Gatter haben Laufzeiten: Ändern sich zwei Eingänge scheinbar gleichzeitig, kann der Ausgang für Nanosekunden falsch sein, obwohl die Gleichung stimmt (statischer Hazard: kurzer Ausreißer; dynamischer: mehrfacher Wechsel).
Die Standardbausteine der Schaltnetze
| Baustein | Funktion | Beispiel | Wo man ihn wiederfindet |
|---|---|---|---|
| Multiplexer (MUX) | Wählt einen von 2ⁿ Eingängen | 2:1 … 16:1 | Datenpfade in CPUs; in HDL jedes if in kombinatorischer Logik |
| Demultiplexer | Ein Eingang auf einen von 2ⁿ Ausgängen | 1:4, 1:8 | Adressdecodierung, mehrere Chip-Selects |
| Decoder | n Bit → einer von 2ⁿ Ausgängen aktiv | 3:8 (74HC138) | Speicherbank-Auswahl, Tastaturmatrix |
| Prioritätsencoder | Aktiver Eingang → Binärzahl, höchster gewinnt | 8:3 (74HC148) | Interrupt-Controller |
| Komparator | Vergleicht zwei Zahlen: <, =, > | 4 Bit (74HC85) | Grenzwertüberwachung, Adressvergleich |
| Barrel Shifter | Verschiebt beliebig viele Stellen in einem Takt | aus MUX-Stufen | Schiebebefehle in Prozessoren |
Addierer: vom Halbaddierer zur ALU
Subtraktion braucht keine eigene Hardware: A − B = A + (¬B) + 1 — B invertieren, Übertrag auf 1. Genau das leistet das Zweierkomplement (Zahlensysteme); ein Addierer mit XOR-Reihe davor kann beides.
74er-Familie und Ausgangsstufen
| Typ | Funktion | Praktischer Nutzen heute |
|---|---|---|
| 74HC00 / 74HC02 | 4× NAND / 4× NOR | Glue Logic, Invertierung, Notlösungen beim Debuggen |
| 74HC14 | 6× Inverter mit Schmitt-Trigger | Signalaufbereitung, Entprellung, einfache Oszillatoren |
| 74HC125 / 74HC245 | Bustreiber mit Tri-State | Pegelanpassung, Richtungsumschaltung auf Bussen |
| 74HC138 | 3:8-Decoder | Chip-Select-Erzeugung, Matrixansteuerung |
| 74HC165 / 74HC595 | Schieberegister Ein-/Ausgang | Portexpander über SPI — verbreitet und billig |
| 74HC4051 | Analogmultiplexer 8:1 | Mehrere Analogsignale auf einen ADC-Eingang |
Tri-State
High, Low oder hochohmig — mehrere Treiber dürfen an einer Leitung hängen, solange genau einer aktiv ist. Zwei aktive Treiber (Bus Contention) sind ein Kurzschluss zwischen den Versorgungsschienen.
Open-Drain / Open-Collector
Der Ausgang zieht nur nach Masse, den High-Pegel liefert ein Pull-up — mehrere Teilnehmer ergeben eine Wired-AND-Verknüpfung. Darauf beruhen I²C, 1-Wire und Interrupt-Sammelleitungen; der Pull-up bestimmt die Anstiegszeit (Timing & Pegel).
- Fricke, Digitaltechnik, Kapitel Schaltalgebra, Minimierung und Schaltnetze.
- Mano & Ciletti, Digital Design, Kapitel 2–4; Harris & Harris, Digital Design and Computer Architecture, Kapitel 2 und 5.
- Texas Instruments, Logic Guide — Familien und Bausteinnummern.
- NXP, UM10204 — I²C-bus specification — Wired-AND und Pull-up-Auslegung.
04 / 06Flipflops & Automaten
Latch gegen Flipflop
D-Latch (pegelgesteuert)
Solange EN = 1, folgt Q dem Eingang D („transparent“); bei EN = 0 wird gehalten.
- Weniger Transistoren, aber schwer analysierbare Zeitpfade
- In FPGA-Entwürfen entsteht ein Latch meist versehentlich, wenn ein kombinatorischer Block nicht jeden Fall zuweist — die Synthesewarnung „inferred latch“ ist praktisch immer ein Fehler
D-Flipflop (flankengesteuert)
Q übernimmt D genau im Moment der Taktflanke und hält bis zur nächsten.
- Der Standardbaustein jeder synchronen Schaltung
- Timing eindeutig: Setup vor, Hold nach der Flanke
- Aufgebaut aus zwei Latches in Master-Slave-Anordnung
Flipflop-Typen, Register, Zähler
| Baustein | Verhalten | Heutige Bedeutung |
|---|---|---|
| RS-Flipflop | Set und Reset; beide gleichzeitig unzulässig | Grundbaustein; Entprellung mit zwei NAND-Gattern |
| D-Flipflop | Q folgt D bei der Flanke | Der einzige Typ, den man wirklich braucht — Register, Pipelines, Synchronisierer |
| JK / T | J = K = 1 kippt; T kippt bei jeder Flanke | JK historisch; T als Frequenzteiler durch 2 (D-FF mit rückgekoppeltem Q̄) |
| Register | n D-FF an gemeinsamem Takt | Jedes Peripherieregister eines Mikrocontrollers |
| Schieberegister | FF-Kette, Ausgang auf nächsten Eingang | Seriell↔parallel (74HC595/165) — Grundlage jeder seriellen Schnittstelle |
| LFSR | Schieberegister mit XOR-Rückkopplung | Pseudozufallsfolge maximaler Länge (2ⁿ − 1); Scrambling, Testmuster, CRC |
| Ripple-Zähler | FF-Ausgang taktet das nächste FF | Wenig Logik, aber zeitversetzte Ausgänge → Glitches am Decoder; für synchrone Systeme unbrauchbar |
| Synchronzähler | Alle FF an einem Takt, Enable-Logik davor | Der Standard: alle Ausgänge gleichzeitig gültig; Modulo-N über Rücksetzbedingung |
| Gray-Zähler | Zählt im Gray-Code, ein Bitwechsel je Schritt | Schreib-/Lesezeiger asynchroner FIFOs über Taktdomänen (Timing) |
Entprellen — die Aufgabe, die jeder einmal löst
Das Problem
Ein mechanischer Kontakt prellt 1–20 ms. Ein flankengesteuerter Eingang zählt statt eines Tastendrucks zehn.Hardware
RC-Glied mit τ ≈ 10 ms plus Schmitt-Trigger (74HC14). Sauber, aber Bauteile je Taster.Software, robust
Periodisch abtasten (z. B. alle 5 ms im Timer-Interrupt), Zustand erst übernehmen, wenn er mehrfach gleich war. Blockiert nichts, skaliert auf beliebig viele Taster. Falsch dagegen: auf die Flanke reagieren und 20 ms per Warteschleife blockieren.Sonderfall Drehgeber
Beide um 90° versetzte Signale als Zustandspaar auswerten und nur gültige Übergänge zulassen — entprellt und erkennt die Richtung in einem Schritt.Moore und Mealy
Moore-Automat
Ausgang hängt nur vom Zustand ab — stabil, glitchfrei, wechselt synchron zum Takt.
- Braucht meist einen Zustand mehr
- Reagiert einen Takt später
Mealy-Automat
Ausgang hängt von Zustand und Eingang ab — reagiert sofort im selben Takt.
- Weniger Zustände
- Ausgänge können glitchen; registriert man sie, entsteht wieder Moore-Verhalten
Vom Diagramm zur Schaltung
Zustände benennen, Übergänge festlegen
Sprechende Namen statt Zahlen. Für jeden Zustand muss klar sein, was bei jeder Eingangskombination passiert — auch wenn die Antwort „bleib“ lautet.Ausgänge zuordnen
Bei Moore an den Zustand, bei Mealy an die Kante. Jedem Zustand eine maximale Verweildauer geben — Zeitüberschreitung führt in einen Fehlerzustand (verhindert Hängenbleiben, in der Anlagensteuerung Pflicht).Zustände codieren
Binär (wenige FF), Gray (glitcharm) oder One-Hot (ein FF je Zustand — in FPGAs Standard, weil Flipflops dort im Überfluss sind).Umsetzen
Ein Register hält den Zustand, ein kombinatorischer Block berechnet den Folgezustand, ein zweiter die Ausgänge. Diese Dreiteilung ist in HDL die empfohlene Struktur. Die grafische SPS-Variante ist die Ablaufsprache nach IEC 61131-3 — siehe Automatisierung → Sprachen.Zustandsautomaten in C
Dieselbe Struktur, andere Sprache — die Umsetzung mit switch ist für die meisten Aufgaben die richtige:
typedef enum { IDLE, START, RUN, STOP } state_t;
static state_t state = IDLE;
void fsm_tick(void) /* zyklisch aufgerufen, z. B. alle 10 ms */
{
switch (state) {
case IDLE:
if (taste_gedrueckt()) { motor_aus(); state = START; }
break;
case START:
if (drehzahl_erreicht()) state = RUN;
else if (timeout()) state = STOP;
break;
case RUN:
motor_regeln();
if (auftrag_fertig()) state = STOP;
break;
case STOP:
motor_aus();
if (quittiert()) state = IDLE;
break;
}
} Typische Fehler
Was schiefgeht
- Nicht alle Eingangskombinationen abgedeckt → in HDL ein Latch, in C ein hängender Zustand
- Kein Weg aus einem Fehlerzustand heraus
- Kombinatorischer Ausgang als Takt für andere Baugruppen
- Asynchrone Eingänge ohne Synchronisierer ausgewertet
- Zustand an mehreren Codestellen geändert
Was hilft
default-Zweig, der in einen sicheren Zustand führt- Zustandswechsel nur an genau einer Stelle
- Eingänge über zwei Flipflops einsynchronisieren (Timing)
- Zustandsnamen als Aufzählungstyp
- Zustandsübergänge protokollieren — beim Debuggen unbezahlbar
- Fricke, Digitaltechnik, Kapitel Schaltwerke und Automaten.
- Mano & Ciletti, Digital Design, Kapitel 5 — Synchronous Sequential Logic.
- Jack Ganssle, A Guide to Debouncing — mit Oszilloskop-Messungen an realen Tastern.
- David Harel, Statecharts: A Visual Formalism for Complex Systems (1987); Miro Samek, Practical UML Statecharts in C/C++.
- Clifford Cummings, Simulation and Synthesis Techniques for Asynchronous FIFO Design (SNUG) — Gray-Zähler über Taktdomänen.
05 / 06Timing, Pegel & Logikfamilien
Setup und Hold
| Größe | Bedeutung | Verletzung führt zu | Abhilfe |
|---|---|---|---|
| Setup-Zeit t_su | Daten müssen vor der Flanke stabil anliegen | Altes oder undefiniertes Übernahmeergebnis | Takt verlangsamen, Logik aufteilen (Pipelining) |
| Hold-Zeit t_h | Daten müssen nach der Flanke kurz stabil bleiben | Neue Daten überholen die Flanke | Verzögerung einfügen; nicht durch langsameren Takt behebbar |
| Clock-to-Q t_co | Flanke bis gültiger Ausgang | — | Gehört in jede Pfadrechnung |
| Clock Skew | Taktversatz zwischen zwei Flipflops | Verschlechtert Setup oder Hold, je nach Richtung | Balancierter Taktbaum; im FPGA macht das die Toolchain |
| Jitter | Zufällige Schwankung der Flanke | Schmälert das nutzbare Fenster | Saubere Taktquelle, gute Versorgung |
Der wichtige Unterschied: Eine Setup-Verletzung behebt ein langsamerer Takt. Eine Hold-Verletzung nicht — sie hängt nur von Laufzeiten ab, nicht von der Periodendauer. Ein Entwurf mit Hold-Verletzung funktioniert bei keiner Frequenz.
Den kritischen Pfad verkürzen
Metastabilität und Taktdomänenübergänge (CDC)
Wird Setup oder Hold verletzt — etwa durch einen Taster oder ein Signal aus einer anderen Taktdomäne — kann ein Flipflop in einen Zwischenzustand geraten: weder High noch Low, unbestimmte Einschwingzeit.
| Was übertragen wird | Richtige Technik | Warum |
|---|---|---|
| Einzelnes Bit, Pegel | Zwei-Flipflop-Synchronisierer (drei bei sehr hohen Frequenzen) | Reicht, sofern das Signal lange genug stabil bleibt |
| Kurzer Impuls | Toggle-Synchronisierer plus Flankenerkennung | Ein Impuls kürzer als die Zielperiode geht sonst verloren |
| Mehrere Bits zusammengehörig | Handshake oder asynchrone FIFO mit Gray-Zeigern | Einzeln synchronisierte Bits kommen zu verschiedenen Takten an — es entstehen Werte, die es nie gab |
| Datenstrom | Asynchrone FIFO (Dual-Port-RAM, Gray-Zeiger) | Entkoppelt Schreib- und Leserate vollständig |
| Reset | Asynchron aktivieren, synchron freigeben | Das Loslassen kann sonst Recovery-Zeiten verletzen |
volatile plus atomare Übergabe.Pegel und Logikfamilien
| Familie | Versorgung | V_IL max / V_IH min | V_OL max / V_OH min | Bemerkung |
|---|---|---|---|---|
| TTL / 74LS | 5 V | 0,8 V / 2,0 V | 0,5 V / 2,7 V | Historisch; hoher Stromverbrauch, Eingang zieht Strom |
| 74HC (CMOS) | 2–6 V | 0,3·V_CC / 0,7·V_CC | ≈ 0 V / ≈ V_CC | Bei 5 V braucht HIGH mindestens 3,5 V — 3,3-V-Signale reichen nicht sicher |
| 74HCT | 5 V | 0,8 V / 2,0 V | ≈ 0 V / ≈ V_CC | CMOS-Ausgang, TTL-Schwellen — der klassische 3,3-V-nach-5-V-Übersetzer |
| 74LVC | 1,65–3,6 V | 0,8 V / 2,0 V | 0,55 V / V_CC−0,45 V | Viele Typen 5-V-tolerant am Eingang; der heutige Standard |
| LVCMOS 3,3 V | 3,3 V | 0,8 V / 2,0 V | 0,4 V / 2,4 V | Der verbreitetste Pegel bei Mikrocontrollern |
| LVCMOS 1,8 V | 1,8 V | 0,63 V / 1,17 V | 0,45 V / 1,35 V | Moderne SoCs und Speicher |
| LVDS | differentiell, ±350 mV | — | — | Sehr schnell, störfest, strahlungsarm; Displays, Hochgeschwindigkeit |
Pegelanpassung in der Praxis
| Richtung | Lösung | Anmerkung |
|---|---|---|
| 5 V → 3,3 V, langsam | Spannungsteiler (z. B. 10 k / 20 k) | Billig; Leitungskapazität begrenzt die Geschwindigkeit |
| 5 V → 3,3 V, schnell | 74LVC-Puffer mit 5-V-toleranten Eingängen | Der saubere Weg |
| 3,3 V → 5 V | 74HCT-Puffer | Ein einzelner 74HCT14 löst sehr viele Probleme |
| Bidirektional, Open-Drain (I²C) | MOSFET-Wandler (BSS138) oder IC (TXS0102, PCA9306) | Nur für Open-Drain-Busse, nicht für Push-Pull |
| Bidirektional, Push-Pull | Wandler mit Richtungspin (TXB-Serie, 74LVC245) | Richtung muss die Schaltung vorgeben |
| 5-V-Signal an 3,3-V-MCU | Prüfen, ob der Pin 5-V-tolerant ist („FT“ bei STM32) | Sonst Teiler oder Puffer |
Fan-out, Flanken, Pull-Widerstände
- Clifford E. Cummings, Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog (SNUG) — der Standardtext.
- Ran Ginosar, Metastability and Synchronizers: A Tutorial, IEEE Design & Test, 2011.
- Harris & Harris, Digital Design and Computer Architecture, Kapitel 3 — Timing und Metastabilität.
- Texas Instruments, Logic Guide, Voltage Level Translation (SCEA083) und I²C Bus Pullup Resistor Calculation (SLVA689).
- NXP, UM10204 — I²C-bus specification, Kapitel Anstiegszeit.
06 / 06Speicher & FPGA
Speichertypen im Überblick
| Typ | Flüchtig | Zugriff | Schreibzyklen | Tempo | Typischer Einsatz |
|---|---|---|---|---|---|
| SRAM | ja | byteweise, wahlfrei | unbegrenzt | ns | Cache, Arbeitsspeicher im Mikrocontroller |
| DRAM | ja (Refresh nötig) | zeilenweise | unbegrenzt | 10–100 ns | Hauptspeicher in Rechnern und großen SoCs |
| NOR-Flash | nein | lesen wahlfrei, löschen sektorweise | 10 000 – 100 000 | lesen schnell, schreiben langsam | Programmspeicher, Boot-ROM, Code-Ausführung direkt aus dem Flash |
| NAND-Flash | nein | seitenweise | 100 – 100 000 (je nach SLC/MLC/TLC/QLC) | hoher Durchsatz, hohe Latenz | SSD, SD-Karte, eMMC |
| EEPROM | nein | byteweise schreib- und löschbar | 100 000 – 1 Mio. | Schreiben 3–10 ms je Seite | Kalibrierdaten, Konfiguration, Betriebsstundenzähler |
| FRAM | nein | byteweise, wie RAM | 10¹² – 10¹⁴ | ns, kein Schreibdelay | Datenlogger mit hoher Schreibrate, Zustandssicherung bei Spannungsausfall |
| MRAM | nein | byteweise | praktisch unbegrenzt | ns | Industrie, Luft- und Raumfahrt; teuer, sehr robust |
SRAM — 6 Transistoren je Bit
Zwei kreuzgekoppelte Inverter halten das Bit, solange Spannung anliegt.
- Kein Refresh, keine Wartezyklen, trivial anzusteuern
- Groß und teuer je Bit — daher nur einige hundert Kilobyte im Mikrocontroller
- Der Leckstrom bestimmt den Ruheverbrauch moderner Chips
DRAM — 1 Transistor + 1 Kondensator
Das Bit steckt als Ladung in einem winzigen Kondensator und läuft aus.
- Jede Zeile muss innerhalb von 64 ms aufgefrischt werden (über 85 °C: 32 ms)
- Sehr hohe Dichte, billig je Gigabyte, aber Controller-pflichtig
- Zeilenaktivierung kostet Latenz — sequentielle Zugriffe sind weit schneller als wahlfreie
Externer Speicher am Mikrocontroller (ESP32 mit PSRAM, STM32 mit FMC/SDRAM) hat einen eigenen Controller an Bord, ist aber deutlich langsamer als internes SRAM. Zeitkritischen Code deshalb ausdrücklich ins interne RAM legen — siehe Embedded & Firmware → Speicherbild.
Flash: warum Löschen blockweise geht
Schreiben setzt Bits von 1 auf 0
Ein gelöschter Sektor besteht aus lauter Einsen; einzelne Bits von 0 zurück auf 1 geht nicht. Deshalb kann man ein Byte nur „weiter beschreiben“, nie zurücknehmen.Löschen setzt einen ganzen Block auf 1
NOR-Sektoren ab 4 kB, NAND-Blöcke 128 kB bis mehrere Megabyte. Ein einzelnes Byte zu ändern heißt: Block sichern, löschen, neu schreiben.Verschleiß ist real
10 000 Zyklen klingen viel — ein Zähler, der jede Sekunde in dieselbe Zelle schreibt, verbraucht sie in unter drei Stunden. Wear Leveling verteilt die Schreibvorgänge; SD-Karten und SSDs tun das intern, im MCU-Flash übernimmt es ein Dateisystem wie LittleFS oder man selbst.Spannungsausfall beim Schreiben
Der gefährlichste Moment: ein halb geschriebener Block. Gegenmittel: zwei Kopien im Wechsel mit Sequenznummer und CRC, ein Journal — oder FRAM für Daten, die jederzeit konsistent sein müssen.| NAND-Zelltyp | Bit je Zelle | Zyklen (Größenordnung) | Anmerkung |
|---|---|---|---|
| SLC | 1 | 50 000 – 100 000 | Industrie, teuer, sehr robust |
| MLC | 2 | 3 000 – 10 000 | Kompromiss |
| TLC | 3 | 500 – 3 000 | Der Standard in Consumer-SSDs |
| QLC | 4 | 100 – 1 000 | Hohe Kapazität, geringe Ausdauer |
Anbindung und Fehlerkorrektur
| Schnittstelle | Typische Bausteine | Geschwindigkeit | Anmerkung |
|---|---|---|---|
| I²C | 24Cxx-EEPROM, FM24-FRAM | 100–400 kHz, selten 1 MHz | Zwei Leitungen, viele Teilnehmer, langsam |
| SPI | 25Qxx-NOR-Flash, 23LCxx-SRAM | bis ~100 MHz | Der Standard für externen Flash |
| Quad-/OctoSPI | W25Q-Serie, PSRAM | ~65 MB/s (QSPI) bis ~400 MB/s (Octal DDR) | Erlaubt Ausführen direkt aus dem externen Flash (XIP) |
| SDIO / eMMC | SD-Karten, eMMC | SD UHS-I bis ~104 MB/s, eMMC HS400 bis ~400 MB/s | Braucht Dateisystem und Treiber |
| Paralleler Bus (FMC) | SRAM, SDRAM, Displays | hoch | Viele Pins, dafür schnell und wahlfrei |
- Parität: erkennt einen Bitfehler, korrigiert nichts.
- SECDED (Hamming + Gesamtparität): korrigiert 1 Bit, erkennt 2 — der Code in ECC-RAM und in vielen MCU-Flash-Controllern (STM32, RP2350). Nebeneffekt: Nachschreiben in eine bereits programmierte Zelle ist gesperrt, weil die ECC-Bits mitgeschrieben werden.
- BCH und LDPC: in NAND-Controllern; korrigieren Dutzende Bitfehler je Seite — ohne sie wäre TLC-Flash unbrauchbar. Wie das rechnerisch funktioniert: Information & Codierung.
Was in einem FPGA steckt
FPGA, Mikrocontroller oder ASIC?
| Kriterium | Mikrocontroller | FPGA | ASIC |
|---|---|---|---|
| Entwicklungsaufwand | gering | mittel bis hoch | sehr hoch |
| Stückkosten | 0,5 – 15 € | 5 – 5000 € | ab großen Stückzahlen am billigsten |
| Parallelität | gering (Kerne, DMA) | sehr hoch | sehr hoch |
| Reaktionszeit | µs, mit Aufwand | ns, systembedingt | ns |
| Änderbar im Feld | Firmware-Update | Bitstream-Update | nein |
| Wofür | Steuerung, Kommunikation, Regelung bis einige kHz | Viele parallele Kanäle, sehr schnelle Regelung, Signalverarbeitung, eigene Schnittstellen | Große Stückzahlen, extreme Effizienz |
HDL: die Regeln, die den Unterschied machen
a <= b; beschreibt eine dauerhaft existierende Verbindung, keine Zuweisung, die „passiert“. Zwei Zeilen nacheinander laufen nicht nacheinander — sie existieren gleichzeitig. Wer HDL wie C liest, baut Schaltungen, die in der Simulation funktionieren und in der Hardware nicht. VHDL ist streng typisiert und in Europa verbreitet, SystemVerilog kompakter und in der Chipentwicklung dominant; die Entwurfsregeln sind identisch.Synchron entwerfen
Ein Takt, alle Register an derselben Flanke. Mehrere Taktdomänen nur mit Synchronisierern und FIFOs aus Timing.Kein Takt aus Logik
Ein aus Gattern erzeugter Takt landet nicht im Taktnetz und ruiniert die Zeitanalyse. Stattdessen: Enable-Eingang am Register.Vollständige Zuweisungen
In kombinatorischen Blöcken jeden Fall abdecken, sonst entsteht ein ungewolltes Latch. Die Synthesewarnung ist praktisch immer ein Fehler.Constraints schreiben
Ohne Zeitvorgaben (create_clock) prüft das Werkzeug nichts und meldet Erfolg, obwohl der Entwurf zu langsam ist. Constraints sind Teil des Entwurfs, kein Zusatz.Erst simulieren, dann synthetisieren
Eine Testbench mit erwarteten Werten findet in Sekunden, was auf der Hardware Stunden kostet.Einstieg 2026: Boards und Toolchains
| Plattform | Board (Beispiel) | Toolchain | Anmerkung |
|---|---|---|---|
| Lattice iCE40 | iCEBreaker, TinyFPGA, iCESugar | vollständig quelloffen: Yosys + nextpnr + Project IceStorm | Der beste Einstieg: kleine Bitstreams, Synthese in Sekunden, keine Registrierung |
| Lattice ECP5 | ULX3S, Colorlight-Boards | quelloffen: Yosys + nextpnr + Project Trellis | Deutlich größer, DDR-RAM möglich, RISC-V-Softcores laufen bequem |
| AMD Artix-7 | Arty A7, Nexys A7, Basys 3 | Vivado, kostenlose Einstiegsstufe (seit Version 2026.1 gestuftes Lizenzmodell) | Industriestandard, viel Lehrmaterial, sehr große Installation |
| Altera Cyclone / MAX 10 | DE0-Nano, DE10-Lite | Quartus Prime Lite (kostenlos, ohne Lizenzdatei) | An Hochschulen verbreitet; Altera ist seit 2025 wieder eigenständig |
| Gowin | Tang Nano 9K/20K | Gowin EDA; quelloffen über Yosys + Project Apicula | Sehr günstig, wachsende Community |
Die ersten fünf Entwürfe, in dieser Reihenfolge: LED aus einem Zähler blinken (klärt Toolchain, Constraints, Bitstream-Upload) · PWM mit einstellbarem Tastverhältnis · UART-Sender und -Empfänger (Automat, Baudratengenerator, Schieberegister, Eingangssynchronisierung) · Quadraturdecoder für mehrere Encoder gleichzeitig · RISC-V-Softcore (VexRiscv, PicoRV32, NEORV32) einbinden und Steuerlogik in Software auslagern.
- Bruce Jacob, Spencer Ng, David Wang, Memory Systems: Cache, DRAM, Disk, Morgan Kaufmann.
- JEDEC JESD79 (DDR-SDRAM) sowie Datenblätter von Micron und Winbond — Refresh-Intervalle, Löschblockgrößen und Endurance stehen dort konkret.
- LittleFS — ausfallsicheres Dateisystem für Mikrocontroller-Flash, mit lesenswerter Designbeschreibung.
- Pong P. Chu, FPGA Prototyping by VHDL Examples bzw. die Verilog-Ausgabe; Harris & Harris, Digital Design and Computer Architecture — HDL-Stilregeln.
- YosysHQ — quelloffene Synthese und Place-and-Route; HDLBits — interaktive Verilog-Übungen, kostenlos.