VHDL-Kurs, Bibliotheken (Libraries)
In der Behandlung von VHDL Bibliotheken sind insgesamt drei Namensebenen definiert: Der Bibliotheksname (lib_name), der Name des Packages (package_name), das in die
Bibliothek kompiliert worden ist, und das spezifizierte Element innerhalb des Packages, z.B. ein Datentyp, eine Konstante oder eine Prozedur (item_name).
library lib_name; oder library lib_name1, lib_name2, ...;
|
Am Anfang eines VHDL-Codes müssen alle im folgenden Modell benutzten Bibliotheken bekannt gegeben werden. Aufzählungen mehrerer Bibliotheken sind möglich.
|
use lib_name.package_name.item_name; oder use lib_name.package_name.all;
|
Mit dem Schlüsselwort use wird der Zugriff auf ein Bibliothekselement eingeleitet. Mit der Vereinfachung all wird auf das gesamte Package package_name referenziert und alle Elemente dieses Packages können benutzt werden.
|
|
Neben den Packages, in denen sich globale und für mehrere VHDL-Sources gültige Deklarationen befinden, werden auch die später aufgeführten entity-, architecture- und configuration-Teile in eine library hinein kompiliert. Die library ist so gesehen eine Zwischenstation für Designs, aus denen die
kompilierten VHDL-Modelle für eine Simulation entnommen werden.
Vordefinierte Packages Neben den selbst zusammengestellten Packages und Libraries (s.u.) gibt es bereits eine große Anzahl
vordefinierter standardisierter Libraries und Packages. Hier nur einige wichtige:
std.STANDARD
|
Diese Bibliothek ist immer automatisch mit eingebunden und enthält eine Reihe der Grundspezifikationen wie z.B. bit, bit_vector und integer.
|
std.TEXTIO
|
Diese Bibliothek enthält verschiedene Textoperationen zur Texteingabe (über verschiedene Files und Tastatur) und Textausgabe (in verschiedene Files oder auf den Monitor). Sie wird überwiegend für
Testbenches benutzt und stellt das Grundgerüst zur Kommunikation einer VHDL Simulation zum Anwender hin dar.
|
IEEE.std_logic_1164
|
Häufig verwendete Library. In dieser wird der bit-Typ auf die std_logic bzw. std_ulogic erweitert. Die Werte dieses Typs sind:
- `U´ : Signal ist noch nicht initialisiert
- `1´, `0´ : Standardwerte der Bits
- `H´, `L´ : Schwach treibende `0´ bzw. `1´
- `X´ : Treibendes Signal mit unbekanntem Wert
- `W´ : Schwach treibendes Signal mit unbekanntem Wert
- `-´ : Wert ist Don´t Care (z.B. bei Tabellen)
Mit std_logic_vector(range) bzw. std_ulogic_vector(range) wird
das Prinzip auf Vektoren erweitert. range wird durch einen ganzzahligen Indexbereich definiert, z.B. 7 downto 0 (Byte) oder 3 to 6 . Der Zugriff auf ein einzelnes Bit innerhalb eines Vektors erfolgt durch Indizierung entsprechend bit_signal <= vector_signal(index).
|
|
|
|