AHB-Lite 协议简介

本文详细介绍了AHB-Lite协议,包括其简化设计、单Master多Slave结构、信号类型(如HSELX、HREADY、HRESP)、传输流程(地址阶段和数据阶段)以及控制和保护信号。重点讲解了信号的作用和传输响应机制。
摘要由CSDN通过智能技术生成

1. AHB-Lite协议:


AHB-Lite协议为AMBA 3 家族的AHB协议,其简化了AHB的协议复杂性;面向高性能,高频率系统设计;AHB-Lite Slave一般是内存器件(MCU),外部存储器接口和高带宽外围器件,低带宽的器件也可以连接至AHB-Lite上,但是一般通过桥接器连接至APB总线上。

AHB-Lite协议为单Master,多Slave的,因此没有仲裁器。与AHB 2协议特性不同的是,没有分块传输,单周期总线移交操作。

AHB-lite实际上也可以连接多个Master,即采用完整的AHB Interconnect,同时采用多层的架构。让每一个主设备认为是专属于自己所在的层。如下图AHB-lite Master1位于layer1上,而AHB-lite master2位于Layer2上。这样它们彼此是感受不到别的Master的存在的,因此也就实现了多个Master多个Slave。对于Master1,在它看来它连接了三个slave,而对于Master2,在它看来连接了5个slave。从宏观看,slave4和slave5是Master2的私有外设。
总而言之,没有绝对的一对多的连接,只要你想肯定有办法实现多对多。当然这都是特殊的情况才会使用的方法,对于初学者而言暂时不需要掌握这种情况。

 2 AHB- Lite信号介绍

AHB的信号都是以H开头,此外AHB-lite的硬件架构,可以分为四部分,分别是Master、Slave、Decoder以及MUX,因此官方协议将其信号列表也分为以下几部分:

全局信号

APB总线复位信号为低有效并且通常将该信号直接连接到系统总线的复位信号

 Master 信号

Slave 信号 

 可以看到Slave产生的信号都是送给MUX的,由MUX选择其中一个,送到Master

Decoder 信号

Decoder实际上就产生一组信号,直接看文档。Decoder顾名思义,进行译码。对什么进行译码?实际上就是地址,当满足条件的时候,将多组HSELx的其中一个拉高,已选中需要选中的Slave。

此外这个信号不光要给Slave,通常还要给MUX,以方便Mux从多个Slave中选中一个,返回给Master。这个信号可能是HSELX本身,也可以是HSELX导出的信号。

举个例子,比如有三个Slave,选中了Slave0,则HSEL0为1,HSEL1为0,HSEL2为0。可以把这三个信号直接给MUX,MUX就知道要将Slave0返回的数据送给Master了。当然这样的话,有多少个Slave就需要多少根线,本质上是个独热码,因此我们也可以将这个001的独热码转成00的普通编码,以简化MUX逻辑。

 MUX信号

MUX实际上就是从多个Slave的输入选择一个返回给Master即可。因此就有HRDATA和HRESEP。而这个HREADY和之前说的HREADYOUT不一样!我也是看了一些代码示例以后才搞明白这两个分别是什么含义,这里的HREADY用于告诉Slave和Master,整个总线上是否有未完成的传输。而之前的HREADYOUT,用来代表正在传输的那个slave是否已经准备进行真正的数据传输,例如写操作时,slave此时是否可以将数据存下来,如果没拉高,说明那个slave正在反压Master。

 3 AHB-Lite 传输流程

AHB-lite和APB类似,也将传输分成了两个阶段,地址阶段和数据阶段(APB中是setup phase和access phase)。

  • Address:地址阶段,通常持续一个周期,除非是上一次传输的数据阶段一直没有结束。
  • Data:数据阶段,可能会持续很多个周期,受到HREADY的控制。

HWRITE用来控制数据传输的方向:

  • 当HWREITE为高的时候,代表这是一个写传输,主机在写数据总线上广播数据,HWRITE和HWDATA等信号会给所有的Slave,所以叫做广播。但是HSELX会根据译码结果,只拉高一个,从而选中特定的Slave。
  • HWRITE为低的时候,代表这是一次读传输,从设备必须在读数据总线上生成数据

3.1在没有wait states的情况下,

读传输如下所示。可以看到确实是分成了两个阶段,地址阶段和数据阶段。第一个阶段实际上就是Decoder在工作,根据地址选中相应的Slave!然后在第二个阶段Slave和MUX完成剩下的工作。此外大家有没有发现,两个阶段的地址是不一样的?也就是说第一次传输的数据阶段和第二次传输的地址阶段,是可以重叠的,这个机制非常的好啊,可以流水线读或者流水线写,大大节省了时间。考虑给10个不同的地址写10次数据,AHB-lite只需要11个周期,而APB需要20个周期,差距非常大。

读数据

写数据

 3.2 在wait states 的情况下

首先看读,在第一个时钟周期,主机发送地址信息和控制信息。而从机暂时无法回复相应数据,因此将HREADY拉低,从而实现反压,主机因此就不能改变它的信号(注意此时HADDR和HWRITE都已经变了,也就是第二次传输的地址阶段了,因此即使阻塞住,也不影响两次传输的流水线操作!)。当从机可以返回数据了,就拉高HREADY,改变相应的HRDATA,主机在下一个时钟周期获取这些信号,并且能进入到第二次传输的数据阶段。

 写数据

再看一下多次传输流水线操作的情况,可以看到这组传输有以下特点:

  • A和C的传输是没有wait state的
  • B传输有一个周期的wait state
  • 由于B传输有wait state,因此进入到C传输的地址阶段(同时也是B传输的数据阶段),主机发送的信号必须维持不变,被额外反压了一个时钟周期。

 

 4 AHB-Lite 控制信号

类似与AHB的控制信号这里就不再赘述。请参考

AHB总线协议_weixin_45230720的博客-CSDN博客

5 AHB-Lite 传输响应信号

在Master发起一次传输以后,剩余的传输过程实际上是由Slave在控制。一旦传输开始,Master不能在中途取消这次传输。

AHB-lite实际上通过HRESP和HREADY这两个信号的组合来控制传输响应,HRESP只有以下两个值:

  • OKAY
    • 传输完成(HREADY为高)。
    • Slave额外需要传输周期,Transfer处于Pending状态(HREADY为Low)。
  • ERROR
    • 在传输过程中发生了错误(通常情况下是写了只读区域造成的)。
    • 需要两个HCLK Cycles去完成。
    • Master可以选择继续发该笔Transfer或者不再发起这次传输。

HRESP和HREADY这两个信号的组合来控制传输响应,因此理论上一共有四种组合,接下来分别介绍这几种情况:

  • 当HRESP为0,而HREADY为1,代表本次传输成功。
  • 当HRESP为0,而HREADY为0。则代表Slave正在反压主机,可能是从机此时不能够及时的响应,主机此时应该维持住控制信号。当HREADY拉高,并且HRESP仍然为0,则代表本次传输成功结束。(需要注意的是,对于正常的传输,也就是不涉及错误情况的时候,HRESP应该始终为0)
    • Note:通常而言,每个Slave应该提前规定好最大的Wait states周期数。此外建议Slave不要插入多于16个周期的等待时间,否则的话每次访问可能要花费大量的时间去等待。
  • 当HRESP为1,则代表传输出现错误了。大概率是写了不让写的地方导致的。对于之前的正常传输而言,只需要维持住一个周期的响应,但是ERROR response需要两个时钟周期。(这是由于总线的流水线特性决定的,当slave发出ERROR响应时,下一个传输的地址已经被广播到总线上了。two-cycle响应给master提供了足够的时间取消下一次访问并将HTRANS [1:0]驱动到IDLE。)

 

  • T1->T2:Slave插入一个Wait state,即HRADY为0并且将HRESP设置为OKAY。(Slave发现地址B不准写,因此要准备返回ERROR response,首先要插入一个wait states来准备后续的操作,当然也可以插入多个wait states来准备后续的操作)
  • T2->T3:Slave返回一个ERROR response,这是ERROR response的第一个时钟周期,此时HREADY为0。
  • T3->T4:Slave返回一个ERROR response,这是ERROR response的第二个时钟周期,此时HREADY为1。
    • Master因此就有足够多的时间去决定下笔是继续发这个transfer还是终止这次transfer,这也就是为什么需要两个时钟周期去维持这个ERROR response,如果没有两个时钟周期的ERROR response,那么T2->T3的HREADY就应该为高,HTRANS应该迅速变成IDLE,来完成这次传输,如果逻辑复杂的话,组合逻辑链路会过长,为了保证流水线特性,让Master有足够多的时间去感知本次传输出错了,则需要维持两拍的ERROR response,此外这也是保证和其他的正常传输一致。回顾一下没有错误传输情况的突发传输,二者都具有流水线特性)。
    • 在这个例子中,Master将HTRANS变成IDLE,代表放弃了这次对地址B的传输。
    • T4->T5:Slave返回OKAY response。这次突发传输到此结束

当然也可以继续传输,如下图所示:虽然A+4不让写。但是Master决定继续写A+8。

 保护信号

保护控制信号HPROT[3:0],每一位代表不同的含义。该信号用于提供一些保护信息。

  • HPORT[0],代表是取数据还是取指令。
  • HPORT[1],代表是特权还是非特权模式访问。比如操作系统的地址区域,就应该是特权访问,并不是所有的写都有权限去写这段地址空间,不然就出大事了。
  • HPROT[2],代表Bufferable。这个Bufferable指的是写的数据是可以放在Buffer里面还是一定要到达最后的目标地址空间。(实际上最终还是会写回最终目标地址空间的,只不过返回HRESP的时候,大概率是还没有写到最终的目标地址空间)对于写具有严格的先后顺序之分的地址空间,一般是Non-cacheable和Non-bufferable,否则可能会乱序。
  • HPORT[3],代表Cacheable,表示是否可以存放在Cache中,是否更新最终的memory。对于外设寄存器这种,当然是不可以Cacheable的。我们本意就是希望写目标寄存器,达到某些功能。写到Cache里面,那就没法达到预期了。

实际上很多AHB的Master或者Slave根本就不支持HPORT信号,或者是无法提供完整正确的HPORT信号。如果你用不到这些信号,ARM的推荐是:

  • Master将HPORT设置为0011,代表Non-cacheable、Non-Bufferable、Non-Privileged、data-access
  • 对于Slave而言,符合奥卡姆剃刀原理。如非必要,不去使用HPORT信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值