Hallo,
also wenn ich schreibe
1 | signal position: integer range 0 to 15:=0;
|
2 |
|
3 | process begin
|
4 | wait until rising_edge(btnC);
|
5 | led_vector <= (others => '0');
|
6 | position <= position +1;
|
7 | led_vector(position) <= '1';
|
8 | end process;
|
dann würde ich erwarten, dass das ein 4-Bit Zähler ist der dann
überläuft. Auf Hardware ist das auch so. In der Simulation nimmt
position aber den Wert 16 (!) an.
ERROR: Index 16 out of bound 15 downto 0
Der Fehler betrifft die Zeile mit dem led_vector.
Dann habe ich das umgeschrieben nach:
1 | if position < 15 then
|
2 | position <= position +1;
|
3 | else
|
4 | position <= 0;
|
5 | end if;
|
Und bekomme den Fehler immernoch. Was mache ich falsch?
Im Anhang alles was man braucht.
Edit:
Stimmt nicht, nach der Änderung kommt der Fehler nichtmehr sondern die
Simulation zeigt das richtige Ergebnis. Wieso hab ich das nicht bemerkt?
Anscheinend reicht es in VIVADO nicht das vhdl zu editieren,
abzuspeichern und die Simulation neu zu starten, sondern man muss auch
die Synthese vorher neu laufen lassen?! Liege ich da richtig?
Wieso die limitierte Integer nicht überläuft und sogar einen Wert
ausserhalb des Bereichs annimmt verstehe ich trotzdem nicht. Mit
unsigned passt alles. War das schon immer so dass Integers nicht
übergelaufen sind? Wieso ist das so?
Vielen Dank!
Gustl