[X]关闭

2-3-01 AXI4总线协议介绍

文档创建者:uisrc
浏览次数:593
最后更新:2023-12-30
文档课程分类
AMD: FPGA部分(2024样板资料) » 2_FPGA实验篇(仅旗舰) » 3-FPGA AXI 总线入门
软件版本:vitis2021.1(vivado2021.1)
操作系统:WIN10 64bit
硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA
登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!
1概述
起初SoC片上总线处于发展阶段,不像微机总线那样成熟,目前还没有统一的标准,因此各大厂商和组织纷纷推出自己的标准,以便在未来的SoC片上总线标准中占有一席之地。ARM公司就在1995年推出了自己的总线——AMBA(Advanced Microcontroller Bus Architecture,高级微处理器总线架构)。它独立于处理器和制造工艺技术,增强了各种应用中的外设和系统宏单元的可重用性,非常适合于现代大规模集成电路设计自动化的要求。
AMBA3.0中新增加了一种总线——AXI(Advanced eXtensible Interface,高级扩展接口)。它是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。AXI 是AMBA 中一个新的高性能协议。AXI 技术丰富了现有的AMBA 标准内容,满足超高性能和复杂的SoC设计的需求。
2 AXI总线协议介绍2.1 AXI总线概述
在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协议不再本文中接收,后面有单独介绍的文章。
2.2 AXI协议特点
AMBA AXI 协议支持支持高性能、高频率系统设计。
  • 适合高带宽低延时设计
  • 无需复杂的桥就能实现高频操作
  • 能满足大部分器件的接口要求
  • 适合高初始延时的存储控制器
  • 提供互联架构的灵活性与独立性
  • 向下兼容已有的AHB和APB接口
    关键特性:
  • 分离的地址/控制、数据相位
  • 使用字节选通,支持非对齐的数据传输
  • 基于 burst 传输,只需传输首地址
  • 读写数据通道分离,能提供低功耗 DMA
  • 支持多种寻址方式
  • 支持乱序传输
  • 易于添加寄存器级来进行时序收敛

    2.3 AXI 读写架构
    AXI协议是基于 burst 的传输,并且定义了以下5个独立的传输通道:
  • 读地址通道;
  • 读数据通道;
  • 写地址通道;
  • 写数据通;
  • 写响应通道;
    地址通道携带控制消息,用于描述被传输的数据属性;数据传输使用写通道来实现master到slave的传输,slave使用写响应通道来完成一次写传输;读通道用来实现数据从slave到master的传输。
    AXI总线由5个通道构成,读写地址和数据总线都分开;

    通道名称
    通道功能
    数据流向
    read address
    读地址通道
    主机->从机
    read data
    读数据通道(包括数据通道和读响应通道)
    从机->主机
    write address
    写地址通道
    主机->从机
    write data
    写数据通道(包括数据通道和每8bit一个byte的写数据有效信号)
    主机->从机
    write response
    写响应通道
    从机->主机



    2.4 AXI-4总线信号功能

    1:时钟和复位

    信号
    方向
    描述
    ACLK
    时钟源
    全局时钟信号
    ARESETn
    复位源
    全局复位信号,低有效



    2:读地址通道信号

    信号
    方向
    描述
    ARID
    主机to从机
    读地址ID,用来标志一组写信号
    ARADDR
    主机to从机
    读地址,给出一次读突发传输的读地址
    ARLEN
    主机to从机
    ARLEN[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传输
    ARSIZE
    主机to从机
    读突发大小,给出每次突发传输的字节数支持1、2、4、8、16、32、64、128
    ARBURST
    主机to从机
    突发类型:
    2'b00 FIXED:突发传输过程中地址固定,用于FIFO访问
    2'b01 INCR :增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
    2'b10 WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)
    2'b11 Reserved
    ARLOCK
    主机to从机
    总线锁信号,可提供操作的原子性
    ARCACHE
    主机to从机
    内存类型,表明一次传输是怎样通过系统
    ARPROT
    主机to从机
    保护类型,表明一次传输的特权级及安全等级
    ARQOS
    主机to从机
    质量服务QoS
    ARREGION
    主机to从机
    区域标志,能实现单一物理接口对应的多个逻辑接口
    ARUSER
    主机to从机
    用户自定义信号
    ARVALID
    主机to从机
    有效信号,表明此通道的地址控制信号有效
    ARREADY
    从机to主机
    表明"从"可以接收地址和对应的控制信号



    3:读数据通道信号

    信号名
    方向
    描述
    RID
    从机to主机
    一次读传输的ID tag
    RDATA
    从机to主机
    读数据
    RRESP
    从机to主机
    读响应,表明读传输的状态
    RLAST
    从机to主机
    表明此次传输是最后一个突发传输
    RUSER
    从机to主机
    用户自定义信号
    RVALID
    从机to主机
    写有效,表明此次写有效
    RREADY
    主机to从机
    表明从机可以接收写数据



    4:写地址通道信号

    信号
    方向
    描述
    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从机
    写突发大小,给出每次突发传输的字节数支持1、2、4、8、16、32、64、128
    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主机
    表明"从"可以接收地址和对应的控制信号



    5:写数据通道信号

    信号名
    方向
    描述
    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
    主机to从机
    写有效,表明此次写有效
    WREADY
    从机to主机
    表明从机可以接收写数据



    6:写响应信号

    信号名    
    方向    
    描述      
    BID
    从机to主机
    写响应ID tag
    BRESP
    从机to主机
    写响应,表明写传输的状态
    BUSER
    从机to主机
    用户自定义
    BVALID
    从机to主机
    写响应有效
    BREADY
    主机to从机
    表明主机能够接收写响应



    2.5数据有效的情况
    AXI4所采用的是一种READY,VALID握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。传输源产生VLAID信号来指明何时数据或控制信息有效。而目地源产生READY信号来指明已经准备好接受数据或控制信息。传输发生在VALID和READY信号同时为高的时候。VALID和READY信号的出现有三种关系。
    VALID先变高READY后变高。时序图如下:
    2504661-20231230142845383-1218143168.jpg
    在箭头处信息传输发生。
    READY先变高VALID后变高。时序图如下:
    2504661-20231230142845889-405383106.jpg
    同样在箭头处信息传输发生。
    VALID和READY信号同时变高。时序图如下:
    2504661-20231230142846315-79233893.jpg
    在这种情况下,信息传输立马发生,如图箭头处指明信息传输发生。
    需要注意的是允许 READY  信号等待 VALID 信号再有效,即使从机准备好,也可以不提供READY信号,等到主机发送VALID信号再提供READY信号。对应的VALID信号不允许等待READY信号,即不允许VALID等待READY信号拉高后再拉高,否则容易产生死锁现象。

    2.6 通道信号要求
    通道握手信号:每个通道有自己的xVALID/xREADY握手信号对。
    写地址通道:当主机驱动有效的地址和控制信号时,主机可以断言AWVALID,一旦断言,需要保持AWVALID的断言状态,直到时钟上升沿采样到从机的AWREADY。AWREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言AWVALID,一个用来断言AWREADY);当AWREADY为高时,从机必须能够接受提供给它的有效地址。
    写数据通道:在写突发传输过程中,主机只能在它提供有效的写数据时断言WVALID,一旦断言,需要保持断言状态,知道时钟上升沿采样到从机的WREADY。WREADY默认值可以为高,这要求从机总能够在单个周期内接受写数据。主机在驱动最后一次写突发传输是需要断言WLAST信号。
    写响应通道:从机只能它在驱动有效的写响应时断言BVALID,一旦断言需要保持,直到时钟上升沿采样到主机的BREADY信号。当主机总能在一个周期内接受写响应信号时,可以将BREADY的默认值设为高。
    读地址通道:当主机驱动有效的地址和控制信号时,主机可以断言ARVALID,一旦断言,需要保持ARVALID的断言状态,直到时钟上升沿采样到从机的ARREADY。ARREADY默认值可高可低,推荐为高(如果为低,一次传输至少需要两个周期,一个用来断言ARVALID,一个用来断言ARREADY);当ARREADY为高时,从机必须能够接受提供给它的有效地址。
    读数据通道:只有当从机驱动有效的读数据时从机才可以断言RVALID,一旦断言需要保持直到时钟上升沿采样到主机的BREADY。BREADY默认值可以为高,此时需要主机任何时候一旦开始读传输就能立马接受读数据。当最后一次突发读传输时,从机需要断言RLAST。
    AXI 协议要求通道间满足如下关系:
  • 写响应必须跟随最后一次burst的的写传输
  • 读数据必须跟随数据对应的地址
  • 通道握手信号需要确认一些依耐关系

    2.7 传输结构

    3.4.1 地址结构
    AXI 协议是基于 burst 的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。

    3.4.2 突发长度(AxLEN
    突发长度为每次突发传输的传输次数(transfers 的次数),AXI3 范围限制1~16(AXI4 增量模式1~256)且不能跨越4kb的地址空间,每次突发传输不允许提前终止(可以通过关闭所有数据字段的方式使一段传输数据无效,但传输行为必须完成)。
  • ARLEN[7:0]  决定读传输的突发长度;
  • AWLEN[7:0]  决定写传输的突发长度;
    AXI3 只支持 1~16 次的突发传输(Burst_length=AxLEN[3:0]+1)
    AXI4 扩展突发长度支持 INCR 突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_Length=AxLEN[7:0]+1)。
    AXI burst 传输具有如下规则:
  • wraping burst ,burst长度必须是2,4,8,16
  • burst不能跨4KB边界
  • 不支持提前终止burst传输
    所有的组件都不能提前终止一次 burst 传输。然而,主机可以通过解断言所有的写的strobes来使非所有的写字节来减少写传输的数量。读burst中,主机可以忽略后续的读数据来减少读个数。也就是说,不管怎样,都必须完成所有的burst传输。
    Notes:对于 FIFO,忽略后续读数据可能导致数据丢失,必须保证突发传输长度和要求的数据传输大小匹配。

    3.4.3 突发大小(AxSIZE
    AxSIZE 定义了每次突发 transfers 的字节数
    ARSIZE[2:0],读突发传输;AWSIZE[2:0],写突发传输。

    AxSIZE[2:0]
    Bytes in transfer
    3'b000
    1
    3'b001
    2
    3'b010
    4
    3'b011
    8
    3'b100
    16
    3'b101
    32
    3'b110
    64
    3'b111
    128



    3.4.4 突发类型(AxBURST
    FIXED:突发传输过程中地址固定,用于 FIFO 访问。
    INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
    WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。

    AxBURST[1:0]
    Burst Type
    Descriptions
    2'b00
    FIXED
    FIXED:突发传输过程中地址固定,用于 FIFO 访问。
    2'b01
    INCR
    INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
    2'b10
    WRAP
    WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。
    2'b11
    Reserved




    3.4.5 突发传输地址
    Start_Address = AxADDR
    Number_Bytes = 2 ^ AxSIZE
    Burst_Length = AxLEN + 1
    Aligned_Addr = (INT(Start_Address / Number_Bytes)) x Number_Bytes。//INT表示向下取整。
    对于INCR突发和WRAP突发但没有到达回环边界,地址由下述方程决定:
    Address_N = Aligned_Address + (N-1) x Number_Bytes
    WRAP突发,突发边界:
    Wrap_Boundary=(INT(Start_Address / (Number_Bytes x Burst_Length))) x (Number_Bytes x Burst_Length)

    2.5突发式读写

    1:突发式写时序图
    2504661-20231230142851690-1483495511.jpg
    2504661-20231230142852128-1206571870.jpg
    这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

    2:突发式读的时序图
    2504661-20231230142852580-1232965936.jpg
    2504661-20231230142852953-581571013.jpg
    当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则