Du hast ein Problem mit dem Signal Anz. Signale werden immer erst am
Ende des Prozesses zugewiesen. Deshalb wird hier als Ergebnis Anz
entweder 0 oder 1 sein...
Du brauchst für diese eigenartige Aufgabe eine /Variable/:
1 | LIBRARY IEEE;
|
2 | USE IEEE.STD_LOGIC_1164.ALL;
|
3 | USE IEEE.NUMERIC_STD.ALL;
|
4 |
|
5 | ENTITY Search IS
|
6 | PORT
|
7 | ( LEDon : IN STD_LOGIC_VECTOR(81 DOWNTO 1);
|
8 | Ende : OUT STD_LOGIC
|
9 | );
|
10 | END Search;
|
11 |
|
12 | ARCHITECTURE SearchEnd OF Search IS
|
13 | BEGIN
|
14 | SE:PROCESS(LEDon)
|
15 | Variable Anz: INTEGER:=0;
|
16 | BEGIN
|
17 | Anz := 0;
|
18 | FOR i IN 1 TO 80 LOOP
|
19 | -- IF LEDon( i ) = '1' AND LEDon( i + 1 ) = '1' THEN -- So
|
20 | IF LEDon(i+1 downto i) = "11" THEN -- oder so
|
21 | Anz:=Anz+1;
|
22 | END IF;
|
23 | END LOOP;
|
24 | IF Anz = 0 THEN
|
25 | Ende <= '1';
|
26 | else
|
27 | Ende <= '0';
|
28 | END IF;
|
29 | END PROCESS SE;
|
30 | END SearchEnd;
|
Ich würde es aber noch koürzer schreiben, und gleich beim Auftreten
einer "11" abbrechen:
1 | LIBRARY IEEE;
|
2 | USE IEEE.STD_LOGIC_1164.ALL;
|
3 | USE IEEE.NUMERIC_STD.ALL;
|
4 |
|
5 | ENTITY Search IS
|
6 | PORT
|
7 | ( LEDon : IN STD_LOGIC_VECTOR(81 DOWNTO 1);
|
8 | Ende : OUT STD_LOGIC
|
9 | );
|
10 | END Search;
|
11 |
|
12 | ARCHITECTURE SearchEnd OF Search IS
|
13 | BEGIN
|
14 | SE:PROCESS(LEDon)
|
15 | BEGIN
|
16 | Ende <= '1'; -- Defaultwert
|
17 | FOR i IN 1 TO 80 LOOP
|
18 | IF LEDon(i+1 downto i) = "11" THEN
|
19 | Ende <= '0';
|
20 | exit; -- "11" gefunden --> Ende
|
21 | END IF;
|
22 | END LOOP;
|
23 | END PROCESS SE;
|
24 | END SearchEnd;
|
Damit spare ich mir das Mitzählen von "11" Kombinationen, denn offenbar
reicht es aus, wenn mindestens eine aufgatreten ist...
Viel hilft viel...
1 | LIBRARY IEEE;
|
2 | USE IEEE.STD_LOGIC_1164.ALL;
|
3 | USE IEEE.STD_LOGIC_ARITH.ALL;
|
4 | USE IEEE.STD_LOGIC_UNSIGNED.ALL;
|
5 | USE IEEE.NUMERIC_STD.ALL;
|
Siehe zu dem Thema den
Beitrag "Re: Mittelwertberechnung aus vier 8-Bit Zahlen"
BTW:
Aus deinem Code:
1 | Ende : OUT STD_LOGIC:=0
|
Du streust dir selber Sand ins Auge, wenn du einem nichtspeichernden
Signal einen Defaultwert zuweist!