AXI之原子操作

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

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

AXI之原子操作_第1张图片

 1、exclusive操作

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

AXI之原子操作_第2张图片

但是实际芯片中,在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失败了,即写操作没写进去。此时内存中数据内容如下图:

AXI之原子操作_第3张图片

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

AXI之原子操作_第4张图片

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

2、lock操作

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

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

AXI之原子操作_第5张图片

你可能感兴趣的:(AMBA,信息与通信,硬件架构,arm开发)