The Designer's Guide Community Forum
https://designers-guide.org/forum/YaBB.pl
Design >> Mixed-Signal Design >> DNL of 9 bit ADC in Spectre
https://designers-guide.org/forum/YaBB.pl?num=1300385213

Message started by Mischivis on Mar 17th, 2011, 11:06am

Title: DNL of 9 bit ADC in Spectre
Post by Mischivis on Mar 17th, 2011, 11:06am

I have a question concerning how to get the DNL plot of my 9 bit ADC.
I have a ramp input that goes to fullscale.  The output is a plot of all the codes from 0 to 511 with time on the X-axis.  Each step of the output is 1 LSB (1V).  My question is how do you get the DNL from this plot?  Every reference material I see concerning the DNL of an ADC has the input voltage on the X-axis.  So what I need, I guess, is each step of the output as a function of the input voltage instead of time.
Because if I take the DNL of the plot of the output versus time, it is 0 because each step is exactly 1 LSB!

Title: Re: DNL of 9 bit ADC in Spectre
Post by sheldon on Mar 17th, 2011, 4:37pm

Mischivis,

  Use an ideal ADC to generate the ideal digital codes for the ramp,
plot the two results together, then set the x-axis to the ideal digital
codes.

                                                                Best Regards,

                                                                    Sheldon

Title: Re: DNL of 9 bit ADC in Spectre
Post by sheldon on Mar 17th, 2011, 5:30pm

Mischivis,

 Sorry, the nuclear power plants melting down have got me a little
distracted. Some corrections:

1)   Connect an ideal ADC and DAC in series
     I usually just edit the ahdlLib 8 bit ideal components to create
     whatever ideal components I need.

2)  Set the DAC lsb =1V, so the full scale range in your case will
    be 511
    This setup will generate an analog waveform, a staircase, with
    values proportional to the digital codes.

Another option would to use a slow ramp, 0s --> 511s, then you could
directly plot the dnl vs. time.

                                                                    Best Regards,

                                                                        Sheldon

Title: Re: DNL of 9 bit ADC in Spectre
Post by Mischivis on Mar 17th, 2011, 7:35pm

I am doing exactly as you describe.  I have a ramp going into my ADC.  The output of the ADC feeds an ideal DAC which generates a staircase waveform going from 0 to 511 in time.  Each step is exactly 1.  Every reference I see showing the staircase of an ADC shows
the code versus the analog input voltage.  And then you can find
the DNL by measuring the different widths of analog voltage.  However, my waveform shows the code versus time!  How do I map
back to analog input voltage so I can take the DNL/INL?

Title: Re: DNL of 9 bit ADC in Spectre
Post by RobG on Mar 21st, 2011, 4:28pm

I'm not sure, but I think the answer you are looking for is to measure the amount time each code is present. Ideally (if you have 512 levels) each level should be present for 1/512 of the total time. If the ADC has some DNL error the amount of time each code is present will be proportional to the DNL+1.

I think I had a clever way of doing this with a ramp input using the cadence calculator, but I can't remember it! Perhaps I just sampled the digital output and exported it to Matlab. From there you do a histogram of the codes and compare it to the ideal histogram.

Title: Re: DNL of 9 bit ADC in Spectre
Post by RobG on Mar 21st, 2011, 4:49pm


Mischivis wrote on Mar 17th, 2011, 7:35pm:
I am doing exactly as you describe.  I have a ramp going into my ADC.  The output of the ADC feeds an ideal DAC which generates a staircase waveform going from 0 to 511 in time.  Each step is exactly 1.  Every reference I see showing the staircase of an ADC shows
the code versus the analog input voltage.  And then you can find
the DNL by measuring the different widths of analog voltage.  However, my waveform shows the code versus time!  How do I map
back to analog input voltage so I can take the DNL/INL?


Oh, if you just want code vs input voltage (using the cadence calculator -- not matlab) you should re-ask the question with a better title on the simulator board http://www.designers-guide.org/Forum/YaBB.pl?board=circuit. There may be a way to plot one output vs. another, but I have never been able to find it. Let me know if you find a way.

I'd just print the Digout vs time and whiteout the time values and pencil in the input voltage values ;).

I see the calculator in IC6 has a "DNL" function but I don't know how it works. I can't even figure out how to export the data with this new calculator.


Title: Re: DNL of 9 bit ADC in Spectre
Post by sheldon on Mar 22nd, 2011, 5:19am

Rob,

 The ability to change the X-axis has been in Virtuoso for a long time,
look at the x-axis properties and change the variables. As for sending
data to the calculator in IC61, hover the mouse over the data you
want to plot and click the right mouse button [RMB]. While holding the
RMB down select calculator from the menu.

                                                              Best Regards,

                                                                Sheldon

Title: Re: DNL of 9 bit ADC in Spectre
Post by sheldon on Mar 22nd, 2011, 5:24am

Mischivis,

You specify 5141 or 61

As I remember in 5141 (it has been a while)
1) Open the X-axis options menu from the pull-down menus
2) Change the x-axis variable to the DAC output

In 61
1) Select the x-axis
2) Edit the x-axis properties, RMB --> properties
3) Change the x-axis variable from time to the output of the DAC

                                                                 Best Regards,

                                                                    Sheldon

Title: Re: DNL of 9 bit ADC in Spectre
Post by RobG on Mar 22nd, 2011, 6:22am


sheldon wrote on Mar 22nd, 2011, 5:19am:
Rob,

 The ability to change the X-axis has been in Virtuoso for a long time,
look at the x-axis properties and change the variables.

Thanks, but did you have to point out that "long time" part  ;D I actually think I figured it out and then forgot it now that you mention it.


Quote:
As for sending
data to the calculator in IC61, hover the mouse over the data you
want to plot and click the right mouse button [RMB]. While holding the
RMB down select calculator from the menu.

Not sure what you are describing, but I want to send the data to an external file and process it with Matlab. I think it was the "printvs" command that used to do it.  I'm sure it is something simple... I just haven't had enough time to search it out. Maybe the OP needs to know too.

Wanna give a quick primer on what the dnl function does?

Rob


Title: Re: DNL of 9 bit ADC in Spectre
Post by sheldon on Mar 22nd, 2011, 9:35am

Rob,

  Actually one of the AEs in our office wrote a manual that covers all
the calculator function and he has been waiting for me to review it before publishing it. There is a nice dnl example in the manual. Guess
I need to get busy.

                                                            Best Regards,

                                                              Sheldon

Title: Re: DNL of 9 bit ADC in Spectre
Post by loose-electron on Mar 24th, 2011, 6:43am

you can also pull the time domain data over into Matlab or even Excel and deal with it.

The Designer's Guide Community Forum » Powered by YaBB 2.2.2!
YaBB © 2000-2008. All Rights Reserved.