Forum: FPGA, VHDL & Co. Besser mit Integer oder Unsigned Signale rechnen


von Thomas (Gast)


Lesenswert?

Hallo,

ich bin neu bei VHDL und probiere gerade verschiedene Dinge durch.

Jetzt bin ich auf folgendes gestoßen:

Wenn man in VHDL mit positiven Werten Rechnen möchte (bleiben wir mal 
bei +, - und *) dann kann man das entweder direkt mit Integer Signale 
oder aber mit Unsigned Signale tun.

Im Internet habe ich beide Varianten gefunden. Also z.B. Zähler die mit 
Integer Signale zählen und andere die mit unsigned Signale zählen.

Am Ende kann man sein Signal ja auch ineinander überführen.

Intuitiv am einfachsten ist doch das Rechnen mit Integern, da man dann 
nicht lange überlegen muss was denn eigentlich rauskommt.

Meine Frage wäre nun, was denn im Allgemeinen oder zumindest meistens zu 
empfehlen ist wenn man davon ausgeht dass es schnell sein soll und wenig 
Ressourcen benötigen soll. Oder sind beide Varianten absolut 
gleichwertig?

Danke,


Thomas

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


Lesenswert?

Thomas schrieb:
> Meine Frage wäre nun, was denn im Allgemeinen oder zumindest meistens zu
> empfehlen ist wenn man davon ausgeht dass es schnell sein soll und wenig
> Ressourcen benötigen soll. Oder sind beide Varianten absolut
> gleichwertig?
Mal davon abgesehen, dass uneingeschränkte Integer auch negative Zahlen 
darstellen, ist das Rechnen im Bereich der positiven 31 Bits gleich und 
auch das Syntheseergebnis schenkt sich nichts.

Aber mit Unsigned kann ich z.B. auch eine 64-Bit-Zahl darstellen.
Integer kann das nicht, da ist bei 2**31 Schluss.

von berndl k. (bernd_l)


Lesenswert?

...und nicht zu vergessen: Wenn du z.B. einen 5-bit Zaehler hast, dann 
macht der mit 'unsigned' automatisch einen Ueberlauf. Mit 'integer range 
0 to 31' gaebe es im Simulator beim Ueberlauf eine Fehlermeldung.

Haengt also auch davon ab was du wirklich willst/brauchst...

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


Lesenswert?

Bernd L. schrieb:
> Mit 'integer range 0 to 31' gaebe es im Simulator beim Ueberlauf
> eine Fehlermeldung.
Das wäre aber z.B. bei einem (ebenfalls 5 Bit breiten) Integer-Zähler 
0..29 zum Glück ebenfalls der Fall. Das ist also eher ein Vorteil von 
ordentlich eingeschränkten Integer-Zählern.

Der Unsigned-Zähler von 0..29 würde im Simulator einfach weiterlaufen 
bis 31 und dann weiter bei 0...  :-o

(Der Integer-Zähler in der realen Hardware übrigens auch...  ;-)

von Thomas (Gast)


Lesenswert?

Vielen Dank euch allen für die Antworten.

Noch mal die Kretchen Frage:

Das heist also, wenn ich einen 3Bit unsigned habe, dann kann man mit ihm 
einen Zähler erstellen, der von 0 bis 7 zählt und dann wieder bei 0 
beginnt ohne dass ich explizit angeben muss dass er nach (111) wieder 
auf (000) springen soll.

Richtig?

Was passiert bei einem Integer der den Range 0 bis 5 hat?

0, 1, 2, 3, 4, 5, 6, ????

gehts dann auch wieder automatisch bei 0 los oder Fehler?

von (prx) A. K. (prx)


Lesenswert?

Thomas schrieb:

> Noch mal die Kretchen Frage:

Autsch. Der arme Koethe.

von berndl k. (bernd_l)


Lesenswert?

Thomas schrieb:
> Vielen Dank euch allen für die Antworten.
>
> Noch mal die Kretchen Frage:

die gute Dame hiess 'Grete'...

>
> Das heist also, wenn ich einen 3Bit unsigned habe, dann kann man mit ihm
> einen Zähler erstellen, der von 0 bis 7 zählt und dann wieder bei 0
> beginnt ohne dass ich explizit angeben muss dass er nach (111) wieder
> auf (000) springen soll.
>
> Richtig?

Ja

>
> Was passiert bei einem Integer der den Range 0 bis 5 hat?
>
> 0, 1, 2, 3, 4, 5, 6, ????
>

Die Synthese stellt fest, dass du dafuer ein 3-bit breites Register 
brauchst, und das zaehlt dann auch wieder von 0..7

> gehts dann auch wieder automatisch bei 0 los oder Fehler?

Nur der Simulator macht mit dem 'Range' was, er meckert, wenn du die 6 
erreichst...

Wie gesagt, manchmal hat die eine Variante Vorteile, manchmal die 
andere.

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.