It's incredibly simple, actually.
You have a counter (phase accumulator) that adds a fixed number (frequency setting word) to its own value on every clock cycle. This counter has a certain number of bits, therefore an upper limit. When the sum exceeds this limit, it simply overflows.
Example:
Freq. setting word = 25
Number of bits = 7 (can hold values from 0 to 127)
0, 25, 50, 75, 100, 125, 23, 48, 73, 98, 123, 21,...
^Overflow ^Overflow
If you plotted these numbers onto a graph, it would look like a sawtooth wave. The inclination of the slope will depend on the FSW you select. The higher the number, the faster the slope will climb.
You then have a sine loop-up table. It describes a single sine wave (0-360°) with 2^N points. Here is an example for a 4-bit (16 values) sine look-up:
The upper bits of your phase accumulator are fed into the look-up table. You are feeding in a sawtooth, so that means it is repetitively scanning through the values of a sine wave. If your FSW is low, it is going to scan through slowly, if it is very high, it is only going to throw out a couple of points of every sine. The number of overflows per second equal your output sine frequency.
The value you get out of this LUT is then fed into a DAC that translates these numbers into analog voltages.
The problem here is that you have sharp transitions between these analog voltage steps, which means you have a lot of higher harmonic content, which you do not want. This is solved with a low-pass filter, that cleans out the higher harmonics, leaving you with a nice smooth sine wave.
I have way too much time on my hands, so I have made a
simple excel demonstration. Try tweaking the FSW and observe the output waveform.