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;
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?
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 -----------------------------------------------------
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...
Das Ganze scheint mir ein akademischer Furz zu sein. Erst sollte man sich mal ueberlegen, ob man diese Funktionalitaet mit dieser Geschwindigkeit so braucht.
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.
Martin Reizing schrieb: > RMS-Berechnung soll nicht zeitdiskret sein. Hä? Was denn sonst? Ein digitales System ist doch immer zeit- und wertdiskret.
Hier wird kein digitale Signale bearbeitet, sondern analoge und daher für die Zeitbereich wird der Effektivwert über das quadratische Mittel gebildet.
Ben schrieb: > geh nochmal tief in dich und überleg mal was du hier schreibst ! Was ist daran falsch?
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!
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?
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...
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
> 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.
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?
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?
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 !
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
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...
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.
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!
Darius schrieb: > VHDL IST eime Programmiersprache und *90%* sind synthetisierbar. Wie Loriot sagen würe: Achso!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.