library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity top is end; architecture mch of top is subtype byte is std_logic_vector(7 downto 0); subtype zehnerzahl is integer range 0 to 5; signal zeichen : byte; signal minuten_10, sekunden_10: zehnerzahl; -- Aufzaehlungstyp type farben is (rot, blau, gelb); -- Felder -- Beispiel: ein Feld mit 64 Byte. Das entspricht einem Speicher mit 64 Bytes. type speicher is array (integer range 0 to 63) of byte; -- Beispiel für eine Feldinitialisierung signal mem64: speicher := (7 => x"66", others => x"00"); -- unconstrained array: Der range ist noch unbestimmt. -- Er wird erst festgelegt, wenn ein Signal/eine Variable dieses Typs definiert wird type speicheru is array (integer range <>) of byte; -- Definition eines Feldes mit erst hier festgelegter Länge signal mem: speicheru(0 to 100); -- Der record entspricht einer Struktur in C type speicher2 is record speicherint: speicher; zeit_lese: positive range 1 to 3; zeit_schreibe: positive range 2 to 5; end record; -- Beispiel für eine Initialisierung eines records signal mem3: speicher2 := ( ( others => x"00") , 2, 4); -- Nur zur Demo in der architecture signal almost_full, almost_empty: boolean; signal i: natural range mem'range := 0; begin -- Beispiel für gleichzeitigen(!) Zugriff auf mehrere Elemente eines Feldes -- Das kann schnell sehr aufwendig in der Hardware werden, da alle Daten parallel übertragen werden. -- Hier sind es 13*8=104 Leitungen (13 Elemente, jedes Element hat 8 Bits) mem64(8 to 20) <= mem64(0 to 12); -- Zugriff auf ein Element des records mem3.zeit_schreibe <= 3; -- Beispiele für Attribute almost_full <= true when i >= mem'high - 1 else false; almost_empty <= true when i <= mem'low + 1 else false; end;