Forum: FPGA, VHDL & Co. signed * konstante -> falsche bitbreite


von vhdl_noob (Gast)


Lesenswert?

Hi!

Also es geht um folgendes beispiel:
signal U : signed( 9 downto 0); --10bit breit
signal V : signed( 4 downto 0); -- 5bit breit
signal W : signed(50 downto 0); --51bit breit
...
W <= (U*V)*2;
---> ERROR: resultierende breite ist 100bit (klar, er macht 50x50bit 
mult intern)

ich hab mir jetzt geholfen indem ich es so umschreibe:
variable UV_tmp : signed(49 downto 0);
..
UV_tmp := U*V; --ist jetzt 5*10 = 50 bit
W <= UV_TMP & '0'; --und jetzt 51 bit


Da ich variablen aber nicht mag und es bloed zu lesen
ist such ich nach ner möglichkeit dem synthesizer zu sagen dass
ich da keine 50x50 mult brauche.

Jemand ne Idee ?
Die zahlen sind nur ein beispiel, konkret geht es zb auch um *1024 oder 
so.
Das muss doch auch anders gehen...

Achja, ist Xilinx Webpack 8.2i

Gruss,
vhdl_noob

von der mechatroniker (Gast)


Lesenswert?

Wofür brauchst du die 51 Bits? Um das Ergebnis einer 
10-Bit-x-5-Bit-Multiplikation zu speichern, reichen doch 15 Bit!
(Worst Case 1023 * 31 = 31713)

von vhdl_noob (Gast)


Lesenswert?

mist sorry hab beim beispiel aufschreiben murks gebaut, neuer versuch

signal U : signed(24 downto 0); --25bit breit
signal V : signed(24 downto 0); --25bit breit
signal W : signed(50 downto 0); --51bit breit
...
W <= (U*V)*2;
---> ERROR: resultierende breite ist 100bit (klar, er macht 50x50bit
mult intern)

ich hab mir jetzt geholfen indem ich es so umschreibe:
variable UV_tmp : signed(49 downto 0);
..
UV_tmp := U*V; --ist jetzt 25+25 = 50 bit
W <= UV_TMP & '0'; --und jetzt 51 bit

so, hoffe jetzt stimmts...

Der originalcode ist zu kompliziert um ihn zu posten 
(matrizenrechnungen)

von Rick Dangerus (Gast)


Lesenswert?

Mir ist noch nicht ganz klar, was Du willst, aber vielleicht sowas:
1
W <= (U * V) & '0'

von vhdl_noob (Gast)


Lesenswert?

stimmt das geht ja direkt so .. d'oh...

Naja hat sich eh erledigt mittlerweile, die berechnungen wurden zu gross 
am
ende (>50bit integers).
Nun hab ich es ganz nach float (24bit) umgeschrieben.
Ist zwar nen ganz schönes gemurkse mit dem coregen und per hand 
"verkabeln"
aber dafür läuft es laut PAR jetzt mit bis zu 88MHz und belegt
momentan "nur" 80% des fpgas. Hoffe ich bekomm den rest noch rein g

thnx

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.