www.mikrocontroller.net

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


Autor: vhdl_noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: vhdl_noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Rick Dangerus (Gast)
Datum:

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

Autor: vhdl_noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.