VHDL2_Sprachelemente und Concurrent Statements (Nebenläufige Anweisungen)
Inhalt nSprachelemente und Objekte nOperatoren nConcurrent Statements (Nebenläufige Anweisungen)
Sprachelemente und Objekte
Kommentare -- Das ist eine Kommentarzeile -- auch eine zweite Zeile muss mit -- eingeleitet werden Entity nand4 IS ( -- Kommentar bis zum Zeilenende -- VHDL ist unempfindlich hinsichtlich Klein- und Grossschreibung ! -- Jedoch ist es sinnvoll, wenn Sie in Ihrer Gruppe eine Konvention -- hinsichtlich der Namensgebung haben
Daten Objekte CONSTANT a: std_logic_vector (7 DOWNTO 0) := ; VARIABLE b: std_logic_vector (7 DOWNTO 0) ; SIGNAL c: std_logic ; CONSTANT name [, name...]: Type := wert; VARIABLE name [, name...]: Type [:= wert]; SIGNAL name [, name...]: Type [:= wert]; NameDatentyp deklaration Zuweisung eines Wertes -- std_logic Datentypen sind definiert in Package ieee.std_logic_1164
Vordefinierte Typen Deklarationen
Vordefinierte Datentypen DatentypenMögliche Zustände der Datentypen integer0, 1, 2, 345, 4, -1, -2, -3 booleanTrue oder false bit1 oder 0 bit_vector std_logic U uninitialized X forcing unknown 0 forcing zero 1 Forcing one Z High Impedance W weak unknown L weak zero H weak one - dont care std_logic_vector oder HHHHLLH unsigned signed
SIGNAL a, b: std_logic ; SIGNAL c: std_logic_vector (7 DOWNTO 0) ; SIGNAL zaehler: unsigned (6 DOWNTO 0) ; a <= 1; b <= 0; c(7 DOWNTO 2)<= c(1) <= 1; c(0) <= 0; Zuweisung von Werten: Deklaration von Signalen: Beispiel zur Verwendung von vordefinierten Datentypen
Operatoren
:=Zuweisung für VariablenV := 5; <=Zuweisung für SignaleS <= ( a AND b) Zuweisungs Operatoren
a <= (b and c) or d ; c b d & >1 a logischer Operator Beispiel von logischen Operatoren
SIGNAL a: std_logic_vector (7 DOWNTO 0) ; SIGNAL b: std_logic_vector (7 DOWNTO 0) ; SIGNAL c: std_logic ; =gleich <kleiner >grösser /=ungleich <=Kleiner gleich >=Grösser gleich Relationaler OperatorZuweisung c <= 1 WHEN (a <= b) ELSE 0; Beispiel von relationalen Operatoren
SIGNAL a: unsigned (7 DOWNTO 0) ; SIGNAL b: unsigned (7 DOWNTO 0) ; SIGNAL c: unsigned (7 DOWNTO 0) ; SIGNAL d: unsigned (15 DOWNTO 0) ; +addition -subtraktion & Verknüpfungs- operator *multiplikation /division c <= a + b; d <= a & b; <= & Beispiel von arithmetischen Operatoren
Concurrent Statements
Concurrent Statements am Beispiel des When-Else ARCHITECTURE comb OF test IS BEGIN q <= NOT (a OR b); y <= 1 WHEN ( a = 0 AND b = 1) ELSE 0; END comb; Concurrent Statements werden alle zum gleichen Zeitpunkt ausgewertet. Die Reihenfolge in der sie stehen spielt keine Rolle. Befinden sich zwischen BEGIN und END einer Architektur.
X d c b a s x 4 Multiplexer
4 x 4 Multiplexer mit Boolscher Logik ENTITY mux IS PORT ( a,b,c,d : IN std_logic_vector(3 downto 0); S : IN std_logic_vector(1 downto 0); X : OUT std_logic_vector(3 downto 0)); END mux; ARCHITECTURE comb OF mux IS BEGIN x(3) <= (a(3) AND NOT (s(1)) AND NOT(s(0))) OR(b(3) AND NOT (s(1)) AND s(0)) OR(c(3) AND s(1) AND NOT(s(0))) OR(d(3) AND s(1) AND s(0)) ; x(2) <= (a(2) AND NOT ((s(1)) AND NOT(s(0)) OR(b(2) AND NOT (s(1)) AND s(0)) – USW. END comb;
4 x 4 Multiplexer mit When-Else ENTITY mux IS PORT ( a,b,c,d : IN std_logic_vector(3 downto 0); S : IN std_logic_vector(1 downto 0); X : OUT std_logic_vector(3 downto 0)); END mux; ARCHITECTURE comb OF mux IS BEGIN x <= a WHEN (s = "00") ELSE b WHEN (s = "01") ELSE c WHEN (s = "10") ELSE d ; END comb; Die erste zutreffende Zeile wird dem Ausgang zugewiesen, alle nachfolgenden fallen heraus. (priorisierend) Bedingungen dürfen sich überlappen: when (Y = 5) else...when (Y <=5) else... Jedes when benötigt immer ein else
Beispiel für Priorität ENTITY mux IS PORT ( a,b,c : IN std_logic_vector(3 downto 0); S : IN std_logic_vector(1 downto 0); X : OUT std_logic_vector(3 downto 0)); END mux; ARCHITECTURE comb OF mux IS BEGIN x <= a WHEN (s(0) = 1) ELSE b WHEN (s = "10") ELSE c ; END comb;