Problem mit CASE Anweisung

Gast #676682
Lesenswert?

Ich habe folgenden Code, der einen Fehler produziert, wenn ich "others" 
weglasse. Warum ist das so?
1
CASE counter(3 downto 0) IS
2
  WHEN "0000" => output <= out01;
3
      select <= sel01;
4
  WHEN "0001" => output <= out02;
5
      select <= sel02;
6

7
(weitere cases 0010 ... 1110)
8

9
  WHEN "1111" => output <= out16;
10
      select <= sel16;
11

12
END CASE;
Es sind alle 16 Cases ausdrücklich beschrieben. Der Fehler im ModelSim 
lautet : "Case Statement covers only 16 of 6152 states."

Woher kommt diese Zahl und warum wird das angemahnt? Es gibt doch keine 
"others", denn der selektierende Vektor ist wirklich nur ein "3 downto 
0"

Idee ?
#676687
Lesenswert?

@ Ratloser (Gast)

>Es sind alle 16 Cases ausdrücklich beschrieben. Der Fehler im ModelSim
>lautet : "Case Statement covers only 16 of 6152 states."

Tja, das Problem ist nur, dass der Typ std_logic nicht nur 0 und 1 
kennt, sondern auch U, X, Z, weak low, weak HIGH etc, ich glaub 9 
Zustände. Die müssen auch alle abgedeckt werden.

MFG
Falk
#676695
Lesenswert?

Da fehlen noch W: weak unknown und -: don't care.
Damit wären es dann 9 Zustände und somit 9^4 = 6561 Möglichkeiten.
Aber warum redet die Fehlermeldung von 409 Möglichkeiten weniger?

Ich würde ja sagen, man könnte das don't care außer acht lassen, da 
diese Zustände bereits durch andere abgedeckt sind, allerdings käme man 
dann nur noch auf 4096 Möglichkeiten.
Gast #677194
Lesenswert?

Das verstehe ich, das komische ist nur, daß ich noch andere Muxer im 
Design habe und er dort nicht meckert ...

Rein synthesemäßig muss es js sowieso Wurscht sein, da die Leitungen ja 
einen Zustand haben. Nehme ich den "others"-Konstrukt nämlich jetzt 
rein, informiert mich die Synthese, daß es überflüssig sei. So gut 
druchdacht ist die HDL-toolchain ...

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