Forum: FPGA, VHDL & Co. NUMERIC_STD: Kontrollierter Überlauf?


von Jens Langecker (Gast)


Lesenswert?

Hallo zusammen,

ich hab mal eine Frage zur Verwendung in NUMERIC_STD:
Ich hab in meinen Projekten viele Zähler, die "ganz normal" überlaufen 
sollen. In der Vergangenheit hab ich das immer durch die Verwendung 
STD_LOGIC_UNSIGNED und das rechnen mit std_logic_vector realisiert.

Beispiel: ein 8-Bit-Register soll inkrementiert werden und dabei von 255 
auf 0 zurückspringen.
Mit STD_LOGIC_UNSIGNED:
1
signal x : std_logic_vector(7 downto 0);
2
...
3
x <= x + 1; -- Überlauf implizit von 255 auf 0

Kann ich das mit NUMERIC_STD einfach ganz genauso machen?
1
signal x : integer range 0 to 255;
2
...
3
x <= x + 1; -- Was passiert bei 255 + 1?

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


Lesenswert?

Jens Langecker schrieb:
> Kann ich das mit NUMERIC_STD einfach ganz genauso machen?
Ja:
1
signal x : unsigned(7 downto 0);
2
...
3
x <= x + 1; -- Überlauf implizit von 255 auf 0
Mit einem Integer geht das natürlich nicht. Du musst den Überlauf dort 
manuell machen. Die Synthese erkennt die Sache mit dem Überlauf und 
macht trotzdem nur 8 Flipflops draus...

von Jens Langecker (Gast)


Lesenswert?

Okay, wenn ich Dich richtig verstehe, kann ich mit dem Datentyp 
"unsigned" so rechnen, als wäre es ein einfacher std_logic_vector (mit 
STD_LOGIC_UNSIGNED), bin aber gleichzeitig durch die Verwendung von 
NUMERIC_STD sauber - richtig?

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


Lesenswert?

Richtig, du kannst mit unsigned und signed Vektoren rechnen. Und weißt 
immer, ob damit eine vorzeichenlose oder eine Vorzeichenbehaftete 
Operation gemeint ist.

Und der Hauptunterschied zum Integer: du kannst mit diesen Vektoren auch 
Rechnungen über 32 Bit Breite hinaus machen.

von Jens Langecker (Gast)


Lesenswert?

Okay, vielen Dank!

von Dr. Schnaggels (Gast)


Lesenswert?

Bei Verwendung von 'integer' bekommst du den Überlauf in der Simulation 
mit, und zwar in Form eines FATAL-Fehlers

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.