ZYNQ PS中包含一组丰富的外设,如USB控制器,UART控制器,I2C控制器等等。他们提供了各种工业标准的接口,用于和外部设备进行通信。GPIO可以通过MIO连接到PS端的引脚,也可以通过EMIO连接到PL。
#GPIO简述
ZYNQ分为PS和PL两部分,那么器件的引脚(pin)资源同样也分为了两部分。ZYNQ PS 中的外设可以通过 MIO(Multiuse I/O,多用输入/输出)模块连接到 PS 端的引脚上,也可以通过 EMIO 连接到 PL 端的引脚。 Zynq-7000 系列芯片一般有 54 个 MIO。
GPIO 是英文“general purpose I/O”的缩写,即通用的输入/输出。它是 ZYNQ PS 中的一个外设,用于观测和控制器件引脚的状态。
ZYNQ之GPIO简介
我们可以看到 GPIO 分为 4 个 Bank,其中 Bank0和 Bank1 连接到 MIO;而 Bank2 和 Bank3 连接到 EMIO。
除 Bank1 之外的 Bank 都具有 32bit, Bank1 只具有 22bit 是因为总共只有 54 个 MIO,其中 32bit 的Bank0 控制了 MIO[0~31],
剩下的 MIO[31~53]就由 22bit 的 Bank1 控制。 Bank2 和 Bank3 用于控制扩展的MIO 即 EMIO,也就是说总共可以有 32+32=64 个 EMIO。
在大多数情况下, PS 端经由 EMIO 引出的接口会直接连接到 PL 端的器件引脚上, 通过 IO 管脚约束来指定所连接 PL 引脚的位置。 通过这种方式, EMIO 可以为 PS 端实现额外的 64 个输入引脚或 64 个带有输出使能的输出引脚。 EMIO 还有一种使用方式,就是用于连接 PL 内实现的功能模块(IP 核) , 此时 PL 端的 IP 作为 PS 端的一个外部设备。
ZYNQ之GPIO简介
#AXI GPIO
EMIO 实现了 PS 端与 PL 端的交互,而 PS 与 PL 最主要的连接方式则是一组 AXI 接口。 AXI 互联和接口作为 ZYNQ PS 和 PL 之间的桥梁, 能够使两者协同工作,进而形成一个完整的、 高度集成的系统。
AXI GPIO IP 核为 AXI 接口提供了一个通用的输入/输出接口。 与 PS 端的 GPIO 不同, AXI GPIO 是一个软核(Soft IP),即 ZYNQ 芯片在出厂时并不存在这样的一个硬件电路, 而是由用户通过配置 PL 端的逻辑资源来实现的一个功能模块。 而 PS 端的 GPIO 是一个硬核(Hard IP) ,它是一个生产时在硅片中实现的功能电路。
AXI GPIO 可以配置成单通道或者双通道, 每个通道的位宽可以单独设置。 另外通过打开或者关闭三态缓冲器, AXI GPIO 的端口还可以被动态地配置成输入或者输出接口。
ZYNQ之GPIO简介
模块的左侧实现了一个 32 位的 AXI4-Lite 从接口, 用于主机访问 AXI GPIO 内部各通道的寄存器。 当右侧接口输入的信号发生变化时,模块还能向主机产生中断信号。不过只有在配置 IP核时选择“使能中断” , 才会启用模块的中断控制功能。
ZYNQ之GPIO简介
PS 端的 M_AXI_GP0 作为主端口, 与 PL 端的 AXI GPIO IP 核以 AXI4-Lite 总线相连接。其中, AXI 互联 IP(AXI Interconnect) 用于连接 AXI 存储器映射(memory-mapped) 的主器件和从器件。通用中断控制器(GIC) 用于管理来自 PS 或者 PL 的中断, 并把这些中断发送到 CPU。

相关文章: