1 Einleitung | 21 |
1.1 Digitaltechnik und die mikroelektronische Revolution | 21 |
1.2 Abstraktionsebenen und EDA-Werkzeuge | 30 |
1.3 Ziele und Aufbau des Buches | 37 |
2 Modellierung von digitalen Schaltungen mit VHDL | 41 |
2.1 Historische Entwicklung von VHDL | 42 |
2.2 Grundlegende Konzepte von VHDL | 45 |
2.2.1 Entity und Architecture | 45 |
2.2.2 Verhaltensbeschreibungen und Prozesse | 49 |
2.2.3 Strukturbeschreibungen | 55 |
2.2.4 Testbenches und die Verifikation von VHDL-Entwürfen | 60 |
2.2.5 Kompilation von VHDL-Modellen | 64 |
2.2.6 Simulation von VHDL-Modellen | 66 |
2.2.7 Modellierung von Verzögerungszeiten in VHDL | 72 |
2.2.8 Variable und Signal | 74 |
2.3 Objekte, Datentypen und Operatoren | 77 |
2.3.1 Deklaration und Verwendung von Objekten | 77 |
2.3.2 Überladen von Operatoren und Funktionen | 80 |
2.3.3 Gültigkeitsbereich von Objekten | 81 |
2.3.4 Übersicht über die VHDL-Datentypen und Operatoren | 82 |
2.3.5 Attribute | 88 |
2.4 Sequentielle Anweisungen | 90 |
2.4.1 IF-Verzweigungen | 90 |
2.4.2 CASE-Verzweigungen | 94 |
2.4.3 Schleifen | 97 |
2.4.4 Weitere sequentielle Anweisungen | 101 |
2.5 Nebenläufige Anweisungen | 103 |
2.5.1 Unbedingte nebenläufige Anweisungen | 103 |
2.5.2 Bedingte nebenläufige Anweisungen | 104 |
2.6 Unterprogramme und Packages | 106 |
2.7 Auflösungsfunktionen, mehrwertige Logik und IEEE-Datentypen | 111 |
2.7.1 Auflösungsfunktionen und mehrwertige Logik | 111 |
2.7.2 Die IEEE 1164-Datentypen | 116 |
2.8 Weitere Konstruktionen für Strukturbeschreibungen | 122 |
2.8.1 Parametrisierung von Komponenten | 122 |
2.8.2 Iterative und bedingte Instanzierung | 125 |
2.8.3 Bindung von Komponenten | 126 |
2.9 Weitere VHDL-Konstruktionen | 132 |
2.10 Zusammenfassung zu Kapitel 2 | 134 |
2.11 Übungsaufgaben | 137 |
3 Digitale integrierte Schaltungen | 139 |
3.1 Auswahl von Implementierungsformen für integrierte Schaltungen | 139 |
3.2 Grundlagen der CMOS-Schaltungstechnik | 146 |
3.2.1 DerMOS-Feldeffekttransistor | 147 |
3.2.2 Der CMOS-Inverter | 158 |
3.2.3 Statisches Verhalten des CMOS-Inverters | 159 |
3.2.4 DynamischesVerhalten des CMOS-Inverters | 163 |
3.2.5 Leistungs- und Energieaufnahme von CMOS-Schaltungen | 170 |
3.3 Kombinatorische CMOS-Schaltungen | 176 |
3.3.1 Komplementäre statische CMOS Logikgatter | 176 |
3.3.2 Pass-Transistor-Logik und Transmission-Gate-Logik | 180 |
3.3.3 Tri-State-Treiber | 184 |
3.4 Sequentielle CMOS-Schaltungen | 185 |
3.4.1 Das Bistabilitäts-Prinzip | 186 |
3.4.2 Taktzustandsgesteuerte Latches | 187 |
3.4.3 Taktflankengesteuerte Flipflops | 188 |
3.4.4 Metastabilität und Synchronisation | 190 |
3.5 MOS Halbleiterspeicher | 195 |
3.5.1 Übersicht und Klassifikation von Halbleiterspeichern | 196 |
3.5.2 Matrixspeicher-Architekturen | 200 |
3.5.3 SRAMSpeicherzellen | 203 |
3.5.4 EPROMSpeicherzellen | 205 |
3.5.5 EEPROMSpeicherzellen | 207 |
3.5.6 Flash Speicherzellen | 209 |
3.6 Programmierungstechnologien von MOS-PLDs | 213 |
3.6.1 Programmierungmit SRAM-Zellen | 213 |
3.6.2 Programmierungmit Floating-Gate-Zellen | 216 |
3.6.3 Programmierungmit Antifuses | 217 |
3.7 SPLD/CPLD-Architekturen | 219 |
3.7.1 Implementierung von Schaltfunktionenmit PROMs | 219 |
3.7.2 SPLDs: PLA- und PAL-Strukturen | 222 |
3.7.3 CPLDs | 225 |
3.8 FPGA-Architekturen | 228 |
3.8.1 Multiplexer-Basiszellen | 229 |
3.8.2 LUT-Basiszellen | 231 |
3.8.3 Verbindungsarchitekturen | 234 |
3.8.4 I/O-Blöcke | 240 |
3.8.5 Entwicklungstrends bei FPGAs | 241 |
3.9 Zusammenfassung zu Kapitel 3 | 244 |
3.10 Übungsaufgaben | 247 |
4 Von der Register-Transfer-Ebene zur Gatterebene | 249 |
4.1 Einführung in die Logiksynthese | 249 |
4.1.1 Übersetzung und Inferenz des VHDL-Codes | 250 |
4.1.2 Schaltwerkssynthese | 253 |
4.1.3 Zeitliche Randbedingungen für die Synthese | 260 |
4.1.4 Statische Timing-Analyse | 262 |
4.1.5 Das Problem des „Falschen Pfades“ | 266 |
4.1.6 Umgebung des Designs und Betriebsbedingungen | 269 |
4.1.7 Logikoptimierung und Technologieabbildung | 271 |
4.1.8 Mehrstufige Logikoptimierung | 272 |
4.1.9 Technologieabbildung für SRAM-FPGAs | 275 |
4.1.10 Einfluss der Optimierungsvorgaben auf das Syntheseergebnis | 278 |
4.2 Ein 4-Bit-Mikroprozessor als Beispiel | 281 |
4.3 Schaltwerke und Zähler | 284 |
4.3.1 Steuerwerk des Beispiel-Prozessors | 284 |
4.3.2 Einfluss der Zustandscodierung auf das Syntheseergebnis | 288 |
4.3.3 Das Problem der unbenutzten Zustände | 290 |
4.3.4 Verwendung von Signalen und Variablen in getakteten und kombinatorischen Prozessen | 295 |
4.3.5 Beschreibung von Zählern in VHDL | 301 |
4.3.6 Implementierung von Zählern in FPGAs | 305 |
4.4 Arithmetische Einheiten | 309 |
4.4.1 ALU des Beispiel-Prozessors | 309 |
4.4.2 Implementierung von Addierern in FPGAs | 312 |
4.4.3 Implementierung von Subtrahierern in FPGAs | 316 |
4.4.4 Implementierung von Multiplizierern in FPGAs | 320 |
4.4.5 Ressourcenbedarf von logischen, relationalen und arithmetischen Operatoren | 324 |
4.4.6 Mehrfachnutzung von arithmetischen Ressourcen | 325 |
4.4.7 Darstellung vorzeichenbehafteter und vorzeichenloser Zahlen | 327 |
4.5 Integration vonMatrixspeichern: RAMund ROM | 331 |
4.5.1 Programmspeicher des Beispiel-Prozessors | 332 |
4.5.2 Verwendung von synchronen „Block RAM“-Speichern | 335 |
4.5.3 Datenspeicher des Beispiel-Prozessors | 339 |
4.5.4 Vergleich von „Distributed RAM“und „Block RAM“ | 342 |
4.5.5 Instanzierung von Makros und Verwendung von Makro-Generatoren | 343 |
4.6 On-Chip-Busse und I/O-Schnittstellen | 346 |
4.6.1 Datenbus des Beispiel-Prozessors | 347 |
4.6.2 Multiplexer- und Logik-Busse | 349 |
4.6.3 Tristate-Busse | 352 |
4.6.4 Vergleich von Tristate-Bus und Logik-Bus | 356 |
4.6.5 Paralleler Port des Beispiel-Prozessors | 357 |
4.7 Häufig begangene Fehler und weitere Aspekte des RTL-Entwurfs | 360 |
4.7.1 Häufige Fehler in getakteten Prozessen (Flipflops) | 361 |
4.7.2 Häufige Fehler in kombinatorischen Prozessen (Schaltnetze) | 364 |
4.7.3 Optimierung der Schaltung | 365 |
4.7.4 Partitionierung des Entwurfs | 370 |
4.8 Zusammenfassung zu Kapitel 4 | 372 |
4.9 Übungsaufgaben | 375 |
5 Von der Gatterebene zur physikalischen Realisierung | 379 |
5.1 Entwurfsablauf für FPGAs | 379 |
5.2 Physikalischer Entwurf von FPGAs | 383 |
5.2.1 Erstellen des Floorplans | 383 |
5.2.2 Platzierung der Komponenten im FPGA | 386 |
5.2.3 Verdrahtung der Komponenten im FPGA | 390 |
5.2.4 Platzierung und Verdrahtung des Beispiel-Prozessors | 395 |
5.3 Einfluss der Verdrahtung auf das Zeitverhalten | 396 |
5.3.1 Elektrische Parameter der Verdrahtung | 397 |
5.3.2 Modellierung der Verzögerungszeiten durch das Elmore-Modell | 399 |
5.3.3 Induktive und kapazitive Leitungseffekte | 403 |
5.3.4 Verdrahtung und Zeitverhalten im FPGA | 406 |
5.3.5 Logiksynthese und physikalischer Entwurf | 413 |
5.4 Synchroner Entwurf und Taktverteilung | 415 |
5.4.1 Synchrone und asynchrone digitale Systeme | 416 |
5.4.2 Flankengesteuerte und pegelgesteuerte Schaltungen | 421 |
5.4.3 Ursachen und Auswirkungen von Taktversatz und Jitter | 423 |
5.4.4 Taktverteilung in FPGAs | 430 |
5.4.5 Synchrone Entwurfstechniken | 438 |
5.5 Simulation des Zeitverhaltens mit VHDL | 445 |
5.5.1 Modellierung der Schaltung mit VITAL-Komponenten | 445 |
5.5.2 Austausch von Timing-Datenmit SDF | 453 |
5.5.3 Simulation des Zeitverhaltens mit einem VHDL-Simulator | 456 |
5.6 Bestimmung der Chiptemperatur | 460 |
5.7 Zusammenfassung zu Kapitel 5 | 461 |
5.8 Übungsaufgaben | 464 |
6 Modellierung von digitalen Schaltungen mit SystemC | 467 |
6.1 Modellierung auf Register-Transfer-Ebene mit SystemC | 468 |
6.1.1 Module | 468 |
6.1.2 Verhaltensbeschreibungen auf Register-Transfer-Ebene | 471 |
6.1.3 Strukturbeschreibungen | 475 |
6.1.4 Testbenches | 478 |
6.1.5 Simulation | 481 |
6.2 Hardwareorientierte SystemC-Datentypen | 485 |
6.2.1 Logik-Datentypen | 485 |
6.2.2 Integer-Datentypen | 488 |
6.2.3 Fixpunkt-Datentypen | 489 |
6.3 Modellierung auf algorithmischer Ebene mit SystemC | 492 |
6.3.1 Verhaltensbeschreibungen auf algorithmischer Ebene | 493 |
6.3.2 Von der algorithmischen Ebene zur Register-Transfer-Ebene | 501 |
6.4 Zusammenfassung zu Kapitel 6 | 510 |
A Anhang | 511 |
A.1 Verwendete Schaltzeichen, Abkürzungen und Formelzeichen | 511 |
A.1.1 Schaltzeichen | 511 |
A.1.2 Abkürzungen | 513 |
A.1.3 Formelzeichen | 516 |
A.2 VHDL-Syntax | 518 |
A.3 VHDL-Strukturbeschreibung des Beispiel-Prozessors | 526 |
A.4 Lösungen der Übungsaufgaben | 529 |
A.4.1 Übungsaufgaben aus Kapitel 2 | 529 |
A.4.2 Übungsaufgaben aus Kapitel 3 | 532 |
A.4.3 Übungsaufgaben aus Kapitel 4 | 535 |
A.4.4 Übungsaufgaben aus Kapitel 5 | 545 |
Literaturverzeichnis | 549 |
Index | 557 |