Xilinx的7系列FPGA和Zynq器件在片上集成了模数转换器和相关的片上传感器(内置温度传感器和功耗传感器),可在系统设计中免去外置的ADC器件,有力地提高了系统的集成度。在最近做的一个项目中,正好用到了这个XADC,既然要用到它,对它的一些基本了解还是要有的,下面给出了一些介绍XDAC的链接和官网的IP手册链接,由于本人比较赖,哈哈,网上有的东西在这里我就不多说了,大家自己点击链接去看看。
https://wenku.baidu.com/view/b0208e654431b90d6c85c7ab.html
http://59.80.44.100/china.xilinx.com/support/documentation/user_guides/ug480_7Series_XADC.pdf
http://59.80.44.100/china.xilinx.com/support/documentation/ip_documentation/xadc_wiz/v3_3/pg091-xadc-wiz.pdf
我着重讲如何使用XDAC IP核,看完上面的链接后对XADC也有了一定的了解,首先我们打开IP核,我这里需要讲的例子是,使用DRP接口采集6路模拟通道电压VP0,VP1,VP5,VP6,VP8,VP9和温度。
IP核的基本配置如下图,每一个选项的意思在手册中都有明确的讲到,参考pg091第三章,大家自己去对照着看看:
注意:Analog sim File Option中的Waveform Type要选择sin,不然仿真顶层文件会跟我的不一致!!!!
IP的GUI界面相信大家都会配置,可是问题就是IP核生成了,我们如何为使用呢?还是老方法,IP核生成后,我们先去生成一个Example:
我们看到生成的IP核Example顶层接口是这样的,并没有看出来如何对IP的接口使用,没关系,别急
我们打开xadc_wiz_0_tb仿真顶层文件,
代码如下: (注意:在GUI界面仿真应该选择sin波形,否则仿真顶层代码不是这样)
从这个顶层代码基本就能知道接口怎么用了,我们把代码整合一下,去除不能综合的代码,整理后如下:
有tb文件整理过后的代码基本就能进行通道电压的数据采集了,其它通道以此类推。
下面是我实际上板测试用debug抓到的数据,我用到的是4、5、6、7、13、14通道
另外还需要注意的是,我们用户端得到得是ADC的code值,我们还需要将它换算成电压值。
在ug480中第23页有提到温度和电源电压计算公式:
电源电压最大是3v的输入,所以:
实际电源电压值=(code/4096)*3
温度值=(code*503.975)/4096-273.15
而另外16个通道的电压值,最大只能输入1V电压,所以:
16个通道的每个电压值=对应的code/4096
除以4096是因为数据截取的是高12bit的数据,12bit最大到4095
总的来说XADC还是比较容易实现的,另外需要注意一点的是在ddr的IP核中mig_7series_0中有调用xdma选项,一般情况下不能同时使用多个xdma,否则编译会报错,提示例化了多个xdma!!!!!如果项目中有单独使用xdma且mig_7series_0也有使用的时候,在mig_7series_0中应该disable xdma,此时应该将单独使用xdma的IP中采集的温度数据送给mig_7series_0里面去。
**声明:所有文章属于个人在工作中所记下和搜集的笔记,不得转载**