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:
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:
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:
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. |