AMBA-AXI(二)AXI的序,保序与乱序


💡 Note:

本文是根据AXI协议IHI0022F_b_amba_axi_protocol_spec.pdf(issue F)整理的。

主要是分享AXI3.0和4.0部分。

如果内容有问题请大家在评论区中指出,有补充或者疑问也可以发在评论区,互相学习 🙌


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也是一样的)

  1. 同一个burst的不同transfer的ID一定是相同的吗?

对于读操作,ARID只采样一次,每次transfer的RID,都要跟ARID相同,所以不同transfer的RID是相同的。

对于写操作,BRESP只有一次,它也要跟AWID相同,所以也是相同的

  1. 同一个burst的不同transfer的完成顺序跟发起顺序是相同的吗

因为同一个burst中的transfer用的是相同的RID,没法区分不同transfer RDATA,所以只能要求transfer完成顺序是跟发起顺序是一样的。

写的话只对burst回一个resp。

AXI对ordering的要求
  1. 相同channel的、相同ID的burst,如果destination(写的destination是slave,读是master)也是相同的,那么这些burst请求要in-order。

这句话怎么理解呢,比如master在AR通道发出了相同ID的多笔burst命令,如果这些burst都是传给同一个memory location,那么它们到达memory的顺序跟master request顺序一样。

但是如果是发给不同的memory location,那不需要保证请求到达slave的顺序,不符合上面“同一个destination”这个条件。

  1. 相同ID的response,他们在返回给master的时候,也要跟请求的顺序是相同的。

AXI没有要求ordering的地方

• 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。

  1. Memory location对master的读响应,按照请求的顺序返回给master。

  1. Master对同一memory location发出的写burst请求按照master发出的顺序,到达memory。

  1. Memory location对master的写响应,按照请求的顺序返回给master。

  1. Master对不同的slave发送请求,这些请求的响应按照master请求的顺序返回

  1. Master对同一memory location先发写再发读,确保写先到达memory。读到的是写进去的数据。

问题2:什么是乱序?

  1. 读响应返回的顺序跟读请求的顺序不同。

  1. 写响应返回的顺序跟写请求的顺序不同

问题3:什么时候要保序?

相同channel、相同ID,并且相同destination,那这些传输用in-order。比如master发出相同ID的请求到一个或者多个slave,那它收到的响应要跟请求顺序是一样的。

问题4:什么时候可以乱序?

  1. 同一master发出请求的ID不同。

  1. 同一master对不同的memory location或者peripheral space发出的请求。

  1. 不同master发出的请求之间。(是否会操作相同的地址,不在AXI考虑范围内,AXI不解决一致性问题)

out-order不是master决定的,因为这不会增加master的效率,而是由slave决定的,比如不同slave返回数据的距离和速度不同。

slave 会保证:

  1. 如果先收后到对于同一memory location的写和读,那么写的顺序在读之前。

  1. 如果先收后到对于同一memory location的读和写,那么读的顺序在写之前。


update:2023-03-24

关于先写后读同一个地址(read after write,真数据依赖)的序:

今天看了ARM R52 core的资料,里面有将core先写一个地址,如果下一次还从这个地址读,那么读操作请求会等写操作的响应返回之后再发出去。这样看的话,这里也保证了写后读的序。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值