negative Zahlen zu einer Range-Angabe verrechnen

Gast #2997456
Lesenswert?

Hallo,

ich habe eine for-Schleife, in der ich ein array fülle. Siehe dazu auch 
hier:
Beitrag "Array mit generate füllen lassen"

Um es nicht wie im Beitrag statisch zu lösen, habe ich generics 
angelegt, um die Anzahl der Interationen der for-Schleife und auch die 
Vektorbreiten schnell ändern zu können.

Nun muss ich mir innerhalb der for Schleife die Indizies entsprechend 
ausrechnen lassen, damit die sich auch bei jedem Durchlauf ändern.

Das habe ich getestet und simuliert - funktioniert.

Meine Frage bezieht sich eher darauf, ob eine Berechnung mit negativen 
Integern in der Range-Angabe sauber bzw. zulässig ist?

Bsp.:
1
Vector_array(i) <= Vector(WIDTH downto WIDTH+(V-X-Y+Z)); -- X-Y-i+Z < 0 !!!

Kann man das also so machen, oder funktioniert das nur in der Simulation 
und ist bei der Synthese dann sehr unsauber und vom Tool abhängig, ob 
das funktioniert oder nicht.

Vielen Dank!
Ralf
Moderator (Firma: Titel) Persönliche Seite #2997666
Lesenswert?

Ein Arrayindex muss ein Integer sein, und ein Integer hat sogar mehr 
negative Zahlen als positive. Bleibt also als einzige Konterfrage: wie 
ist dein Vector definiert? Kannst du da negative Indices ansprechen?

Sowas geht überigens auch nicht: (3 downto 5) oder (4 to 2)
Das wäre ein Null-Range...

BTW:
(WIDTH downto WIDTH+(V-X-Y+Z)); -- X-Y-i+Z < 0 !!!
Warum sollte i da interessant sein? Und welchen Wert hat V?
Gast #2997710
Lesenswert?

Sorry, ich war beim Editiren unachtsam:
1
Vector_array(i) <= Vector(WIDTH downto WIDTH+(X-Y-i+Z)); -- X-Y-i+Z < 0 !!!
i ist der Laufindex der for-Schleife.

Aber wenn integer auch in der Range-Angabe problemlos negativ werden 
können, um sie dann im Endeffekt doch zu einem positiven Range-Wert zu 
berechnen, sehe ich kein Problem mehr. Mir ging es lediglich darum, dass 
X-Y-i+Z < 0 ist und ob damit jedes Tool etwas anfangen kann, auch wenn 
dann +WIDTH wieder einen positiven Wert ergibt.

Sowas ist ja auch sehr unüblich, mal abgesehen, ob es gehen würde.
1
Vector(5 downto -3);

Vielen Dank!
Ralf
Moderator (Firma: Titel) Persönliche Seite #2997755
Lesenswert?

Ralf schrieb:
> Sowas ist ja auch sehr unüblich, mal abgesehen, ob es gehen würde.
> Vector(5 downto -3);
Klar geht das. Das ist ein 9 Bit breiter Vektor...
Und verwendet wird sowas im Fixkomma-Package. Siehe z.B. dort:
http://vhdlguru.blogspot.de/2010/03/fixed-point-operations-in-vhdl-tutorial.html
http://vhdlguru.blogspot.de/2010/03/fixed-point-operations-in-vhdl-tutorial_29.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren