【数字ic自整资料】AHB总线仲裁机制

参考资料:

漫谈AMBA总线-AHB_iic ahb-CSDN博客

AHB总线笔记(二) - 哔哩哔哩

常见的AXI总线仲裁器概述-腾讯云开发者社区-腾讯云

        在APB总线中,支持且仅支持一个主机存在,因此并不会导致冲突问题产生,但是在AHB总线里面,ARM在设计的时候就支持连接多个主机进行操作。当两个或者两个以上的主机同时发起数据操作的时候,那么总线就会产生混乱,导致数据传输失败,这种现象被称之为总线碰撞(Bus Collision ):
        本质原因:一条总线服务两个主机,难免会产生冲突,比如两个人同时打第三个人的电话,第三个人只能接其中某一个人的电话,主要是资源冲突。

解决方法:
        1.给每个主机配套一个总线,同时对应从机也复制,称为资源复制,这种方案设计最简单,但是耗费大量的资源。
        2.总线侦听:主机自身在对总线发起请求时,先确认总线上没有主机占用,如果有,等待当前主机释放总线。
        3.优先级仲裁策略:对主机等级进行分类,优先级最高的主机先获得总线使用权,等最重要的主机完成处理之后,仲裁设施再服务相对比较不重要的主机,总线仲裁中称为优先级仲裁策略。

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

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

        一个常见的SOC片内AXI总线链接结构,其中,CPU和DMA都是主机,而下面挂载的是bridge外设;AHB_Bridge接收主机端发送过来的独占AHB总线和通路的请求,其次根据内部的仲裁算法拒绝或者授予该主机访问总线的权利。当主机端被授予访问总线的权利时,该AHB_interconnect(AHB_Bridge)接收主机端的命令、数据、地址总线并传播和生成相应的信号到外设。同时接收外设返回的数据并交付给主机端。这样就衍生出了之前说AMBA总线中AHB完整结构时候省略去的那个组件:仲裁组件

https://i-blog.csdnimg.cn/blog_migrate/ac8e56393ae868eeb284c7be80bb435a.png

        补充AHB中和仲裁相关的信号:

信号

来源

介绍

仲裁相关信号

HBUSREQx

Master

主机请求仲裁器,想要获得总线所有权

HLOCKx

Master

主机请求锁定总线一段时间

HGRANTx

Bridge

获得总线所有权标志

HMASTER

Bridge

哪个主机正在使用总线和支持SPLIT从机寻找对应的主机

HMASTERLOCK

Master

表示使用总线的主机正在尝试一次锁定次序的传输

HSPLITx

Slaver

从机指示仲裁器

一些信号相关知识点记录:

        (1)由于AHB协议中最多支持16个Master,所以HMASTER位宽为4bit。

        (2)主设备Masterx控制总线条件:HGRANTx = 1 且 HREADY = 1。

        (3)HSPLITx[15:0] 是其中唯一一个从slave发送的信号,从设备用这个信号告诉仲裁器哪个主设备允许重新尝试一次split传输,16bit每一位对应一个主设备。

        (4)关于split传输:Split传输含义是根据Slave的响应来分离Master的操作,当传输产生时,如果Slave认为传输的执行将占据大量的时钟周期,那么Slave记录MasterID号(HMASTER),发出一个SPLIT响应,该信号提示Arbiter降低此Master的优先权,移交总线给其他Master。但根据我查到的资料,这个情况好像基本上没有出现过,所以仅作记录。

单个主机请求总线全流程:

        (1)MasterA拉高HBUSREQx信号向AHB_Bridge申请使用总线

        (2)总线处于空闲阶段,并且当前没有其他优先级更高的Master请求总线,因此AHB_Bridge同意MasterA占用总线,拉高HGRANTx信号。

        (3)AHB_Bridge通过HMASTER记录哪个主机正在使用总线,当确定分配总线给MasterA后,HMASTER输出MasterA的ID编号。

        (4)没有其他Master打断这次总线占用数据传输,MasterA完成传输后正常释放总线。

        注意:HLOCKx信号一般不随意拉高,不然如果允许每一个主机请求时候都拉高HLOCKx,那么优先级仲裁策略最后将转换为FIFS仲裁策略。

多主机仲裁轮转:

        T3时刻之前:M1主机获得总线,使用总线传输数据

        T3时刻:M2主机想要使用总线,所以向AHB_Interconnect发起总线的使用权请求。此时主机M1正在使用总线传输数据。

        T5时刻:仲裁器判断M2的优先级更高,于是取缔M1使用总线的权利。同时授予M2主机使用总线。

        T6时刻:主机M1接收到AHB_Bridge取消其使用总线的请求,所以其T6时刻之后不会再发新命令(当然T6时刻之前已经发出命令不能取消了,因为已经被发出到总线)。主机M2已经收到AHB_Bridge授权总线的请求了,但是当前其虽有授权,但是还是没有真正掌握总线。(上一个主机的数据传输阻塞数据总线 HREADY = =0)

        T7时刻:上一个主机的数据成功传输(Data(A+8))释放了主机M1占有的地址和控制总线,所以此时主机M2就开始占有地址和控制总线了,HMASTER变化为M2的ID。所以主机M2把其想操作的地址和命令发送到地址和控制总线上。

        T8时刻:上一个主机的遗留数据传输卡着总线 (HREADY = =0),此时主机M2还不能进一步掌握数据总线。所以只能保持当前的状态等待上一个主机接收数据释放数据总线。

        T9时刻:上一个主机数据传输完成,释放了数据总线(Data(A+12)),进而主机M2进一步掌握了数据总线,把自己需要的数据放到数据总线上来进行一次完整的传输。

        一个关于仲裁关键的地方:由于AHB协议是二级流水传输,分为地址传输阶段和数据传输阶段,那也就意味着其让出总线的过程也需要两个时钟周期来完成

        第一步移交地址和控制总线,其次第二步移交数据总线,只有当数据总线也交付完成后,才表示另一个主机独占了总线。这也就能够解释为什么在T7阶段M2没有办法发送命令控制HTRAN和HADDR,因为它还没有完全占用总线。

        最后还有一点,在AHB规范并没有给出确定的优先级算法,设计者需要根据具体的系统要求定义。一般情况下设计的仲裁不会中断一个burst传输,将总线接入权让给其他Master。但是既然这个是自己定义编写的,所以在进行一个AHB协议设定的时候,我们当然可以按照想要实现的情况来完成。

        同理,在AHB协议中由于多主机结构而需要进行仲裁,那么在AXI协议中也同样需要这种机制。但是在找资料的时候并没有特别详细的说明,所以我认为它应该和上文AHB的相差不多,毕竟都是优先级仲裁嘛,原理大同小异。就是针对AXI协议来说,它区分了多个通道,读写的仲裁应该是分开独立的;而非共用一个仲裁器。

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值