Forum: FPGA, VHDL & Co. ModelSim: Warning: Case choice must be a locally static expression


von Matthias G. (mgottke)


Lesenswert?

Hallo zusammen,

aus unerfindlichen Gründen spuckt das ModelSim folgende Warnungen aus:
1
# ** Warning: xyz.vhd(313): Case choice must be a locally static expression.
Dabei nutze ich doch lediglich eine Konstante, die in einer separaten 
Library definiert ist. Wenn ich an Stelle der Konstanten direkt den Wert 
in der Case-Anweisung eingebe dann ist die Warnung weg.

xyz_lib.vhd:
1
package xyz_lib is
2
   ...
3
   constant ADDR_XYZ : std_logic_vector(31 downto 0) := x"00000000";
4
   ...
5
end xyz_lib;

xyz.vhd:
1
library work;
2
use work.xyz_lib.all;
3
   ...
4
architecture behavior of xyz is
5
   ...
6
   case my_addr is
7
      when ADDR_XYZ (10 downto 2) => ...;
8
   ...
9
end xyz;
Hat jemand ne Idee?

von Duke Scarring (Gast)


Lesenswert?

Vielleicht so:
1
library work;
2
use work.xyz_lib.all;
3
   ...
4
architecture behavior of xyz is
5
   ...
6
   variable tmp_addr: std_logic_vector(my_addr'range);
7
   ...
8
   tmp_addr := my_addr;
9
   case tmp_addr is
10
      when ADDR_XYZ (10 downto 2) => ...;
11
   ...
12
end xyz;

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Liegt das Problem eher an
1
   case my_addr is
oder an
1
      when ADDR_XYZ (10 downto 2) => ...;
Was ja auch die Warnung nahelegt?

Wenn du schreibst
1
      when "000000000" => ...;
ist dann die Warnung weg?

von DI UV (Gast)


Lesenswert?

Das Problem liegt in den zwei files,

locally static heisst das es bei der Übersetzung (und nicht erst während 
der Laufzeit der Simulation) des betreffenden Case zweiges bekannt und 
unveränderliche  sein muss. In deinem Beispiel steht die Konstante nicht 
in der selben datei sondern in der Bibliothek xyz_lib. Diese Bibliothek 
kanns du ja nach der Kompilation neu zu weisen dann ist es nicht mehr 
"locally canstant".

Merke:  "locally static" meint nicht Konstant im sinne einer Konstanten.
Siehe auch: http://www.vhdl-online.de/glossary/deutsch/g_13.htm

von Matthias G. (mgottke)


Lesenswert?

so weit so gut, habe es halbwegs verstanden. Ich weis zwar nicht wer auf 
so einen Gedanken kommt und die Bibliothek nochmals neu zuweist. Aber 
ist ja theoretisch möglich und damit die Aussage richtig.

Was mir noch fehlt, sind die Schlüsse die ich daraus ziehen sollte:

a) Wie kann ich das Problem sinnvoll umgehen? Die Konstanten sollten 
weiterhin in einer Projektlibrary stehen, da sie ja in verschiedenen 
VHDL-Modulen genutzt werden.

b) Oder welche Auswirkungen kann das in meinem Design haben. Kann das zu 
Problemen führen?

von DI UV (Gast)


Lesenswert?

b) "einfach ignorieren" ist richtig. Modelsim meckert, aber nicht das 
synthesetool, ich habe etliche FPGA's mit solchen designs, alle 
funktionieren.

von Matthias G. (mgottke)


Lesenswert?

> b) "einfach ignorieren" ... alle funktionieren.

Vielen Dank an "DI UV" und natürlich auch an die anderen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

ggf könnte man das ganze aber auch über ein Generic lösen?

von Christian (Gast)


Lesenswert?

> ggf könnte man das ganze aber auch über ein Generic lösen?
Dabei gibt es das gleiche Problem. Das ist der Grund warum ich hier 
gelandet bin :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.