深入理解AMBA总线(四)AHB-lite总线

简介: 深入理解AMBA总线(四)AHB-lite总线

前面花了三篇文章的篇幅介绍APB总线。APB总线目前主要用于配置寄存器和连接低速外设。协议本身很简单,大家可以自己动手写几个APB模块,加深对APB的理解。从这节课开始我们将进入AHB总线协议的学习。

1、一个典型的基于AHB总线的微控制器架构

首先我们复习一下典型的AMBA总线架构,如下图所示,其中主要包括了两种总线:AHB总线和APB总线。

APB总线之前的文章已经介绍过了,其主要用于连接低速组件,包括UART、TIMER等外设,也可以用于配置寄存器。

而AHB主要是针对高效率、高带宽以及高速系统模块所设计的总线(当然以现在的视角来看已经不算很高速了,不过仍然有很多值得学习的地方,也有很多低端MCU在使用AHB总线)。AHB总线用于连接告诉模块,包括ARM的处理器,片内RAM、DMA Master等。

AHB和APB之间通过转接桥Bridge进行连接,这个转接桥实际上就完成了AHB和APB之间的协议转换。通过这种模块化的划分方式,可以让系统工作在不同的时钟域下,低速外设不会影响高速外设,进而高速模块可以跑到较高的时钟频率。可以这么说,AHB的设计目的就是解决APB通信速率过慢的问题,从而提高系统的时钟频率和带宽。

2、AHB的发展历史

然后我们再回顾一下AHB的历史:

  • ARM公司在1999年推出AMBA2,首次提出了AHB协议,将其用于高性能模块之间的连接,可以连接多个Master和多个Slave。其架构图如下图所示,可以看到通过仲裁器多个Master进行选择,对于同一时刻,让总线上只有一个Master在工作。译码器对Slave进行选择,以完成完整的通信过程。此外Slave必须1KB边界对齐。

  • ARM公司又在2006年推出了AMBA3,其中包括了AHB-lite协议,其针对的是单个Master和多个Slave之间的连接。它可以看做AHB协议的简化版本,因为在很多场景中实际上只有一个AHB的Master,并不需要像AHB那样复杂的硬件架构,采用AHB-lite可以简化逻辑设计。
    AHB-lite硬件架构实际上跟一对多的APB架构非常的像,区别只是信号不一样,其硬件连接非常非常相似,具体的可以看我上一篇文章,链接在下方,可以仔细对比一下区别。这一代协议也是目前用的最多的AHB协议。可以看到其硬件架构如下图所示,由于只有一个Master,所以不需要仲裁器,只需要译码器和那个Slave到Master的MUX即可。

https://zhuanlan.zhihu.com/p/627082498

  • 2015年又推出了AMBA5,其对AHB增加了独占传输、扩展存储类型、安全传输、原子性访问等功能,这些功能在AXI协议中也有体现,因此我会在后面的AXI协议进行讲解,此处暂时不会提及这些相对高级的功能。

3、AHB-lite协议硬件架构

本节对AHB-lite进行详细的介绍:

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

4、AHB-lite信号介绍

再提一遍,AHB的信号都是以H开头,此外AHB-lite的硬件架构,可以分为四部分,分别是Master、Slave、Decoder以及MUX,因此官方协议将其信号列表也分为以下几部分:(信号名只有结合传输过程一起看才有意义,因此读者看下面的信号名,留个印象即可,重点应该放在后续的AHB-lite传输流程上)

4.1、全局信号

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

Name Destination Description
HCLK Global 时钟信号,上升沿同步
HRESETn Global AHB-lite总线复位信号,为低有效

4.2、Master信号

以下的信号由Master产生:

Name Destination Description
HADDR[31:0] slave和decoder 32bit的地址总线(不是严格限制为32bit)
HBURST[2:0] slave 突发传输类型
HMASTERLOCK slave 用来实现原子操作的
HPROT[3:0] slave 保护控制信号
HSIZE[2:0] slave 指示传输的大小,通常为字节、半字或者字。最大可到达1024位
HTRANS[1:0] slave 指示传输的类型
HWDATA[1:0] slave 写数据,一般建议最小为32位,最大可以为1024位
HWRITE slave 为高代表写传输,为低代表读传输

4.3、Slave信号

以下的信号由Slave产生:(结合架构图去看)

Name Destination Description
HRDATA[31:0] Mux 在读操作期间,读数据总线即该信号,将数据从所选从设备传送到多路复用器。然后,多路复用器将数据传输到主机。
HREADYOUT Mux 当为高电平时,HREADYOUT信号表示总线上的传输已完成。该信号可以被驱动为低电平以延长传输(即为0,可以实现反压)
HRESP Mux 传输响应信号,当低电平时,HRESP信号指示传输状态为正常。当为高电平时,HRESP信号指示传输状态为错误。配合HREADY可以传递更多的信息,具体的后面说

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

4.4、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逻辑。

4.5、MUX信号

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

5、AHB-lite传输流程

5.1、Basic Transfers

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

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

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

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

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

我们再看写传输,实际上差不多,注意HWRITE是在地址阶段拉高的!

5.2、带Wait states的传输

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

写的话其实更简单,重点就是从机在反压主机,主机的信号不能变。

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

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

以上就是本篇文章的全部内容,下一篇文章给大家带来AHB-lite更高阶的一些东西,同时带来一些实际的代码。对本篇文章有不理解的欢迎评论和私信。

欢迎和我一起学习AMBA总线,完整的专栏在这里:

https://www.zhihu.com/column/c_1663245806869291008


目录
相关文章
|
XML 数据格式 SoC
深入理解AMBA总线(十)AHB Bus Matrix以及AHB的局限性
深入理解AMBA总线(十)AHB Bus Matrix以及AHB的局限性
738 0
|
芯片
深入理解AMBA总线(一)APB总线入门(上)
深入理解AMBA总线(一)APB总线入门
1068 0
|
安全 物联网 数据安全/隐私保护
深入理解AMBA总线协议(AXI总结篇)
深入理解AMBA总线协议(AXI总结篇)
1536 1
|
存储 网络性能优化 vr&ar
深入理解AMBA总线(十七)AXI是如何提高性能的
深入理解AMBA总线(十七)AXI是如何提高性能的
1983 1
深入理解AMBA总线(一)APB总线入门(下)
深入理解AMBA总线(一)APB总线入门(下)
892 0
|
异构计算 SoC 内存技术
深入理解AMBA总线(九)AHB2SRAM设计
深入理解AMBA总线(九)AHB2SRAM设计
766 0
|
缓存 SoC
深入理解AMBA总线(八)AHB2APB同步桥设计
深入理解AMBA总线(八)AHB2APB同步桥设计
739 0
|
vr&ar 内存技术
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
595 0
|
SoC 内存技术
深入理解AMBA总线(五)AHB-lite Transfer进阶
深入理解AMBA总线(五)AHB-lite Transfer进阶
672 0