数字IC验证:ARM总线协议AMBA中AHB、APB的简介、区别与联系

写在前面:
最近实习项目里用到这2个协议,因此简单整理一下,内容大多来自ARM官方文档与网络上的,我主要做一个整合,加上自己的理解补充,内容来源都会分别标出。如有侵权请指出,立刻删帖。
官方文档入口:AMBA(包括AHB, ASB, APB)

1 AMBA总线

内容来源:维基百科词条-Advanced Microcontroller Bus Architecture

AMBA总线的全称为“高级微处理器总线架构(Advanced Microcontroller Bus Architecture)”,是ARM架构下SoC设计的一种总线架构。AMBA包括AHB(Advanced High-perfomance Bus,高级高性能总线),ASB(Advanced System Bus,高级系统总线),APB(Advanced Peripheral Bus,高级外设总线)。

2 AHB

内容来源:

  1. 知乎用户@桔里猫,AHB与APB总线你需要知道的事儿
  2. 博客园@feipeng8848,AMBA总线协议AHB、APB
  3. ARM官方文档AHB部分

AHB,Advanced High-performance Bus,高速总线,用来接高速外设。

2.1 一个典型的基于AHB的微控制器

如下图所示,AHB的强大之处在于可以将高速ARM微控制器(High-performance ARM processor)、高带宽的片上RAM(High-bandwidth on-chip RAM)、高带宽的外部存储器接口(High-bandwidth Memory Interface)、DMA总线master等各种拥有AHB接口的控制器连接起来构成一个完整的SoC系统。其中一个特殊的slave是AHB2APB的桥,用于连接APB总线系统。AHB可以成为一个完整独立的SoC芯片的骨架。
图1 一个典型的AMBA系统

2.2 AHB总线互联结构:中心选择器连接master与slave

图2 AHB中心选择器互联结构
AHB总线里有:一个仲裁器(Arbiter)用于仲裁多个主设备(Master)同时访问总线的情况;三个多路选择器(地址选择,写数据选择,读数据选择)用于选通master和slave之间的data和addr。
AHB的ADDR没有分读和写的ADDR:AHB是半双工的,读和写不能同时进行,因此性能上比AXI一般来讲是要弱的。

补充:单工,半双工,全双工

  1. 单工:数据只在一个方向传播,不能实现双向通信。如电视,广播等。
  2. 全双工:允许数据在两个方向上同时传播。如手机通话。
  3. 半双工:允许数据在两个方向上传播,但同一时间数据只能在一个方向上传播(不能同时),本质上是切换的单工。如对讲机。

2.3 AHB的关键信号

图3 AHB的关键信号-master

信号名称信号方向信号描述
HGRANTx输入总线授权信号,设置为高表示可以用总线
HREADY输入Slave的输出,表示传输完成了,可以进行下一次传输
HRESP输入Slave的输出,一些额外信息,如成功、失败等
BUSREQ输出申请使用总线
LOCK输出直接锁定总线,设置为高且不再低之后仲裁器就不会把总线让给其他设备,属于霸道信号
HTRANS输出标识传输类型,有NONSEQUENTIAL, SEQUENTIAL, IDLE, BUSY四种状态
HWRITE输出标识数据方向,0为读,1为写
HSIZE输出标识数据位宽,典型的有8-bit(字节)、16-bit(半字,halfword)、32-bit(字,word),最多可以1024-bit
HBURST输出burst的长度,即一次连续传输要传多少个数

图4 AHB的关键信号-slave
除前面表格里的,slave还有个信号HSELx,用于标识当前总线在访问这个slave。

2.4 典例:AHB的传输

图5 AHB的传输典例
上图是总线已经申请到了(BUSREQ -> HGRANTx=1),之后(T1)首先将HTRANS[1:0],HADDR[31:0],HBURST[2:0]设置好放到总线上,这里burst4个;(T2)把HWDATA[31:0]设置好放总线,即DATA是比ADDR慢一个周期的;(T3之后)每个数据传输完成都会收到HREADY=1。
发新的ADDR时,若HTRANS为BUSY,则要把ADDR保留/重复一个周期(T3上升沿检测到BUSY,则ADDR重复0x24)。T3之后检测到HREADY没有变高时,HTRANS、HADDR、HWDATA要保留当前值,等待slave传回来的HREADY变高了,再传新的信号(T6上升沿检测到HREADY=0,这几个都保留原值,没传新的)。

2.5 AHB的其他问题(持续更新)

(1)HSIZE是什么,怎么用?
HSIZE表示的是一次传输的数据包大小/位宽,有8/16/32/…/1024 bit。传输的数据位宽(Master -> slave,主要取决于slave的数据带宽)和总线位宽可以不一样,借助HSIZE可以实现总线和slave数据位宽的匹配。如下图,总线位宽比较低,是32bit,而我们需要一个高带宽的slave,是64bit的,HSIZE就设置为64bit来告诉总线一个数是64bit的。总线的处理就是,第一个数放到slave的DATA[31:0],第二个数放到slave的DATA[63:32](顺序可能相反),两个整合在一起再把64位整体传给slave。
图6 HSIZE的使用

(2)既然每次(每个beat)master都要传对应的地址,slave接收到地址之后对应进行读/写操作,为什么需要还要HBURST信号来告诉slave有几个burst?
一般来说,确实slave按部就班根据地址操作就行了。但是对于有的slave,提前知道了burst长度有助于提高效率,比如提前腾出burst长度的buffer。

(3)什么是AHB lite?
当总线只允许有一个主设备Master时,那么AHB只有一个master,也不需要仲裁器arbiter了,这就是AHB lite。

3 APB

内容来源:

  1. 知乎用户@桔里猫,AHB与APB总线你需要知道的事儿
  2. 博客园@feipeng8848,AMBA总线协议AHB、APB
  3. ARM官方文档AHB部分

APB,Advanced Peripheral Bus,高级外设总线,主要应用在低带宽的外设上,如UART,I2C,中断控制、定时器、GPIO等。对性能要求不高,主要是低功耗。

3.1 APB的接口信号

APB的架构不像AHB那样是多主设备的架构,APB只有唯一的主设备APB桥(与AXI或AHB相连),因此不需要仲裁一些BUSREQ,GRANT,接口信号很简单。下图是一个典型的慢速APB Slave需要的接口。
图7 APB接口信号

信号名称信号方向信号描述
PSELx输入总线选通
PENABLE输入标识可以访问该slave

只有PSELx = 1 & PENABLE = 1时才可以读数据。APB只有一个master(APB桥),因此无需等待周期和回应信号,控制逻辑简单。

3.2 典例:APB传输状态机与信号图

图7 APB状态机
IDLE状态:没有传输操作,也没有选中任何从设备。
SETUP状态:当有传输要进行时,PSELx = 1(PENABLE不变还是0),进入SETUP状态,该状态只持续一个周期。当PCLK的下一个上升沿到来时,PENABLE=1且进入ENABLE状态。
ENABLE状态:相比于SETUP状态,PADDR、PSEL、PWRITE不变,PENABLE设为1。ENABLE状态也只持续一个周期。

可以看到,APB固定两个周期完成一次读或写操作。在ENABLE状态之后,若没有传输要进行,则进入IDLE状态等待;若有连续的传输,则直接进入下一次SETUP状态。
下图是往外设写一个数据的例子:
图8 APB往外设写数据

4 AHB和APB的区别与联系

4.1 AHB与APB的特性

AHB:

  1. 高性能(High performance)
  2. 并发操作(Pipelined operation)
  3. 支持多个总线主设备(Multiple bus masters)
  4. 支持突发传输(Burst transfers)
  5. 支持分段传输(Split transactions)
  6. 单个时钟周期主设备接管(Single-clock bus master handover)
  7. 单个时钟边沿操作(Single-clock edge operation)
  8. 非三态的实现方式(non-tristate implementation)
  9. 可配置64位,128位总线宽度(wider data bus condigurations-64/128 bits)
  10. 支持字节、半字和字的传输

APB:

  1. 低功耗(Low power),尤其在非外设总线活动时APB的接口零功耗
  2. 锁存的地址和控制(Latched address and control)
  3. 接口简单(Simple interface),控制逻辑简单,只有4个控制信号
  4. 适用许多外设(Suitable for many peripherals)
  5. 两个时钟周期传输
  6. 无需等待周期和回应信号

4.2 AHB和APB的适用情况

AHB接口一般用于:

  • 总线主设备(bus masters)
  • 片上存储模块(on-chip memory blocks)
  • 外部存储接口(external memory interfaces)
  • 带有FIFO接口的高带宽外设(high-bandwidth peripherals with FIFO interfaces)
  • DMA从设备外设(DMA slave peripherals)
    APB接口一般用于:
  • 简单的寄存器分布的从设备(simple register-mapped slave devices)
  • 非常低功耗的接口,尤其是时钟无法全局分布时(very low power interfaces where clocks cannot be globally routed)
  • 集合总线为窄位宽的外设,来避免每次都加载系统总线(grouping narrow-bus peripherals to avoid loading the system bus)

4.3 AHB与APB的联系

APB架构上的master即APB桥,可以作为AHB的一个slave进行数据传输。下图表示AHB对APB的一次突发读数据:
图9 AHB2APB Burst of Read Transfers


版权声明:本文为Dabie_haze原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。