Forum: FPGA, VHDL & Co. Algorithmische Ebene Sinus VHDL


von Zayna M. (zaynam)


Lesenswert?

Guten Abend,
ich habe die Aufgabe, einen DDS-Sinus-Generator zu programmieren und 
dazu die RT-Ebene größtenteils fertig. Allerdings komme ich bei der 
algorithmischen Ebene, die auch verlangt ist, nicht voran. In Skripten 
meiner Uni und online habe ich bisher nur Allgemeinplätze dazu gefunden 
und kann mir einfach nicht plausibel machen, was am Code/an der 
Vorgehensweise der Unterschied zur RT-Ebene ist. Etwas zu programmieren, 
was nicht synthetisiert werden kann, ist für mich kontraintuitiv. Ich 
denke, mein Problem liegt nur bei der Form, d.h. formellen Kriterien des 
Professors.

Könntet ihr mir beim Ansatz helfen? Was gehört in die algorithmische 
Ebene, was keinesfalls? Könnt ihr mir Beispiele geben? Was muss ich 
konkret beim Sinus beachten? Kann ich einfach den sin aus der math_real 
nehmen und simulieren?

von J. S. (engineer) Benutzerseite


Lesenswert?

Zayna Maseem schrieb:
> Etwas zu programmieren,
> was nicht synthetisiert werden kann, ist für mich kontraintuitiv.
Die Nutzung einer algorithmischen Ebene impliziert nicht, daß das 
Ergebnis der Beschreibung, wenn nicht sogar die Beschreibung selbst, 
nicht direkt oder indirekt in irgendeiner Form synthetisierbar wäre. Es 
handelt sich lediglich um eine andere Beschreibungsform, desselben 
Sachverhalts mit (hoffentlich) dem gleichen Informationsgehalt.

Zur algorithmischen Ebene gehören für mich die mathematischen, 
booleschen und sequenziellen Beschreibungsformen. Dein Prof wird gfs 
eine abweichende Haltung haben. Du weisst ja: 3 Digital-Theoretiker: 5 
Meinungen!

In Deinem Fall könnte die DDS so aussehen:

Y(PHASE) = INT (AMPLITUDENAUFLOESUNG x SINUS(INT (2 x PI x INT 
((PHASENAUFLOESUNG x PHASENVEKTOR + 0,5) / PHASENAUFLOESUNG + 0,5) / 
TABELLENLAENGE + (0,5 / TABELLENLAENGE))) + 0,5) / AMPLITUDENAUFLOESUNG

und dies für alle Phasen für die gilt : 0<= Phase <= 2PI. Das sollte es 
eigentlich gewesen sein. FSMs haben wir keine und eine pipeline würde 
ich das nicht nennen. Wenn Du protzen möchtest, vewendest Du für die 
Darstellung den Allquantor.

Achtung: keine Gewähr auf Formeln nach Mittenacht!

Zu Sinn des für einige oft sonderbaren Offsets bei der Phase (0,5 / 
TABELLENLAENGE) siehe Digitale Sinusfunktion

Die RT-Ebene ist dann der Punkt, wo man beginnt, die Phase in 4 Teile zu 
zerlegen und die Quartile zu spiegeln, Vektoren zu verwenden, statt 
Integer etc. Und vor allem splittet sich an dieser Stelle die Formel 
derart auf, dass der äussere Teil als Tabelle abgelegt wird (oder eben 
auch nicht). Aber die RTE hast Du ja schon.

Du kannst Dir jetzt mal den Spass machen, o.g. Formel für die Punkte t 
und t+1 zu formulieren, um dann den Rest, der im zweitinnersten 
INT-Konstrukt weggerundet wird, dazu zu verwenden, die Punkte zu 
interpolieren. Der Einfachheit halber solltest Du dann meinen 
Spezialoffset weglassen.

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


Lesenswert?

Zayna Maseem schrieb:
> Was muss ich konkret beim Sinus beachten? Kann ich einfach den sin aus
> der math_real nehmen und simulieren?
Wie gesagt: du kannst ihn sogar zur Synthese verwenden. Nur sollte der 
resultierende wert dann kein float mehr sein, sondern sich "einfach" 
als Bitmuster darstellen lassen. Die von Jürgen angesprochene 
Sinusberechnung habe ich dort implementiert:
http://www.lothar-miller.de/s9y/categories/31-DDFS
Interessant ist für dich der Abschnitt:
1
use ieee.math_real.all;  
2
:
3
  type Rom64x8 is array (0 to 63) of signed (7 downto 0); 
4
  -- Sinus von 0° bis 90° (0 bis PI/2)
5
  signal Sinus_Rom : Rom64x8;
6
:
7
   table: for i in 0 to 63 generate
8
        Sinus_Rom(i) <= to_signed(integer( sin(2.0*MATH_PI*(real(i)+0.5)/256.0) *127.5),8);
9
   end generate;

von Zayna M. (zaynam)


Lesenswert?

Vielen, vielen Dank!

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Juergen S. schrieb:

> Y(PHASE) = INT (AMPLITUDENAUFLOESUNG x SINUS(INT (2 x PI x INT
> ((PHASENAUFLOESUNG x PHASENVEKTOR + 0,5) / PHASENAUFLOESUNG + 0,5) /
> TABELLENLAENGE + (0,5 / TABELLENLAENGE))) + 0,5) / AMPLITUDENAUFLOESUNG
Warum bildest Du den INT vor dem Sinus?
Lothar macht es richtig, erst real und dann runden, oder was soll das?

von Ralf (Gast)


Lesenswert?

Zayna Maseem schrieb:
> Was gehört in die algorithmische
> Ebene, was keinesfalls? Könnt ihr mir Beispiele geben?
Hörts sich sehr theoretisch an, was sagt denn Dein Prof?
Meines Wissens gibt es keine Norm, was da rein gehört.

von J. S. (engineer) Benutzerseite


Lesenswert?

Ralf schrieb:
> Hörts sich sehr theoretisch an, was sagt denn Dein Prof?
Das würde mich auch interessieren.

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.