XADC采集外部信号实时显示在RGB屏幕中

概述

  XADC在Xilinx7系列器件上可用。The XADC is available in all Artix-7, Kintex-7, Virte-7, and Zynq-7000 SoC devices.
  
XADC框架
  XADC需要例化使用,但是如果使用JTAG访问的话,就不需要例化,直接在Vivado软件中就可以直接访问XADC的各项数据,包括芯片温度、电压等数据。The XADC also includes several on-chip sensors that support measurement of the on-chip power supply voltages and die temperature. The ADC conversion data is stored in dedicated registers called status registers. These registers are accessible through the FPGA interconnect using a 16-bit synchronous read and write port called the dynamic reconfiguration port (DRP).也可以通过DRP进行访问XADC的数据寄存器。
  XADC有一个专用的模拟输入对(Vp_Vn),在外部使用两个引脚。此外还有16个辅助模拟输入可用,这些辅助模拟输入在平时是作为数字I/O口使用的。(相当于单片机的管脚复用)
  image.png
此外,在Vivado中,调用XADC是需要自行进行管脚位置约束的,使用ISE则不需要。(但是在Vivado管脚约束的GUI界面处,Vp_Vn引脚是会有提示对应哪个I/O口的)。
  image.png
  这里同样指出,使用JTAG访问XADC时,是不需要例化的。
XADC Ports(XADC引脚图)

DI[15:0] DRP输入数据总线
DO[15:0] DRP输出数据总线
DADDR[6:0] DRP地址总线
DEN DRP使能信号
DWE DRP写使能
DCLK DRP时钟输入
DRDY DRP数据就绪信号
RESET XADC控制逻辑的异步复位信号。
CONVST 转换起始输入。
CONVSTCLK 转换开始时钟输入。
VP , VN 专用模拟输入引脚,提供差分模拟输入。
VAUXP[15:0], VAUXN[15:0] 十六个辅助模拟输入对
ALM[0] 温度传感器报警输出
ALM[1] VCCINT传感器报警输出
ALM[2] VCCAUX传感器报警输出。
ALM[3] VCCBRAM传感器报警输出
ALM[4] VCCPINT传感器报警输出
ALM[5] 传感器报警输出
ALM[6] VCCO_DDR传感器报警输出
ALM[7] 总线ALM的逻辑OR[6:0]。可用于标记任何警报的发生。
OT 超温报警输出
MUXADDR[4:0] 这些输出用于外部多路复用器模式。它们指示要转换的序列中的下一个信道的地址。
CHANNEL[4:0] 通道选择输出。ADC转换结束输出数据时,输出的为哪个通道(管脚)的数据
EOC 转换结束信号。当测量值写入状态寄存器时,该信号在ADC转换结束时转变为高电平有效
EOS 序列结束信号。当通道序列中最后一个通道的测量数据被写入状态寄存器时,该信号转变为有效高电平
BUSY ADC忙音。该信号在ADC转换期间转换为高电平。在ADC或传感器校准期间,该信号还会在较长时间内转换为高电平
JTAGLOCKED 表示JTAG接口发出了DRP端口锁定请求。该信号还用于指示DRP已准备好接入(当低电平时)。
JTAGMODIFIED 用于指示发生了对DRP的JTAG写入
JTAGBUSY 用于指示JTAG DRP事务正在进行中

XADC配置寄存器地址
XADC的两种模式
Unipolar Mode(单极模式)
image.png
此时VP应该接正,VN接地,测量范围为0~1V,分辨率为244uV,输入0V时,输出000h,输入1V时,输出FFFh。
Bipolar Mode(双极模式)
image.png
此时VP00.5V,VN测量范围为-0.50V。
image.png
image.png
image.png
上述为只读的状态寄存器及其地址,ADC读取到的各个通道的数据都存储在相应地址中,值得注意的是,前边的 CHANNEL[4:0]通道选择输出。ADC转换结束输出数据时,输出的为哪个通道(管脚)的数据 与这里的地址是一样的,也就是说可以直接将CHANNEL[4:0]与DRP的DADDR[6:0]相连接,这样读取的数据与ADC测量的数据时对应的。
image.png
image.png简单来说就是,当EOC/EOS高电平之后,表示ADC数据转换完成,并且已经存储的相应的寄存器上,同时的CHANNEL也会输出ADC转换的相应的通道地址。这时就可以通过DRP来访问相关寄存器。使能DRP(DEN),将ADC寄存器地址发送DADDR地址总线上,DRP开始读取相应寄存器中的数据,当DRDY高电平时,表示寄存器地址读取完成,DO输出的为有效数据。

相关的代码就不放了,因为主要参考的是FPGA使用XADC测量外部模拟输入电压这篇文章的代码。大家有兴趣的可以去看看,他写的比我详细的多。

JTAG访问XADC

image.png
可以在此处,点开XADC就可以在不用例化的情况下访问相关数据。

工程源码

我把XADC读取外部数据,并且显示在RGB屏幕的源码已经上传在百度网盘中,大家有需要的自取即可。
链接: https://pan.baidu.com/s/1IH_9_BDwL3NJpeCsp5KrSg?pwd=2w5p 提取码: 2w5p 复制这段内容后打开百度网盘手机App,操作更方便哦
基于正点原子达芬奇开发板,其他的开发板需要更改相关的引脚约束。

正点原子代码问题

正点原子中的部分代码直接使用了除法,而在FPGA中,使用除法则会造成大量逻辑资源的浪费,所以建议大家尽量不要在FPGA中直接使用除法。
使用除法,无RGB显示模块时,消耗的资源
不使用除法,且有RGB模块时的资源
可以看到,使用除法会消耗大量的逻辑资源,并且可能造成时序问题。

参考文献

  [1] 正点原子. 达芬奇之FPGA开发指南
  [2] 野火. FPGA+Verilog开发实战指南——基于Xilinx+Spartan6
  [3] 子疯叶.FPGA使用XADC测量外部模拟输入电压CSDN(https://blog.csdn.net/qq_56016739/article/details/131905117)

posted @ 2024-03-14 10:08  carpe--diem  阅读(98)  评论(0编辑  收藏  举报