Ich gehe mal davon aus, dass Du in VHDL schreibst:
Ohne eine Begrenzung mit range sind Integer 32 Bit breit und signed.
Zählt man einen Integer von 0 hoch, dann wird bei Überlauf von 2^31-1
auf -2^31 inkrementiert (hab es nie in Hardware ausprobiert, aber in
Simulation verhält es sich so)
Mit range-Begrezung wird die Anzahl der Bits so gewählt, dass der zu
zählende Betrag reinpasst. Wenn man z.B. auf range 0 to 16 begrenzt,
werden 5 Bit reserviert. Zählt man von 0 hoch, wird in Hardware von 16
auf 17 inkrementiert (dann auf 18, 19...). Von 31 kippt der Zähler dann
auf 0 um.
Ich bin mir nicht mehr 100 %ig sicher mit welcher Vivado-Version ich das
vor einiger Zeit ausprobiert habe (dürfte eher eine 2015.x gewesen
sein), aber ich konnte das Verhalten so mit Logic Analyzer im Chip
nachvollziehen.
Die Simulation sieht da anders aus. Soweit ich mich erinern kann, hält
der XSim die Simulation mit einer Error-Message an, zu dem Zeitpunkt an
dem man die definierte range verlässt.
Meine Empfehlung: Immer eine Range angeben, weil man in der Simulation
(sofern diese vollständig ist, also auch mal versuchen mögliche Fehler
zu provozieren) auf Überläufe aufmerksam gemacht wird.