- Block
- Signal
Blöcke werden über Signale miteinander verbunden
- Konventionen
- Namensregeln
- Kommentare
- Zuweisungen
- Typologie
- Vektoren
- Aufbau der Schaltungsbeschreibung
- Header mit Bibliothek und Packageeinbindungen
- Entity für Schnittstellendefinition
- Architecture für Funktionsbeschreibung
- Nebenläufige oder sequentielle Umgebungen
- Nebenläufig
- Sequentiell
- Anweisungen
- Einfache Verknüpfungen
- Arithmetische Operatoren
- with/select
- when/else
- if/then
- case/is
- Konventionen
- Namensregeln
- Zwischen Gross und Kleinschreibung wird in VHDL nicht unterschieden
- ... das übliche
- Kommentare
- Komentare werden durch doppelten Bindestrich eingeleitet --
- Zuweisungen
- Zuweisungen
- Signal an ein anderes Signal
- konstanter Wert an Signal
- Zeichenkombination <=
- Von rechts nach links
Code: Alles auswählen
Y <= S; Y <= A or B; -- Falsch A => Y; -- Falsch
- Zuweisungen
- Namensregeln
- Typologie
- VHDL ist streng typgebundene Sprache
- boolean
- bit
- std_logic
- Typ: boolean
- Wertevorrat: true, false
- Verwendung: logische Abfragen (if)
- Typ: bit
- Wertevorrat: 0, 1
- Verwendung: Entwurf
- Typ: std_logic:
- Wertevorrat: 0, 1, Z, -, L, H, X, W
- Entwurf und Simulation
Bei Verknüpfungen müssen einzelne Signale vom selben Typ seinCode: Alles auswählen
signale <signalname>: typ; signal x0, x1, x2, x3: bit; signal EN: std_logic; signal on_of: boolean;
Code: Alles auswählen
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
- Deklaration
Code: Alles auswählen
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);
- Zuweisungen
Code: Alles auswählen
c <= a or b; c <= ('1', '0', '0', '0'); c <= "1000";
- Deklaration
- Aufbau der Schaltungsbeschreibung
- Header mit Bibliothek und Packageeinbindungen
- Entity für Schnittstellendefinition
- Architecture für Funktionsbeschreibung
- Header
- Definitionen die für Schaltungsbeschreibung gelten sollen
Code: Alles auswählen
library ieee; use ieee.std_logic_1164.all use ieee.std_logic_unsigned.all
- Entity
- Eingang
- Ausgang
- Bidirektional
- Eingang: in
- Ausgang: out
- Bidirektional: inout
Code: Alles auswählen
entity <blockname> is port ( <signalnamen>: <richtung> <typ>; <signalnamen>: <richtung> <typ>; <signalnamen>: <richtung> <typ> ); end;
Code: Alles auswählen
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: Alles auswählen
entity counter is port ( clk: in bit; rst: in bit; q: out bit_vector (3 downto 0) ); end;
- Die Funktion - Architecture
Code: Alles auswählen
architecture <beschreibungsname> of <blockname> is -- locale signale begin -- functionsbeschreibung end;
Code: Alles auswählen
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
- Nebenläufige oder sequentielle Umgebungen
- Nebenläufige
- 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?
Wird:Code: Alles auswählen
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: Alles auswählen
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
- Die erste umgebung ist nebenläufig
- Squentielle Umgebung
- Prozess
Code: Alles auswählen
process <empfindlichkeitsliste> -- lokale signale begin -- sequentielle umgebung end process;
- 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
Variablen im ProzessCode: Alles auswählen
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: Alles auswählen
process .. variable V std_logic_vector (3 downto 0); begin V := ... end;
- Prozess
- Nebenläufige
- Anweisungen
- Einfache Verknüpfungen
- not
- and
- or
- nand
- nor
- xor
- not
- Arithmetische Operatoren
- Addition +
- Subtraktion -
- gleich =
- ungleich /=
- kleiner <
- kleiner gleich <=
- groesser >
- groesser gleich >=
- with/select
- nebenläufig
Code: Alles auswählen
with <auswahlsignal> select ergebnis <= <Verknüpfung_1> when <auswahlwert_1>, <Verknüpfung_2> when <auswahlwert_2>, <Verknüpfung_n> when others;
- nebenläufig
- when/else
- nebenläufig
Code: Alles auswählen
<ergebnis> <= <Verknüpfung_1> when <Bedingung_1>, else <Verknüpfung_2> when <Bedingung_2>, else <Vernüpfung_n>;
- nebenläufig
- if/then
- sequentiell
Bedingung muss vom Typ Boolean seinCode: Alles auswählen
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;
- case/is
- wie with/select nur in sequentiell
Code: Alles auswählen
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;
- Einfache Verknüpfungen