/media/sda-magnetic/david/Dok-15-2023-11-27/Dokumente-15-appended-2023-10-11/append-temporarly/wichtig.txt


[list=1]
[*] Block
[*] Signal
[/list]

Blöcke: Zähler, Multiplexer, Dekoder, ...

Blöcke werden über Signale miteinander verbunden

[list=1]
[*] Konventionen
[list=1]
[*] Namensregeln
[*] Kommentare
[*] Zuweisungen
[/list]
[*] Typologie
[*] Vektoren
[*] Aufbau der Schaltungsbeschreibung
[list=1]
[*] Header mit Bibliothek und Packageeinbindungen
[*] Entity für Schnittstellendefinition
[*] Architecture für Funktionsbeschreibung
[/list]
[*] Nebenläufige oder sequentielle Umgebungen
[list=1]
[*] Nebenläufig
[*] Sequentiell
[/list]
[*] Anweisungen 
[list=1]
[*] Einfache Verknüpfungen
[*] Arithmetische Operatoren 
[*] with/select
[*] when/else
[*] if/then 
[*] case/is
[/list]
[/list]

[list=1]
[*] Konventionen
[list=1]
[*] Namensregeln

[list]
[*] Zwischen Gross und Kleinschreibung wird in VHDL nicht unterschieden
[*] ... das übliche
[/list]

[*] Kommentare
[list]
[*] Komentare werden durch doppelten Bindestrich eingeleitet --
[/list]

[*] Zuweisungen 
[list]
[*] Zuweisungen 
[list]
    [*] Signal an ein anderes Signal
    [*] konstanter Wert an Signal
[/list]
[*] Zeichenkombination <=
[*] Von rechts nach links
[/list]

Beispiel:
[code]
Y <= S;
Y <= A or B;
-- Falsch A => Y; -- Falsch
[/code]

[/list]
[*] Typologie 
[list]
[*] VHDL ist streng typgebundene Sprache
[/list]

Es genügt:
[list]
[*] boolean
[*] bit
[*] std_logic
[/list]

[list=1]
[*] Typ: boolean
[list=1]
[*] Wertevorrat: true, false
[*] Verwendung: logische Abfragen (if)
[/list]
[*] Typ: bit
[list=1]
[*] Wertevorrat: 0, 1
[*] Verwendung: Entwurf
[/list]
[*] Typ: std_logic:
[list=1]
[*] Wertevorrat: 0, 1, Z, -, L, H, X, W
[*] Entwurf und Simulation
[/list]
[/list]

Deklartion:
[code]
signale <signalname>: typ;

signal x0, x1, x2, x3: bit;
signal EN: std_logic;
signal on_of: boolean;
[/code]
Bei Verknüpfungen müssen einzelne Signale vom selben Typ sein

[code]
0: starke 0
1: starke 1
Z: hochohmig
-: don't care
U: unbekannt
X: konflikt
L: Schwache 0
H: Schwache 1
W: Schwaches X
[/code]

[*] Vektoren
[list=1]
[*] Deklaration
[code]
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);
[/code]
[*] Zuweisungen
[code]
c <= a or b;
c <= ('1', '0', '0', '0');
c <= "1000";
[/code]
[/list]
[*] Aufbau der Schaltungsbeschreibung
[list=1]
[*] Header mit Bibliothek und Packageeinbindungen
[*] Entity für Schnittstellendefinition
[*] Architecture für Funktionsbeschreibung
[/list]

[list=1]
[*] Header 
[list]
[*] Definitionen die für Schaltungsbeschreibung gelten sollen
[/list]
[code]
library ieee;
use ieee.std_logic_1164.all
use ieee.std_logic_unsigned.all
[/code]
[*] Entity

[list=1]
[*] Eingang
[*] Ausgang
[*] Bidirektional
[/list]

[list=1]
[*] Eingang: in
[*] Ausgang: out
[*] Bidirektional: inout
[/list]

[code]
entity <blockname> is
port
(
    <signalnamen>: <richtung> <typ>;
    <signalnamen>: <richtung> <typ>;
    <signalnamen>: <richtung> <typ>
);
end;
[/code]

[code]
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;
[/code]

[code]
entity counter is
port
(
    clk: in bit;
    rst: in bit;
    q: out bit_vector (3 downto 0)
);
end;
[/code]

[*] Die Funktion - Architecture
[code]
architecture <beschreibungsname> of <blockname> is
-- locale signale 
begin 
-- functionsbeschreibung
end;
[/code]
  
[code]  
architecture mymux of multiplexer is 
    signal a, b, y: bit_vector (0 to 3);
begin 
    a <= (a0, a1, a2, a3);
    b <= (b0, b1, b2, b3);
    
    y <= a when (s='0') else b;
    
    y0 <= y(0);
    y1 <= y(1);
    y2 <= y(2);
    y3 <= y(3);
end mymux
[/code]

[*] Nebenläufige oder sequentielle Umgebungen
[list=1]
[*] Nebenläufige 


[list]
[*] In C werden alle Anweisungen hintereinander abgearbeitet
[*] Anweisungen in VHDL in der Regel nebenläufig, d.h. parallel
[*] Befindet man sich in einer nebenläufigen oder Sequentiellen Umgebung?
[/list]

Aus:
[code]
architecture verhalten of multiplexer is 
    signal a, b, y: bit_vector (0 to 3);
begin 
    a <= (a0, a1, a2, a3);
    b <= (b0, b1, b2, b3);
    
    y <= a when (s='0') else b;
    
    y0 <= y(0);
    y1 <= y(1);
    y2 <= y(2);
    y3 <= y(3);
end verhalten
[/code]

Wird:

[code]
architecture mymux of multiplexer is 
    signal a, b, y: bit_vector (0 to 3);
begin 
    a <= (a0, a1, a2, a3);
    b <= (b0, b1, b2, b3);
    
    y <= a when (s='0') else b;
    
    y0 <= y(0);
    y1 <= y(1);
    y2 <= y(2);
    y3 <= y(3);
end mymux
[/code]
[*] Die erste umgebung ist nebenläufig


[*] Squentielle Umgebung
[list=1]
[*] Prozess 
[code]
process <empfindlichkeitsliste>
-- lokale signale   
begin 
-- sequentielle umgebung
end process;
[/code]
[list]
[*] Ist eine Sequentielle Umgebung abgearbeitet, startet die Ausführung von vorne
[*] Eine parallele Umgebung kann mehrere sequentielle enthalten, die parallel ausgeführt werden
[*] Empfindlichkeitsliste: Alle signale die sich potentiell ändern können
[/list]
[code]
architecture verhalten of counter is
    signal qint: std_logic_vector ( 3 downto 0);
begin 
    process (reset, clk)
    begin 
        if (reset='0') then 
            quint <= x"0";
        elseif (clk='1') and clk'event
        then 
            qint <= qint+1;
        end if;
    end process;
    
    q<=qint;
end;
[/code]
Variablen im Prozess
[code]
process ..
    variable V std_logic_vector (3 downto 0);
begin 
    V := ...
end;
[/code]
[/list]
[/list]
[/list]
[*] Anweisungen 
[list=1]
[*] Einfache Verknüpfungen
[list]
[*] not
[*] and
[*] or
[*] nand
[*] nor
[*] xor
[*] not
[/list]
[*] Arithmetische Operatoren 
[list]
[*] Addition + 
[*] Subtraktion -
[*] gleich = 
[*] ungleich /=
[*] kleiner < 
[*] kleiner gleich <=
[*] groesser >
[*] groesser gleich >=
[/list]
[*] with/select
[list]
[*] nebenläufig 
[code]
with <auswahlsignal> select 
ergebnis <= <Verknüpfung_1> when <auswahlwert_1>,
            <Verknüpfung_2> when <auswahlwert_2>,
            <Verknüpfung_n> when others;
[/code]            
[/list]
[*] when/else
[list]
[*] nebenläufig 
[code]
<ergebnis> <=   <Verknüpfung_1> when <Bedingung_1>, 
                else <Verknüpfung_2> when <Bedingung_2>, 
                else <Vernüpfung_n>;
[/code]                
[/list]
[*] if/then 
[list]
[*] sequentiell
[/list]
[code]
if <Bedingung_1>        then <Sequentielle Anweisungen 1>;
elseif <Bedingung_2>    then <Sequentielle Anweisungen 2>;
elseif <Bedingung_3>    then <Sequentielle Anweisungen 3>;
else                         <Sequentielle Anweisungen n>;
end if;
[/code]
Bedingung muss vom Typ Boolean sein 

[*] case/is 
[list]
[*] wie with/select nur in sequentiell 
[/list]
[code]
case <testsignal> is
    when <Wert_1> => <Sequentielle Anweisungen 1>;
    when <Wert_2> => <Sequentielle Anweisungen 2>;
    when <Wert_3> => <Sequentielle Anweisungen 3>;
    when others   => <Sequentielle Anweisungen n>; 
end case;
[/code]