[X]关闭
2

07AXI4-FULL-MASTER IP FDMA详解(AXI4总线实战)

摘要: FDMA是米联客的基于AXI4总线协议定制的一个DMA控制器。本文对AXI4-FULL总线接口进行了封装,同时定义了简单的APP接口提供用户调用AXI4总线实现数据交互。这个IP 我们命名为FDMA(Fast Direct Memory Access)。 有 ...

软件版本:vitis2020.2(vivado2020.2)

操作系统:WIN10 64bit

硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA(米联客(milianke)MZU07A-EG硬件开发平台)

登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!

7.1概述

    FDMA是米联客的基于AXI4总线协议定制的一个DMA控制器。本文对AXI4-FULL总线接口进行了封装,同时定义了简单的APP接口提供用户调用AXI4总线实现数据交互。这个IP 我们命名为FDMA(Fast Direct Memory Access)。

有了这个IP我们可以统一实现用FPGA代码直接读写PL的DDR或者ZYNQ/ZYNQMP SOC PS的DDR或者BRAM。FDMA IP CORE 已经广泛应用于ZYNQ SOC/Artix7/Kintex7 FPGA,同样适用于ultrascale/ultrascale+系列FPGA/SOC。

如果用过ZYNQ/ZYNQMP的都知道,要直接操作PS的DDR 通常是DMA 或者VDMA,然而用过XILINX 的DMA IP 和VDMA IP,总有一种遗憾,那就是不够灵活,还需要对寄存器配置,真是麻烦。XILINX 的总线接口是AXI4总线,自定义AXI4 IP挂到总线上就能实现对内存地址空间的读写访问。因此,我们只要掌握AXI4协议就能完成不管是PS还是PL DDR的读写操作。

米联客封装的AXI4总线协议命名位uiFDMA,自动2018年第一版本发布后,就引起了很多FPGA工程师的兴趣,并且得到了广大FPGA工程师的好评,但是FDMA1.0版本还是有一些局限和BUG,再实际的应用中被FPGA工程师发现,因此给了我们很多宝贵意见。借此2020版本教程更新发布之际,我们也对FDMA1.0版本升级到FDMA2.0版本。目前最新的版本是3.0版本,对2.0版本优化了自动burst的长度,提高了效率。

uiFDMA2.0/3.0新增特性:

1:支持多个FDMA IP同时挂带AXI-interconnect总线,同时工作

2:支持自动计算没错AXI-Burst长度,使用起来非常简单,只需要给出需要burst的长度。

从本文开始,我们从多个应用方案来演示FDMA的用途。

本文实验目的:

1:分析FDMA源码,掌握基于FDMA的APP接口实现AXI4-FULL总线接口的访问。

2:掌握自定义总线接口封装方法

3:自定义AXI-FULL-Slave IP用于验证FDMA的工作情况。

7.2AXI总线协议介绍

7.2.1AXI总线概述

在XIINX FPGA的软件工具vivado以及相关IP中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议。其中三种AXI总线分别为:

AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;

AXI4-Lite:(For simple, low-throughput memory-mapped communication )是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。

AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。

由于AXI4和AXI4-Lite信号大部分一样,以下只介绍AXI4信号.另外对于AXI4-Stream协议不再本文中接收,后面有单独介绍的文章。

7.2.2AXI-4总线信号功能

1:时钟和复位

信号

方向

描述

ACLK  

时钟源  

全局时钟信号

ARESETn  

复位源

全局复位信号,低有效

 

写地址通道信号:

信号

方向

描述

AWID

主机to从机

写地址ID,用来标志一组写信号

AWADDR

主机to从机

写地址,给出一次写突发传输的写地址

AWLEN

主机to从机

AWLEN[7:0]决定写传输的突发长度。AXI3只支持1~16次的突发传输(Burst_length=AxLEN[3:0]+1),AXI4扩展突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_Length=AxLEN[7:0]+1)。

burst传输具有如下规则:

wraping burst ,burst长度必须是2,4,8,16

burst不能跨4KB边界

不支持提前终止burst传输

AWSIZE

主机to从机

写突发大小,给出每次突发传输的字节数支持1248163264128

AWBURST

主机to从机

突发类型:

2'b00 FIXED:突发传输过程中地址固定,用于FIFO访问

2'b01 INCR :增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。

2'b10 WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN

2'b11 Reserved

AWLOCK

主机to从机

总线锁信号,可提供操作的原子性

AWCACHE

主机to从机

内存类型,表明一次传输是怎样通过系统的

AWPROT

主机to从机

保护类型,表明一次传输的特权级及安全等级

AWQOS

主机to从机

质量服务QoS

AWREGION

主机to从机

区域标志,能实现单一物理接口对应的多个逻辑接口

AWUSER

主机to从机

用户自定义信号

AWVALID

主机to从机

有效信号,表明此通道的地址控制信号有效

AWREADY

从机to主机

表明""可以接收地址和对应的控制信号

2:写数据通道信号:

信号名    

方向    

描述      

WID

主机to从机

一次写传输的ID tag

WDATA

主机to从机

写数据

WSTRB

主机to从机

WSTRB[n:0]对应于对应的写字节,WSTRB[n]对应WDATA[8n+7:8n]WVALID为低时,WSTRB可以为任意值,WVALID为高时,WSTRB为高的字节线必须指示有效的数据。

WLAST

主机to从机

表明此次传输是最后一个突发传输

WUSER

主机to从机

用户自定义信号

WVALID

3

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (3 人)

发表评论

最新评论

引用 zvsdfvej 2022-2-25 08:56
vitis我清空数据后怎么读不到数据了,需要复位才能读到数据,啥原因
引用 uisrc 2021-8-18 20:43
配套源码下载链接:https://pan.baidu.com/s/1TvjOdZvCyDQpS4a7jYivRQ 提取码:1111

查看全部评论(2)

本文作者
2021-8-13 22:39
  • 7
    粉丝
  • 7985
    阅读
  • 2
    回复
  • 1
  • 2
  • 3
热门评论
排行榜