深度分析AMBA总线工作原理1

电子说

1.3w人已加入

描述

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高级微控制器总线架构的演进过程如下:

ARM

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总线框架

系统总线连接的设备,根据功能不同分为主模块和从模块。大部分挂在总线上的模块只是单一属性的功能模块:比如要么是主模块,要么是从模块。主模块是向从模块发出读写操作的模块,如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的一部分。后者没有明确的总线控制器,而是将控制逻辑功能分散在与总线连接的各个部件或设备中。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分