else-Zweig wird nicht ausgeführt

OP (Firma: Projektleiter Medizinsoftware) #2748294
Lesenswert?
• ▲
▼
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?
Gast #2748305
Lesenswert?
• ▲
▼
Es könnte sein, dass es bei dir etwas anders ist, aber normalerweise 
vergleicht man mit == und nicht mit =.

Also:
if(variable == 10) {
mach dies
}
else {
tu das
}

Ein einfaches = ist in der Regel eine Zuweisung.
Gast #2748629
Lesenswert?
• ▲
▼
mr. mo schrieb:
> Es könnte sein, dass es bei dir etwas anders ist, aber normalerweise
> vergleicht man mit == und nicht mit =.
>
> Also:
> if(variable == 10) {
> mach dies
> }
> else {
> tu das
> }
>
> Ein einfaches = ist in der Regel eine Zuweisung.

Diese Aussage ist aber nur für C/C++ gültig, wir reden hier aber von 
VHDL

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren