Heute mal probiert, was CGPT so an VHDL auswirft, wenn man ihn/sie/es beauftragt, einen Audio-Filter zu bauen. Nach drei Versuchen und Beantwortung von Rückfragen kam "das Tschättende" dann mit ordentlichem Code rüber. Zuvor gab es Standard von der Stange.
Der Code ist im Prinzip komplett und kommt auf Wunsch mit Testbench, wenngleich die nicht wirklich das testet, was das Problem bei solchen Filtern wäre. Da muss man selber ran. Oder gfs nochmal konkreter befragen.
Das Entscheidende sind die Skalierungen und die Berechnung der Koeffizienten. Das scheint zu passen, jedenfalls klappt das Filtern. Wie genau die ausgerechnet wurden, ist aber nicht dargelegt und auch nicht so ganz durchsichtig - so weichen die Werte etwas von dem ab, was man mit einem Filterdesigner rausbekommt, insbesondere bei biquad-IIR. Er wechselt auch mittendrin von DF1 auf DF2-Form. Die Begründung war ein Überlauf und das das besser passt.
Das Interessanteste ist, daß er für FPGAs was andere empfiehlt, als für INT-Operationen im Prozessor - bei gleichen Randbedingungen. Hm ... (?)
Was er nicht kann, ist die Koeffizientenoptimierung auf ideale Breiten und versteckte Skalierungen, also erhöhte Zwischenauflösungen bei späterer Division. Besonders das Optimieren auf Ganzzahlen oder Binärzahlen wäre ja ein Ziel beim VHDL. Einen Butterfly für Audio-AA bei z.B. 24kHz hat er so z.B. zwar richtig hinbekommen (Frequenzgang passt!), allerdings braucht er fast doppelt so viele Multiplier und frisst insgesamt mehr Platz. Das liegt vor allem an den zunächst viel zu kleinen b-Koeffizienten im 1000er Bereich, die dann ungenaue Ergebnisse liefern. Die finale Version mit hoher Genauigkeit hoppelt auf 55 Bit-Verktoren.
Ohne weiteres Zutun mit FFs packt er auch nur 110 MHz, während meiner auf 200 kommt, da skalierte 42 Bit-Vektoren. Zudem ist das Teil erst einmal nur für einen Kanal geeignet, pipelinen kennt er offenbar nicht. Jedenfalls hat er dazu nichts liefern können.
Von daher ähnelt das Ganze ziemlich den open source Implementierungen, die so herumschwirren. Der Wert ist daher eher marginal, denn Werte ausrechnen und als Koeffs reinschmeißen kann man ja immer, wenn man den Filter einmal hat. Werte Optimieren muss man dann auch, wenn Bedarf.
Ich denke mal, wer gar kein VHDL kann und/oder nichts im Köcher hat, kriegt da aber durchaus gute Prototyping-SW hin.