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


von Michael (Gast)


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

von Gast (Gast)


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.

von Gast (Gast)


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).

von Michael (Gast)


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?

von Jan M. (mueschel)


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.

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.