Forum: FPGA, VHDL & Co. negative Zahlen zu einer Range-Angabe verrechnen


von Ralf (Gast)


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

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


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?

von Ralf (Gast)


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

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


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

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.