Forum: FPGA, VHDL & Co. Wertebereich NATURAL vs. INTEGER,.


von berndl (Gast)


Lesenswert?

Hi allerseits,

wenn man schon mit breiten Datenbussen arbeitet (>32bit), dann ist es ja 
vor allem in einer Testbench recht angenehm, wenn man da mal auf andere 
Datenformate ausweichen kann, z.B. integer, natural, positive

Aber sehe ich das richtig: integer, natural, positive sind im VHDL 
Standard nur auf >=32bit definiert?

Bei Pseudo-Random Zahlengenerierung kann ich mir ja noch leicht mit 
einer loop ueber einen std_logic_vector behelfen, aber zum abtesten von 
Ergebnissen waere ja ein groesserer Zahlenbereich nicht schlecht.

Ich habe bzgl. 'natural' mal Tante Google angeworfen, es scheint also 
wirklich nur bis 32bit definiert zu sein?

Oder andersrum: Wie macht ihr das?

Gruss,
- berndl

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


Lesenswert?

berndl schrieb:
> Aber sehe ich das richtig: integer, natural, positive sind im VHDL
> Standard nur auf >=32bit definiert?
Eher wohl <=32 Bit...  :-o
Weil natural und positive von integer abgeleitete Typen sind:
positive: 1 to integer'high
natural:  0 to integer'high
haben die effektiv sogar noch 1 Bit weniger...

> Oder andersrum: Wie macht ihr das?
Nimm einen Vektor vom Datentyp signed(127 downto 0) oder unsigned(127 
downto 0), dann hast du schon 4 mal die Breite eines integers. Und 
zusammen mit der numeric_std lässt sich damit gut rechnen...

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> berndl schrieb:
>> Aber sehe ich das richtig: integer, natural, positive sind im VHDL
>> Standard nur auf >=32bit definiert?
> Eher wohl <=32 Bit...  :-o

Der Standard definiert den Wertebereich des Typs integer nur als 
Minimum. Konkret wird garantiert, dass integer mindestens den Bereich 
von -2^32-1 bis 2^32-1 abdeckt. Darüber hinaus ist es 
implementierungsabhängig.

Bei den meisten EDA Herstellern wird der Bereich nach unten auf -2^32 
erweitert, damit er mit den üblichen C Konventionen übereinstimmt.

Gruß
Marcus

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


Lesenswert?

Marcus Harnisch schrieb:
> Der Standard definiert den Wertebereich des Typs integer nur als
> Minimum.
Verpennt... :-(

> Bei den meisten EDA Herstellern wird der Bereich nach unten auf -2^32
> erweitert, damit er mit den üblichen C Konventionen übereinstimmt.
Das ist aber unüblich, denn genau dieses 33. Bit gibt es in einem C 
long und einen daraus resultierenden 32-Bit-Integer nicht...
Dort ist ein long integer von -2147483648 bis 2147483647.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
>> Bei den meisten EDA Herstellern wird der Bereich nach unten auf -2^32
>> erweitert, damit er mit den üblichen C Konventionen übereinstimmt.
> Das ist aber unüblich, denn genau dieses 33. Bit gibt es in einem C
> long und einen daraus resultierenden 32-Bit-Integer nicht...
> Dort ist ein long integer von -2147483648 bis 2147483647.

Ich habe mich um ein Bit vertippt. Das sollte natürlich heißen
-2^31-1 bis 2^31-1 (in VHDL). Beim C integer (auf 32 bit Architekturen) 
hätte man aber -2^31 als kleinsten Wert. Entschuldige die Verwirrung.

Gruß
Marcus

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.