Very High Speed Integrated Circuit Hardware Description Language
aus Wikipedia, der freien Enzyklopädie
Very High Speed Integrated Circuit Hardware Description Language (auch VHSIC Hardware Description Language), kurz VHDL, ist eine Hardwarebeschreibungssprache, vergleichbar mit einer Programmiersprache, mit der es einfach möglich ist, komplizierte digitale Systeme zu beschreiben. Darüber hinaus gibt es sprachliche Erweiterungen in Form von VHDL-AMS, mit welcher auch analoge Systeme beschrieben werden können.
Inhaltsverzeichnis |
[Bearbeiten] Geschichte
VHDL wurde in den frühen 80er Jahren entwickelt und ist 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. Der größte nordamerikanische Anwender, das US-Verteidigungsministerium (engl. Department of Defense), hat VHDL zum Durchbruch verholfen, indem es die Einhaltung der Syntax von VHDL als notwendige Voraussetzung für die Erteilung von Aufträgen gemacht hat. Es war das Ziel, Dokumentation zu vereinheitlichen und den Datenaustausch von komplexen digitalen Systemen zu ermöglichen. Die erste kommerzielle Version wurde 1985 veröffentlicht, sie entstand aus einer Zusammenarbeit von 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 Syntax vereinheitlicht und ergänzt, aber auch einige Konstrukte der alten Syntax entfernt sowie sogar die Semantik einzelner Konstrukte 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 elektrischer Simulation verlassen und auch mechanische Elemente, Sensoren und Aktoren modellieren, um zu einer möglichst vollständigen Systemsimulation zu gelangen.
[Bearbeiten] 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 Ingenieur bei allen Arbeiten.
So kann ein System simuliert, verifiziert und schließlich eine Netzliste erstellt werden.
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 "Quasi-Standard" innerhalb Europas entwickelt, Verilog ist dagegen die meist verwendete Sprache in den USA.
[Bearbeiten] 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 eine 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 Simulation 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 aufwendiger 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 bespielsweise 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.
Beispiel: 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
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: andere Architektur (Herstellerlibrary)
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;
[Bearbeiten] Simulation und Verifikation von VHDL-Code
Mittlerweile hat sich VHDL als Standard für die Simulationsmodelle von IP (Intellectual Property) durchgesetzt. 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, welche 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 Verhaltensimulation (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 ist 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.
Weiter kann zwischen Testbenches mit eigener Fehlererkennung und Testbenches, welche nur den reinen Zeitverlauf darstellen, unterschieden werden. Im ersten Fall werden im Testbench die zu bestehenden Prüfungen aufgrund von fixen Entscheidungen ("Prüfvektoren") festgelegt und automatisch durch entsprechende Textausgaben festgestellt. Die Erstellung solcher Testbenches ist aufwendiger, aber bietet mit den Vorteil, bei späteren Änderungen leichter die Veränderungen der Implementierung vollständig und sicher prüfen zu können (engl. regression test). Im zweiten Fall wird die zu simulierende Schaltung in ihrem Zeitverhalten (engl. wave diagram) nur dargestellt, ohne dass eine automatische Bewertung der Ausgabe durchgeführt wird. Die Entscheidung, ob das Verhalten der Schaltung passt oder nicht, obliegt jener Person welche dieses Zeitverhalten manuell überprüfen muss. Der Vorteil dieser Methode ist die Einfachheit bei der Erstellung der Testbenches, weshalb sie vor allem bei einfachen Schaltungen angewendet wird. Der Nachteil ist, dass dabei Fehler in der Implementierung durch die manuelle Prüfung leicht übersehen werden können, vor allem bei komplexen Schaltungen.
[Bearbeiten] Skelett eines VHDL- Bausteines
ENTITY Bausteinname IS GENERIC (Parameterliste, optional); - dieses Statement erlaubt die Übergabe modellabhängiger Parameter (z.B.: Verzögerungszeiten) an einem Baustein; PORT (Schnittstellenliste, optional); - hier werden die Signalschnittstellen des Bausteins nach außen definiert; folgende Modi sind möglich IN, OUT, INOUT, BUFFER; - an dieser Stelle können diverse Deklarationen vorgenommen werden, die in verschiedenen Architekturrümpfen benutzt werden können, dies sind unter anderem Unterprogramme, Typendeklarationen, Konstantendeklarationen und Signaldeklarationen; BEGIN (Anweisungen, optional); - hier können Anweisungen stehen, die für alle Architekturrümpfe durchzuführen sind; dies verkürzt die Architekturbeschreibung, denn Bausteindeklarationen aufgeführte Anweisungen müssen nicht mehr in den Architekturrümpfen stehen; END Bausteinname; - Ende der Bausteindeklaration
Architekturrumpf:
ARCHITECTURE Rumpfname OF Bausteinname IS - an dieser Stelle können optional diverse Deklarationen für Typen, Konstanten und Signale vorgenommen werden, im Gegensatz zu den Bausteindeklarationen sind diese hier nur für den vorliegenden Architekturrumpf gültig; BEGIN - Anweisungen, die das Verhalten oder die Struktur des Bausteins beschreiben; END Rumpfname;
[Bearbeiten] Unterschiede und Gemeinsamkeiten zu klassischen Programmiersprachen
- In einer Hardwarebeschreibungsprache wird der Aufbau einer physikalischen Schaltung modellhaft beschrieben. Entgegen der meisten bekannten Programmiersprachen, welche einen sequentiellen Ablauf einzelner Anweisungen festlegen, die von einem Prozess (meist ein einziger Prozessor) abgearbeitet wird, gleicht VHDL mehr den objektorientierten Sprachen, mit denen Module beschrieben werden, die quasi gleichzeitig existent sind und simultan arbeiten.
- Es gibt verschiedene Arten von Modulen: Komponenten (engl. 'Component') welche einzelne Schaltungsblöcke mit ihren Ein- und Ausgängen beschreiben, Prozeduren (engl. 'procedure') welche funktionelle Abschnitte als Anweisungsfolge festlegen und Funktionen welche Anweisungsfolgen zusammenfassen.
- Es gibt mehrere Arten der Datenübertragung und Speicherung. Unter anderem die bei VHDL wesentlich voneinander zu unterscheidenden sogenannten Signale, welche der Verknüpfung einzelner, paralleler Module dienen, und die sogenannten Variablen welche innerhalb von sequentiellen Anweisungsfolgen wie Prozessen und Prozeduren verwendet werden können. Die Typisierung ist davon unabhängig: So kann sowohl eine Variable vom Typ integer sein, als auch ein Signal vom Typ integer.
Diese Erweiterung ist deswegen notwendig, weil in Hardwarebeschreibungssprachen wie VHDL nicht nur sequentielle Abläufe wie in einer Software-Programmiersprache beschrieben werden. Variablen können daher in VHDL nur in sequentiellen Abschnitten wie einem Prozess verwendet werden, während Signale der Informationsübermittlung zwischen einzelnen nebenläufigen (=parallel ablaufenden) Funktionsblöcken dienen.Der funktionalle Unterschied zwischen Signalen und Variablen besteht weiters darin, dass Signale ihren neuen Zustand erst am Ende eines sequentuiellen Prozesses annehmen, während Variablen ein Verhalten ähnlich wie bei Programmiersprachen zeigen und Zuweisungen unmittelbar wirken. Dieser Umstand ist vor allem für Anfänger meist verwirrend.
- Das Hinzufügen weiterer Komponenten in VHDL führt primär zu erhöhtem Platzbedarf und beeinträchtigt die zeitliche Abarbeitung bereits existenter Module praktisch nicht. Die zusätzlich generierte Hardware arbeitet voll parallel, während Module in Programmen immer Rechenzeit beanspruchen.
[Bearbeiten] VHDL für analoge Schaltungen, VHDL-AMS
Seit 1999 laufen im Rahmen der IEEE verschiedene Bestrebungen, VHDL auch für die Simulation und künftig auch Synthese von analogen und gemischt analog-digitalen Schaltungen einzusetzen. Die Bezeichnung für diese erweitere Sprache ist VHDL-AMS und im Standard IEEE 1076.1-1999 definiert.
Im Rahmen von VHDL-AMS können beispielsweise analoge Temperatursensoren mit ihren elektrischen Signalverhalten als Funktion der Temperatur an den Anschlussklemmen modelliert werden. Ebenso besteht die Möglichkeit, in VHDL-AMS Differentialgleichungen zur Beschreibung von elektrischen Netzwerkelementen wie Spulen oder Kondensatoren zu modellieren.
Derzeit sind allerdings keine Synthesetools für die Schaltungen welche in VHDL-AMS beschrieben sind erhältlich. Lediglich für die Schaltungssimulation sind bereits verschiedene kommerzielle Softwarepakete wie ADV-MS von Mentor Graphics am Markt verfügbar. Diese Simulationsprogramme sind vor allem als Konkurrenz zu etablierten analogen Schaltungssimulationsprogrammen wie beispielsweise SPICE zu sehen.
[Bearbeiten] VHDL-Editoren
- Crimson Editor (Win)
- Emacs (Alle Platformen)
- Notepad++ (Win GPL)
- jEdit (Alle Plattformen)
- jGRASP (Alle Plattformen)
Darüber hinaus gibt es für viele gängige Editoren wie vi und auch IDEs wie Eclipse Zusatzpakete für VHDL-Unterstützung.
[Bearbeiten] Siehe auch
- VLSI (Very large scale integration)
- LSI (Large scale integration)
- JHDL (Just Another Hardware Definition Language)
- ASIC (Application Specific Integrated Circuit)
- IP-Hersteller
- ABEL
- Java Hardware Definition Language
- SystemC
[Bearbeiten] Literatur
- Jürgen Reichardt: VHDL-Synthese, Entwurf digitaler Schaltungen und Systeme, München: Oldenbourg 2003. ISBN 3-486-27384-1
- Peter J. Ashenden: The Designer's Guide to VHDL, San Francisco: Morgan Kaufmann Publishers 2002. ISBN 1-55860-674-2
- Yannick Herve: VHDL-AMS, München: Oldenbourg 2006. ISBN 3-486-57787-5
[Bearbeiten] Weblinks
- http://www.nt-nv.fh-koeln.de/Labor/VhdlEasy/inhalt.html Einführung in VHDL
- http://mesl.ucsd.edu/spark/ "C nach VHDL"-Compiler
- http://ghdl.free.fr/ GHDL (freier VHDL-Simulator)
- http://www.FlowCAD.de/ Cadence NC-Sim (VHDL-Simulator)
- http://www.mentor.com/ Mentor Modelsim (VHDL-Simulator)
- http://signs.sf.net/ Signs (freies Synthese- und Simulationstool für eine Untermenge von VHDL)
- http://tams-www.informatik.uni-hamburg.de/research/vlsi/vhdl "the Hamburg VHDL archive"
- http://www.vhdl-online.de/ Online Tutorial
- http://wiki.ittc.ku.edu/hybridthread/Learn_VHDL VHDL Wiki im Aufbau