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?
Also ehe ich das kaufe, mach ich es in 10 Minuten lieber selber mit Excel. MFg Falk
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 ;-)
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 ^^
Oder python. Da kann man den Code später auch noch lesen und ggf. weiterverwenden. Rick
>>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
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.
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.
Nun falls dich überhaupt nichts erschickt, dann kannst du das auch mit der eingebauten TCL-Shell probieren:
1 | 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.
@ 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
Wahrscheinlich, das ist mehr einfach: Quartus II 7.1 --> MegaWizard --> DSP --> Signal Generation --> NCO 7.1 Tschuess!
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.
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
Tipp: StarOffice / Calc: GANZZAHL ( 128 * SIN( winkel) )) winkel in einer Spalte, dann obige Formel
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
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
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
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.