Hallo Zusammen,
Ich habe ein FPGA-internes Prozessorinterface, an das ich eine
Componente anbinden will. In der Praxis funktioniert es auch
einwandfrei, jedoch gibt der Simulator (ActiveHdl) mir ein Fehler, den
ich über den Schalter -relax auf eine Warning runterschrauben kann.
Trotzdem möchte ich gerne verstehen, was da passiert und was die
Fehlermeldung auslösen könnte. Dazu habe ich mal die Relevanten Code
Teile unten eingefügt.
Bei den "when cAddrx =>" Zeilen kommt die Meldung
# Warning: COMP96_0546: xxx.vhd : Choice in a case statement is not
locally static. Duplicate choices will not be detected.
Nach meinem Verständnis können sich die Konstanten Adressen aber nicht
ändern, so dass es für mich keinen Grund gibt, weshalb der Compiler hier
meckert. Da das Package, welches die Adressen beinhaltet, bereits
kompiliert ist, sollten die Werte beim Kompilieren meines Moduls ja
bekannt und vor allem fix sein.
1 | --Processor interface:
|
2 | iAddr : in std_logic_vector (15 downto 0);
|
3 | iDataBus : in std_logic_vector (15 downto 0);
|
4 | iWr : in std_logic;
|
5 |
|
6 | -- Constants, in ein Package ausgelagert
|
7 | constant cAddr0 : std_logic_vector(15 downto 0) := x"0100";
|
8 | constant cAddr1 : std_logic_vector(15 downto 0) := x"0101";
|
9 |
|
10 | -- signals
|
11 | signal sMyData0 : std_logic_vector(15 downto 0);
|
12 | signal sMyData1 : std_logic_vector(15 downto 0);
|
13 |
|
14 | -- hier ein Ausschnitt aus meinem synchronen Prozess:
|
15 | if iWr = '1' then
|
16 | case iAddr is
|
17 | when cAddr0 =>
|
18 | sMyData0 <= iDataBus;
|
19 | when cAddr1 =>
|
20 | sMyData1 <= iDataBus;
|
21 | end case;
|
22 | end if;
|
Ich freue mich auf sachdienliche Hinweise :-)
Viele Grüße,
Peter