background:
I was recently looking into designing a high efficiency boost converter, which led to the thought of doing some network analyzing stuff for the inductor, how to locate the resonant frequency, measure ESR over some frequency range, etc. I have a hacked 100 MHz rigol DS1054z scope, but no function generator. For low frequency applications, I used an old phone's DAC. This is fine but not for stuff higher than 15KHz, as one can imagine. (Also the output voltage and output impedance is always an issue, I have to toss together some amp most of the time.)
I don't like the price of most decent function generators, and I want to learn a bit about high speed circuit design as well. So I got the idea to try to make my own! My thoughts are to use a high speed microcontroller such as a ESP32 or (if the learning curve isn't too steep) potentially a small/cheap FPGA. That coupled with a <$10 DAC which matches the maximum speed one of these boards can realistically generate.
------------
what I would like to know:
I don't know much about the high speed DACs. A quick mouser search seems to indicate that the really high speed one's (50 mS/s and up) use parallel interfaces. I assume that I could allocate an entire output register to the DAC on one of these chips. If I plan to use one of the cores in the ESP32 purely for updating the port pins from an array of values in memory (representing common signals such as sine, trig, sawtooth, square, etc) That's assuming I can achieve something like 10 MHz. I would need a DAC capable of 20mS/s, just for sine waves. Commercial function generators seem to use sampling rates about 5 to 10 times higher than the maximum output frequencies. I found this DAC
http://www.mouser.com/ds/2/609/AD9748-878113.pdf for a decent price. That differential clock input scares me though.

I would assume that I can write to an port register in a single clock cycle on the ESP32, but I also need to read memory which is an additional clock cycle. Not sure if there is a bit of hardware that allows this read-write-read-write... operations to be pipelined so I can write a value while simultaneously reading the next value. So I guess for prototyping I can use my teensy 3.6, which can be OC'ed to 240MHz. I would imagine 50MS/s is achievable.Any "gotcha's" with the DSP side of things??
Then comes the analog output design. I would need to scale and shift the output, and I guess also stick a 50 ohm resistor in series to get the common 50 ohm termination. (that assumes my amplifier output impedance is 50 ohms as well...) I have never designed a discrete transistor amplifier, I will probably stick close to using op amps with good specs. I have some really high speed 90MHz GBP ones from LT, too!
When it comes to PCB layout, the high speed digital stuff (esp the clock!) would probably need to be carefully laid out. With a parallel interface I would think that trace length matching and good low-impedance grounding would be very important. Any tips / suggestions? If I do this, then the PCB tool I would use would likely be KiCad. (or maybe ultiboard since I get that free as a student)
I guess I would also need to use an external clock as well. Not sure how stable the quartz based one is on those prototyping boards (like the ESP32 or teensy). I'd imagine to cut costs they are not very stable or usable for a
good function generator.