AXI协议详解-AMBA总线协议AHB、APB、AXI对比分析

作者:碎碎思OpenFPGA微信公众号

在基于IP复用的SoC设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。

AMBA 2.0规范包括四个部分:AHB、ASB、APB、AXI和Test Methodology。AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。

1.1.1AMBA协议的演进

图4‑4 AMBA协议的演进

  • AMBA 1只有ASB和APB协议;
  • AMBA 2引入AHB协议用于高速数据传输;
  • AMBA 3,为适应高吞吐量传输和调试引入AXI和ATB,增加高级可扩展接口,而AHB协议缩减为AHB-lite,APB协议增加了PREADY和PSLVERR,ASB由于设计复杂而不再使用;
  • AMBA 4,AXI得到了增强,引入QOS和long burst的支持,根据应用不同可选AXI4,AXI4-lite,AXI4-stream,同时为满足复杂SOC的操作一致性引入ACE和ACE-lite协议,APB和ATB也同时得到增强,比如APB加入了PPROT和PSTRB,另外为改善总线数据传输引入QVN协议;
  • 适应更加复杂的高速NOC设计,引入环形总线协议,推出的AMBA CHI协议。
  • V1.0 ASB、APB是第一代AMBA协议的一部分。主要应用在低带宽的外设上,如UART、 I2C,它的架构不像AHB总线是多主设备的架构,APB总线的唯一主设备是APB桥(与AXI或APB相连),因此不需要仲裁一些Request/grant信号。APB的协议也十分简单,甚至不是流水的操作,固定两个时钟周期完成一次读或写的操作。其特性包括:两个时钟周期传输,无需等待周期和回应信号,控制逻辑简单,只有四个控制信号。传输可用如下状态图表示,


    图4‑5 传输状态图

  • 系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。
  • 当有传输要进行时,PSELx=1,PENABLE=0,系统进入SETUP状态,并只会在SETUP 状态停留一个周期。当PCLK的下一个上升沿时到来时,系统进入ENABLE 状态。
  • 系统进入ENABLE状态时,维持之前在SETUP 状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。
  • V2.0 AHB是第二代AMBA协议最重要的一部分。AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的连接。APB用于连接外部设备,对性能要求不高,而考虑低功耗问题。ASB是AHB的一种替代方案。

    图4‑6 相比于APB,区分了地址周期和数据周期

    AHB总线强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线控制器,以及各种AHB接口的控制器等连接起来构成一个独立的完整SOC系统,还可以通过AHB-APB桥来连接APB总线系统。

    图4‑7 通过AHB-APB桥来连接APB总线系统

    AHB总线由主设备Master、从设备Slave,内部包括仲裁器,译码器,数据多路和地址控制多路组成。
    ·主设备发起一次读/写操作,某一时刻只允许一个主设备使用总线。
    ·从设备响应一次读/写操作,通过地址映射选择使用哪一个从设备。
    ·仲裁器允许某一个主设备控制总线
    ·译码器通过地址译码决定选择哪一个从设备

    仲裁机制 仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。

    地址译码器 地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。

    表4‑1 各个信号描述

    Name Source To Description
    HCLK clock source 各module 总线时钟,上升沿采样
    HRESETn reset controller 各module 总线复位,低电平有效
    HADDR[31:0] Master Decoder mux to slave arbiter 32位系统地址总线
    HTRANS[1:0] Master mux to slave 当前传输类型NONSEQ, SEQ, IDLE, BUSY
    HWRITE Master mux to slave 1为写,0为读
    HSIZE[2:0] Master mux to slave 每一个transfer传输的数据大小,以字节为单位,最高支持1024位
    HBURST[2:0] Master mux to slave burst类型,支持4、8、16 burst,incrementing/wrapping
    HPROT[3:0] Master mux to slave 保护控制信号,需要slave带保护功能,一般不用
    HWDATA[31:0] Master mux to slave 写数据总线,Master到Slave
    HRDATA[31:0] Slave mux to master 读数据总线,Slave到Master
    HREADY Slave mux to master
    arbiter
    高:Slave指出传输结束
    低:Slave需延长传输周期
    HRESP[1:0] Slave mux to master
    arbiter
    Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT
    HSELx Decoder slave slave选择信号

    HRESP[1:0] 响应信号
    传输响应HRESP[1:0]
    00: OKAY
    01: ERROR
    10: RETRY
    传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级
    11: SPLIT
    传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线

    表4‑2 AHB仲裁信号

    Name Source To Description
    HBUSREQx Master arbiter master给仲裁器的请求获得总线使用权的请求信号,最多支持16个master
    HLOCKx Master arbiter 如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号
    HGRANTx arbiter master 授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利
    HMASTER [3:0] arbiter 具有split功能的slave 仲裁器为每一个master分配的ID,指出哪个主设备正在进行传输,提供进行split的信息,用于地址控制多路选择哪个主设备接入总线。
    HMASTLOCK arbiter 具有split功能的slave 表示当前的master正在执行Locked操作。这个信号和HMASTER有这相同的时序
    HSPLITx[15:0] slave arbiter 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备

    V3.0 AXI(Advanced eXtensible Interface)是一种总协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分。

    ·高性能、高带宽、低延迟的片内总线
    ·地址/控制和数据相位是分离的,分离的读写数据通道。控制和数据通道分离,就可以不等需要的操作完成,就发出下一个操作,流水线操作,数据吞吐量增加达到提速的作用。
    ·单向通道体系结构,使得片上信息流只是以单方向传输,减少了延时,更小的面积,更低的功耗,获得优异的性能。

    AXI4 是第四代AMBA协议重要的一部分,AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-streamAXI4.0-lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0-stream是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。
    · 适合高带宽低延时设计,无需复杂的桥就实现高频操作,向下兼容已有的AHB和APB接口。
    ·分离地址/控制、数据相位
    ·分离的读写数据通道,提供低功耗DMA
    ·使用字节线支持非对齐的数据传输
    ·使用基于burst的传输,只需传输首地址
    ·支持多种传输方式,支持乱序传输
    ·允许容易的添加寄存器来进行时序收敛

    AXI架构分为5个独立的传输通道,读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。基于VALID/READY的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息。数据总线可为(8/16/32/64/128/256/512/1024bit),最大为单次传输一个字节的数据。

    信号描述

    表4‑3 全局信号

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

    表4‑4 写地址通道信号

    信号名     源     描述      
    AWID 主机 写地址ID,用来标志一组写信号
    AWADDR 主机 写地址,给出一次写突发传输的写地址
    AWLEN 主机 突发长度,给出突发传输的次数
    AWSIZE 主机 突发大小,给出每次突发传输的字节数
    AWBURST 主机 突发类型
    AWLOCK 主机 总线锁信号,可提供操作的原子性
    AWCACHE 主机 内存类型,表明一次传输是怎样通过系统的
    AWPROT 主机 保护类型,表明一次传输的特权级及安全等级
    AWQOS 主机 质量服务QoS
    AWREGION 主机 区域标志,能实现单一物理接口对应的多个逻辑接口
    AWUSER 主机 用户自定义信号
    AWVALID 主机 有效信号,表明此通道的地址控制信号有效
    AWREADY 从机 表明“从”可以接收地址和对应的控制信号

    表4‑5 写数据通道信号

    信号名     源     描述      
    WID 主机 一次写传输的ID tag
    WDATA 主机 写数据
    WSTRB 主机 写数据有效的字节线,用来表明哪8bits数据是有效的
    WLAST 主机 表明此次传输是最后一个突发传输
    WUSER 主机 用户自定义信号
    WVALID 主机 写有效,表明此次写有效
    WREADY 从机 表明从机可以接收写数据

    表4‑6 写响应通道信号

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

    表4‑7读地址通道信号

    信号名     源     描述      
    ARID 主机 读地址ID,用来标志一组写信号
    ARADDR 主机 读地址,给出一次写突发传输的读地址
    ARLEN 主机 突发长度,给出突发传输的次数
    ARSIZE 主机 突发大小,给出每次突发传输的字节数
    ARBURST 主机 突发类型
    ARLOCK 主机 总线锁信号,可提供操作的原子性
    ARCACHE 主机 内存类型,表明一次传输是怎样通过系统的
    ARPROT 主机 保护类型,表明一次传输的特权级及安全等级
    ARQOS 主机 质量服务QoS
    ARREGION 主机 区域标志,能实现单一物理接口对应的多个逻辑接口
    ARUSER 主机 用户自定义信号
    ARVALID 主机 有效信号,表明此通道的地址控制信号有效
    ARREADY 从机 表明“从”可以接收地址和对应的控制信号

    表 4‑8 读数据通道信号

    信号名     源     描述      
    RID 从机 读ID tag
    RDATA 从机 读数据
    RRESP 从机 读响应,表明读传输的状态
    RLAST 从机 表明读突发的最后一次传输
    RUSER 从机 用户自定义
    RVALID 从机 表明此通道信号有效
    RREADY 主机 表明主机能够接收读数据和响应信息

    表4‑9 低功耗接口信号

    信号名     源     描述    
    CSYSREQ 时钟控制器 系统退出低功耗请求,此信号从“时钟控制器”到“外设”
    CSYSACK 外设 退出低功耗状态确认
    CACTIVE 外设 外设请求时钟有效

    每个数据通道有独立的xVALID/xREADY握手信号对。

    VALID与READY信号作为一对握手信号,为防止死锁,进行读操作时,必须等读地址通道握手完成,读数据通道才可进行下一步操作。进行写操作时,写地址通道与写数据通道互相独立,但同样必须等最后一组数据写完成写响应通道握手完成。

    AXI协议是基于burst的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨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)。
    ·传输规则 wraping burst ,burst长度必须是2,4,8,16, burst不能跨4KB边界,不支持提前终止burst传输。
    ·突发大小

    ARSIZE[2:0],读突发传输;AWSIZE[2:0],写突发传输。
    AxSIZE[2:0] bytes in transfer
    ‘b000      1
    ‘b001      2
    ‘b010      4
    ‘b011      8
    ‘b100      16
    ‘b101      32
    ‘b110      64
    ‘b111      128
    ·突发类型
    FIXED:突发传输过程中地址固定,用于FIFO访问
    INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。
    WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。
    AxBURST[1:0]    burst type
    ‘b00          FIXED
    ‘b01          INCR
    ‘b10          WRAP
    ‘b11          Reserved
    Start_Address=AxADDR
    Number_Bytes=2^AxSIZE
    Burst_Length=AxLEN+1
    Aligned_Addr=(INT(Start_Address/Number_Bytes))xNumber_Bytes。//INT表示向下取整。
    对于INCR突发和WRAP突发但没有到达回环边界,地址由下述方程决定:
    Address_N=Aligned_Address+(N-1)xNumber_Bytes
    WRAP突发,突发边界:
    Wrap_Boundary=(INT(Start_Address/(Number_Bytes x Burst_Length)))x(Number_Bytes x Burst_Length)]

    读写响应结构
    读传输的响应信息是附加在读数据通道上的,写传输的响应在写响应通道。
    RRESP[1:0],读传输
    BRESP[1:0],写传输
    OKAY(‘b00):正常访问成功
    EXOKAY(‘b01):Exclusive 访问成功
    SLVERR(‘b10):从机错误。表明访问已经成功到了从机,但从机希望返回一个错误的情况给主机。
    DECERR(‘b11):译码错误。一般由互联组件给出,表明没有对应的从机地址。

    1.1.2AMBA概述
    AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构
    AHB (Advanced High-performance Bus) 高级高性能总线
    ASB (Advanced System Bus) 高级系统总线
    APB (Advanced Peripheral Bus) 高级外围总线
    AXI (Advanced eXtensible Interface) 高级可拓展接口
    这些内容加起来就定义出一套为了高性能SoC而设计的片上通信的标准。

    AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
    APB主要用在低速且低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。
    AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。

    表 4‑10 几种AMBA总线的性能对比分析

    总线 AXI AHB APB
    总线宽度 8, 16, 32, 64, 128, 256, 512, 1024 32, 64, 128, 256 8, 16, 32
    地址宽度 32 32 32
    通道特性 读写地址通道、读写数据通道均独立 读写地址通道共用读写数据通道 读写地址通道共用读写数据通道不支持读写并行操作
    体系结构 多主/从设备仲裁机制 多主/从设备仲裁机制 单主设备(桥)/多从设备无仲裁
    数据协议 支持流水/分裂传输支持猝发传输支持乱序访问字节/半字/字大小端对齐非对齐操作 支持流水/分裂传输支持猝发传输支持乱序访问字节/半字/字大小端对齐不支持非对齐操作 一次读/写传输占两个时钟周期不支持突发传输
    传输方式 支持读写并行操作 不支持读写并行操作 不支持读写并行操作
    时序 同步 同步 同步
    互联 多路 多路 无定义

    1.1.3AHB总线
    AHB的组成
    Master:能够发起读写操作,提供地址和控制信号,同一时间只有1个Master会被激活。
    Slave:在给定的地址范围内对读写操作作响应,并对Master返回成功、失败或者等待等状态。
    Arbiter:负责保证总线上一次只有1个Master在工作。仲裁协议是规定的,但是仲裁算法可以根据应用决定。
    Decoder:负责对地址进行解码,并提供片选信号到各Slave。
    每个AHB都需要1个仲裁器和1个中央解码器。

    图4‑8 AHB的组成

    AHB基本信号
    HADDR:32位系统地址总线
    HTRANS:M指示传输状态,NONSEQ、SEQ、IDLE、BUSY
    HWRITE:传输方向1-写,0-读
    HSIZE:传输单位
    HBURST:传输的burst类型
    HWDATA:写数据总线,从M写到S
    HREADY:S应答M是否读写操作传输完成,1-传输完成,0-需延长传输周期。需要注意的是HREADY作为总线上的信号,它是M和S的输入;同时每个S需要输出自HREADY。所以对于S会有两个HREADY信号,一个来自总线的输入,一个自己给到多路器的输出。
    HRESP:S应答当前传输状态,OKAY、ERROR、RETRY、SPLIT。
    HRDATA:读数据总线,从S读到M。

    AHB基本传输
    两个阶段
    地址周期(AP),只有一个cycle
    数据周期(DP),由HREADY信号决定需要几个cycle
    流水线传送
    先是地址周期,然后是数据周期
    AHB突发传输与AXI突发传输的特点
    AHB协议需要一次突发传输的所有地址,地址与数据锁定对应关系,后一次突发传输必须在前次传输完成才能进行。
    AXI只需要一次突发的首地址,可以连续发送多个突发传输首地址而无需等待前次突发传输完成,并且多个数据可以交错传递,此特征大大提高了总线的利用率。
    AHB总线与AXI总线均适用于高性能、高带宽的SoC系统,但AXI具有更好的灵活性,而且能够读写通道并行发送,互不影响;更重要的是,AXI总线支持乱序传输,能够有效地利用总线的带宽,平衡内部系统。因此SoC系统中,均以AXI总线为主总线,通过桥连接AHB总线与APB总线,这样能够增加SoC系统的灵活性,更加合理地把不同特征IP分配到总线上。

    1.1.4APB总线
    主要应用在低带宽的外设上,如UART、 I2C,它的架构不像AHB总线是多主设备的架构,APB总线的唯一主设备是APB桥(与AXI或APB相连),因此不需要仲裁一些Request/grant信号。APB的协议也十分简单,甚至不是流水的操作,固定两个时钟周期完成一次读或写的操作。其特性包括:两个时钟周期传输,无需等待周期和回应信号,控制逻辑简单,只有四个控制信号。APB上的传输可用如图所示的状态图来说明。
    1、系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。
    2、当有传输要进行时,PSELx=1,,PENABLE=0,系统进入SETUP状态,并只会在SETUP状态停留一个周期。当PCLK的下一个上升沿到来时,系统进入ENABLE状态。
    3、系统进入ENABLE状态时,维持之前在SETUP状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。

    图4‑9 APB总线