Using the XADC in the Zynq
Adam Taylor
Founder of FPGA Consultancy - Adiuvo Engineering. Embedded Systems Consultant, FPGA Expert, Prolific FPGA Writer
Most embedded systems contain at least one simple ADC which is used to monitor the health of the system itself, providing some basic telemetry. Normally this telemetry will monitor areas like
- Power Rails - Are the regulated voltages in specification
- Current - Are the power rails in the unit taking the correct current
- Junction Temperature - Are the junction temperatures of the devices within the de rated range. Normally it is just the processing element - FPGA, ASIC, DSP or Processor which we monitor.
- Board Temperature - The operating temperature of the system
Knowing these parameters can help with both prognostics and failure analysis i.e. we learn how the unit ages and can determine when one is about to fail or investigation after the fact if one has failed.
Of course this is very helpful in determining the root cause of the failure and when used for prognostics allows us to plan in replacements and minimise downtime.
Off course implementing the ADC and sampling requires board space for the ADC and associated multiplexors and components.
The Seven Series devices (Kintex, Artix, Virtex and Zynq) from Xilinx have a inbuilt 1 MSPS 12 bit ADC called the XADC. This is an interesting macro as it can multiplex internally between 16 inputs and read the device junction temperature and supply rails. If necessary it can even drive an external multiplexor if your design is pin limited and will issue alarms when set parameters are exceeded.
For over 2 years I have been writing a tutorial on how to use the Zynq, some of the most popular blogs have been on how to use this XADC macro. I thought it might be a great idea to pull the links on the XADC together here for you all to have a look at and use as you see fit so here are the links.
Driving the XADC using SW and the PS interface
XADC and different interfaces on the Zynq
XADC, Interrupts and Real Signals
Of course you do not have to limit the XADC to just telemetry, it can be used for more complicated applications after all it is an ADC, which is what the MicroZed Chronicles will be looking at next.
Co-Owner/Founder at PATVAZ
6 年Thanks a million for your tutorials. I reside in Iran and have never seen you, but I'm really indebted to you for what I've learnt from you.?
Associate Professor at The National Institute of Engineering, Mysuru
7 年How do you access the 16 auxiliary channels of XADC ? Can I use the existing I/O pins as auxiliary inputs ? I couldn't find any options to change the sites of auxiliary channels. Should I use an FMC breakout board to access all analog channels of XADC ? or can I use existing pmod I/Os to read differential analog inputs ? This kills my brain for last two weeks.
Electrical Engineer with a multi-disciplinary background.
8 年Thanks for the tutorial. Looking at the ZynQ7000 data sheet, the XADC section states a dual 12 bit, 1MSPS ADC with 250KHz auxiliary channel 'Full Resolution Bandwidth'. Does that mean that the ADC inputs are band limited to well below nyquist limit? What is the actual 'Full Power Bandwidth' of the dedicated analog input pair? Has anyone figured out if the XADC Can be used for bandpass sampling and if so, what is the limit?
Senior SoC Verification Engineer at Nokia
8 年It would be marvelous if you had this kind of explanation about DDS and external DAC to generate desired signals with Zynq.
Digital Transformation | Opportunity | Strategy | Partnership Engagement | Product Management | Project Management
8 年it is good to see how all these cool features of Zynq are being utilised