加载中...
AMBA总线
发表于:2023-04-02 | 分类: 总线

AMBA(Advanced Microcontroller Bus Architecture,高级微控制器总线架构)是ARM公司提出的片上总线标准,定义了SoC(System on Chip)内部各个模块之间的互联与通信规范。经过多年的演进,AMBA已经成为业界事实上的片上互联标准,广泛应用于手机处理器、汽车电子、AI芯片等各类SoC设计中。

AMBA协议家族

协议 提出版本 定位 核心特点
APB AMBA 1.0 低功耗外设总线 简单、低速,用于外设寄存器配置
AHB AMBA 2.0 高性能系统总线 高带宽、流水线、burst传输、多主机仲裁
AXI AMBA 3.0 高性能互联总线 独立读写通道、outstanding、乱序传输
AXI4-Lite AMBA 4.0 AXI简化版 去除burst,用于寄存器配置
AXI4-Stream AMBA 4.0 流式数据传输 无地址通道,适合连续数据流
CHI AMBA 5.0 一致性总线 面向多核Cache一致性互联

AMBA演进

  • AMBA 1.0(1996):定义ASB和APB,解决片上模块互联的基础问题;
  • AMBA 2.0(1999):引入AHB,支持更高时钟频率与带宽需求;
  • AMBA 3.0(2003):引入AXI3、APB3与ATB,AXI支持独立读写通道与乱序传输;
  • AMBA 4.0(2010):新增AXI4、AXI4-Lite、AXI4-Stream以及ACE(一致性扩展);
  • AMBA 5.0(2013):新增AXI5、ACE5与CHI,进一步提升互联效率与Cache一致性支持。

三种总线的定位

在实际SoC中,三种总线各司其职,通过转换桥(AXI2APB、AXI2AHB等)组成层次化的总线架构:

  • AXI:连接CPU、GPU、DDR控制器等高性能主设备,承担主要的数据吞吐;
  • AHB:连接DMA、外部存储器接口等中等带宽模块;
  • APB:连接低速外设(I2C、UART、SPI、GPIO等),一般通过桥接挂在AXI/AHB之下。

AHB协议

AHB(Advanced High-performance Bus)是AMBA 2.0定义的高性能系统总线,面向高时钟频率、高带宽的系统模块互联。

AHB特点

  • 流水线传输:一次传输分为地址阶段和数据阶段,地址在当前时钟周期发出,数据在下一个时钟周期传输,地址与数据阶段重叠,提高总线利用率;
  • Burst传输:支持SINGLE、INCR、WRAP等突发传输,一次发起可连续传输多个数据;
  • 多主机仲裁:支持多个master,由仲裁器根据请求与优先级分配总线使用权;
  • 宽数据位:支持32/64/128位数据总线;
  • 响应与错误处理:slave通过HRESP返回OKAY、ERROR、RETRY、SPLIT四种响应。

AHB信号

信号 方向 描述
HCLK - 总线时钟
HRESETn - 复位信号,低有效
HADDR[31:0] master 地址总线
HTRANS[1:0] master 传输类型:IDLE/BUSY/NONSEQ/SEQ
HWRITE master 写使能,高电平表示写
HSIZE[2:0] master 传输大小:byte/halfword/word等
HBURST[2:0] master 突发类型:SINGLE/INCR/WRAP等
HPROT[3:0] master 保护控制:数据/指令、特权/用户、可缓存等
HWDATA master 写数据总线
HRDATA slave 读数据总线
HSELx 译码器 从设备选择信号
HREADY slave 传输完成信号,低电平插入等待周期
HRESP[1:0] slave 传输响应:OKAY/ERROR/RETRY/SPLIT
HBUSREQx master 总线请求,用于仲裁
HLOCKx master 总线锁定请求
HGRANTx 仲裁器 总线授权
HMASTER[3:0] 仲裁器 当前总线主机编号

AHB传输过程

AHB采用流水线方式,一次基本传输分为:

  1. 地址阶段:master在时钟上升沿后输出地址和传输类型(HTRANS),完成地址建立;
  2. 数据阶段:下一个时钟周期,slave通过HREADY表示是否准备好数据。HREADY为低时插入等待周期(wait state),HREADY拉高表示传输完成。

与APB不同,AHB每次传输至少需要两个时钟周期(地址+数据),但由于流水线作用,连续传输时地址和数据阶段重叠,平均每个时钟周期可完成一次数据传输。

HTRANS传输类型:

  • IDLE(00):空闲传输,无实际数据传输;
  • BUSY(01):master插入空闲周期,burst中表示间隔;
  • NONSEQ(10):一次新突发传输的第一个传输,地址与上一次无关;
  • SEQ(11):突发传输的后续传输,地址与上一次相关。

AHB Burst传输

HBURST 类型 说明
SINGLE 单次传输 只传输一个数据
INCR 不定长递增 递增地址,长度未知
WRAP4/8/16 回卷突发 递增到边界后回卷,传输4/8/16个数据
INCR4/8/16 定长递增 递增地址,传输4/8/16个数据

AHB响应

slave通过HRESP和HREADY给出响应:

  • OKAY:传输成功完成;
  • ERROR:传输发生错误,需要终止;
  • RETRY:slave暂时无法完成传输,master需要重试,但地址保持不变;
  • SPLIT:slave告知仲裁器该传输被拆分,仲裁器可授权给其他master,传输稍后继续。

多主机仲裁

当系统存在多个master时,仲裁器根据请求与优先级决定总线归属:

  1. master拉高HBUSREQx请求总线;
  2. 仲裁器通过HGRANTx授权给其中一个master;
  3. 获得授权的master开始传输;
  4. 若master发起HLOCKx锁定传输,仲裁器将保持该master占用总线,直到锁定传输结束。

从AHB3开始,AHB增加了HMASTER、HSPLIT等信号支持拆分成(Split)传输,减少低优先级master对总线的占用时间。

AXI协议

AXI(Advanced eXtensible Interface)是AMBA 3.0引入的高性能互联协议,广泛用于高性能SoC中CPU与DDR、GPU等高速模块的互联。

AXI特点

  • 独立读写通道:读和写拥有各自独立的地址/数据通道,支持全双工通信;
  • 5个通道:读地址(AR)、读数据(R)、写地址(AW)、写数据(W)、写响应(B);
  • 基于握手的传输:所有通道都采用VALID/READY握手,可实现全速传输或插入等待;
  • Burst传输:支持FIXED/INCR/WRAP三种突发类型;
  • Outstanding与乱序:master可以一次发出多个未完成事务,通过ID标识实现乱序返回,提高吞吐率;
  • 字节使能:写数据通道提供WSTRB字节选通信号,支持部分写入。

AXI五个通道

通道 信号前缀 作用
写地址通道 AW* 传输写事务的地址与控制信息
写数据通道 W* 传输写数据,带WSTRB字节使能
写响应通道 B* slave返回写事务响应(BRESP)
读地址通道 AR* 传输读事务的地址与控制信息
读数据通道 R* slave返回读数据与响应(RRESP)

AXI信号详解

写地址通道(AW*)

信号 位宽 描述
AWID x 写事务ID,用于区分事务
AWADDR 32 写地址
AWLEN 4/8 突发长度,AXI3为4bit(1~16),AXI4为8bit(1~256)
AWSIZE 3 每次传输的数据字节数(2^AWSIZE)
AWBURST 2 突发类型:FIXED/INCR/WRAP
AWLOCK 1 锁定传输(AXI3),AXI4中必须为0
AWCACHE 4 缓存属性
AWPROT 3 保护属性
AWQOS 4 QoS服务质量
AWVALID 1 地址有效握手信号
AWREADY 1 slave可以接收地址

写数据通道(W*)

信号 位宽 描述
WDATA 32/64/128 写数据
WSTRB 4/8/16 字节选通,指示每个字节是否有效
WLAST 1 标识最后一个写数据
WVALID 1 数据有效握手信号
WREADY 1 slave可以接收数据

写响应通道(B*)

信号 位宽 描述
BID x 响应ID,与写事务AWID对应
BRESP 2 写响应:OKAY/EXOKAY/SLVERR/DECERR
BVALID 1 响应有效握手信号
BREADY 1 master可以接收响应

读地址通道(AR*):信号与写地址通道一一对应,仅前缀由AW改为AR。

读数据通道(R*)

信号 位宽 描述
RID x 读事务ID
RDATA 32/64/128 读数据
RRESP 2 读响应:OKAY/EXOKAY/SLVERR/DECERR
RLAST 1 标识最后一个读数据
RVALID 1 数据有效握手信号
RREADY 1 master可以接收数据

AXI握手协议

AXI所有通道都使用VALID/READY握手:

  • VALID为高,表示发送方的地址或数据有效,且必须保持到READY拉高;
  • READY为高,表示接收方可以接收数据;
  • 只有在VALID和READY同时为高的时钟上升沿,才完成一次握手传输。

典型的写事务流程:

  1. master发出AWADDR和AWVALID,slave拉高AWREADY完成写地址握手;
  2. master按burst长度依次发送W*数据,以WLAST标识最后一个数据;
  3. slave接收完所有数据后,通过BRESP返回写响应,完成整个写事务。

读事务流程:

  1. master发出ARADDR和ARVALID,slave拉高ARREADY完成读地址握手;
  2. slave将读数据通过R通道返回,RLAST标识最后一个数据;
  3. 每个数据都通过RVALID/RREADY握手完成传输。

AXI Burst类型

  • FIXED:所有数据都使用同一个地址,适合FIFO等固定地址访问;
  • INCR:地址逐次递增,是默认的突发类型,适合连续内存访问;
  • WRAP:地址递增但到达边界后回卷,适合cache line的读取。

突发传输规则

  • 地址计算:INCR/WRAP突发中,第N次传输的地址 = 起始地址 + N × 传输字节数(2^AWSIZE);
  • 地址对齐:突发起始地址必须与传输大小对齐,即起始地址的低AWSIZE位必须为0;
  • 4KB边界限制:INCR和WRAP突发不能跨越4KB地址边界,如果访问区域跨边界,需要拆分为多个突发;
  • 窄传输(Narrow Transfer):当总线数据宽度大于单次传输字节数时,数据只在部分字节通道上有效,通过WSTRB指示有效字节的位置;
  • WSTRB:WSTRB[n]对应WDATA[8n+7:8n]字节,WSTRB[n]=1表示该字节有效,仅写数据通道存在。

传输响应

slave通过BRESP/RRESP返回传输结果:

响应 编码 含义
OKAY 00 正常访问成功
EXOKAY 01 排他访问成功(AXI锁定/排他传输)
SLVERR 10 从设备错误,如访问不支持的地址或内部错误
DECERR 11 解码错误,地址无法映射到任何从设备

缓存与保护属性

  • AXCACHE(AWCACHE/ARCACHE)
    • bit[0] Bufferable:允许缓冲写入,数据无需立即到达最终目的地;
    • bit[1] Modifiable:允许修改访问属性,如读写合并;
    • bit[2] Other Allocate:其他分配提示,用于一致性系统;
    • bit[3] Cacheable:允许缓存访问。
  • AXPROT(AWPROT/ARPROT)
    • bit[0]:0=数据访问,1=指令访问;
    • bit[1]:0=非特权,1=特权;
    • bit[2]:0=安全访问,1=非安全访问。
  • AXQOS(AWQOS/ARQOS):0~15的服务质量等级,供互联仲裁器参考,决定事务优先级。

Outstanding与乱序

AXI允许master在未收到上一次响应前继续发出多个事务(outstanding transaction)。多个未完成事务通过各自的ID区分,slave可以按任意顺序返回数据(相同ID的事务必须保持顺序),从而实现:

  • 提高总线利用率,隐藏访存延迟;
  • 支持不同ID事务并行处理与乱序返回。

顺序规则:

  • 相同ID:事务必须按发出顺序返回数据,保证同一ID内的顺序一致性;
  • 不同ID:事务可以乱序完成,也可以并行传输;
  • 写交织(Write Interleaving):AXI3允许不同ID事务的写数据在W通道上交织传输,AXI4为保证实现简洁,W通道一次只能传输同一事务的数据;
  • 读交织:读数据通道通过RID区分不同事务的数据,天然支持交织返回。

AXI4协议家族

  • AXI4:完整版,支持高达256次burst,取消LOCK锁定传输;
  • AXI4-Lite:简化版,无burst(单次传输),常用于寄存器配置,硬件开销小;
  • AXI4-Stream:流式接口,无地址通道,面向视频、音频等连续数据流。
特性 AXI3 AXI4 AXI4-Lite AXI4-Stream
ID位宽 4bit 可扩展 - -
突发长度 1~16 1~256 固定1 无限制
窄传输 支持 支持 数据位宽=总线位宽 -
锁定传输 支持 不支持 - -
写交织 支持 不支持 - -
地址通道 AW/AR AW/AR AW/AR
数据通道 W/R W/R W/R TDATA/TVALID/TREADY
典型用途 早期AMBA3系统 高性能互联 寄存器配置 音视频数据流

AXI低功耗接口

AXI4提供低功耗接口信号CSYSREQ/CSYSACK/CACTIVE,用于系统级时钟与电源管理,在系统空闲时关闭互联时钟,降低动态功耗。

APB协议

高级外设总线(Advanced Peripheral Bus,APB) 是AMBA协议之一,也是最基本的总线协议。按照ARM官方定义,APB是一种低成本的接口协议,可以实现低功耗以及精简的接口设计,降低接口设计的复杂度。

APB协议不支持流水线设计,它主要应用在低带宽设计需求的接口中,高性能带宽需求可以使用AXI总线。APB协议的实现与时钟沿对齐,以简化外设接口的设计。每次传输至少需要消耗两个时钟周期。

在SOC设计中,APB一般作为IP的配置接口,包括低速外设如I2C,UART,I2S等,也包括DDR,PCIe,Ethernet等高速IP,可以方便地实现CPU对外设IP的寄存器配置。系统中一般会实现一个AXI2APB或者AHB2APB的转换桥将APB口挂载在系统上。

img

APB协议的演进

最早的一版APB协议是在1998发布,目前的APB协议已经达到APB5的版本。

img

APB2协议主要定义了基本的总线接口,没有握手协议,只有基本的读写传输。

APB3增加了PREADY,PSLVERR信号。PREADY用于表示APB传输的完成,可以实现slave的等待功能。PSLVERR用以指示slave的错误状态。

APB4增加了PPROT,PSTRB。PPROT信号实现安全和非安全的数据传输,可实现系统在不同安全属性的控制传输,保证系统的安全性。PSTRB信号用于实现部分数据的写操作,可以指示一笔传输中的一部分数据有效。

APB5增加了wake-up,user,pairty等信号。wake-up用于实现低功耗的控制,通过控制时钟只在传输的时候开启,减少动态功耗的消耗。user则增加了基本信号之后的用户自定义信号。parity主要针对安全系统设计中的保护功能。

我们可以看到随着系统设计的升级,协议也是在不断的更新,来适应我们目前的系统需求。比如最新的协议都是支持安全传输与安全验证,这就是针对目前的安全设计,比如汽车电子,自动驾驶补充的一些标准。

APB信号

img

APB传输

img

  • IDLE :APB的默认状态,此时没有数据传输,PSEL,PENABLE均为default 0
  • SETUP:当需要进行一个传输的时候,APB 首先进入这个状态;PSELx 信号首先拉高;总线仅仅在 SETUP 状态停留一个时钟周期,然后接着在下一个时钟的上升沿进入 ACCESS 状态;
  • ACCESS:在 SETUP 状态转换到 ACCESS,PENABLE 信号被拉高;在 SETUP 状态转换到 ACCESS 状态这段时间里,address,write,select 和 write data 信号必须保持稳定;

ACCESS状态的跳转取决于slave 输出的PREADY信号状态:

1)如果 PREADY 为 0,表示slave还没有准备接受传输的数据,或者没有准备好输出的数据,会让其继续处于 ACCESS 状态;

2)如果PREADY 为 1,表示slave已完成数据,可以跳转到其他状态。如果后面有连续的数据传输则直接跳转到 SETUP -> ACCESS ,如果没有传输,直接回到 IDLE;

with no wait states

img

T1 时刻 :在PCLK的上升沿,APB 将地址信息 PADDR 和数据 PWDATA 准备好,拉高 PWRITE 表示进入写,同时拉高 PSEL,从 IDLE 进入 SETUP

T2 时刻:也就是下一个时钟周期拉高 PENABLE,表示开始进行数据传输,状态进入 ACCESS

T3 时刻:检测到 PREADY 被拉高,也就是说 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低 。

一直到T3时刻所有数据传输完成之前所有的信号PADDR,PWDATA以及控制信号需要保持不变。

img

T1 时刻 :在PCLK的上升沿,APB 将地址信息 PADDR ,此时 PWRITE 为低表示读操作,同时拉高 PSEL,从 IDLE 进入 SETUP

T2 时刻:也就是下一个时钟周期拉高 PENABLE,表示开始进行数据传输,状态进入 ACCESS

T3 时刻:检测到 PREADY 被拉高,也就是说 Slave 已经将PRDATA准备好,MASTER可以接收SLAVE的数据,然后PENABLE 拉低,PSEL 拉低 。

读操作是SLAVE将准备好的数据放到PRDATA总线上,然后通过PREADY通知MASTER。

注意:slave需要在T2时刻将需要读取的数据准备好

with wait states

img

slave可以通过pready拉低,来延长slave的响应时间。此时需要注意,其他信号需要保持不变。

Write strobes

img

通过PSTRB[n]控制PWDATA[(8*n+7):n]的数据写有效。可以方便的实现部分数据控制。

Error response

APB协议可以通过PSLVERR信号表示对应传输错误。只不过在APB协议中error只有1 bit表示所有的错误。具体的协议实现如下:

img

需要注意的是,PSLVERR是与ready信号同时返回的,只有这样master才能正确采样到错误信号。在slave内部处理之前需要将ready拉低以等待内部检测是否有错误发生。

APB新增属性

Protection transaction

img

PPROT可实现APB传输的保护控制。PPROT[0]表示不同优先级的传输,可实现slave对不同优先级数据的特殊处理操作。PPROT[1]表示对不同安全属性的数据传输,对Secure和Non-secure的数据进行数据处理,Non-secure不能更改secure属性的区域。PPROT[2]用来指示此时传输是数据传输还是指令传输。

APB的这个升级是集成的AHB与AXI的属性,也是为了更加符合现在系统设计的需求。

PWAKEUP SIGNAL

PWAKEUP用来指示本次传输是否有效,是随请求信号一块传输的。

设计上如果我们端口有pwakeup信号就一定要在传输的时候使能pwakeup信号,如果传输的时候pwakeup信号不使能,则slave会认为这一笔数据传输无效。

设计上建议pwakeup信号跟psel一块拉高或者先于psel拉高。也可以用pwakeup控制apb的时钟达到低功耗的目的。

USER SIGNAL

APB信号增加了USER信号,可针对地址,读写数据,响应增加USER信号,可以用来传输用户自定信号,增加协议的灵活性。

信号的有无,以及位宽可以用户自定义。

img

PARITY protection

img

在最新的APB协议中,增加了对协议的parity保护,可以针对地址,数据以及控制信号的保护传输。在Source侧可以针对要传输的信号增加parity generation模块产生校验码,同时也可以对返回的数据进行校验。在Destination侧可以增加Parity check模块对Source侧传过来的数据与校验码进行校验,从而覆盖从Source到Destination的整个通路的安全保护,实现端到端(E2E)的保护机制。

具体的实现机制与奇偶校验都可以自行选择实现。

上一篇:
Linux命令
下一篇:
HDLBits
本文目录
本文目录