Ordering
Read ordering:相同的master发出相同ARID的burst到不同的slave,这些burst数据返回的顺序必须跟发出的地址顺序一样;RID要和ARID一样。
Write ordering:AXI4.0中写数据必须跟地址的顺序是一样的,因为缺少WID来跟AWID对应。
总线得到master 的ARID, AWID, WID之后,会增加几个bit用以区分不同master的ID,这样master不必考虑它发出的ID跟其他master相同,总线会将拓宽之后的ARID, AWID, WID发给slave,所以slave收到的ID可能会宽一些,并且可能跟mater发出的ID不同。
Slave返回的RID也是经过拓宽的,因为slave发出的RID和ARID相同,这个RID在经过总线的时候,总线将多余的bit去掉再给到mater,所以master收到的RID和它发出的ARID是一样的。(BID也是一样的)
同一个burst的不同transfer的ID一定是相同的吗?
对于读操作,ARID只采样一次,每次transfer的RID,都要跟ARID相同,所以不同transfer的RID是相同的。
对于写操作,BRESP只有一次,它也要跟AWID相同,所以也是相同的
同一个burst的不同transfer的完成顺序跟发起顺序是相同的吗
因为同一个burst中的transfer用的是相同的RID,没法区分不同transfer RDATA,所以只能要求transfer完成顺序是跟发起顺序是一样的。
写的话只对burst回一个resp。
AXI对ordering的要求
相同channel的、相同ID的burst,如果destination(写的destination是slave,读是master)也是相同的,那么这些burst请求要in-order。
这句话怎么理解呢,比如master在AR通道发出了相同ID的多笔burst命令,如果这些burst都是传给同一个memory location,那么它们到达memory的顺序跟master request顺序一样。
但是如果是发给不同的memory location,那不需要保证请求到达slave的顺序,不符合上面“同一个destination”这个条件。
相同ID的response,他们在返回给master的时候,也要跟请求的顺序是相同的。
Transactions from different Managers
• Read and write transactions
• Transactions with different IDs
• Transactions to different Peripheral regions
• Transactions to different Memory locations
这里讨论的保序和乱序都是基于一个master发出的请求。并且粒度是一个burst传输。
问题1:什么是保序?
1. Master对同一memory location发出的读burst请求按照master发出的顺序,到达memory。
2. Memory location对master的读响应,按照请求的顺序返回给master。
3. Master对同一memory location发出的写burst请求按照master发出的顺序,到达memory。
4. Memory location对master的写响应,按照请求的顺序返回给master。
5. Master对不同的slave发送请求,这些请求的响应按照master请求的顺序返回
6. Master对同一memory location先发写再发读,确保写先到达memory。读到的是写进去的数据。
问题2:什么是乱序?
out-order不是master决定的,因为这不会增加master的效率,而是由slave决定的,比如不同slave返回数据的距离和速度不同。
slave 会保证:
如果先后收到对于同一memory location的写和读,那么写的顺序在读之前。
如果先后收到对于同一memory location的读和写,那么读的顺序在写之前。
转自https://blog.csdn.net/m0_38037810/article/details/129290065
作者:甲六乙
*免责声明:本文由作者原创。文章内容系作者个人观点,路科验证转载仅为了传达一种不同的观点,不代表路科验证对该观点赞同或支持,如果有任何异议,欢迎联系路科验证。