用ISE XPS玩一玩Zynq---用于PL侧的和AXI_GP接口的DMA

前言

写这个文档的目的有两个:

1、目前Zyqn7000系列开发大多数都是基于Xilinx的Vivado,网上很少有ISE相关的例子,个人费了不少时间才摸索出在ISE上Zyqn相关开发流程,希望记录下来给有需求的童鞋参考;

2、目前关于DMA的使用大多数场景是用于PS里面数据的搬运,即使有用在PL里的场景,也大多数是通过AXI_HP口然后例化一个DMA_FIFO进行数据搬运,而在ISE里又恰恰缺少这个IP,这边采用了更为简单的直通方式进行AXI_GP口的验证。如果大家要熟悉DMA接口和AXI_GP接口,这个demo比网上大多数例程要简单。当然,将AXI_GP口换成AXI_HP口即可操作DDR里的地址空间。

demo的开发环境:

软件环境:ISE14.7

硬件环境:Zyqnxc7z010clg400-3,ALINX黑金AX7010开发板

1.     验证方案

验证需求:测试AXI_GP作为PS-PL接口时的master和slave功能。

方案分析:

扫描二维码关注公众号,回复: 1707178 查看本文章

1、在PL侧例化一个DMA IP,然后M_AXI_GP为master,DMA的S_AXI_LITE为slave,通过AXI_interconnect连接,这样PS即可配置DMA中的Register Module,进而配置DMA模块。如图一中的蓝色数据标识所示,这样即可验证master功能。

2、PS配置完DMA的Register Module后,DMA的M_AXI_MM2S和M_AXI_S2MM即可作为master,S_AXI_GP为slave,通过AXI_interconnect,这样DMA即可控制DataMover将PS中SRAM地址1的数据搬运到SRAM的地址2,具体数据流如图一中的红色数据标识所示,从而达到验证AXI_GP的slave功能。

图1  验证方案框图

2.     工程步骤

2.1 建立XPS工程

步骤1---打开XPS工具

步骤2---新建工程,记得填写好工程路径。

步骤3---选取好相关平台和器件,我们这里先选ZC702平台,下面自动会选定xc7z020,没关系,后面我们可以手动修改到xc7z010

步骤4---把所有的外设都remove,点Finish,得到一个干净的PS系统。

步骤5---修改器件,把7020修改为7010,一个基本的工程即建立好了。

2.2 制作demo

步骤1---去除多余的IO外设,这里保留SD0和UART1。

步骤2 ---添加AXI_GP的master和slave

 

步骤3---添加DMA IP,记得如下图④的一样,勾选自动连线(因为自动连线只能连AXI_HP或者AXI_ACP模式,我们这个demo是要用AXI_GP模式,但是没办法,这个工具相对较傻,我们不勾选自动连的话后面生成的AXI interconnect ip将master侧信号分成两组分别连接M_AXI_MM2S和M_AXI_S2MM,我们只能采用这样傻瓜式的方式生成好后再去修改)。

步骤4---如下图所示,我们可以看到已经生成了两个axi_interconnect,PS里面也自动帮你生成了S_AXI_HP0口,我们需要在PS里删除这个口。

步骤5---修改DMA IP,将GS模式改为普通模式。

步骤6 ---连线。这是最重要的一步,ISE比较傻,不像Vivado一样可以自动去勾选连线,这里只能对着信号来连,时钟一般都是勾选到PS7_FCLK_CLK0。其余的则根据需求来连。我的demo连线如下:

步骤7---连线后的Design View大概如下面几个图所示(局部放大DMA模块)。我们可以看到DMA的M_AXIS_MM2S是直接连接的S_AXIS_S2MM,相当于直接打了个loop,就不需要dma fifo了。


步骤8---检查DRCS、综合生成网表、生成位流。注意这阶段耗时可能会比较紧,需要耐心等待,如果DRCS报错,肯定是上面步骤连线出问题了。

步骤9---Export Design,导出SDK工程。

2.3 SDK调试

步骤1---新建helloworld工程

步骤2---编辑测试代码,helloworld.c为主测试代码,需要对其进行修改。

步骤3---代码编译无错误。具体的代码详见附录1。

步骤4---加载位流。如果遇到加载问题,请检查board的sw开关是否正确,还有jtag驱动是否正确安装。

步骤5---开始调试

步骤6---打开UART显示。运行的时候会报下面的告警,是因为没有设置UART串口打开。

这时候,需要在Run -- Run Configurations里面设置好STDIO Connection才行,将串口显示。

步骤7---再次运行,得到最终结果。下面为串口的打印结果。

END。

3.附录

3.1附录1---测试C代码

3.2附录2---整个demo工程

附录1和2的附件详见https://download.csdn.net/download/xinxulsq/10493236


猜你喜欢

转载自blog.csdn.net/xinxulsq/article/details/80773911