Forum: FPGA, VHDL & Co. Werte skalieren mit float / real


von Stefan (Gast)


Lesenswert?

Hallo,

vielleicht kann mir jemand von euch einen kleinen Tipp geben.

Von einem ADC bekomme ich 16 Bit als Zweierkomplement im 
std_logic_format. Das Ziel ist es diesen Wert auf 32 Bit signed integer 
zu vergrößern, was noch nicht so schwierig sein mag. Allerdings muss 
anschließend mit float - Werten skaliert werden um die 32 Bit 
anzupassen. Das Ergebnis soll wieder auf Std_logic_vector liegen.

Hab mir schon die Kommentare zur float Berechnung durchgelesen und das 
ganze erscheint mir noch etwas mystisch.

Da die ganze Sache auf einem Virtex4 laufen soll, ist es ratsam gleich 
nen PPC oder MicroPlaze für die Berechnung einzubauen? Eigentlich wollte 
ich nur die DSPs benutzen mithilfe der IP-Cores.

Vielleicht hatte schon jemand von euch ein ähnliches Problem.
Vielen Dank für eure Hilfe.

Stefan

von New I. (newie)


Lesenswert?

Hallo Stefan,

sind die float Werte fix oder variabel?
Wenn fix, dann in welchem Bereich?

Ähnliche Problemstellung kenne ich von IIR Filtern (24 Bit ADC-Wert mit 
den Filterkoeffizienten multiplizieren).


Gruss
Stanko

von Ras F. (rasfunk)


Lesenswert?

Ist die Multiplikation mit Floats unbedingt erforderlich, oder könnte 
das auch ein Fixed-Point-Wert sein? Soll das Ergebnis hinterher als 
Floating-Point oder Fixed-Point Wert vorliegen?

Ansonsten würde ich empfehlen, den 16Bit-Wert direkt in einen Float-Wert 
zu konvertieren, und dann die Multiplikation mit einem herkömmlichen 
Float-Multiplizierer durchzuführen (gibt's alles schon fertig).

@Stanko: Floating Point IIR Filter im FPGA? Wo gibt's denn sowas?

Edit: der PPC hat auch nicht "per se" eine FPU. Eigentlich sehe ich 
keinen Grund, den PPC nur für diesen Anwendungsfall herzunehmen.

von Stefan N. (mainframesk)


Lesenswert?

Der Verwendung von Fixed Werten steht nix im Wege, jedoch müssen diese 
auch signed sein.

Der Wertebereich vom ADC Wert sieht wie folgt aus:

ADC (AD73360) Eingangswerte signed 2^16 -> d"-32768" x"8000" - d"32767" 
x"0FFF"8
ADC Input: der ADC schafft 1,141Vp-p -> 17.41µV/LSB

Die Eingangsbeschaltung verringert die Spannung von 6,7Vrms auf die 
genannten 1,141Vp-p.
Die 6,7Vrms stehen nun für Spannungen 0-75V, 0-150V oder 0-300V. Das 
bedeutet, ich brauche 3 Skalierungen die umschaltbar sind und mit meinem 
Eingangsdatenstrom multipliziert werden müssen.

Als Ergebnis soll ein 32-Bit signed Wert mit einem LSB von 10mV 
rauskommen.

Beispiel(unter idealen Bedingungen):

0-75000mV entsprechen einem Faktor von 2,289 = 75000/(2^16/2)

75000mV -> 6,7Vrms = +9,48Vp -> 570,5mVp -> d"32767" -> x"0FFF" -> 
Umwandlung in (Fixed) -> Multiplikation mit Skalierung (Fixed)  -> 
x"00001D4C" (10mV/LSB)

Die 16Bit haben also ein 2.289V/LSB bei 75V. Die anderen Faktoren sind 
~4.6 und ~9.16.

Nur fehlt mir noch die Idee des genauen Aufbaus bzw. wie man von 
Std_Logic_Vector zu Fixed kommt.

von Stefan N. (mainframesk)


Lesenswert?

Hallo,

nutze jetzt ein DSP48 mit Fixed-Point zur Multiplikation. Leider hab ich 
hier ne komische Fehlermeldung beim starten von Chipscope. Und zwar habe 
ich mir eine Testumgebung für den IPcore Multiplier V10 geschaffen. In 
der Simulation funktioniert alles einwandfrei. Beim Einbinden von 
ChipScope kommt es zu Problemen. Hatte schon mal jemand diese 
Fehlermeldung bzw. kennt jemand eine Lösung?

Vielen Dank

ChipScope:     ERROR:NgdBuild:76 - File "D:/My Xilinx
ChipScope: 
Projects/Multiplier_v10.0/Test_Multiplier_v10.0/multiplier_v10_0.ngc" 
cannot
ChipScope:        be merged into block "multiplier_v10_0_test 
(TYPE="multiplier_v10_0")
ChipScope:        because one or more pins on the block, including pin 
"p<31>", were not found
ChipScope:        in the file.  Please make sure that all pins on the 
instantiated component
ChipScope:        match pins in the lower-level design block 
(irrespective of case).  If there
ChipScope:        are bussed pins on this block, make sure that the 
upper-level and lower-level
ChipScope:        netlists use the same bus-naming convention.
ChipScope:
ChipScope:     Partition Implementation Status
ChipScope:     -------------------------------
ChipScope:
ChipScope:       No Partitions were found in this design.
ChipScope:
ChipScope:     -------------------------------
ChipScope:
ChipScope:     NGCBUILD Design Results Summary:
ChipScope:       Number of errors:     1
ChipScope:       Number of warnings:   0
ChipScope:
ChipScope:
ChipScope:     One or more errors were found during NGCBUILD.  No NGC 
file will be written.
ChipScope:
ChipScope:     Writing NGCBUILD log file "D:/My Xilinx
ChipScope: 
Projects/Multiplier_v10.0/Test_Multiplier_v10.0/Toplevel_cs.blc"...
ERROR:ChipScope: Could not execute NGCBUILD to create D:\My Xilinx 
Projects\Multiplier_v10.0\Test_Multiplier_v10.0\Toplevel_cs.ngc

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.