基于ZYNQ的AXI4接口通讯

本文详细介绍了基于ZYNQ的AXI4接口通讯,涵盖AXI的三种形式、突发传输机制、工作原理以及在DDR数据传输中的应用。通过对AXI4协议的解析,阐述了其在高性能存储映射、突发传输长度和宽度等方面的特性,并通过实例展示了AXI4协议在FPGA DDR数据传输中的实现和验证过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、简介

1.1 AXI的三种形式

1.2 存储映射

1.3 AXI小结

二、AXI的突发传输

2.1 存储模式

2.2 突发长度

2.3 突发传输宽度

三、AXI的工作方式

3.1 AXI的通道

3.2 工作原理

1.时钟和复位

2.通道的信号

3.工作机制

3.工作规则

 四、基于AXI4协议的DDR数据传输

4.1 实现功能

4.2 AXI4核的状态机

4.3 代码的重要参数

4.4 自定义发送

4.5 实验结果

五、最后

附 代码内容


一、简介

        AXI全称ARM AMBA,是ARM-AMBA的一部分,当前使用的是后面更新的AXI4接口。

        AMBA:高级微控制器总线架构,具有以下特点:

开放的片内互联的总线标准

能够在多主机设计中实现多个控制器和外围设备之间的连接和管理

1.1 AXI的三种形式

        AXI4 协议支持以下三种类型的协议:

                1、 AXI4: 高性能存储映射协议。

                2、 AXI4-Lite:简化版的 AXI4 协议, 用于较少数据量的存储映射通信。

                3、 AXI4-Stream(ST): 用于高速数据流传输,非存储映射接口。

1.2 存储映射

        在这里首先我们首先解释一下存储映射(Meamory Map)这一概念。如果一个协议是存储映射的,那么主机所发出的会话(无论读或写) 就会标明一个地址。 这个地址对应于系统存储空间中的一个地址, 表明是针对该存储空间的读写操作。

1.3 AXI小结

AXI4(Full):允许高吞吐率的突发,运行256个数据的突发传输,同时只需要指定一个单一的地址。

AXI4-Lite:轻量级,单次的传输一个数据,不支持突发传输,需要指定地址。

AXI4-Stream:不需要地址传递数据,非存储器映射

二、AXI的突发传输

        AXI 总线的突发传输机制(burst),在 AXI 总线中的突发传输是指,在地址总线上进行一次地址传输后,进行多次数据传输。

        第一次地址传输中的地址作为起始地址,根据突发传输类型的不同,后续数据的存储地址在起始地址的基础上递增(INCR 模式);或者首先递增,到达上限地址后回到起始地址,继续递增(WRAP 模式);又或者后续数据都将不断写入起始地址,刷新起始地址上的数据(FIXED 模式)。

2.1 存储模式

        FIXED 类型适合对某个固定地址进行数据更新,比如向一个 almost full 的 fifo 更新数据。

        INCR 类型最为常用,后续的数据的存储地址在初始地址的基础上,以突发传输宽度进行递增,适合对于 RAM 等 mapped memory 存储介质进行读写操作。

        WRAP 模式比较特殊,除了初始地址外,还有最高地址的界限。在最大地址以下,WRAP 与 INCR 类型完全相同,地址递增,但达到最高地址后,地址直接回到起始地址,再进行递增,就这样循环往复。数据手册上表示,WRAP 适合对 cache 的访问,我这方面经验还不多,不是很能理解这种模式的精妙之处。

2.2 突发长度

        突发传输长度 (burst length),突发传输长度是指在一次突发传输中所进行的传输(transfer)次数,在传输完初始地址后,进行的数据传输次数就是突发传输长度,假设数据位宽是 32 位,即进行 32 * N bit 的数据传输。

        在 AXI4 中,INCR 类型最大支持长度为 256,其他类型最大长度为 16。当然你的突发长度最少为 1,不然也就没有传输发生了。协议中的 burst length 从零开始,实际的长度值为长度字段加1。传输长度使用 8 位二进制表示。

突发传输长度有一些限制,包括:

  • 对于 WRAP 模式,突发传输长度仅能为2,4,8,16

  • 在一次突发传输中,地址不能跨越一个 4KB 分区

  • 一次突发传输不能在未达到传输长度的情况下提前结束。

2.3 突发传输宽度

        突发传输宽度(burst size),突发传输宽度是每指一次传输(transfer)中的最大数据宽度突发传输数据宽度不能超过数据线本身的宽度。当数据线本身宽度大于突发传输宽度时,将根据协议的相关规定制定数据在部分数据线上传输。突发传输宽度共 3 个二进制位。

总的来说,突发长度就是发送多少个数据。突发宽度发送数据的大小。

三、AXI的工作方式

3.1 AXI的通道

        AXI4和AXI4-LIte包含五个独立的通道:

                • Read Address Channel

                • Write Address Channel

                • Read Data Channel

                • Write Data Channel

                • Write Response Channel

Note:每个独立的通道都包含一组信息信号、VALID和READY、LAST信号,用于提供握手机制。

  • 信息源端使用VALID信号表示地址、数据和控制信息什么时候有效

  • 目的端使用READY信号表示什么时候可以接受信息

  • 读数据和写数据通道都包含一个LAST信号,表示什么时候时最后一帧信号

读操作结构示意图图:

写操作结构示意图图:

  • 读和写数据通道都包含各自的地址通道,地址通道包含了请求所需的地址和信息

  • 读数据通道包含了读数据和读响应的信息,由从机发给主机,读响应信号用于表示读传输是否完成

  • 写数据通道由主机发送给从机,包含了写数据的信息,通过WSTRB(频闪信号)表示当前数据的哪个字节有效(以字节为单位)

  • 写响应通道,由从机发送给主机通过写响应信号,用于表示写操作是否完成

  • 读数据通道和写响应通道还包含一个LAST信号

Note:这里的信号不清楚的建议去看文档IHI0022D

3.2 工作原理

1.时钟和复位

        AXI使用的是单端口时钟ACLK,所有的输入信号都在ACLK的上升沿被采集,同时所有的输出都在ACLK的上升沿后输出

        AXI协议的复位信号低电平有效,采用异步复位同步释放的原则。在复位后的,如果复位信号拉高,表示要正常工作状态,则下一个时钟后VALID信号拉高

2.通道的信号

写地址通道信号
Signal Source Description
AWID Master 写地址主设备ID,每个通道都有自己的交易ID
AWADDR Master

突发传输的初始地址

AWLEN Master 突发长度,发送的数据个数
AWSIZE Master 突发大小,数据的大小(最大32Bit)

0b000         1

0b001         2  

0b010         4

0b011         8

0b100        16

0b101        32

AWBURST Master 突发类型,地址变化

0b00        FIXED

0b01        INCR

0b10        WRAP

0b11        Reserved

AWLOCK Master 锁定事物,是正常传输还是独有传输 AXI4好像不支持
AWCACHE Master 内存形式,总线的存储类型 这里没使用
AWQOS Master 服务质量,在写/读通道上发送一个4位的Qos标识符 一般不使用
AWREGION Master
AWUSER Master 用户自定义
AWVALID Master 写地址通道Valid信号 握手信号
AWREADY Slave 写地址通道READY信号
写数据通道
Signal Source Description
WID Master 写数据主设备ID,每个通道都有自己的交易ID
WDATA Master

写数据

WSTRB Master 频闪信号,那个数据位有效
WLAST Master 写入的最后一个信号,本次突发传输的最后数据时的信号

AWUSER Master 用户自定义
AWVALID Master 写数据通道Valid信号 握手信号
WREADY Slave 写数据通道READY信号
写响应通道
Signal Source Description
BID Master 写响应主设备ID,每个通道都有自己的交易ID
BRESP Master

写入数据状态

OKAY:OK
EXOKAY:独占式OK
SLVERR:从机错误,数据已经接受
DECERR:解码错误
AWUSER Master 用户自定义
BVALID Slave 写数据通道Valid信号 握手信号
BREADY Master 写数据通道READY信号

3.工作机制

握手机制:

        AXI的5个独立通道各自发起通讯时,写端和接收端分别有两个准备信号。发送端的VALID信号和接收端的READY信号,只有当两个信号都为高电平时认为数据写入接收端,否则接收端数据通道不打开。(这里的数据包涵地址)

    每一个通道都支持全双工发送和接受数据,同时可以各自设置传输的开启和暂停。(这个功能是由于下面这条规则)
    一个通道的数据传输只发生在该通道的VALID和READY信号全是高电平的时候

PS:这里注意下,由于信号只有在ACLK的上升沿时才被读取,所以有图这边,在T3后数据才真的再传输。但是再过一个周期后,由于握手机制,数据又会停止传输

1
VALID在READY信号之前

选择信号:

        WSTRB:写数据通道和读数据通道使用, [3:0]寄存器数据。每一位对应32位数据(4Byte)的对应字节是否有效。例如:

        WSTRB = 1001,则写数据通道的数据Data,只有0-7 和 24-31位的数据有效(第一、4个Byte)

数据发送的时间:

        由于采用突发传输的方式,一个数据(例如32Bit)的发送只需要一个时钟周期即可完成。在本例中协议规定上升沿传递数据。

        DDR SDRAM是可以双边沿接收数据的,这里没有使用这种模式。

读响应状态:

在写入数据完成后,发送状态:
    LAST为下降沿后,即已经将状态写入BRESP数据中等待握手条件
    BVALID和BREADY为高时,发送状态

这个状态有两个:
    一个:写响应通道
    另一个:读数据通道

3.工作规则

AXI 具有以下管理突发使用的规则:

• 对于环绕突发,突发长度必须为 2、4、8 或 16

• 突发不得跨越 4KB 地址边界

• 不支持提前终止突发。

回环突发:

• 起始地址必须与每次传输的大小对齐

• 突发的长度必须是 2、4、8 或 16 次传输。

• 突发使用的最低地址范围与要传输的数据的总大小对齐,即为((突发中每个传输的大小)×(突发中的传输数))。这地址被定义为环绕边界。

• 每次传输后,地址以与INCR 突发相同的方式递增。然而,如果这个增加的地址范围是((环绕边界)+(要传输的数据的总大小))然后地址环绕到环绕边界。

• 突发中的第一次传输可以使用高于回绕边界的地址,适用于包装突发的限制。这意味着地址换行任何首地址高于回绕边界的 WRAP 突发。这种突发类型用于高速缓存行访问。

波形示意图,图片来自电子哥

 四、基于AXI4协议的DDR数据传输

4.1 实现功能

         采用AXI4-Full协议,PL端产生的数据通过总线协议写入DDR3模块中。然后在PS中进行数据处理。

        用自定义的AXI协议IP核,可以得到标准的传输协议AXI4,只需要修改写入的参数即可满足实现功能的要求。emmmm,这里使用Vivado的自定义IP核生成AXI协议,怎么生成的和代码这里我就省略步骤喽。

4.2 AXI4核的状态机

        整体的状态分为4个:

                ILDE:等待触发,只有当使能脉冲到达时才会进入写状态。

                WIRTE:写数据状态,只有等到设定的发送数据块全部发送后才会进入读数据状态。

                READ:读数据状态,同写状态。

                COMPARE:比较状态,将写入数据和读取的数据比较,出错后将error信号致1,同时将完成信号done致1,。返回等待触发状态ILDE。

4.3 代码的重要参数

        1.C_MASTER_LENGTH:代表写入的地址范围,通过REQ这个值,同时这个值规定了一次突发传输次数。 

        例C_MASTER_LENGTH  = 3,表示一次突发传输的地址范围大小是0-8(单位是字节Byte) 。同时REQ = 3 - 3 = 0, 这个值在后面作为写判断中止时使用。

C_NO_BURSTS_REQ = C_MASTER_LENGTH-clogb2((C_M_AXI_BURST_LEN*C_M_AXI_DATA_WIDTH/8)-1);

        [C_NO_BURSTS_REQ : 0]     write_burst_counter;

       write_burst_counter[C_NO_BURSTS_REQ]  = 1时发送停止。     

        2.write_index:代表一次突发传输中传输的数据个数,数据传输次数寄存器

        3.write_burst_counter:代表突发传输的次数

        4.M_AXI_AWBURST:代码里的突发方式只是个标识符,并没有真正的功能,需要自己在地址通道那里自行设置

        5.WSTRB:这个值默认是4b'1111,表示32位数据全要

4.4 自定义发送

          主要需要配置的参数如下图,然后修

Zynq AXI Quad SPI(Quad Serial Peripheral Interface)是一种基于Xilinx Zynq SoC(System on Chip)的高速并行存储设备接口。它提供了一种高性能、低延迟的数据访问方式,适合应用于需要高带宽读写操作的应用场景,如大规模数据处理、实时信号处理等。 ### 工作原理 AXI Quad SPI接口可以同时支持四个SPI(Serial Peripheral Interface)设备,并允许每个设备在连续的时间周期内独立接收和发送数据。这种设计使得系统能够同时管理多个外设之间的通信,提高了系统的整体效率和吞吐量。 ### 特点及优势 1. **高带宽**:相较于传统的单通道SPI接口,四通道的设计显著增加了数据传输速率,适用于对数据交换速度有极高要求的应用。 2. **灵活配置**:Zynq SoC的AXI Quad SPI通常支持多种工作模式和数据宽度选项,用户可以根据实际需求进行配置,实现最佳性能和资源利用。 3. **集成度高**:作为Zynq SoC的一部分,AXI Quad SPI与其他处理器核心和硬件模块共享丰富的内存和IO资源,减少了外部连接的需求,降低了系统复杂性和成本。 4. **软件友好**:通过AXI总线协议与SoC内部其他组件通信,AXI Quad SPI接口的驱动程序和软件栈相对成熟,易于集成到现有的系统架构中。 ### 应用领域 Zynq AXI Quad SPI广泛应用于各类工业自动化、通讯网络、数据中心以及高性能计算等领域,特别是那些需要处理大量数据流、快速响应时间或具备高度并行处理能力的应用。 ### 相关问题: 1. **如何选择合适的Zynq AXI Quad SPI设备?** - 考虑所需的最大数据速率、兼容的电源电压范围、封装形式以及是否有特定的错误检测和校正功能。 2. **Zynq SoC上AXI Quad SPI接口的具体配置步骤是什么?** - 包括确定工作模式(如全双工、半双工)、设定数据宽度、配置片选和命令寄存器等关键参数。 3. **AXI Quad SPI如何与其他Zynq SoC内部资源协同工作提高系统效能?** - 详细解释资源分配策略、优化内存访问路径以及减少系统级延迟能力的关键技巧。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值