Blöcke: Zähler, Multiplexer, Dekoder
Signale
Blöcke sind über Signale miteinander verbunden
Es wird nicht zwischen Groß- und Kleinschreibung unterschieden
Kommentare: Doppelter Bindestrich
Zuweisung
Y <= B;
Y <= A or B;
Typologie:
Streng typgebundene Sprache
- boolean
- bit
- std_logic
boolean: true und false
bit: 0, 1
std_logic: 0, 1, Z, -, U, L, H, X, W
Bei Verknüpfungen müssen alle denselben Typ haben
0: starke 0
1: starke 1
Z: hochohmig
-: don't care
U: unbekannt
X: Konflikt
L: schwache 0
H: schwache 1
W: Schwaches X
Vektoren
Eindimensionales Feld
Laufindex von Vektor: Integerzahl
signal <signalname>: typ (<lower> to <upper>);
signal <signalname>: typ (<upper> downto <lower>);
signal x: bit_vector (0 to 7);
signal a: std_logic_vector (2 to 4);
signal r: bit_vector (3 downto 0);
Zuweisung:
c <= a or b;
c <= ('1', '0', '0', '0');
c <= "1000";
&: Zu breiteren Vektoren zusammenfassen
Aufbau der Schaltungsbeschreibung
1. Header mit Bibliotheks- und Packagebeschreibung
2. Entity für Schnittstellenfunktion
3. Architecture für die Funktionsbeschreibung
Schnittstellentyp Entity
In "C": Deklaration
Name des Blocks, der die Schaltung repräsentiert, definiert sämtliche Signale, die an diesen Block angeschlossen sind
Eingang: in
Ausgang: out
Bidirektional: inout
entity <blockname> is
port
(
<signalname>: <richtung> <typ>;
<signalname>: <richtung> <typ> -- beim Letzten kein ';'
);
end;
entity Multiplexer is
port
(
A0, A1, A2, A3: in bit;
B0, B1, B2, B3: in bit;
S in bit;
Y0, Y1, Y2, Y3: out bit
);
end;
entity Counter is
port
(
CLK: in bit;
RESET: in bit;
Q: out bit_vector (3 downto 0)
);
end;
Funktion, Architecture
Der letzte Abschnitt ist die Beschreibung der Funktion des eben definierten Blocks
architecture <Beschreibungsname> of <blockname> is
begin
end;
architecture verhalten of Multiplexer is
signal a, b, y: bit_vector (0 to 3);
begin
a <= (a0, a1, a2, a3);
b <= (a0, a1, a2, a3);
y <= a when (s='0') else b;
y0 <= y (0);
y1 <= y (1);
y2 <= y (2);
y3 <= y (3);
end verhalten;