Forum: FPGA, VHDL & Co. Simulation von integer


von Gast (Gast)


Lesenswert?

Hallo,

was passiert bei einem integer range of 0 to 1234, wenn der Wertebereich 
überschritten wird?

In der Simulation hatte ich mal merkwürdige Sachen ... Aber es wird 
vermutlich keinen Überlauf geben, dass er von 1234 auf 0 springt, oder? 
Wird er einfach als integer range of 0 to 2047 synthetisiert?

Verhält sich das in der Simulation anders?

Grüße
Gast

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


Lesenswert?

> was passiert bei einem integer range of 0 to 1234, wenn der Wertebereich
> überschritten wird?
> In der Simulation hatte ich mal merkwürdige Sachen
Vermutlich Fehlermeldungen...

> Wird er einfach als integer range of 0 to 2047 synthetisiert?
Jain, er wird nicht als Integer, sondern als Vektor mit 11 Bits 
realisiert, weil es "halbe" Bits nicht gibt. Wenn du nur integer 
schreibst (ohne range), werden 32 Bits verwendet.

von Satt (Gast)


Lesenswert?

Vorsicht beim Überlauf von Integers!
Am Besten nicht darauf verlassen, dass sie wieder bei 0 anfangen, wenn 
sie die Grenze des angegebenen Wertebereiches überschreiten.
Sowas hatte ich schonmal, stundenlang nach dem Fehler gesucht, am Ende 
habe ich an der entsprechenden Stelle das Integersignal wieder auf 0 
gesetzt und es ging wieder alles.

von Klaus F. (kfalser)


Lesenswert?

Kann sein dass verschiedene Simulatoren anders reagieren, aber bei 
ModelSim bekommt man beim Überlauf des Bereich einen Abbruch mit 
Fehlermeldung.
Das passiert auch, wenn man den Bereich z.B. von 0 bis 99 definiert und 
dann schreibt :
i <= i+1;
if (i = 99)
  i <= 0;

Man darf die Simulation nicht mit der synthetisierten Schaltung 
verwechseln, dort erzeugt ein 8 Bit Zähler bei 255 natürlich einen 
Überlauf und beginnt bei 0. Bei der Simulation will ich ja gerade 
wissen, ob meine Variable immer im definierten Bereich bleibt.

Etwas anderes ist die Verwendung der unsigned oder signed Typen aus dem 
Numeric_std Package. Dort hat man definierte Überläufe an den 
Bereichsgrenzen, die Simulation rechnet korrekt weiter.

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.