Generating a 30 MHz signal within the PYNQ framework

I was wondering if anyone had thoughts on if it would be possible to generate a 30 MHz sinusoid using a PYNQ platform?

I have an embedded application that requires real-time processing and signal generation so I figured this would be great for FPGAs. The first major technical challenge is to produce a 30 MHz signal. For this signal, I need to

  • start at the same phase (preferably 0 for sine wave) every time it’s triggered
  • have a minimum adjustment of 1 kHz (i.e. 24.001 MHz, 24.002 MHz…)

I am very new to PYNQ but I did get a Pmod DA4 working, however, the following code was the only way I could get the driver to generate a signal. As I am sure you can see, this was not fast and could only return a signal with an update of 2000 S/s.

# send the signal to the DAC
for i in range(yy.shape[0]):
    dac.write(yy[i])

At this point, my thought process for using PYNQ is to:

  • build an external signal generator chip from scratch and just control communication to it with PYNQ
  • Find a high-speed DAC and write a custom FPGA code to run it (I have never done this, but am willing to try it if I can).

Any thoughts or advice would be appreciated!