前言:前面的文章通过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使用中断。