Hallo Leute, ich suche folgende Information: Was macht die Synthese in Vivado (2014.3) mit einem integer Signal, wenn kein range x to y angegeben ist? Ist es dann 16, 32 bit breit, signed oder unsigned? Oder "je nach Bedarf"? Es geht darum, wann ein Zähler ohne Begrenzung "überläuft". Ich finde darüber leider keine Informationen. Ich habe jetzt in vorhandenen Code einfach den erwarteten und gewünschten range eingebaut, und bei erreichen des Limits einen reset eingebaut. Aber mich interessiert was ohne passiert. Gruß, Thomas
Zu erst: Probiere es doch aus ;) Wenn ich mich nicht täusche, kann es bei integer-Signalen Probleme mit dem "automatischen Überlauf" geben. In solchen Fällen verwende ich für "überlaufende" Signale immer unsigned. Da funktioniert das auch :) Gruß derLars
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_3/ug901-vivado-synthesis.pdf S. 155 "Vivado synthesis implements an integer on 32 bits by default. For a more compact implementation, define the exact range of applicable values."
Ich gehe mal davon aus, dass Du in VHDL schreibst: Ohne eine Begrenzung mit range sind Integer 32 Bit breit und signed. Zählt man einen Integer von 0 hoch, dann wird bei Überlauf von 2^31-1 auf -2^31 inkrementiert (hab es nie in Hardware ausprobiert, aber in Simulation verhält es sich so) Mit range-Begrezung wird die Anzahl der Bits so gewählt, dass der zu zählende Betrag reinpasst. Wenn man z.B. auf range 0 to 16 begrenzt, werden 5 Bit reserviert. Zählt man von 0 hoch, wird in Hardware von 16 auf 17 inkrementiert (dann auf 18, 19...). Von 31 kippt der Zähler dann auf 0 um. Ich bin mir nicht mehr 100 %ig sicher mit welcher Vivado-Version ich das vor einiger Zeit ausprobiert habe (dürfte eher eine 2015.x gewesen sein), aber ich konnte das Verhalten so mit Logic Analyzer im Chip nachvollziehen. Die Simulation sieht da anders aus. Soweit ich mich erinern kann, hält der XSim die Simulation mit einer Error-Message an, zu dem Zeitpunkt an dem man die definierte range verlässt. Meine Empfehlung: Immer eine Range angeben, weil man in der Simulation (sofern diese vollständig ist, also auch mal versuchen mögliche Fehler zu provozieren) auf Überläufe aufmerksam gemacht wird.
Vielen dank! Habe jetzt eine range angegeben und per if-Bedingung den Überlauf fest eingebaut.
Thomas schrieb: > Vielen dank! Habe jetzt eine range angegeben und per if-Bedingung den > Überlauf fest eingebaut. Das musst du sowieso. Denn es gibt keinen automatischen von 'right nach 'left und zurück... eddy schrieb: > Mit range-Begrezung wird die Anzahl der Bits so gewählt, dass der zu > zählende Betrag reinpasst Auch ohne range wird das optimiert. Nur eben später. Dann kommen zigfach Meldungen zu "unused signals"...
:
Bearbeitet durch Moderator
Gäbe es eine einfache Strategie, dies zu vermeiden? Ich meine, man kann das einschränken, ok, aber gerade bei komplizierten Rechnungen muss man immer erst mal durchsimulieren, wie gross die Zwischenergebnisse werden, um die range so einzuschränken, dass keine ungenutzten Bits entstehen aber ja kein Abschneiden erfolgt.
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.