VHDL-Kurs, Hierarchische Sprachelemente
Mit den folgenden Sprachelementen erfolgt in einem VHDL-Code die hierarchische Strukturierung.
package package_name is [Deklarationen, z.B. constant, component, function, procedure, resolution function, ...] end package_name;
package body package_name is [Spezifikationen, z.B. function, procedure, resolution function] end package_name;
|
In einem Package werden Definitionen eines Systems oder eines Designs zusammengefaßt, auf das alle Teile einen gemeinsamen Zugriff haben sollen. Dieses sind im Allgemeinen globale Konstanten und
selbst definierte Typen, es können hier aber auch Prozeduren und Funktionen (z.B. Resolution Functions) aufgeführt werden. In dem package body befinden sich die
Ausführungsteile der Prozeduren und Funktionen, während sich in der oberen Package Deklaration nur die entsprechenden Prozedur- und Funktionsaufrufe befinden, z.B. procedure write_byte (addr, data : in integer);
|
entity entity_name is port (sig_1_name : in sig_1_typename; sig_2_name : out sig_2_typename;
... b0, b1, b2 : in b_typename; sig_n_name : inout sig_n_typename);
|
Die Entity beschreibt den Designnamen und die Schnittstellen des Designs. Der spätere Zugriff in anderen Teilen des Codes erfolgt über den Designnamen (hier: entity_name).
Die Ports sind Signale, die in der architecture (s.u.) automatisch zur Verfügung stehen. Diese können die Option in, out oder inout haben, je nachdem ob das Signal ein Eingangs-, Ausgangs- oder ein bidirektionales Signal ist. Durch eine Entity wird kein Verhalten des Designs definiert.
|
architecture arch_name of entity_name is [Deklarationen, z.B. constant, signal, component, function, procedure, ] begin
... end architecture_name;
|
Das Verhalten eines Designs (entity_name) wird in der architecture beschrieben. In VHDL ist es durchaus möglich, einem Design mehrere
Verhalten zuzuordnen, z.B. ein Verhaltensmodell und eine Gattermodell. Die Zuordnung erfolgt über den arch_name und dem entity_name. In dem
Deklarationsteil der architecture werden lokale Konstanten, Signale, Komponenten, usw. deklariert, die nur innerhalb dieser architecture bekannt sind.
|
component component_name port (sig_1_name : in sig_1_typename;
sig_2_name : out sig_2_typename; ... sig_n_name : inout sig_n_typename); end component;
inst_name : component_name port map (archsig_1, archsig_2, ... archsig_n);
|
Mit einer component kann in eine architecture ein anderes Element über seine entity eingebaut werden. Die Deklaration (links oben) erfolgt im Deklarationsteil einer architecture, die Einbindung innerhalb der architecture durch: instance_name : comp_name port map (...);
In der port map werden die ports der Komponente mit den Signalen der jeweiligen architecture verbunden. Eine von zwei möglichen Methoden ist das Aufführen der Signale in der Reihenfolge der Port-Deklaration.
|
configuration conf_name of entity_name is for architecture_name ... for comp_inst_name : comp_name use entity
lib_name.comp_name(arch_comp_name); end for; ... end for; end conf_name;
configuration conf_name of entity_name is end conf_name;
|
Mit der configuration wird für eine Simulation die Struktur und Zuordnung der Entities und der jeweiligen Architekturen des obersten Designs (entity_name) festgelegt.
In der Konfiguration mit Namen conf_name wird dem Design entity_name die Architektur architecture_name zugewiesen.
Diese wiederum enthält in diesem Beispiel eine oder mehrere Komponenten (entity), deren architecture wiederum auf gleiche Weise ausgewählt wird. In dem Beispiel
links befindet sich in der Architektur architecture_name eine Instantiierung der Komponente comp_name (Name in der Deklaration) mit dem Namen comp_inst_name. Dieser Instanz wird die Architektur arch_comp_name aus der Library lib_name zugewiesen wird.
... ist alles etwas kompliziert, aber sehr flexibel!
Gibt es pro entity nur eine architecture, kann bei vielen VHDL-Kompilern die vereinfachte configuration Version benutzt werden: Der Kompiler sucht sich so selbst die passende und einzig mögliche Konfiguration.
|
|
 |
|