Forum: FPGA, VHDL & Co. Xilinx Vivado Synthese von integer ohne range


von Thomas (Gast)


Lesenswert?

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

von derLars (Gast)


Lesenswert?

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

von Bitwurschtler (Gast)


Lesenswert?

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."

von eddy (Gast)


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

Vielen dank! Habe jetzt eine range angegeben und per if-Bedingung den 
Überlauf fest eingebaut.

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


Lesenswert?

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
von Michael W. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.