www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Effektivwertberechnung


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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
-----------------------------------------------------

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...
Und dort habe ich auch mal das C-Original und die beiden Hardware 
Lösungen mit dabei...

Autor: Siebzehn und Fuenfzehn (hacky)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
RMS-Berechnung soll nicht zeitdiskret sein.

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Martin Reizing schrieb:
> RMS-Berechnung soll nicht zeitdiskret sein.

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

Autor: Martin Reizing (Firma: student) (martino)
Datum:

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

Autor: Ben (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
geh nochmal tief in dich und überleg mal was du hier schreibst !

Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ben schrieb:
> geh nochmal tief in dich und überleg mal was du hier schreibst !

Was ist daran falsch?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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!

Autor: G.M. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
RMS= sqrt( 1/n) geht auch nach Heron

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Martin Reizing (Firma: student) (martino)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Die Schaltung habe ich so grob skizziert.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Martin Reizing (Firma: student) (martino)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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 !

Autor: Marius Wensing (mw1987)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Darius (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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!

Autor: Christian R. (supachris)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Darius schrieb:
> VHDL IST eime Programmiersprache und *90%* sind synthetisierbar.

Wie Loriot sagen würe: Achso!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net