Forum: FPGA, VHDL & Co. [VHDL] scalb funktion Fixed_Pkg mit variablem shift operator


von Xin T. (bakunin)


Lesenswert?

Hallo zusammen,
Ich nutze Xilinx ISE_14 für die entwicklung von Code für den 
Spartan6-lx9

Ich bin selbst noch blutiger VHDL anfänger, habe mich aber dennoch an 
berechnungen mit fixedpoint zahlen mithilfe von fixed_pkg gewagt- mein 
problem ist nun der folgende shift einer fixedpoint (v1xb-u1) um den 
faktor a :
1
du1 <= resize(scalb((v1xb-u1), -a),  du1'high, du1'low);
folgenden fehler in der Synthese mittels XST erzeugt:
1
ERROR:HDLCompiler:564 - "N:/P.28xd/rtf/vhdl/src/ieee_proposed/fixed_pkg_c.vhd" Line 2926: Left range bound is not constant
2
ERROR:HDLCompiler:432 - "N:/P.28xd/rtf/vhdl/src/ieee_proposed/fixed_pkg_c.vhd" Line 5260: Formal <arg> has no actual or default value.

Das problem ist also dass das zweite Argument (a) der scalb()-funktion 
eine variable ist.
Da nun aber ein rechtsschift um eine variable in meinem code ziemlich 
notwendig ist wollte ich mal fragen ob jemand ähnliches mit scalb() oder 
auf andere weise hinbekommen hatt...

schönen gruß
-bakunin

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Hallo,

die Fehlermeldung

Left range bound is not constant

ist doch eindeutig. Die Funktion scalb erwartet als zweiten Parameter 
eine Konstante.

Variables schieben nach links oder rechts ist eine Multiplikation, so 
musst du es auch umsetzen.

Tom

von Xin T. (bakunin)


Lesenswert?

Hi Thomas, danke für die schnelle Nachricht!

Ich kenne mich nicht so gut aus in der optimalen nutzung der ressourcen 
von FPGA - ich dachte halt dass ich über einen shift mutipliers sparen 
kann...

wenn dem nicht so ist mach ich einfach ne muliplikation mit 1/a statt 
dem shift - da ich sowiso schon fixedpoints verwende sollte ja 1/a=0.5, 
1/a=0.25 usw kein thema sein (ich will rechts-shiften)...

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


Lesenswert?

Xin Tao schrieb:
> ich dachte halt dass ich über einen shift mutipliers sparen kann...
Und wie wird ein variabler Shift im FPGA gelöst? Sowas wie einen 
embeddedBarrelshifter gibt es da nicht, deshalb müsste das mit einer 
Ansammlung Multiplexer verdrahtet werden:
http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/10-gates/60-barrel/shifter8.html
http://www.ece.ualberta.ca/~elliott/ee552/studentAppNotes/2003_w/components/barrel_shifter/
Oder eben mit einem Multiplizierer...

Xin Tao schrieb:
> mach ich einfach ne muliplikation mit 1/a statt dem shift
Wie bekommst du 1/a? Was, wenn a keine Zweierpotenz ist?

von Xin T. (bakunin)


Lesenswert?

hi,

>Wie bekommst du 1/a? Was, wenn a keine Zweierpotenz ist?
a soll über taster einstellbar sein, die mit nem logic_vector verbunden 
sind, sodass ich zweierpotenzen erzwingen kann...

das argument mit dem nicht vorhandenen barrel-shifter macht auf jeden 
fall sinn :D - das über shifts zu lösen war halt eher ein reflex als mit 
wirklichem hintergrundwissen
- auf jeden fall wieder was gelernt :)

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.