AMBA总线介绍

时间:2024-10-21 08:37:30

AMBA总线介绍

    • 了解AMBA 总线架构和协议
      • 概述
      • AMBA 发展历程
      • 协议介绍
    • PS 与 PL
    • AXI 简介
    • AXI 协议
    • AXI3 与 AXI4 的区别
      • Burst support
      • Quality of service signaling
      • Multiple region interfaces
      • Write interleaving(写交织)
      • Write response dependencies
      • User signals
      • Locked transactions
      • AWCACHE and ARCACHE
      • AXI-Lite
      • AXI4 Master连接到AXI3 Slave
      • AXI3 Master连接到AXI4 Slave
    • 参考资料

了解AMBA 总线架构和协议

概述

高级微控制器总线体系结构(英语:Advanced Microcontroller Bus Architecture, AMBA)是用于连接和管理片上系统(SoC)设计中功能块的开放标准片上互连规范。从本质上说,AMBA 协议定义功能块如何互相进行通信。

在这里插入图片描述

现在,AMBA广泛用在各种ASIC和SoC部件中,包括在IoT子系统、智能电话和联网SoC等设备中使用的应用程序处理器,使用AMBA 有许多优势:

  • AMBA可实现有效的IP重用,IP重用在降低SoC开发成本和缩短开发时间方面发挥着至关重要的作用。AMBA规范提供了可实现IP重用的接口标准。正因为如此,数以千计的SoC和IP产品都在使用AMBA接口;

  • AMBA还能够灵活地使用多种SoC,IP重用需要一个通用标准,同时支持具有不同能耗、性能和区域要求的多种SoC,Arm 还可提供一系列针对不同要求进行优化的接口规范;

  • 标准接口规范(如AMBA)可使来自不同设计团队或供应商的IP组件之间互相兼容,

  • AMBA得到很好的支持,它在整个半导体行业中得到广泛的实施和支持,其中包括来自第三方IP产品和工具的支持,包括AMBA在内的各种总线接口标准的差别,体现在它们能够实现的性能上。

    总线接口性能有两个主要特性,第一个是带宽(带宽是指通过接口驱动数据所能达到的速率)。在同步系统中,最大带宽受时钟速度与数据总线宽度之乘积的限制;第二个重要特性是延迟,这是事务启动与完成之间的延迟,但在基于突发事务的系统中,延迟数字通常指的是完成第一次传输而不是突发事务,具体取决于系统的重要性,接口的效率将取决于它以零延迟获得最大带宽的程度。


AMBA 发展历程

1996年,Arm 引入AMBA,最初的AMBA总线是高级系统总线(ASB)和高级外设总线(APB),**APB 是为低带宽控制访问而设计的。**例如,在系统外设上注册接口,此总线具有简单的地址和数据阶段,信号列表的复杂程度很低;

1999年,推出AMBA 2,Arm 添加了AMBA高性能总线(AHB),这是一个单边时钟协议,AHB中的一个简单事务,由一个地址阶段和一个后续数据阶段组成,这与APB 协议相似,对目标设备的访问通过MUX来控制,从而允许总线一次访问一个总线主接口,而且,与APB相比,AHB具有更大的总线带宽(64/128位);

2003年,推出AMBA 3,其中包括高级跟踪总线(ATB),这是Coresight片上调试和跟踪解决方案的一部分,AHB-Lite是AHB 的子集,该子集可简化具有单个主接口的总线的设计,AXI是在AMBA 3规范中定义的第三代AMBA接口,它的目标是实现高性能、高时钟频率的系统设计,并且还包括使其能够实现高速亚微米互连的功能。

2010年,从AMBA 4 AXI4开始引入了AMBA 4规范。

2011年,引入了 AMBA 4 ACE,ACE 通过附加的信号引入了系统范围的一致性,从而对AXI进行了扩展,该系统范围的一致性允许多个处理器共享内存,并可启用类似Arm 的big.LITTLE处理之类的技术,同时,ACE-Lite协议还可实现单向一致性,例如,一个网络接口可从完全一致的ACE处理器的缓存中读取数据,AXI4-Stream 协议适用于从主接口到从属接口的单向数据传输,这也被称为点对点传输,该协议可降低信号路由开销,因此是在FPGA中实现传输的理想选择。

2014年,引入了AMBA 5 CHI(一致性集线器接口)规范,重新设计的高速传输层和功能专门用于减少阻塞

2016年,AHB协议被更新至AHB5,这是对ARMv8-M体系结构的补充,可扩展从处理器到系统的TrustZone安全基础,

在这里插入图片描述

协议介绍

1、APB:高级外围设备总线(APB)用于连接低带宽的外围设备。它是一个简单的非流水线协议。读写操作共享同一组信号,不支持burst数据传输。是最容易学习的AMBA协议。
2、AHB:高级高性能总线(AHB)用于连接共享总线上需要更高带宽的组件。这些slave组件可以是内部内存或外部内存接口、DMA、DSP等。AHB可以通过burst数据传输来获得更高的带宽。
3,AHB-lite协议是AHB的一个简化版本。简化后只支持一个主设计,这消除了对任何仲裁、重试、分割事务等的需求。
4、高级可扩展接口(AXI)适合于高带宽和低延迟互连。这是一个点对点的互连,并克服了AHB、APB等共享总线协议在可连接的代理数量方面的限制性。该协议支持多个outstanding 的数据传输、burst数据传输、单独的读写通道和支持不同的总线宽度。
5,AXI-lite协议是AXI的简化版本,简化后不支持突发数据传输。
6,AXI-stream 协议是AXI协议的另一种风格,它只支持数据流从master 流到slave。与完整的AXI或AXI-lite不同,AXI-stream协议中没有单独的读/写通道,因为其目的是只在一个方向上流。
7,ACE-AXI协议是AXI4协议的扩展,应用于在一个芯片上集成多个CPU核心与一致性cache的场景。ACE协议扩展了AXI读写数据通道,同时引入了单独的snoop地址、snoop数据和snoop响应通道。这些额外的通道提供了实现基于snoop的一致性协议的机制。
8,ACE-Lite-对于没有自己cache的agents,但仍属于可共享一致性域的一部分,如DMA或网络接口agent,使用ACE-lite协议实现这种"单向"一致性。
9,CHI-ACE协议作为AXI的扩展而开发,以支持一致性互连。ACE协议使用了master/slave之间的信号电平通信,因此互连需要大量的线和增加的通道来进行snoops和响应。这对于具有2/4核移动SOC的小一致性clusters非常有效。随着SOC上集成越来越多的一致性clusters——AMBA5修订版引入了CHI协议。CHI协议使用基于分层分组的通信协议,具有协议、链路层和物理层实现,还支持基于QoS的流控制和重试机制。

PS 与 PL

  • PS:处理系统(Processing System),就是与FPGA无关的ARM是SoC的部分。
  • PL:可编程逻辑(Programmable Logic),就是FPGA部分。

AXI 简介

  • AXI 全称 “Advanced Extensible Interface ”,主要描述主设备和从设备之间的数据传输方式。AXI 是 ARM 公司提出的 AMBA(Advanced Microcontroller Bus Architecture)的一部分,是一种高性能、高带宽、低延迟的片内总线,也用来替代以前的 AHB 和 APB 总线。
  • 第一个版本的 AXI(AXI3)包含在 2003年发布的 AMBA3.0 中, AXI 的第二个版本 AXI (AXI4)包含在 2010 年发布的 AMBA 4.0 之中。

AXI总线是SOC芯片设计最重要的总线,没有之一!可能很多刚入门的工程师即使把协议读了很多次,还是不能深入理解。这是因为,ARM 没有告诉你,需要你去了解CPU架构,了解cache,了解存储系统,了解系统架构等等知识。只有了解了这些知识才能理解USER/QOS/AxCACHE等信号的具体作用,因为AXI总线本来就是为了解决系统互联而产生的。

AXI 协议

​ 主设备和从设备之间通过握手信号建立连接。当从设备准备好接收数据时,会发出 Ready 信号。当主设备的数据准备好时,会发出和维持 Valid 信号,表示数据有效。数据只有在 Valid 和 Ready 信号都有效的时候才开始传输。当这两个信号持续保持有效,主设备会继续传输下一个数据。主设备可以撤销 Valid 信号,或者从设备撤销 Ready 信 号终止传输。 AXI 的协议如图, T2 时,从设备的 Ready 信号有效, T3 时主设备的 Valid 信号有效,数据传输开始。

​ 在 ZYNQ 中,支持 AXI-Lite,AXI4 和 AXI-Stream 三种总线,下表介绍这三种 AXI 接口的特性。

接口协议 特性 应用场合
AXI4-Lite 地址/单数据传输 低速外设或控制
AXI4 地址/突发数据传输 地址的批量传输
AXI4-Stream 仅传输数据,突发传输 数据流和媒体流传输
  • AXI4-Lite:

    具有轻量级、结构简单的特点,适合小批量数据、简单控制场合。不支持批量传输,读写时一次只能读写一个字(32 bit)。主要用于访问一些低速外设和外设的控制。

  • AXI4:

    相比 AXI4-Lite ,增加了批量传输功能,可以连续对一片地址进行一次性读写。也就是说具有数据读写的 burst 功能。

​ 上面两种均采用内存映射控制方式,即 ARM 将用户自定义 IP 编入某一地址进行访问,读写时就像在读写自己的片内 RAM ,编程也很方便,开发难度较低。代价就是资源占用过多需要额外的读地址线、写地址线、读数据线、写数据线、写应答线这些信号线。

  • AXI4-Stream:

    这是一种连续流接口,不需要地址线(很像 FIFO ,一直读或一直写就行)。对于这类 IP ,ARM 不能通过上面的内存映射方式控制( FIFO 根本没有地址的概念),必须有一个转换装置,例如 AXI DMA 模块来实现内存映射到流式接口的转换。 AXI Stream 适用的场合有很多:视频流处理;通信协议转换;数字信号处理;无线通信等。其本质都是针对数据流构建的数据通路,从信源(例如 ARM 内存、 DMA 、无线接收前端等)到信宿(例如 HDMI 显示器、高速 AD 音频输出,等)构建起连续的数据流。这种接口适合做实时信号处理

AXI3 与 AXI4 的区别

在这里插入图片描述

Burst support

AX4对burst length进行了扩展:

AXI3最大burst length是16 beats;AxLEN位宽是4bit

AXI4支持最大到256 beats,AxLEN位宽是8bit;但是这也是有限制的:

  1. 只有INCR burst type支持超过16 beats的Burst;WRAP and FIXED burst types 最大还是支持16 beats的Burst,和AXI3保持一致;
  2. Exclusive accesses 的burst length 必须小于 16.

但是在实际使用中,很少使用支持超过Burst Length超过16的命令,这是因为Burst Length太长会一直占用总线,影响了系统性能;而且AXI总线的一个限制就是Burst一旦开始是不能取消的,如果Burst太长,一旦出错,影响比较大;

比如在ARM的CPU中,就没有使用超过16 beats的Burst。

Quality of service signaling

AXI4 增加了2个4-bit QoS 命令信号:

  • AWQOS 4-bit QoS identifier sent on the write address channel for each write transaction

  • ARQOS 4-bit QoS identifier sent on the read address channel for each read transaction.

但是AXI4协议并没有规定QoS的用法,也规定不了,因为这是一个系统全面考虑的特性。AXI4协议不可能规定某个master比如CPU必须是多少QoS,这和SoC的系统实现强相关,一般是架构师会定义。

AXI4建议的QoS是AxQOS值越大,优先级约高;但是要注意的是,有些SoC恰恰相反,AxQOS值越大,优先级约低,所以要根据Spec来;

QoS信号的增加是随着越来越多的master对总线需求的冲突越来约明显,系统的带宽就那么多,那么如何给不同的IP分配不同的QoS就是一个架构师必备的功底,而且没有不变的规律可以遵守。

Multiple region interfaces

AXI4为了支持区域标识,增加了两个4-bits的区域标识符:

  • AWREGION region identifier sent on the write address channel for each write transaction

  • ARREGION region identifier sent on the read address channel for each read transaction.

区域标识符的使用意味着slave不必支持不同逻辑接口之间的地址解码。

如果一个slave把内部可访问地址分为多个区域,那么一般情况下,只需要通过高位地址来区分不同的区域;如果采用了区域标识符,那么就不需要采用地址解码区分了。

另外,通过划分region,对某些physical allocation进行保护,比如某个region只能被non-secure write,某个region只能被secure write访问;

这是一个可选的功能,一般用的比较少,而且ARM自己的CPU都很少支持。

Write interleaving(写交织)

**AXI4协议去掉了WID信号,因此不再支持write interleaving。**这是AXI4和AXI3的很重要和很大的一个改变。

Write interleaving的去除使得在WID信号上传递的信息是多余的。所有写入数据必须与相关的写入地址顺序相同,任何需要WID信息都可以从写入地址通道信号AWID中获得这些信息。

Write interleaving功能,在AWID=0的数据还未发送完后,允许AWID=1的数据先发送;这样带来的代价是发送端必须要缓存多个ID的wdata,不管是maser还是总线interconnection都必须要增加大量的缓存,所以增加了面积;

在这里插入图片描述

另外,Write interleaving增加了系统总线设计的复杂度,而且很容易造成死锁,所以虽然AXI3支持Write interleaving,但是大家在设计的时候,master基本都没支持Write interleaving。

所以AXI4就把Write interleaving的支持去掉了。

Write response dependencies

AXI4对Write response的产生做了更严格是限制。

AXI3 BVALID的产生依赖关系如下:

在这里插入图片描述

AXI3必须等到了WVALID和WREADY后才能把BVALID置高来响应,也就是说只要收到了所有数据,SLAVE就可以发写响应。

AXI4 BVALID的产生依赖关系如下:

在这里插入图片描述

AXI4规定,必须等到AWVALID,AWREADY,WVALID, WREADY, and WLAST 都为高(不是同一时刻都为高)后,SLAVE才能发BVALID进行写响应。也就是不仅仅要等数据通路,而且要等地址通路,并且明确了要等WLAST。这样能保证响应的时候Transaction是真正完成的。

AXI3对BVALID的规定其实是有漏洞的,可能Transaction还未真正完成就发送了写响应。AXI4的更新更加合理和严谨。

User signals

AXI4增加了user信号:

  • AWUSER Write address channel User signals.

  • ARUSER Read address channel User signals.

  • WUSER Write data channel User signals.

  • RUSER Read data channel User signals.

  • BUSER Write response channel User signals.

AMBA4中并未对USER信号做任何规定,只是建议不要使用这个信号,防止IP直接互联不兼容。但是实际soc中,这个信号使用的还是比较多的,用来传输sideband信号十分有用。

AMBA5中进一步规定了USER信号的位宽:
在这里插入图片描述

所以说,这个信号在SOC内部使用比较多,但是如果要和外部互联,比如IP 厂商一般都不会使用,防止兼容性问题。

Locked transactions

AXI4去掉了对locked transaction的支持,对信号的影响就是AxLOCK从AXI3的2-bits减少到了1bit:
在这里插入图片描述

Locked access和Exclusive access的区别是作用的对象不同。

Locked access作用的对象是总线,一旦发生Locked access,那么其他的master都不能使用总线了,在一个复杂的SOC系统中,Locked access对系统的影响就太大了,万一发生Locked access的master出点啥问题,整个系统就挂死了。这种牺牲整个系统来成就某个master的机制当然就会被抵制,最后AXI4直接不再支持这种方式。

Exclusive access 作用的对象是对应的Slave,支持Exclusive access的Slave会在slave中实现一个Exclusive access monitor,如果monitor记录了能够访问的master,那么对应的master就能通过Exclusive access来访问,其他的未记录的Exclusive access就都不能访问。Exclusive access对总线系统是没有要求的,只是对slave做了特殊要求,即使出错也不会影响系统其他部分,最多访问失败而已。

现在一般的AXI master都不会支持Locked access,如果一个IP支持Locked access,大概率没人会买它了。对系统来说不仅实现麻烦,而且还存在挂死系统的风险。

AWCACHE and ARCACHE

AXI4的AWCACHE[3:0] 和ARCACHE[3:0]的含义有很大的改变,

AXI3 中AWCACHE[3:0] 和ARCACHE[3:0]的含义如下图所示:

在这里插入图片描述

AXI4中AWCACHE[3:0] 和ARCACHE[3:0]的含义如下图所示(括号内的是AXI3的编号):

在这里插入图片描述

AXI-Lite

AXI4相对于AXI3的另外一个改变就是定义了AXI-Lite协议。lite协议其实主要目的是简化protocol,用于系统上对register的访问

AXI4 Master连接到AXI3 Slave

AXI4 Master连接到AXI3 Slave要注意以下几点:

  1. 由于AXI4是没有WID信号的,不能直接把AXI4 Master的AWID直连到AXI3 Slave 的WID上,这是由于如果AXI4 Master能够发出outstanding的命令,当前AWID值和当前的WID值就不是同一个了。通常的做法是把AWID都存到一个FIFO中,等到数据传完了(WLAST收到了)再切换到下一个AWID. 把这样读出的AWID作为WID使用。(关于这点有疑惑,后续使用在补充)
  2. AXI3的AxLOCK信号是2-bits的,做法就是直接将AxLOCK[2:0](slave) = {1’b0, AxLOCK(master)}即可。
  3. AXI4 Master不能产生超过16beat的burst,通常也不会,但是要注意;
  4. 系统总线要么统一用AXI3, 要么统一用AXI4;
  5. AXI3 Slave必须注意BVALID的产生要符合AXI4协议,需要修改逻辑,一般也不会有问题。
  6. QOS/USER/REGION信号等多余的信号需要做额外的处理。

AXI3 Master连接到AXI4 Slave

  1. 由于AXI4是没有WID信号的,所以直接把WID Floating就行;
  2. AXI4 Slave的AxLOCK[0] = AxLOCK[0](slave)即可;
  3. AXI4 Slave的AxLEN[7:4]=4’h0 即可;
  4. 系统总线要么统一用AXI3, 要么统一用AXI4;
  5. QOS/USER/REGION信号等多余的信号需要做额外的处理;
  6. AXI3 master必须不能支持Write interleaving,否则必须修改AXI3 master

上面这些就是AXI3和AXI4互联的一些注意事项,在实际的工作中,很多IP都是AXI3兼容AXI4的,可以减少一些工作。否则就必须做AXI3和AXI4协议转换逻辑了。

参考资料

AXI3与AXI4区别及互联 - 知乎 (zhihu.com)