3. Bausteine der Sprache VHDL

3.1 Zeichensatz

Der in VHDL (Version 87) verwendete Zeichensatz besteht aus 128 Zeichen (ISO 83) einschließlich einiger Sonderzeichen (gezeigt an der Typdeklaration character ):

   TYPE character IS (

NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL,
BS, HT, LF, VT, FF, CR, SO, SI,
DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB,
CAN, EM, SUB, ESC, FSP, GSP, RSP, USP,
' ', '!', '"', '#', '$', '%', '&', ''',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\', ']', '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', DEL

);

3.2 Lexikalische Elemente

Lexikalische Elemente sind Kombinationen von Einzelzeichen (character) aus dem Zeichensatzvorrat.

Folgende lexikalische Elemente sind zu unterscheiden (Beispiele in Bild 7):

  • Kommentare stehen nach dem Kommentarzeichen "-- " und werden vom Simulator ignoriert.
  • Bezeichner (Identifier) sind Zeichenketten, bestehend aus Buchstaben, Sonderzeichen und Ziffern, beginnend mit einem Buchstaben.
  • Schlüsselwörter sind reservierte Wörter der VHDL-Syntax. Sie dürfen nicht als Identifier verwendet werden!
       ABS     ACCESS      AFTER       ALIAS       ALL
    AND ARCHITECTURE ARRAY ASERT ATTRIBUTE
    BEGIN BLOCK BODY BUFFER BUS
    CASE COMPONENT CONFIGURATION CONSTANT DISCONNECT
    DOWNTO ELSE ELSIF END ENTITY
    EXIT FILE FOR FUNCTION GENERATE
    GENERIC GUARDED IF IN INOUT
    IS LABEL LIBRARY LINKAGE LOOP
    MAP MOD NAND NEW NEXT
    NOR NOT NULL OF ON
    OPEN OR OTHERS OUT PACKAGE
    PORT PROCEDURE PROCESS RANGE RECORD
    REGISTER REM REPORT RETURN SELECT
    SEVERITY SIGNAL SUBTYPE THEN TO
    TRANSPORT TYPE UNITS UNTIL USE
    VARIABLE WAIT WHEN WHILE WITH
    XOR
  • Begrenzungszeichen sind neben dem Leerzeichen sämtliche mathematische und logische Operatoren, Klammern und das Kommentarzeichen.
  • Einzelzeichen (Character) sind Elemente des Zeichensatzes und stehen in einfachen Hochkommata.
  • Zeichenketten (String) sind Kombinationen aus beliebigen Einzelzeichen, in Anführungszeichen stehend.
  • Integerzahlen sind ganze Zahlen in Exponentialschreibweise. Zur Übersicht können Unterstriche ("_ ") eingefügt werden.
  • Reelle Zahlen sind Fließkommazahlen in Exponentialschreibweise. Auch hier sind Unterstriche möglich.
  • Zahlenwerte zu von 10 verschiedener Basis stehen innerhalb von "# "-Zeichen. Die Basis ( 2, 8, 16) wird vorangestellt.
  • Bit-Strings stehen in Anführungsstrichen. Die Basis (B = bit, O = oktal, X = hexadezimal) wird vorangestellt (Defaultwert ist B ).
  • Physikalische Größen bestehen aus Zahlenwert und Einheit. Die Einheit ist nicht auf Basiseinheiten beschränkt, sondern kann auch davon abgeleitet sein.

 

3.3 Sprachkonstrukte

Kombinationen von lexikalischen Elementen der Sprache VHDL, die eine bestimmte syntaktische Bedeutung besitzen, nennt man Sprachkonstrukte. Man unterscheidet hierbei zwischen folgenden Gruppen:

3.3.1 Primitive

Primitive stellen einen Wert dar. Dies kann durch Angabe von einzelnen Operanden oder durch Ausdrücke, bestehend aus Operanden und Operatoren geschehen.

Operanden

Operanden können von folgender Art sein:

  • Explizite Größenangaben: numerische Größen, Zeichen und Zeichenketten sowie Bit-Strings; sie können direkt als Operanden eingesetzt werden.
  • Bezeichner: Referenzname eines Objektes ("identifier").
  • Attribute: sie dienen zur Abfrage bestimmter Eigenschaften von Objekten.
  • Aggregate: im Englischen "aggregates"; sie kombinieren einen oder mehrere Werte in einem Feldtyp ("array") oder zusammengesetzten Typ ("record").
  • Qualifizierte Ausdrücke ("qualified expressions"): sie dienen zur expliziten Festlegung des Datentyps bei Operanden, die mehreren Typen entsprechen können. Die Syntax hierfür lautet:

    type_name'(ambiguous_operand_expression )

  • Funktionsaufrufe
  • Typumwandlungen

Operatoren

Ohne zusätzliche Definitionen kennt man in VHDL folgende Operatoren, die in Gruppen mit gleicher Priorität eingeteilt sind. Die Priorität der Gruppen (entsprechend der nachfolgenden Aufzählung) regelt die Abarbeitung mehrerer Operatoren.

  • Diverse Operatoren ( ** ABS NOT )
  • Multiplizierende Operatoren ( * / MOD REM )
  • Signum-Operatoren ( + - )
  • Addierende Operatoren ( + - & )
  • Vergleichsoperatoren ( = /= < <= > >= )
  • Logische Operatoren (AND NAND OR NOR XOR )

3.3.2 Kommentare

Kommentare in der Sprache VHDL stehen nach dem Kommentarzeichen (doppelter Bindestrich, "-- "). Kommentare können bereits am Anfang einer Zeile beginnen oder nach VHDL-Anweisungen stehen. Der Kommentar reicht immer bis zum Ende der aktuellen Zeile.

3.3.3 Anweisungen

Deklarationsanweisungen

Diese Gruppe dient zur Deklaration von Datentypen, Objekten, Unterprogrammen und Attributen. Dazu gehören die folgenden Anweisungen:

       ALIAS     ATTRIBUTE   COMPONENT   CONSTANT 

FILE FUNCTION PROCEDURE SIGNAL

SUBTYPE TYPE USE VARIABLE

Sequentielle Anweisungen

Sequentielle Anweisungen dienen zur Beschreibung prozeduraler Vorgänge und sind den Konstrukten von höheren Programmiersprachen ähnlich:

       Signalzuweisungen     Variablenzuweisungen

ASSERT CASE EXIT IF

LOOP NEXT NULL RETURN

WAIT Prozeduraufruf

Nebenläufige Anweisungen

Nebenläufige (oder parallele) Anweisungen sollen das spezielle Verhalten von Hardware (parallel arbeitende Funktionseinheiten) nachbilden. Zu den nebenläufigen Anweisungen zählen:

       Signalzuweisungen     ASSERT     BLOCK

GENERATE PROCESS Prozeduraufruf

Komponenteninstantiierung

Konfigurationsanweisungen

Bei strukturalen (aus Untermodellen aufgebauten) Modellen muß festgelegt werden, welche Modelle aus den Bibliotheken für die einzelnen Instanzen verwendet werden, wie sie zu verdrahten sind und welche Parameter an sie übergeben werden. Dies geschieht durch sog. Konfigurationsanweisungen. Bei Verhaltensmodellen ist lediglich die gewünschte Architektur auszuwählen.

3.3.4 Syntaktische Rahmen

Einzelne Design-Einheiten benötigen eine gewissen Rahmenstruktur. Diese wird durch sog. syntaktische Rahmen gegeben für die folgenden Design-Einheiten:

       ENTITY    ARCHITECTURE  CONFIGURATION

PACKAGE PACKAGE BODY

3.3.5 Kontextbefehle

Kontextbefehle stehen vor den Design-Einheiten und legen fest, welche Bibliotheken verwendet werden und welche Bibliothekselemente direkt sichtbar sind. Es handelt sich hierbei um die LIBRARY - und die USE -Anweisung.