Ich habe ein seltsames Problem:
Ein else-Zeig wird nicht ausgeführt und die darin verborgene Bedingung
nicht getestet. Folgende Ausgangssituation: Es gibt mehrer
Möglichkeiten, wann ein matched Signal "an" sein soll, die sich
gegenseitig komplett ausschließen. Der Einfachheit halber habe ich es
mit IFs realsiert.
1 | if grundbedingung = '1' then
|
2 |
|
3 | if option1 = '1' then
|
4 | matched <= '1';
|
5 |
|
6 | elsif option2 ='1' then
|
7 | matched <= '1';
|
8 |
|
9 | elsif option3 ='1' then
|
10 | matched <= '1';
|
11 |
|
12 | else
|
13 | matched <= '0';
|
14 | end if;
|
15 |
|
16 | else
|
17 | matched <= '0';
|
18 |
|
19 | end if;
|
Das funktioniert auch. Nun ist es aber so, dass die option 2 und 3
unterschieden werden sollen. option 2 soll nur dann geprüft werden, wenn
ein counter_bit high ist, ansonsten sollen alle "matched" für option 2
weggeblendet werden. Daher habe ich es so formuliert wie unten, was
bezüglich der option 2 auch klappt - sie reagiert nur in jedem 2. Fall.
1 | if grundbedingung = '1' then
|
2 |
|
3 | if option1 = '1' then
|
4 | matched <= '1';
|
5 |
|
6 | elsif count(3) = '1' then
|
7 |
|
8 | if option2 ='1' then
|
9 | matched <= '1';
|
10 | else
|
11 | matched <= '0';
|
12 | end if;
|
13 |
|
14 | else -- count(3) nicht 1
|
15 |
|
16 | if option3 ='1' then
|
17 | matched <= '1';
|
18 | else
|
19 | matched <= '0';
|
20 | end if;
|
21 |
|
22 |
|
23 | matched <= '0';
|
24 | end if;
|
25 |
|
26 | else
|
27 | matched <= '0';
|
28 |
|
29 | end if;
|
Leider wird aber die konkurrente option 3 (eine leicht modifizierte 2)
nicht angefahren! Wenn ich schreibe if count(3) = '0', dann verhält sich
alles erwartungsgemäss invers - aber wieder wird die 3 nicht
angesprungen.
Ich kann sogar statt der 3 eine komplette Kopie der 2 dort hin
schreiben, was dazu führen müsste, dass die Fallunterscheidung gemäss
counter logisch rausfiele - sie wird aber nicht angesprungen.
Woran kann das liegen?