BPSK-Modulator mit DDS auf FPGA

Ich habe einen BPSK-Modulator mit einem AD9852 entwickelt. Da AD anscheinend keine Möglichkeit bietet, ihre DDS-ICs funktional zu simulieren, sehe ich mich plötzlich in der Notwendigkeit, auf eine FPGA-Architektur umzusteigen. Ich habe noch nicht mit einem FPGA oder VHDL gearbeitet. Nachdem ich eine Weile recherchiert hatte, kamen mir ein paar (eher viele) Fragen zu FPGA- und DDS-Architekturen:

1) Wie schnell kann der interne Referenztakt auf dem FPGA gehen? kann es intern geteilt werden, um einen höheren Referenztakt zu erhalten?

2) Ist es möglich, einen internen DAC auf dem FPGA zu machen?

Falls dies nicht der Fall ist, kann der interne Referenztakt an einen externen DAC ausgegeben werden? Wie kann die Pipeline-Verzögerung in diesem Fall behoben werden?

Falls beides möglich ist, welches wäre empfehlenswert?

3) In mehreren Projekten mit FPGA wird der Modulator vereinfacht, indem der DDS verwendet wird, um die Trägerfrequenz zu erzeugen, dann mit seinem Komplement und dem binären Dateneingang zu multiplexen. In herkömmlichen Schemata wird die Phasenmodulation am Ausgang des Phasenakkumulators vor der LUT durchgeführt. Wie kann das praktisch gemacht werden (für das, was ich mit den FPGA-Tools sehen kann, sind die meisten dieser Blöcke bereits verfügbar).

Außerdem kann die LUT durch Ausnutzen der Sinuswellensymmetrie um bis zu einem Viertel reduziert oder einfach entfernt und der CORDIC-Algorithmus angewendet werden. Wie kann diese Phasenverkürzung durchgeführt werden? im Fall von CORDIC gibt es dafür einen implementierten CORDIC-Block?

Übrigens blöde Frage. Müssen die LUT-Werte für jedes Frequenzabstimmwort im Phasenakkumulator berechnet werden oder hängt es nur vom Referenztakt ab (in diesem Fall müsste es für eine bestimmte Referenzfrequenz berechnet werden)?

4) Ist es möglich, DSP-Gleitkommaberechnungen auf FPGA durchzuführen? Mir ist bewusst, dass es einige eingebettete Boards mit ARM-Cortex gibt.

Abschließend, welche Modelle/Boards von FPGA würden Sie für diese spezielle Anwendung empfehlen (auch wenn man bedenkt, dass ich ein begrenztes Budget habe)?

Mir ist bewusst, dass dies viele Fragen sind, aber jede Hilfe zu diesen Themen wäre willkommen

Vielen Dank im Voraus

Ohne zu wissen, mit welchen Frequenzen Sie arbeiten und welches FPGA Sie haben, sind diese Fragen schwer zu beantworten.
Welche Trägerfrequenz / Wenn-Frequenz planen Sie zu verwenden? Und mit welcher Datenrate versuchst du zu übertragen?
Da AD anscheinend keine Möglichkeit bietet, ihre DDS-ICs funktional zu simulieren, sehe ich mich plötzlich in der Notwendigkeit, auf eine FPGA-Architektur umzusteigen. Du hast mich bei dieser Aussage verloren. Warum müssen Sie simulieren?

Antworten (1)

1) Die Referenzuhr kann so schnell oder so langsam gehen, wie Sie möchten. Die meisten FPGAs haben eingebaute PLLs, die einen externen Referenztakt in jede gewünschte Frequenz umwandeln können (im Rahmen des Zumutbaren). Sie könnten also eine externe 10-MHz-Referenz nehmen und sie auf 100, 150, 200 MHz usw. multiplizieren.

2) Nein, FPGAs enthalten keine DACs. Es kann möglich sein, einen R-2R-DAC zu bauen, aber wenn Sie mit einer hohen Abtastrate arbeiten möchten, ist es möglicherweise ratsam, einen externen Hochleistungs-DAC mit einer breiten parallelen oder sogar seriellen Hochgeschwindigkeitsschnittstelle (nicht SPI, hohe Geschwindigkeit wie >1 Gbit/s pro Spur). Offensichtlich benötigt ein DAC einen Abtasttakt, und die Generierung im FPGA ist sicherlich möglich. Wenn Sie ein DDR-Flip-Flop verwenden, um den Takt zu erzeugen, sollte es genau mit den Samples übereinstimmen, die parallel getaktet werden.

3) Das Hinzufügen eines Phasenversatzes nach dem Phasenakkumulator ist einfach - fügen Sie einfach einen Addierer zwischen den beiden hinzu und fügen Sie den Versatz hinzu, den Sie für jeden Zyklus benötigen.

In Bezug auf eine LUT ist diese Symmetrie nur eine Sache, die Sie ausnutzen können. Wenn Sie mit der Verwendung einiger DSP-Slices (Multiplikatoren) einverstanden sind, ist es möglich, eine sehr große (18-Bit-Phase, 16-Bit-Amplitude) äquivalente Tabelle in 3 kleine LUTs (~ 512 Einträge) zu komprimieren. Dabei wird die trigonometrische Identität sin(A+B) = sin(A) + cos(A)*sin(B) verwendet, um die Sinuswelle mit hoher Auflösung zu rekonstruieren. Ein Beispiel finden Sie unter https://github.com/alexforencich/verilog-dsp/blob/master/rtl/sine_dds_lut.v . Die LUT-Werte müssen nur für die benötigte Bittiefe berechnet werden, die gewünschte Frequenz wählen Sie mit dem Frequency Control Word aus.

4) Es ist möglich, aber im Allgemeinen nicht sehr effizient. FPGAs sind hauptsächlich für schnelle Festkomma- und Integer-Mathematik optimiert. Es gibt einige, die Hardware-Gleitkomma unterstützen, aber diese sind relativ selten.