4.3 SoC中常用的总线
总线提供了系统中各个设备之间一种互连的访问共享硬件机制。在数字系统中,总线承担数据传输的任务如处理器和存储器之间的数据传输。总线的传输能力由总线的宽度和工作频率决定。总线的设计通常要考虑4个因素:总线宽度、时钟频率、仲裁机制和传输类型。
总线宽度和时钟频率决定了总线的峰值传输速率。这些因素影响成本、功率和工艺要求。
总线连接的设备根据功能不同分为总线主设备和从设备。总线主设备可以发起一个传输任务,而从设备则对主设备发起的事务做出回应。有些设备既可以是总线的主设备,也可以是总线的从设备,如DMA控制器等。当总线上存在多个主设备时,这些主设备有可能在一段时间内同时需要竞争使用总线。这时需要一种仲裁机制来决定总线的使用。仲裁机制的差异会影响总线的利用效率和任一总线主设备所见到的迟滞。使用较多的仲裁机制有轮询机制和按照优先级顺序机制。在轮询机制中,仲裁逻辑循环检查各个主设备的使用请求,从而决定哪一个主设备使用总线,每个总线的主设备拥有相同的优先级,但重要的请求可能需要等待较大的延时后才能获得总线的控制权。在按照优先级顺序的仲裁机制中,各个主设备分配不同的优先级。在这种设计中,优先级高的主设备可以在较少延时下获得总线的使用权。在仲裁机制中,有必要启用某些保护机制,确保总线传输的正常进行。例如,在传输数据过程中采用锁定的机制,只有当前传输结束后才能重新启动仲裁机制,确保该次传输的正常结束。这在多个主设备竞争访问同一个资源时可以确保数据传输的正确性。
总线在传输数据时,可以采用不同的传输类型以适应不同的数据传输要求。在大多数总线中可以实现固定大小的数据块传输和可变大小的数据块传输。更加复杂和先进的总线行为还包括分离处理(Split Transactions)、原子处理(Atomic Transactions)等。当从设备需要比较长的时间处理主设备的数据传输时,可以将总线的控制权交给其他主设备。当该从设备完成数据的处理后,从设备通知主设备可以继续上次没有完成的数据传输。
目前,各大IP提供商都先后推出了自己的总线标准。较有影响力的片上总线标准有ARM公司的AMBA总线、IBM公司的CoreConnect总线、Silicore Corp的Wishbone总线和Altera的Avalon总线等。
SoC设计的一个重要特点是基于IP核的复用。为解决众多IP核复用的问题需要一个快速的连接方案,由此产生了开放核协议(OCP)。OCP是由OCP-IP组织定义的一种标准化的IP 核接口(Interface)或插座(Socket),以便任何带有这一接口的IP都可以在SoC内直接点对点的连接,或通过带有这一标准接口的总线进行互连。
4.3.1 AMBA总线
AMBA总线是ARM公司开发的片上总线标准,目前已经到了3.0版本。AMBA总线标准包括AHB(Advanced High-performance Bus)总线、ASB (Advanced System Bus)总线、APB(Advanced Peripheral Bus)总线和AXI总线。AHB和ASB总线连接高性能系统模块,ASB是旧版本的系统总线,使用三态总线,目前已被新版本的AHB总线所代替。AHB是AMBA2.0标准。而AXI是最新推出的新一代AMBA3.0标准。APB总线连接低速的外围设备。典型的AMBA-AHB系统结构如图4-2所示。
图4-2 典型的AMBA-AHB系统结构
AHB总线连接的系统模块有处理器、DMA控制器、片内存储器、外部存储器接口、LCD控制器等。这些设备往往工作在较高时钟频率下,对系统的性能有较大影响。AHB总线支持仲裁、突发传输、分离传输、流水操作、多主设备等复杂事务。
APB总线连接的外围设备有UART接口、键盘、USB接口、键盘接口、时钟模块等。APB没有复杂事务实现,非流水线操作,可达到减少功耗和易于使用的目的。
最近几年,随着超大规模SoC的兴起,嵌入式系统的性能需求越来越高,导致对片上总线的带宽要求也越来越苛刻。虽然AHB总线的协议在理论上可以让用户不断地增加总线位宽从而达到更大的带宽,但是在节省功耗的前提下,用户希望通过极小的总线宽度、极低的总线频率来实现很高的数据吞吐量,也就是对协议传输效率的要求达到极致。顺应这种趋势,ARM在2004年推出了AMBA3.0-AXI协议。AXI总线是一种多通道传输总线,将地址、读数据、写数据、握手信号在不同的通道中发送,不同访问之间的顺序可以打乱,用BUSID来表示各个访问的归属。Master在没有得到返回数据的情况下可以发出多个读写操作。读回的数据顺序可以被打乱,同时还支持非对齐数据访问。由于各个传输之间仅依靠传输ID来相互识别,没有时序上的依赖关系,所以可以被插入寄存器来打断限制频率的关键路径。那么从理论上讲,AXI协议就没有频率上限了。AXI总线还定义了在进出低功耗节电模式前后的握手协议。规定如何通知进入低功耗模式,何时关断时钟,何时开启时钟,如何退出低功耗模式。这使得所有IP在进行功耗控制的设计时,有据可依,容易集成在统一的系统中。图4-3所示为一种典型的基于AMBA 3 AXI总线协议的SoC结构实例。AXI不仅继承了AHB便于集成、便于实现和扩展的优点,还在设计上引入了指令乱序发射、结果乱序写回等重大改进,使总线带宽得到最大程度的利用,可进一步满足高性能系统的大量数据存取的需求。
图4-3 AMBA-AXI系统结构实例
4.3.2 CoreConnect总线
CoreConnect是IBM开发的一套片上系统总线标准。CoreConnect总线包括PLB(Procesor Local Bus)总线、OPB(On-Chip Peripheral Bus)总线、DCR(Device Control Register)总线。图4-4所示为CoreConnect的总线结构图。
图4-4 CoreConnect的总线系统结构
在CoreConnect总线中,PLB总线连接高性能设备如处理器、存储器接口、DMA等。OPB总线连接低性能设备,如各种外围接口等。OPB总线减少了外围设备对于PLB性能的影响。在PLB和OPB之间存在一个转接的总线桥。PLB到OPB总线桥实现了PLB总线上主设备到OPB总线上从设备的数据传输。它在PLB总线上是从设备,但在OPB总线上却成为主设备。与之相对应,OPB到PLB的桥在OPB上是从设备,但会作为PLB总线的主设备,实现OPB总线上的主设备到PLB总线的从设备的数据传输。DCR总线主要用来访问和配置PLB和OPB总线设备的状态和控制寄存器。DCR总线结构实现了在PLB或OPB传输之外的数据传输。在PLB或OPB总线上的主设备都需要经过总线仲裁设备来获取对于总线的控制权。
4.3.3 Wishbone总线
Wishbone总线是由Silicore公司推出的片上总线标准。这种总线具有简单、灵活和开放的特点,现在已经被OpenCores采用并组织维护。在AMBA或CoreConnect总线中,高速设备和低速设备分别在不同的总线上。而在Wishbone中,所有核都连接在同一标准接口上。当需要时,系统设计者可以选择在一个微处理器核上实现两个接口,一个给高速设备,另一个给低速设备。Wishbone总线的结构如图4-5所示。
图4-5 典型的Wishbone总线系统结构
一个Wishbone系统由主设备、从设备、INTERCON和SYSCON组成。其中INTERCON定义了主设备和从设备之间的连接方式,而SYSCON用来产生系统时钟和复位信号。在Wishbone中有4种不同的连接方式可以使用,它们分别是点对点、数据流、共享总线和交叉连接方式。
4.3.4 AVALON总线
AVALON总线主要应用在FPGA中,作为SOPC(System On a Programmable Chip)中的片上总线。AVALON总线是Altera推出Nios核时开发的片上总线,系统结构如图4-6所示。在AVALON总线中,主设备之间通过仲裁机制决定是否获得总线的控制权。
图4-6 典型的AVALON总线系统结构
4.3.5 开放核协议
IP在SoC中的互连概括起来可以通过两种方案解决,一种是采用标准的总线结构(如AMBA),另一种是定义一种通用的总线接口,而不限制总线的采用。开放核协议(OCP,Open Core Protocol)是由OCP-IP组织定义的IP互联协议。它不是总线定义,而是在IP核之间的一种独立于总线之外的高性能接口规范,这种方法提高了IP的重用率,进而可以减少设计时间、设计风险和制造成本。一个IP核可以是处理器、外围设备或片上总线。OCP在两个通信实体之间定义了点到点的接口。这两个通信实体中,一个作为主设备,可以发起命令;另一个作为从设备,对主设备的命令做出回应。该OPC结构如图4-7所示。OCP是在国际IP标准组织(VISA)的虚拟接口标准VCI上的扩展。OCP-IP组织还相继开发了相应的IP接口自动生成工具,并提供一定的技术支持,使得OCP接口具有更好的实用价值。
图4-7 典型的OPC协议系统结构
IP核自身的特点决定了其是否作为OCP封装接口中的主设备、从设备或两者都是。总线封装接口模块作为OCP的补充。在系统的数据传输过程中,系统的发起者(OCP主设备)输出命令和数据到总线封装接口模块。OCP并不规定总线的功能。总线封装接口模块设计中,需要将OCP请求转换成总线传输。OCP主设备负责将总线传输转换成合法的OCP命令;OCP从设备接收主设备发出的命令,并做出回应。
4.3.6 复杂的片上总线结构
以上分析了目前使用较为广泛的几种标准总线结构。在实际的使用中,尤其在一些复杂的SoC设计中,往往会在这些总线协议的基础上采用更加复杂的总线结构以满足处理器、存储器和其他与之相连的设备之间的相互矛盾。
下面以AMBA总线为例,分析两种较为常见的总线结构。
在AMBA总线中,高性能设备工作在高速总线AHB上,其他慢速设备工作在低速总线APB上,高速总线和低速总线之间通过桥连接在一起。当高速总线上的设备比较多时,一条高速总线的设计无法满足系统的要求,这时需要增加总线,如图4-8所示。
图4-8 多总线结构实例一
在这种设计中,两种总线主设备分别工作在不同的AHB总线上,但它们都可以访问所有从设备。这样两个主设备在分别访问本地总线的从设备时可以减少总线上的等待时间,提高总线的访问效率。当主设备访问相邻总线的从设备时需要通过总线桥进行,在这种设计中一般主设备访问相邻总线从设备的可能性较小。
更加复杂的总线结构如图4-9所示,在这种总线结构中,不但有两条高速总线还有一条低速总线。两个片内存储器分别只能由该总线上的主设备访问。两个主设备对于低速总线或片外存储器有共同的访问权限,这时候需要增加总线的仲裁机制来决定在某个时刻由哪个主设备来访问相应的从设备。
图4-9 多总线结构实例二