AXI之原子操作

原子,可以认为是物质组成的最小单位,当然,现在科学表明,比原子小的还有质子和中子。但是这里我们还将原子作为最小单位来理解,那么原子就是不可分割的,因此原子操作就可以理解为不可分割的操作。

AXI的原子操作包括exclusive和lock两种,不管是exclusive还是lock操作,在执行期间不可被其它操作打断,否则操作失败。

 1、exclusive操作

exclusive的应用场景主要是处理器需要对某个内存地址进行写操作时,假如写一个字节,而内存的数据位宽大于一个字节,比如32bit,这时处理器需要将内存地址对应的32bit数据先读出来,然后将要写入的一个字节数据进行更新后,再将更新后的32bit数据重新写入内存中去,该过程通常被业内称为读改写操作(RMW)。如下图所示,CPU要将内存地址1的数据改为0x02,就需要先将地址0~3的数据都读回来,然后将更新后的数据0x03020200重新写入内存。

但是实际芯片中,在CPU将数据读回,并将更新数据写回内存期间,可能会有其它的master也会访问内存,假如DSP将地址0的数据改成了0xff,那么内存中地址0应该保存的正确数据就应该是0xff,但是CPU由于操作延时,又将地址0的数据改成了0x0,这个时候DSP以为地址0里的数据是0xff,但实际上却是0x0,就无法保证数据的一致性。

于是就引入了exclusive操作。还是上边的例子,CPU要改写内存中数据,会先发一笔exclusive的读操作,此时内存作为slave,slave中会有一个monitor记录这笔exclusive读操作的地址和ID,然后返回EXOK,表示其支持exclusive操作,否则返回OK,代表不支持exclusive操作,在此情况下CPU收到OK就知道内存不支持exclusive操作。此处假如内存支持exclusive操作,则CPU收到EXOK后会继续发一笔exclusive写操作,将更新后的数据写回内存中。在此过程中如果内存的地址0x0~0x3没有被别的master访问过,则slave返回EXOK,代表此次exclusive操作(一次exclusive操作包含exclusive读和exclusive写)被正确执行;

假如在exclusive读和写之间,内存的这个地址被其它master访问过,如DSP将内存地址0写成了0xff,则slave返回OK,且此笔写操作不会被执行(如果执行会出现上边提到的数据一致性问题)。CPU收到OK的响应后就知道此次exclusive失败了,即写操作没写进去。此时内存中数据内容如下图:

此时CPU可以选择再次发起一次exclusive操作,继续对内存进行改写。如果exclusive操作成功,则内存中的数据应该为:

结合此应用,相信大家对于协议原文中关于exclusive操作的描述会有更深入的理解。

2、lock操作

相对exclusive来说,lock操作比较简单,master发出lock操作后,interconnect要保证在lock期间只有此master能获得总线使用权,且lock操作的最后一笔transaction要将AXlock拉低,以此解除lock状态,最后一笔unlock操作结束后,其它的master才可以获得总线使用权,说白了就是我发出lock操作后,其他人不能打断我。

相比exclusive操作,lock操作会降低总线的利用率,而且影响QOS的使用,外加应用场景并不多,在AXI4中已经删除了lock操作。

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值