AHB总线技能提升版

简介

不管是什么总线,都是为了模块之间通信,传输数据。既然是两个模块之间通信,那么就必须有一种两个模块都遵守的规则,这个规则就是协议。不同的协议有不同的规则。用不同的规则是服务于不同的应用,不同的模块的。

AHB是Advanced High-performance Bus的首字母缩写,它是AMBA总线规范的一部分。AHB具有高性能特点,常用在ARM核与系统内部的高速RAM,NAND FLASH,DMA和Bridge的连接。与APB相比,APB主要用于连接外部设备,而且对性能要求不高但是在意功耗的系统。

AHB主要特性

  • Burst传输
  • Split事务处理
  • 单周期master移交
  • 单一时钟沿操作
  • 无三态,分别读写总线
  • 流水线操作
  • 可支持多个总线主设备(最多16个)

读写规则

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

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

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

  一笔传输由如下两部分组成:

  地址阶段:一个周期。

  数据阶段:一个或多个周期,由HBURST信号决定需要几个有效周期,可以由HREADY发出请求延长一个周期。

控制信号

HTRANS[1:0]

00: IDLE 主设备占用总线,但没进行传输两次burst传输中间主设备可发IDLE此时就算slave被使能,也不会从总线上获取任何的数据信号。如果此时salve被选中,那么每一个IDLE周期slave都要通过HRESP[1:0]返回一个OKAY响应。

01: BUSY 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输一次burst传输中间主设备可发BUSY这时slave不会从总线上收取数据而是等待,并且通过HRESP[1:0]返回一个OKAY响应。需要注意的是,这个transfer需要给出下一拍的地址和控制信号,尽管slave不会去采样。

10 :NONSEQ 表明一次单个数据的传输或者一次burst传输的第一个数据地址和控制信号与上一次传输无关。

11 :SEQ burst传输接下来的数据地址和上一次传输的地址是相关的,这时总线上的控制信号应当与之前的保持一致,地址视情况递增或者回环。

HSIZE[2:0] 

000 8 bits Byte ;001 16 bits Halfword

010 32 bits Word;011 64 bits 

100 128 bits 4-word line;101 256 bits 8-word line

110 512 bits ;111 1024 bits -

Burst传输类型

burst不能超过1K地址边界。

HBURST[2:0] 

000 SINGLE Single transfer。

001 INCR Incrementing burst of unspecified length。

010 WRAP4 4-beat wrapping burst。

011 INCR4 4-beat increment burst。

100 WRAP8 8-beat wrapping burst。

101 INCR8 8-beat increment burst。

110 WRAP16 16-beat wrapping burst。

111 INCR16 16-beat increment burst。

响应信号

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

        slave可以按照,立即完成一笔传输;延迟一个或几个周期完成传输;传输失败返回error;延迟传输,释放总线。

  • 传输完成HREADY

        为高时传输完成,为低时传输需要延迟。

  • HRESP[1:0]

Slave发给Master的总线传输状态OKAY(00), ERROR(01), RETRY(10), SPLIT(11)。

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

00:OKAY,正常传输。当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。

01:ERROR,当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应。

10: RETRY,传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级。

11: SPLIT,传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线。

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

        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传输使用。

传输模式

 没有等待状态的single transfer

      如果是写操作,master获取HREADY高信号,表明slave已成功接收数据,操作成功;如果是读操作,master获取HREADY高信号,表明此时的读数据有效并且接收下来,操作成功。需要注意,HREADY信号在数据有效期间必须为高,并且延续到第三个周期的上升沿之后,确保master的正确采样。

slave插入等待状态的single transfer

     如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成; 如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。

多个single transfer的pipeline操作

 HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上未完成的transfer少于2个时,master才能发起操作。

递增burst

需要注意的 虽然slave会忽略掉BUSY transfer,但是master也需要给出下一拍的地址和控制信号。

wrapping 4-beat burst

  跟之前唯一的区别在于地址的不同,在0x3C地址之后,根据回环的地址边界,第三拍的地址变为0x30。一共四拍,4个地址,每个地址各不相同,这四个地址是一个回环范围。起始地址决定了回环操作的回环范围。

递增4拍burst

 和上面的基本一致,只不过地址在0x30并不回环,而是递增。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值