AHB

发布时间 2023-04-13 15:46:58作者: VincentZJ

AHB总线介绍

  AHB总线是AMBA总线的一部分,AMBA总线是ARM公司提出的总线规范,被大多SOC设计采用,AHB、ASB、APB。AHB用于高性能、高时钟频率的系统结构,典型的应用就是系统内部高速RAM、NAND FLASH、DMA、Bridge的连接。APB用于连接外部设备,对性能要求不高,主要考虑功耗问题。ASB是AHB的一种替代方案。

  AHB可以将CPU、RAM、高带宽外部存储器接口、DMA总线master、Bridge等连接起来构成一个独立完整的SOC系统。如下图所示:

  

AHB基本特性:

  BURST传输--split事务处理--单周期master移交--单一时钟沿操作--无三态--更宽的数据总线配置(64/128)--流水线操作--支持多个总线主设备(最多16个)

AHB总线组成

  

  AHB总线由master、slave、infrastructure构成。infrastructure由arbiter、数据多路、地址控制多路、译码器构成。

  主设备master

    发起一次读写操作;某一时刻只允许一个设备使用总线。

  从设备slave

    响应一次读写操作;通过地址映射来选择使用哪一个从设备

  仲裁器arbiter

    允许某一个主设备控制总线

  译码器decoder

    通过地址译码决定哪一个从设备

  总线分为三组

    写数据总线(HWDATA)

    读数据总线(HRDATA)

    地址控制总线(HADDR)

AHB示例图

name source to description
HCLK clk source 各module 总线时钟,上升沿采样
HRESETn reset controller 各module 总线复位,低电平有效
HADDR[31:0] master

decoder

mux to slave arbiter

32位地址控制总线
HTRANS[1:0] master mux to slave 当前传输类型NONSEQ SEQ IDLE BUSY
HWRITE master mux to slave 1:write     0:read
HSIZE[2:0] master mux to slave

每一个transfer传输的数据的大小,

2^hsize=传输的字节数,byte为单位,最高支持1024位

HBURST[2:0] master mux to slave burst类型,4、8、16burst,incr或wrap
HPROT[3:0] master mux to slave 保护控制信号,需要slave带保护功能,一般不用
HWDATA[31:0] master mux to slave 写数据总线 master to slave
HRDATA[31:0] slave mux to master 读数据总线 slave to master
HREADY slave mux to master arbiter 1:slave 传输结束 0:slave 需要延长传输周期
HRESP[1:0] slave mux to master arbiter slave发给master总线的传输状态 OKAY,ERROR,RETRY,SPLIT
HSELx Decoder slave slave选择信号

 

AHB仲裁信号
name source to  description
HBUSREQx master arbiter master向仲裁器发出请求,最多支持16个master
HLOCKx master arbiter 如果master在传输过程中不希望丢掉总线,就需要向仲裁器发送这个控制信号
HGRANTx arbiter master 授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高,master获取系统总线的权利
HMASTER[3:0] arbiter 具有split功能的slave   仲裁器为每个master分配的ID,指出哪个主设备正在进行传输,提供进行split的信息
HMASTLOCK arbiter 具有split功能的slave 表示当前master正在执行locked操作,与HMASTER时序相同
HSPLITx[15:0] slave arbiter 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备

 

总线操作

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

  获得授权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息,传输方向、带宽、burst类型。总线统一规划slave地址,译码器根据地址和控制信号确定那个slave与master进行数据通信。数据传输通过数据总线完成,为了避免三态总线,AHB将读写分开。每一笔传输包含一个地址和控制周期,一个或者多个数据周期。地址和控制周期不能被扩展,slave需要在一个周期内采样。数据周期可以通过HREADY扩展,HREADY为低时给传输加入一个等待状态以使得slave获得额外的时间来提供或采样数据,slave通过响应信号HRESP反应传输状态。

  一般情况下master完成完整的burst传输,arbiter才会授权给其他master接入总线,然而为了避免过大的判决延迟,arbiter也可能打断burst传输。这种情况下master必须再次接入总线以进行中断的burst剩余部分传输。

递增burst传输

  

T1时刻给出地址以及控制信号,因为是新的burst开始,transfer的类型是NONSEQ

T2时刻由于master在第二个周期不能处理第二拍,所以产生BUSY信号来延长一个周期虽然周期延长,但是master仍然需要给出地址和控制信号

T3时刻,slave接收到busy信号,slave会忽略这个BUSY transfer;同时在T3时刻master再次发起第二个transfer,由于是同一个burst的第二个transfer,所以transfer类型是SEQ

T5 slave将HREADY拉低,告诉master需要等待一个时钟周期;

T8 完成最后一个transfer

 

控制信号

HTRANS[1:0] 传输类型 描述
00 IDLE 主设备占用总线但是没有进行传输;两次burst传输中间,主设备可以发IDLE,此时就算slave被使能,也不会从总线上获取任何数据信号。如果此时slave被选中,那么每一个IDLE周期slave都要通过HRESP[1:0]返回OKAY响应
01 BUSY 主设备占用总线,但是还没准备好下一次传输,一次burst传输中间,主设备可以发出BUSY,这时slave不会从总线接收数据,而是等待,并通过HRESP[1:0]返回一个OKAY响应。需要注意,这个transfer需要给出下一拍的地址和控制信号,虽然slave不回去采样
10 NONSEQ 表明一次单个数据的传输或者一次burst传输的第一个数据,地址个控制信号与前一次传输没有联系
11 SEQ

burst传输接下来的数据,都需设置为SEQ

地址和上一次传输是相关的,总线上的控制信号应该与之前的保持一致,地址信号根据INCR或WRAP进行变化

响应信号

  master发起传输信号后,slave可以决定本次传输的进程,transfer不能取消本次传输。slave会通过HREADY信号反馈传输是否完成,通过HRESP反应传输状态

  立即完成一笔传输

  延迟一个或者几个周期完成传输

  传输失败返回error

  延迟传输,释放总线

  HREADY为1代表传输完成,为0代表延迟传输

  HRESP[1:0]  00:OKEY   01:ERROR  10:RETRY(传输未完成,请求主设备重新开始一个传输。arbiter会使用通常的优先级)  11:SPLIT(传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便于其他请求总线的主设备可以访问总线)

地址译码
        地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。
        每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。


仲裁
        仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。
        HBUSREQx:master向arbiter发出接入请求的信号。
        HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。
        HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。
        HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。
        HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。
        HSPLIT:供支持SPLIT传输使用。