I have a DAC implemented in verilog ams.
I am giving a 405Mhz digital hex code based digital input.
But when taking the spectrum of that it doesn't look like a sinewave means I don't see a single tone in the output. I am using Spectre as the simulator with AMS option selected and ++APS turned on in conservative mode.
The code looks to be fine as it is giving expected single tone output when using other utilities.
can anyone please suggest where I might be screwing up ? Should I be using XPS instead of APS or how can I debug the issue.
Are you making sure that the FFT is sampling at the points at which the DAC output has settled? I don't know what version you're using of the IC tools, but in versions before IC6.1.7 you were limited to a power of two sample points in the dft function - if you specified a different value it would round to a power of two (I forget whether it rounded up, down, or to the nearest). From IC617 onwards, it will honour a non-power-of-two number of samples.
Sometimes you may see advice to use strobe period when using the dft function, but assuming that the DAC output is settled for each DAC sample, and you're sampling at those points, this is unnecessary because there's no time interpolation that would occur.
If that's not it, it would be best if you could provide your code, test bench, and stimulus - not too bad if it's entirely behavioural.
Thanks for the reply Andrew ,
the version is IC6.1.7 , I am not sure if moving to IC6.1.8 will help ??
I switched to XPS MS mode with ++APS turned on , with that the output after FFT is like the following :
I am still checking on the code part.
I wouldn't expect XPS to be necessary or to help with performance (it wouldn't help with accuracy). The main benefit of XPS is when you have a large chunk of digital transistors.
I don't think moving to IC6.1.8 is going to make a difference here. Something is probably either wrong with the circuit, or your measurement setup. It's really hard to know what without being able to see more information.
I absolutely agree with Andrew. I highly suspect your simulation setup or your use of the dft() function is likely the source of your confusion. Please include your simulation set-up details, your time domain result, and your post-processing expression using the dft() function if you need any additional thoughts on your issue.
thanks for the reply Andrew,
HERE is the snapshot of the equation being used.
I am seeing how to share the other details like testbench etc.