一文搞懂AMBA总线工作原理 与AHB总线 – ARM内核

一文搞懂AMBA总线工作原理 与AHB总线 – ARM内核本文主要介绍总线相关的知识 会从以下几个方面展开 什么是总线 为什么需要总线 总线的组成 总线的分类 ARM 中常见的总线协议是什么 然后后面的部分会着重介绍一下 ARM 中常见的总线协议及工作原理

大家好,欢迎来到IT知识分享网。

ARM架构是现代嵌入式系统中广泛使用的一种处理器架构。它采用了一种称为“总线”的技术来连接处理器和其他系统组件,以实现数据和控制信号的传输。在ARM内核中,总线作为连接系统各组件的桥梁,起着至关重要的作用。本文将介绍ARM内核中的总线技术,包括总线的概念、功能、特点和使用方法,以及总线在ARM内核中的重要性。

1. ARM总线结构概述:

ARM总线结构是连接处理器核、内存、外设和其他系统组件的物理和逻辑接口,用于实现数据传输和控制信号的交换。ARM总线结构通常由数据总线、地址总线、控制总线和时钟信号组成,通过这些接口实现处理器核和外部组件之间的通信。

2. 数据总线(Data Bus):

数据总线用于在处理器核、内存和外设之间传输数据。它的宽度决定了一次可以传输的数据位数,例如32位或64位。数据总线的宽度越大,处理器核和外部组件之间的数据传输速度越快。

3. 地址总线(Address Bus):

地址总线用于传输内存地址和外设地址。它的宽度决定了系统能够寻址的地址空间大小。较宽的地址总线可以支持更大的地址空间,允许系统连接更多的内存和外设。

4. 控制总线(Control Bus):

控制总线用于传输控制信号,如读写信号、总线请求/释放信号、时序信号等。控制总线的信号控制着数据传输的开始、结束和方向,保证数据传输的正确进行。

5. 时钟信号(Clock Signal):

时钟信号用于同步处理器核和外部组件之间的数据传输和操作。它提供了系统的时钟脉冲,确保各个组件在正确的时序下进行操作,保证系统的稳定性和可靠性。

6. ARM总线结构的特点:

– 灵活性: ARM总线结构具有高度的灵活性,可以根据系统的需求和性能要求进行定制和配置,支持不同的总线宽度、时序要求和传输协议。

– 可扩展性: ARM总线结构支持多种外设和系统组件的连接,可以灵活扩展系统的功能和性能,满足不同应用场景的需求。

– 性能: ARM总线结构具有高性能的特点,支持高带宽、低延迟的数据传输,为系统提供快速、可靠的数据交换和处理能力。

7. 结语:

1, 介绍

本文主要介绍总线相关的知识,会从以下几个方面展开:什么是总线,为什么需要总线,总线的组成,总线的分类,ARM中常见的总线协议是什么,然后后面的部分会着重介绍一下ARM中常见的总线协议及工作原理。

什么是总线呢?总线是计算机各种功能部件(运算器、控制器、内存、输入、输出等)之间传送信息的公共通信干线,它是由导线组成的传输线束。简单来说总线也是导线,是连接两个以上计算机部件的专用信号线,在各个部件之间传送信息的公共通路。

为什么需要总线呢?总的来说现代计算机及嵌入式系统基本结构,包括3个部件:CPU(运算器+控制器)、存储器、IO设备(输入设备+输出设备),但在实际应用中计算机及嵌入式系统的结构远比基本结构要复杂,一个计算机或嵌入式系统中往往会有多个CPU、存储器或者IO设备,这些部件只有连接在一起才能形成完整的计算机系统。这些部件可以由多种不同的拓扑结构进行连接,比如星型、树型、环形、总线型、交叉开关。这几种拓扑结构相较而言,总线型结构更有优势,它主要具有如下优点:

1)结构简单灵活,便于扩充或减少部件;

2)可靠性高,响应速度快;

3)共享资源能力强,非常便于广播式工作,即一个结点发送所有结点都可接收。

因此,计算机及嵌入式系统主要采用总线型结构连接各部件。

总线由哪些部分组成的呢?总线是从源部件传送信息到一个或多个目的部件的一组传输线,而导线则是仅仅连接一个源部件到一个或多个目的部件的传输线。总线除了要有传输导线外,重要的是总线控制线路。由于总线有输出信息的源部件,多个接收信息的目的部件,对于发送的信息就必须经过选择判优,分开发送,避免多个部件同时发送信息的矛盾。同时还应对传送的信息进行定时,防止信息丢失。这样,总线中应该设置总线控制线路。总线控制线路,包括总线判优或仲裁控制逻辑、驱动器和中断逻辑等。

都有哪些类型总线呢?其实按照不同的分类标准,总线有多种类型。按照功能分类:数据总线、地址总线、控制总线,分别用来传输数据、数据地址和控制信号。按照总线的传输格式划分:串行总线和并行总线,分别串行、并行的传输数据。按照时序控制方式划分:同步总线和异步总线,同步总线所连接的各部件使用同一个时钟,在规定的时钟节拍进行规定的总线操作,来完成部件之间的信息交换,异步总线所连接的各部件没有统一的时钟,部件之间通过信号握手的方式进行,总线操作时序不固定。我们着重关注按照总线功能划分:片内总线、系统总线、通信总线。

  • 片内总线:CPU内部的总线。它是CPU内部控制器、运算逻辑单元、寄存器等模块之间的公共连接线。
  • 系统总线:CPU、GPU、ISP、CODEC、主存、I/O等各大部件之间的信息传输线,它把这些部件连接起来构成了计算机或嵌入式系统。由于这些部件通常都在硬件板子上,因此又叫做板级总线和板间总线。按系统总线传输信息的不同,它又可分为三类:数据总线、地址总线和控制总线。
    • 数据总线(Data Bus):用来传输各功能部件之间的数据信息,它是双向传输总线,其位数与机器字长、存储字长有关。在任意两个涉及数据(包括要运算的数据信息,要处理的指令信息)的存储、处理乃至交换、传输的设备之间,都应有数据总线。>它的两个性能指标是传输的速率和总线的宽度。前者是指每个单位时间它传送多少个数据,显然这个指标将对计算机或嵌入式的运算速度有重大影响,而它与传输的距离也有关系。后者是每条总线可以同时传送多少位,也就是这个总线一共有多少条实际的物理线路,我们把它称为总线的宽度。
    • 地址总线(Address Bus):用来指出数据总线上的源数据或目的数据所在的主存单元或I/O端口的地址,它是单向传输总线,地址总线的位数与主存地址空间的大小有关。地址总线用于传送地址信号,以确定所访问的存储单元或某个输入/输出端口。计算机或嵌入式中地址总线一般有16位、20位、24位、32位、36位等几种宽度标准,与存储器所用的地址的位数以及端口的地址位数相对应。地址总线要和数据总线一起使用才有效。比如,如果要从某个设备向存储设备存入数据,则这个数据应该放到从某个设备连接到存储设备的数据总线上,同时应在连接这两个设备的地址总线上给出存储设备的地址,这样才能实现正确的存入(写入)操作。只有掌握总线控制权的主控部件,如CPU、DSP等,才能向地址总线上发送地址信息。而像存储器这样不掌握总线控制权的部件,只能从地址总线上接收地址信息,并配合控制信号进行地址译码就可以了。
    • 控制总线(Control Bus):传输的是控制信息,包括CPU送出的控制命令和主存(或外设)返回CPU的状态反馈信号。其实要实现对存储器的读、写操作,需要在控制信号上的信号控制之下,同时有数据总线、地址总线的参与,读、写操作才能实现。以实现把数据总线上的数据存入地址总线给出相应地址的存储器的某个存储单元为例,控制总线在其工作的周期中首先使地址总线工作,从而使相应单元发送地址信息到存储器做好接收数据的准备,然后使数据总线工作,把它上面的数据写到该存储单元中。地址总线与数据总线上的信息一直维持到控制总线工作周期的结束。
  • 通信总线:用于计算机或嵌入式系统之间或计算机或嵌入式系统与其他系统(如远程通信设备、测试设备)之间信息传送的总线,通信总线也称为外部总线。常见的通信总线,比如USB、PCIE、SPI、IIC、UART等总线。

ARM为高性能嵌入式系统定义了AMBA(Advanced Micro-Controller Bus Architecture,高级微控制器总线架构)On-Chip Bus片上总线规范,这个协议定义的主要是一系列系统总线。比如,AHB(Advanced High-Performance Bus,高级高性能总线)、APB(Advanced Peripheral Bus,高级外设总线)、AXI(Advanced Extensible Interface,高级可扩展接口总线)、ACE(AXI Coherency Extensions,AXI一致扩展总线)、ASB(Advanced System Bus,高级系统总线)等。接下来重点介绍一下AHB、APB、AXI总线。

AHB(用于高性能,高数据吞吐部件,如CPU、DMA、DSP之间的连接)、APB(为系统的低速外部设备提供低功耗的简易互连)、AXI(主要面向高性能地址映射通信的需求)

2,AMBA总线

2.1 AMBA的演进

AMBA是ARM在1996年推出的互联协议,主要用在片上系统中各IP(比如:CPU、GPU、内存、DSP等)之间的通信,整个通信基于主从协议。AMBA促进了IP的模块化设计、可重用性、兼容性和可扩展性。

AMBA高级微控制器总线架构的演进过程如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AMBA高级微控制器总线架构的演进过程

AMBA自1996年以来经过不断发展,目前已经发展到第五代了。APB(高级外设总线)和ASB(高级系统总线)是最早的AMBA总线协议。随后在1999年推出了AMBA2,在此版本中,AMBA增加了AHB(高性能总线)。到2003年,AMBA3引入了AXI(高级可扩展接口),将互连的性能做了比较大的提升。它还带来了ATB(高级跟踪总线),用于CoreSight跟踪的解决方案和片上调试。ASB总线协议由于设计复杂而不再使用。这种设计持续了多年,直到2010年AMBA4引入了ACE(AXI一致性扩展总线)。引入QoS和long burst的支持,根据不同应用可选择AXI4、AXI4-lite、AXI4-stream。这个版本在很大程度上提升了AXI,并为新版本奠定了基础。到2013年,AMBA5出现了,并提供了CHI(相干集线器接口)以及新设计的高速传输应用程序,有助于减少拥堵。AMBA的影响如此之大,以至于今天这些协议被作为所有嵌入式处理器的行业标准。

APB:是低带宽总线协议,为了支持外围设备,在低功耗和低复杂性方面进行了特定的优化。读写操作共享同一组信号,不支持burst数据传输。它用作外围设备的低成本接口,不需要大量数据,低延时的传输,因此不需要高性能的流水线总线接口。APB总线的任何传输至少需要2个周期。典型的含有APB总线的系统,在 AHB、AXI与连接外围设备接口的APB总线之间含有APB桥接器,通过它可以访问外围设备的可编程寄存器。

AHB:主要是针对高性能、高时钟频率及快速系统模块所设计的总线,它充当高性能系统主干总线,可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。它支持多个总线主控并支持高带宽操作。典型的AMBA系统设计包含 AHB主机、AHB从机、AHB仲裁器和AHB解码器。它用于在共享总线上连接需要高带宽的组件,如DMA、DSP和内存。AMBA AHB支持了如下特性:

  • 突发传输
  • 拆分交易
  • 更宽的数据总线配置(64/128 位)
  • 单时钟边沿操作
  • 单周期总线主切换

AHB-lite:是AHB的一个简化版本。简化后只支持一个Master,这消除了对任何仲裁、重试、分割事务等的需求,通过简化设计,提高了传输性能。

AXI:是一种并行、高性能、高频率、同步的总线协议。适合于高带宽和低延迟互连。这是一个点对点的互连协议,支持乱序传输、读写通道分离,它克服了AHB、APB等共享总线协议在可连接的代理数量方面的限制。该协议支持多个outstanding 的数据传输(多组未完成事务共存)、burst数据传输、单独的读写通道和支持不同的总线宽度。它针对高性能和高频系统,具有以下主要特点:

  • 多笔未完成交易
  • 乱序数据补全
  • 仅发布起始地址的基于突发的事务
  • 支持使用选通的非对齐数据传输
  • 同时读取和写入事务
  • 用于高速操作的流水线互连

AXI-lite:简单低吞吐量的内存映射通信,是AXI总线协议的简化版本,简化后不支持突发数据传输,用于操作控制和状态寄存器。

AXI-stream:是AXI总线协议的另一种风格,它只支持数据流从master流到slave单向流动,用于高速流数据传输。与完整的AXI或AXI-lite不同,AXI-stream协议数据流只在一个方向流动,没有单独的读、写通道。

ACE:AXI4协议的扩展,应用于在一个芯片上集成多个CPU核心与一致性cache的场景。ACE协议扩展了AXI读写数据通道,同时引入了单独的snoop 地址、snoop 数据和snoop 响应通道。这些额外的通道提供了实现基于snoop的一致性协议的机制。ACE一致性协议确保所有master都能看到任何地址位置的正确数据。这避免了对缓存之间主要一致性的软件缓存维护。ACE 还提供屏障事务来保证系统内多个事务的排序,以及分布式虚拟内存 (DVM) 功能来管理虚拟内存。

ACE-Lite:对于没有自己cache的agents,但仍属于可共享一致性域的一部分,如DMA或网络接口agent,使用ACE-lite协议实现这种“单向”一致性。

CHI:ACE协议作为AXI的扩展而开发,以支持一致性互连。ACE协议使用了master/slave之间的信号电平通信,因此互连需要大量的线和增加的通道来进行snoops和响应。随着SOC上集成越来越多的一致性clusters,AMBA5修订版引入了CHI协议。定义了连接完全一致的处理器的接口。它是一种基于数据包的分层通信协议,具有协议、链路和网络层。它与拓扑无关,并提供基于服务质量 (QoS) 的机制来控制系统中的资源。它支持处理器之间的高频和非阻塞相干数据传输,为数据中心等应用提供性能和规模。

以上的AMBA演进及各总线协议的介绍,是我们深入地了解这些协议的开始,要想进一步深入了解这些总线的最好方法是阅读相应的协议规范,通过这些协议规范,我们可以了解每个协议的细节。其中APB和AHB总线协议相对简单,比较容易学习。而AXI和ACE、CHI总线相对复杂,需要详细阅读,以及了解缓存一致性和一般通信协议的基本知识,加上实践才能掌握这些总线协议。本文后面会详细介绍APB、AHB及AXI,由于是现学现卖,难免会有理解不到位的地方,仅供大家参考。

2.2 AMBA总线框架

2.2.1 AMBA总线系统框图

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AMBA总线系统框图

系统总线连接的设备,根据功能不同分为主模块和从模块。大部分挂在总线上的模块只是单一属性的功能模块:比如要么是主模块,要么是从模块。主模块是向从模块发出读写操作的模块,如CPU、DSP等。从模块是接受主模块发来的命令并做出反应的模块,如片上的RAM,AHB/APB桥接器等。另外,还有一些模块同时具有两种属性,比如DMA(直接存储器存取),在被CPU编程时是从模块,但在后续传输数据时是主模块。

系统芯片上,通常设计多个主模块和多个从模块。不同的从模块在总线上对应着互不重叠的地址区间,总线通过主模块发起传输任务的目标地址。AXI总线使用不同的ID号来区分主模块,主模块可以在其他主模块访问未完成的情况下继续发起请求。同一条AHB总线上的设备共享固定的地址数据传输通道,这意味着其中一个主模块占用AHB总线后,其余主模块均处于等待状态。如果总线上存在多个主模块,这就需要仲裁器来决定如何控制各种主模块对总线的访问。虽然仲裁规范是AMBA总线规范中的一部分,但具体使用的算法由RTL设计工程师决定,其中两个最常用的算法是固定优先级算法和循环制算法。AHB总线上最多可以有16个主模块和任意多个从模块,如果主模块数目大于16,则需再加一层结构(具体参阅ARM公司推出的Multi-layer AHB规范)。

AHB-APB桥接器既是APB总线上唯一的主模块,也是AHB总线上的从模块。其主要功能是锁存来自AHB系统总线的地址、数据和控制信号,并提供二级译码以产生APB外围设备的选择信号,从而实现AHB协议到APB协议的转换。AXI-AHB桥接器跟AHB-APB桥接器具有类似的功能。

如上AMBA系统总线框图,AXI总线连接嵌入式处理器、片内RAM、DMA主机、ISP、CODEC等高速设备,AHB总线连接着PCIE、USB、HDMI、ROM等高速接口设备,APB总线连接UART、SPI、IIC、GPIO、TIMER等低速设备。这样处理器就能通过这些总线及桥接器访问到相应的从模块。根据工作频率不同,总线被设计成高速总线和低速总线:高速总线支持较高的时钟频率,拥有较高的数据带宽和性能,但功耗也比较高,一般适用于处理器、DSP、DMA等高速设备的连接。低速总线工作频率低,虽然性能差,但功耗也低,适合挂载串口等低速外设。

2.2.2 总线术语

  • Transfer与transaction:transfer指的是传输1bit数据,transaction是多个transfer的集合(在AXI里也成为一个burst)。Transaction是包含整个burst的传输,包括address/data/response。Transfer值的是单个信息的传输,比如一个address或一个data。
  • Burst传输:在AXI协议中,一个transaction一般以一个burst为单位进行传输,burst的传输类型:FIXED、INCR、WRAP。
  • Outstanding传输:表示正在进行中的传输,master在当前transaction任务完成之前,就可以开始进行下一个transaction,因此系统中可能存在多个outstanding的transaction。即一个transaction已经发出,但还没有得到response。

2.2.3 总线的性能指标

  • 总线时钟周期:机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制。大多数情况下,一个总线周期包含多个总线时钟周期。有时,一个总线周期就是一个总线时钟周期。有时,一个总线时钟周期可包含多个总线周期。
  • 总线的时钟频率:即机器的时钟频率,为总线时钟周期的倒数。若总线时钟周期为T,则总线时钟频率为1/T。实际上指一秒内有多少个时钟周期。
  • 总线的传输周期(总线周期):一次总线操作所需的时间(包括申请阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期构成。
  • 总线的工作频率:总线上各种操作的频率,为总线周期的倒数。若总线周期=N个总线时钟周期,则总线的工作频率=时钟频率/N。实际上指一秒内传送几次数据。
  • 总线宽度:又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位(bit)总线。
  • 总线带宽:可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)表示。总线带宽=总线工作频率×总线宽度(bit/s)=总线工作频率×(总线宽度/8)(B/s)=(总线宽度)/(总线周期)(bit/s)。总线带宽是指总线本身所能达到的最高传输速率。在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时。
  • 总线复用:总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线传输更多的信息,从而节省了空间和成本。
  • 信号线数:地址总线、数据总线和控制总线3种总线数的总和称为信号线数。

2.2.4 总线仲裁

由于总线上连接着许多模块(设备),什么时候由哪个模块发送信息,如何给信息传送定时,如何防止信息丢失,如何避免多个模块同时发送,如何规定接受信息的模块等等一系列问题,都需要由总线控制器进行管理。它主要包括总线仲裁(或称为总线判优控制)和通信控制两个方面。

总线上所连接的各类设备,按其对总线有无控制功能可分为主设备和从设备两种。主设备对总线有控制权,从设备只能响应从主设备发来的总线命令。总线上信息的传送是由主设备启动的。

如某个主设备想与另一个设备进行通信时,首先由主设备发出总线请求信号,若多个主设备同时要使用总线时,就由总线控制器的判优、仲裁逻辑按一定的优先等级顺序,确定哪个主设备能先使用总线。只有获得总线使用权的主设备才能开始传送数据。

总线仲裁方式可分集中式和分布式两种,前者有一个称为总线控制器或仲裁器的硬件设备负责分配总线使用权,这个设备可以是独立的模块,也可以是CPU的一部分。后者没有明确的总线控制器,而是将控制逻辑功能分散在与总线连接的各个部件或设备中。

常见的仲裁管理方式如下:

1)链式查询方式(集中式)

为减少总线授权线数量,采用下图所示的菊花链查询方式(BS总线忙、BR总线请求、BG总线同意)。

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

链式查询方式

链式查询方式的主要特点是:总线授权信号BG串行地从一个I/O接口传送到下一个I/O接口,假如BG到达的接口无总线请求,则继续往下查询,假如BG到达的接口有总线请求,BG信号便不再往下查询,发出相应的BR信号,并置BS信号。这意味着该I/O接口就获得了总线控制权。

可见,在查询链中离中央仲裁器最近的设备具有最高优先级,离中央仲裁器越远,优先级越低。因此,链式查询是通过接口的优先级排队电路来实现的。链式查询方式存在的优缺点如下:

  • 优点:只用很少几根线就能按一定优先级实现总线仲裁,并且这种链式结构很容易扩充设备。
  • 缺点:对询问链的电路故障很敏感,如果第n个设备的接口中有关的电路有故障,那么第n个以后的设备都不能进行工作。另外查询链的优先级是固定的,如果优先级高的设备频繁出现请求时,那么优先级较低的设备可能长期不能使用总线。

2)计数器定时查询方式(集中式)

与链式查询方式相比,多了一组设备地址线,少了一根总线同意线BG。总线控制模块接到由BR送来的总线请求信号后,在总线未被使用(BS=0)的情况下,由计数器开始计数,按计数值向各设备发出一组地址信号。当某个有总线请求的设备地址与计数值一致时,便获得总线使用权,此时终止计数查询。

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

计数器定时查询方式

这种方式的特点是:计数可以从“0”开始,此时设备的优先次序是固定的;计数也可以从中止点开始,既是一种循环方法,此时设备使用总线的优先级相等。计数器的初始值还可由程序设置,故优先次序可以改变。此外对电路故障不如链式查询方式敏感,但增加了主控制线数,控制也较复杂。

3)独立请求方式(集中式)

独立请求方式如下图所示。其中每一个共享总线的设备均有一对总线请求线BRi和总线授权线BGi。当设备要求使用总线时,便发出该设备的请求信号BRi。总线控制部件中有一排队电路,可根据优先次序确定响应哪一设备的请求,给设备发相应的授权信号BGi。独立请求方式的优点是响应时间快,优先级次序控制灵活。但其缺点是控制线数量多。

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

独立请求方式

4)分布仲裁方式(分布式)

分布式仲裁不需要中央仲裁器,每个潜在的主控功能模块都有自己的仲裁号和仲裁器。当它们有总线请求时,把它们惟一的仲裁号发送到共享的仲裁总线上,每个仲裁器将仲裁总线上得到的号与自己的号进行比较。如果仲裁总线上的号大,则就撤销自己向仲裁总线发送的仲裁号。最后,获胜者的仲裁号保留在仲裁总线上,获得总线控制权。

2.2.5 总线操作和定时

操作和定时主要解决占用总线的一对设备(主模块和从模块)如何进行数据传输的问题。总线定时是指总线在双方交换数据的过程中需要时间上配合关系的控制,这种控制称为总线定时,它的实质是一种协议或规则。

1)总线传输的四个阶段

  • 申请分配阶段:由需要使用总线的主模块(或主设备)提出申请,经总线仲裁模块决定将下一传输周期的总线使用权授予某一个申请者。也可将此阶段细分为传输请求和总线仲裁两个阶段。
  • 寻址阶段:获得使用权的主模块通过总线发出本次要访问的从模块的地址及有关命令,启动参与本次传输的从模块。
  • 传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送。
  • 结束阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权。

2)总线的定时

总线的定时主要分为两种,同步定时和异步定时。

同步定时方式是指系统采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。若干个时钟产生相等的时间间隔,每个间隔构成一个总线周期。在一个总线周期中,发送方和接收方可进行一次数据传送。因为采用统一的时钟,每个模块或设备发送或接收信息都在固定的总线传送周期中,一个总线的传送周期结束,下一个总线传送周期开始。同步通信适用于总线长度较短及总线所接模块的存取时间比较接近的系统。

  • 优点:传送速度快,具有较高的传输速率,总线控制逻辑简单。
  • 缺点:主从模块属于强制性同步,不能及时进行数据通信的有效性检验,可靠性较差。

在异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依靠传送双方相互制约的“握手”信号来实现定时控制。主模块提出交换信息的“请求”信号,经接口传送到从模块。从模块接到主模块的请求后,通过接口向主模块发出“回答”信号。

  • 优点:总线周期长度可变,能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换,自动适应时间的配合。
  • 缺点:比同步控制方式稍复杂一些,速度比同步定时方式慢。

根据“请求”和“回答”信号的撤销是否互锁,分为以下3种类型。不互锁方式速度最快,可靠性最差,全互锁方式最可靠,速度最慢。

  • 不互锁方式:主模块发出“请求”信号后,不必等到接到从模块的“回答”信号,而是经过一段时间,便撤销“请求”信号。而从模块在接到“请求”信号后,发出“回答”信号,并经过一段时间,自动撤销“回答”信号。双方不存在互锁关系。
  • 半互锁方式:主模块发出“请求”信号后,必须等接到从模块的“回答”信号后,才撤销“请求”信号,有互锁的关系。而从模块在接到“请求”信号后,发出“回答”信号,但不必等待获知主模块的“请求”信号已经撤销,而是隔一段时间后自动撤销“回答”信号,不存在互锁关系。
  • 全互锁方式:主模块发出“请求”信号后,必须等从模块“回答”后,才撤销“请求”信号。从模块发出“回答”信号,必须待获知主模块“请求”信号已撤销后,再撤销其“回答”信号。双方存在互锁关系。

2.3 APB总线

2.3.1 APB总线简介

APB总线属于AMBA总线协议系列之一,它用在低带宽、低性能、低功耗的外围设备上,它属于非流水线结构,所有的信号仅在时钟上升沿时产生变化,这就规范了APB外围设备的设计流程,增加了可扩展性,每个传输至少需要两个时钟周期。另外,APB无需等待周期和回应信号,只有四个控制信号,控制逻辑简单。

APB经过了几个版本的演进越来越完善,每个版本的差异如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

APB演进过程

2.3.2 APB传输状态图

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

APB传输状态图

状态介绍:

  • IDLE:APB总线上没有数据传输时的空闲状态,也是APB的default状态。
  • SETUP:当一个transfer被请求后,APB总线就会切换到该状态。
  • ACCESS:SETUP只会保持一个时钟,在下一个时钟上升沿会切换到该状态。

状态切换过程:

  • APB总线初始化为IDLE状态,这时没有传输操作,也没有选中slave模块。
  • 当有transfer需要进行时,PSELx=1,PENABLE=0,APB总线进入SETUP状态,并在SETUP状态下停留一个时钟周期。当下一个PCLK时钟上升沿到来时,APB总线进入ACCESS状态。
  • APB总线进入ACCESS状态时,维持之前在SETUP状态的PADDR、PSEL、PWRITE,然后将PENABLE置为1。传输也只会在ACCESS状态维持一个周期,在经过SETUP与ACCESS状态之后,传输也已经完成了。
  • 之后如果没有新的transfer需要进行,就进入IDLE状态等待,如果有连续的传输,则进入SETUP状态。

2.3.3 APB信号

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

APB信号

2.3.4 APB写传输

写传输包括两种类型:无等待状态和有等待状态。

1)无等待状态的写传输

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

无等待状态的写传输

地址、写入信号、写入数据和选择信号都在时钟上升沿时改变。在T1时刻,把要访问的地址、命令和数据全部放到APB总线上,开始一个写传输,在时钟的上升沿会写地址PADDR、写数据PWDATA、使能写信号PWRITE,然后使能选择PSEL信号,选择从设备。这个时钟周期对应的阶段叫做SETUP。在T2时刻,在PCLK的上升沿,使能PENABLE以及PREADY信号,从设备发现自己的PSEL信号为高,就知道主设备选择它来处理数据的写操作,此时从设备内部准备号处理数据的准备动作。PENABLE的使能代表着ACCESS传输阶段的开始。在下一个PCLK的上升沿,PREADY信号的改变表明从设备完成了这笔传输。在T3传输结束时刻到来前,PADDR、写数据PWDATA和控制信号保持有效,直到T3时刻PCLK的上升沿到来才会结束ACCESS阶段,从设备完成总线上数据采样并进行内部数据处理。在传输结束的时候,如果没有其他的相同的外设传输发起,PENABLE和PSEL信号会被清除。

2)有等待状态的写传输

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

有等待状态的写传输

如上时序图,展示了从设备怎么使用PREADY信号扩展传输。在ACCESS阶段,当PENABLE被置位,从设备通过拉低PREADY来扩展传输。在PREADY保持低电平时,如下信号保持不变,比如:PADDR、PWRITE、PSEL、PENABLE、PWDATA、PSTRB、PPORT。当PENABLE被置低,PREADY状态不确定,这确保具有两个固定时钟周期访问的外设能保持PREADY高。建议地址和写信号在传输结束后,保持稳定不做快速变化,直到另外一个访问产生。这会减少不必要的功耗消耗。

2.3.5 APB读传输

读传输也包括两种类型:无等待状态和有等待传输。

1)无等待状态的读传输

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

无等待状态的读传输

如上时序图,展示了一个读传输。主设备在T1时刻把所要访问的地址,命令全部放到APB总线上,沿着组成APB的接口传播到从设备接口处。在T2时刻,从机发现自己的PSEL信号为高,就知道主机需要它内部的数据(PWRITE ==0),此时从机内部准备好返回数据,并把返回的数据放在数据总线上,在T3时刻,主机完成总线上数据采样得到需要的数据。

2)有等待状态的读传输

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

有等待状态的读传输

上时序图显示了信号是如何扩展传输的。如果在Access phase期间PREADY信号拉低,则传输被扩展。但下述信号不变:

  • 地址:PADDR
  • 写信号:PWRITE
  • 选择信号:PSEL
  • 使能信号:PENABLE.

图中显示了如何使用PREADY信号来添加两个周期,也可以添加数个周期。

2.3.6 APB错误响应

使用PSLVERR来表明APB传输的错误状态。在读或者写传输的时候都有可能产生错误状态。使用PSLVERR来指示APB传输错误。当PSEL、PENABLE以及PREADY 都为高时,PSLVERR才在最后一个周期进行判断。当任何一个PSEL、 PENABLE或者PREADY为低时,你可以将PSLVERR拉低,这是推荐,并不是强制要求。收到一个错误后,可能或不可能改变外围器件的状态。这是外设的特性,两者都是可以接受。当一个写传输收到一个错误,这并不是说外设的寄存器没有被主设备更新。当收到一个读传输的错误,这意味着返回的是无效的数据。没必要在读传输失败的时候,通过总线返回0。APB外围设备不要求必须支持PSLVERR引脚,当不使用该引脚时,应被置低。

1)写传输失败

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

写传输失败

上图显示了一个写传输失败的时序图。在PSEL、PENABLE以及PREADY 都为高时,PSLVERR在最后一个周期进行判断,上图显示PSLVERR返回了一个错误。

2)读传输失败

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

读传输失败

一个读传输可能是以总线返回错误结束,这表明当前这笔读传输返回的数据是无效的。上图显示了一个读传输失败的时序图。

2.4 AHB总线

2.4.1 AHB总线简介

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AHB总线简介

AHB是一种高性能、高时钟频率的AMBA总线协议。主要用于连接RAM、DMA、Bridge等高速设备。主要支持如下特性:burst传输、Split事务处理、单周期master移交、流水线操作、支持多个总线主设备。

AHB总线的强大之处在于它可以将微控制器CPU、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等连接起来,构成一个独立的完成SOC系统。不仅如此,还可以通过AHB-APB桥来连接APB总线系统。AHB可以成为一个完成的SOC芯片的骨架

2.4.2 AHB的组成

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AHB的组成

完整的AHB总线由四个部分构成:

  • AHB主设备Master:总线主设备能够通过提供地址和信息发起读写操作,任何时候,只允许一个总线主设备处于有效状态,并使用总线。
  • AHB从设备Slave:从设备在给定的地址空间范围内响应读写操作,总线从设备将成功、失败或者等待数据传输的信号返回给有效的主设备。
  • AHB仲裁器Arbiter:总线仲裁器确保每次只有一个总线主机被允许发起数据传输。即使仲裁协议已经固定,任何一种仲裁算法,比如最高优先级或者公平访问都能根据应用要求而得到执行。AHB必须只包含一个仲裁器,尽管在单总线主设备系统中这显得并不重要。
  • AHB译码器Decoder:AHB译码器用来对每次传输进行地址译码,并且在传输中包含一个从设备选择信号。

每个AHB都需要一个仲裁器和一个解码器,并且分别有且只有一个。

总线可分为三组:

  • 写数据总线(HWDATA)
  • 读数据总线(HRDATA)
  • 地址控制总线(HADDR)

2.4.3 AHB总线操作

主设备通过驱动地址和控制信号开始一次传输。这些信号提供了地址、方向、传输的位宽,如果传输的类型是猝发,那么会指示出传输的类型。传输的类型可以是:

  • 单次传输(Single)。
  • 递增猝发(Incrementing burst),即在地址边界处不进行包装(地址不进行回绕)。
  • 包装猝发(Warpping burst),及到达地址边界处重新包装下一次传输的地址(地址回绕)。

写操作数据由主设备到从设备,读数据数据由从设备到主设备。每次传输都包含两个阶段:

  • 地址阶段(Address phase),地址和控制周期。
  • 数据阶段(Data phase),数据周期是一个或多个周期。

从设备不能请求Address phase进行延长,所以所有的从设备必须具备在Address phase周期采样地址的能力。但是从设备可以请求主设备延长Data phase,通过控制HREADY。HREADY信号为低时,从设备可以在传输中插入等待状态,使得从设备具有额外的时间提供和采样数据。最后从设备使用HRESP表明传输的成功/失败。

2.4.4 AHB信号

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AHB信号

从上面的表可以看出,为了克服APB的缺点,从而支持多主机模式。提升效率操作,在总线接口数量上做了增加,并且位宽也做了提升。

2.4.5 AHB传输

1)AHB传输过程

AHB传输分为以下几个部分:

  • 主模块获取总线使用权:主模块向仲裁器发送总线请求信号,仲裁器发送应答后主模块可以开始传输。
  • 数据传输:主模块向从模块传输数据,分为如下两个部分:
    • 发送地址和控制信号:包括地址、位宽、突发类型(增量突发和回卷突发)等控制新高,仅一个时钟周期。
    • 数据传输:进行数据交换,一个或多个时钟周期。
  • 从模块应答:从模块通过HRESP和HREADY 标记完成状态,对于HRESP,有以下状态:
    • OKAY:标记传输完成,当HRESP为该状态且HREADY拉高时,传输完成。
    • ERROR:标记传输出错
    • RETRY和SPLIT:标记传输未完成,主模块仍需要占用总线。

前面已介绍一个基本的传输包括两个阶段:

  • 地址:持续一个系统时钟HCLK周期,除非被上一个传输延长
  • 数据:可能需要数个系统时钟HCLK周期,使用HREADY信号来控制完成一次传输所需要的时钟周期。

HWRITE:控制数据的方向。当为高时,表明进行一次写传输,数据有主模块端发送,从模块端接收。当为低时,表明进行一次读传输,从模块端产生读数据,主模块端接收读数据。

2)无等待状态传输

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

无等待状态读传输

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

无等待状态写传输

上图是没有等待状态的简单传输的时序图,所以此传输包含一个地址周期和一个数据周期。3.1为读传输,3.2为写传输。在这个没有等待状态的传输中:

  • 主模块端在第一个时钟HCLK上升沿将地址和控制信号到总线。
  • 从模块端在接下来的一个时钟HCLK上升沿进行地址和控制信号采样。
  • 在从模块端对地址和控制信号采样结束后,从模块端可以驱动HEADYOUT信号及数据作为回应。该信号及数据由主模块端在传输的第三个时钟HCLK上升沿进行采样。

这个例子说明了地址和数据阶段在不同的时钟周期是如何传输的。任意一次传输的地址阶段发生在上一次传输的数据阶段(重合,即当前传输的地址阶段和前一次传输的数据阶段重合)。address与data的重合是进行总线流水线处理的基础,此特性允许总线高性能操作,同时也为从模块端发送反馈信息提供了充足的时间。

2)有等待状态传输

从模块端可以插入等待阶段到任意一个传输中从而延长完成传输的时间。每个从模块端具有一个HREADYOUT信号,该信号为从模块端在data phase阶段驱动。互联结构需要将每个从模块端的HREADYOUT信号联合起来产生一个HREADY信号,HREADY信号用来控制上述延长传输完成时间的过程。

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

有等待状态传输–两个等待状态

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

有等待状态传输–一个等待状态

如上图是具有等待阶段的时序图。3.3是带有两个等待周期的读传输,3.4是带有一个等待周期的写传输。有等待传输下,数据传输阶段可以扩展,即在HREADY拉高之前,数据传输阶段不结束。要求写数据在HREADY拉高前保持稳定,主模块在HRAEADY拉高后采样读数据。对于写操作,在HREADY为低的等待阶段内,主模块端需要将写数据DATA保持不变,直到写操作完成。对于读操作,从模块端只需要在HREADY为高的周期内提供有效数据即可。

当传输由具有等待阶段通过延长address阶段进行延长时,那么对接下来的传输具有副作用。3.5是包含地址不相关的3次传输,A,B和带有一个等待周期的C传输。

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

多类型传输

在上述时序图中:

  • 传输A和传输C是0等待传输。
  • 传输B具有一个等待周期的address phase。
  • 延长传输B的数据phase对下一次传输C的address phase会相应的拉长。

2.4.6 传输类型

1)传输类型

传输类型使用端口HTRANS标记,有以下取值:

  • IDLE(0b00):标志主模块占有AHB总线,但是没有数据传输发生。从模块需要使用OKAY状态回应该类型
  • BUSY(0b 01):标志主模块占有AHB总线并在进行突发传输,但下一个传输不能立刻发生。从模块需要使用OKAY状态回应
  • NONSEQ(0b 10):标志主模块当前发送的地址和控制信号与上一次传输无关(单次传输就是该状态)
  • SEQ(0b 11):标记主模块处于突发传输的中间部分,即当前发送的地址和控制信号与上一次地址和控制信号有关

2)突发类型

突发传输分为两类:

  • 增量突发:传输过程中传输地址递增。下一次传输的地址是上一次地址加上一个增量。
  • 回卷突发:猝发的地址范围被限制在一个固定范围之内,传输地址递增,若是超出则回到地址范围的开始的地址。例如从0x34进行增量为4,范围为16的回卷突发,地址顺序为0x34、0x38、0x3c,0x30

突发类型使用字段HBURST标记,含义如下表所示:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

突发类型

注意一次突发传输不能跨越1kB的地址区间,且传输的起始地址必须与数据类型对应,例如传输字数据的二进制起始地址必须满足后两位为00。

3)突发终止

从机通过监控HTRANS发现突发传输的终止:

  • 若下一个HTRANS标记为BUSY或SEQ:突发传输未终止
  • 若下一个HTRANS标记为NONSEQ或IDLE:上一次突发传输已经终止

若突发传输是提前终止的,如总线控制权被剥夺,那么主机需要在可以进行传输时重建突发传输。例如一个4拍传输仅发送了一拍就终止,主机需要使用INCR类型的突发构建3拍传输以重建。

4)传输的例子

例子如下图所示:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

传输类型举例

  • T0~T1:由非连续序列性的传输启动的4拍读。
  • T1~T2:主模块端不能进行传输,在第二个周期,所以插入了一个BUSY传输来延时第二次传输。此周期从模块端返回第一个周期主模块端发送读地址的读数据。
  • T2~T3:主模块端准备好进行第二次传输,发送一个SEQ传输。主模块端此周期将会忽略读数据总线上由任何从模块端返回的读数据(因前一个周期为BUSY传输)。
  • T3~T4:主模块端进行了第三次传输。发送了一个SEQ传输,此时读数据返回主模块端发起的第二次SEQ读读数据。
  • T4~T5:主模块端进行最后一次传输。此时在第一个周期内HREADY信号为低,从模块不能将前一次SEQ读的数据返回,所以将延迟上一次SEQ传输的DATA Phase,也就是当前传输的ADDRESS phase。
  • T5~T6:从模块端返回第T3、T4周期发送的SEQ读数据。
  • T6~T7:无传输命令,返回T4、T6发送的读数据。

2.5 AXI总线

2.5.1 AXI总线简介

AXI作为AMBA总线协议的一部分,第一次出现在AMBA 3.0中。后面AMBA 4.0发布,AXI4出现了。AXI4总线和别的总线一样,都用来传输bits信息(包含了数据或者地址)。AXI是一种面向高性能、高带宽、低延迟的片内总线。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址,同时分离的读写数据通道、并支持显著传输访问和乱序访问,并更加容易就行时序收敛。

AXI特点是单向通道体系结构,信息流只以单方向传输,简化时钟域间的桥接,减少门数量。当信号经过复杂的片上系统时,减少延时。支持多项数据交换。通过并行执行猝发操作,极大地提高了数据吞吐能力,可在更短的时间内完成任务,在满足高性能要求的同时,又减少了功耗。独立的地址和数据通道。地址和数据通道分开,能对每一个通道进行单独优化,可以根据需要控制时序通道,将时钟频率提到最高,并将延时降到最低。

AXI4总线有三种类型,分别是AXI4、AXI4-Lite、AXI4-Stream。 AXI4是一种高性能memory-mapped总线,AXI4-Lite是一只简单的、低通量的memory-mapped 总线,而 AXI4-Stream 可以传输高速数据流。从字面意思去理解,AXI4-Lite是AXI4的轻量版。这里保留了memory-mapped的写法,主要是为了与AXI4-Stream区分开。

可以这样去理解memory-mapped,假设有master A, 和 slave B,A与B通过AXI4或者AXI4-Lite连接通讯,A可以把B这个外设看作A上的某个地址。当A向B传输数据时,就等同于A向这个地址传输数据。AXI4-Stream与AXI4、AXI4-Lite不同, 它不需要地址通道。

2.5.2 AXI总线读写框架

1)AXI读写传输

AXI4 和 AXI4-Lite接口包含5个不同的通道:两个读通道和三个写通道。每一个AXI传输通道都是单方向的。每一个传输都有地址和控制信息在地址通道(address channel)中,用来描述被传输数据的性质。

  • 两个读通道:读地址通道(read address channel)、读数据通道(read data channel)。
  • 三个写通道:写地址通道(write address channel)、写数据通道(write data channel)、写响应通道(write response channel)。

对于读操作,主模块通过地址通道发送读传输地址,从模块通过读数据通道返回给主模块所需要的数据。

读传输的结构图如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

读传输的结构图

对于写操作,主模块通过写地址通道发送写传输地址,并通过写数据通道把数据发送给从模块。而从模块接受到数据后,需要通过写响应通道返回一个响应给主模块。

写传输的结构图如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

写传输的结构图

读通道和写通道是分开的,因此可以完成数据的双向传输。此外AXI4能够实现burst传输,换句说就是,可以在一个地址后传输多个数据,最多可以达256 字节。AXI4-Lite不支持burst传输。AXI4-Stream 只有一个通道,不需要地址,可以burst 传输无限的数据。

这5条独立的通道都包含一个信息信号和一个双路的VALD、READY握手机制。信息源通过VALID信号来指示通道中的数据和控制信息什么时候有效。目地源用READY信号来表示何时能够接收数据。读数据和写数据通道都包括一个LAST信号,用来指明一个事物传输的最后一个数据。

读和写传输都有他们自己的地址通道,这地址通道携带着传输所必须的地址和信息。读数据通道传送着从模块到主模块的读数据和读响应信息。读响应信息指明读事务的完成状态。写数据通路传送着主模块向从模块的写数据。每八个数据都会有一个byte lane ,用来指明数据总线上面的哪些byte有效。写响应通道提供了设备响应写传输的一种方式。这完成信号每一次突发式读写会产生一个。

2)AXI典型连接图

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AXI典型连接图

上图是一个典型的一系列主设备与一系列从设备的连接系统。这些主设备与从设备通过interconnect连接在一起。

AXI协议提供单一的接口定义,主要包括:

  • manager和interconnect之间。
  • subordinate和interconnect之间。
  • manager和subordinate之间。

AXI协议还提出了一个重要的概念,那就是 Register Slices,因为 上述五个通道之间没有固定的关系,而且通道中传输的信息是单方向的,那么可以可以在任意一个通道中任意节点 插入register slices,通过插入register slice来抵消长路径的延时,从而提高系统的性能。register slice的使用需要平衡 时钟延时和最大工作频率之间的关系。

2.5.2 AXI信号

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AXI信号

2.5.3 握手信号

在了解AXI每个通道的定义信号后,下面对读写机制中的握手机制进行说明。

五个独立的通道均使用VALID/READY进行握手,VALID由源端产生,用于指示源端发出的地址、数据、控制信息什么时候生效,READY则由目的端产生,用于指示源端发送信息什么时候被接收,只有当VALID和READY同时为高时,才会表示本次传输完成。

VALID和READY握手可以分为下面三种情况:

  • VALID早于READY生效。
  • READY早于VALID生效。
  • VALID和READY同时生效。

具体的时序图参见下面:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

VALID在READY之前的握手

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

READY在VALID之前的握手

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

VALID与READY 的握手

对于五个通道之间的关系,AXI协议仅定义了下面的关系:

  • 写响应必须跟随写操作的最后一个传输。
  • 读数据必须紧跟读地址数据。

除了上述两点定义,AXI未定义其他任何通道间的关系,那么对于通道间的握手信号先后顺序,必须按照特定的顺序操作,不然很容易引起接口上的dead-lock。

具体的,读操作时,对应的读地址通道和读数据通道间握手信号的先后顺序如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

读地址通道和读数据通道间握手信号的先后顺序

解释如下:

  • ARVALID和ARREADY可以参考握手机制中的时序图所示关系;
  • RVALID和RREADY可以参考握手机制中的时序图所示关系;
  • RVALID必须在ARVALID和ARREADY同时生效后被使能;

写操作时,对应的写地址通道、写数据通道、写响应通道间的握手信号的先后顺序如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

写地址通道、写数据通道、写响应通道间的握手信号的先后顺序

解释如下:

  • AWVALID和AWREADY之间的关系可以参考握手机制中的时序图。
  • WVALID和WREADY之间的关系可以参考握手机制中的时序图。
  • WVALID和AWREADY之间也可以参考握手机制中的时序图。
  • BAVALID和BREADY之间的关系可以参考握手机制中的时序图。
  • BVALID必须在WVALID和WREADY同时生效之后再被使能,同时必须是WLAST之后。

上述写操作通道间握手顺序是基于AXI3协议,AXI4/5在AXI3基础上有改进,具体如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AXI4/5握手协议

AXI4/5协议对于BVALID置位条件加强了,同时需要满足WVALID/WREADY和AWVALID/AWREADY生效之后,且是在WLAST之后,才能被使能;

2.5.4 地址结构

AXI协议传输数据时控制信息采用Start_address+Length形式,即Manager发出start_address、length以及burst类型、每次传输的大小等,subordinate需要根据这些信息计算后续的地址,决定返回那些地址对应的数据给manager;那么如何根据manager发送的address、length、burst类型、每个传输的大小这些信息计算出manager需要访问的地址,需要先看一下AXI协议所定义的地址结构;

2.5.5 burst length

AXI协议定义 ARLEN、AWLEN分别表示读操作长度和写操作长度,后面统一使用AxLEN统一表示。

AxLEN的含义:AxLEN+1 个传输(transfer)。

如AxLEN=7,AxSIZE=16byte(后面会讲到),那么本次burst传输的数据量为:8*16=128byte。

AXI3协议定义AxLEN范围:1~16;对应的AxLEN使用4bit表示。

AXI4协议定义AxLEN范围:1~256,对应的AxLEN使用8bit表示。

对于Length还有如下几点限制条件:

  • 对于WARP类型的burst,burst length必须为2、4、8或者16。
  • burst不能超过4KB地址边界。
  • burst不支持提前结束。

2.5.6 burst size

burst size表示每次传输(transfer)包含多少byte,分别定义了ARSIZE、AWSIZE分别表示读传输、写传输大小。

后面统一使用AxSIZE表示,AxSIZE使用3bit表示,具体的译码方式参见下图:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

burst size编码

AxSIZE指定的传输大小不能超过系统工作的数据位宽。

2.5.7 burst type

AXI协议规定下面三种burst类型:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

burst type编码

同理,AxBURST为ARBURST和AWBURST的统称,分别表示读操作、写操作burst类型。

  • FIXED表示每次传输的地址是相同的地址,常用于对FIFO的访问。
  • INCR表示每次地址都是按照递增类型,下次传输的地址=当前传输地址+当前传输的大小。
  • WRAP表示每次地址都是按照递增类型,只有在达到地址边界的时候,会卷绕到低位的地址边界开始,这种卷绕方式同AHB协议相同。

2.5.8 响应类型

上面分析地址结构、数据结构,接下来介绍一下响应类型,BRESP、RRESP分别表示写响应、读响应,后面统一使用xRESP表示,具体的译码规则如下:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

响应类型

2.6 AXI、AHB、APB总线对比

AHB:针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如CPU、芯片上或芯片外的内存模块和DMA等高效率模块。

APB:用在低速且低功耗的外围设备,针对外围设备作功率消耗及复杂接口的优化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB的二级拓展总线。

AXI:高速度、高带宽、管道化互联、单向通道,只需要首地址、读写并行、支持乱序、支持非对齐操作,但连线非常多。

AXI、AHB、APB总线的性能对比分析:

一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核

AXI、AHB、APB总线的性能对比

AHB是高级高性能总线,AXI是高级可扩展接口,APB是高级外围总线。AHB和APB都是单通道总线,不支持读写并行。而AXI是多通道总线,总共分为五个通道,能够实现读写并行。AHB和AXI都是多主/从设备,且通过仲裁机制实现总线控制权的分配。而APB是单主设备多从设备,其主设备就是APB桥,不具有仲裁机制。在数据操作方面,AHB和AXI支持突发传输,APB不支持。此外,AXI支持数据的非对齐操作,AHB不支持。

(平时会分享linux技术干货文章。关注我,可以定期收到相关文章的推送。知乎、微信同名:黑客与摄影师)

参考资料

【计算机基础】总线定义与分类_高阳.的博客-CSDN博客

https://mp.weixin..com/s/B8fv_LH01n7jOkVkeHobcw

https://www.jianshu.com/p/65281e71753f

AMBA、AHB、APB、AXI总线介绍及对比 – 知乎

https://developer.arm.com/architectures/system-architectures/amba

https://www.jianshu.com/p/b2df0788bbd9

https://mp.weixin..com/s/i3Osc_-eY8nFf-NhrSyBPA

https://www.arm.com/architecture/system-architectures/amba

AMBA总线—AHB总线协议详解_little_ox的博客-CSDN博客_ahb总线协议

https://mp.weixin..com/s/PObY

AHB总线

  • 一、 简介
    • 1.1 AHB总线的架构
  • 二、AHB总线(宏观构造)
    • 2.1.AHB总线组成
    • 2.2.AHB总线组成互连
    • 2.3.AHB操作概述
    • 2.4.AHB基本传输阶段
  • 三、AHB总线传输(时序)
    • 3.1.AHB信号描述(重要)
    • 3.2.基本AHB传输(重要)
      • 3.2.1零等待传输(no wait state transfer)
      • 3.2.2等待传输(transfers with wait states)
      • 3.2.3.多重传送(multiple transfer)—Pipeline
    • 3.3.AHB控制信号
      • 3.3.1.传送状态 HTRANS[1:0]
      • 3.3.2.批量传送 HBURST[2:0]
      • 3.3.3.传送方向 HWRITE
      • 3.3.4.传送大小 HSIZE[2:0]
      • 3.3.5.保护控制 HPROT[3:0]
    • 3.4.AHB响应信号
    • 四、AHB模块接口 (重要)

一、 简介

本文主要介绍AMBA2.0 (Advanced Microcontroller Bus Architecture,先进微控制总线结构),主要定义了三种总线:

  • AHB:Advanced High-performance Bus(先进高性能总线) 高速高性能总线;支持2级流水操作(优势)
  • APB:Advanced Peripheral Bus(先进外围总线) 低速总线、低功耗;接口简单
  • ASB:Advanced System Bus(先进系统总线)

1.1 AHB总线的架构

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

img

二、AHB总线(宏观构造)

2.1.AHB总线组成

2.2.AHB总线组成互连

在这里插入图片描述
总线可以分为三组

  • 写数据总线(HWDATA)
  • 读数据总线(HRDATA)
  • 地址控制总线(HADDR)

2.3.AHB操作概述

 有需要占用总线的Master向arbiter发出请求,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。 
  • 1

获得授权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。总线统一规划slave的地址,译码器根据地址和控制信号确定哪个slave与master进行数据通信数据传输通过数据总线完成。为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输每笔传输包括一个地址和控制周期,一个或多个数据周期。地址和控制周期不能被扩展,因此slave必须在一个周期内采样地址信号。数据周期可以通过HREADY信号扩展,但HREADY为低时给传输加入一个等待状态以使slave获得额外的时间来提供或采样数据,另外slave通过响应信号HRESP反映传输状态。
   AHB 支持批量式数据传送,可以自动递增地址。递增地址方式分为:持续递增与回绕传送。
   一般情况下master完成完整的burst传输,arbiter才会授权给其他的master接入总线,然而为避免过大的判决延迟,arbiter也可能打断burst传输。在这种情况下master必须再次接入总线以进行中断的burst剩余部分的传输。

2.4.AHB基本传输阶段

AHB 的传送模式包含二个阶段。第一阶段为地址的传递,另一阶段为数据的传递。

  1. 地址期间; ( address phase): 一个周期
  2. 数据期间;(data phase): 一个周期 (以 HREADY 信号控制周期数目).

三、AHB总线传输(时序)

3.1.AHB信号描述(重要)

信号名 含义 I O 描述
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 当前传输类型 IDLE, BUSY, NONSEQ, SEQ
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 控制HRDATA的读出数据周期 高:Slave输出传输结束 低:Slave需延长传输周期
HRESP[1:0] 传送响应 Slave mux to master; arbiter Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT
HSELx 从选择 Decoder slave slave选择信号

说明:在实际的传输过程中,一般作为AHB总线的Slave设备都有2根hready信号,一个为input类型(hready_in),另一个为output类型(hready_out)。AHB总线协议中,如果Master设备发起读写操作的时候,Slave设备不能及时响应的话,由Slave设备把hready_out信号拉低来拖延Data Phaze周期。

但是在Pipeline操作的时候,本次操作data phaze是下一次操作的address phaze,所以作为Slave设备在响应Master设备的时候,必须先判断一下Master设备对上一次其它Slave设备的操作是否已经完成。如果完成,则响应主设备的操作;如果没有完成,则等待完成,然后才响应操作。hready_in就是Slave设备用来判断Master设备是否对其它Slave设备的操作已经完成的信号

AHB仲裁信号:

信号名 含义 I O 描述
HBUSREQx Bus请求 Master M2A Mx 向 A 发出的总线使用请求信号。最多 16 个 M
HLOCKx 锁定传送 Master M2A 如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号
HGRANTx Bus 同意 arbiter A2M master 授权信号,当前bus master x的优先级最高。 当HREADY和HGRANTx同时为高时,master获取系统总线的权利
HMASTER [3:0] 主号 arbiter A2M 具有split功能的slave 仲裁器为每一个master分配的ID, 指出哪个主设备正在进行传输,提供进行split的信息
HMASTLOCK 锁序 arbiter 具有split功能的slave 表示当前的master正在执行Locked操作。 这个信号和HMASTER有这相同的时序
HSPLITx[15:0] 分段请求 slave S2A 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备

3.2.基本AHB传输(重要)

3.2.1零等待传输(no wait state transfer)

在这里插入图片描述
第一个周期的上升沿,master驱动地址和控制信号;
第二个周期的上升沿,slave采样地址和控制信号,并将HREADY拉高;
   如果是写操作,master会在第二个周期的上升沿传输要写入的数据;
   如果是读操作,slave会在HREADY信号拉高后将读取的数据写入总线;
第三个周期的上升沿,
   如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;
   如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。
需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。







  • 当 HCLK 正沿触发后, M 送出地址与控制信号 ,HCLK 由 CLOCK 驱动送至 AHB 接口。
  • S 在 HCLK下一个正沿触发时, S 收到地址与控制信号
  • 在 HCLK 的第三个正沿触发时, M 收到S 的响应信号
    AHB支持流水线的动作,在收上一笔数据的同时,可将下一笔数据的地址送出。
3.2.2等待传输(transfers with wait states)

传送完成时间因等待而延迟,这是由于寻址到较慢的 S 单元所造成。当 HREADY 被 S 拉低时,会发生等待状态。需要延迟传送的周期时,就会在数据期间将 HREADY 拉低,此时地址与数据都必须延伸。有等待状态的 AHB 传递,下图中可看到在数据模式时,时序必须多花二个周期的延迟等待时间(HREADY 为 0),S 才能正常的接收到 M 写的数据或准备好 M 欲读取的数据
在这里插入图片描述
  slave可以及时处理master请求,但也可能存在slave太慢不能立即处理的情况。这时需要让master稍微等一等,需要slave插入一些等待的状态。如下图所示,HREADY信号在第二和第三周期拉低,意在告诉master,slave不能立即处理,需要master等待2个周期。在这里需要注意2点:
   如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成(?)
   如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据



3.2.3.多重传送(multiple transfer)—Pipeline

在这里插入图片描述

3.3.AHB控制信号

3.3.1.传送状态 HTRANS[1:0]

在 AHB 总线上,M 的传送状态可由 HTRANS[1:0]来表示,这两位所代表的意义如下:

在这里插入图片描述

3.3.2.批量传送 HBURST[2:0]

批量传送是以群组为单位的传送方式,主要依地址的给法来区分:

  • 递增传送(incrementing burst),会依上一笔的地址来递增。
  • 回绕传送(wrapping burst),如:回绕长度 = 4;每 4 个字节要对齐在 16 字节的范围内。如果第一个地址=0x64,则传送的顺序为 0x68、0x6C、0x60。

在这里插入图片描述

3.3.3.传送方向 HWRITE

HWRITE:表示传送方向(依读或写的动作来决定传送信号的方向)

  • HWRITE 拉高时(),M 必须对写入动作初始化,数据会由 M 放到 HWDATA[31:0] 总线上。
  • HWRITE 拉低时(),M 会对读取动作初始化,被寻址到的S会将数据放到 HRDATA[31:0] 总线上。
3.3.4.传送大小 HSIZE[2:0]
3.3.5.保护控制 HPROT[3:0]

HPROT[3:0] 为总线协议保护信号用来定义存取的型态与特性,并非所有的 M 都会传送出 HPROT[3:0],所以除非 S 有需要否则不会使用到 HPROT[3:0]信号。一般来讲该信号很少用到。

3.4.AHB响应信号

master发起一笔传输后,slave可以决定这笔传输的进程,而master不能取消已经发出的传输。slave通过 *HREADY信号反映传输是否完成,通过HRESP[1:0]反映传输的状态*

1)、 slave可以如下方式完成一笔传输:

  • 立即完成一笔传输;
    或几个周期完成传输;
    • 传输失败返回error;
      ,释放总线。


2)、传输完成标志HREADY
          -HREADY为高时传输完成,
          -HREADY为低时传输需要延迟。

3)、传输响应标志HRESP[1:0]

Retry响应:

在这里插入图片描述

HBUSREQx:master向arbiter发出接入请求的信号。
  HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。
  HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。
  HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。
  HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。
  HSPLIT:供支持SPLIT传输使用。




有等待状态的grant:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VNIbICFg-57)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-.png)]

四、AHB模块接口 (重要)

1…从接口框图(很重要、会画):

在这里插入图片描述
  仲裁器在决定出哪一个 M 拥有总线使用权之后,会将这个 M 数据地址、控制信号及欲写入 S 的数据选出,并且送至每一个 S,而所选出的数据地址会再经由 AHB 译码器产生唯一的 HSELx 使能信号来启动一 S 的数据传送。M 启动一个数据传送之后,被使能的 S(即 HSELx 为 1 的 S) 会发出 HREADY 信号来决定是否要延长当前数据的传送,若 S 响应 HREADY 为 0,表示此笔数据的传递必须被延迟,若 S 送出的HREADY 为 1,则表示 S 能够完成此笔数据的传递。
  由图中可发现,S 除了用 HREADY 信号来告知此笔数据是否需要额外的延迟时间之外,还会透过HRESP[1:0]信号响应当前数据传送的情形,以下将说明四种 S 的响应型态:
  第一种响应为 OKAY,当一笔数据可完成传送时,S 会响应以 HREADY 为 1,且 HRESP[1:0]为 OKAY;另外 S 也会在必须差入额外延迟时(HREADY 为 0),但未决定出何种响应方式时,作出 OKAY 的响应;
  另一种的响应方式为 ERROR,这种响应会在 M 所要求传送的数据发生错误时发生,而这种错误常常出现在 M 试图去存取一有读或写的保护机制模块,如 M 试图在只读存储器来写入数据。
  第三种响应方式为 RETRY,此种响应会在 S 无法立即完成此笔数据传送,希望 M 重新传送此笔数据(了解)
  最后一种 S 响应模式为 SPLIT,这种方式的响应跟 RETRY 相似,都是发生在数据未能完成传递时。最大的不同是仲裁器在这两种信号响应之后,选择 M 时所使用的权位算法不一样。如为 SPLIT 响应,仲裁器只允许其它 M 来对 S 作存取的动作,即使要求数据传送的 M 比当前 M 的优先权位来的低,也就是说仲裁器不会选择当前的 M 来进行数据传送;如果 S 响应的是 RETRY,那么仲裁器会用一般的权位算法去找出当前发出数据传递要求权位最高的 M 来进行数据传递。(了解)





2…主接口框图(很重要、会画):
在这里插入图片描述
  每一次的数据传送可分成四种型态,M 用 HTRANS[1:0] 信号来决定此次传送数据的型态,这四种传送型态分别是 IDLE、BUSY、NONSEQ 和 SEQ。
  当 M 传送的数据型态为 IDLE 时,表示 M 这时候想要拥有总线的使用权,但并不需要作数据的传送,此时的 S 必须立即作出 OKAY 的响应;
  第二种数据传送型态为 BUSY,当 M 进行一连续笔数据传递期间,若有些数据无法实时在下一个周期作传送,此时 M 会发出 BUSY 信号来延迟此笔数据的传送,S 这时候也会响应一个和 IDLE 传送型态一样的 OKAY 信号,同时忽略这笔数据的传递;
  另一种传送型态为 NONSEQ,NONSEQ 的传送型态表示此次的传送为单笔数据传送或一连续笔数据传送中的第一笔,因此这种的传送型态,数据的地址和控制信号跟前一笔数据不具有关联性;
  最后一种数据传送型态为 SEQ,在一连续笔数据的传递中,除了第一笔数据之外,其它的数据传递型态为 SEQ (第一笔为 NONSEQ),这种数据传递的控制信号和前一笔相同,而数据的地址则为前一笔数据地址加上由 HBURST[2:0]和 HSIZE[2:0] 信号所决定出的地址累加值。





3…仲裁器接口框图在这里插入图片描述
4…译码器接口框图
在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/138777.html

(0)
上一篇 2025-06-10 20:26
下一篇 2025-06-10 20:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信