Xilinx Vivado Synthese von integer ohne range

Gast #5156898
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
Gast
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
Gast
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.
Moderator (Firma: Titel) Persönliche Seite
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"...
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.