Prof. Dr. F. Schubert -...

140
VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F. Schubert Fachhochschule Hamburg Fachbereich Elektrotechnik und Informatik Informationstechnik VHDL-SYNTAX

Transcript of Prof. Dr. F. Schubert -...

Page 1: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

05/2001 Pnr, Rch, Sbr, Swr

Prof. Dr. F. SchubertFachhochschule Hamburg

Fachbereich Elektrotechnik und Informatik

Informationstechnik

VHDL-SYNTAX

Page 2: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

Erläuterungen:

Groß geschrieben: Selbsdefinierte Namen

z.B. VADD, CARRY_IN, TD

Klein geschrieben und fett gedruckt:

VHDL-Schlüsselwort oder -Zeichen

z.B. entity, all, nand, is, std_ulogic, :=, <=

In eckigen Klammern [ ]: optional

z.B. [use <Libraryname>],[<Komponentenkonfiguration>]

In spitzen Klammern < >: Bezeichnungen

z.B. <Libraryname>, <Komponentenkonfiguration>

In geschweiften Klammern { }: beliebig oft wiederholbar

Alternativen werden durch einen Vertikalstrich | getrennt

Hochgestellte „93“ bedeutet, daß das VHDL-Schlüsselwort nichtin VHDL-87 sondern nur in VHDL-93 definiert ist:

z.B. group 93

Page 3: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

Struktur von VHDL-Modellen

1.) Empfohlene Grundstruktur ohne Komponenten

-- use- und library-Deklarationen

{[use . . . ;]}

{[library . . . ;]}

{[use . . . ; }

-- entity

entity . . . is

[generic(. . .);]

port(. . .);

end . . . ;

-- architecture

architecture . . . of . . . is

{[type . . . ;]} -- Typ- und Signal-Deklarationen

{[subtype . . . ;]} -- innerhalb der Architektur

{[attribute . . . ;]}

{[constant . . . ;]}

{[signal . . . ;]}

{[function . . . ;]} -- Funktions- und Prozedur-{[procedure . . . ;]} -- Deklarationen

Page 4: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

begin

{[<nebenläufige Anweisung>]}

{[<Prozess-Name>]: [process(. . .)

{[type . . . ;]} -- Typ- und Variablen-

{[subtype . . . ;]} -- Deklarationen innerhalb des

{[variable . . . ;]} -- Prozesses

{[constant . . . ;]}

{[function . . . ;]} -- Funktions- und Prozedur-{[procedure . . . ;]} -- Deklarationen

begin

{[<sequentielle Anweisung>]}

end process [<Prozess-Name>];]}

end . . .;

Page 5: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

2.) Empfohlene Struktur mit Komponenten

-- use- und library-Deklarationen

-- entity

entity . . . is

[generic(. . .);]

port(. . .);

end . . . ;

-- architecure

architecture . . . of . . . is

-- Architektur -Deklarationen

-- Komponentendeklarationen

{[component <Name der Entity>

[generic(. . .);]

port(. . .);

end component;]}

[-- Komponentenkonfigurationen

{[for all: . . . use entity . . . ;]}

begin]

-- Komponenteninstanziierung

{ . . . : . . . [generic map(. . . )] port map(. . . );}

{[<nebenläufige Anweisung>]}

{[<Prozess>]}

end . . .;

Page 6: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

-

-

Operator für Werte vom Typ integer, real (für real nicht synthese-fähig).

Funktion: Subtraktion.

Beispiele:

Y := A – B;

Y <= A – B;

Page 7: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

--

--

Kommentare in VHDL beginnen mit -- und enden am Zeilenende.

Beispiel:

-- Dies ist ein Kommentar

Page 8: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

&

&

Operator für Signale vom Typ boolean, bit, bit_vector.

Funktion: Verkettung (Concatenation).

Beispiel:

entity VOLLADD1 is

port( AI, BI, CIN: in bit;

SI, COUT: out bit);

end VOLLADD1;

architecture VERHALTEN of VOLLADD1 is

signal TEMP_IN: bit_vector(2 downto 0);

begin

..........

TEMP_IN <= CIN & BI & AI; -- TEMP_IN = “000“ für

-- CIN = BI = AI = ‘0‘

..........

end VERHALTEN;

Page 9: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

*

*

Operator für Werte vom Typ integer, real oder physical types. Wirdbei integer von den meisten Synthesewerkzeugen unterstützt.

Funktion: Multiplikation.

Beispiele:

Y := A * B;

Y <= A * B;

Page 10: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

**

**

Operator für Werte vom Typ integer oder real. Der linke Operand darfvom Typ integer oder real sein, der rechte nur vom Typ integer.Synthesefähigkeit nur bei Potenzen von 2!

Funktion: Potenzierung.

Beispiele:

Y := 2 ** B;

Y <= 2 ** B;

Page 11: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

/

/

Operator für Werte vom Typ integer, real oder physical types. Istmeistens nicht synthesefähig!

Funktion: Division.

Beispiele:

Y := A / B;

Y <= A / B;

Page 12: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

:=

:=

Sequentielle Anweisung.

Zuweisungsoperator für Variablen.

Beispiele:

Y := A;

Y := ‘0‘; -- Datentyp bit

Y := 3; -- Datentyp integer

Page 13: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

|

|

Operator für Signale vom Typ boolean, bit, bit_vector.

Funktion: Auswahl mit ODER („Alternativauswahl“).

Beispiele:

with I select

Y <= ‘0‘ when “0000“ | “0101“ | “1010“ | “0111“,

‘1‘ when others;

Page 14: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

‘event

‘event

Signalattribut.

Funktion: Beschreibung einer Signaländerung.

Syntax:

<Bezeichner>‘event

Beispiele:

wait until CLK’event;

wait until (CLK=‘1‘ and CLK’event);

Page 15: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

+

+

Operator für Werte vom Typ integer, real (für real nichtsynthesefähig).

Funktion: Addition.

Beispiele:

Y := A + B;

Y <= A + B;

Page 16: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

<=

<=

Nebenläufige Anweisung. Auch innerhalb von Prozessen erlaubt.

Zuweisungsoperator für Signale.

Beispiele:

Y <= A;

E(3) <= ‘1‘;

E <= “1101“;

E <= (‘1‘,‘1‘,‘0‘,‘1‘);

siehe after, when, with

Page 17: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

= /= < > <= >=

= /= < > <= >=

Vergleichsoperatoren:

= gleich

/= ungleich

< kleiner

> größer

<= kleiner gleich

>= größer gleich

Funktion: Vergleich.

Beispiele:

when A=B ...;

when A>=B ...;

Page 18: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

=>

=>siehe case

Page 19: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

abs

abs

Operator für Zahlenwerte.

Funktion: Liefert den Absolutwert des Arguments.

Beispiele:

Y := abs(A);

Y <= abs(A);

Page 20: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

after

after

Definition der Verzögerungszeit.

Funktion: Bei der Zuweisung eines Wertes an ein Signal kann eineVerzögerungszeit definiert werden. Der Default-Wert ist 0 fs, wennkeine Verzögerungszeit definiert wird. Dieses Konstrukt ist nichtsynthesefähig! Einige Synthesewerkzeuge ignorieren dies, bei anderen istafter ungültig.

Bei der Modellierung der Verzögerungszeit werden zwei Artenunterschieden:

- inertial-Modellierung: es werden nur Impulse mit einer minimalenDauer weitergegeben

- transport-Modellierung: es werden auch kurze Impulseweitergegeben

Kurze Impulse sind Impulse, deren Dauer kleiner als dieVerzögerungszeit ist. Da reale Gatter kurze Impulse unterdrücken, ist inVHDL das inertial-Modell Standard und braucht nicht angegeben zuwerden. Sollen beim inertial-Modell Impulse weitergegeben werden,deren Dauer kleiner als die Verzögerungszeit ist, so kann die minimaleImpulsdauer mit dem Schlüsselwort reject angegeben werden.

Syntax:

<Signalname> <= [reject <Zeit>] [transport] <logischer

Ausdruck> after <Zeit>;

Page 21: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

after

Beispiele:

Y <= ´1´ after 12 ns; -- inertial-Modell

Y <= inertial ´1´ after 12 ns; -- inertial-Modell

Y <= transport ´1´ after 12 ns; -- transport-Modell

Y <= reject 4 ns inertial ´1´ after 12 ns; -- inertial-Modell

Y <= ´1´ after 12 ns; ´0´ after 20 ns;

siehe <=

Page 22: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

alias

alias

Bei der Deklaration von Signalen oder Variablen kann mit der alias-Deklaration ein zweiter Name zugewiesen werden. Damit kann dieLesbarkeit des Quellcodes erhöht werden.

Syntax:

alias <Name_1> : <Datentyp> is <Name_2>;

Beispiel:

signal CTRL_BUS : bit_vector(7 downto 0);

alias STROBE: bit is CTRL_BUS(0);

alias RNW: bit is CTRL_BUS(1);

alias DATA_VALID: bit is CTRL_BUS(2);

Page 23: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

all

allsiehe configuration, library, use

Page 24: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

and

and

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: AND-Verknüpfung der Werte. Bei Arrays werden diekorrespondierenden Komponenten verknüpft.

Beispiele:

Y := A and B;

Y <= A and B;

Page 25: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

architecture

architecture

Grundlegendes Strukturelement einer VHDL-Beschreibung. In der mitarchitecture bezeichneten Entwurfseinheit wird die Funktionalität einesVHDL-Funktionsblocks beschrieben. Im Vergleich zu einem Board-Design beschreibt die architecture die Funktion, bzw. welcher Chip sichin einem Gehäuse befindet.

Syntax:

architecture <Architekturname> of <Entityname> is

[{<Architekturdeklaration>}]

begin

{<Nebenläufige Anweisung>}

end <Architekturname>;

Beispiel:

architecture VERHALTEN of MUX is

begin

with S select

Y <= E(0) when “00“;

E(1) when “01“;

E(2) when “10“;

E(3) when “11“;

end VERHALTEN;

Page 26: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

array

array

Zusammengesetzter Datentyp. Ein array enthält Komponenten gleichenTyps, auf die über einen Index zugegriffen werden kann.

Syntax:

type <Arrayname> is array <Indexbeschränkung> of

<Subtypname>;

Beispiele:

type BYTE is array (7 downto 0) of bit;

type VEKTOR is array (1 to 5) of integer;

type MATRIX is array (1 to 5, 1 to 10) of integer;

signal TEST: array(7 downto 0) of integer;

signal S_BYTE: BYTE;

signal RAM: MATRIX;

if S_BYTE(5) = ‘0‘ then .....

S_BYTE(0) <= ‘4‘;

RAM(2, 7) <= ‘12‘;

siehe type

Page 27: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

assert

assert

Die assert–Anweisung dient zur Erleichterung der Fehlersuche in einemVHDL-Code. Mit ihrer Hilfe können während eines SimulationslaufsFehlermeldungen erzeugt werden. Bei Verletzung der Bedingung wirdein String ausgegeben. Die assert–Anweisung kann durch die Angabeder Bedeutungsklasse (severity) des Fehlers abgeschlossen. Es gibt vierBedeutungsklassen: note, warning, error, failure. Die assert–Anweisung ist nicht synthesefähig!

Syntax:

assert <Bedingung> [report <String>]

[severity <Bedeutungsklasse>];

VHDL’93 erlaubt eine verkürzte Syntax, bei der bei erfüllter Bedingungein String ausgegeben wird:

when <Bedingung> => report <String>;

Beispiele:

assert not (BIT0 = ‘1‘) report “Fehler: Bit0 = 1!“ severity error;

when (BIT0 = ‘1‘) report “Fehler: Bit0 = 1!“;

Page 28: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

attribute

attribute

Ein Attribut ist ein Charakteristikum, das mit bestimmten Elementen(z.B. array, architecture, entity usw.) verbunden werden kann. DieVerbindung erfolgt durch eine Attributdeklaration. In VHDL gibt esvordefinierte Attribute und benutzerdefinierte Attribute.

Attributdeklaration:

Dient zur Definition eines benutzerdefinierten Attributs.

Syntax:

attribute <Attributname> : <Typ-/Subtypname>;

Attributzuordnung:

Dient zur Einsetzung des Werts eines Attributs.

Syntax:

<Präfix> ‘ <Attributname>

Präfix: <Name> oder Funktionsaufruf

Page 29: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

attribute

Beispiele:

attribute BOOLE_IN : boolean;

-- Deklariert ein Attribut mit dem Namen BOOLE_IN,

-- das einen boolean-Wert speichern kann

attribute TPLH : real;

attribute TAKT_PERIODE : ZEIT;

CLOCK’TP(15 ns) -- CLOCK ist ein Signalname. ‘TP ist

-- ein benutzerdefiniertes Attribut.

-- Dieser Attributname steht für ein

-- neues Signal, das die gleiche

-- Signalform wie CLOCK aufweist,-- jedoch um 15 ns verzögert ist.

CLOCK’event

Page 30: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

attribute

Attributfestlegung:

Dient zur Verknüpfung eines benutzerdefinierten Attributs mit einemElement. Das Attribut muß vorher mit einer Attributdeklarationdeklariert worden sein. Auf den Wert des Attributs wird durch denAttributnamen zugegriffen.

Syntax:

attribute <Attributname> of <Einheit>: <Einheitenklasse> is

<Ausdruck>;

Einheit:

- Einheitenname

- all

- others

Einheitenklasse:

- architecture

- component

- constant

- entity

- function

- label

- package

- procedure

- signal

- subtype

- type

- variable

Page 31: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

attribute

Beispiele:

attribute RES of CLEAR: procedure is WAHR;

-- RES wird mit der Prozedur CLEAR verbunden. Der

-- Wert des Attributs ist WAHR. Zugriff durch z.B.

-- CLEAR’RES.

attribute TPLH of SIG1, SIG2: signal is 5 ns;

-- TPLH wird mit den Signalen SIG1 und SIG2

-- verbunden.

attribute TPLH of all: variable is 5 ns;

-- TPLH wird mit allen Variablen desselben

-- Deklarationsbereichs verbunden.

Vordefinierte Attribute:

- ‘left

- ‘right

- ‘low

- ‘high

- ‘pos(X)

- ‘val(N)

- ‘leftof(X)

- ‘rightof(X)

- ‘pred(X)

- ‘succ(X)

- ‘range(N)

- ‘reverse_range(N)

- ‘length(N)

siehe ‘event

Page 32: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

b, B

B, b

Kennbuchstabe zur Kennzeichnung der Zahlenbasis.

Basis: Dual.

Beispiele:

b“1010 1010“

B“1010_1010“

Page 33: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

begin

beginsiehe architecture, process

Page 34: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

bit

bit

Datentyp.

Wertevorrat: ‘0‘ oder ‘1‘.

Beispiel:

port( S: in bit);

Page 35: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

bit_vector

bit_vector

Datentyp. Bus aus mehreren bit-Signalen.

Wertevorrat: ‘0‘ oder ‘1‘.

Beispiel:

port( S: in bit_vector(3 downto 0));

Page 36: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

block

block

Mit der block-Anweisung können Komponentenarchitekturenpartitioniert werden. Sie dient der Kennzeichnung und erhöht dieLesbarkeit des Codes. In einem Block werden die in ihm deklariertenSignale, Typen und Konstanten nur lokal verfügbar gehalten. In derSimulation werden Blöcke als eigene hierarchische Ebene angezeigt.

Syntax:

<Block-Name>: block

[{<Deklarationsteil>}]

begin

{<Nebenläufige Anweisung>}

end block [<Block-Name >];

Page 37: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

block

Beispiel:

architecture VERHALTEN of BLK is

signal INT_SIG: bit;

begin

AUSWAHL: block

begin

process(ADR)

begin

. . . . . .

end process;

end block AUSWAHL;

MOORE: block

type ZUSTAENDE is (START, STOP);

signal ZUSTAND, FOLGE_ZUSTAND: ZUSTAENDE;

begin

process(CLK, RESET)

begin

. . . . . .

end process;

end block MOORE;

end VERHALTEN;

Page 38: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

body

bodysiehe package

Page 39: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

boolean

boolean

Datentyp.

Wertevorrat: true oder false.

Beispiel:

architecture VERHALTEN of TEST is

signal ERROR_FLAG: boolean;

begin

.......

ERROR_FLAG <= false;

.......

ERROR_FLAG <= (A = B);

.......

end VERHALTEN;

Page 40: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

buffer

buffer

Signalattribut in einer port-Anweisung. Ein buffer-Signal wird nachaußen geleitet, aber auch innerhalb einer Architektur verwendet. Es darfauf der rechten oder linken Seite einer Signalzuweisung oder in einerSignalabfrage stehen.

Beispiel:

port(

B: buffer bit;

E: buffer bit_vector(3 downto 1));

Page 41: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

case

case

Sequentielle Anweisung.

Die case-Anweisung ist eine Anweisung, die in einem Prozess, einerFunktion oder einer Prozedur verwendet werden kann.

Funktion: Beschreibung von Alternativen zur Programmverzweigung.

Syntax:

case <Kontrollausdruck> is

when <Testausdruck_1> => {<Sequentielle Anweisung>}

when <Testausdruck_2> => {<Sequentielle Anweisung>}

.....

when others => {<Sequentielle Anweisung>}

end case;

Alle Wahlmöglichkeiten müssen angegeben werden. Es gibt keineProbleme, wenn others als letzte Möglichkeit verwendet wird.

Beispiel:

case A is

when 5 => Y <= 3;

when 6 to 10 => Y <= 4;

when 1|2 => Y <= 2;

when others => Y <= 0;

end case;

Page 42: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

component

component

Ein Quellcode-Modul kann als component (Komponente) innerhalbeiner architecture eingebunden werden.

Komponentendeklaration:

Dient zur Deklaration der Komponente und ihrer Schnittstellen.

Syntax:

component <Komponentenname>

[generic(<Deklaration der Konstanten>);]

port(<Deklaration der Ein- und Ausgänge>);

end component;

Komponenteninstanziierung:

Dient zur Instanziierung einer Komponente.

Syntax:

[<Marke>] : <Komponentenname>

[generic map(<Verknüpfungsliste>)]

port map(<Verknüpfungsliste >);

Page 43: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

component

Beispiel:

library ieee;

use ieee.std_logic_1164.all;

entity SNETZ is

port( E: in std_logic_vector(3 downto 0);

M: out std_logic);

end SNETZ;

architecture VERHALTEN of SNETZ is

begin

..........

end VERHALTEN;

library ieee;

use work.SNETZ; -- Zugriff auf Objektcode der

-- Komponente in der Library „work“

entity TBENCH is

end TBENCH;

Page 44: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

component

architecture SIGNALE of TBENCH is

component SNETZ -- Komponentendeklaration

generic(TP: TIME);

port( E: in std_logic_vector(3 downto 0);

M: out std_logic);

end component;

signal TE: std_logic_vector(3 downto 0);

signal TM: std_logic;

begin

DUT: SNETZ -- Komponenteninstanziierung

generic map (TP => 25 ns)

port map (TE, TM);

..........

end SIGNALE;

siehe configuration

Page 45: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

configuration

configuration

Ein zusätzliches Quellcode-Modul kann als configuration innerhalbeiner eigenen Entwurfseinheit eingebunden werden. Die configurationist die Verbindung zwischen einer Komponenteninstanziierung und derrealen Komponente in einer Bibliothek.

Konfigurationsdeklaration:

Dient zur Deklaration der Komponente und ihrer Schnittstellen.

Syntax:

configuration <Konfigurationsname> of <Entityname> is

[use Libraryname]

for <Architekturname>

[use <Libraryname>]

[<Komponentenkonfiguration>]

[<Blockfestlegung>]

end for;

end [configuration][<Konfigurationsname>];

Komponentenkonfiguration:

for <Komponentenfestlegung>

[<Verbindungsanzeiger>;]

[<Blockkonfiguration>]

end for;

Page 46: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

configuration

Komponentenfestlegung:

<Instanziierungsmarkenname> : <Komponentenname>

-- alternativ

others : <Komponentenname> -- alternativ

all : <Komponentenname> -- alternativ

Blockfestlegung:

<generate-Anweisung> -- alternativ

<Architekturname> -- alternativ

<Blockmarkenname> -- alternativ

generate-Anweisung:

<Generatemarkenname> :

for <Name> in <Bereich>

generate

[<Deklarationen>]

[begin]

[{<Nebenläufige Anweisung>}]

end generate [<Generatemarkenname>];

Bereich:

<Ausdruck>

to | downto

<Ausdruck>

Page 47: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

configuration

Verbindungsanzeiger:

[use]

[entity <Entityname>[(<Architekturname>)]]

[configuration <Konfigurationsname>]

[open]

[generic map(<Verknüpfungsliste>)]

[port map(<Verknüpfungsliste>)]

Blockkonfiguration:

for <Blockkonfiguration>

[use <Libraryname>]

[<Komponentenkonfiguration>]

[<Blockfestlegung>]

end for;

Konfigurationsfestlegung:

Dient zur Anbindung der Komponente an eine Design-Einheit.

Syntax:

for <Komponentenfestlegung>

<Verbindungsanzeiger>;

Page 48: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

configuration

Beispiel: -- 4-BIT-Addierer mit externer Konfiguration

library ieee;

use ieee.std_logic_1164.all;

entity ADD4_B is

generic(WB: positive := 4);

port(A, E: in std_ulogic_vector(WB-1 downto 0);

SUM: out std_ulogic_vector(WB-1 downto 0));

end ADD4_B;

architecture STRUK_HL of ADD4_B is

signal CARRY_RIPPLE: std_ulogic_vector(WB-2 downto 0);

signal ZERO: std_ulogic := ‘0‘;

component VADD

port(CARRY_IN, IN1, IN2: in std_ulogic;

S, CARRY_OUT: out std_ulogic);

end component;

begin

VA_LSB: V_ADD -- Komponenteninstanziierung

port map (CARRY_IN => ZERO, IN1 => A(0) , IN2 => B(0),

S => SUM(0), CARRY_OUT => CARRY_RIPPLE(0));

VA_KETTE:

for N in WB-2 downto 1 generate

VA_INNEN: VADD

port map (CARRY_RIPPLE(N-1), A(N), B(N),

SUM(N), CARRY_RIPPLE (N));

end generate;

Page 49: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

configuration

VA_MSB: V_ADD

port map (CARRY_RIPPLE(WB-2), A(WB-1), B(WB-1),

SUM(WB-1), SUM(WB));

end STRUK_HL;

-- Strukturmodell des Volladdierers auf der Basis von Halbaddierern

library ieee;

use ieee.std_logic_1164.all;

entity V_ADD is

port(CARRY_IN, IN1, IN2: in std_ulogic;

S, CARRY_OUT: out std_ulogic);

end V_ADD;

architecture STRUK_LL of V_ADD is

signal PROP, GEN: std_ulogic;

signal ZERO: std_ulogic := ‘0‘;

component H_ADD

port(X1, X2, X3: in std_ulogic;

Q1, Q2: out std_ulogic);

end component;

begin

C1: H_ADD

port map (X1 => IN1, X2 => IN2 , X3 => ZERO,

Q1 => PROP, Q2 => GEN);

C2: H_ADD

port map (X1 => PROP, X2 => CARRY_IN , X3 => GEN,

Q1 => S, Q2 => CARRY_OUT);

end STRUK_LL;

Page 50: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

configuration

-- Verhaltensmodell des Halbaddierers

library ieee;

use ieee.std_logic_1164.all;

entity H_ADD is

generic(TD: TIME := 20 ns);

port(X1, X2, X3: in std_ulogic;

Q1, Q2: out std_ulogic);

end H_ADD;

architecture VERHALTEN of H_ADD is

begin

Q1 <= X1 or X2;

Q2 <= (X1 and X2) or X3 after TD;

end VERHALTEN;

-- Externe Konfiguration

library ieee;

use ieee.std_logic_1164.all;

configuration CONFIG1_ADD of ADD4_B is

for STRUK_HL

for all: V_ADD

use entity WORK.V_ADD(STRUK_LL);

for STRUK_LL

for all: H_ADD

use entity WORK.H_ADD(VERHALTEN);

end for;

end for;

end for;

end for;

end CONFIG1_ADD;

Page 51: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

constant

constant

Mit dem Schlüsselwort constant können Konstanten innerhalb einerarchitecture, eines process oder eines package deklariert werden. DieDeklaration muß innerhalb einer architecture oder eines process vordem begin erfolgen.

Beispiele:

constant PI : real := 3.1415;

constant LARGE_INT : integer := 99999;

constant VEKTOR : bit_vector (7 downto 0) := (others => ‘1‘);

-- Die Konstante VEKTOR hat 8 Elemente, die alle-- auf ‘1‘ gesetzt werden

Page 52: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

downto

downto

Absteigende Indizierung eines Busses vom Typ bit_vector oderstd_logic_vector.

Beispiele:

S : in bit_vector(1 downto 0);

E : in std_logic_vector(3 downto 0);

siehe subtype, to, type

Page 53: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

else

elsesiehe if, when

Page 54: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

elsif

elsifsiehe if

Page 55: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

end

endsiehe architecture, block, component, configuration, entity,function, generate, loop, package, procedure, process, while

Page 56: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

entity

entity

Grundlegendes Strukturelement einer VHDL-Beschreibung. In der mitentity bezeichneten Entwurfseinheit werden die Schnittstellen einesVHDL-Funktionsblocks nach außen beschrieben. Im Vergleich zu einemBoard-Design stellt die entity den IC-Gehäusetyp dar, der durch Anzahlund Bezeichnung der Anschlüsse definiert ist. Die Deklaration derAnschlüsse innerhalb der entity erfolgt mit Hilfe der port-Anweisung.

Syntax:

entity <Entityname> is

port(

<Deklaration der Ein- und Ausgänge>

);

end <Entityname>;

Beispiel:

entity MUX is

port( S: in bit_vector(1 downto 0);

E: in bit_vector(3 downto 0);

Y: out bit

);

end MUX;

siehe port, generic

Page 57: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

exit

exit

Sequentielle Anweisung.

Die exit-Anweisung verursacht einen Abbruch der Schleife, in der sieenthalten ist. Die Ausführung wird bei der unmittelbar nachSchleifenende folgenden Anweisung fortgesetzt.

Syntax:

exit;

exit <Marke>;

exit when <Bedingung>;

exit <Marke> when <Bedingung>;

Beispiele:

for I in BITS-1 downto 0 loop

.......

exit;

.......

end loop;

for I in BITS-1 downto 0 loop

.......

exit when I = 4;

.......

end loop;

siehe for, while, loop, next when

Page 58: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

falling_edge

falling_edge

Mit der Funktion falling_edge kann die abfallende Taktflanke einesSignals vom Typ std_ulogic bzw. std_logic abgefragt werden (Giltnicht für Signale vom Typ bit).

Beispiel:

process(CLK)

begin

.......

if falling_edge(CLK) then

.......

end process;

siehe rising_edge

Page 59: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

false

falsesiehe boolean

Page 60: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

file

file

Mit der file-Deklaration wird ein Datenfile mit Namen, DatentypFileattribut und externem Namen festgelegt.

Syntax:

file <File-Name>: <File-Typ> is [ in | out ] string;

Beispiel:

use std.textio.all; -- File-I/O-Package

. . . . .

file SRCFILE: text is in "CODE.TXT";

variable SRC_LINE: line;

variable F_CHAR: character;

variable VALID: boolean;

. . . . .

readline (SRCFILE, SRC_LINE);

read (SRC_LINE, F_CHAR, VALID);

'SRCFILE' ist der Quellcode-Name, der Datentyp ist 'text' und es kannaus der Datei "CODE.TXT" gelesen werden.

Page 61: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

for

for

Sequentielle Anweisung.

In der for-Schleife ist die Anzahl der Schleifendurchläufe durch einenLaufindex vorgegeben. Der Laufindex wird automatisch deklariert undist nur in der for-Schleife gültig.

Funktion: Terminierte Programmschleife.

Syntax:

for <Schleifenspezifikation> loop

{<Sequentielle Anweisung>}

end loop;

Für <Schleifenspezifikation> sind zwei Varianten erlaubt:

<Schleifenindex> in <Untere_Grenze> to <Obere_Grenze>

<Schleifenindex> in <Obere_Grenze> downto <Untere _Grenze>

Beispiel:

for I in BITS-1 downto 0 loop

.......

end loop;

siehe configuration, exit, loop, next when, while

Page 62: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

function

function

Eine Funktion ist ein Unterprogramm, das aus vorgegebenen Parameternimmer genau einen Rückgabewert erzeugt. Ein Funktionsaufruf wird inVHDL wie ein Ausdruck behandelt.

Syntax:

function <Funktionsname>

[<Liste der Parameter und ihrer Typen>]

return <Rückgabetyp> is

[<Deklarationen>]

begin

{<Sequentielle Anweisung>}

-- mindestens: return <Ausdruck>;

end [function] [<Funktionsname>];

Page 63: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

function

Beispiel:

function ADDIERER (SUMMAND1, SUMMAND2 : integer)

return integer is

variable SUM: integer;

begin

SUM := SUMMAND1 + SUMMAND2;

return SUM;

end ADDIERER;

.......

Y <= ADDIERER(3, 7); -- Y = 10

.......

siehe procedure

Page 64: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

generate

generatesiehe configuration

Page 65: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

generic

generic

Innerhalb der entity können mit generic vor der port-AnweisungGrößen definiert werden, mit denen der Quellcode parametrisiert wird.

Syntax:

entity <Entityname> is

generic(

<Deklaration der generic-Größen>

);

port(

<Deklaration der Ein- und Ausgänge>

);

end <Entityname>;

Beispiel:

entity VAR_ZAEHL is

generic( BITS: natural := 3);

port( CLK: in bit;

Q: out unsigned (BITS-1 downto 0));

end VAR_ZAEHL;

Durch Austausch des Zahlenwertes 3 in der Deklaration der GrößeBITS gegen eine andere Zahl kann ein Zähler beliebiger Bitbreiteerzeugt werden.

siehe component, configuration, entity, port

Page 66: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

generic map

generic mapsiehe configuration

Page 67: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

if

if

Sequentielle Anweisung.

Die if-Anweisung ist eine Anweisung, die in einem Prozess, einerFunktion oder einer Prozedur verwendet werden kann.

Funktion: Programmverzweigung.

Syntax:

if <Bedingung_1>

then {<Sequentielle Anweisung>}

elsif <Bedingung_2>

then {<Sequentielle Anweisung>}

elsif .......

.......

else {<Sequentielle Anweisung>}

end if;

elsif und else sind optional. Die Bedingungen dürfen überlappen. DieAnweisungen nach der ersten wahren werden dann ausgeführt.

Beispiel:

if (A = 6)

then Y <= 3;

elsif (A > 5)

then Y <= 4;

else Y <= 0;

end if;

Page 68: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

in

in

Signalattribut in einer port-Anweisung. Ein in-Signal ist einEingangssignal. Es darf nicht auf der linken Seite einer Signalzuweisungstehen.

Beispiel:

port(

B: in bit;

E: in bit_vector(3 downto 1));

Page 69: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

inertial

inertial 93

siehe after

Page 70: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

inout

inout

Signalattribut in einer port-Anweisung. Ein inout-Signal ist ein Signalfür bidirektionalen Datentransfer. In der Regel ist dafür ein speziellerDatentyp erforderlich.

Beispiel:

port(

B: inout std_logic;

E: inout std_logic_vector(3 downto 1));

Page 71: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

integer

integer

Datentyp.

Wertevorrat: In den meisten Fällen (bei 32 Bit) von

–2147483648 bis +2147483647.

Beispiel:

port( S: in integer range 0 to 7);

siehe natural, positive, range

Page 72: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

is

issiehe architecture, attribute, entity, file, subtype, type

Page 73: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

library

library

Mit der library-Anweisung wird angegeben, welche Bibliothekverwendet werden soll.

Beispiel:

library ieee;

use ieee.std_logic_1164.all;

entity EINS is

.......

end EINS;

architecture VERHALTEN of EINS is

port( S: out std_ulogic);

.......

end VERHALTEN;

siehe package, use

Page 74: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

loop

loop

Sequentielle Anweisung.

In der loop-Schleife wird die Schleifenausführung durch das Eintreteneiner Abbruchbedingung beendet. Deshalb ist sie nur bedingtsynthesefähig!

Funktion: Nicht terminierte Programmschleife.

Syntax:

loop

{<Sequentielle Anweisung>}

end loop;

Beispiel:

loop

Y <= 3 * A;

exit when A = 3;

A := A + 1;

end loop;

siehe exit, for, next when, while

Page 75: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

map

mapsiehe generic map, port map

Page 76: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

mod

mod

Operator für Werte vom Typ integer.

Funktion: Modulo-Operator

(A = B*N + (A mod B) -- N = ganze Zahl).

Beispiele:

Y := A mod B;

Y <= A mod B;

Page 77: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

nand

nand

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: NAND-Verknüpfung der Werte. Bei Arrays werden diekorrespondierenden Komponenten verknüpft.

Beispiele:

Y := A nand B;

Y <= A nand B;

Page 78: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

natural

natural

Datentyp.

Wertevorrat: In den meisten Fällen (bei 32 Bit) von 0 bis+2147483647.

Beispiel:

port( S: in natural range 0 to 7);

siehe integer, positive, range

Page 79: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

new

newsiehe access

Page 80: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

next when

next when

Sequentielle Anweisung.

Das Konstrukt next when dient zur vorzeitigen Beendigung einerSchleifeniteration.

Syntax:

next when <Bedingung>;

Beispiel:

loop

Y <= 3 * A;

next when A = 3;

A := A + 1;

end loop;

siehe exit, for, loop, while

Page 81: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

nor

nor

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: NOR-Verknüpfung der Werte. Bei Arrays werden diekorrespondierenden Komponenten verknüpft.

Beispiele:

Y := A nor B;

Y <= A nor B;

Page 82: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

not

not

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: Negations-Operator.

Beispiel:

Y := not A;

Y <= not A;

Page 83: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

null

null

Sequentielle Anweisung.

Die null-Anweisung ist eine Anweisung, die zu keiner Aktion führt. Siedient z.B. in if- und case-Anweisungen zur expliziten Markierung vonVerzweigungen, die keinerlei Aktion bewirken sollen.

Beispiel:

null;

siehe access

Page 84: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

O, o

O, o

Kennbuchstabe zur Kennzeichnung der Zahlenbasis.

Basis: Oktal.

Beispiele:

o“13107“

O“1_3_ 46“

Page 85: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

of

ofsiehe architecture, attribute

Page 86: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

or

or

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: Oder-Verknüpfung der Werte. Bei Arrays werden diekorrespondierenden Komponenten verknüpft.

Beispiele:

Y := A or B;

Y <= A or B;

Page 87: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

open

open

Nicht benutzte Komponentenausgänge können offen gelassen werden,indem der Klemme das Schlüsselwort open zugeordnet wird. Eingängesind immer zu beschalten, damit keine undefinierten Pegel entstehen!

Beispiel:

entity VOLL_ADD_SUB is

port ( A_I , B_I : in bit_vector (4 downto 0);

OP, C_I : in bit;

SU : out bit_vector (4 downto 0);

OV, C_B : out bit);

end VOLL_ADD_SUB;

. . . . . .

I_O: VOLL_ADD_SUB

port map (A_I => A_0, B_I => B_0, OP => OP,

C_I => C_IN, SU => SUM_I(4 downto 0),

OV => open, C_B => C_Q(0));

siehe port map

Page 88: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

others

otherssiehe attribute, constant, case, variable, when, with

Page 89: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

out

out

Signalattribut in einer port-Anweisung. Ein out-Signal ist einAusgangssignal. Dieses Signal darf nicht auf der rechten Seite einerSignalzuweisung oder in einer Signalabfrage stehen.

Beispiel:

port(

B: out bit;

E: out bit_vector(3 downto 1));

Page 90: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

package

package

Eine package dient zur Speicherung häufig verwendeter Deklarationenund Unterprogramme. Sie wird durch eine Package-Deklarationdeklariert und ihr Inhalt in einem Package-Block (package body)beschrieben. Unter Verwendung von library und use kann der Inhalt despackage in beliebigen Designs verwendet werden. Eine Package-Deklaration ist die Voraussetzung für einen Package-Block. Enthält einePackage-Deklaration eine zurückgestellte Konstanten- oderUnterprogramm-Deklaration, so muß der zugehörige Package-Blockvor-handen sein und die vollständigen Deklarationen enthalten.Zusätzliche Deklarationen im Package-Block sind nur in diesem gültig.

Funktion: Bibliothek mit Deklarationen und Unterprogrammen.

Package-Deklaration:

Syntax:

[<library- und use-Ausdrücke>]

package <Package-Name> is

[<Deklarationen>]

end [package] [<Package-Name>];

Package-Block:

Syntax:

[<library- und use-Ausdrücke>]

package body <Package-Name> is

[<Deklarationen>]

end [package body] [<Package-Name>];

Page 91: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

package

Beispiel:

package MY_PACK is -- Package-Deklaration

type V_LOGIC is (‘0‘,‘1‘,‘Z‘,‘X‘);

type V_LOGIC_ARRAY is array (natural range) ofV_LOGIC;

function V_LOG_F (F_ARRAY: in V_LOGIC_ARRAY )

return V_LOGIC;

end package MY_PACK;

package body MY_PACK is -- Package-Block

type .......;

function V_LOG_F (F_ARRAY: in V_LOGIC_ARRAY )

return V_LOGIC is

.......

return ...... ;

end function;

end package body MY_PACK;

siehe library, use

Page 92: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

port

port

Mit Hilfe der port-Anweisung erfolgt die Deklaration der Anschlüsseinnerhalb der entity.

Syntax:

entity <Entityname> is

port(

<Deklaration der Ein- und Ausgänge>

);

end <Entityname>;

Beispiel:

entity MUX is

port( S: in bit_vector(1 downto 0);

E: in bit_vector(3 downto 0);

Y: out bit );

end MUX;

siehe entity

Page 93: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

port map

port map

Mit Hilfe der port map-Anweisung werden die Schnittstellen an einecomponent übergeben.

Syntax:

[Bezeichner :] <Komponentenname>

port map(

<Deklaration der Ein- und Ausgänge>

);

Beispiel:

library ieee;

use work.SNETZ;

entity TBENCH is

end TBENCH;

Page 94: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

port map

architecture SIGNALE of TBENCH is

component SNETZ is

port( E: in std_logic_vector(3 downto 0);

M: out std_logic);

end component;

signal TE: std_logic_vector(3 downto 0);

signal TM: std_logic;

begin

DUT: SNETZ port map (TE, TM);

..........

end SIGNALE;

siehe component, open

Page 95: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

positive

positive

Datentyp.

Wertevorrat: In den meisten Fällen (bei 32 Bit) von 1 bis+2147483647.

Beispiel:

port( S: in positive range 0 to 7);

siehe integer, natural, range

Page 96: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

procedure

procedure

Eine Prozedur ist ein Unterprogramm, das einen, mehrere oder keinenRückgabewert liefert. Ein Prozeduraufruf wird in VHDL wie eineAnweisung behandelt. Prozeduren liefern nur Ergebnisse, wennAusgabeparameter innerhalb der Parameterliste deklariert wurden.

Syntax:

procedure <Prozedurname>

[<Liste der Parameter und ihrer Typen>] is

[<Deklarationen>]

begin

{<Sequentielle Anweisung>}

end [procedure] [<Prozedurname>];

Beispiel:

procedure ADDIERER (variable SUMMAND1: in integer;

variable SUMMAND2: in integer;

variable SUMME: out integer) is

begin

SUMME := SUMMAND1 + SUMMAND2;

end ADDIERER;

.......

ADDIERER(3, 7, Y); -- Y = 10

.......

siehe function

Page 97: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

process

process

Nebenläufige Anweisung.

Für die Modellierung des zeitabhängigen Verhaltens digitalerSchaltungen wurde in VHDL eine eigene Klasse von Anweisungendefiniert (sequential statements, sequentielle Anweisungen). Diesekönnen nur in einem Prozeß (process) verwendet werden.

Syntax:

[<Prozess-Name>]: process [( <Empfindlichkeitsliste> )]

-- Deklarationsteil

begin

{<sequentielle Anweisung>}

end process [<Prozess-Name>];

<Prozess-Name>:

Bezeichner für einen Prozeß. Kann weggelassen werden, ist aber nichtzu empfehlen.

<Empfindlichkeitsliste>:

Liste von Signalen, die durch Kommata getrennt werden. Der Prozeßwird dann gestartet, wenn einem Signal in der Empfindlichkeitsliste einneuer Wert zugewiesen wird. Die Empfindlichkeitsliste kannweggelassen werden. In diesem Fall muß der Prozeß mindestens einewait-Anweisung beinhalten.

Page 98: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

process

Deklarationsteil:

Liste von Deklarationen für Datentypen, Konstanten und Variablen.Variablen sind nur innerhalb des Prozesses gültig, in dem sie deklariertwurden. Als Datentypen für Variablen können alle die verwendetwerden, die auch für Signale erlaubt sind. Der Wert einer Variablenwird sofort nach der Zuweisung verändert, während Signale erst amEnde des Prozesses aktualisiert werden. Wird der Prozeß verlassen, sobleibt der letzte Variablenwert bis zum nächsten Durchlauf erhalten.

Innerhalb eines Prozesses sind nur sequentielle Anweisungen erlaubt.

Beispiel (mit und ohne Empfindlichkeitsliste):

entity ZAEHLER is

port( CLK, RESET: in bit;

Q1, Q2: buffer integer range 0 to 15);

end ZAEHLER;

architecture Verhalten of ZAEHLER is

begin

ZLR1: process ( CLK, RESET )

begin

if RESET =‘1‘ then -- asynchroner Reset

Q1 <= 0;

elsif (CLK =‘1‘ and CLK’event) then

Q1 <= Q1 + 1;

end if;

end process ZLR1;

Page 99: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

process

ZLR2: process

begin

wait until (CLK =‘1‘ and CLK’event);

if RESET =‘1‘ then -- synchroner Reset

Q2 <= 0;

else

Q2 <= Q2 + 1;

end if;

end process ZLR2;

end VERHALTEN;

siehe variable, wait until

Page 100: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

range

rangesiehe integer, natural, positive, subtype, type

Page 101: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

record

record

Mit der record-Deklaration wird ein zusammengesetzter Datentyp mitseinen verschiedenen Elementen festgelegt.

Syntax:

type <Record-Name> is record

{<Element-Name> : <Element-Typ>;}

end record <Record-Name>;

Zugriff auf die Elemente:

<Record-Name>.<Element-Name>

Beispiel:

architecture SYSTEM of COMPUTER is

. . . . .

type OPCODE is (ADD, SUB, LDA, STA, XOR, ....);

type REG_NR is range 0 to 7;

. . . . .

type INSTRUCTION is record -- enthält 3 Elemente

OPC : OPCODE;

Q_REG1, Q_REG2, Z_REG : REG_NR;

OFFSET : integer;

end record INSTRUCTION;

Page 102: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

record

type WORT is record -- enthält record und bit_vector

INSTR : INSTRUCTION;

DATEN : bit_vector (15 downto 0);

end record WORT;

. . . . .

begin

signal READ_WORT : WORT;

. . . . .

CPU: process is

variable INS_REG: INSTRUCTION;

. . . . .

begin

. . . . .

INS_REG := READ_WORT.INSTR; -- Zuweisung

. . . . .

case INS_REG.OPC is -- Abfrage

. . . . .

end case;

end process CPU;

. . . . .

end architecture SYSTEM;

siehe access, array, file

Page 103: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

reject

reject 93

siehe after

Page 104: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

rem

rem

Operator für Werte vom Typ integer. Synthesefähigkeit nur beiPotenzen von 2!

Funktion: Modulo-Operator (A = (A/B)*B + (A rem B)).

Beispiele:

Y := A rem B;

Y <= A rem B;

Page 105: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

report

reportsiehe assert

Page 106: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

return

returnsiehe function

Page 107: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

rising_edge

rising_edge

Mit der Funktion rising_edge kann die ansteigende Taktflanke einesSignals vom Typ std_ulogic bzw. std_logic abgefragt werden (Giltnicht für Signale vom Typ bit).

Beispiel:

process(CLK)

begin

.......

if rising_edge(CLK) then

.......

end process;

siehe falling_edge

Page 108: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

rol

rol 93

Operator für eindimensionale Arrays vom Typ boolean oder bit (rollleft).

Funktion: Rotationsoperator.

Beispiele:

B“10100111“ rol 1 = B“01001111“

B“10100111“ rol -1 = B“11010011“

siehe ror, sla, sll, sra, srl

Page 109: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

ror

ror 93

Operator für eindimensionale Arrays vom Typ boolean oder bit (rollright).

Funktion: Rotationsoperator.

Beispiele:

B“10100111“ ror 2 = B“11101001“

B“10100111“ ror -2 = B“10100111“

siehe rol, sla, sll, sra, srl

Page 110: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

select

selectsiehe with

Page 111: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

severity

severitysiehe assert

Page 112: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

signal

signal

Mit dem Schlüsselwort signal können Signale lokal innerhalb einerArchitektur deklariert werden. Die Deklaration muß vor dem beginerfolgen.

Beispiel:

architecture VERHALTEN of TEST is

signal A: bit;

signal E, F: bit_vector(3 downto 0);

signal VEKTOR : std_logic_vector (0 to 3) := “0000“;

-- Das Signal VEKTOR hat 4 Elemente, die alle auf ‘0‘

-- gesetzt werden

begin

.......

end VERHALTEN;

Page 113: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

signed

signed

Datentyp. Erfordert ieee.numeric_std bzw. ieee.std_logic_arith.

Wertevorrat: Vorzeichenbehaftete ganze Zahlen im Zweier-komplement.

Beispiel:

port( S: in signed (15 downto 0));

siehe unsigned

Page 114: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

sla

sla 93

Operator für eindimensionale Arrays vom Typ boolean oder bit (shiftleft arithmetic). Die links stehenden Elemente gehen verloren, rechtswird das äußerste Bit kopiert.

Funktion: Schiebeoperator: arithmetisch links schieben.

Beispiele:

B“10100111“ sla 2 = B“10011111“

B“10100111“ sla -2 = B“11101001“

siehe rol, ror, sll, sra, srl

Page 115: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

sll

sll 93

Operator für eindimensionale Arrays vom Typ boolean oder bit (shiftleft logical). Die links stehenden Elemente gehen verloren, von rechtswird mit Nullen aufgefüllt.

Funktion: Schiebeoperator: logisch links schieben.

Beispiele:

B“10100111“ sll 2 = B“10011100“

B“10100111“ sll -2 = B“00101001“

siehe rol, ror, sll, sra, srl

Page 116: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

sra

sra 93

Operator für eindimensionale Arrays vom Typ boolean oder bit (shiftright arithmetic). Die rechts stehenden Elemente gehen verloren, linkswird das äußerste Bit kopiert.

Funktion: Schiebeoperator: arithmetisch rechts schieben.

Beispiele:

B“10100111“ sra 2 = B“11101001“

B“10100111“ sra -2 = B“10011111“

siehe rol, ror, sll, sla, srl

Page 117: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

srl

srl 93

Operator für eindimensionale Arrays vom Typ boolean oder bit (shiftright logical). Die rechts stehenden Elemente gehen verloren, von linkswird mit Nullen aufgefüllt.

Funktion: Schiebeoperator: logisch rechts schieben.

Beispiele:

B“10100111“ srl 2 = B“00101001“

B“10100111“ srl -2 = B“10011100“

siehe rol, ror, sla, sll, sra

Page 118: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

std_logic

std_logic

Datentyp aus der VHDL-Bibliothek ieee.std_logic_1164. Beimstd_logic Typ können mehrere Treiber auf ein und dasselbe Signalzugreifen. Die Entscheidung, welches Signal sich durchsetzen soll, triffteine im IEEE 1164 Standard definierte Auflösungsfunktion (resolutionfunction). Der Wertevorrat ist im Vergleich zum Bit-Typ erweitert.

Wertevorrat: ‘U‘, ‘X‘, ‘0‘, ‘1‘, ‘Z‘, ‘W‘, ‘L‘, ‘H‘oder ‘-‘.

‘U‘ unbekannt Simulator, nicht initialisiert‘X‘ unb., stark Simulator, z.B. Buskonflikt ‘0‘ und ‘1‘‘0‘ 0, stark‘1‘ 1, stark‘Z‘ High_Z Tristate‘W‘ schw. Simulator, z.B. Buskonflikt ‘L‘ und ‘H‘ ‘L‘ 0, schwach open emitter‘H‘ 1, schwach open collector ‘-‘ don’t care

Auflösungsfunktion:

‘U‘ ‘X‘ ‘0‘ ‘1‘ ‘Z‘ ‘W‘ ‘L‘ ‘H‘ ‘-‘‘U‘ ‘U‘ ‘U‘ ‘U‘ ‘U‘ ‘U‘ ‘U‘ ‘U‘ ‘U‘ ‘U‘‘X‘ ‘U‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘‘0‘ ‘U‘ ‘X‘ ‘0‘ ‘X‘ ‘0‘ ‘0‘ ‘0‘ ‘0‘ ‘X‘‘1‘ ‘U‘ ‘X‘ ‘X‘ ‘1‘ ‘1‘ ‘1‘ ‘1‘ ‘1‘ ‘X‘‘Z‘ ‘U‘ ‘X‘ ‘0‘ ‘1‘ ‘Z‘ ‘W‘ ‘L‘ ‘H‘ ‘X‘‘W‘ ‘U‘ ‘X‘ ‘0‘ ‘1‘ ‘W‘ ‘W‘ ‘W‘ ‘W‘ ‘X‘‘L‘ ‘U‘ ‘X‘ ‘0‘ ‘1‘ ‘L‘ ‘W‘ ‘L‘ ‘W‘ ‘X‘‘H‘ ‘U‘ ‘X‘ ‘0‘ ‘1‘ ‘H‘ ‘W‘ ‘W‘ ‘H‘ ‘X‘‘-‘ ‘U‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘ ‘X‘

Page 119: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

std_logic

Beispiel:

library ieee;

use ieee.std_logic_1164.all;

entity EINS is

.......

end EINS;

architecture VERHALTEN of EINS is

port( S: out std_logic);

.......

end VERHALTEN;

Page 120: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

std_ulogic

std_ulogic

Datentyp aus der VHDL-Bibliothek ieee.std_logic_1164. Beimstd_ulogic Typ können nicht mehrere Treiber auf ein und dasselbeSignal zugreifen. Der Wertevorrat ist im Vergleich zum Bit-Typerweitert.

Wertevorrat: ‘U‘, ‘X‘, ‘0‘, ‘1‘, ‘Z‘, ‘W‘, ‘L‘, ‘H‘oder ‘-‘.

‘U‘ unbekannt Simulator, nicht initialisiert‘X‘ unb., stark Simulator, z.B. Buskonflikt ‘0‘ und ‘1‘‘0‘ 0, stark‘1‘ 1, stark‘Z‘ High_Z Tristate‘W‘ schw. Simulator, z.B. Buskonflikt ‘L‘ und ‘H‘ ‘L‘ 0, schwach open emitter‘H‘ 1, schwach open collector ‘-‘ don’t care

Beispiel:

library ieee;

use ieee.std_logic_1164.all;

entity EINS is

.......

end EINS;

architecture VERHALTEN of EINS is

port( S: out std_ulogic);

.......

end VERHALTEN;

Page 121: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

subtype

subtype

Ein Subtyp (subtype) ist ein Typ mit einer Beschränkung.

Beispiele:

type A is range 0 to 31;

type AMPLITUDE is range –2.5 to +2.5;

subtype A_NEU is A range 16 to 23;

subtype HALBE_AMPL is AMPLITUDE range –1.25 to +1.25;

siehe type

Page 122: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

then

thensiehe if

Page 123: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

to

to

Aufsteigende Indizierung eines Busses vom Typ bit_vektor oderstd_logic_vector.

Beispiele:

S : in bit_vector(0 to 1);

E : in std_logic_vector(0 to 3);

siehe downto, subtype, type

Page 124: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

transport

transportsiehe after

Page 125: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

true

truesiehe boolean

Page 126: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

type

type

Ein Typ (type) ist charakterisiert durch eine Gruppe von Werten. DieTypen in VHDL sind:

Ganzzahlen (integer)

Fließkommazahlen (real)

Aufzählungen (enumeration)

Physikalische Typen (physical types)

Folge (array)

Gruppe (record)

Zeiger (access)

Datei (file)

Beispiele:

type A is range 0 to 31;

type AMPLITUDE is range –2.5 to +2.5;

type BOOL_TYP is (JA, NEIN);

type ZUSTAENDE is (Z0, Z1, Z2, Z3, Z4, Z5);

siehe subtype, units

Page 127: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

units

units

Ein physikalischer Datentyp ist ein Aufzählungstyp, der physikalischeGrößen repräsentiert. Die Deklaration dieses Typs beinhaltet dieSpezifizierung einer Basiseinheit (unit). Vielfache der Basiseinheitkönnen ebenfalls deklariert werden.

Syntax:

units

<Basiseinheit>;

[<abgeleitete Einheit>];

end units;

Beispiele:

type LAENGE is range 0 to 1E12

units

um;

mm = 1000 um;

m = 1000 mm;

km = 1000 m;

end units;

type SPANNUNG is range 0 to 1E6

units

mV;

V = 1000 mV;

end units;

Page 128: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

units

Vordefinierter Datentyp TIME:

type TIME is range implementation_defined

units

fs;

ps = 1000 fs;

ns = 1000 ps;

us = 1000 ns;

ms = 1000 us;

sec = 1000 ms;

min = 60 sec;

hr = 60 min;

end units;

siehe type

Page 129: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

unsigned

unsigned

Datentyp. Erfordert ieee.numeric_std oder ieee.std_logic_arith.

Wertevorrat: Vorzeichenlose ganze Zahlen.

Beispiel:

port( S: in unsigned (15 downto 0));

siehe signed

Page 130: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

until

untilsiehe wait

Page 131: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

use

use

Mit der use-Anweisung wird angegeben, welches Paket einer Bibliothekverwendet werden soll.

Beispiel:

library ieee;

use ieee.std_logic_1164.all;

entity EINS is

port( S: out std_ulogic);

.......

end EINS;

architecture VERHALTEN of EINS is

.......

end VERHALTEN;

siehe library, package

Page 132: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

variable

variable

Mit dem Schlüsselwort variable können Variable innerhalb einesProzesses lokal deklariert werden. Damit können innerhalb desProzessdurchlaufs Größen geändert werden und der Prozeß kann aufdiese Änderungen reagieren. Wenn der Wert der Variablen außerhalbdes Prozesses benötigt wird, so ist die Variable am Prozeßende an einSignal gleichen Typs zu übergeben.

Beispiele:

architecture KORREKT of TEST is

signal A: bit;

process ( CLK )

variable A_VAR: bit;

variable VEKTOR : bit_vector (7 downto 0)

:= (others => ‘1‘);

-- Die Variable VEKTOR hat 8 Elemente, die alle

-- auf ‘1‘ gesetzt werden

begin

.......

A <= A_VAR;

end process;

end KORREKT;

Page 133: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

wait

wait

Sequentielle Anweisung.

Prozesse ohne Empfindlichkeitsliste müssen mindestens eine wait-Anweisung enthalten. Diese dient zur Synchronisation. DerartigeProzesse werden automatisch bis zur nächsten wait-Anweisungausgeführt. Die dabei auszuführenden Signaländerungen erfolgen erst zudiesem Zeitpunkt. Mit wait on (nicht synthesefähig!) wird dieBearbeitung des Prozesses ausgesetzt, solange die angegebenen Signalekeine Pegelwechsel aufweisen. Mit wait until wird die Bearbeitung desProzesses ausgesetzt, solange die angegebene Bedingung nicht erfüllt ist.Mit wait for (nicht synthesefähig!) wird die Bearbeitung des Prozessesfür die angegebene Zeit ausgesetzt.

Syntax:

[<Bezeichner>:]

wait [on <Signalname>]

[until <Boolescher_Ausdruck>]

[for <Zeit>];

Page 134: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

wait

Beispiele:

process

begin

.......

wait on A, B, C;

.......

end process;

process

begin

.......

wait until (CLK=‘1‘ and CLK’event);

.......

end process;

process

begin

.......

wait for 20 ns;

end process;

siehe process

Page 135: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

when

when

Nebenläufige Anweisung.

Mit when läßt sich eine bedingte Signalzuweisung durchführen

Funktion: Bedingte Signalzuweisung.

Syntax:

[ Bezeichner :]

<Signalname> <= <logischer Ausdruck_1>

when <Bedingung_1> else

<logischer Ausdruck_2>

when <Bedingung_2> else

........

<logischer Ausdruck_n>;

Beispiel:

Y <= ‘0‘ when I = “00“ else

‘0‘ when I = “11“ else

‘1‘;

siehe case, select, with

Page 136: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

while

while

Sequentielle Anweisung.

In der while-Schleife wird die Schleifenausführung durch das Eintreteneiner Abbruchbedingung beendet. Deshalb ist sie nur bedingtsynthesefähig!

Funktion: Programmschleife, die solange ausgeführt wird, wie dieBedingung wahr ist.

Syntax:

while <Bedingung> loop

{<Sequentielle Anweisung>}

end loop;

Die Bedingung wird vor der Ausführung getestet.

Beispiel:

while (A < 6) loop

Y <= 3 * A;

A := A + 1;

end loop;

siehe exit, for, loop, next when

Page 137: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

with

with

Nebenläufige Anweisung.

Die with-Anweisung ermöglicht eine selektive Signalzuweisung.Funktional gesehen entspricht sie einer Auswahl aus einer Reihegleichberechtigter Möglichkeiten und hat eine Multiplexer-Struktur.

Funktion: Selektive Signalzuweisung.

Syntax:

[ Bezeichner :]

with <Signal-Kombination> select

<Signalname> <= <logischer Ausdruck_1>

when <Signal-wert_1>,

<logischer Ausdruck_2>

when <Signal-wert_2>,

.........

[<logischer Ausdruck_n> when others];

Beispiel:

with I select

Y <= ‘0‘ when “00“,

‘0‘ when “11“,

‘1‘ when others;

Page 138: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

X, x

X, x

Kennbuchstabe zur Kennzeichnung der Zahlenbasis.

Basis: Hexadezimal.

Beispiele:

x“A F f E“

X“AF_fE“

Page 139: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

xnor

xnor 93

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: Äquivalenz -Verknüpfung der Werte. Bei Arrays werden diekorrespondierenden Komponenten verknüpft.

Beispiele:

Y := A xnor B;

Y <= A xnor B;

Page 140: Prof. Dr. F. Schubert - users.etech.haw-hamburg.deusers.etech.haw-hamburg.de/users/reichardt/VHDLSynt.pdf · VHDL-Syntax F. Schubert 05/01 05/2001 Pnr, Rch, Sbr, Swr Prof. Dr. F.

VHDL-Syntax F. Schubert 05/01

xor

xor

Operator für Werte vom Typ bit oder boolean und eindimensionaleArrays dieser Typen.

Funktion: Exklusiv-Oder-Verknüpfung der Werte (Antivalenz). BeiArrays werden die korrespondierenden Komponenten verknüpft.

Beispiele:

Y := A xor B;

Y <= A xor B;