/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-03/fsm-2021-06-28/vhdl.txt


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;