VHDL

VHDL

Information
Erste Version 1983
Letzte Version IEEE 1076-2008
Typ Hardwarebeschreibungssprache
Programmiersprache
Webseite www.vhdl.org

VHDL ist eine Hardwarebeschreibungssprache , die sowohl das Verhalten als auch die Architektur eines digitalen elektronischen Systems darstellen soll . Sein vollständiger Name ist VHSIC Hardware Description Language .

Der Vorteil einer solchen Beschreibung liegt in ihrem ausführbaren Charakter: Eine in VHDL beschriebene Spezifikation kann durch Simulation verifiziert werden, bevor das Detaildesign fertig gestellt ist. Darüber hinaus haben computergestützte Designtools , die es ermöglichen, direkt von einer Funktionsbeschreibung in VHDL zu einem Logikgatterdiagramm zu gelangen, die Designmethoden von digitalen Schaltungen, ASICs oder FPGAs revolutioniert .

Historisch

Die VHDL-Sprache wurde in den 1980er Jahren vom US-Verteidigungsministerium als Teil der VHSIC- Initiative in Auftrag gegeben . Aus Gründen der Rationalisierung verwendet die VHDL die gleiche Syntax wie die Sprache Ada (letztere wird auch vom Verteidigungsministerium entwickelt).

Die ursprüngliche Version von VHDL, IEEE- Standard 1076-1987 , enthielt eine Vielzahl von Datentypen, numerisch (integer, reell), logisch ( Bits , Boolean ), Zeichen, Zeit sowie Bit-Arrays und Strings.

Eines der Hauptprobleme war der Bittyp. Da dieser nur 2 Werte (0, 1) annehmen kann, war es unmöglich, die Signale mit unbekanntem Wert oder die Signale mit hoher Impedanz sowie die "Stärke" eines Signals (schwach, stark oder null) darzustellen ) . Der Standard IEEE 1164 definiert den std_logic-Typ mit 9 möglichen Zuständen. Dies wurde in VHDL-93 (zweite Version des IEEE 1076- Standards ) übernommen.

Um auf die vielfältigen Probleme der Elektronik zu reagieren, musste der VHDL-Standard weiterentwickelt werden. Das IEEE Design Automation Standards Committee (DASC) hat den Standard 1076.1 IEEE (1999) oder VHDL-AMS ( VHDL Analog and Mixed-Systems ) erstellt.

Dieser neue Standard ist eine Erweiterung des bereits existierenden Standards IEEE 1076-1987 . Es ermöglicht die Beschreibung und Simulation von analogen , digitalen und gemischten (analogen und digitalen) Schaltungen . Dazu verwendet es neben sequentiellen und nebenläufigen Befehlen eine neue Art von Befehlen, die „simultan“ genannt werden und den Wert von Gleichungen haben. In der Praxis implementieren immer mehr Simulatoren diese Erweiterung. Dagegen stecken die dazugehörigen analogen Synthesetools noch in den Kinderschuhen.

Positionierung in Bezug auf Verilog

Die Sprache Verilog , obwohl syntaktisch sehr unterschiedlich, diente ähnlichen Bedürfnissen. Tatsächlich besteht eine Quasi-Äquivalenz zwischen den beiden Sprachen, daher die Existenz zahlreicher Übersetzungsskripte von einer in die andere. VHDL ist heute die vorherrschende Hardware-Beschreibungssprache, die von europäischen Unternehmen verwendet wird, während Verilog oft über den Atlantik hinweg bevorzugt wird.

Einführung in VHDL

Simulation und Synthese

Der Zweck einer Hardwarebeschreibungssprache wie VHDL besteht darin, die Entwicklung einer digitalen Schaltung zu erleichtern, indem ein strenges Verfahren zum Beschreiben des Betriebs und der gewünschten Schaltungsarchitektur bereitgestellt wird. Die Idee ist, kein echtes Bauteil herstellen (schmelzen) zu müssen, sondern mit Entwicklungswerkzeugen den erwarteten Betrieb zu überprüfen. Diese Sprache ermöglicht die Verwendung von Simulatoren , deren Aufgabe es ist, die vom Designer beschriebene Operation zu testen.

Der nächste Schritt besteht darin, diese Hardwarebeschreibung zu synthetisieren, um eine Komponente zu erhalten, die die gewünschten Funktionen ausführt, unter Verwendung konkreter Logikelemente ( Logikgatter , Flipflops oder Register ). Diese werden je nach eingesetzter Technologie entweder direkt in Transistoren (im Falle eines ASICs ) oder auf Basis der programmierbaren Elemente von FPGAs implementiert . Nach der Synthese kommen die Phasen von:

Diese beiden Operationen müssen die verfügbaren Ressourcen auf dem ASIC (Oberfläche) oder im FPGA (programmierbare Einheiten) berücksichtigen.

Die VHDL hat eine Doppelfunktion (Simulation und Synthese), nur ein Teil der VHDL kann synthetisiert werden, der andere existiert nur zur Erleichterung der Simulation (Schreiben von Verhaltensmodellen und Prüfständen ). Je nach Hardwareunterstützung und verwendeter Synthesesoftware kann dieser Teil mehr oder weniger umfangreich sein. Um synthetisierbare und portable VHDL zu erhalten, muss man sich daher auf einfache Konstruktionen beschränken, deren Transkription in Gates und Flip-Flops leicht durchführbar ist. Der Standard 1076.6 wurde in dem Versuch initiiert, eine Untermenge von „synthetischen“ VHDLs zu definieren.

Sprache

Vhdl ist eine sehr nützliche Sprache. Die Syntax von VHDL ist der Sprache Ada entnommen , deren Schlüsselwörter an das Materialdesign angepasst wurden. Eine der Besonderheiten von VHDL besteht darin, dass es möglich ist, die innerhalb einer Schaltung vorhandene Parallelität leicht auszudrücken.

In VHDL wird jede Komponente (im Sinne von Software) unter zwei Aspekten beschrieben:

Daher ist es der Architekturabschnitt, der die Beschreibung der gewünschten Hardwarefunktion enthält:

Im letzteren Fall kann die Beschreibung nebenläufige Anweisungen verwenden , hauptsächlich unter Verwendung von definitiven Zuweisungen ( A <= B;was A liest B empfängt, aber einer permanenten Verbindung von Signal B zu Signal A entspricht) bedingt ( A <= B when condition else C;was bedeutet: A empfängt B, wenn die Bedingung wahr ist) , sonst C, aber jede Änderung von B, C oder der Bedingung hat eine sofortige und selektive Wirkung ( mit SelektorA <= B when valeur1, C when valeur2, D when others gleichzeitige Version des Schalter-Case- Selektors der Sprache C ). Wie der Name schon sagt, simulieren gleichzeitige Befehle die Parallelität der beschriebenen Schaltungen. Die Reihenfolge der gleichzeitigen Anweisungen hat keinen Einfluss auf die beschriebene Schaltung.

Wenn eine logische Funktion jedoch zu komplex ist, um durch eine gleichzeitige Anweisung beschrieben zu werden, kann sie durch eine algorithmische Beschreibung namens process ersetzt werden . Innerhalb dieser Prozesse sind die verwendeten Anweisungen diesmal sequentiell. Dies sind die klassischen Kontrollstrukturen von Programmiersprachen ( if-else, case-when, for / while ), die die Möglichkeit bieten, jeden Algorithmus zumindest in der Simulation zu implementieren.

Während der Simulation wird ein Prozess nur bei einem expliziten Trigger ausgeführt, ansonsten ist er inaktiv. Aus Hardwaresicht ist ein Prozess eine „Black Box“, von der nur das Verhalten, nicht aber die Struktur beschrieben wird. Aus Softwaresicht verhält sich ein Prozess wie eine Endlosschleife, deren jede Iteration durch eine Aktivität eines seiner Eingangssignale (in seiner Empfindlichkeitsliste enthalten) ausgelöst wird. Daher sind die for- und while-Anweisungen nicht für die Beschreibung von Zählern geeignet, im Gegensatz zu den gängigen Ansichten von VHDL-Anfängern.

Zwei Schwierigkeiten

Doppelbedeutung des Wortes "sequentiell"

Der „sequentielle“ Unterricht in einem Prozess steht im Gegensatz zum „gleichzeitigen“ Unterricht (außerhalb eines Prozesses ) und nicht dem kombinatorischen (für die beschriebene Logik), was bei Anfängern sehr häufig für Verwirrung sorgt. Tatsächlich kann man ein kombinatorisches System durch einen sequentiellen Algorithmus ( if A=1 then B <= C; else B<=0; end if;entspricht einem UND-Gatter) beschreiben, wie man eine sequentielle Schaltung durch einen gleichzeitigen Befehl ( Q <= Q when LE = '1' else D) beschreiben kann. Nur synchrone sequentielle Schaltungen (empfindlich auf die Flanken des Taktsignals) können nur mit einem an der Flanke des Takts aktivierten Algorithmus beschrieben werden.

Ein Signal ist keine Variable

In einem Prozess kann man Zuordnungen von Signalen oder Variablen finden. Im Gegensatz zu Variablen hat die Signalzuweisung keine unmittelbare Auswirkung. Sie können nur den zukünftigen Wert des Signals ändern. Standardmäßig ist davon der Wert betroffen, den dieses Signal beim nächsten Simulationsschritt annimmt, der erst nach Beendigung des Prozesses wirksam wird . Somit wird in einem Prozess nach fünf Befehlen A <= A+1;das Signal A nicht um 5 sondern nur um 1 erhöht. Es muss gelesen A.futur <= A.présent +1;werden, damit A. present nie verändert wird.

Unterschiede zu einer Programmiersprache

VHDL hat zwei Aspekte, die widersprüchlich sein können. Wenn es darum geht, ein Verhaltensmodell zu schreiben, das einfach simuliert wird, wird die Sprache kompiliert und dann vom Simulator ausgeführt. Auf der anderen Seite, wenn es darum geht, eine Schaltung zu beschreiben, die von einem Synthesizer erstellt wird, ist die Philosophie merklich anders. Das Synthesewerkzeug, das den gesamten gelieferten Code in eine Implementierung auf Basis von Logikgattern umwandeln muss, ist auf eine sehr strukturierte Arbeitsweise ausgelegt. Es ist notwendig, es mit einer klaren Beschreibung (deren Synthese der gewünschten Architektur entspricht) zu versehen und dabei so wenig spezifisch wie möglich zu sein (um dem Tool zu ermöglichen, die generierte Schaltung so weit wie möglich zu optimieren).

Wenn Sie beispielsweise eine kombinatorische Logikfunktion (unabhängig von einem Takt) generieren möchten, müssen jedem Prozessaufruf alle Ausgänge zugewiesen werden, da sonst das Synthesetool, da die nicht zugewiesenen Ausgänge ihren alten Wert behalten, D Flip - Flops am Ausgang jedes nicht betroffenen Ausgangs. Diese Lösung ist dann sehr schlecht, da sie die Funktion in eine synchrone Logikfunktion umwandelt, also abhängig von einem Takt (der außerdem vom Synthesewerkzeug spezifiziert wird, außerhalb der Kontrolle des Designers).

Dieser Unterschied bedeutet viel Arbeit vor und nach der Codierung, die beschriebene Schaltung muss vor der Codierung bereits durchdacht und nach dem Design unter Berücksichtigung der Anzahl der Gatter und der Layouteigenschaften verifiziert werden, um sicherzustellen, dass dass kein Beschreibungsfehler vorliegt. Diese sehr starken Einschränkungen für den Programmierer führen zur Annahme sehr strenger Verhaltensrichtlinien und Codierungsmethoden.

Diese großen Unterschiede mit einer Programmiersprache wie C machen VHDL zu einer eigenständigen Sprache, die näher an der Elektronik als an der Informatik liegt. Es ist auch nicht ungewöhnlich, Mikrocontroller-Architekturen auf FPGAs implementiert zu sehen , die im Rest des Projekts selbst in Assembler oder C programmiert sind.

Software zum Starten in VHDL

Integrierte Entwicklungsumgebung

Die großen Hersteller von programmierbaren Logikschaltungen bieten eine kostenlose, aber eingeschränkte Version ihrer Tools an.

Editor Produkt Lizenz Synthesizer Simulator Bemerkungen
Xilinx ISE-Webpack Besitzer, kostenlos, unbegrenzt Jawohl Jawohl Kostenloser ModelSim XE Starter Simulator
Altera Quartus II Web-Edition Inhaber, kostenlos, 6 Monate verlängerbar Jawohl Jawohl Kostenloser ModelSim Altera Starter Edition Simulator
Gitter ispHebelstarter Inhaber, kostenlos, 6 Monate verlängerbar Jawohl Jawohl Synthesizer: Synplify Pro for Lattice (kostenlos), Active-HDL Lattice Edition Simulator (kostenlos)
Tatsächlich Libero Eigentümer, kostenlos, 1 Jahr verlängerbar Jawohl Jawohl Synthesizer: Synplify Pro Actel Edition (kostenlos), ModelSim Actel Edition Simulator (kostenlos)
Nur Simulatoren
Aldec Aktiv-HDL-Studentenedition Inhaber, frei, 1 Jahr Dritte Seite Jawohl
Mentor-Grafik ModelSim PE Student Edition Besitzer, frei Nein Jawohl
Delphin-Integration ZERSCHLAGEN Besitzer, frei Nein Jawohl Kostenloser SMASH Discovery-Simulator (mit Beispielen in VHDL)

Texteditor

Die oben genannten Entwicklungsumgebungen erlauben alle die Eingabe einer VHDL-Datei, einige Texteditoren bieten jedoch erweiterte Funktionen wie Syntax-Highlighting , automatische Vervollständigung , Code-Folding oder sogar Makrobefehle . Dies ist bei der folgenden kostenlosen Software der Fall:

Beispiele für Beschreibungen in VHDL

Bonjour Monde

Einige Konzepte, wie zum Beispiel Dateien oder die Zeitskala, sind nur für die Modellierung eines elektronischen Bauteils sinnvoll und für das Bauteil selbst nicht zugänglich. Da auch die Darstellung einer Zeichenkette auf der Standardausgabe ein abstraktes Konzept ist, ist sie nur in der Simulation möglich.

-- Déclaration de l'entité entity hello_world is end entity hello_world; -- Déclaration de l'architecture architecture wiki of hello_world is begin -- Process affiche_texte affiche_texte: process is begin -- Afficher la chaine de caractère "Hello world !" sur la sortie standard du simulateur report "Hello world !"; -- Suspendre l'exécution du process wait; end process affiche_texte; end architecture wiki;

Blinklicht

Es gibt mehrere mögliche Beschreibungen einer Komponente, von der einer der Ausgänge nach einer bestimmten Zeit seinen Zustand ändert.

Beispiel einer synthetisierbaren Beschreibung -------------------------------------------------------------------------------- -- Liste des librairies et objets importés library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; -------------------------------------------------------------------------------- -- Déclaration de l'entité entity Clignotant is -- Paramètres passés lors de la génération (compilation ou synthèse) generic ( PERIODE : integer := 100000000; DUREE_ETAT_BAS : integer := 75000000 ); -- Entrées / sorties port ( CLK : in std_logic; RESET : in std_logic; LED : out std_logic ); end entity Clignotant; -------------------------------------------------------------------------------- architecture RTL of Clignotant is -- Déclaration des signaux utilisés dans l'implémentation signal Compteur_s : std_logic_vector(31 downto 0); begin -- Process synchrone "Compteur" Compteur: process(CLK) begin if rising_edge(CLK) then -- La suite est exécutée après chaque front montant de l'entrée CLK if (RESET = '1') then -- Reset actif à l'état haut Compteur_s <= (others => '0'); LED <= '0'; else if (Compteur_s < DUREE_ETAT_BAS) then -- Maintenir la LED éteinte LED <= '0'; else -- Allumer la LED LED <= '1'; end if; if (Compteur_s >= PERIODE) then -- Recommencer un cycle Compteur_s <= (others => '0'); else -- Continuer le cycle Compteur_s <= Compteur_s + 1; end if; end if; end if; end process Compteur; -- Fin du process "Compteur" end architecture RTL; -- Fin du fichier  

Ein 4-zu-1-Multiplexer (drei verschiedene konkurrierende Architekturen)

In VHDL müssen wir den Container vom Inhalt unterscheiden, der als Entität bzw. Architektur bezeichnet wird.

Die VHDL-Datei

Eine VHDL-Datei sollte immer den Namen der darin enthaltenen Entität tragen (dies ist eine Verwendungsregel, die der Übersichtlichkeit dient, bei manchen Software sogar obligatorisch). Seine Standarderweiterung ist ".vhd", obwohl manchmal ".vhdl" geschrieben wird. Zunächst müssen Sie die Verwendung der für das Projekt notwendigen Bibliotheken deklarieren:

-- En VHDL : une ligne de commentaires commence avec deux "-" -- Il est préférable de commencer par importer les bibliothèques VHDL standards normalisées par l'IEEE, -- car elles sont souvent nécessaires. library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all;

Die Bibliotheken std_logic_arith , std_logic_signed und std_logic_unsigned sind trotz ihrer Namen nicht vom IEEE standardisiert und von ihrer Verwendung wird dringend abgeraten. Tatsächlich ist es vorzuziehen, den Typ jedes Vektors, an dem eine Operation ausgeführt wird ( SIGNED oder UNSIGNED ) , explizit anzugeben , um seine arithmetische Behandlung zu spezifizieren. Das Verhalten von Operationen auf STD_LOGIC_VECTOR- Typen ist je nach aufgerufener Bibliothek unterschiedlich, was ihre Verwendung riskant macht.

Entität

Beschreibung der Schnittstelle (Entität) eines Multiplexers mit vier Eingängen:

-- Voici un exemple d’entité, décrivant les E/S utilisées -- par les trois exemples d’architectures purement concurrentes : -- -- ATTENTION, avec certains outils de CAO, l'entité doit avoir le même nom que le fichier (logique_4_vers_1.vhd) ENTITY logique_4_vers_1 IS PORT ( a : IN STD_LOGIC; b : IN STD_LOGIC; c : IN STD_LOGIC; d : IN STD_LOGIC; adr : IN STD_LOGIC_VECTOR (1 downto 0); s : OUT STD_LOGIC ); END logique_4_vers_1; Erste Architektur

Die erste Architektur, die es ermöglicht, diesen Multiplexer direkt zu beschreiben, verwendet eine Boolesche Formulierung, die in der Praxis nur für einfache Gleichungen verwendet werden kann. Mit dieser Methode können Sie jede beliebige kombinatorische Funktion schreiben.

-- Première architecture concurrente décrivant un mux : ARCHITECTURE mux_4_vers_1 OF logique_4_vers_1 IS BEGIN s <= ( a AND NOT adr(1) AND NOT adr(0) ) OR ( b AND NOT adr(1) AND adr(0) ) OR ( c AND adr(1) AND NOT adr(0) ) OR ( d AND adr(1) AND adr(0) ); END mux_4_vers_1; Zweite Architektur

Die zweite Architektur verwendet die Schlüsselwörter WITH , SELECT und WHEN . Die Verhaltenssimulation eines solchen Schreibens kann sich von der ersten unterscheiden, wenn die Eingaben auf X oder Z gesetzt sind .

-- Deuxième architecture concurrente décrivant un mux : ARCHITECTURE mux_4_vers_1 OF logique_4_vers_1 IS BEGIN WITH adr SELECT s <= a WHEN "00", b WHEN "01", c WHEN "10", d WHEN others; END mux_4_vers_1;

Die letzte Zeile ermöglicht es, alle nicht explizit behandelten Fälle in einer Zeile zusammenzufassen.

Dritte Architektur

Die dritte Architektur verwendet die Schlüsselwörter WHEN und ELSE .

-- Troisième architecture concurrente décrivant un mux : ARCHITECTURE mux_4_vers_1 OF logique_4_vers_1 IS BEGIN s <= a WHEN adr = "00" ELSE b WHEN adr = "01" ELSE c WHEN adr = "10" ELSE d; END mux_4_vers_1;

Sequentielle Architektur - ein D-Flip-Flop

Die Beschreibung einer sequentiellen Architektur, dh mit Hilfe einer zeitabhängigen Funktion (dh der Uhr) erfordert den Einsatz von Prozessen .

-- Architecture séquentielle pour une bascule D : ARCHITECTURE comport OF bascule_d IS BEGIN PROCESS (clk, reset) BEGIN IF reset = '1' THEN q <= '0'; ELSE IF clk'event AND clk = '1' THEN -- Moins bien que : IF rising_edge(clk) THEN q <= d; END IF; END IF; END process; END comport;

Anmerkungen

  1. VHSIC steht für Very High Speed ​​​​Integrated Circuit .
  2. (in) Peeter Ellervee Kalle Tammemäe VHDL - VHSIC Hardware Description Language [PDF] , Technische Universität Tallinn - Department of Computer Engineering, besucht am 24. September 2008
  3. http://www.univ-bpclermont.fr/FORMATIONS/Master/meam/cme/cme02.pdf [PDF] p.  30-47
  4. Xilinx ISE WebPACK
  5. Quartus II Web Edition-Softwareversion 7.2
  6. ispLEVER-Starter
  7. Libero
  8. Studenten - Active-HDL Student Edition
  9. ModelSim - Technische Ressourcen: ModelSim PE Student Edition Übersicht Student
  10. ZERSCHLAGEN

Siehe auch

Verwandte Artikel

Externe Links