欢迎来到天天文库
浏览记录
ID:42267310
大小:850.10 KB
页数:21页
时间:2019-09-09
《AXI-HP接口_DMA_GIC编程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《详细介绍AXI-HP接口+DMA+GIC编程》赵永科2013-3-22项目信息:基于ZED-Board实现的宽带实时自适应均衡器本文参考了Xilinx官方文档UG873,“SystemDesignUsingProcessingSystemHighPerformanceSlavePort”。主要实现了PL中AXICDMAIP与PS部分HP64bit从接口集成。本例中AXICDMA部分扮演主机,从PS部分DDR系统内存中源缓冲区拷贝一列数据到目的缓冲区。可以分别采用裸机工程和基于Linux的应用软件来实现功能。原文是基于ZC702评估板的,关于详细的ZC702资料请去X
2、ilinx官网或Avnet官网,本文不再赘述。在PS中共有4个高性能从AXI接口(名称:AXI_HP{3:0},也称AFI,因为带FIFO功能)连接PL到OCM或DDR2,建立PS和PL间的高带宽数据通道。本文要做的内部结构如下图所示。AXICDMA从机接口连接到PS通用主机接口M_AXI_GP1.用于PS来配置AXI寄存器用于数据传输和状态检测。AXICDMA主机接口连接到PS高性能从机接口S_AXI_HP0.用于CDMA模块读取DDR系统内存源缓冲区数据。AXICDMA主机接口连接到PS高性能从机接口S_AXI_HP2.用于CDMA模块将数据写回DDR系统内存目的
3、缓冲区。AXICDMA中断从PL连接到PS全局中断控制器(GIC)。当数据传输完成或传输时有错误发生,则产生中断。原文中源缓冲区地址0x20000000~0x2FFFFFFF,目的缓冲区地址0x30000000~0x3FFFFFFF,大小均为256MB。我们要在ZEDBoard上实现,DDR2的内存空间(见下图)为0x00100000~0x1FFFFFFF,不能设这么大。这里分别设为0x10000000~0x17FFFFFF和0x18000000~0x1FFFFFFF,大小均为128MB。至于为什么设成这样,为什么不设为从0x00100000开始?咱们先卖个关子,后面
4、详细说明。硬件工程建立详细步骤如下:1.先建立PlanAhead工程,生成XPSBSB,步骤参考兔子教程。2.在XPS中,展开IPCatalog下的DMAandTimer,选择AXICentralDMA,双击添加到工程。在下面的对话框点Yes弹出AXICDMA模块配置对话框,选择数据传输通道的数据宽度为1024bit,最大突发长度为256,这样在传输时突发块大小为32KB。如下图所示:点[OK]。接着问是否连接到PS,我们选择如下:点[OK]。注意弹出对话框时先不要连接到PS7_0,因为我们后面要手动连接。添加后看BusInterfaces表单,可以看到我们刚添加的a
5、xi_cdma_0模块,没有任何连接。接着再添加一个AXIInterconnect模块,在IPCatalog中找到该模块,如下图所示。双击添加到工程。点[Yes]。弹出配置对话框如下。将模块改名为axi_interconnect_gp1.顾名思义,axi_interconnect_gp1就是提供AXI总线互联的模块,将上面的CDMA模块连接到PS的AXI_GP1总线。从IPCatalog中再添加一次该模块,这次改名为axi_interconnect_hp,添加完后BusInterfaces表单中内容如下图:这时打开Zynq表单,如下图所示单击绿色的32bGPAXIMa
6、sterPorts,打开PS7_0配置向导。在User表单中,展开GPMasterAXIInterface,选择“使能M_AXI_GP1接口”,点确认。单击绿色的highperformanceAXI32/64bSlavePorts,打开PS7_0配置向导。在User表单中展开“高性能从机AXI接口”,“使能S_AXI_HP0接口”——将HP0基地址设为0x,高地址设为0x。位宽默认64bit“使能S_AXI_HP2接口”——将HP2基地址设为0x,高地址设为0x。位宽默认64bit点OK确认更新。更新后的Zynq表单如下所示可以看到PS和PL之间新增的绿色连线生成。回
7、到BusInterfaces表单,展开PS7_0,点击M_AXI_GP1(从名字就能判断,是主机接口,AXI总线,通用类型接口),将它连接到axi_interconnect_gp1.展开axi_cdma_0,点击S_AXI_LITE(从名字也能判断,是从机接口,AXI总线,精简类型接口),也连接到axi_interconnect_gp1.连接时选择ps7_0.M_AXI_GP1.这样就把PS和PL通过axi_interconnect_gp1这个纽带连接到一起了。接下来,选择axi_cmda_0下的M_AXI,连接到axi_interconnect_h
此文档下载收益归作者所有