Digitaltechnik

Referenz ⚙️ Mechatronik 6 Abschnitte Stand 02.09.2026

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

Digitaltechnik ist Analogtechnik mit nur zwei erlaubten Zuständen. Der Gewinn: Störungen werden in jeder Stufe ausgebügelt, Kopien sind bitgenau, dieselbe Hardware tut mit anderem Speicherinhalt etwas völlig anderes. Der Preis: Zeit und Takt werden zur eigenen Disziplin — Setup, Hold, Metastabilität.

Landkarte

Warum digital gewonnen hat — und wo nicht

Regeneration
Jede Logikstufe erzeugt saubere Pegel neu. Nach hundert Stufen ist das Signal so gut wie am Anfang — analog addieren sich Rauschen und Verzerrung.
Exakte Kopien
Speichern, übertragen, wiederherstellen — beliebig oft, bitgenau identisch.
Skalierung
Ein Transistor mehr kostet praktisch nichts, sobald der Chip existiert. Darauf beruht die gesamte Rechnerentwicklung.
Programmierbarkeit
Dieselbe Hardware macht etwas völlig anderes, wenn man den Speicherinhalt ändert. Das gibt es analog nicht.
Wo digital verliert: Jede Wandlung kostet Zeit, Strom und Genauigkeit. Ein analoger Tiefpass aus zwei Bauteilen braucht digital Wandler, Rechenkern, Takt und Rekonstruktion. Für die kleinsten Signale und schnellsten Reaktionen bleibt analog überlegen — deshalb steht in jedem mechatronischen Gerät beides nebeneinander.

Wie dieses Modul zum Rest des Hubs steht

Die Bauteile, aus denen Gatter bestehen — und die Wandler an der Grenze zwischen beiden Welten.
Was aus Logik und Speicher wird: Rechnerarchitektur, Betriebssysteme, Netze, Signalverarbeitung.
Der Mikrocontroller in der Praxis: Peripherie, Interrupts, Toolchain, Debuggen.
I²C, SPI, UART aus Anwendersicht — anschließen, ansprechen, mit dem Logikanalysator prüfen.
Grundlage dieses Moduls
  • 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

Rechner kennen nur Bitmuster — was sie bedeuten, legt die Interpretation fest. Dasselbe Byte 0xFF ist 255 vorzeichenlos, −1 im Zweierkomplement, ein Zeichen in ASCII. Und 0,1 + 0,2 ist in Fließkomma nicht 0,3 — kein Bug, sondern die Folge davon, dass 0,1 binär eine unendliche Periode hat. Fehler entstehen fast immer dort, wo zwei Programmteile dieselben Bits verschieden deuten.

Die Systeme

SystemBasisZiffernSchreibweiseWofür
Binär20, 10b1010, 1010₂Bitmasken, Register, Portbelegungen
Oktal80–70o755, 0755Unix-Dateirechte, historische Rechner
Dezimal100–942Alles, was Menschen lesen
Hexadezimal160–9, A–F0x2A, 2AhAdressen, 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.
Die Asymmetrie ist eine echte Fehlerquelle. 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

CodePrinzipWo er vorkommt
BCDJede Dezimalziffer in 4 BitEchtzeituhren (DS3231), Siebensegmentanzeigen — spart die Division durch 10
Gray-CodeJe Schritt ändert sich genau ein BitAbsolutwertgeber, Drehgeber, Zeiger über Taktdomänen (Timing)
One-HotGenau ein Bit gesetztZustandsautomaten in FPGAs — schnell, weil kein Decoder nötig
ASCII7 Bit je ZeichenZiffern ab 0x30, Großbuchstaben ab 0x41, Kleinbuchstaben ab 0x61 (Differenz 0x20)
UTF-81–4 Byte je Zeichen, ASCII-kompatibelDer Standard für Text; ein Umlaut belegt zwei Byte — bei Displaypuffern oft übersehen

Bitoperationen, die man im Schlaf können muss

AufgabeAusdruck in CBemerkung
Bit n setzenx |= (1u << n)ODER mit einer Maske
Bit n löschenx &= ~(1u << n)UND mit invertierter Maske
Bit n umschaltenx ^= (1u << n)XOR
Bit n prüfen(x >> n) & 1uLiefert 0 oder 1
Feld maskieren(x >> pos) & ((1u<<len)−1)Bitfeld aus einem Register lesen
Bytes tauschen (16 Bit)(x >> 8) | (x << 8)Endianness-Umwandlung
Immer 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

Little Endian
Niederwertigstes Byte zuerst: 0x12345678 liegt als 78 56 34 12. x86, ARM (im Normalfall), RISC-V.
Big Endian
Höchstwertiges Byte zuerst: 12 34 56 78. Die „Netzwerk-Byte-Reihenfolge“ in TCP/IP, außerdem in vielen Sensor-Registern (z. B. MPU-6050).

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

S Exponent (8 Bit) Mantisse (23 Bit) 31 30 … 23 22 … 0 float (single precision, 32 Bit)
Wert = (−1)^S · 1,Mantisse · 2^(Exponent − 127) Die führende 1 wird nicht gespeichert („hidden bit“) — ein Bit Genauigkeit geschenkt.
TypBitsSignifikante DezimalstellenBereichAnmerkung
half (fp16)16≈ 3,3±6,5·10⁴Neuronale Netze, Grafik
bfloat1616≈ 2,4wie float32Exponentbereich wie float, weniger Mantisse — für maschinelles Lernen
float (single)32≈ 7,2±3,4·10³⁸Der Standard auf Mikrocontrollern mit FPU
double64≈ 15,9±1,8·10³⁰⁸Standard in C für Literale und auf dem PC
Vergleich auf Gleichheit
if (x == 0.1) schlägt fehl. Mit Toleranz vergleichen: fabs(x − y) < eps, eps relativ zur Größenordnung.
Auslöschung & Akkumulation
Differenz fast gleicher Zahlen verliert Genauigkeit; viele kleine Summanden auf eine große Summe gehen verloren. Abhilfe: stabile Formelvarianten, Kahan-Summation.
Zeit und Geld
Zeit immer als Ganzzahl in ms/µs führen (float verliert Auflösung), Geld nie in Fließkomma — ganzzahlige Cent.
Spezialwerte
NaN, ±Inf, −0. 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
Q-Multiplikation: c = (int32_t)(((int64_t)a · b) >> Q) Zwischenergebnis in doppelter Breite, dann zurückschieben — sonst steckt der Faktor 2^Q im Ergebnis.

Ganzzahlen: die Stolpersteine in C

FalleWas passiertRichtig
Integer Promotionuint8_t a = 200, b = 100;a + b wird als int gerechnet: 300, nicht 44Bewusst casten, wenn Umlauf gewünscht ist
Vorzeichenbehafteter ÜberlaufUndefiniertes Verhalten; der Compiler darf Prüfungen wegoptimieren (unsigned läuft dagegen definiert um)Vorher prüfen oder __builtin_add_overflow
Vergleich signed/unsignedif (i < sizeof(x)) mit int i = −1 ist wahr — −1 wird riesig unsignedGleiche Vorzeichenklasse, Warnungen einschalten
Division rundet zur Null−7/2 ist −3, nicht −4Für kaufmännische Rundung: (a + b/2) / b bei positiven Werten
Zeitvergleich mit Überlaufif (millis() > ziel) bricht beim Zählerüberlaufif ((int32_t)(millis() − ziel) >= 0) — die Differenz ist überlaufsicher
Zwei Compiler-Schalter, die sich immer lohnen: -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.
Quellen
  • 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

Boolesche Algebra ist die Rechenregel für Wahrheitswerte — und zugleich die Bauanleitung für Schaltungen. Ein Schaltnetz hat kein Gedächtnis: Der Ausgang hängt nur von den aktuellen Eingängen ab. Zwei Sätze tragen erstaunlich weit: De Morgan, und dass NAND allein für jede beliebige Funktion genügt.

Die Grundverknüpfungen

&
UND (AND)
1, wenn alle Eingänge 1
Y = A · B
≥1
ODER (OR)
1, wenn mindestens ein Eingang 1
Y = A + B
NICHT (NOT)
Kehrt den Eingang um
Y = Ā
&
NAND
Negiertes UND — universell
Y = ¬(A · B)
≥1
NOR
Negiertes ODER — ebenfalls universell
Y = ¬(A + B)
=1
XOR
1, wenn genau ein Eingang 1
Y = A ⊕ B
ABUNDODERNANDNORXOR
0000110
0101101
1001101
1111000

Die Gesetze

GesetzFormMerkhilfe
Neutrale ElementeA · 1 = A;  A + 0 = AWie in der Arithmetik
ExtremalgesetzeA · 0 = 0;  A + 1 = 1Das ODER mit 1 „gewinnt“ immer
IdempotenzA · A = A;  A + A = ADoppelt hilft nicht doppelt
KomplementA · Ā = 0;  A + Ā = 1Entweder oder
DistributivA·(B+C) = A·B + A·CAusmultiplizieren — gilt hier in beide Richtungen
AbsorptionA + A·B = ADer wichtigste Vereinfachungsschritt
De Morgan¬(A·B) = Ā + B̄;  ¬(A+B) = Ā · B̄Negation wandert nach innen, Operator kippt
De Morgan in der Praxis: Mit NAND allein baut man alles — NOT = NAND mit verbundenen Eingängen, AND = NAND + NOT, OR = NAND mit invertierten Eingängen. CMOS-Chips bestehen fast ausschließlich aus NAND-/NOR-Strukturen, weil sie in dieser Technologie am einfachsten und schnellsten sind.

Von der Wahrheitstabelle zur minimierten Gleichung

Disjunktive Normalform (DNF)
Je Zeile mit Ausgang 1 einen UND-Term, alle mit ODER verknüpfen („Summe von Produkten“). Der übliche Weg.
Konjunktive Normalform (KNF)
Je Zeile mit Ausgang 0 einen ODER-Term (Eingänge invertiert), alle mit UND. Lohnt bei wenigen Nullen.
00 01 11 10 00 01 11 10 AB CD 01 10 01 10 11 00 11 00

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).

Wann das zählt: In synchronen Schaltungen übernimmt das Register erst mit der Taktflanke — bis dahin sind Ausreißer abgeklungen. Kritisch wird es nur, wo ein kombinatorisches Signal direkt einen Takt-, Reset- oder Enable-Eingang treibt. Grundregel: niemals kombinatorische Logik als Takt verwenden.

Die Standardbausteine der Schaltnetze

BausteinFunktionBeispielWo man ihn wiederfindet
Multiplexer (MUX)Wählt einen von 2ⁿ Eingängen2:1 … 16:1Datenpfade in CPUs; in HDL jedes if in kombinatorischer Logik
DemultiplexerEin Eingang auf einen von 2ⁿ Ausgängen1:4, 1:8Adressdecodierung, mehrere Chip-Selects
Decodern Bit → einer von 2ⁿ Ausgängen aktiv3:8 (74HC138)Speicherbank-Auswahl, Tastaturmatrix
PrioritätsencoderAktiver Eingang → Binärzahl, höchster gewinnt8:3 (74HC148)Interrupt-Controller
KomparatorVergleicht zwei Zahlen: <, =, >4 Bit (74HC85)Grenzwertüberwachung, Adressvergleich
Barrel ShifterVerschiebt beliebig viele Stellen in einem Taktaus MUX-StufenSchiebebefehle in Prozessoren
HardwareEntsprechung in CGemeinsamkeit
Multiplexerswitch / NachschlagetabelleAuswahl aus mehreren Quellen anhand eines Index
Decoder1 << nAus einer Zahl wird ein einzelnes gesetztes Bit
Prioritätsencoder__builtin_clz()Höchstes gesetztes Bit finden — als CLZ-Befehl in einem Takt
Maskierenx & maskeUND-Verknüpfung Bit für Bit
Wired-ANDOpen-Drain im GPIO-RegisterMehrere Teilnehmer an einer Leitung

Addierer: vom Halbaddierer zur ALU

Halbaddierer / Volladdierer
Halbaddierer: Summe = A ⊕ B, Übertrag = A·B — kein eingehender Übertrag, nur für die unterste Stelle. Volladdierer: Summe = A ⊕ B ⊕ C_in, Übertrag = A·B + C_in·(A ⊕ B).
Ripple-Carry gegen Carry-Lookahead
In Reihe geschaltete Volladdierer sind einfach, aber der Übertrag läuft durch alle Stufen (Verzögerung linear). Carry-Lookahead berechnet Überträge vorab aus Generate/Propagate — logarithmisch, deshalb wird ein 64-Bit-Addierer in einem Takt fertig.

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

TypFunktionPraktischer Nutzen heute
74HC00 / 74HC024× NAND / 4× NORGlue Logic, Invertierung, Notlösungen beim Debuggen
74HC146× Inverter mit Schmitt-TriggerSignalaufbereitung, Entprellung, einfache Oszillatoren
74HC125 / 74HC245Bustreiber mit Tri-StatePegelanpassung, Richtungsumschaltung auf Bussen
74HC1383:8-DecoderChip-Select-Erzeugung, Matrixansteuerung
74HC165 / 74HC595Schieberegister Ein-/AusgangPortexpander über SPI — verbreitet und billig
74HC4051Analogmultiplexer 8:1Mehrere 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).

Familienwahl: 74HC (CMOS, 2–6 V) statt der alten 74LS-TTL-Typen; 74HCT für 5-V-Systeme mit 3,3-V-Eingangssignalen, 74LVC für 3,3 V mit oft 5-V-toleranten Eingängen. Die Buchstaben sind wichtiger als die Zahl — Pegel im Detail unter Timing, Pegel & Logikfamilien.
Quellen
  • 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

Ein Flipflop ist ein Bit Gedächtnis, ein Automat beschreibt Verhalten über die Zeit. Der entscheidende Unterschied zum Latch: Das Flipflop übernimmt nur bei der Taktflanke — die Voraussetzung dafür, dass Timing analysierbar ist. Der Zustandsautomat ist das Entwurfsmuster, das Digitaltechnik und Embedded-Software gemeinsam haben: Ampel, Protokollparser und Ablaufsteuerung sind Automaten, ob man sie so nennt oder nicht.

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
CLK D Q Latch Q FF

Flipflop-Typen, Register, Zähler

BausteinVerhaltenHeutige Bedeutung
RS-FlipflopSet und Reset; beide gleichzeitig unzulässigGrundbaustein; Entprellung mit zwei NAND-Gattern
D-FlipflopQ folgt D bei der FlankeDer einzige Typ, den man wirklich braucht — Register, Pipelines, Synchronisierer
JK / TJ = K = 1 kippt; T kippt bei jeder FlankeJK historisch; T als Frequenzteiler durch 2 (D-FF mit rückgekoppeltem Q̄)
Registern D-FF an gemeinsamem TaktJedes Peripherieregister eines Mikrocontrollers
SchieberegisterFF-Kette, Ausgang auf nächsten EingangSeriell↔parallel (74HC595/165) — Grundlage jeder seriellen Schnittstelle
LFSRSchieberegister mit XOR-RückkopplungPseudozufallsfolge maximaler Länge (2ⁿ − 1); Scrambling, Testmuster, CRC
Ripple-ZählerFF-Ausgang taktet das nächste FFWenig Logik, aber zeitversetzte Ausgänge → Glitches am Decoder; für synchrone Systeme unbrauchbar
SynchronzählerAlle FF an einem Takt, Enable-Logik davorDer Standard: alle Ausgänge gleichzeitig gültig; Modulo-N über Rücksetzbedingung
Gray-ZählerZählt im Gray-Code, ein Bitwechsel je SchrittSchreib-/Lesezeiger asynchroner FIFOs über Taktdomänen (Timing)
Set und Reset: synchron oder asynchron? Ein asynchroner Reset wirkt sofort — gut beim Einschalten, aber sein Loslassen muss synchronisiert werden, sonst verletzt es die Recovery-Zeit. Der übliche Kompromiss: asynchron aktivieren, synchron freigeben.

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

IDLE START RUN STOP Taste bereit fertig Quittung

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;
    }
}
Warum das besser ist als verschachtelte Wartezeiten: Die Funktion kehrt sofort zurück — nichts blockiert, mehrere Automaten laufen nebeneinander, und der Zustand ist eine einzige Variable, die man im Debugger jederzeit abliest. Für hierarchische Automaten (Statecharts nach Harel) siehe Miro Samek in den Quellen.

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
Quellen
  • 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

Timing ist der Grund, warum Digitaltechnik schwer ist — und ein High-Pegel ist kein Wert, sondern ein Bereich. Die Logik stimmt, und trotzdem fällt die Schaltung aus: weil ein Signal 200 ps zu spät kommt oder weil 3,3 V für einen 5-V-CMOS-Eingang nicht sicher als High gelten. Setup, Hold, Metastabilität und die vier Pegelgrenzen entscheiden, ob das zehnte Exemplar auch bei 85 °C läuft.

Setup und Hold

CLK t_su t_h D Daten müssen im grauen Fenster stabil sein Wechsel erlaubt Wechsel erlaubt
GrößeBedeutungVerletzung führt zuAbhilfe
Setup-Zeit t_suDaten müssen vor der Flanke stabil anliegenAltes oder undefiniertes ÜbernahmeergebnisTakt verlangsamen, Logik aufteilen (Pipelining)
Hold-Zeit t_hDaten müssen nach der Flanke kurz stabil bleibenNeue Daten überholen die FlankeVerzögerung einfügen; nicht durch langsameren Takt behebbar
Clock-to-Q t_coFlanke bis gültiger AusgangGehört in jede Pfadrechnung
Clock SkewTaktversatz zwischen zwei FlipflopsVerschlechtert Setup oder Hold, je nach RichtungBalancierter Taktbaum; im FPGA macht das die Toolchain
JitterZufällige Schwankung der FlankeSchmälert das nutzbare FensterSaubere Taktquelle, gute Versorgung
t_co + t_logik + t_leitung + t_su + t_skew ≤ T_takt Die Setup-Gleichung — sie definiert die maximale Taktfrequenz. Der langsamste Pfad zwischen zwei Registern („kritischer Pfad“) bestimmt das ganze System.

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

Pipelining
Zusätzliche Register in die Logik: kritischer Pfad halbiert, Taktfrequenz verdoppelt — Preis ist ein Takt mehr Latenz. Durchsatz steigt, Reaktionszeit nicht.
Retiming
Register über Logikgrenzen verschieben, Verhalten unverändert — machen Synthesewerkzeuge automatisch, wenn erlaubt.
Parallelisieren
Zwei Rechenwerke statt eines schnellen: kostet Fläche, spart Frequenz — und Strom, weil die dynamische Leistung mit P = C · U² · f geht.
Logikreduktion
Weniger Gatterebenen: Gleichheitsvergleich statt „kleiner“, Shift statt Zweierpotenz-Division.

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.

MTBF = e^(t/τ) / (T₀ · f_clk · f_daten) Die mittlere Zeit zwischen Ausfällen wächst exponentiell mit der Einschwingzeit t — darauf beruht der Zwei-Flipflop-Synchronisierer: Das erste FF bekommt einen vollen Takt zum Entscheiden, bevor das zweite übernimmt. MTBF steigt von Sekunden auf Jahrtausende. Gilt nur für einzelne Bits.
Was übertragen wirdRichtige TechnikWarum
Einzelnes Bit, PegelZwei-Flipflop-Synchronisierer (drei bei sehr hohen Frequenzen)Reicht, sofern das Signal lange genug stabil bleibt
Kurzer ImpulsToggle-Synchronisierer plus FlankenerkennungEin Impuls kürzer als die Zielperiode geht sonst verloren
Mehrere Bits zusammengehörigHandshake oder asynchrone FIFO mit Gray-ZeigernEinzeln synchronisierte Bits kommen zu verschiedenen Takten an — es entstehen Werte, die es nie gab
DatenstromAsynchrone FIFO (Dual-Port-RAM, Gray-Zeiger)Entkoppelt Schreib- und Leserate vollständig
ResetAsynchron aktivieren, synchron freigebenDas Loslassen kann sonst Recovery-Zeiten verletzen
Der Fehler, der monatelang unentdeckt bleibt: Ein 8-Bit-Zähler wird bitweise synchronisiert. Beim Übergang 0111 1111 → 1000 0000 ändern sich alle acht Bits; kommen sie nicht exakt gleichzeitig an, liest die andere Seite kurz z. B. 1111 1111. Selten, aber real. Lösung: Gray-Code oder Handshake. Dasselbe gilt in Software für Variablen zwischen ISR und Hauptprogramm — volatile plus atomare Übergabe.

Pegel und Logikfamilien

Sender Empfänger V_OH … … V_OL gilt als HIGH gilt als LOW verboten Reserve Störabstand = Reserve oben wie unten
FamilieVersorgungV_IL max / V_IH minV_OL max / V_OH minBemerkung
TTL / 74LS5 V0,8 V / 2,0 V0,5 V / 2,7 VHistorisch; hoher Stromverbrauch, Eingang zieht Strom
74HC (CMOS)2–6 V0,3·V_CC / 0,7·V_CC≈ 0 V / ≈ V_CCBei 5 V braucht HIGH mindestens 3,5 V — 3,3-V-Signale reichen nicht sicher
74HCT5 V0,8 V / 2,0 V≈ 0 V / ≈ V_CCCMOS-Ausgang, TTL-Schwellen — der klassische 3,3-V-nach-5-V-Übersetzer
74LVC1,65–3,6 V0,8 V / 2,0 V0,55 V / V_CC−0,45 VViele Typen 5-V-tolerant am Eingang; der heutige Standard
LVCMOS 3,3 V3,3 V0,8 V / 2,0 V0,4 V / 2,4 VDer verbreitetste Pegel bei Mikrocontrollern
LVCMOS 1,8 V1,8 V0,63 V / 1,17 V0,45 V / 1,35 VModerne SoCs und Speicher
LVDSdifferentiell, ±350 mVSehr schnell, störfest, strahlungsarm; Displays, Hochgeschwindigkeit
Die häufigste Pegelfalle: Ein 3,3-V-Mikrocontroller treibt einen 74HC-Baustein an 5 V — 3,3 V Ausgang gegen 3,5 V geforderte Schwelle. Funktioniert am Schreibtisch, fällt bei Kälte oder beim nächsten Exemplar aus. Richtig: 74HCT, 74LVC oder ein echter Pegelwandler.

Pegelanpassung in der Praxis

RichtungLösungAnmerkung
5 V → 3,3 V, langsamSpannungsteiler (z. B. 10 k / 20 k)Billig; Leitungskapazität begrenzt die Geschwindigkeit
5 V → 3,3 V, schnell74LVC-Puffer mit 5-V-toleranten EingängenDer saubere Weg
3,3 V → 5 V74HCT-PufferEin 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-PullWandler mit Richtungspin (TXB-Serie, 74LVC245)Richtung muss die Schaltung vorgeben
5-V-Signal an 3,3-V-MCUPrüfen, ob der Pin 5-V-tolerant ist („FT“ bei STM32)Sonst Teiler oder Puffer

Fan-out, Flanken, Pull-Widerstände

Fan-out = Kapazität
Bei CMOS statisch fast unbegrenzt — begrenzend ist die Kapazität: 3–10 pF je Eingang, ~1 pF/cm Leiterbahn. Mehr Kapazität heißt flachere Flanken und mehr dynamischer Verbrauch.
Serienterminierung
22–47 Ω direkt am Ausgang verhindern Reflexionen und Überschwinger — sinnvoll bei jeder Leitung über ein paar Zentimeter.
Schmitt-Trigger
Zwei Schaltschwellen machen aus langsamen oder verrauschten Signalen saubere Flanken. Bei MCU-Pins meist eingebaut, bei 74HC nur „14“ und „132“.
Offene CMOS-Eingänge
Nie offen lassen: Der Eingang schwebt, beide Transistoren leiten teilweise — Dauerstrom, mögliches Schwingen. Auf V_CC oder Masse legen, direkt oder über 10 kΩ.
Pull-up-Wert bewusst wählen: Für I²C bestimmt er die Anstiegszeit — R_max ≈ t_r/(0,847·C_bus); bei 400 pF und 300 ns sind das rund 900 Ω. Zu große Pull-ups sind die häufigste Ursache für einen I²C-Bus, der bei 400 kHz aussteigt. Interne MCU-Pull-ups (20–50 kΩ) reichen für Taster, nicht für I²C. Und: Boot-Pins (ESP32, STM32) beim Beschalten beachten — hängt dort eine Last, startet das Gerät nicht.
Quellen
  • 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

Speicher wählt man über vier Fragen: flüchtig oder nicht, wahlfrei oder blockweise, wie oft beschreibbar, wie schnell. Ein FPGA ist der Gegenentwurf zum Prozessor: Man beschreibt keine Befehlsfolge, sondern Hardware, die parallel existiert — aufgebaut aus genau denselben Bausteinen, Lookup-Tabellen und Flipflops.

Speichertypen im Überblick

TypFlüchtigZugriffSchreibzyklenTempoTypischer Einsatz
SRAMjabyteweise, wahlfreiunbegrenztnsCache, Arbeitsspeicher im Mikrocontroller
DRAMja (Refresh nötig)zeilenweiseunbegrenzt10–100 nsHauptspeicher in Rechnern und großen SoCs
NOR-Flashneinlesen wahlfrei, löschen sektorweise10 000 – 100 000lesen schnell, schreiben langsamProgrammspeicher, Boot-ROM, Code-Ausführung direkt aus dem Flash
NAND-Flashneinseitenweise100 – 100 000 (je nach SLC/MLC/TLC/QLC)hoher Durchsatz, hohe LatenzSSD, SD-Karte, eMMC
EEPROMneinbyteweise schreib- und löschbar100 000 – 1 Mio.Schreiben 3–10 ms je SeiteKalibrierdaten, Konfiguration, Betriebsstundenzähler
FRAMneinbyteweise, wie RAM10¹² – 10¹⁴ns, kein SchreibdelayDatenlogger mit hoher Schreibrate, Zustandssicherung bei Spannungsausfall
MRAMneinbyteweisepraktisch unbegrenztnsIndustrie, 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-ZelltypBit je ZelleZyklen (Größenordnung)Anmerkung
SLC150 000 – 100 000Industrie, teuer, sehr robust
MLC23 000 – 10 000Kompromiss
TLC3500 – 3 000Der Standard in Consumer-SSDs
QLC4100 – 1 000Hohe Kapazität, geringe Ausdauer
Praxisregel für Konfigurationsdaten: Nie bei jeder Änderung schreiben, sondern gesammelt beim Herunterfahren oder nach einer Ruhezeit. Billige SD-Karten ohne Endurance-Angabe sind eine der häufigsten Ausfallursachen im Dauerbetrieb — siehe Homeserver 101 → Storage.

Anbindung und Fehlerkorrektur

SchnittstelleTypische BausteineGeschwindigkeitAnmerkung
I²C24Cxx-EEPROM, FM24-FRAM100–400 kHz, selten 1 MHzZwei Leitungen, viele Teilnehmer, langsam
SPI25Qxx-NOR-Flash, 23LCxx-SRAMbis ~100 MHzDer Standard für externen Flash
Quad-/OctoSPIW25Q-Serie, PSRAM~65 MB/s (QSPI) bis ~400 MB/s (Octal DDR)Erlaubt Ausführen direkt aus dem externen Flash (XIP)
SDIO / eMMCSD-Karten, eMMCSD UHS-I bis ~104 MB/s, eMMC HS400 bis ~400 MB/sBraucht Dateisystem und Treiber
Paralleler Bus (FMC)SRAM, SDRAM, DisplayshochViele 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

LUT (Lookup-Tabelle)
Ein winziger Speicher mit 4 oder 6 Adresseingängen, der jede boolesche Funktion dieser Eingänge realisiert. Statt Gatter zu verdrahten, schreibt man die Wahrheitstabelle hinein.
Flipflop
Direkt hinter jeder LUT. Register sind im FPGA praktisch kostenlos — deshalb ist Pipelining dort die naheliegendste Optimierung (Timing).
Block-RAM
Fest eingebaute SRAM-Blöcke, meist 9–36 kBit, dual-port. Für FIFOs, Puffer, Tabellen.
DSP-Block
Fest verdrahteter Multiplizierer mit Akkumulator. Der Grund, warum FPGAs bei Filtern und Matrixoperationen so stark sind.
Taktnetz und PLL
Laufzeitarme Sonderleitungen für Takte plus PLLs zur Frequenzerzeugung. Takte gehören ausschließlich dorthin, nie in normale Logikleitungen.
I/O-Blöcke
Konfigurierbare Pegel (LVCMOS, LVDS), Terminierung, Verzögerungsketten. Pinbelegung frei — mit Einschränkung durch Bänke gemeinsamer Versorgungsspannung.

FPGA, Mikrocontroller oder ASIC?

KriteriumMikrocontrollerFPGAASIC
Entwicklungsaufwandgeringmittel bis hochsehr hoch
Stückkosten0,5 – 15 €5 – 5000 €ab großen Stückzahlen am billigsten
Parallelitätgering (Kerne, DMA)sehr hochsehr hoch
Reaktionszeitµs, mit Aufwandns, systembedingtns
Änderbar im FeldFirmware-UpdateBitstream-Updatenein
WofürSteuerung, Kommunikation, Regelung bis einige kHzViele parallele Kanäle, sehr schnelle Regelung, Signalverarbeitung, eigene SchnittstellenGroße Stückzahlen, extreme Effizienz
Der ehrliche Rat: In der Mechatronik löst ein Mikrocontroller 95 % der Aufgaben. Ein FPGA lohnt, wenn viele Kanäle gleichzeitig und mit harter Zeitanforderung bedient werden müssen — mehrere hochauflösende Encoder, ein eigenes Kamerasensor-Interface, ein Regeltakt von 100 kHz — oder wenn eine Schnittstelle gebraucht wird, die es als Peripherie nicht gibt.

HDL: die Regeln, die den Unterschied machen

HDL ist keine Programmiersprache. 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

PlattformBoard (Beispiel)ToolchainAnmerkung
Lattice iCE40iCEBreaker, TinyFPGA, iCESugarvollständig quelloffen: Yosys + nextpnr + Project IceStormDer beste Einstieg: kleine Bitstreams, Synthese in Sekunden, keine Registrierung
Lattice ECP5ULX3S, Colorlight-Boardsquelloffen: Yosys + nextpnr + Project TrellisDeutlich größer, DDR-RAM möglich, RISC-V-Softcores laufen bequem
AMD Artix-7Arty A7, Nexys A7, Basys 3Vivado, kostenlose Einstiegsstufe (seit Version 2026.1 gestuftes Lizenzmodell)Industriestandard, viel Lehrmaterial, sehr große Installation
Altera Cyclone / MAX 10DE0-Nano, DE10-LiteQuartus Prime Lite (kostenlos, ohne Lizenzdatei)An Hochschulen verbreitet; Altera ist seit 2025 wieder eigenständig
GowinTang Nano 9K/20KGowin EDA; quelloffen über Yosys + Project ApiculaSehr 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.

Quellen
  • 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.