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;但是这也是有限制的:
- 只有INCR burst type支持超过16 beats的Burst;WRAP and FIXED burst types 最大还是支持16 beats的Burst,和AXI3保持一致;
- 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要注意以下几点:
- 由于AXI4是没有WID信号的,不能直接把AXI4 Master的AWID直连到AXI3 Slave 的WID上,这是由于如果AXI4 Master能够发出outstanding的命令,当前AWID值和当前的WID值就不是同一个了。通常的做法是把AWID都存到一个FIFO中,等到数据传完了(WLAST收到了)再切换到下一个AWID. 把这样读出的AWID作为WID使用。(关于这点有疑惑,后续使用在补充)
- AXI3的AxLOCK信号是2-bits的,做法就是直接将AxLOCK[2:0](slave) = {1’b0, AxLOCK(master)}即可。
- AXI4 Master不能产生超过16beat的burst,通常也不会,但是要注意;
- 系统总线要么统一用AXI3, 要么统一用AXI4;
- AXI3 Slave必须注意BVALID的产生要符合AXI4协议,需要修改逻辑,一般也不会有问题。
- QOS/USER/REGION信号等多余的信号需要做额外的处理。
AXI3 Master连接到AXI4 Slave
- 由于AXI4是没有WID信号的,所以直接把WID Floating就行;
- AXI4 Slave的AxLOCK[0] = AxLOCK[0](slave)即可;
- AXI4 Slave的AxLEN[7:4]=4’h0 即可;
- 系统总线要么统一用AXI3, 要么统一用AXI4;
- QOS/USER/REGION信号等多余的信号需要做额外的处理;
- AXI3 master必须不能支持Write interleaving,否则必须修改AXI3 master
上面这些就是AXI3和AXI4互联的一些注意事项,在实际的工作中,很多IP都是AXI3兼容AXI4的,可以减少一些工作。否则就必须做AXI3和AXI4协议转换逻辑了。
参考资料
AXI3与AXI4区别及互联 - 知乎 (zhihu.com)