Hallo an alle,
Seit Freitag beschäftige ich mich mit VHDL und vesuche gerade mein
erstes "Knight-Rider"-Lauflicht mit einem Ein-Aus-Schalter zu
beschreiben
1 | library IEEE;
|
2 | use IEEE.std_logic_1164.all;
|
3 | use IEEE.numeric_std.all;
|
4 |
|
5 | entity lauflicht is
|
6 | port (
|
7 | clk : in STD_LOGIC;
|
8 | enable : in STD_LOGIC;
|
9 | leds : out STD_LOGIC_VECTOR(7 downto 0)
|
10 | );
|
11 | end lauflicht;
|
12 |
|
13 | architecture BEHAVIOUR of lauflicht is
|
14 |
|
15 | signal direction : std_logic := '0';
|
16 | signal shiftreg : std_logic_vector (7 downto 0) := "00000000";
|
17 |
|
18 | begin
|
19 | process(clk, enable)
|
20 | begin
|
21 | if rising_edge(clk) then
|
22 | if enable = '1' then
|
23 |
|
24 | if shiftreg = "00000000" then
|
25 | shiftreg <= "00000001";
|
26 | end if;
|
27 |
|
28 | if direction = '0' then
|
29 | shiftreg <= shiftreg(6 downto 0) & '0';
|
30 | if shiftreg = "01000000" then
|
31 | direction <= '1';
|
32 | end if;
|
33 | else
|
34 | shiftreg <= '0' & shiftreg(7 downto 1);
|
35 | if shiftreg = "00000010" then
|
36 | direction <= '0';
|
37 | end if;
|
38 | end if;
|
39 | else
|
40 | shiftreg <= "00000000";
|
41 | direction <= '0';
|
42 | end if;
|
43 |
|
44 | end if;
|
45 | end process;
|
46 |
|
47 | leds <= shiftreg;
|
48 | end BEHAVIOUR;
|
Das Problem liegt, wenn enable 0 ist und dadurch das Schieberegister auf
0 gesetzt wird. Denn wenn Enable auf 1 geht, wird das Scheiberegister
nicht auf 1 gesetzt.
Ich weiß, dass bei Signalen die Signalzuweisung erst zu Ende des
Prozesses erfolgt.
Ich hoffe es kann mir wer helfen.
Danke im Voraus
lg Martin