I would like to operate the AD9915 as if it had a 48bit Tuning Word. I am not trying to produce exact frequencies per the Programmable Modulus, but trying to emulate the AD9912 (but with better spurs and higher clock rate). Do you have an app note?

I would like to operate the AD9915 as if it had a 48bit Tuning Word. I am not trying to produce exact frequencies per the Programmable Modulus, but trying to emulate the AD9912 (but with better spurs and higher clock rate). Do you have an app note?

I am sorry, we do not have an app note, but here goes. This excerpt from the data sheet gives you the key: "

This equation implies a modulus of B × 2^32 (rather than 2^32, in the case of a standard DDS)." So if you set B equal to 2^16, the Modulus is 2^48, and A comprises the 16 LSBs of your 48 bit tuning word. If you were to set B to 2^32-1, you get a 63 bit DDS.

As an addendum to Jeff's reply, the value of B cannot be any greater than 2^32 - 1, so it is not quite possible for the AD9915 to emulate a 64-bit DDS in programmable modulus mode.

Although setting B=2^16 sets the modulus (denominator) to 2^48, be aware that the allowable numerator values do not cover all values from 1 to 2^48 - 1. That is, there are gaps in the sequence.

Emulating a 48bit DDS....I did not understand you comment about "gaps in the sequence". Let's talk about an example. Say I want to produce 100MHz from a 2500MHz clock. On the AD9912 this would give a FTW= 100e6 * 2^48 / 2.5e9.

On the AD9915, you say that B would take the value of 2^16. What is the calculation for A that gives 100MHz?

The AD9915 has a 32-bit accumulator. To make a long story short, there is nothing you can do to make its spurious performance emulate a DDS with a 48-bit accumulator, especially in the context of phase truncation spurs. Programmable modulus does not improve on spurious performance, but rather gives you access to output frequencies that are otherwise unavailable via a conventional DDS.

To Jeff's point, using B=2^16 will emulate a 48-bit DDS in terms of output frequency, but with gaps (as mentioned earlier). The reason is the tuning word formula (for B=2^16) is:

Fout/Fs = (FTW*(2^16) + A)/2^48

If you let A=0, this reduces to FTW/2^32, which is not much help! However, if you let A=1:

Fout/Fs = (FTW*(2^16) + 1)/2^48

As you can see, the "gaps" come into play because FTW is multiplied by 2^16. For Fout=100MHz and Fs=2500MHz we have:

1/25 = (FTW*(2^16) + 1)/2^48, which yields FTW=171,798,692 (nearest integer)

The resulting value of Fout is: 100.00000009314113924574485281482 MHz

Let's compare this to a 48-bit DDS: The FTW in that case is: 11,258,999,068,426 (nearest integer)

The resulting value of Fout is: 99.999999999997868371792719699442 MHz

As you can see, the two differ slightly, with the programmable modulus version slightly above 100MHz and the 48-bit DDS version slightly below 100MHz. Both are extremely close to the desired 100MHz.

However, the whole point of programmable modulus is that you can get 100MHz EXACTLY, by letting A=21, B=25 and FTW=171,798,691.

I am sorry, we do not have an app note, but here goes. This excerpt from the data sheet gives you the key: "

This equation implies a modulus of B × 2^32 (rather than 2^32, in the case of a standard DDS)." So if you set B equal to 2^16, the Modulus is 2^48, and A comprises the 16 LSBs of your 48 bit tuning word. If you were to set B to 2^32-1, you get a 63 bit DDS.