Hardware Description Language
Englisch: hardware description language
Eine Sprache aus einer Klasse von Computer-, Modellierungs- oder Spezifikationssprachen zur formalen Beschreibung und zum Entwurf analoger oder digitaler logischer elektronischer Schaltungen.
HDL: Code, das Schaltungen beschreibt, anstatt sie auszuführen
Eine Hardware-Beschreibungssprache ist eine formale Notation zur Spezifikation der Struktur und des Verhaltens elektronischer Schaltungen, bevor sie gebaut werden. Im Gegensatz zu konventionellen Programmiersprachen, die sequenziell auf einem Prozessor ausgeführt werden, beschreiben HDLs, was eine Schaltung ist, anstatt was sie tut. Die Beschreibung kann in echte Hardware synthetisiert werden, normalerweise in eine Konfiguration für ein programmierbares Logik-Gatter (FPGA) oder als Eingabe für ein Place-and-Route-Tool für einen anwendungsspezifischen integrierten Schaltkreis (ASIC).
Die zwei dominanten HDLs in industrieller Verwendung sind Verilog und VHDL. Verilog entstand in den 1980er Jahren als proprietäre Sprache, bevor es als IEEE-Standard freigegeben wurde; es hat eine Syntax, die lose an C erinnert, und wird in vielen amerikanischen Designbüros und Halbleiterfirmen bevorzugt. VHDL, 1987 von IEEE standardisiert, hat eine Ada-ähnliche Syntax und ist ausführlicher; es ist in der Verteidigungs-, Luft- und Raumfahrt sowie in europäischen Industriesektoren fest verankert. Beide können Schaltungen auf mehreren Abstraktionsebenen beschreiben: auf der Register-Transfer-Ebene (RTL), wo das Verhalten in Form von Signalen und Zustandsübergängen ausgedrückt wird; auf der Gate-Ebene, die einzelne Logikgatter und ihre Verbindungen spezifiziert; oder verhaltensorientiert als algorithmische Beschreibungen.
Simulation und Synthese
Der grundlegende Wert einer HDL besteht darin, dass ein Designverfasser die Schaltung simulieren kann, bevor er sich auf die Fertigung festlegt. Ein Logik-Simulator liest die HDL-Beschreibung und evaluiert, wie die Schaltung über die Zeit hinweg auf Eingabereize antwortet. Diese Simulation kann Timing-Verletzungen, logische Fehler und Race Conditions aufdecken, die sonst Wochen an Breadboarding oder Prototypen-Durchläufen kosten würden. Sobald die Simulation erfolgreich ist, wird der HDL-Quellcode an ein Synthesetool eingefügt, das die Beschreibung optimiert und auf die verfügbaren Logik-Ressourcen des Zielgeräts abbildet. Synthesetools führen Logik-Minimierung, Technology Mapping und Place-and-Route durch und erzeugen Netlist und Konfigurationsbitströme.
Eine häufige Falle besteht darin, HDL zu schreiben, die sich korrekt simuliert, aber sich in Hardware synthetisiert, die sich anders verhält. Dies entsteht oft aus HDL-Konstrukten, die kein physisches Äquivalent haben: eine for-Schleife in verhaltensorientiertem Code muss sich bei der Synthese vollständig in parallele Logik entfalten, was deutlich mehr Fläche verbrauchen kann als der Designverfasser erwartet hat. Ebenso unterscheiden sich die Semantiken der Signalzuweisung zwischen Simulationsmodi und Synthese; blockierende und nicht-blockierende Zuweisungen in Verilog sind berüchtigte Fehlerquellen, die Simulation bestehen, aber in Hardware fehlschlagen.
Der Name Hardware-Beschreibungssprache spiegelt wider, dass diese Tools Hardware-Konfigurationen beschreiben, keine auszuführenden Algorithmen. Die Grenze zwischen HDL-Design und Software-Entwicklung ist real: Ein Embedded-Software-Entwickler, der C für einen Mikrokontroller schreibt, löst Rechenproblem, während ein HDL-Designer kombinatorische und sequenzielle Logik zusammensetzt, die parallel ausgeführt wird. Moderne EDA-Flows (Electronic Design Automation) integrieren beide; ein FPGA-Design kann einen Soft-Prozessor-Kern (selbst in HDL beschrieben) enthalten, auf dem eingebetteter C-Code neben handgefertigten Logik-Blöcken läuft, alles in einem einheitlichen HDL-Projekt spezifiziert.