ZYNQ笔记(十):XADC (PS XDAC 接口)
版本:Vivado2020.2(Vitis)
任务:通过 PS XADC 接口读取XADC测量的芯片温度、供电电压,并通过串口打印出来
目录
一、介绍
二、硬件设计
三、软件设计
四、效果
一、介绍
XADC(Xilinx Analog-to-Digital Converter)是 ZYNQ SoC 内部集成的 12 位精度、1 MSPS(每秒百万采样) 的模数转换模块,可直接测量芯片内/外部的模拟信号,无需外接 ADC 芯片, 是 Zynq SoC 中 PL 端已有的硬核模块,可以被 PS端直接访问和控制。在 7 系的 FPGA 中,XADC 提供了 JTAG 和 DRP(dynamic reconfiguration port)接口,用于访问其 内部的状态和控制寄存器。在 ZYNQ-7000 SoC 器件中,XADC 增加了一个 PS-XADC 接口,用于 PS 中的软件控制 XADC 模块。
XADC核心功能
| 功能 | 说明 |
|---|---|
| 片上传感器监测 | 实时测量 ZYNQ 的 芯片温度、供电电压(如 VCCINT、VCCAUX) |
| 外部模拟信号采集 | 通过专用模拟输入引脚(VP/VN)连接外部传感器(如温度、光敏、压力传感器...) |
| 报警机制 | 可设置阈值触发中断(如温度超限报警) |
| 自动化校准 | 出厂预校准,支持动态校准偏移误差 |
如图所示为XADC模块的系统框图(右侧为内外部模拟输入):

PL-JTAG 接口可以用于开发工具(Vivado)控制 XADC 模块,包括读取芯片温度信息、供电电压。 而运行在 PS 中的软件则可以通过两种方式与 XADC 进行通信:
1、 通过 PS-XADC 接口,此时不需要对 PL 进行编程配置;
2、 通过 PS 到 PL 的 AXI Master 接口(M_AXI_GP),需在 PL 中调用 AXI XADC IP 核。
在使用 PS 控制 XADC 时,如果对应用的性能要求较高,则推荐第二种方式,它使用的是一个并行的 数据路径(DRP 接口)。而 PS-XADC 接口同 PL-JTAG 接口一样,使用的是串行的数据路径,相对较慢。 不过使用 PS-XADC 接口不占用 PL 的资源,也不需要对 PL 进行编程,只需要对 PL 部分供电即可。 需要注意的是,PL-JTAG 接口与 PS-XADC 接口不能同时使用,而 XADC 可以在 PL-JTAG 接口(或 PS-XADC 接口)与 DRP 接口之间进行仲裁。
注意:XDAC模拟输入电压峰峰值最大值需查看用户手册,我用到的zedboardf开发板最大1V,因为模拟电压信号不好产生,所以就跟着网上例程直接用 XADC 测芯片温度、供电电压。

二、硬件设计
(1)系统框图如图所示,系统搭建用到了UART(用于Debug)、DDR(存储器):
注意:XADC 是 Zynq SoC 中 PL 端已有的硬核模块,属于 Zynq 芯片的硬件资源,不占用可编程逻辑(LUT/FF)资源,可以被 PS端直接访问和控制,所以不需要对 PL 端进行配置。

(3)最后整体 bd 设计部分如图所示:设计检查、Generate Output Products、 Create HDL Wrapper、(管脚约束、Gnerate Bitstream、(无PL端设计这两部忽略))、Export Hardware(不用包含比特流文件)、启动Vitis
![]()
三、软件设计

可以打开官方提供的私有定时器的示例工程,这里可以选XADC轮询的示例工程,方便在设计时进行对照参考。同时对比中断,简单介绍一下轮询(简单来说就是主函数中主动调用函数读数据,所以相比于中断会持续cpu):
轮询 对比 中断
| 轮询(Polling) | 中断(Interrupt) | |
|---|---|---|
| 触发方式 | CPU 主动循环查询 | 外设主动通知 CPU |
| 实时性 | 延迟高(依赖查询频率) | 延迟低(立即响应) |
| CPU 占用 | 高(持续占用) | 低(事件触发才处理) |
| 适用场景 | 简单任务、低实时性需求 | 高实时性、多任务系统 |
#include "xil_printf.h"
#include "stdio.h"
#include "xparameters.h"
#include "xadcps.h"
#include "sleep.h"//===================用户自定义宏===================//
#define XADC_DEVICE_ID XPAR_XADCPS_0_DEVICE_ID //宏定义XADC器件ID//======================实例化======================//
XAdcPs XAdc; //定义XADC实例//=====================函数声明=====================//
static void XADC_Init(); //声明XADC初始化函数
static void XADC_Print(); //声明XADC读取并打印内部数据函数//======================主函数======================//
int main()
{xil_printf("PS XADC Test\r\n");//XADC初始化XADC_Init();while(1){//延时3秒,每3秒读一次数据sleep(3);//XADC读取并打印内部数据XADC_Print();}return 0;
}//==================XADC初始化函数==================//void XADC_Init()
{//定义器件ID(指针类型)XAdcPs_Config *ConfigPtr;//根据器件ID,查找器件配置信息ConfigPtr = XAdcPs_LookupConfig(XADC_DEVICE_ID);//初始化XADCXAdcPs_CfgInitialize(&XAdc, ConfigPtr,ConfigPtr->BaseAddress);//(可选)XADC自检int Status = XAdcPs_SelfTest(&XAdc);if (Status != XST_SUCCESS) { xil_printf("XADC Self Test Error! \r\n"); }//设置 XADC 操作模式为“默认安全模式”XAdcPs_SetSequencerMode(&XAdc, XADCPS_SEQ_MODE_SAFE);
}//============XADC读取并打印内部数据函数============//void XADC_Print()
{//定义原始数据u32 temp_rawdata; //温度原始数据u32 vcc_pint_rawdata; //PS 内核电压 原始数据u32 vcc_int_rawdata; //PL 内核电压 原始数据//定义转换后数据float temp; //温度float vcc_pint; //PS 内核电压float vcc_int; //PL 内核电压//获取原始温度传感器数据,并转换成温度信息 (调用自带的数据转换函数,参数为XADC实例指针、数据通道号)temp_rawdata = XAdcPs_GetAdcData(&XAdc, XADCPS_CH_TEMP);temp = XAdcPs_RawToTemperature(temp_rawdata);//获取 VCCPINT 传感器数据,并转换成电压信息vcc_pint_rawdata = XAdcPs_GetAdcData(&XAdc, XADCPS_CH_VCCPINT);vcc_pint = XAdcPs_RawToVoltage(vcc_pint_rawdata);//获取 VCCINT 传感器数据,并转换成电压信息vcc_int_rawdata = XAdcPs_GetAdcData(&XAdc, XADCPS_CH_VCCINT);vcc_int = XAdcPs_RawToVoltage(vcc_int_rawdata);//打印温度、电压信息(用printf函数来打印,头文件stdio.h)printf("Temp %f C \n", temp_rawdata, temp);printf("VccPint %f V \n", vcc_pint_rawdata, vcc_pint);printf("VccInt %f V \r\n", vcc_int_rawdata, vcc_int);
}
实际上可读取的电压数据还有很多,这里示意两个。
四、效果
上板串口打印Debug信息,此后每隔3s打印读取到的温度和电压数据

相关文章:
ZYNQ笔记(十):XADC (PS XDAC 接口)
版本:Vivado2020.2(Vitis) 任务:通过 PS XADC 接口读取XADC测量的芯片温度、供电电压,并通过串口打印出来 目录 一、介绍 二、硬件设计 三、软件设计 四、效果 一、介绍 XADC(Xilinx Analog-to-Digital…...
适配器模式在Java开发中的应用
适配器模式(Adapter Pattern)是设计模式中的一种结构型模式,它允许将一个类的接口转换成客户端所期望的另一个接口。通过这种方式,原本因接口不兼容而无法协同工作的类能够一起工作。适配器模式在Java开发中非常常见,尤…...
【Rust 精进之路之第15篇-枚举 Enum】定义、变体与数据关联:表达多种可能性
系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025年4月20日 引言:当值拥有“选项”——超越结构体的表达力 在上一篇【结构体 Struct】中,我们学习了如何使用结构体将多个相关的数据字段组合成一个有意义的整体。结构体非常适合表示那些…...
【C++】多态 - 从虚函数到动态绑定的核心原理
📌 个人主页: 孙同学_ 🔧 文章专栏:C 💡 关注我,分享经验,助你少走弯路 文章目录 1. 多态的概念2. 多态的定义及实现2.1 多态的构成条件2.1.1实现多态还有两个必须重要条件:2.1.2 虚…...
免费图片软件,可矫正倾斜、调整去底效果
软件介绍 有个超棒的软件要给大家介绍一下哦,它就是——ImgTool,能实现图片漂白去底的功能,而且重点是,它是完全免费使用的呢,功能超强大! 软件特点及使用便捷性 这软件是绿色版本的哟,就像一…...
Kubernetes(k8s)学习笔记(二)--k8s 集群安装
1、kubeadm kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署: 1.1 创建一个 Master 节点$ kubeadm init 1.2 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和…...
【论文阅读笔记】模型的相似性
文章目录 The Platonic Representation Hypothesis概述表征收敛的依据表征收敛的原因实验依据未来发展的局限性 Similarity of Neural Network Representations Revisited概述问题背景相似性度量s的性质可逆线性变换不变性正交变换不变性各向同性缩放不变性典型度量满足的性质 …...
扣子智能体1:创建Agent与写好提示词
文章目录 Agent是什么使用扣子创建智能体写好提示词生成故事发布Agent 最近学了很久多agent协同、编排工作流等与agent有关的内容,这里用一系列博客,把这些操作都一步一个脚印的记录下来。 这里我们以一个Agent为例:睡前灵异小故事 Agent是…...
Spring源码中关于抽象方法且是个空实现这样设计的思考
Spring源码抽象方法且空实现设计思想 在Spring源码中onRefresh()就是一个抽象方法且空实现,而refreshBeanFactory()方法就是一个抽象方法。 那么Spring源码中onRefresh方法定义了一个抽象方法且是个空实现,为什么这样设置,好处是什么。为…...
正则表达式(Regular Expressions)基本语法
无论前端还是后端开发过程中都不可避免的会使用到正则表达式,在对于程序的优化中,也起到了很重要的作用,可以减少非必要的接口和网络交互,减少服务器压力。 正则表达式(Regular Expressions,简称 regex 或 regexp)是一种强大的文本处理工具,用于匹配字符串中的特定模式…...
提示词设计:动态提示词 标准提示词
提示词设计:动态提示词 标准提示词 研究背景:随着人工智能与司法结合的推进以及裁判文书公开数量增多,司法摘要任务愈发重要。传统司法摘要方法生成质量有待提升,大语言模型虽有优势,但处理裁判文书时存在摘要结构信息缺失、与原文不一致等问题。研究方法 DPCM方法:分为大…...
【Bluedroid】蓝牙 HID 设备信息加载与注册机制及配置缓存系统源码解析
本篇解析Android蓝牙子系统加载配对HID设备的核心流程,通过btif_storage_load_bonded_hid_info实现从NVRAM读取设备属性、验证绑定状态、构造描述符并注册到BTA_HH模块。重点剖析基于ConfigCache的三层存储架构(全局配置/持久设备/临时设备)&…...
字节头条golang二面
docker和云服务的区别 首先明确Docker的核心功能是容器化,它通过容器技术将应用程序及其依赖项打包在一起,确保应用在不同环境中能够一致地运行。而云服务则是由第三方提供商通过互联网提供的计算资源,例如计算能力、存储、数据库等。云服务…...
数字化工厂五大核心系统(PLM 、ERP、WMS 、DCS、MOM)详解
该文档聚焦数字化工厂的五大核心系统,适合制造业企业管理者、信息化建设负责人、行业研究人员以及对数字化转型感兴趣的人士阅读。 文档先阐述数字化工厂的定义,广义上指企业运用数字技术实现产品全生命周期数字化,提升经营效益&…...
n8n 中文系列教程_02. 自动化平台深度解析:核心优势与场景适配指南
在低代码与AI技术深度融合的今天,n8n作为开源自动化平台正成为开发者提效的新利器。本文深度剖析其四大核心技术优势——极简部署、服务集成、AI工作流与混合开发模式,并基于真实场景测试数据,厘清其在C端高并发、多媒体处理等场景的边界。 一…...
MCP认证难题破解
一、MCP 认证体系现状与核心挑战 微软认证专家(MCP)体系在 2020 年后逐步向基于角色的认证转型,例如 Azure 管理员(AZ-104)、数据分析师(DP-100)等,传统 MCP 考试已被取代。当前备考的核心难题集中在以下方面: 1. 技术栈快速迭代 云原生技术占比提升:Azure 认证中,…...
【滑动窗口】串联所有单词的⼦串(hard)
串联所有单词的⼦串(hard) 题⽬描述:解法⼀(暴⼒解法):算法思路:C 算法代码:Java 算法代码: 题⽬链接:30. 串联所有单词的⼦串 题⽬描述: 给定⼀…...
SQL注入之information_schema表
1 information_schema表介绍: information_schema表是一个MySQL的系统数据库,他里面包含了所有数据库的表名 SQL注入中最常见利用的系统数据库,经常利用系统数据库配合union联合查询来获取数据库相关信息,因为系统数据库中所有信…...
高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos如何处理网络分区情况下的服务可用性问题? 我回答: 在讨论 Nacos 如何处理网络分区情况下的服务可用性问题时,我们需要深入理解 CAP 理论以及 Nacos 在这方面的设计选择。Nacos 允许用户根据具体的应用…...
Elasticsearch:使用 ES|QL 进行搜索和过滤
本教程展示了 ES|QL 语法的示例。请参考 Query DSL 版本,以获得等效的 Query DSL 语法示例。 这是一个使用 ES|QL 进行全文搜索和语义搜索基础知识的实践介绍。 有关 ES|QL 中所有搜索功能的概述,请参考《使用 ES|QL 进行搜索》。 在这个场景中&#x…...
R语言之.rdata文件保存及加载
在 R 中,.rdata 文件是通过 save() 函数创建的。 使用 save() 函数可以将一个或多个 R 对象保存到 .rdata 文件中。使用 load() 函数可以将 .rdata 文件中的对象恢复到当前工作环境中。 1.创建并保存对象到.rdata 假设有一个基于 iris 数据集训练的线性回归模型&a…...
二进制和docker两种方式部署Apache pulsar(standalone)
#作者:闫乾苓 文章目录 1、二进制安装部署Pulsar(standalone)1.1 安装配置JDK1.2 下载解压pulsar安装包1.3 启动独立模式的Pulsar 集群1.4 创建主题测试1.5 向主题写入消息测试1.6 从主题中读取消息测试 2.docker安装部署Pulsar(standalone)2.1 使用docker 启动Pul…...
MySQL表与表之间的左连接和内连接
前言: 在上个实习生做的模块之中,在列表接口,涉及到多个表的联表查询的时候总会出现多条不匹配数据的奇怪的bug,我在后期维护的时候发现了,原来是这位实习生对MySQL的左连接和内连接不能正确的区分而导致的这种的情况。 表设置 …...
RAG知识库中引入MCP
MCP(Memory, Context, Planning)是一种增强AI系统认知能力的框架。将MCP引入RAG知识库可以显著提升系统的性能和用户体验。下面我将详细介绍如何实现这一整合。 MCP框架概述 MCP框架包含三个核心组件: Memory(记忆):存储和管理历史交互和知识Context(上下文):理解当…...
TDengine 性能监控与调优实战指南(二)
四、TDengine 性能调优实战 4.1 硬件层面优化 硬件是 TDengine 运行的基础,其性能直接影响着 TDengine 的整体表现。在硬件层面进行优化,就如同为高楼大厦打下坚实的地基,能够为 TDengine 的高效运行提供有力支持。 CPU:CPU 作…...
低代码开发平台:企业数字化转型的加速器
一、引言 在数字化时代,企业的转型需求日益迫切。为了在激烈的市场竞争中保持领先地位,企业需要快速响应市场变化、优化业务流程、提升运营效率。然而,传统的软件开发模式往往面临开发周期长、成本高、灵活性差等问题,难以满足企业…...
【AI图像创作变现】02工具推荐与差异化对比
引言 市面上的AI绘图工具层出不穷,但每款工具都有自己的“性格”:有的美学惊艳但无法微调,有的自由度极高却需要动手配置,还有的完全零门槛适合小白直接上手。本节将用统一格式拆解五类主流工具,帮助你根据风格、控制…...
相控阵列天线:原理、优势和类型
本文要点 相控阵列天线 (Phased array antenna) 是一种具有电子转向功能的天线阵列,不需要天线进行任何物理移动,即可改变辐射讯号的方向和形状。 这种电子转向要归功于阵列中每个天线的辐射信号之间的相位差。 相控阵列天线的基…...
【HD-RK3576-PI】Ubuntu桌面多显、旋转以及更新Logo
硬件:HD-RK3576-PI 软件:Linux6.1Ubuntu22.04 在基于HD-RK3576-PI硬件平台运行Ubuntu 22系统的开发过程中,屏幕方向调整是提升人机交互体验的关键环节。然而,由于涉及uboot引导阶段、内核启动界面、桌面环境显示全流程适配&#x…...
树莓派超全系列教程文档--(36)树莓派条件过滤器设置
树莓派条件过滤器设置 条件过滤器[all] 过滤器型号过滤器[none] 过滤器[tryboot] 过滤器[EDID*] 过滤器序列号过滤器GPIO过滤器组合条件过滤器 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 条件过滤器 当将单个 SD 卡(或卡图像&am…...
