【数字IC基础】一文搞懂AXI (Advanced eXtensible Interface) 协议

本文详细对比了AHB、APB和AXI总线,重点介绍了AXI协议的特性,包括其五个独立通道、乱序传输、突发传输模式,并探讨了AXI在SoC系统中的应用,尤其是AXI4、AXI4-Lite和AXI4-Stream的区别。此外,文章还阐述了AXI的握手机制、地址和数据通道的分离以及AXI在提高总线利用率和降低延迟方面的优势。

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

文章目录

一、AHB(Advanced High_performence Bus 先进高性能总线)、APB(Advanced Peripheral Bus 先进外设总线)、AXI(Advanced eXtensible Interface 先进可扩展接口)的对比

1、1 AHB、APB、AXI的应用场景对比

  • 1、AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器(CPU)、片上或片外的内存模块(RAM)和DMA等高效率模块
  • 2、APB主要用在低速且低功率的外设(如UART、 I2C),可针对外设作功率消耗及复杂接口的最佳化。APB 在AHB和低带宽的外设之间提供了通信的桥梁,所以APB是AHB或ASB(Advanced System Bus 先进系统总线)的二级拓展总线
  • 3、AXI是一种面向高性能、高带宽、低延迟的片内总线,支持读写并行、乱序传输、非对齐操作、只需要首地址的突发(Burst)传输等,比AHB更加快速

1、2 AHB、APB、AXI的性能对比

在这里插入图片描述

  • 1、总线宽度:指数据读写总线的宽度(如:HRDATA[31:0]、HWDATA[31:0]),一般配置成32位,但可扩展:
    • AXI:8、16、32、64、128、256、512、1024
    • AHB:32、64、128、256
    • APB:8、16、32
  • 2、AXI、AHB、APB通道特性
    • ①、AXI有五个独立通道:
      • 读取数据:
        • 读地址通道(ARxxx)
        • 读数据通道(Rxxx)
      • 写入数据:
        • 写地址通道(AWxxx)
        • 写数据通道(Wxxx)
      • 写操作响应通道(Bxxx)
    • ②、AHB属于三通道总线:
      • 读写数据通道
      • 读写地址通道
      • 写操作响应通道
    • ③、APB只有两个通道:
      • 读写地址通道
      • 读写数据通道

1、3 AHB和AXI突发传输的对比

  • 1、AHB:需要一次Burst传输的所有地址地址与数据锁定对应关系、后一次突发传输必须等待前次传输完成
  • 2、AXI:只需要首地址、可以连续发送多个突发传输首地址无需等待前次突发传输完成、两次传输的数据可以交错传递、大大提高了总线的利用率!!!!!
  • 3、AHB Burst传输只有八种模式:single、INCR、INCR4、WRAP4、INCR8、WRAP8、INCR16、WRAP16
  • 4、AXI Burst传输可以指定传输数据的个数:1-16

SoC系统中,均以AXI总线为主总线,通过桥连接AHB总线与APB总线,这样能够增加SoC系统的灵活性,更加合理地把不同特征IP分配到总线:

  • AHB总线与AXI总线均适用于高性能、高带宽的SoC系统,但AXI具有更好的灵活性,而且能够读写通道并行发送,互不影响
  • AXI总线支持乱序传输,能够有效地利用总线的带宽,平衡内部系统

二、AXI 概述

2、1 AXI总线、接口、协议(AXI4、AXI4-Lite与AXI4-Stream区别与联系)

  • 1、总线、接口和协议常常放在一起,但是他们有各自的含义:
    • ①、总线:一组由各种逻辑器件构成的数据传输通道,一般由数据线、地址线、控制线等构成;
    • ②、接口:一种连接标准,又常常被称为物理接口
    • ③、协议:传输数据的规则
  • 2、AXI总线分为AXI4、AXI4-Lite、AXI4-Stream
    • ①、AXI4:(For high-performance memory-mapped requirements.)主要面向高性能内存映射通信的需求(如读写DDR、使用BRAM控制器读写BRAM等),是面向内存映射的接口,允许最大256个数据突发传输
    • ②、AXI4-Lite:(For simple, low-throughput memory-mapped communication )用于简单、低吞吐量的内存映射通信(例如,与控制寄存器和状态寄存器之间的通信)占用很少的逻辑单元
      • AXI4-Lite 是 AXI4 的删减版,适合轻量级的应用,也是包含 5 个通道,不同的是每个通道都进行了简化,去掉了对突发传输的支持(Burst),只允许每个transfer传输一个数据
    • ③、AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输(视频、图像等流式数据)去掉了地址项,允许无限制的数据突发传输规模
      • AXI4-Stream为流数据的传输定义了单个通道
      • 允许无限制的数据突发传输
    • ④、AXI4、AXI4-Lite与AXI4-Stream的共同点:
      • 均使用Ready、Valid握手机制进行通信。
  • 3、AXI接口
    • AXI-GP接口(4个):是通用的AXI接口;
    • AXI-HP接口(4个):是高性能/带宽的标准的接口;
    • AXI-ACP接口(1个):是ARM多核架构下定义的一种接口。
  • 4、AXI协议:AXI4,AXI4-Lite,AXI4-Stream都是AXI4协议
    ,细节上略微有差别。

2、2 AXI协议特点:

  • 五个独立的地址读写、数据读写、写操作响应通道
  • 支持发出多个未完成地址(outstanding addresses):可连续发出传输地址,无需等待前次传输完成
    在这里插入图片描述
  • 支持乱序传输(out-of-order transaction):更快内存区域的传输无需等待较慢内存区域的传输完成,减少传输延迟的影响
    在这里插入图片描述
  • 在乱序传输的基础上,支持具有不同AWID的交叉数据写入(Interleaving Transfer)
    在这里插入图片描述
  • 支持使用字节选通信号(byte strobes)非对齐传输
  • 仅发出首地址的突发(Burst)传输
  • AXI 特点:
    • ①、单向通道体系结构:信息流只以单方向传输,简化时钟域间的桥接,减少门数量;当信号经过复杂的片上系统时,减少延时。
    • ②、支持多项数据交换:通过并行执行突发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。
    • ③、独立的地址和数据通道:地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。

三、AXI 架构

3、1 AXI 通道

  • 1、AXI总线共有5个独立的通道,每个传输通道都是单方向
    • ①、这五个独立通道中的每一个都包含一组信息信号和一个双路的VALIDREADY握手机制
      • 发起方:使用VALID信号来指示通道中的数据和控制信息什么时候有效
      • 接收方:使用READY信号来表示何时可以接收数据
      • 数据发起方,发送VALID信号,数据接收方,返回一个READY信号。
    • ②、读数据写数据通道都包括一个LAST信号,用来指明一个transaction传输的最后一个数据
    • ③、读数据通道传送着slave到master读数据读响应信息
      • 读数据总线宽度可以是8,16,32,64,128,256,512,1024位;
      • 读响应信息指明读事务的完成状态
    • ④、写数据通道传送着master向slave写数据
      • 写数据总线宽度可以是8,16,32,64,128,256,512,1024位;
      • 每八位数据都会有一个byte lane strobe ,用来指明数据总线上面的哪些byte有效(即WSTRB[n] = 1,表示第n个字节有效(n从0开始)
    • ⑤、写响应通道提供了slave响应写事务的一种方式,slave只会在一个transaction传输结束时发送一个响应信号。对每个突发发生一次,而不是对突发中的每个单独数据传输发生一次
      在这里插入图片描述
  • 2、地址通道(address channel)包含:地址(ADDR)和控制信息(control)
  • 3、读transcation的结构图:
    image-20230212165244989
  • 4、写transcation的结构图:
    image-20230212165323368
  • 5、一个典型的AXI系统由多个Master和Slave组成,通过某种形式的互连连接在一起,如下图所示:

image-20230212171241068

3、2 AXI 信号描述

  • 1、AXI五个通道对应的信号有不同的首字母表示:读地址通道:ARxxx写地址通道:AWxxx读数据通道:Rxxx写数据通道:Wxxx写操作响应通道:Bxxx
  • 2、全局(系统)信号:Axxx
  • 3、本节将以32位数据总线(data bus)、4位写数据有效信号(write data strobe)和4位ID字段(ID fields)为例介绍AXI信号

3、2、1 全局信号(Axxx)

在这里插入图片描述

3、2、2 写地址通道信号(AWxxx)

信号描述
AWID[3:0]主机写地址ID,这个信号是写地址信号组的ID标签
==AWADDR[31:0] ==主机写地址
AWLEN[3:0]主机突发式写的长度。此长度决定突发式写所传输的数据的个数
==AWSIZE[2:0] ==主机突发式写的大小,表示一次Burst传输中,每个数据的大小
AWBURST[1:0]主机Burst传输的类型
AWLOCK[1:0]主机锁定类型
AWCACHE[3:0]主机Cache类型
AWPROT[2:0]主机保护类型
AWVALID主机表示写地址和控制信息是有效的。1 = 地址和控制信息有效;0 = 地址和控制信息无效。地址和控制信号会一直保持稳定,直到AWREADY变为高。
AWREADY从设备写地址准备好。这个信号用来指明设备已经准备好接受地址和控制信息了。1 = 设备准备好;0 = 设备没准备好

3、2、3 写数据通道信号(Wxxx)

信号描述
WID[3:0]主机写数据ID,这个信号是写数据传输的ID标签。在一次写事务中,WID必须和AWID保持一致
WDATA[31:0]主机写数据,写数据总线可以是:8、16、32、64、128、256、512、1024bits
WSTRB[3:0]主机写选通信号。表示在一个数据传输WDATA[31:0]中,那些字节的数据有效,每一bit对应WDATA[31:0]的一个字节
WLAST主机表示一次突发写的最后一个数据
WVALID主机表示写数据和选通信号是有效的。1 = 有效;0 = 无效
WREADY从设备写操作准备好了。这个信号用来指明从设备能接收写数据了。1 = 设备准备好;0 = 设备没准备好
  • 1、WSTRB[n]表示的WDATA区间为:WDATA[((8*n)+7) : (8*n)]
    在这里插入图片描述

3、2、4 写响应通道信号(Bxxx)

信号描述
BID[3:0]从设备响应ID,这个信号是写响应的ID标签。在一次写事务中,BID必须和AWID保持一致
BRESP[1:0]从设备写响应信号从设备告诉主机写传输的状态:OKAY、EXOKAY、SLVERR、DECERR;从机告诉主机,写的对不对
BVALID从设备表示写响应有效,写响应准备好了。1 = 有效;0 = 无效
BREADY主机主机可以接收写响应信号了。1 = 主机准备好;0 = 主机没准备好

3、2、5 读地址通道信号(ARxxx)

信号描述
ARID[3:0]主机读地址ID,这个信号是读地址信号组的ID标签
==ARADDR[31:0] ==主机读地址
ARLEN[3:0]主机突发式读的长度。此长度决定突发式读所传输的数据的个数
==ARSIZE[2:0] ==主机突发式读的大小,表示一次Burst传输中,每个数据的大小
ARBURST[1:0]主机Burst读传输的类型
ARLOCK[1:0]主机锁定类型
ARCACHE[3:0]主机Cache类型
ARPROT[2:0]主机保护类型
ARVALID主机表示读地址和控制信息是有效的。1 = 地址和控制信息有效;0 = 地址和控制信息无效。地址和控制信号会一直保持稳定,直到ARREADY变为高。
ARREADY从设备读地址准备好。这个信号用来指明从设备已经准备好接受地址和控制信息了。1 = 设备准备好;0 = 设备没准备好

3、2、6 读数据通道信号(Rxxx)

信号描述
RID[3:0]从设备读数据ID,这个信号是读数据传输的ID标签。在一次读事务中,RID必须和ARID保持一致
RDATA[31:0]从设备读数据,读数据总线可以是:8、16、32、64、128、256、512、1024bits
RRESP[1:0]从设备读响应信号。表示在一个读传输的状态:OKAY、EXOKAY、SLVERR、DECERR从机告诉主机,读的对不对
RLAST从设备表示一次突发读的最后一个数据
RVALID从设备表示读数据有效,读数据准备好了。1 = 有效;0 = 无效
RREADY主机读操作准备好了。这个信号用来指明主机可以读从机发出的数据了。1 = 主机准备好;0 = 主机没准备好

3、3 AXI 握手机制

  • 1、AXI的五个独立通道都使用握手机制来传输数据及控制信号
    • 传输源:产生VLAID信号来指明何时数据或控制信息有效;
    • 目地源:产生READY信号来指明已经准备好接受数据或控制信息。
  • 2、当VLAIDREADY同时为高时,数据传输才能发生
  • 3、VALIDREADY信号的出现有三种关系:
    • VALID先高,READY后高;
    • VALID后高,READY先高;
    • VLAIDREADY同时为高。

3、3、1 VALID先高,READY后高

在这里插入图片描述

3、3、2 VALID后高,READY先高

在这里插入图片描述

3、3、3 VLAIDREADY同时为高

在这里插入图片描述

3、3、4 通道握手信号之间的依赖性

  • 单箭头指向的信号能在箭头起点信号之前或之后断言(使能)
  • 双箭头指向的信号必须在箭头起点信号断言之后断言
  • 1、一对VALID信号和READY信号之间没有先后关系:AXI接口可以等到检测到VALID才断言对应的READY,也可以检测到VALID之前就断言READY;
  • 2、读数据通道:
    • slave可以提前准备好先ARREADY,再等待读地址有效再ARVALID;也可以在地址有效之后先ARVALID,再准备好接收地址再ARREADY
    • slave只有在成功接收读地址之后,才能将对应地址的数据准备好必须先ARVAILD和ARREADYRVALID
      在这里插入图片描述
  • 3、写数据通道:
    • master不能等到slave准备好之后先AWREADY/WREADY再使地址和数据有效再AWVALID/WVALID
    • master在发送写数据之前WVALID之前,从设备必须已经读取到了写地址AWREADY必须为高,不然数据就不知道要存在哪儿了
    • slave可以等待信号AWVALID或WVALID信号有效或者两个都有效之后再给出AWREADY信号
    • slave可以等待AWVALID或WVALID信号有效或者两个信号都有效之后再给出WREADY信号
      在这里插入图片描述

3、4 AXI Burst传输

AXI是基于BURST传输的!!!!!

3、4、1 AXI Burst传输相关信号及概念

  • 1、与Burst传输相关的信号:
    • ①、AWLEN[3:0]、ARLEN[3:0]:决定Burst传输的数据个数
    • ②、AWSIZE[2:0]、ARSIZE[2:0]:一次Burst传输的每个数据的最大位数:8到1024bits(1到128bytes)
    • ③、ARBURST[1:0]或AWBURST[1:0]:决定突发传输的类型00(FIXED)、01(INCR)、10(WRAP)
  • 2、AXI支持可变长度的突发每次突发传输的数据个数可以是:1到16个AWLEN[3:0]、ARLEN[3:0]
    • 突发传输的数据个数 = AWLEN[3:0]/ARLEN[3:0] +1
      image-20230212211028247
  • 3、AWSIZE[2:0]、ARSIZE[2:0]:一次Burst传输的每个数据的最大位数:8到1024bits(1到128bytes)

注意:任何传输的SIZE不能超过数据总线WDATD、RDATA的宽度

  • 如:如果WDATA位宽为32,那么每个transfer,传输字节数不超过4

在这里插入图片描述

  • 4、三种突发类型:由ARBURST[1:0]或AWBURST[1:0]决定突发传输的类型
    • ①、FIXED(Fixed-address burst:固定传输地址的burst传输)
      • 每一次传输的地址都不变,重复对一个相同的位置进行存取,例如:FIFO
    • ②、INCR(Incrementing-address burst :可指定长度的增量式突发传输)
      • 每一次读写的地址都比上一次的地址增加一个固定的值
      • 增量值取决于传输的大小AWSIZE[2:0]、ARSIZE。例如,在大小为4字节的突发中,每个传输的地址是前一个地址加4
      • 注意:AHB的INCR:指不限定长度的增量式突发传输
    • ③、==WRAP(Wrapping burst:有回环边界的回环传输) ==
      • 在一个回环突发中,当到达回环边界时,地址会回环到一个较低的地址
      • 对于Wrapping Bursts突发的长度必须为2、4、8或16
      • 起始地址必须与传输的size对齐:起始地址可以被**一个transfer的size(burst传输的一个数据的字节数)**整除
  • 回环传输通常用于从memory中读取cache line
    因为master对cache的访问通常是cache line中的某些bytes,但当发生cache miss时,从memory读回来的是整个cache line。而此时master发送的地址却不一定是cache line的起始地址,而可能位于中间,因此递增到upper boundary时需要回卷到lower boundary,才能将该cache line读完

image-20230212212306232

  • 5、AXI Burst读写不能超过4K的地址边界!!!也就是说当Burst传输地址,是4K的倍数时,必须要结束当前Burst,重新开始一次Burst传输
    • AHB Burst传输1K的地址边界!!!!
  • 6、不支持提前终止burst传输

3、4、2 AXI Burst传输地址计算

  • 1、变量含义:
变量名含义
Start_Address主机发送的起始地址AWADDR、ARADDR
Number_Bytes一个transfer(一个Burst传输中的一个数据)的最大字节数2^WSIZE[2:0]、2^RSIZE[2:0]
Data_Bus_Bytes数据总线上面==byte lanes(总线宽度Data_Bus_Bytes 包括多个bytes,每个byte称为一个byte lane)==的数量
Aligned_Address对齐Burst传输的起始地址
Burst_Length一次突发式读写所传输的数据的个数AxLEN + 1
Address_N第N个transfer的地址,N:每一次突发式读写所传输的地址数量,范围是1-16。Address_1 = Start_Address;Address_N = Aligned_Address + (N – 1) x Number_Bytes
Lower_Wrap_Boundary回环边界(下界)
Upper_Wrap_Boundary回环边界(上界)
Lower_Byte_Lane传输的最低地址的byte lane
Upper_Byte_Lane传输的最高地址的byte lane
INT(x)对x进行向下取整
  • 2、Burst对齐传输的起始地址Aligned_Address:判断Burst传输是否为对齐传输
    • 对齐:一次transaction(一次Burst传输)的起始地址可以被一个transfer的size(最大字节数)整除
    • Aligned_Address= Start_Address ,则为对齐传输,否则为非对齐传输

Aligned_Address = (INT(Start_Address / Number_Bytes) ) x Number_Bytes

  • 3、WRAP的上下界地址计算:WPAP中,起始地址每次增加Number_Bytes个,地址到达上界后,下一个transfer地址回到下界

    • 回环下界:是根据与burst总字节对齐的起始地址计算的
      Lower_Wrap_Boundary = (INT(Start_Address / (Number_Bytes * Burst_Length))) * (Number_Bytes * Burst_Length)
    • 回环上界回环下界+burst总字节数
      UPPer_Wrap_Boundary = Lower_Wrap_Boundary + (Number_Bytes * Burst_Length)
  • 4、Byte Lane的计算
    总线宽度data_bus_bytes包括多个bytes,每个byte称为一个byte lane,STRB就是用来标记byte lane是否valid的信号在某些情况下,data bus中并非每个byte lane都是valid的,例如:

    • ①、单个transfer的字节数 ≠ 数据总线的宽度(小于)
    • ②、非对齐传输,即start_addr ≠ aligned_addr
    • ③、master逻辑主动丢弃某些bytes(与master功能模块的设计逻辑有关)
    • 在①、②两种情况中,data bus中有效的最低byte lane与最高byte lane可以通过如下方式进行计算:
      Lower_Byte_Lane = Address_N - INT(Address_N /Data_Bus_Bytes ) * Data_Bus_Bytes
      • Upper_Byte_Lane 需要分情况讨论:
        • 对齐传输(Start_Address = Aligned_Address):
          Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes- 1
        • 非对齐传输:
          Upper_Byte_Lane = Aligned_Address+ Number_Bytes- 1 - INT(Address_N /Data_Bus_Bytes ) * Data_Bus_Bytes

3、5 AXI Burst传输示例

3、5、1 Read burst example

下图展示了四个传输的读突发,在本例中,Master驱动地址(包含控制信号),Slave在一个周期后接受它。

image-20230212172157658

地址出现在地址总线上后,数据传输发生在读数据通道上。Slave保持VALID信号低,直到读取数据可用。对于突发的最终数据传输,Slave拉高RLAST信号以显示正在传输最后一个数据。

3、5、2 Overlapping read burst example(重叠读突发示例,或者又可叫outstanding)

下图显示Master如何在Slave接受第一个地址后驱动另一个突发地址这使得Slave可以在第一个突发完成的同时开始处理第二个突发的数据
在这里插入图片描述

3、5、3 Write burst example

下图显示一个写事务,当Master在写地址通道上发送地址和控制信息时,进程开始。然后,Master通过写数据通道发送每一项写数据。当Master发送最后一个数据项时,WLAST信号变为HIGH。当Slave接受了所有数据项后,它将向Master驱动一个写响应,以指示写事务已经完成。
image-20230212215105033

四、AXI 的传输类型详解(Outstanding Transfer超前传输、Out-of-order Transfer乱序传输、Interleaving Transfer交叉传输、Narrow Transfer窄传输、Unaligned Transfer非对齐传输)

4、1 Outstanding Transfer超前传输

  • outstanding addresses:可连续发出传输地址,无需等待前次传输完成
  • AXI的通道是分离的,因此master不需要等待前一笔操作A响应完成就可以发送下一笔操作请求B
  • outstanding的能力指的是:Master在等到响应信号之前,可以持续发送的地址个数(读/写命令个数),也就是outstanding depth
  • outsanding可以减少总数据量的传输延迟、提高总线利用率
  • outsanding分为:读outstanding、写outstanding
  • outsanding传输,要求Master和slave都具有outstanding能力!!!!!

注:主机具有outstanding能力时,会将awvalid拉高多个周期,若从机也支持outstanding,则相应的将awready拉高多个周期;

  • 如果slave不支持outstanding怎么办呢?那就在接收完地址A之后,把awready拉低,等数据写完,或者读完,再拉高awready

PS:

  • Burst可以减少地址通道的交互,提升单笔传输的效率
  • Outstanding可以减少多笔传输之间的等待,提升多笔传输的效率

4、2 Out-of-order Transfer乱序传输

  • 1、AXI为啥可以乱序传输呢?
    • AXI的每个通道都有自己的ID,用来区分不同的transaction
    • 因此只需要保证一个写事务的AWID、WID一致读事务的ARID、RID一致,即可保证数据的正确传输;
    • 不需要管事务的前后关系(不是说事务A的地址和控制信号先发,那事务A的数据一定要先读写)
    • 哪个事务先准备好,就可以先发送到总线上
      在这里插入图片描述
  • 2、out of order乱序的实现思路:
    • ①、不同事务的AxIDAWID、ARID如果一致,那么这些事务就不能实现out of order,只能进行顺序完成;
    • ②、不同事务AxIDAWID、ARID不同,那么这些事务之间可以乱序
  • 3、Out-of-order分为读乱序写乱序(尤其注意!!!写乱序不是写数据乱序,而是写响应信号乱序,是针对slave的)
    • ①、==读乱序(读数据乱序):==如果一个slave连续收到多个ARID不同的transaction,而slave发送到总线上的读数据RID的顺序与master发出的ARID顺序不同,则称为读乱序
      在这里插入图片描述
      读乱序的深度由read data reordering depth决定,代表slave中允许pending的adress个数;
      当read data reordering depth = 1时代表不允许读乱序。
    • ②、==写乱序(写响应信号乱序):==如果一个slave连续收到多个AWID不同的transaction,而slave发送到总线上的响应信号BID的顺序与master发出的AWID顺序不同,则称为写乱序
      在这里插入图片描述

4、3 Interleaving Transfer交叉传输

  • 1、啥是Interleaving ?
    • ①、==不同事务的数据(不同Burst的transfer)==可以被打散混合排列注意!!!!这里说的混合排列是不同事务间的,同一个事务的数据是不能被打乱的,还是按照顺序读写
    • ②、例如:事务A数据是a1 a2,事务B数据是b1 b2;如果不支持交织,那么总线上数据的传输需要是a1 a2 b1 b2或者b1 b2 a1 a2;如果支持交织,就可以是a1 b1 a2 b2(或者别的插入顺序)
  • 2、Interleaving 也分为读交叉写交叉
    • ①、读交叉:简单来说,读交织是out of order乱序的其中一种实现形式。out of ordertransaction级别的,而 读Interleaving 则是transfer级别的,读交叉也是通过ARID/RID来标识数据属于哪一个事务
      在这里插入图片描述
    • ②、写交叉WID提供了写交织的不同事务的识别不同WID的写数据transfer可以间插发送,但需要注意:
      • 每笔transaction的第一个transfer需与写数据发送的顺序严格一致
      • 为了避免死锁dead lock,支持写交织的slave必须一直支持写交织,不能某些时候支持,而某些时候不支持;
      • 写交织在AXI4中被弃用。

4、4 Narrow Transfer窄传输

  • 1、当本次传输事务中**数据位宽(transfer的位宽)小于通道本身的数据位宽(WDATD、RDATA)**时,称为窄位宽数据传输(Narrow Transfer);
  • 2、窄传输中通过master发出的字节有效信号 WSTRB调整有效数据的字节位置,能够使slave无需进行数据重组等工作;
  • 3、窄位宽写传输(需要用到WSTRB 信号):由master告知slave,数据总线中,哪些字节是有效的
    • WSTRB 信号:每1位对应WDATA中的一个字节(8bit);
    • 对应关系:WSTRB[n] 对应WDATA[(8*n+7) : 8*n]
      在这里插入图片描述
      在这里插入图片描述
  • 4、针对一些特定的寄存器读写,或者在不同数据位宽的总线传输中会使用窄传输操作
  • 5、该结构有利于 memory 类型的slave进行写入处理:
    在这里插入图片描述
  • 第一拍,英文协议中叙述说起始地址为 0x4 ,可以理解为实际是从地址 0x4 开始写入了 32bit 数据。slave获取整个总线上的 64bit 数据存储至存储介质中,比如 DDR,并利用 WSTRB 作为 mask 信号屏蔽无效的低 32 bit(比如 DDR 的 DQM
    信号)。这时候对于存储介质的写入地址为 0x0,实际写入的起始地址是0x4。
  • 第二拍,slave获取整个总线上的 64bit 数据存储至存储介质中,并利用 WSTRB 作为 mask 信号屏蔽无效的高 32 bit。这时候存储介质的写入地址为 0x8,实际为从地址 0x8 开始写入了 32bit 数据。
  • 第三拍,slave获取整个总线上的 64bit 数据存储至存储介质中,并利用 WSTRB 作为 mask 信号屏蔽无效的低 32 bit。这时候存储介质的写入地址为 0x8,但实际只从地址 0xC 开始写入了 32bit 数据。

4、5 Unaligned Transfer非对齐传输

  • 1、非对齐传输指:突发传输的首字节地址,即起始地址与突发传输transfer位宽不对齐

    • eg:突发传输中数据位宽为32bit32bit = 0010_0000 = 0x20如果起始地址为0x20的整数倍(例如:0x00或0x20或0x40),则为对齐传输否则为非对齐传输(例如:0x01或0x21
  • 2、对于非对齐传输,主机会进行两项操作

    • 即使起始地址非对齐,也保证所有传输是对齐的
    • 首个 transfer 中增加填充数据将首次传输填充至对齐填充数据使用 WSTRB 信号标记为无效
      在这里插入图片描述
  • 3、在读传输中,slave也按照同样的原则,在读数据中填充无效数据实现对齐,由master自行分离

参考

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReRrain

觉得写的不错,不妨请我喝杯~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值