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
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.
...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...
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... ;-)
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.