01概述
MPSoC是Xilinx基于16nm工艺推出的异构计算平台,由于灵活、稳定,在业界得到了广泛的使用。异构计算是一个比较新的领域,需要协调硬件设计、逻辑设计、软件设计,对工程师的要求很高。实际设计过程中,很多工程师对实现PS/PL之间的数据交互感到头疼。
本文将介绍主要的PS/PL之间的数据交互办法。
02MPSoCPS/PL之间的数据通路
在开始之前,首先简要介绍PS/PL之间的数据通路,请参考《UG1085ZynqUltraScale+MPSoCTechnicalReferenceManual》的Figure1-1:AXIInterconnect。
PS/PL之间的数据通路主要是通用的AXIMemory接口,其中PS作为主设备的接口有128-bit位宽的HPM0/HPM1,64-bit位宽的LPD_PL;PL作为主设备的接口有ACP/ACE/HPC0/HPC1/HP0/HP1/HP2/HP3。所有AXIMemory接口的位宽最高都可以支持到128-bit。
PS/PL之间主要通过PS-DDR交互大块数据。从Figure1-1可以看到,PS-DDR控制器有六个AXISlave接口,与PL直接相关的是S3、S4、S5。HPC0/HPC1都连接到了CCIInterconnect。DP和HP0连接到了S3。HP1和HP2连接到了S4。HP3和FPDMA连接到了S5。如果需要提高带宽,要充分利用PS-DDR控制器的AXISlave接口。如果可能,HP1和HP2最好不要同时用,因为HP1和HP2都连接到了S4,最后会彼此竞争带宽。
UG1085的Figure1-1提供了最详细的信息, 也有点复杂。为了简单,也可以参考下面来自于《ZynqUltraScale+MPSoCTechnicalOverview》的简化示意图。
在Vivado的IP里,使能相关接口后,接口如下。
03MPSoCPS/PL之间的简单数据通路和简单外设设计
很多时候,PS/PL之间只需要简单的数据通路。PS只需要下发有限的参数给PL,PL只需要向PS反馈有限的状态数据。串口、SPI设备、IIC等低速接口,就属于这种设备。这种情况下,PL内部只需要实现AXISlave接口和一些寄存器就可以,PS通过AXI接口去访问寄存器,既向PL提供参数,也可以读回PL的状态。
客户可以自己设计AXI接口和寄存器,也可以使用Vivado里的工具CreateandPackageIP。
04使用Vivado里的工具CreateandPackageIP创建IP
如果使用Vivado里的工具CreateandPackageIP创建IP,可以参照下列步骤。
1)调用Vivado的CreateandPackageIP模板
2)CreateandPackageIP模板介绍
3)新建IP
这一步选择"CreateanewAXI4peripheral"。
4)IP命名和目录
根据自己需要,指定IP的名称和目录。
5)IP接口选择
可以看到,只为新的IP选择了AXILite接口,并实现了16个寄存器。工程师可以根据需要选择寄存器个数,最小4个,最多512个。对于AXILite接口,数据位宽是32-bit。
6)完成IP创建
选择“AddIPtotherepository”,点击"Finish",完成IP创建。
<