Forum: FPGA, VHDL & Co. Effektivwertberechnung


von Martin R. (Firma: student) (martino)


Lesenswert?

hallo,

ich möchte gerne RMS in VHDL umwandeln.
Formel lautet:

RMS= sqrt( 1/n * sum(x^2))

ich habe versucht es zu programmieren, aber es hat nicht ganz geklappt.
ich hoffe kann mir jemand dabei helfen.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
use IEEE.math_real.all;

Package rms is

  function effektiv ( rms : real) return real is;

end rms;

Package body rms is

  function effektiv ( rms : real) return real;

  variable sum : real;
begin
  sum := 0; -- ???

  for i in rms'Range loop

    sum := sqrt(sum + rms(i)**2);

  end loop;

  return sum;
end rms;

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


Lesenswert?

Martin Reizing schrieb:
> ich habe versucht es zu programmieren, aber es hat nicht ganz geklappt.
Wie hast du das festgestellt?

> ich möchte gerne RMS in VHDL umwandeln.
Soll das später mal in Hardware laufen?

von Martin R. (Firma: student) (martino)


Lesenswert?

Hallo Lothar,

ja, es soll in Hardware laufen.


Ich weiß nicht, ob die Funktion richtig eingesetzt ist.

ich habe eine Bsp. gefunden und diese versuche ich in VHDL umwandeln.

--------------------------------------------------
Ada
--------------------------------------------------
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
with Ada.Numerics.Elementary_Functions;
use Ada.Numerics.Elementary_Functions;

procedure calcrms is

  type float_arr is array(1..10) of Float;

  function rms(nums : float_arr) return Float is
    sum : Float := 0.0;
    begin
    for p in nums'Range loop
      sum := sum + nums(p)**2;
    end loop;
    return sqrt(sum/Float(nums'Length));
  end rms;

  list : float_arr;
begin
list := (1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0);
put( rms(list) , Exp=>0);
end calcrms;

Output:
 6.20484
-----------------------------------------------------

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


Lesenswert?

Martin Reizing schrieb:
> ja, es soll in Hardware laufen.
Hoppla.... :-o

real in Hardware. Viel Spass...
sqrt in Hardware und dann noch als real. Dabinichmalgespannt...

> ich habe eine Bsp. gefunden und diese versuche ich in VHDL umwandeln.
Du kannst nicht so einfach so ein Programmschnipsel aus einer 
sequentiellen Programmiersprache in eine /parallele 
Hardwarebeschreibung/ übertragen.

> Package rms is
Warum machst du da gleich ein Package auf? für erste Tests kannst du das 
einfach direkt in die Testbench schreiben. Aber wie gesagt: so wird das 
nie&nimmer was...

Das ist z.B. eine integer-Wurzel:
http://www.lothar-miller.de/s9y/archives/73-Wurzel-in-VHDL.html
Und dort habe ich auch mal das C-Original und die beiden Hardware 
Lösungen mit dabei...

von Purzel H. (hacky)


Lesenswert?

Das Ganze scheint mir ein akademischer Furz zu sein. Erst sollte man 
sich mal ueberlegen, ob man diese Funktionalitaet mit dieser 
Geschwindigkeit so braucht.

von Christian R. (supachris)


Lesenswert?

Naja, zu allererst sollte man VHDL nicht mit einer Programmiersprache 
verwechseln. Wenn man das verstanden hat, kann man sich die wenigen 
Prozent von VHDL anschauen, die auch synthetisierbar sind.

von Martin R. (Firma: student) (martino)


Lesenswert?

RMS-Berechnung soll nicht zeitdiskret sein.

von Christian R. (supachris)


Lesenswert?

Martin Reizing schrieb:
> RMS-Berechnung soll nicht zeitdiskret sein.

Hä? Was denn sonst? Ein digitales System ist doch immer zeit- und 
wertdiskret.

von Martin R. (Firma: student) (martino)


Lesenswert?

Hier wird kein digitale Signale bearbeitet, sondern analoge und daher 
für die Zeitbereich wird der Effektivwert über das quadratische Mittel 
gebildet.

von Ben (Gast)


Lesenswert?

geh nochmal tief in dich und überleg mal was du hier schreibst !

von Martin R. (Firma: student) (martino)


Lesenswert?

Ben schrieb:
> geh nochmal tief in dich und überleg mal was du hier schreibst !

Was ist daran falsch?

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


Lesenswert?

Martin Reizing schrieb:
> Was ist daran falsch?
Jede Abbildung eines analogen Signals auf ein digitales Signal MUSS 
ZWINGEND zeitdiskret sein!

Martin Reizing schrieb:
> Hier wird kein digitale Signale bearbeitet, sondern analoge
Es wird ein digitalisiertes analoges Signal verarbeitet. Und dieses 
digitalisierte Signal zerlegt das analoge Signal in kleine 
Zeitabschnitte und verliert dabei Information (Shannon+Nyqiust lassen 
grüßen).

Diese Technik ist aber aus dem letzten Jahrtausend und in vielen Bücher 
gut und ausreichend beschrieben. Dein Problem ist also nicht VHDL, 
sondern das fehlende Verständnis für digitale Signalverarbeitung.

Martin Reizing schrieb:
> RMS-Berechnung soll nicht zeitdiskret sein.
Dann kannst du keine (schrittweise) for-Schleife nehmen, sondern du 
brauchst ein (durchgehendes) Integral!

von G.M. (Gast)


Lesenswert?

RMS= sqrt( 1/n) geht auch nach Heron

von Christian R. (supachris)


Lesenswert?

Und stell deine Fragen bitte hier, private Nachrichten bringen da auch 
nicht mehr Klarheit.
Ob du einen RMS brauchst, weiß ich nicht. Beschreib doch mal deine 
gesamte Aufgabe. Welche Ströme sollen gemessen werden? Und woher kommt 
das LVDS Signal?

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


Lesenswert?

G.M. schrieb:
> RMS= sqrt( 1/n) geht auch nach Heron
Es geht (am Rande bemerkt) hier (noch) nicht ums Wurzelziehen. Es geht 
zuerst mal um das grundlegende Verständnis zeitdiskreter Betrachtungen 
und Berechnungen.

Christian R. schrieb:
> Beschreib doch mal deine gesamte Aufgabe.
Am besten mit einer Skizze, was wo wie gewandelt und übertragen wird. 
Und was daraus werden soll. Und wohin die Daten dann gehen sollen...

von Martin R. (Firma: student) (martino)


Angehängte Dateien:

Lesenswert?

Die Schaltung habe ich so grob skizziert.

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


Lesenswert?

Martin Reizing schrieb:
> Die Schaltung habe ich so grob skizziert.
Nachdem du dort schon eine Summe ins FPGA gezeichnet hast, muss das 
Ganze zeitdiskret sein. Denn sonst hätte da ein Integral reingehört.

Und jetzt hast du wie gesagt erst mal ein logisches Problem mit dem 
Verständnis zum Thema "Signalverarbeitung", nicht mit der Realisierung 
im FPGA!

BTW: in dem Bild passt noch einiges nicht zusammen.
1. Warum werden 30 Bit deserialisiert, wenn am Anfang der Kette nur 14 
Bit eingespeist werden?
2. Warum sind nach dem Deserializer immer noch LVDS-Signale? Gehst du da 
parallel mit LVDS ins FPGA? Das bäuchte aber einige Pins:
20 Kanäle *30 Bit *2 LVDS Leitungen = 1200 Pins... :-o

von Martin R. (Firma: student) (martino)


Lesenswert?

> Ganze zeitdiskret sein. Denn sonst hätte da ein Integral reingehört.
Ja hast recht. Es ist Zeitdiskret.

> 1. Warum werden 30 Bit deserialisiert, wenn am Anfang der Kette nur 14
> Bit eingespeist werden?
kommen zusätzlich 16 Bits dazu über Serializer.

> 2. Warum sind nach dem Deserializer immer noch LVDS-Signale?
ja. es wird parallel mit LVDS ins FPGA gegangen.

von Martin R. (Firma: student) (martino)


Lesenswert?

Die Frage ist, brauche ich in FPGA diese Effektivwertberechnung?

Ich will einfach wissen, ob das nötig ist oder nicht.

Oder alternatif was kann man machen oder nehmen?

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


Lesenswert?

Martin Reizing schrieb:
> Die Frage ist, brauche ich in FPGA diese Effektivwertberechnung?
Ja, sagen wir mal so: ich brauche sie nicht. Ob du sie brauchst, 
hängt doch von deiner eigentlichen Aufgabe ab...

> Ich will einfach wissen, ob das nötig ist oder nicht.
Das sollte aus der Aufgabenstellung hervorgehen.

Aber das wars auch, was schon Christian R. schrieb:
>> Ob du einen RMS brauchst, weiß ich nicht. Beschreib doch mal deine
>> gesamte Aufgabe. Welche Ströme sollen gemessen werden?

von Martin R. (Firma: student) (martino)


Lesenswert?

Hallo,

jetzt wurde doch anders entschieden und muss ich ein RMS für 14 Bit mit 
VHDL realisieren:
RMS wird in FPGA (RAM = 54Kbits) implementiert.

1. wie viele logische Operatoren bwz. wie viele Addition, multiplikation 
und FF brauche ich?
2. wie viele zwischen Speicher wird in FPGA benötigt?

danke !

von Marius W. (mw1987)


Lesenswert?

Ich empfehle dir einfach, das Semester oder vielleicht doch besser das 
ganze Studium nochmal zu wiederholen... Denn von eigenständigem Lernen 
hast du wohl noch überhaupt nichts gehört. Müssen wir dir hier alles 
Vorkauen?

Die beiden Fragen, die du gestellt hast, sind ohne weitere Angaben 
überhaupt nicht zu beantworten. Es kommt halt einfach darauf an, wie du 
das ganze implementierst. Wenn du schlau wärest (wovon ich leider im 
Moment noch nicht so ganz überzeugt bin), dann würdest du dich in deine 
von dir bevorzugte FPGA-Entwicklungsumgebung setzen und einfach ein paar 
verschiedene Versionen der RMS-Berechnung implementieren. Dann bekommst 
du ein Gefühl dafür, wie viele Logik-Primitive du benötigst und wie lang 
die gesamte Berechnung dauert. Ein paar Stichworte mit denen du dich 
befassen solltest: Pipelining, Parallelität usw.

Gruß
Marius

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


Lesenswert?

Marius Wensing schrieb:
> dann würdest du dich in deine
> von dir bevorzugte FPGA-Entwicklungsumgebung setzen und einfach
> ein paar verschiedene Versionen der RMS-Berechnung implementieren
Zuvor jedoch ...
... würdest du dir das Ganze einfach mal auf ein Blatt Papier zeichnen. 
Und überall dort, wo Fragezeichen sind (und das ist derzeit an jeder 
Stelle auf diesem Blatt), Informationen sammeln.

Martin Reizing schrieb:
> 1. wie viele logische Operatoren bwz. wie viele Addition, multiplikation
> und FF brauche ich?
Wie würdest du den Effektivwert auf einem Blatt Papier ausrechnen? 
Ersat, wenn du das kannst, dann macht "Weitermachen" überhaupt Sinn. 
Denn sonst ist es, wie wenn ein Blinder ein Auto fährt: Er kann zwar Gas 
geben, Schalten und Bremsen, er weiß aber gar nicht, WARUM und WOFÜR 
eigentlich?

> 2. wie viele zwischen Speicher wird in FPGA benötigt?
Wenn du einen RMS-Wert in Echtzeit berechnest, brauchst du nur das 
Summenregister z.B. mit 53 Bit Breite...

von Darius (Gast)


Lesenswert?

Christian R. schrieb:
> Naja, zu allererst sollte man VHDL nicht mit einer Programmiersprache
> verwechseln. Wenn man das verstanden hat, kann man sich die wenigen
> Prozent von VHDL anschauen, die auch synthetisierbar sind.

Was ist denn DAS für eine Aussage?

VHDL IST eime Programmiersprache und *90%* sind synthetisierbar.

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


Lesenswert?

Darius schrieb:
> VHDL IST eime Programmiersprache und *90%* sind synthetisierbar.
ROTFL...
Das ist der beste Witz in diesem Jahrtausend. Der dürfte kaum zu toppen 
sein. Ich sage nur File_IO, Text_IO, Zeiten und Attribute...

Ich sage: etwa 5% sind synthetisierbar.
Oder andersrum: hole 100 Anfänger und gib ihnen ein VHDL-Buch. Dann lass 
sie eine Ampel programmieren. Und dann wirst du bestenfalls 5 
Beschreibungen bekommen, die es über den Simulator raus schaffen. Eher 
weniger!

von Christian R. (supachris)


Lesenswert?

Darius schrieb:
> VHDL IST eime Programmiersprache und *90%* sind synthetisierbar.

Wie Loriot sagen würe: Achso!

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


Lesenswert?

Darius schrieb:
> VHDL IST eime Programmiersprache
Dann müsste es aber VHPL heissen... ;-)
Very high speed integrated circuit Hardware DESCRIPTION Language = VHDL
vs.
Very high speed integrated circuit Hardware PROGRAMMING Language = VHPL

Christian R. schrieb:
> Wie Loriot sagen würe: Achso!
Hach!

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.