Muliplikation mit einem FPGA

Gast #862503
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
Gast #862506
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.
Gast #862515
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren