Elektronikbastler früherer Jahre, die nächtens die Chips der 7400er-TTL-Reihe verlöteten, bis der elektronische Würfel endlich lief, erinnern sich an die kleine Revolution, die mit dem Aufkommen zur programmierbaren Logik Einzug hielt: Ein GAL- (Generic Array Logic) oder PAL-Chip (Programmable Array Logic) sparte jede Menge Chips und deren elektrische Verbindungen untereinander ein.
Fast wichtiger noch war, dass beim Prototyping kleine Schaltungsänderungen kein Redesign der Leiterplatte mehr erforderlich machten – es reichte, den Chip umzuprogrammieren. Das Erstellen der Arrays passierte mit PC-Tools, oder der Elektroniker benutzte eine Sprache, mit der er die Logik bis zum Erschöpfen der Chip-Ressourcen frei programmierte.
Heute lächeln Entwickler darüber, weil sie mit CPLDs (Complex Programmable Logic Devices) oder FPGAs (Field Programmable Gate Array, siehe Kasten "Programmable Logic Devices (PLDs)") arbeiten, die das Entwerfen komplexer digitaler Hardware per Beschreibungssprache, der Hardware Description Language (HDL), ermöglichen. Zwei Sprachen dominieren: Verilog [1] und VHDL ([2], Very High Speed Integrated Circuit Hardware Description Language), wobei in Europa letztere den Vorzug genießt.
Des Herausragende an diesen Sprachen ist aber, dass sie fürs Simulieren konzipiert sind. Wer schon mit dem Qemu-Emulator eine andere Prozessorarchitektur wie ARM emuliert hat, kennt das Prinzip: Qemu bildet eine CPU auf dem Heimrechner inklusive Bildschirm und Datenspeicher nach. Das Gleiche tun VHDL und Verilog generisch: Die in der HDL beschriebene Hardware simuliert das entsprechende Tool takt- und zeitgenau virtuell und hilft die Funktion mit nachgeahmten externen Stimuli (die Testbench) auf ihre Funktion zu prüfen.
Programmable Logic Devices (PLDs)
Ein Complex Programmable Logic Device (CPLD) besteht aus Blöcken, die ein PLA, Ein- und Ausgangsblöcke sowie eine programmierbare Rückkopplung enthalten. Der Programmierer des Bausteins kann die Blöcke untereinander verbinden (Flashzellen). In der Regel sitzt hinter jedem I/O-Pin ein Flipflop.
Ein Field Programmable Gate Array (FPGA, Abbildung 1) besteht ähnlich wie ein CPLD aus untereinander vernetzten Blöcken, die komplexer als bei CPLDs ausfallen (Flipflops und Lookup-Tabellen). Die Blöcke untereinander sind gegenüber dem CPLD feinmaschiger und mit SRAM-Technik verschaltet. Viele FPGAs stellen für den Programmierer zudem fertige Funktionsblöcke wie RAM, PLLs oder CPU-Kerne bereit.
Abbildung 1: Ein FPGA-Chip der Firma Altera (Quelle: Wikipedia).
Ein- und Ausgabe simulieren
Ein elektronisches Element kann man zunächst von außen schematisch als Block mit Ein- und Ausgängen betrachten, wie es das Beispiel einer kleinen CPU in Abbildung 2 skizziert. Ein beinahe überall existierender Eingang ist der Clock-Pin, also der Takt-Eingang. Das typische synchrone Design arbeitet generell mit einem Masterclock. Ein asynchrones Design hingegen evaluiert beliebige Eingänge wie auch momentane interne Zustände und erzeugt davon abhängige Ausgangssignale. Synchrone Designs sind weniger fehleranfällig und besser zu handhaben. Für eine einfache Simulation bedarf es
- einer Beschreibung des synchronen Masterclock-Signals »
clk«
und
- einer dazu möglicherweise synchrone Signalfolge oder auch Wellenform (des Stimulus).
Die einfache Simulation liefert als Resultat logischerweise wiederum eine Wellenform. Was dem Elektroniker sein Oszilloskop oder Logikanalyzer, ist für den mit der Simulation beauftragten HDL-Programmierer schlichtweg die Software, die aus der Simulation generierten Wellenform Daten visualisiert. Die extern eingespeisten Signale, wie Clock, sind für die Simulation Teil der Testbench.
Abbildung 2: Das Blockschema einer einfachen CPU, die es zu simulieren gilt.
Einfach zusammenstöpseln
Die TTL-Digitalbausteine mit ihren Gattern früherer Epochen finden heute in einzelnen oder zu einer Entity gruppierten funktionalen HDL-Beschreibungen ihre Entsprechung. Komplexere Bauteile, oft als Cores bezeichnet, sind auf verschiedenen Webseiten wie Opencores.org frei verfügbar. Der Computerbastler, der einfach mal gerne mehr über die Materie lernen möchte, kann sich also die einzelnen Bausteine herunterladen, sie virtuell mit Hilfe der HDL zusammenstöpseln und die Funktion der Hardware mit Hilfe der Simulation verstehen lernen.
Sobald die funktioniert und auch das Vertrauen in die simulierte Umgebung vorherrscht, wächst die Begehrlichkeit das Design auch auf Hardware mit echten Signalen laufen zu lassen – sei es als einfache PWM-Steuerung für die Regenbogen-Sauna-Beleuchtung oder als eigenen Crypto-Beschleuniger. Dazu fehlen noch die eigentlichen Simulations- und Synthesewerkzeuge. Für den Linux-User existiert seit Jahren eine ordentliche Auswahl an kostenlosen oder freien Tools in beiden Sprachenwelten. Tabelle 1 zeigt die für Einsteiger und Kostenbewusste relevanten Softwarepakete.
Linux-Simulationswerkzeuge