Forum: FPGA, VHDL & Co. Probleme mit erstelltem FIR Filter aus Core Generator (Xilinx ISE)


von Veribro (Gast)


Lesenswert?

Hallo,

ich habe über den "Core Generator" der Xilinx ISE ein FIR-Filter mit 257 
Koeffizienten und zwei Kanälen erstellt.
Ich möchte also 2 x 8 Bit an Eingangsvariablen reingeben und ein 
quantisiertes Ausgangssignal von 2 x 16 Bit erhalten.
Beim Aufruf der Verilogdatei aus dem "Top Level"-Modul und einer 
Simulation mittels iSim jedoch kriege ich egal was ich für Eingangsdaten 
sende als Ausgangsdaten nur einen Haufen 16 Bit voller 0en. Das ganze 
lasse ich mit einem Takt laufen und um die DSP48E Slices nicht zu 
überfordern arbeite ich mit dem 16fachen an Systemtakt als der den ich 
einspeise. Habe schon alle Kombinationen probiert und ursprünglich einen 
Dirac-Impuls gesendet um zu überprüfen ob ich die Filterkoeffizienten 
zurückkriege, aber es hilft nichts.
Hat jemand einen Tipp für mich ob ich noch etwas mit dem Filtermodul 
machen muss?

Eine andere Frage die ich mir noch gestellt habe ist ob die generierte 
Verilogdatei synthetisierbar ist. Ich weiß nur das ein Haufen anderer 
Dateien noch erstellt wurden, darunter auch die entscheidende 
.ngc-Datei, aber ich hab keine Ahnung wie man so eine Datei einbindet - 
ich weiß nur wie man mit HDL-Sprachen arbeitet.
Kann man theoretisch auch über Verilog eine .ngc-Datei aufrufen und dort 
Eingangsdaten hineinsenden und auslesen?
Ich bitte um einige Hilfe oder Referenzen dazu.
Am besten ein Beispiel in der mein Fall einmal vorgeführt wird, so kann 
ich mir dann am besten ein Bild daraus machen.

von Christian R. (supachris)


Lesenswert?

Welche Ausgangs-Rundungsart hast du denn eingestellt? Ich hatte damit 
auch Probleme, hab mir dann aber die Ausgabe bei "Full precision" 
angeschaut und die passenden Bits selbst rausgesucht. Irgendwie geht das 
rounding nicht so, wie ich das mir vorgestellt habe.

Die Verilog Datei ist nur der Wrapper. In ISE musst du einfach über Add 
Source die .xco Datei einbinden, dann findet der alles weitere und der 
Core ist direkt über ISE managebar.

von Veribro (Gast)


Lesenswert?

Christian R. schrieb:
> Welche Ausgangs-Rundungsart hast du denn eingestellt? Ich hatte damit
> auch Probleme, hab mir dann aber die Ausgabe bei "Full precision"
> angeschaut und die passenden Bits selbst rausgesucht. Irgendwie geht das
> rounding nicht so, wie ich das mir vorgestellt habe.
>
> Die Verilog Datei ist nur der Wrapper. In ISE musst du einfach über Add
> Source die .xco Datei einbinden, dann findet der alles weitere und der
> Core ist direkt über ISE managebar.

Hey Danke für die Tipps.
Du hattest Recht, ich hatte nämlich eingestellt er solle bitte Runden, 
hat dann aber nichts mehr ausgegeben. Hab dann auch in meinem Top-Modul 
eine manuelle Rundung durchgeführt nachdem ich deutlich sichtbare 
Ergebnisse in der "Full precision"-Darstellung bekommen habe.

Als ich die .xco-Datei eingebunden habe hat er mir das anscheinend auch 
fehlerlos angezeigt - danke dafür. Und ich hoffe richtig zu sehen, dass 
es die gleichen Ein- und Ausgangsvariablenaufrufe bzw. Modulaufrufe sind 
wie bei der .v-Datei auch. Er zeigt mir zumindest keine Fehler an.

von Christian R. (supachris)


Lesenswert?

Das komische am Runden da ist, dass er die Teilung des Ausgangssignals 
durch die Anzahl der Taps schon im Core macht und dann nochmals die Bits 
verschiebt (bei Trunkate). Und dann kommt nur noch was sehr kleines 
raus. Den genauen Grund hab ich noch nicht rausgefunden. Ich hab dann im 
Matlab FDA Tool eingestellt, er soll die Koeffizienten nicht auf den 
Maximalbereich skalieren und schiebe den Vektor nach dem Filter selbst 
zurecht, dann klappts. Muss man nur auf Übersteuerung aufpassen.

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.