Xilinx FPGA的XADC测试笔记

作者:小青菜哥哥
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMTcyNDQyMQ==&mid=2247484662&idx=1&s...
声明:本文由原创博主授权转发,如需转载请联系博主

Xilinx 7系列FPGA内置了一个模数转换模块,称为XADC。XADC内部集成了两个最高1MHz采样率,1V<sub>pp</sub>的ADC模块,可以采集FPGA外部输入的模拟信号并转为数字信号。如下视频为最终的上位机显示的测试结果(视频见原文)

XADC不需要外接任何输入信号,就可以测量FPGA内部的温度,VCCINT,VCCBRAM,VCCAUX电压。另外,还可以测量多达17路的外部差分输入模拟信号的幅度,包括专用差分信号输入信号VP/N以及VAUXP/N[15:0]。

所有的待测量信号均通过XADC内部的两个12bit-1MSPS的ADC模块(ADC_A和ADC_B)测量,并将转换结果存入状态寄存器(StatusRegisters),用户通过DRP接口可以在FPGA内部读取这些数据,也可以在vivado软件的调试界面中用JTAG获得这些数据。

另外ADC工作的配置参数由用户提供,用户将参数可以实时在线写入控制寄存器(ControlRegisters),从而实时控制ADC的工作状态,用户也可以在初始化配置XADC后将参数固定,不用实时配置,用户只需等待XADC初始化完成后,不断读取状态寄存器中的值即可。如下图1所示为XADC的功能模块图:

图1:XADC的功能模块图

1,硬件工作环境

FPGA:kintex-7。供电:12V/4A 直流电源。该板卡最多外接32通道2Vpp模拟信号以及20路外部触发信号。数据传输接口方式有千兆以太网接口、高速光纤接口以及低速USB串口。

图2:硬件PCB

2,逻辑开发环境

Vivado2017.4。

3,测试工程的逻辑框图介绍

如下图3所示为逻辑实现框图,由于硬件电路在设计时并没有考虑外部输入模拟电压的应用需求,因此本次测试针对的是FPGA内部的工作温度,内核电压VCCINT,VCCBRAM以及辅助电压VCCAUX这4个工作参数。

图3:逻辑测试框图

4,实现方法介绍

实现上就是对Dynamic Reconfiguration Port (DRP) 的接口进行读写操作,XADC的源语参数确定后,只需要对DRP端口进行读操作,就ok了。时序上并不复杂,其ug480官方文档给出的时序图如下图4所示,我们按照该时序控制信号就行了。

图4:DRP读写时序

如果我们连时序图都懒得看,也有其它办法。其官方给出了片上温度测量,VCCINT,VCCBRAM,VCCAUX以及4路VAUXP/N[3:0]的代码例程,ug480的第83页开始给出了应用例程和仿真测试时序,直接copy到我们的工程就可以了,DRP控制时序上非常简单,小青菜哥哥在这里就不一一介绍DRP端口信号的时序了,可以直接仿真看更清晰。

5,板级测试

我们copy了官方提供的代码并修改配置参数为只测试片上温度测量,VCCINT,VCCBRAM,VCCAUX这4路信号,并利用图3的框图建立工程,在线测试了温度和电压的功能。如图5所示为ILA在线监测的片上温度测量,VCCINT,VCCBRAM,VCCAUX这4路信号的时序图:其中EOC为每次ADC完成1路信号转换指示信号,EOS为每4路信号完成转换的指示信号。每个EOC指示信号的时间间隔为100个DRP时钟周期,因此可以推断出ADC的采样率为1MSPS。每次EOS拉高后,就表示用户可以从状态寄存器中读取4路信号的值了。

图5:4路信号整体测试时序图

如图6所示为读取这4路信号的更细节时序图,可以看到连续连续写入4个Daddr地址后,随后会出现drdy信号4次拉高,每次拉高时我们取出数据即可,共取4次,从而完成片上温度测量,VCCINT,VCCBRAM,VCCAUX这4路信号的取数。

图6:4路信号测试细节时序图

从图7可以更明显的观察到,每次drdy拉高时,对应读取了1路信号。拉高4次,完成4路信号的一次读取过程,之后再监测EOS信号,只要它再次拉高,就又在状态寄存器中读取这4路信号的值,如此循环往复。

图7:drdy信号拉高时取数

将取出来的4路数据通过网络接口发送到计算机,通过编写上位机软件就可以实时显示FPGA的温度和和电压了,如图8所示:FPGA的工作温度在49°附近波动,VCCINT为~1V,VCCBRAM也为~1V,VCCAUX为~1.8V,和实际FPGA的供电电压一致。

图8:上位机温度、电压监视界面

最新文章

最新文章