mikrocontroller.net

Forum: FPGA, VHDL & Co. Muliplikation mit einem FPGA


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @ all

Ich benutze einen Spartan 3 XC3S400.

Ich habe in einem Block Ram ein Histogramm erzeugt. Dies bedeutet wenn 
in Speicherzelle 500 ein Wert 50 steht, dann ist der Wert 500 50 mal 
vorgekommen.

Jetzt möchte ich von 7 Speicherzellen den Mittelwert erzeugen. Hierzu 
benötige ich 7 Multiplikationen.

Da die Speicherzelle 500 den Wert 500 widerspiegelt und in dieser 
Speicherzelle der Wert 50 steht muss ich 50*500 rechnen. Das ganze für 
die Speicherzelle 500 bis 506

Wie multipliziere ich mit einem FPGA?

Als Eingänge habe ich std_logic_vectoren

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schleife, die die RAM-Zellen abtackert und eine Zeile, die multipliziert 
:

tempergebnis <= std_logic_vector (unsigned (vectora) * unsigned 
(vectorb) + 128);  -- addiere 0.5
ergebnis <= tempergebnis (XXX downto 8);  -- runden auf das 8. Bit

"tempergebnis" ausserhalb des getakteten Prozesses, dann rechnet er in 
einer Stufe. Das geht meist bis 100 MHz gut.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"tempergebnis" natürlich mindestens so gross, wie die Summe der Vektoren 
ergeben kann.

Und kümmere Dich nicht um Optimierungen, die Synthese nimmt am Ende 
aller Rechungen nur die Bits, die absolut gebraucht werden. Die nicht 
benötigten werden abgeschnitten und der Multiplizierer passend 
weggekürzt. (Meist besteht er aus mehreren 9x9-Multiplieren).

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine beiden Eingänge sind 9 Bit groß. Demnach muss das Ergebnisregister 
18 Bit groß sein.

Was ich nicht verstehe ist warum du da 128 auf das Ergebnis addierst und 
dann durch 128 teilst?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er addiert 128 und teilt durch 256. Das ist nichts anderes als runden: 
Runden auf ganze Zahlen kann man, indem man erst 0,5 addiert und dann 
den Teil hinter dem Komma abschneidet.

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.