当前位置: 首页 > news >正文

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对同一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的读和写,那么读的顺序在写之前。

http://www.lryc.cn/news/25255.html

相关文章:

  • APIs and Open Interface--非工单领、发料(含调拨)
  • 互联网医院系统软件开发|互联网医院管理系统开发的好处
  • 2.单例模式
  • 【保姆级】Java后端查询数据库结果导出xlsx文件+打印xlsx表格
  • Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
  • vue3生命周期
  • Python学习笔记10:开箱即用
  • 详解JAVA反射
  • 在nestjs中进行typeorm cli迁移(migration)的配置
  • 前端工程构建问题汇总
  • 某马程序员NodeJS速学笔记
  • SpringMVC DispatcherServlet源码(6) 完结 静态资源原理
  • 2023年全国最新会计专业技术资格精选真题及答案9
  • Web3中文|把Web3装进口袋,Solana手机Saga有何魔力?
  • 【配电网优化】基于串行和并行ADMM算法的配电网优化研究(Matlab代码实现)
  • 数据结构初阶 -- 顺序表
  • uniapp:3分钟搞定在线推送uni.createPushMessage,uni.onPushMessage
  • C/C++开发,无可避免的多线程(篇一).跨平台并行编程姗姗来迟
  • 如何把照片的底色修改为想要的颜色
  • 【高效办公】批量生成固定模板的文件夹名称
  • redis的集群方式
  • 温控负荷的需求响应潜力评估及其协同优化管理研究(Matlab代码实现)
  • 模电学习9. MOS管使用入门
  • 【算法】【数组与矩阵模块】正数组中累加和为给定值的最长子数组长度,空间复杂度O(1)解法
  • 3.1.2 创建表
  • 使用netlify实现自动化部署前端项目(无服务器版本)
  • MATLAB点云数据处理(二十九):可视化点云之pcshow参数详解与快捷键操作
  • 顺序表——重置版
  • PyQt5自然语言处理入门案例笔记
  • 使用 CSS 替换表行颜色?