UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

1.版本说明

2.概述

  • 本文建立在有一定的ZYNQ开发基础之上;
  • 本文主要描述PL使用HP口读写PS-DDR操作流程;
  • 描述在VIVADO条件下,修改blockdesign的一些参数选项,从而提供AXI的速度;
  • 描述在ultraScale器件下,配置blockdesign时遇到的一些问题,并记录解决方法;

3.流程

3.1.blockdesign配置

如下图所示,在ZYNQ-UltraScale中,产生一个 S_AXI_HP0_FPD接口,然后根据PL端需求外接 AXI Interconnect,进而扩展多个HP口;
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

如下图所示,双击“接口1/2/3”,弹出新的窗口,按下图提示参数,修改其中的“Basic”选项,其中Data Width 可以根据PL需要修改,
建议:Data Width:ZYNQ选择64,UltraScale选择128;
建议:MAX Burst Length:16
建议:Num Write Outstanding: >= 2
建议:Num Read Outstanding: >= 2
注:Outstanding功能很重要,后面会说。
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

3.2.自动地址划分

正常开发过程中,当我们设计完blockdesign以后,通常会软件验证blockdesign模块是否有效(快捷键F6),是否有异常错误,直到安全正常通过设计;
如果验证通过,恭喜你,一切顺利,继续开发;
但是只要涉及到HP/GP,必然会需要进行地址划分,对于地址划分模块,首次打开时,处于地址未划分状态,需要进行地址划分,否则软件验证/编译将会报错;
如下图所示,未分配地址的截图:
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

根据ZYNQ设计经验,一般此处会直接点击“AUTO Assign Address”,但是由于UltraScale的地址系统比ZYNQ复杂,因此自动划分会报错,需要手动调整;
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

3.3.手动调整地址划分

地址划分之前,需要明白各个端口地址范围:ZYNQ查看UG585, UltraScale查看UG1085;
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

对于:Master HPM0接口,主要用于PS控制PL的外设模块,地址空间:0xA400_0000-0xAFFF_FFFF,如果没有使用VCU,则地址对应:0xA000_0000-0xAFFF_FFFF,共256MB;
对于:Master HPM1接口,主要用于PS控制PL的外设模块,地址空间:0xB000_0000-0xBFFF_FFFF;共256MB;
对于:Slave HP接口,主要用于PL读写PS的存储空间包括:OCM/QSPI/DDR_LOW/DDR_HIGH;
考虑到UltraScale的地址空间比较复杂,为了简化开发,只需要划分DDR_LOW,其余设置为Unmap
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

最终结果:
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

4.Outstanding功能

通过上面的设置,我们已经配置好了GP/HP;接下来需要PL端的RTL实现通过HP的AXI接口读写PS的DDR;
Outstanding功能注要提供类似流水线的AXI-加速功能;
分析AXI-Write时序:
UltraScale 学习笔记1之PL通过AXI-HP加速读写PS-DDR

同理:AXI-Read也能再Outstanding > 2时进行AXI加速;

5.后序