www.mikrocontroller.net

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


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: berndl keinnachname (bernd_l)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...  ;-)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:

> Noch mal die Kretchen Frage:

Autsch. Der arme Koethe.

Autor: berndl keinnachname (bernd_l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.