PS 对外的互联接口包括:
四个 64bit 高速 AXI_HP Slave 接口,最高时钟为 150MHz;
两个 32bit 低速 AXI_GP Slave 接口和两个 32bit AXI_GP Master 接口;
一个 64bit 低延时 AXI_ACP Slave 接口。
详细的接口介绍及使用见 ZYNQ 内部互联章节。
PS 有四个可编程时钟资源提供给 PL,PL 本身还具有锁相环电路及其管理
单元(MMCM),下表1-1 是PL锁相环资源情况。
Zynq 系列的 PL 核有 Artix 系列和 Kintex 系列两种,表 2-1 列出了 Zynq 系列器件的逻辑资源情况。
Zynq 器件支持加密安全启动和非加密启动,安全启动方式有多级秘钥匹配的过程,相对比较复杂,这里不深究加密启动的方法。启动加载及调试模式等由MIO[8:2]确定,因此,这些 MIO 应该使用 20 kΩ左右的电阻上拉或下拉,使保持确定的低电平或高电平。
Zynq 系列器件对上电时序无严格的要求,只是简单的说明 PS 应先上 VCCPINT、VCCPAUX 和 VCCPLL,再上 VCCO,下电顺序反之。PL 和 PS 类似,也是先上内核和
RAM,再上外设,简单的上电顺序控制可通过 DC 模块的 ByMODE 充电容限来设置延迟。表2-1Zynq器件的电源域。
备注:现xilinx已经推出低功耗版本器件-L系列,FL内核和BRAM电压将为0.95V。
好的电源设计有助于提高电源效率,降低功耗、减少发热;降低 CPU启动失败,部分外设发生“莫名”等工作异常的概率,有助于提高电路工作的稳定性;数字电路也应考虑辐射和串扰对模拟域带来的干扰。Zynq器件详细的 AC/DC 参数见DS187 或DS191,PCB设计细节指导见 UG933。
MIO[5:3]的电平状态决定处理器的启动设备,处理器在上电复位引脚PS_POR_B 的上升后的连续 50 个 clk 采样这些引脚的状态。同时,处理器还会对JTAG 模式、MIO BANK 的电压及锁相环工作模式进行配置。表2-2 是Boot Mode Pin 的状态表。
从表 2-1 可以看到,ZYNQ 可从 NOR(32MB Max)、NAND(ONFI1.0接口,1GB Max)、Quad-SPI(256MB Max)、SD (16GB Max)卡启动,NAND FLASH 和 SD 卡不可避免的会有坏块的问题,SD 卡若用来存储其他数据还可能导致误操作擦除启动区数据,因此许多要求可靠性比较高的系统大多选择使用NOR FLASH和Quad-SPI用作启动设备。但从表1-2 可以看出,NOR FLASH几乎占用了 MIO的所有引脚,特别是和高速设备进行了复用;若从 Quad-SPI启动,ARM只给BootRom线性地址模式读取Quad-SPI分配了128Mbit的空间,其它内容由FSBL负责搬运,同时大容量器件的价格较高。因此在选择启动设备时,会遭遇一个兼顾考虑的问题。另外,Xilinx 对启动器件有一定的要求,经过Xilinx验证的启动器件详见AR# 50991。
Zynq 系列器件采用三级启动方式,每级的要求及过程如下。
(1) 第0 级:启动 BootROM。
要求:安全启动时,PS 和 PL 均需上电且稳定;普通方式启动时 PS 需上电,PL不需上电,JTAG 配置启动时PS 和PL均需启动。 流程:在上电复位、系统复位或软件复位后,BootROM 根据 BootROM Header 定义的信息执行加载 FSBL 并将控制权交给 FSBL(若选择在内部OCM执行,FSBL不能大于192KB,在 FLASH 直接执行无限制)。
(2)第1 级:FSBL(或用户控制代码)
要求:因为此阶段 PS 要配置 PL,因此 PS 和 PL 均需上电。 流程:FSBL 取得控制权后,根据 VIVADO(或 XPS)的配置对 PS 进行初始化,使用比特流(Bitstream)文件对PL进行配置。然后加载裸机程序或 SSBL并交付控制权。
(3)第2 级:执行裸机程序或 SSBL。
流程:裸机程序直接执行或执行 SSBL(通常是 UBoot),在 UBoot 执行后的加载工作交付 UBoot 完成。 裸机状态下和操作系统状态下的 Flash 镜像文件分区如图2-1 所示,这个镜像文件可通过 Xilinx SDK 里的相关工具制作。
确理解并应用 ZYNQ SoC 的 PL 和 PS 间的互联结构有助于设计最优的软件架构,充分利用Zynq 的资源和性能。在1.3 节已经提到,PL 和 PS间主要通过AXI_HP、AXI_GP、AXI_ACP 总线接口以及一些 EMIO、中断及事件接口紧密结合在一起。可以说 PL设计关键就是用好这些接口。 ZYNQ 的主互联结构如图 3-1 所示,图中清楚表示了设备可以访问的源、目的,可同时支持并发读写的路数,以及 Qos控制的情况。以下就 PS 与PL交互最为密切频繁的 AXI_HP(AXI3.0)、AXI_GP(AXI-Lite)和 AXI_ACP 接口进行详细介绍。 需要注意的是,端口在 PS 内部的连接并不是完全交叉结构,表 3-1 列出了主要端口的访问能力。
互联总线一般采用 AXI4.0 协议标准,有关总线协议的文档参见 ARM《ihi0022d-AMBA®AXI and ACE™ Protocol Specification》。
AXI 接口是为了 PL 访问 PS 端的存储器而专门设计的高速通道,它具有以下性能:
①PL 可访问 PS 上的四个 AXI_HP Slave 通道,每通道支持独立可编程的32/64bit 数据宽度;
②在 32bit 接口模式下高效动态扩展到 64bit 对齐传输;
③可以跨 PS 和 PL 间异步时钟传输;
④采用标准的 AXI3.0 协议,突发长度可达 16;
⑤AXI_HP 分成两部分,一部分和 PL 直接相连,另一部分连接到 AXI Interconnect,从而分别访问 DDR 和 OCM。
AXI_HP 接口一般用于逻辑与挂载在 APU 的 DDR 间高速数据交互,数据搬移一般通过 PL内的DMA 完成。例如在设计视频处理时,高清图像可由 FPGA直接完成采集、预处理,然后通过 AXI_HP接口将数据传输到 DDR中供完成APU 进一步处理。
AXI_GP 接口是符合 AXI4-Lite 协议的低速接口,没什么突出特点,PS 提供两个主接口,两个从接口。这个接口位宽为 32bit,不支持突发传输,一般用于在PL-PS间传输低速的控制信息和少量数据,也可通过ARM内的中央仲裁器访问DDR。当设备很多时,可通过 PL的 AXI Interconnect进行扩展。
加速器一致性端口(ACP)是 SCU 上的一个64 位的 AXI 从接口,提供了来自PL 到 Cortex-A9 MP 核处理器子系统的异步的缓存一致性访问点。通过这个接口PL 端逻辑可以直接访问 PS 部分的 Cache,硬件一致性由 SCU 保证。因此 PL 可以直接从Cache 拿到CPU 计算的结果,同时也可以第一时间将逻辑加速运算的记过送至CPU Cache 中,因此延时最低,适合做专用指令加速器模块接口。 基于 PL 实现的加速器的过程大概如以下所列:
① 在它的本地缓存空间内,CPU 为加速器准备输入数据。
②CPU 使用到 PL 的通用 AXI 主接口,将消息发送到加速器。
③加速器通过 ACP 取数据,处理数据,然后通过 ACP 返回结果。
④ 通过写到一个已知的位置,加速器设置一个标志,用来表示正在处理的 数 据完成。可以通过处理器轮询这个标志的状态或者产生一个中断。
这种低延时的总线非常适用于PS端自定义指令通过PL加速。
对视频处理而言,图像算法模块会对 DDR 写入或请求数据,PS 需要配置相关参数,同时,PS 内的算法可能会需要 PL帮助进行加速以提高执行效率,相关执行状态通过中断通知 PS满足快速响应要求。因此,一个典型的应用可能会如图3-2 所示的结构。
从应用可知,图像处理最关注也最关键的是 AXI_HP所能提供的带宽,这将直接制约整个系统的功能密度和性能。下表 3-2 列出了 PS-PL常用互联接口的性能。 因 AXI 总线读写通道相互独立,因此读写互不影响,所以最终图像处理多并发访问的最终瓶颈任然是 DDR带宽。但是需要注意的是 AXI_HP0/AXI_HP1和 AXI_HP2/AXI_HP3 在连接DDR控制器之前是独立仲裁的,如果许可,最好是在这两个独立端口里分别只使用其中的一个端口,例如端口 0 和端口2。如果使用了同一个仲裁器的两个端口,势必会影响效率。
通过对各接口的比较,将他们的特点和可能的用途整理到表 3-3 中。
在 Xilinx未进行工具整合之前,PL开发需要使用 Xilinx ISE 、PlanAhead和 XPS组合才能完成。针对下一代应用,Xilinx将 PL 开发所有功能整合到VIVADO IDE 中,最新版本为 Vivado2014.4,建议使用最新版本开发环境。PS裸机开发直接使用 Xilinx SDK 即可,操作系统开发可在相应的系统环境中调用SDK 提供的交叉编译工具链,当然也可以在SDK中创建linux工程,只不过在使用上有诸多限制。
Xilinx 在 Vivado 中推荐使用图形化的顶层设计方式,用户可以先将 Xilinx提供的IP 核或自定义IP 制作成一个大的 block design (bd),block design也可封装成为一个新的IP。最终的顶层文件是一个以 Zynq PS 为核心的design block。因此一个工程的创建可以分成以下步骤:
(1) 在 Vivado中创建一个新工程;
(2) 创建一个新的 block design;
(3) 添加Zynq7 Processing System 到block design,并对其进行初始化配置;
(4) 添加其他IP核到block design,并完成和PS 的互联以及对外接口的连接;
(5) 分配 PS 内地址空间映射;
(6) 进行规则检查;
(7) 生成HDL Wapper(顶层文件)并加入约束;
(8) 编译、综合、实现;
(9) 生成 Stream Bit文件;
(10)导出硬件配置文件到 SDK;
(11)在SDK 中使用这些配置文件生成 FSBL或BSP支持裸机 APP;
Xilinx 在 Vivado 中提供了三个调试工具调试 PL,目前相比来说不如成熟的ChiScope 方便。这三个的描述 IP 见表 4-1。
Xilinx 在 SDK 中提供实时跟踪的工具 XMD,可实时查看 ARM 的通用寄存器值,中断信息,PC等。同时也可实时查看存储空间的值。同时 SDK还提供远程调试功能(GDBServer 工具链)。
另外需要提到的是,Xilinx提供了一套完整的性能监测工具,可以对设计进行准确的性能评估(包括CPU性能、Cache性能、AXI总线吞吐、DDR带宽等),详细内容参见xilinx官方文档(UG1145):
为了更方便灵活的进行基于 Zynq Soc 的设计,Xilinx提供了一系列的 IP核供选用,表4-2 列出了实用IP资源。