Forum: FPGA, VHDL & Co. Mittelung XILINX Virtex2-Pro FPGA


von Sven H. (germanone)


Lesenswert?

Erst mal ein nettes Hallo an Alle hier

ich besuche eure Seite schon fast regelmässig und finde die Foren 
absolut Klasse und auch für mich als absoluter Neuling auf dem 
FPGA/VHDL-Gebiet völlig verständlich.

Nun zu meinem Problem:

Ich schlage mich seit geraumer Zeit mit einer nicht mehr ganz so 
aktuellen Virtex2-PRO von Xilinx und dessen Programmierung herum.

Wir bauen Laser-Messsysteme und haben in Zusammenarbeit mit einigen 
anderen Firmen ein Laser-Weg-Messsystem entwickelt. Nun stellt sich 
heraus, das dieses System bestehend aus HF-Baugruppe/Zählerkarte (mit 
FPGA) mit doch noch einigen unschönen Fehlern behafted ist. Wir haben 
nun auf eigene Faust das Layout der HF-Baugruppe geändert, und mit 
einigen Änderungen an der FPGA-Weichware das System auch wieder zum 
laufen bekommen.

Allerdings könnte dieses noch etwas besser werden. Aber ich habe schon 
alle Möglichkeiten probiert die ich gesehen habe.

Nun suche ich eine Möglichkeit über 2 oder drei Messwerte, die als 32Bit 
Signal vorliegen einen Mittelwert zu bilden, ohne das die Leistung zu 
stark  beeinträchtigt wird.

Ich könnte auch den Quellcode (ISE 7.1 Projekt) zur Verfügung stellen. 
Ich weiss im Moment echt nicht mehr weiter. Würde mich freuen wenn 
jemand mir als Anfänger etwas weiterhelfen könnte.

von michael (Gast)


Lesenswert?

Dann addierst du die Messwerte in jedem Zyklus auf und dividierst 
anschließend durch 2.
Also zuerst alten und neuen Messwert addieren und einem 33-Bit-Vector 
zuweisen. Von diesem sind dann die 32 oberen Bits dein gemittelter 
Messwert.
Das kannst du dann sooft machen, wie du willst. An der Performance 
sollte das kaum etwas ändern, nur das du einen Zyklus länger brauchst...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sven Herrmann schrieb:
> Nun suche ich eine Möglichkeit über 2 oder drei Messwerte, die als 32Bit
> Signal vorliegen einen Mittelwert zu bilden, ohne das die Leistung zu
> stark  beeinträchtigt wird.
Du kannst einen gleitenden Mittelwert über n Werte nehmen.

Sagen wir mal n=4, dann brauchst du einen Ringpuffer/Schieberegister, 
der z.B. 4 Integer speichern kann. Immer der erste wird auf den 34-Bit 
Mittelwert dazuaddiert, der letzte abgezogen. So hast du pro Takt einen 
Wert, der über die letzten 4 Messungen gemittelt ist.
Es gibt auch noch andere Methoden, aber bis zu einer Speichertiefe von 
16 Bits werden hier für das Schieberegister nur 32 LUTs benötigt.

von Sven H. (germanone)


Lesenswert?

Vielen Dank für die Antworten.

Hat vieleicht jemand ein kleines Beispiel wie ich das machen kann?

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.