axi原子访问-FPGA常见问题社区-FPGA CPLD-ChipDebug

axi原子访问

 

exclusive访问格式:

master先发一个exclusive_read,

(master发出cmd:master先发出exclusive_read(arid,rd_addr),exclusive_write(awid,wr_addr))

slave回exokay说明访问的slave的地址支持exclusive操作;

如果回okay就表示这个slave不支持exclusive操作,会把对应地址的data给master,master收到okay后master就不会再进行exclusive write操作;

如果master收到exokay,master就会把数据读回来,master再发一个exclusive-write,master发的exclusive-read和exclusive-write的控制信息一模一样(地址,id,burst-size,burst-length),cmd_channel一模一样;

slave收到exclusive-write后有两种选择:

1.slave回exokay:整个原子操作执行成功了

表示这个数据写成功了,

条件1:slave保证从exclusive-read到exclusive-write中间没有另外的master去 对这段地址空间进行写操作,这段地址空间就是master发exclusive_read定义的这段地址空间(rd_addr开始,由burst_length,burst_size决定的一段地址空间),任何一个master(可能是自己)对这段地址空间的任何一段地址 都没有进行过写操作;

举例:size 32bit的burst,burst_length是16,这一段地址空间就是64个byte,整个64byte的任何一个byte 在这段时间内都没有被写过。

条件2:同一个awid在这一段时间内,没有发起新的exclusive-read操作;

举例:如果arid是1,master发了一个exclusive-read,在master还没有发exclusive-write之前;又发了一个arid是1的exclusive-read,

master arid=1 发了一个addr是100的exclusive-read,过了一段时间,没有发exclusive-write,又在arid=1发了一个addr=200的exclusive-read

这时候 发 arid=1 在addr=100发exclusive-write,slave就不能回exokay了;这个时候slave监测的地址已经跳到200了。

对addr=100发exclusive-write,slave发现,目前对arid=1这个id号并没有监测100这个地址的exclusive操作,这时候slave会回okay,并且这个写操作不会对100这个地址里面的数据进行更新。

如果这时候master 对id=1 的addr=200的地址发exclusive-write,slave会发现 对id=1 ,正在监测的地址是200,已经read回去了。这时候slave会回exokay,并且把这个地址更新,exclusive的监测就结束了。

下一次再锁定200这个地址,master就要发exclusive-read;

exclusive要能成功要满足这两个条件。

同一个id,slave只对每一个arid,只监测一段地址空间,相当于只监测一个exclusive-read操作。同一个id,如果有新的exclusive-read来了,就会用新的监测信息(地址,id号,burst-length,burst-size)更新到 已经监测的信息。把老的监测信息 覆盖掉。

如果某一个master可能是自己这个master对这段地址空间进行写操作,这个监测就失败了,exclusive-read失败了,如果master再发exclusive-write,slave会回okay表示这段lock操作不成功,中途被人打断了。

slave的monitor逻辑就知道exclusive不成功了,中间被人改过了。后面对exclusive-write,回okay。exclusive-write的数对这个地址没有更新进去。

slave除了放一段空间在这存数之外,还有一个monitor逻辑对每一个id 留一套监测逻辑。

请登录后发表评论

    没有回复内容