1 | library ieee;
|
2 | use ieee.std_logic_1164.all;
|
3 | use ieee.numeric_std.all;
|
4 |
|
5 | entity knight_rider is
|
6 | port(
|
7 | clk, reset, enable : in std_logic;
|
8 | A : out std_logic_vector(7 downto 0)
|
9 | );
|
10 | end knight_rider;
|
11 |
|
12 |
|
13 |
|
14 | architecture sequenz of knight_rider is
|
15 |
|
16 | type zustaende is (z0, z1);
|
17 | signal zustand, folge_z : zustaende;
|
18 |
|
19 |
|
20 | begin
|
21 |
|
22 | z_speicher: process(clk, reset) -- Zustandsaktualisierung
|
23 | begin
|
24 |
|
25 | if reset = '1' then zustand <= z0;
|
26 | elsif clk = '1' and clk'event then
|
27 | if enable = '1' then zustand <= folge_z;
|
28 | end if;
|
29 | end if;
|
30 |
|
31 | end process z_speicher;
|
32 |
|
33 |
|
34 | ue_sn: process(zustand) -- Folgezustandsberechnung
|
35 | begin
|
36 |
|
37 | case zustand is
|
38 | when z0 => folge_z <= z1;
|
39 | when z1 => folge_z <= z0;
|
40 | end case;
|
41 |
|
42 | end process ue_sn;
|
43 |
|
44 |
|
45 | aus_sn: process(zustand) -- Ausgangsberechnung
|
46 | begin
|
47 |
|
48 | case zustand is
|
49 | when z0 => A <= "00000000" after 300 ms;
|
50 | A <= "01000000" after 300 ms;
|
51 | A <= "00100000" after 300 ms;
|
52 | A <= "00010000" after 300 ms;
|
53 | A <= "00001000" after 300 ms;
|
54 | A <= "00000100" after 300 ms;
|
55 | A <= "00000010" after 300 ms;
|
56 | A <= "00000001" after 300 ms;
|
57 |
|
58 | when z1 => A <= "00000000" after 300 ms;
|
59 | A <= "00000001" after 300 ms;
|
60 | A <= "00000010" after 300 ms;
|
61 | A <= "00000100" after 300 ms;
|
62 | A <= "00001000" after 300 ms;
|
63 | A <= "00010000" after 300 ms;
|
64 | A <= "00100000" after 300 ms;
|
65 | A <= "01000000" after 300 ms;
|
66 | A <= "10000000" after 300 ms;
|
67 | end case;
|
68 |
|
69 | end process aus_sn;
|
70 |
|
71 | end sequenz;
|