Zynq(5)AXI GPIO IP核的使用

在这里插入图片描述

前言:前面的文章通过EMIO实现了PL端到PS端的交互,通过MIO中断实现了新的二者之间的交互形式。本文以AXI GPIO IP核为例,实现PL端到PS端的新的交互形式即AXI总线方式,并进一步认识中断,即从PL端到PS端中断。具体实现是通过AXI GPIO IP实现PL端按键中断PS端LED切换状态,读者通过本文将学习新的交互形式,新的中断形式,并深入理解PL端是PS的“灵活的外设”

1.本例任务

通过PL端的按键来中断PS端的LED切换状态,另外让一个PL LED灯保持常亮,即用AXI GPIO IP核的一个GPIO通道连接两个PL外设,按钮和LED。

2.AXI GPIO IP的思考

AXI GPIO IP核是利用PL端的资源搭起的用以实现GPIO功能的电路,所谓GPIO功能比起“引脚”二字丰富了不少,包含了中断机制、以及控制输出输入的各个寄存器。如图所示为该电路的逻辑示意图。
在这里插入图片描述
前面的文章使用了EMIO,本质也是一种PS与PL二者的交互,前面的MIO中断也是交互的一种形式,AXI GPIO IP核是通过软核的方式实现GPIO的功能,也用到了新的交互形式AXI。从IO的角度看,EMIO与MIO之间的区别在前文已详述,简单来说是控制GPIO的寄存器都在PS端,而外部的引脚MIO在PS端;通过AXI GPIO IO核实现GPIO功能的方式与二者不同,IP核是一个软核,即在芯片出厂时芯片内部并没有这部分电路,是通过RTL代码到综合实现写入bit流后FPGA内部才“搭”出这个电路,这个电路包含控制GPIO的寄存器,以及外部引脚,即它们都在PL端,这是与EMIO最本质的区别,也进一步体现了Zynq是以PS端为核心的器件,也体现了PL端是PS端的“灵活外设”。
从交互的角度看,EMIO是通过PS端向指定位置写寄存器的方式完成了PS端与PL端关于IO配置的交互,在MIO不够用或者资源冲突的情况下可以发挥其灵活性;而中断是一种经典常用的交互方式,有不同的中断源根据中断优先级完成中断处理从而协调系统各模块之间的工作,是一种常用的高效且实时的交互方式;通过AXI交互更是PL与PS数据交互的重要组成部分,如下图出自ZYNQ TRM手册,罗列了全部的用于PL-PS交互的AXI接口,共12组,个人认为图中“PL”标注有误,这里应为PS。
在这里插入图片描述
其中接口的第一个字母S代表PS端做从机,M代表PS端做主机发起会话。

  • S_AXI_HP{0:3}_FPD/S_AXI_HPC{0,1}_FPD:六个 PL 侧高性能(High Performance)AXI 主接口连接到 PS 侧的 FPD(Full-power domain),主要用于访问 DDR 内存,进行大量数据的传输,高带宽外设、视频编解码、图形处理等需要高速数据交换的场景。
  • S_AXI_LPD :这是PS的低功耗区域与PL的连接,用于低带宽、低延迟的控制和数据传输。
    S_AXI_ACE_FPD :主机 PL 与从机 PS 中的 CCI 相连接,它能够支持 PS 和 PL 中的硬件块之间的完全一致性(双向)。该接口使用的是 ACE(AXI coherency extension)协议,与 AXI 接口相比,ACE 协议略有不同。
  • S_AXI_ACP_FPD :该接口实现了 PL 和 PS 之间的低延时访问,PL 端可以直接访问 APU 的 L1 和 L2Cache 以及 DDR 内存。
  • M_AXI_HPM{0,1}_FPD :该高性能接口由主机 PS 侧 FPD 连接至从机 PL,可以用于 CPU、 DMA、PCIe 等传输大量数据到 PL。
  • M_AXI_HPM0_LPD :该高性能接口由主机 PS 侧 LPD 连接至从机 PL,该接口适合于为 PS 中的 LPD主机(例如 LP-DMA)提供对 PL 中的存储器的访问,也经常用于配置 PL 端的寄存器。

3.配置IP核

配置IP核即搭建PL端的程序。

3.1ZYNQ IP核

在这里插入图片描述

如图所示在mpsoc ip的设置项里,勾选一个PL-PS的中断;设置PS输出一个复位信号,用于PL端与PS端同步复位;勾选一个PS master的AXI接口,用于连接AXI GPIO IP核。
在这里插入图片描述

PL Fabric Clocks 是PS端为PL端提供的时钟信号,用于驱动PL中的可编程逻辑电路。可Zynq的IP配置界面调整这些时钟的频率,确保PL中的电路能够以所需的时钟频率运行。

3.2AXI GPIO IP核

使能一个GPIO通道,不勾选all inputs或all outputs,这样可以在PS端程序中调整单通道中不同IO位的方向。勾选使能中断,这样才可以配合ps使用中断。

<think>好的,我现在需要回答用户关于ZynqAXI GPIO和普通GPIO区别的问题。首先,我需要回忆自己之前学过的Zynq架构知识,并确保信息的准确性。 用户可能是一位刚开始学习Zynq的工程师或学生,对PS和PL部分的GPIO使用不太清楚。他们可能在使用开发板时遇到了配置问题,或者在设计时需要选择合适的GPIO模块,因此需要明确两者的区别和应用场景。 首先,我应该明确Zynq的结构,它分为处理系统(PS)和可编程逻辑(PL)。PS部分有自带的GPIO控制器,而AXI GPIO是位于PL部分的IP,通过AXI总线连接到PS。接下来,我需要比较两者的不同点,比如物理位置、访问方式、功能灵活性等。 需要注意的是,AXI GPIO是通过内存映射的寄存器来控制的,而PS的GPIO可能更直接。还要考虑性能差异,比如PS GPIO的访问速度可能更快,因为直接集成在处理器内部,而AXI GPIO需要经过总线,可能存在延迟。此外,AXI GPIO可以扩展更多的IO口,这在PS GPIO数量不足时非常有用。 可能还需要提到应用场景,比如当需要连接PL外设时,使用AXI GPIO更合适;而简单的控制信号可以用PS自带的GPIO。同时,配置方式的不同,AXI GPIO需要配置PL部分,而PS GPIO直接在软件中设置。 要确保解释清晰,避免术语混淆,可能需要用例子说明。例如,当用户需要驱动一个PL中的LED时,使用AXI GPIO,而控制PS端的引脚如MIO时,使用PS GPIO。 最后,总结两者的区别,帮助用户做出选择。检查是否有遗漏的关键点,比如中断支持、电源域差异或者时钟管理等方面是否需要提及。不过根据常见问题,可能主要关注访问方式、位置和用途即可。</think>在Zynq-7000 SoC中,**AXI GPIO** 和 **PS端GPIO(MIO/EMIO)** 是两种不同类型的GPIO控制器,它们的区别主要体现在硬件架构、访问方式和应用场景上: --- ### 一、物理位置与硬件架构 | **特性** | **PS GPIO (MIO/EMIO)** | **AXI GPIO** | |----------------|-------------------------------------------|------------------------------------------| | **物理位置** | 集成在PS(Processing System)内部 | 位于PL(Programmable Logic)中的IP | | **硬件资源** | 直接由PS的GPIO控制器管理 | PL逻辑实现的GPIO扩展模块,通过AXI总线连接PS | | **引脚类型** | MIO(直接连接PS引脚)或EMIO(通过PL扩展) | 完全通过PL的IO引脚(需绑定到FPGA引脚) | --- ### 二、访问方式与性能 | **特性** | **PS GPIO** | **AXI GPIO** | |----------------|-------------------------------------------|------------------------------------------| | **访问路径** | 直接通过CPU寄存器操作(内存映射到PS地址空间) | 通过AXI总线访问PL中的寄存器(需要AXI接口协议) | | **延迟** | 低延迟(直接访问) | 较高延迟(需跨PS-PL通信) | | **带宽** | 高带宽(PS内部总线) | 受AXI总线带宽限制 | --- ### 三、功能与灵活性 | **特性** | **PS GPIO** | **AXI GPIO** | |----------------|-------------------------------------------|------------------------------------------| | **扩展能力** | 固定数量(Zynq-7000通常最多64个MIO + 64个EMIO) | 可自由扩展(通过PL逻辑实现多组GPIO) | | **功能定制** | 固定功能(输入/输出/中断) | 可定制逻辑(例如添加PWM、编码器等) | | **中断支持** | 原生支持中断 | 需手动配置中断逻辑(通过AXI Interrupt Controller) | --- ### 四、典型应用场景 | **场景** | **PS GPIO** | **AXI GPIO** | |------------------------|-------------------------------------------|------------------------------------------| | **简单控制** | 控制PS端外设(如LED、按键) | 控制PL端外设(如自定义IP模块) | | **高速响应需求** | 实时性要求高的任务(如中断触发) | 对实时性要求较低的任务 | | **资源不足时** | 当MIO/EMIO引脚用完时 | 作为补充扩展更多GPIO | --- ### 五、软件配置差异 1. **PS GPIO** - 通过`xparameters.h`和`xgpiops.h`库直接操作。 - 示例代码: ```c #include "xgpiops.h" XGpioPs_Config *Config = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID); XGpioPs_CfgInitialize(&Gpio, Config, Config->BaseAddr); XGpioPs_SetDirectionPin(&Gpio, PIN_NUM, 1); // 设置为输出 XGpioPs_SetOutputEnablePin(&Gpio, PIN_NUM, 1); ``` 2. **AXI GPIO** - 需要初始化AXI总线并访问PL寄存器。 - 示例代码: ```c #include "xgpio.h" XGpio_Initialize(&Gpio, XPAR_AXI_GPIO_0_DEVICE_ID); XGpio_SetDataDirection(&Gpio, CHANNEL, 0x00); // 设置通道为输出 XGpio_DiscreteWrite(&Gpio, CHANNEL, 0x01); // 写入数据 ``` --- ### 六、总结对比表 | **维度** | **PS GPIO** | **AXI GPIO** | |----------------|-----------------------------|----------------------------| | **定位** | PS原生资源 | PL扩展资源 | | **延迟** | 低 | 较高 | | **灵活性** | 固定功能 | 可定制逻辑 | | **适用场景** | 实时控制、简单外设 | 扩展IO、复杂逻辑集成 | --- **选择建议**: - 若需要**低延迟控制PS引脚**(如MIO连接的LED),优先使用PS GPIO。 - 若需要**扩展更多IO**或与PL逻辑协同工作(如驱动自定义外设),选择AXI GPIO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGArea

原创不易,请多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值