Very High Speed Integrated Circuit Hardware Description Language (auch VHSIC Hardware Description Language), kurz VHDL, ist eine Hardwarebeschreibungssprache, mit der es möglich ist, digitale Systeme textbasiert zu beschreiben. VHDL ist seit 1987 als IEEE-Standard festgelegt und es gibt inzwischen einige ebenfalls standardisierte Spracherweiterungen. Darüber hinaus gibt es Sprachderivate wie zum Beispiel VHDL-AMS, mit deren Hilfe auch analoge oder Mixed-Signal-Systeme beschrieben werden können.

VHDL ist als Beschreibungssprache keine Programmiersprache; da sie jedoch Objekte beschreibt, deren Aufgabe meist die Informationsverarbeitung ist, kann über deren Simulation dennoch Datenverarbeitung stattfinden, indem für diesen Simulationslauf mitgegebene „Eingangsdaten“ von der (simulierten) Hardware zu „Ergebnisdaten“ verarbeitet werden. Durch diesen Umweg kann VHDL (in Kombination mit einem Simulator) wie eine Programmiersprache Turing-vollständige Datenverarbeitung beschreiben.

Durch fortschrittliche Schaltungsgeneratoren ist es mitunter sogar möglich, anstatt des Hardwareaufbaus für einen Algorithmus nur den Algorithmus selbst anzugeben; die dazugehörige Schaltung wird vollautomatisch erzeugt. Dies nähert VHDL einer Programmiersprache weiter an.

Geschichte VHDL entstand im Rahmen der VHSIC-Initiative, die von der US-amerikanischen Regierung 1980 aufgesetzt wurde, um einen gegenüber der Privatwirtschaft entstandenen Technologierückstand bei der Entwicklung von Very High Speed Integrated Circuits aufzuholen.VHSIC Program Office: Very High Speed Integrated Circuits - VHSIC - Final Program Report 1980-1990 vom 30. September 1990. Website des Defense Technical Information Centers. Abgerufen am 15. Januar 2011. Die Sprachdefinition war das Produkt von Normierungsbestrebungen eines Komitees, in dem die meisten größeren CAD-Anbieter und CAD-Nutzer, aber auch Vereinigungen wie die IEEE, vertreten waren. Als großer nordamerikanischer Auftraggeber hat dann das US-Verteidigungsministerium (engl. Department of Defense) VHDL zum Durchbruch verholfen. Es forderte, dass alle in ihrem Auftrag nach dem 30. September 1988 entwickelten ASICs in VHDL dokumentiert werden müssten. Es wurde aber nur gefordert, dass wirklichkeitsgetreue Verhaltensbeschreibungen in VHDL entstehen müssten. Die Implementierungssprache – sei es VHDL, VerilogHDL oder die bis dahin übliche grafische Eingabe – blieb für die Auftragnehmer offen. Ziel war es, mindestens die Schaltungs-Dokumentation zu vereinheitlichen und die Simulation komplexer digitaler Systembeschreibungen aus verschiedensten Quellen zu ermöglichen. Die erste kommerzielle Version wurde 1985 veröffentlicht. Sie entstand aus einer Zusammenarbeit der Unternehmen IBM, Texas Instruments und Intermetrics.

VHDL ist durch den IEEE-1076-Standard von 1993 genormt. Gegenüber dem ersten Standard von 1987 (IEEE 1076-1987) wurde die Sprache ergänzt, aber auch einige Konstrukte der alten Syntax entfernt und in wenigen Einzelfällen die Semantik von Konstrukten verändert.

Eine Erweiterung der Beschreibung auf den analogen Bereich elektrischer Systeme wurde mit AHDL erzielt. Derzeit gibt es Bestrebungen, eine allgemeine Sprache zur Beschreibung technischer Systeme zu schaffen – siehe VHDL-AMS (VHDL analog/mixed signal). Diese soll den Rahmen der rein elektronischen Schaltungen verlassen und zusätzlich mechanische Elemente, Sensoren und Aktoren modellieren, um auch diese mit in einer Systemsimulation erfassen zu können.

Aktuelle EDA-Tools unterstützen derzeit die Version VHDL-2002 und VHDL-2008.

Funktionsweise Bei VHDL arbeitet man nicht mit einzelnen elektronischen Bauteilen, sondern beschreibt das gewünschte Verhalten einer Schaltung auf einer höheren Abstraktionsebene. VHDL ermöglicht das schnelle Entwickeln großer und komplexer Schaltungen (z. B. Mikroprozessor mit über 20 Mio. Transistoren), die hohe Effizienz erfordern (zeitlich wie ökonomisch) und unterstützt den Entwickler bei allen Arbeiten.

So kann ein System simuliert, synthetisiert und schließlich eine Netzliste erstellt werden. Eine Verifikation ist sowohl durch vollständige Simulation als auch formal möglich.

Aus der Netzliste können Masken für die Herstellung von MPGAs (mask programmable gate array) oder ähnlichen LSI (Large scale integration)-Chips produziert werden oder sie kann (nach Konvertierung in einen geeigneten Bitstream) direkt in ein FPGA (Field Programmable Gate Array) oder CPLD (Complex Programmable Logic Device) geladen werden.

Neben VHDL existieren Verilog und ABEL. Die weltweit meist genutzten Hardwarebeschreibungssprachen sind VHDL und Verilog.

VHDL hat sich zum „Quasistandard“ in Europa entwickelt, in den USA ist dagegen Verilog die meist verwendete Sprache.

Synthesefähiger und funktionaler VHDL-Code Es ist notwendig, zwischen synthesefähigem und funktionalem Code zu unterscheiden, weil es Konstrukte gibt, die sich zwar simulieren lassen, aber nicht in reale Hardware und damit in eine Netzliste übersetzt werden können. Was aus dem breiten Spektrum an funktionalem VHDL-Code tatsächlich synthesefähiger VHDL-Code ist, bestimmt primär das zur VHDL-Synthese gewählte Übersetzungsprogramm (Synthesetool). Funktionaler, nicht synthesefähiger Code wird vor allem im Bereich der Schaltungssimulation und zur Erstellung sogenannter Testbenches eingesetzt, teilweise auch, um neue Verfahren wie beispielsweise das Verhalten von Schnittstellenprotokollen vorab zu prüfen.

Synthesefähigen VHDL-Code herzustellen, ist im Regelfall aufwändiger und der Entwickler muss dabei auf große Teile der Sprachmöglichkeiten von VHDL bewusst verzichten und die Zielhardware und deren genauen Eigenschaften näher kennen. So ist beispielsweise VHDL-Code zur Ein- und Ausgabe über das Betriebssystem (textio) wie dem Schreiben und Lesen von Dateien oder auch die Ausgabe von Texten auf den Bildschirm nicht synthesefähig.

CodebeispieleBeispiel: D-Flipflop (behavioural) nicht synthetisierbar ENTITY DFlipflop IS PORT(D,Clk: IN Bit; Q: OUT Bit); END DFlipflop; ARCHITECTURE Behav OF DFlipflop IS CONSTANT T_Clk_Q: time := 4.23 ns; BEGIN PROCESS BEGIN WAIT UNTIL Clk'EVENT AND Clk'Last_Value='0' AND Clk='1'; Q <= D AFTER T_Clk_Q; END PROCESS; END Behav; Beispiel: D-Flipflop (behavioural) synthetisierbar, aber "AFTER T_Clk_Q" wird ignoriert ENTITY DFlipflop IS PORT(D,Clk: IN Bit; Q: OUT Bit); END DFlipflop; ARCHITECTURE Behav OF DFlipflop IS CONSTANT T_Clk_Q: time := 4.23 ns; BEGIN PROCESS BEGIN WAIT UNTIL Clk'EVENT AND Clk='1'; Q <= D AFTER T_Clk_Q; END PROCESS; END Behav; Beispiel: D-Flipflop (behavioural) synthetisierbar, asynchroner Reset ENTITY DFlipflop IS PORT(D,Clk, nResetAsync: IN Bit; Q: OUT Bit); END DFlipflop; ARCHITECTURE Behav OF DFlipflop IS BEGIN PROCESS(Clk,nResetAsync) BEGIN IF nResetAsync = '0' THEN Q <= '0'; ELSIF Clk'EVENT AND Clk = '1' THEN Q <= D; END IF; END PROCESS; END Behav; Beispiel: D-Flipflop (behavioural) synthetisierbar, synchroner Reset ENTITY DFlipflop IS PORT(D,Clk, nResetSync: IN Bit; Q: OUT Bit); END DFlipflop; ARCHITECTURE Behav OF DFlipflop IS BEGIN PROCESS(Clk) BEGIN IF Clk'EVENT AND Clk = '1' THEN IF nResetSync = '0' THEN Q <= '0'; ELSE Q <= D; END IF; END IF; END PROCESS; END Behav; Beispiel: Andere Architektur (Herstellerbibliothek) LIBRARY VendorLib; ARCHITECTURE Vendor OF DFlipflop IS COMPONENT Dff PORT(D, Clk: IN Bit; Qout: OUT Bit); END COMPONENT; BEGIN Ff1: Dff PORT MAP (D => D , Clk => Clk, Qout => Q); FOR ALL : Dff USE ENTITY VendorLib.Component.Dff; END Vendor;

Simulation und Verifikation von VHDL-Code

Mittlerweile ist VHDL praktisch der Standard für die Beschreibung der Simulationsmodelle von Intellectual Property (IP). In einem Simulationsmodell wird der eigentlich zu testende und synthesefähige VHDL-Code bzw. VHDL-Modul eingebettet und die Hardware darum in einem sogenannten ‚Test-Bench‘ möglichst getreu nachgebildet. Das Simulationsmodell wird dabei meistens in nicht synthetisierbarem VHDL verfasst, was das Modellieren des Zeitverhaltens oder bestimmter physikalischer Parameter der externen Schaltungsteile erlaubt.

Ein Beispiel soll diesen Vorgang erläutern:

Bei der Erstellung eines SDRAM-Controllers, einer Schaltung zum Ansteuern von SDRAM-Speichermodulen, wird das SDRAM mit seinem Speicher und sein zeitliches Verhalten im Simulationsmodell möglichst genau wie die reale SDRAM-Hardware nachgebildet. Damit kann der Controller in seiner logischen Funktion simuliert und auch das Verhalten in den zeitlichen Extrembedingungen verifiziert werden, ohne dass dafür reale Hardware notwendig wäre. Bei Bedarf wird der SDRAM-Controller funktionell entsprechend nachgebessert, um die Simulationsrandbedingungen zu erfüllen. Erst wenn diese Simulation erfolgreich war, wird der so erstellte SDRAM-Controller auf Hardware, beispielsweise in einem FPGA, in Kombination mit ‚echten‘ SDRAM-Bausteinen in Betrieb genommen. Damit ist der Entwicklungsprozess von IP-Cores weitgehend unabhängig von konkreter Hardware.

Die Erstellung von guten Testbenches, die entsprechende Aussagen zulassen, ist dabei eine meist unterschätzte Aufgabenstellung, die ca. 50 % der gesamten Entwicklungszeit für IP-Cores ausmacht. Sie ist aber, neben systematischem Vorgehen in der Entwicklung, wesentlich effizienter als frühzeitig mit meist nicht auf Anhieb funktionierenden Schaltungsteilen auf reale Hardware zu gehen – die dann nur schwer und umständlich in allen ihren Parametern verifiziert werden können.

Weiter unterscheidet man bei der Simulation unterschiedliche Simulationsarten:

Eine reine Verhaltenssimulation (engl. behavioral simulation) des zu implementierenden IP-Core. Dabei werden die funktionellen Zusammenhänge in der Schaltung grundsätzlich geprüft. Beispielsweise ob logische Verknüpfungen einzelner Signale passen. Der Vorteil besteht im geringen Rechenaufwand, womit zeitlich längere Abschnitte simuliert werden können. Eine Simulation des fertig platzierten IP-Core (engl. post-fit simulation). Dabei wird der IP-Core zunächst synthetisiert, geroutet und platziert, dann werden aus der fertigen Schaltungsanordnung die Netzliste und die zugehörigen Laufzeitinformationen der Zielhardware ermittelt. Die Anwendung der Laufzeitparameter auf den VHDL-Code (engl. back annotation) wird entweder von entsprechenden Werkzeugen übernommen, die daraus nicht synthetisierbaren VHDL-Code erzeugen, oder sie geschieht unmittelbar im Simulationsprogramm. Der Vorteil besteht in dem genaueren Modell, um beispielsweise Zeitablaufprobleme in der Zielhardware bereits in der Simulation erkennen zu können. Nachteilig sind der damit verbundene hohe Rechenaufwand und die auch auf schnellen Rechnern sehr langen Simulationszeiten, die sich je nach Komplexität der Schaltung im Bereich von einigen Tagen bewegen können.