聊聊AMBA总线-AHB

电子说

1.3w人已加入

描述

1 - AHB引言

在上篇文章文章我们已经分析了AMBA总线系列中的APB总线的优点和缺点。

缺点1: APB支持且仅支持一个主机

缺点2: APB两个周期才能完成一个数据的传输,数据传输效率不高。

所以针对以上的缺点,ARM 开发了更高级的总线AHB,下文将详述AHB基于APB的改进点,改进策略,以及AHB的协议运行机制。

1-1 背景

在[漫谈AMBA总线-APB]文章中我们知道 只有一个水果店,只卖三种水果分别是:草莓蓝莓和苹果。 随着该地区人数的上涨, 一个水果店(单主机) 已经不能满足该地区的要求,又因为 水果店和厂商的配合时间太长(传输效率低) ,所以大家在商议之下,又开了一家水果店,两家水果店独立运营。在这样的情况下,之前设计的 水果运输总线(类比APB) 就不能满足当前的需求,所以需要根据当前的需求重新定制水果运输总线V2。

对于V2版本的水果运输总线,在 寻求制定策略方面碰到很多问题 ,但是最主要的两个问题如下:

**问题1 : ** 当水果店1和水果店2同时缺货 ,所以 同时使用大喇叭广播自己的订单需求 ,那么供应厂商 由于两个大喇叭同时通知,会听不清订单的需求,因为互相干扰

概念 1:总线碰撞(Bus Collision )

由于水果店1和水果店2同时使用大喇叭广播自己的需求,导致供货商听不清订单需求,那么这次水果运输的任务就算是失败的。

类比:

在AHB总线里面,ARM在设计的时候就支持连接多个主机进行操作。当两个或者两个以上的主机同时发起数据操作的时候,那么总线就会产生混乱,导致数据传输失败。

本质原因: 一条总线服务两个主机,难免会产生冲突,比如两个人同时打第三个人的电话,第三个人只能接其中某一个人的电话,主要是 资源冲突

解决方法:

(1)每个水果店配套一个水果运输总线 ,同时 供应厂商也再配套三个 ,专门为对应的水果店服务(因为供应商同时只能服务一家客户),在IC设计中也叫 资源复制 。这种方案设计最简单,但是耗费大量的资源。

(2) 当出现两个水果店同时进行订单需求的时候,水果店自己需要先确认 一下另一个水果店有没有广播 ,如果有,就等另一个水果店使用大喇叭广播完毕,自己再使用大喇叭广播,在总线协议中,这个动作也叫 总线侦听

(3) 两个水果店 不想派人力进行侦听广播(或者不具备条件) ,所以购买一个 仲裁设施 ,该设施对水果店进行等级分类,如果两个水果店同时发起要求,那么最重要的水果店****先获得使用这个仲裁设施的允许再使用大喇叭广播(这个获取仲裁设施的允许也叫获取总线授权),等最重要的水果店完成订单之后,仲裁设施再服务相对比较不重要的水果店,总线仲裁中 称为优先级仲裁策略

结论: ARM在升级APB的时候,为了支持多主机,同时为了解决总线冲突的问题,引入了第三种解决方法( 优先级仲裁 ),给每个主机分配不同的优先级,优先级高的主机先发送数据,优先级低的等待完成之后再进行数据发送。

PS:CAN总线,IIC总线使用的是第二种解决方法(总线侦听)来解决总线碰撞的问题。一般来说,分布式总线比较倾向于使用第二种策略,集中式总线比较倾向于第三种(例如SOC片内总线)。

Q1 :可能有同学会问,那 两个水果店同时发起请求的几率很小 ,有没有必要引入优先级仲裁策略:

答:如果为了安全的完成数据的策略,即使这种情况出现的概率很小,但是也要考虑这种最坏的情况。同时同样的问题,在SOC设计中遇到这种情况的概率相对较大。

问题2: 在上一版本水果运输总线的时候, 水果店需要一箱水果 ,则厂家就需要 提供一次水果的运输 ,水果店 再需要一箱 ,又得 再次提供一次水果的运输 ,这就导致了水果店订单小,但是经常发起订单,浪费了厂家有效运输的时间,因为****等待订单和运输是串行工作 ,先订单发出再运输再发出订单再运输

概念2:突发传输(Burst)

水果店发起请求的时候,不是按照一箱水果作为订单的单位,而是10箱或者其他数目N个作为订单请求(Burst类型),虽然 厂家运输单位是一箱(也就是一辆车只能运送1箱) ,但是厂家可以派出多辆车同时运输,形成运输的 车队流水线 ),这样 n拍运输时间就基本满足水果店的需求 ,而 之前是2n拍时间才能满足需求 。所以这个方案需要水果店和水果厂家同时改进方案。

类比:

在AHB总线中,数据传输时基于Burst类型进行传输的,每次传输都是多个(总线位宽的)数据,通过数据形成多拍(流水的)效果,相比APB总线提升数据的传输效率。

这两个点是AHB针对APB总线提升最大的两个点 ,当然AHB为了兼容一些其他的问题,有自己独立的一些信号,这个下面继续讨论。

在这里我们总结一下****多主机总线 的正式概念

总线是被总线上所有的部件所共享的一组通路(连线),对于 支持多主机的总线 ,如果某一个主机想要与 其他的部件进行通信 (获得数据),首先****需要 向总线内部的仲裁器发起使用总线的请求,获得内部仲裁器授予所有权。 其次需要将地址(厂商名字)、数据(水果)、命令(进货还是退货)放到总线上,其他的部件对总线上的数据进行侦听,检查地址数据和命令的是否与自己相关,最后相关从机部件做出命令响应。

2 - AHB总线详解

2-1 AHB在SOC内使用的部分:

apb2

如上图:

CPU : CPU是操作的发起者,CPU发起读写外设数据的操作。

DMA: DMA也是操作的发起者,DMA从一个部件搬移数据到另一个部件。

比如Mem 2 Mem 、 Mem 2 Peri 、 Peri 2 Mem 、Peri 2 Peri

AHB_interconnect(AHB_Bridge):

根据上文所说的总线协议和传输信号的要求,构建出来的设计实体,该实体首先 接收主机端发送过来的独占AHB总线和通路的请求 ,其次根据内部的 仲裁算法拒绝或者授予该主机访问总线的权利 。当主机端被授予访问总线的权利时,该AHB_interconnect(AHB_Bridge)接收主机端的命令、数据、地址总线并传播和生成相应的信号到外设。同时接收外设返回的数据并交付给主机端。

SLAVE:对AHB_interconnect输出数据和指令进行响应。

**Q2 : **是否可以不需要AHB_interconnect,AHB_Interconect的作用是什么?

同上篇APB文章类似,当CPU只有一个外设,那么直接可以和外设相连,不需要AHB_Interconect。同时也不需要总线的仲裁逻辑,所以关于总线仲裁逻辑的接口直接根据信号状态tie相应的值或者悬空。

当CPU需要连接多个外设的时候,且不止有一个主机(还有DMA)时,需要AHB_interconnect进行仲裁、路由、相应外设信号的生成。

2-2 AHB总线接口: (AMBA AHB 2.0)

AHB信号较多,相应功能也比较强大

系统信号:
HCLK
HRESETn
地址总线:
HADDR
数据总线:
HWDATA
HRDATA
命令总线:(支持突发)
HWRITE
HSIZE
HBURST
HPROT
HSELx
HTRANS
HREADY
HRESP
仲裁总线:(支持多主机)
HBUSREQx
HLOCKx
HGRANTx
HMASTER
HMASTERLOCK
HSPLITx

从这张大表可以看出,为了克服APB的缺点从而支持多主机模式、提升效率操作****,所在 总线接口上付出的代价 。至少AHB总线位宽和信号个数远远超过了APB总线。

根据上面的AHB信号列表,结合之前的类比和概念我们基本上就知道AHB该怎么运行,相应的信号如何动作也有了一般的概念。

接下来会从这种总体传输的概念分析到AHB总线内部的时序逻辑和相关的具体操作,希望大家多多支持。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分