Ich bin in letzter Zeit auf einige Fragen und Probleme gestoßen, die ich mir gestellt habe, und hoffte, dass ich hier einen guten Hinweis bekommen kann, bevor ich anfange, lange Artikel zu lesen, ohne mir sicher zu sein, ob es der richtige Weg ist.
Nehmen wir an, ich habe ein FPGA-Design, bei dem ich ADC-Daten mit einer Abtastrate von 40 MHz erhalte, also speichere ich die Daten von der ADC-Schnittstelle in 40 MHz.
aber ich möchte den DSP im FPGA mit einer Taktrate von 100 MHz erstellen (zum Beispiel, weil ich im DSP-Blockdiagramm eine DDR3-Speicherschnittstelle habe, die mit 400 MHz und einer Taktrate von 4: 1 arbeitet, was bedeutet, dass der UI-Takt des DDR3 100 MHz beträgt).
Die Daten von der ADC-Schnittstelle, die mit einer Rate von 40 MHz ankommen, sind zu 90 % der Zeit gültig, was bedeutet, dass ich das meiste davon benötige.
Die erste Frage, die ich stellen möchte, lautet also: Wie würden Sie den Datenstrom von der langsamen in die schnelle Domäne verschieben?
Ich habe bereits einen Arbeitsmechanismus dafür gemacht, ich habe ein FIFO gefüllt (mit 1024 Tiefe) und gleich danach angefangen, das nächste FIFO zu füllen (ich habe 2 FIFOs verwendet),
während der Lesevorgang vom ersten FIFO im Moment des ersten beginnt FIFO ist gefüllt, und von diesem Zeitpunkt an lese ich nur den 1. und dann den 2. und den 1. und 2. und so weiter ... während ich weiter in die 2 FIFOs nacheinander schreibe.
Nachdem ich diesen Block fertig geschrieben hatte, fragte ich mich, ob es einen besseren Weg gibt,
Ich bin mit FIR auf den Interpolationsfilter gestoßen. Erledigt die Interpolation diese Aufgabe, um für einen Datenstrom von einem langsamen in einen schnellen Taktbereich zu wechseln?
Ich habe auch den Polyphase-Filter gesehen, der auch eine Möglichkeit zu sein scheint, zu einer schnelleren Abtastrate zu wechseln.
Ist sein Filter, der im FPGA einfach zu instanziieren ist, der richtige Weg, um den Datenstrom in eine schnellere Taktdomäne zu verschieben, oder ist mein Weg mit FIFOs der richtige Weg?
Danke.
Die erste Frage, die ich stellen möchte, lautet also: Wie würden Sie den Datenstrom von der langsamen in die schnelle Domäne verschieben? Ich habe bereits einen funktionierenden Mechanismus dafür gemacht, ich habe einen FIFO (mit 1024 Tiefe) gefüllt und gleich danach angefangen, den nächsten FIFO zu füllen (ich habe 2 FIFOs verwendet),
Genau so, wie Sie es tun: mit Clock-Domain-Crossing-FIFOs.
Nachdem ich diesen Block fertig geschrieben hatte, fragte ich mich, ob es einen besseren Weg gibt, ich bin auf den Interpolationsfilter mit FIR gestoßen, macht die Interpolation diese Aufgabe, für einen Datenstrom von einem langsamen in einen schnellen Taktbereich zu wechseln?
Nein. Ich meine, ja, aber nein.
Sie möchten die gleichen Samples an eine schnellere Clock weitergeben und dort verarbeiten. Interpolation (und alle Resampling) ändern tatsächlich das digitale Signal.
Lassen Sie uns dies anhand eines Beispiels veranschaulichen: Angenommen, Sie möchten von einem mit 40 MHz abgetasteten Signal auf 200 MS/s (Megasamples pro Sekunde) gehen. Was Sie tun, ist einfach 4 Nullen nach jedem Eingabe-Sample einzufügen. Da Sie normalerweise möchten, dass die „Nullen“ keine Nullen sind, sondern das analoge Signal so darstellen, als ob es zunächst mit 200 MHz abgetastet wurde, wenden Sie einen Tiefpassfilter an (in dieser Anwendung wird es als Anti-Imaging-Filter bezeichnet) und erhalten ein interpoliertes Signal.
Nur weil Sie 200 Millionen Samples pro Sekunde erhalten, heißt das jedoch nicht, dass Sie sie mit einem Durchsatz von 200 Millionen Samples pro Sekunde oder mit einer Taktrate von 200 MHz verarbeiten müssen. Sie können sie so schnell verarbeiten, wie Sie möchten, und wenn Sie genügend Puffer haben, auch so langsam, wie Sie möchten.
Abtastrate und Taktrate sind nicht unbedingt miteinander verbunden.
Stellen Sie sich das auf Ihrem PC vor: Angenommen, Sie haben eine rohe PCM-Audiodatei, die mit 44,1 kS/s abgetastet wurde. Sie möchten es als MPEG 4-Audio codieren; Obwohl das Audiostück Minuten lang sein kann, dauert der Codierungsvorgang nur Sekunden: Es ist nicht erforderlich, die Audiodatei auf die "Verarbeitungsrate" Ihrer CPU zu bringen (was auch immer diese Rate sein mag - es gibt sie wirklich nicht). .
Das Gleiche gilt für Ihre FPGA-Domäne: Sicher, Ihre höhere Taktdomänenlogik muss wahrscheinlich zwischendurch im Leerlauf bleiben, wenn sie mit Samples von einem langsameren ADC gespeist wird, aber das bedeutet nur, dass Sie sich entspannen können, und es ist in Ordnung, wenn mehr als eine benötigt wird Taktzyklus pro Sample zu arbeiten.
Kubisch273.15
Michael Astahov
Chris Stratton
Michael Astahov
Chris Stratton