exclusive 和lock
1. 首先,Lock在amba2.0中就有涉及,意思是,某个master 可以通过Lock 总线来实现独占。只有当该master完成传输后才释放出总线。这样的话,总线的效率会降低。 2. 相比Lock,AXI 中引入了exclusive操作,不需要将bus锁定给某个master。而是通过TAG ID以及slave 返回的response来判断当前的传输是否成功。过程如下:
1)mst 首先向slave的某个地址位置发起一个exclusive读操作。slave中的monitor会纪录下该mst的 ARID和 要访问的地址位置(返回EXOKEY)。
2)mst向同一地址区域发起一exclusive写操作。slave同样要记录该操作的mst的 AWID 和 要访问的地址位置。如果AWID==ARID && 该地址内容没有改变(没有 其他的mst访问过),这个写操作就是成功的。该地址就会更新,同时slv会返回EXOKEY. 否则,slv会返回OKEY.
由此看来,对于exclusive操作,总线其实允许其他mst同时来请求总线。比如,当其他mst要同时通过总线访问其他的slv时,上述2)就不满足,所以总线就不会被锁定
在Atomic Access一节中是这么规定的:ARLOCK[1:0]/AWLOCK[1:0]信号为2'b00-------Normal access
ARLOCK[1:0]/AWLOCK[1:0]信号为2'b01-------Exclusive access
ARLOCK[1:0]/AWLOCK[1:0]信号为2'b10-------Locked access
exclusive的操作相对于lock操作的优点是:只根据返回的resp来确定原子操作是否正确,不会影响interconnect的性能。
对于Exclusive access,从slave的角度来看,首先slave必须支持Exclusive的访问,具体slave必须有一些monitors 来记录收到exclusive访问时的,
ARID/AWID,ARADDR/AWADDR,ARSIZE/AWSIZE,ARLEN/AWLEN。总之必须保证访问的master和地址完全的一致。
其中的ARID/AWID由arm core来决定,如果是core0,ARID/AWID一般就是0。
从master的角度来看,master要发出一个exclusive的访问必须,先发出exclusive read后再发出exclusive write来完成一次exclusive的访问。
1)对于exclusive访问,正确的response是EXOKAY。而由于有的slave不支持exclusive的访问后直接忽视掉lock信号,此时就会
返回OKAY信号。
2)在exclusive read之后,slave仍可在该地址接收normal write,此时如果exclusive指定的地址中的数据已经改变,则slave不
会再下次exclusive write的时候,返回EXOKAY,取而代之会返回OKAY,表示出错了,此时write的值也不会写入。
3)在一次exclusive read会后,可以不等exclusive write,直接再发出exclusive read,这样slave monitor的地址就会改变,
相当于发起一个新的exclusive操作。
exclusive的操作,不能是cache的属性。
在slave端,monitor的最小的地址是length*size,同样也可以monitor一个比这个乘机更大的地址空间,但是这样可能会使本来正确的
exclusive access却报出了错误。
对于lock操作,主要需要interconnect保证只有特定ID的master可以访问一个特定的slave地址,直到同一ID的master发出一个unlock的操作接收到。
一个master可以开始一个read/write的lock sequence,但这时必须保证没有其他的outstanding的transaction等待完成。
当一个master开始一个lock的transaction时,必须保证没有其他的locked的transaction还没有完成。
master必须保证一个locked transaction sequences中,最多只有两个transaction,同时在lock操作的过程中,
所有的transaction都必须是同样的ID,一个lock的sequence,以最后一个unlock的transaction结束。ARLOCK/AWLOCK信号无效。