3.2 VHDL

3.2.1 Allgemeines

VHDL, kurz für "VHSIC Hardware Description Language", ist eine Sprache, die dafür entwickelt wurde, um das Verhalten und die Struktur von elektronischen Schaltungen zu beschreiben. Ursprünglich in den 1980er Jahren für das US-Verteidigungsministerium entwickelt, wird VHDL heute vor allem benutzt, um digitale Schaltungen zu entwerfen und zu testen.

3.2.2 Grundelemente von VHDL

Entity/Architecture

In VHDL wird eine Schaltung in zwei Teile unterteilt: Entity und Architecture.

-Entity beschreibt die Schnittstelle der Schaltung, also die Ein- und Ausgänge.
-Architecture beschreibt die eigentliche Funktionalität der Schaltung.

entity and_gate is
    port (
        a, b : in std_logic;
        y : out std_logic
    );
end entity and_gate;

architecture dataflow of and_gate is
begin
    y <= a and b;
end architecture dataflow;

Datentypen

VHDL hat verschiedene Datentypen wie bit, boolean oder integer. Ein wichtiger Typ ist std_logic, der verwendet wird, um elektrische Zustände wie 0, 1 oder auch unbestimmt darzustellen.

Signale und Variablen

Signal: Ein Objekt, das verwendet wird, um Werte zwischen Prozessen oder Entitäten zu übertragen. Signale haben eine Verzögerung und repräsentieren physische Verbindungen in Hardware.
Variable: Wird innerhalb eines Prozesses verwendet und hat keine zeitliche Verzögerung.

signal a, b : std_logic;

Gleichzeitige und sequentielle Anweisungen

Gleichzeitige Anweisungen: Werden in der Architektur verwendet, um die Logik der Schaltung zu beschreiben. Sie werden gleichzeitig ausgeführt und repräsentieren die parallele Natur von Hardware.
Sequentielle Anweisungen: Werden in Prozessen verwendet, um zeitabhängige Logik zu beschreiben. Sie werden nacheinander ausgeführt und repräsentieren die Abfolge von Operationen in der Schaltung.

architecture dataflow of and_gate is
begin
    y <= a and b; -- Gleichzeitige Anweisung
end architecture dataflow;

process (a, b) -- Sequentielle Anweisung
begin
    if a = '1' and b = '1' then
        y <= '1';
    else
        y <= '0';
    end if;
end process;

Prozesse

Prozesse sind Blöcke von sequentiellen Anweisungen, die verwendet werden, um zeitabhängige Logik zu beschreiben. Sie können auf Ereignisse wie Änderungen von Signalen reagieren und so das Verhalten der Schaltung steuern.

Generics und Constraints

Generics: Ermöglichen die Parameterisierung von Entitäten, so dass eine Entität flexibel für verschiedene Anwendungen konfiguriert werden kann.
Constants: Werte, die im Laufe der Simulation nicht verändert werden.

const CLK_FREQ : integer := 50e6; -- Konstante

generic (
    WIDTH : integer := 8
);

Packages und Libraries

Packages: Sammlungen von Datentypen, Unterprogrammen und anderen Elementen, die in VHDL-Designs wiederverwendet werden können.
Libraries: Container für Packages und andere Designeinheiten, die die Organisation und Wiederverwendung von Code erleichtern.

Attribute

Attribute geben spezielle Informationen über Teile der Schaltung, z.B. wie schnell ein Signal sein muss (Timing Constraints).