www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Generation einer SIN-COS LUT unter Altera Megawizzard


Autor: Karl Pirinha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lässt sich mit dem Altera Megawizzard irgendwie eine LUT für SIN/COS 
oder ein Berechung dafür generieren? Xilinx hat sowas drin.

Gibt es das überhaupt ? gfs als käuflicher Core?

... oder muss ich mir ein ROM bauen und die Werte selber erzeugen?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ehe ich das kaufe, mach ich es in 10 Minuten lieber selber mit 
Excel.

MFg
Falk

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, das wäre doch mal interessant, ob sich ein generischer VHDL-Code 
dafür schreiben lässt, der vom Synthesetool in ein Block-RAM umgesetzt 
wird.
Dann brauch ich mir auch kein Excel kaufen ;-)

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man nehme einen C-Compiler, schreibt ein wenig Quelltext und schon 
bekommt man einen Sin/Cos-LUT mit "beliebig" vielen Stellen.
30 Zeilen C-Code ^^

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder python. Da kann man den Code später auch noch lesen und ggf. 
weiterverwenden.

Rick

Autor: Detlef _a (detlef_a)
Datum:
Angehängte Dateien:
  • t.txt (313 KB, 327 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
>>30 Zeilen C-Code

3 Zeilen Matlab, zu C also 20dB einfacher !

c=cos(2*pi*(0:9999)/10000);
s=sin(2*pi*(0:9999)/10000);
save t.txt s c  /ascii

File habe ich angehängt, das is unter GPL, have fun !

Cheers
Detlef

Autor: thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, das ist sicherlich weniger Schreibarbeit, allerdings hätte ich keine 
Lust 10000 Werte in einen BRAM per Hand zu schreiben. In meinen 
zusätzlichen Zeilen ist gleich noch die Initialisierung für den BRAM 
drin. Also nur einige wenige Copy&Paste anstatt 10000 x in Hex umwandlen 
und jedesmal C&P ;)

Werde morgen mal den Code posten, falls das erwünscht ist. Hab ihn 
gerade nicht zur Hand.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c=cos(2*pi*(0:999)/1000);
sprintf('%i, \n', round(c*255))

...und das dann einfach in die Arrayinitialisierung reinkopieren.

Es hat schon einen Sinn warum Skriptsprachen wie Matlab erfunden wurden.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun falls dich überhaupt nichts erschickt, dann kannst du das auch mit 
der eingebauten TCL-Shell probieren:

for {set i 0} {$i <= 90} {incr i} {puts [format "%X" [expr {int(sin($i/90.*acos(0))*255)}]]}

Zu finden unter View->Utility Windows->TCL Console.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Detlef _a (detlef_a)

>3 Zeilen Matlab, zu C also 20dB einfacher !

>c=cos(2*pi*(0:9999)/10000);
>s=sin(2*pi*(0:9999)/10000);
>save t.txt s c  /ascii

>File habe ich angehängt, das is unter GPL, have fun !

Vollkommen unbrauchbar! So ne Tabelle hat a) Integerwerte und b) braucht 
man noch das VHDL-Konstrukt.

Also nachbessern!

MFg
Falk

Autor: Igor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich, das ist mehr einfach:
Quartus II 7.1 --> MegaWizard --> DSP --> Signal Generation --> NCO 7.1
Tschuess!

Autor: Karl Pirinha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Megawizzard kenne ich, doch der macht nicht, was er soll. Er 
generiert entweder dynamishc über Algorithmik oder produziert gewaltigen 
Registerverbrauch. Die Funktion ist oversized für meine Ansprüche.
Ich habe Excelgenommen, was jederzeit leicht modifizierbar ist.

Autor: Jonas Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe einen FIR Filter in Verliog implementiert und bin nun dabei diesen 
zu testen. Wie würde ich den eine Sinus LUT erzeuegn mit einem 8bit 
Amplitudenbereich von +1...-1.
Also das MSB representiert das Vorzeichen und die restlichen bits 
stellen den Nachkomma anteil der Zahl dar. Nachdem ich mit Excel 
gescheitert bin, versuch ich  das gerade mit Matlab, bekomme es aber 
irgendwie auch nicht auf die Reihe. Ein Lösungsvorschlag mit Excel wäre 
spitze.
Gruss,
Jonas

Autor: Christian (Guest) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tipp:

StarOffice / Calc:
GANZZAHL ( 128 * SIN( winkel) ))

winkel in einer Spalte, dann obige Formel

Autor: Jonas Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey super,
das haut schin fast hin. Habe mir eine Tabelle wie Christian oben 
beschrieben hat erzeugt. Das Problem was ich nun habe ist die Wandlung 
der vorzeichenbehafteten Ganzzahl in ein Binärwort. Mit 
dezinbin(Zelle,8) hauts hin mit positiven Zahlen. Negative besitzen 
insgesamt 10Stellen und liegen im 2'S complement vor. Hat hier jemand 
einen Kniff auf Lager wie ich diese Geschichte vereinheitlichen könnte. 
Benötige zuviel Werte, da macht die perHandUmrechnung des 
Zweierkomplements für die einzelnen Werte nicht soviel Spass. Würde 
gerne direkt die Werte zur Initialiserung eines 8bit breiten FPGA onchip 
Speichers nutzen.
Danke und Gruss,
Jonas

Autor: Igor (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Probieren Sie es.
mfg.
Igor

Autor: Jonas Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mich nochmal in Matlab probiert und bin nun auch zu einem 
Ergebnis gekommen.
Sollte die Fixed-Point Toolbox vorhanden sein geht es so recht nett:

Ein Sinussignal im Q1,7 Format:

a=fi(sin(2*pi*(0:100)'*0.05),true,8,7);
a.bin

Danke für dein Post Igor; schaue mir gleich auch nochmal deinen Code an.
Gruss,
Jonas

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"im Q1,7 Format:"

Was ist das ???

Autor: Jonas Berger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Q1,7 Format beschreibt eine sogenannte signed fractional fixed-point 
zahl.
Hierbei handelt es sich um eine 8bit Zahl mit einem Ganzzahlanteil von 1 
und sieben Nachkommastellen.

 S | . | X |   X  |  X  | X  | X  | X  |  X |
-1 | . |0.5| 0.25 | ... | ...| ...| ...| ...|

Der abgedeckte Zahlenbereich erstreckt sich somit von -1 bis (1- 1/128).
P.S Hat jemand schon mal einen FFT core in signed fractional 
implementiert ?
So etwas möchte ich mal als nächstes angehen. Der core sollte recht 
einfach gehalten werden: 8point, radix-2, kein inplace.
Über allgemeine Hinweise zum Vorgehen (overflow-Problematik, 
Zahlenbereichsauslegung etc.)
bin ich dankbar. Schönes WE,
Jonas

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.