Gast
#680487
Hallo Leute, ich brauche Euren geschätzten Rat. Ich bin gerade dabei einen DDS / NCO in VHDL zu schreiben. Ich will ihn nur intern im FPGA für Tests von Filtern oder für DDC verwenden. Ich bin mir nicht wirklich im Klaren darüber, wie ich den Überlauf des Phasen-Accus behandeln soll. Wird der Accu einfach vor einem drohenden Überlauf auf "0" gesetzt? Das Problem welches ich sehe ist, dass ja nur eine Ganzzahl an Phaseninkementen "delta_Phase" im Phasen-Accu Akkumuliert werden können ohne dass er überläuft. Es bleibt sehr oft ein, je nach Wert von "delta_Phase" abhängiger Rest bis zum Max. möglichen Wert des Phasen-Accus übrig. Dieser Rest ist im Bereich des Überlaufes nicht gleich dem "delta_Phase" der vorherigen Takte. Dadurch enstehen Nichtlinearitäten bzw. Phasensprünge zw. zwei Zyklen die beim periodischen Abspielen zu einer Menge Spures führen würden. Gibt es dafür ein Patentrezept oder wird der Accu wie im nachfolgenen Beispiel beschrieben realisiert? process (clk, reset) begin if (reset = '0') then PhAccu <= (others => '0'); elsif (clk'event and clk = '1') then if (PhAccu + deltaPhase > MaxAccu) then PhAccu <= (others => '0'); else PhAccu <= PhAccu + deltaPhase; end if; end if; end process; Vielen Dank Stefan