Fragen zum Upsampling und zum Wechsel von einem langsamen zu einem schnellen Taktbereich in FPGA

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.

Dies ist der falsche Abschnitt, Sie müssen zum Superuser-Abschnitt oder zur Signalverarbeitung oder zur Hardwareempfehlung gehen :) Aber ich interessiere mich für Ihre hervorragende Frage. Möchten Sie DIY FPGA bauen? oder erstellen Sie Analyse-Builds?
@XCSource Ich bekomme in diesem Abschnitt viel Hilfe zum FPGA-Design, ich glaube nicht, dass jemand in der Signalverarbeitung wissen wird, wie man darauf antwortet. Weil es eher eine FPGA-Designfrage als eine DSP ist. In Bezug auf DSP lautet die Antwort nur, einen Interpolationsfilter zu verwenden, und Sie erhalten einen höheren MSPS für Ihr Signal -> aber ich interessiere mich mehr für die Antwort aus der Perspektive des FPGA-Designs.
Was versuchst du hier eigentlich zu erreichen ? Gibt es einen Grund, warum Sie eine 100-MSPS-Version des Signals wünschen? Oder möchten Sie einfach Ihre 100-MHz-Logik verwenden, um die 40 MSPS-Samples im DDR zu verstauen? Das sind fast völlig unterschiedliche Ziele.
@ChrisStratton Ich möchte einen 100-MHz-Takt verwenden, um die Daten zu verarbeiten. Einer der Gründe dafür ist, dass es bequemer ist, Daten mit einem 100-MHz-Takt vom DDR-Modul zu übertragen und zu empfangen, aber nicht nur, um die Datenverarbeitung innerhalb des FPGA zu beschleunigen
Dann tun Sie dies. Die Taktrate von Logik/Prozessor muss nicht an die Abtastrate gebunden sein (Sie müssen sicherlich nicht neu abtasten), sie muss nur ausreichen, um mit dem Datenfluss Schritt zu halten, wenn er in Echtzeit stattfindet.

Antworten (1)

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.