Hallo, guten Tag. Ich habe hier 2 verschiedene Programme wo die 8 LED hochgezählt werden und dann bei 255 wieder gelöscht werden und wieder von vorn geginnen. Beide funktionieren. Dies ist ein Programm aus einem Buch:
1 | library IEEE; |
2 | use IEEE.STD_LOGIC_1164.ALL; |
3 | use IEEE.NUMERIC_STD.ALL; |
4 | |
5 | entity binary_led is |
6 | Port ( clk : in STD_LOGIC; |
7 | leds : out STD_LOGIC_VECTOR(7 downto 0)); |
8 | end binary_led; |
9 | |
10 | architecture Behavioral of binary_led is |
11 | |
12 | signal c : integer range 0 to 4999999 := 0; |
13 | signal x : integer range 0 to 255 := 0; |
14 | |
15 | begin
|
16 | process begin |
17 | wait until rising_edge(clk); |
18 | if (c<4999999 ) then |
19 | c <= c+1; |
20 | else
|
21 | c <= 0; |
22 | if (x<255) then |
23 | x <= x+1; |
24 | else
|
25 | x <= 0; |
26 | end if; |
27 | end if; |
28 | end process; |
29 | -- Signal konvertieren und casten und an LEDs ausgeben
|
30 | leds <= std_logic_vector(to_unsigned(x,8)); |
31 | end Behavioral; |
Dann habe ich hier dieses Programm so umgeschrieben das der Rangewert zum Zählen benutzt wird ohne eine IF:
1 | library IEEE; |
2 | use IEEE.STD_LOGIC_1164.ALL; |
3 | use IEEE.NUMERIC_STD.ALL; |
4 | |
5 | entity binary_led is |
6 | Port ( clk : in STD_LOGIC; |
7 | leds : out STD_LOGIC_VECTOR(7 downto 0)); |
8 | end binary_led; |
9 | |
10 | architecture Behavioral of binary_led is |
11 | |
12 | signal c : integer range 0 to 4999999 := 0; |
13 | signal x : integer range 0 to 255 := 0; |
14 | |
15 | begin
|
16 | process begin |
17 | wait until rising_edge(clk); |
18 | c <= c+1; |
19 | if (c=1 ) then |
20 | x <= x+1; |
21 | end if; |
22 | end process; |
23 | -- Signal konvertieren und casten und an LEDs ausgeben
|
24 | leds <= std_logic_vector(to_unsigned(x,8)); |
25 | end Behavioral; |
Auch haben sich die Warnmeldungen von "11" bei beiden =rogrammen nicht geändert. Was könnte hier bei meinem umgesetzten Programm für ein Fehler auftreten? Danke. GRuss