当前位置:首页 > 公众号精选 > ZLG致远电子
[导读]乍一看,AMBAAXIexclusive很容易理解,当时随着你深入研究或者经过项目的实践,你会发现这其中还是有很多惊喜的。尤其是从验证的角度来看,这里面涉及到不同场景的组合都是验证中的挑战。当多个master试图在系统中访问共享内存时,exclusive访问起着关键作用。系统设计...

乍一看,AMBA AXI exclusive 很容易理解,当时随着你深入研究或者经过项目的实践,你会发现这其中还是有很多惊喜的。尤其是从验证的角度来看,这里面涉及到不同场景的组合都是验证中的挑战。

当多个master试图在系统中访问共享内存时,exclusive 访问起着关键作用。系统设计需要确保exclusive 访问成功时,该地址空间中的数据不会被其他master覆盖。简单来说,exclusive 访问是对相同地址读取然后进行写入的一个操作序列


硬件上exclusive 访问机制就是为了支持软件上semaphore 类型操作,同时又不希望某个master锁定住总线。简而言之,exclusive 访问机制就是为了在不影响关键的总线访问性能(延迟带宽)的前提下支持semaphore 类型操作semaphore 类型操作是什么,暂不深究了,毕竟硬件就是为软件服务的,人家要了,那就给呗)


exclusive 访问序列必须始终从exclusive 读取操作开始,然后假设读取返回一个成功的EXOKAY响应,然后master可以用exclusive操作完成exclusive 访问序列。成功的exclusive 访问将收到一个EXOKAY响应,其他所有情况(包括失败的exclusive 访问),都将收到OKAY响应。至于为什么是OKAY,而不是ERROR,大家可以思考下哈?


Exclusive 访问序列中的Exclusive 读写之间的延迟是不固定的,并且master可能无法完成Exclusive 操作的写部分,这会增加Exclusive 访问的验证空间。


在exclusive 访问期间,如果没有其他master对该地址写入数据,则exclusive 访问成功;如果另一个master在期间对该地址写入数据,则exclusive 访问失败。在这种情况下,exclusive 访问中的写也不会更新该地址对应的数据。

 

上述是exclusive 访问在系统上的行为,那么从设计的角度,slave是如何支持这一特性的呢?假设在一个系统中有2个AXI Master 共享一个支持Exclusive 访问的AXI slave(S1)的相同内存。AXI Master1(M1)地址16h1000至16h100F启动exclusive 读取事务。Slave S1将开始监视M1给出的ARID的这些地址,直到该位置发生写入操作,或者直到另一个具有相同ARID值的exclusive 读取操作,此时需要将监视的地址重置更新为不同地址


如果master M2在M1完成其exclusive 写之前写入同一地址,slave 将在M1的exclusive 写事务期间给出exclusive 访问失败的指示,并且不允许M1更新该内存地址的数据。


在上述场景中,slave S1为M1保留一些内存资源。当M1尝试写入该内存位置时,slave S1只有在其他master不写入该内存资源时才允许Exclusive 写入该内存资源,否则数据不会写入该内存资源。通过这种方式,我们可以避免AXI Exclusive 访问的共享内存的内存覆盖问题。


如下是一些关于AXI Exclusive 访问的corner case:

1、Exclusive 读之后跟正常读写操作。

2、master发起Exclusive读,但是不发起Exclusive 写。

3、连续对相同地址相同ARID发起Exclusive读,此时slave的监视器会重置更新监视地址。

4、有两个Exclusive读取来监视同一地址区域。

5、对不支持Exclusive 访问的slave发起Exclusive 访问操作。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭