关键词:XADC,PYNQ Z2, XADC IP核, PL, 单通道
说明 : 不涉及xadc开发板,PCB设计,可以跳过前面看后面,不正确的地方可以交流沟通,待完善
一. 对于xadc基本了解
1. 基本属性
参考手册 : ug480
Fig : XADC BLOCK DIAGRAM:
从XADC block diagram中可以看出7系含有两个内部ad, ADCA,ADCB
同时可以支持16组外部差分通道,但是VP_0,VN_0为特殊的差分通道,其余的则是可以支持单端或者差分模式
两个ADC均为12bit,1MSPS, 实际数据有16bit, 由于LSB 4 bit由于精度太高,导致波动较大,因此可以取MSB12 bit作为需要的数据
ADCA不仅可以采集外部通道, 同时也可以采集板载内部通道如温度,各种内部电压,temperature sensor and supply sensor
ADCB只可以采集外部通道,同时在使用过程中可以只使用ADCA,而不使用ADCB,可以将其配置为掉电模式,从而节省功耗开销
在使用xadc外部通道的时候只需要将对应的差分引脚引出,设置为input, io std设置为bank电压,通常为LVCOM33
手册上已经说明了VREF为1.25V,实际的话....可以测一测
虽然外部通道为在xadc被设置为差分通道,但是可以使用为单端通道,具体可以根据自己开发板查看, 在ug480中对此有说明
Fig2: 差分与单端
2. XADC数据读取方式
在使用xadc的时候可以使用DRP / JTAG模式, DRP需要我们进行编写,可以使用xadc ip核,另外可以使用JATG直接读取
DRP在下面展开,此处简短说明JTAG,当使用xilinx开发工具连接7系开发板会出现XADC,我们打开后点击+,仅可以直接读取emperature sensor以及supply sensor的值,无法读取外部通道数据,这被称为缺省模式
Fig : JATG读取数据示例
3. 采样时序
XADC采样模式有连续采样, 事件采样
连续采样就一直采集,配置的通道数循环采集
事件采样则是自己给采样的触发信号,给CONVST or CONVSTCLK信号,同时只能用于外部通道
4. XADC端口
Fig : XADC 端口
Fig : XADC寄存器
Fig: 外部通道地址
细节在手册46页
XADC内部的寄存器有众多,可以通过DRP接口进行读写,部分寄存器为只读模式
端口说明
DRP_DO : XADC的输出, 为采集到的值
DRP_DI : XADC的输入, 对于可写寄存器写入的值
DRP_DADDR : XADC的输入, 指向寄存器的地址,当我们只需要采集不需要配置的时候, 比如获取只读寄存器的值,我们只需要向DADDR传入寄存器地址, DRP_IO则不需要处理, 对于需要配置寄存情况,在传输地址的同时传输数据
DRP_DEN : DRP整个接口的开始信号
DRP_DWE : DRP接口写入使能
DRP_DCLK : 时钟信号
DRP_DRDY : DRP接口空闲信号,XADC有好几个内部完成信号,可以查看手册进行区别
control and clock :
包含复位信号,
CONVST用于采样模式为事件采样的开始信号
External Analogy inputs : 外部通道需要我们在模块里面设计成输入信号,连接外部引脚
Alarms : 使用IP核或者直接向寄存器进行配置,设置不同的报警信号,主要是针对于temperature sensor and supply sensor这几个信号进行阈值设计,超出阈值后,会将信号拉高,从而达到报警目的
Alarms是一个8bit的数据,每个bit所代表的报警通道不一样
Status : XADC的输出信号, 我们可以用来作为标志位,我挑选两个重要的描述
EOC : end of conversion,单个通道数据转换完成信号,转换完成拉高,表示采集ok了
End of conversion signal. This signal transitions to active-High at the end of an ADC conversion when the measurement is written to the status registers
EOS : 当我们多个通道连续采样模式的时候,轮巡完一遍的末尾会将次信号拉高
End of sequence. This signal transitions to active-High when the measurement data from the last channel in an automatic channel sequence is written to the status registers.
BUSY : 在很多protocol里面会出现,此信号表示器件处于非空闲状态,我们的读写最好不要在器件忙碌期间进行操作
4.操作时序
Fig : DRP Timing
我对这部分理解不是很深我选择连续采样,但是使用DRP timing, 但都是DRP接口
我使用的是DRP timing,在Busy信号空闲时间输入通道的时候向ADDR传入我要采集的寄存器地址,他给我返回数据
既然他设计了DRP端口,那就应该可以在空闲的时候进行寄存器地址传输,或者自己设计一些列表数据向里面传输,那是不是和多通道一样呢
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体