1.1 Einleitung
Im Folgenden sollen die Grundlagen für den Entwurf von komplexen digitalen Systemen behandelt werden. Für die Entwurfsmethoden können dabei zunächst allgemeine digitale Systeme betrachtet werden. Bei der Planung für bestimmte Systeme müssen jedoch Bedingungen erfüllt werden, die z. B. in einer Anforderungsliste festgelegt werden. Durch die immer kürzer werdenden Entwicklungszeiten und die Entwicklungskosten werden Bedingungen an einen Entwurf geknüpft, die im Folgenden zusammengefasst sind:
- – kurze Entwicklungszeiten
- – unproblematische Änderung des Designs
- – Wiederverwendbarkeit (Design Reuse)
- – Einsatz von IP-Cores
- – Frühzeitige Fehlererkennung
- – Entwurf eigener Prototypen (Verwendung programmierbarer Logik)
Um diese Bedingungen zu erfüllen, werden leistungsfähige Entwicklungswerkzeuge benötigt, die auch unter dem Begriff EDA (Electronic Design Automation) zusammengefasst werden. Eine wichtige Hilfe für die Beschreibung von Designs sind Hardware-Beschreibungssprachen. Hier haben sich VHDL und Verilog als Standard weltweit durchgesetzt. Diese Beschreibungssprachen können jedoch nicht als alleinige bzw. ideale Beschreibungsmittel betrachtet werden. Für komplexe digitale Systeme werden deshalb zunehmend auch Hochsprachen eingesetzt, die komplexe Designs in einem hohen Abstraktionsniveau beschreiben. Hier werden nur als Beispiele SystemC und UML (Unified Modeling Language) genannt [1, 2].
Durch den Einsatz von leistungsfähiger CAD-Entwicklungssoftware und programmierbaren Logikbausteinen können die zuvor genannten Bedingungen für den Entwurf eines komplexen digitalen Systems inzwischen nahezu erfüllt werden. Die Entwicklungssoftware wird sowohl für die Modellierung als auch für die Realisierung eingesetzt. Simulations- und Syntheseschritte werden dabei während des gesamten Entwurfs verwendet. Die Synthesewerkzeuge setzen die Hardwarebeschreibung in Schaltpläne und Netzlisten um. Letztere werden für die Implementierung der Schaltungen in die Ziel-Hardware benötigt. Diese Ziel-Hardware kann beispielsweise ein FPGA (Field Programmable Gate Array) sein. Für den FPGA-Entwurf bietet der jeweilige Hersteller entsprechende Entwicklungswerkzeuge an, die meist kostengünstiger als herstellerfremde Werkzeuge sind und zusammen mit den Bausteinen vertrieben werden. Allerdings zeichnen sich herstellerfremde Werkzeuge oft durch größere Kompatibilität mit unterschiedlichen Bausteinen aus.
Logikbausteine, deren physikalische Eigenschaften festgelegt sind, die aber von den Entwicklern an ihre jeweiligen Bedürfnisse angepasst werden können, nennt man auch „Programmierbare Logik“. Im Wesentlichen unterscheidet man diesbezüglich drei verschiedene Bausteintypen:
- PLDs (Programmable Logic Device)
- CPLDs (Complex PLD)
- FPGAs
Die vorherrschende Grundstruktur bei PLDs ist eine zweistufige UND/ODER-Matrix, die durch Rückführung und Flip-Flops ergänzt wird. Es gibt viele verschiedene PLD-Typen, die bekanntesten sind wohl die PALs (Programmable Array Logic) bzw. PLAs. PALs sind eine Weiterentwicklung von PROMs (Programmable Read Only Memory) und lassen sich genau wie diese nur einmal programmieren. Durch einen kurzen Spannungsimpuls wird an den gewünschten Knotenpunkten die Verbindung unterbrochen. Allerdings lassen sich PALs nur über das UND-Array programmieren, da sie, im Gegensatz zu PROMs, eine feste ODER- und eine variable UND-Matrix haben. Bei PLAs schließlich sind beide Matrizen programmierbar [4].
Die CPLDs sind eine Weiterführung der PLDs. Hier werden mehrere PLD-Blöcke durch eine Schaltmatrix miteinander verbunden. FPGAs bestehen aus vielen kleinen Funktionsblöcken, in denen jeweils eine logische Funktion realisiert ist. Diese Blöcke können über ein Netzwerk von Verbindungen miteinander verknüpft werden. Neben logischen Funktionen stehen auch Register und Flip-Flops auf dem Chip zur Verfügung. Man unterscheidet rekonfigurierbare und nicht rekonfigurierbare FPGA-Typen. Bei ersteren werden wiederbeschreibbare Speichertechnologien verwendet, in denen die Konfiguration des FPGAs gespeichert wird. Bei nicht rekonfigurierbaren Typen werden sog. „Antifuses“ verwendet. Hier kann nur einmal eine Konfiguration vorgenommen werden, da sie direkt in den Baustein geschrieben wird.
Die als ASICs (Application Specific Integrated Circuit) bezeichneten Bausteine gehören zu den maskenprogrammierbaren Typen. Sie werden für ein anwendungsspezifisches Problem entworfen und optimiert. Die Vorteile sind eine optimale Ausnutzung der Chipfläche, hohe Taktraten und geringe Stückkosten. Die Nachteile sind lange Entwicklungszeiten, hohe Entwicklungskosten und geringe Flexibilität bei Designänderungen. Außerdem sind intensive Tests zur Fehlerfrüherkennung nötig, was zusätzliche Kosten verursacht.
Während die ASICs sich in höheren Stückzahlen lohnen, ermöglichen CPLDs und FPGAs den unmittelbaren und kostengünstigen Entwurf von Prototypen. Diese sofortige Testbarkeit der Bausteine ist bei den ASICs nicht annähernd gegeben, da der erstellte Systementwurf erst an den Halbleiterhersteller übermittelt werden muss, der dann die Endfertigung vornimmt. Ein FPGA kann eine Vielzahl von Anwendungen ausführen. Fertige Komponenten, sog. IP-Cores (Intellectual Property), die in das eigene Design integriert werden können, erleichtern dem Entwickler die Arbeit, da er nicht mehr jede einzelne Funktion seiner Schaltung selbst entwickeln muss. Heutige FPGAs erreichen außerdem ASIC-ähnliche Rechenleistungen und können für hochkomplexe Anwendungen eingesetzt werden. Im Folgenden werden Entwurfsmethoden für digitale Systeme behandelt. Diese Methoden sind zunächst unabhängig von der Ziel-Hardware. Für die Realisierung der hier erstellten Entwürfe liegt der Schwerpunkt bei der programmierbaren Logik und der Verwendung von FPGAs [4].