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

AMBA-AXI(一)burst 传输-INCR/WRAP/Fixed


💡Note:

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

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

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


Burst 传输

跟burst相关的信号有AxSIZE, AxLEN, AxBURST,编码如下:

AXI对burst传输方式的要求:

  1. AXI3.0中incr burst的burst length最大为8,AxLEN为4bit信号;在AXI4.0中,incr burst的burst length为256,AxLEN为8bit信号。

  1. 对于其他类型的burst传输(fixed,wrap),burst length最大16.

  1. AXI4.0(H suite)中说,对于非INCR burst,支持1-16 burst length,但后面又说wrap传输只支持2、4、8、16 burst length。

  1. Burst length不能超过4KB边界。

  1. Burst 传输不能被提前终止,即使发生了传输错误。在写中,发生错误,也还要将写传输周期完成,master可以将wtrb拉低。在读的时候,传输周期也要完成,但是master可以discard data。

对于device设备,读操作发生错误,会怎么样呢?Device memory一般是read-sensitive的,读了之后,device中的设备就被移除了,如果我们把数据discard,这些数据就丢失了。所以spec中建议:a Manager must use a burst length that exactly matches the size of the required data transfer.

  1. 在AXI4.0中,对于一个non-modifible的INCR burst,并且她的长度大于16,也可以把它转换成多个小的burst。虽然是non-modifiable,也可以改变,但只能改变Axlen和响应的地址,其他的控制信号不能改变。

  1. 要注意,AxBURST, AxLEN, AxSIZE这些信号,在Axvalid, Axready同时为高的那一个周期内被采样一次,而不是每次transfer都采样。RDATA/RRESP是每个transfer都会返回,而BRESP是一个burst只返回一次。

  1. 对于exclusive access ,还有一些特殊的要求,见exclusive 部分。

Wrap 操作

  1. wrap的burst length为2、4、8、16,没有1.(如果是1的话,那么就是fixed address了)

  1. Wrap的地址要跟transfer size对齐,比如地址位宽是64bit,transfer size是32bit,那么地址要跟0x4对齐,不能是0x1,0x2,0x3这种。

  1. 要知道Wrap boundary address是什么?Wrap boundary是小于等于传输的起始地址,它跟burst的byte size(burst length*transfer size)对齐。比如AxSIZE为2,也就是4个byte的transfer size,burst length为4,所以这个burst的transfer size 为0x10,如果传输是从0x14开始的,那么每次transfer的起始地址是0x14->0x18->0x1c->0x10,会返回到0x10,这个0x10就是wrap boundary address。(始终要记住,地址是跟transfer size对齐,也就是跟0x4对齐)

  1. Wrap传输一般用在cache access中。

  1. AxBURST[1:0]==0b10表示wrap传输

  1. 在非对齐写访问中,比如transfer szie是4byte,数据位宽是8byte,那么地址也要跟transfer size对齐。

INCR读写example

上图是读操作,ARVALID和ARREADY同时有效的时候,采样相关的控制信号,下一个周期ARVALID和ARREAD拉低,在一次burst传输中,控制信号只采样一次。

上图读操作的burst length是4,4次transfer,从图中可以看出,每次transfer 都要回一个rresp,这跟写不同,写只回一次bresp;最后一次transfer的时候,RLAST拉高一个cycle。

写跟读的不同是写的bresp只回一次。在所有数据都传输结束之后会resp。

问题:如果slave那边在burst传输过程中,buffer满了,发生slave error,slave会提前发送resp告诉master吗?

猜测:应该不会,因为即使发生错误,也要把burst传输完成。但也有可能会提前返回resp,这样可以告诉master,后面的数据可以只发0就行了,把wstrb都拉低。

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

相关文章:

  • Java知识复习(八)Spring基础
  • WuThreat身份安全云-TVD每日漏洞情报-2023-02-27
  • 上海交大陈海波教授、夏虞斌教授领衔巨作上市:《操作系统:原理与实现》
  • dpi数据接入shell脚
  • Easyrecovery数据恢复软件工作原理及使用介绍教程
  • 【面试题】社招中级前端笔试面试题总结
  • 设备运行状况不能远程手机查看。难道就妥协吗?为何不试试这个办法
  • 重新认识 Java 中的内存映射(mmap)
  • 224. 基本计算器
  • 微信小程序通过 node 连接 mysql——方法,简要原理,及一些常见问题
  • uni-app项目搭建和代码托管
  • win10+python3.6+cuda9+pytorch1.1.0安装
  • 【2023】某python语言程序设计跟学第二周内容
  • spring源码篇——BeanDefinition的注册
  • virtualbox7虚拟机中安装苹果macOS big sur系统详细教程
  • 用spectralayers 简单去一下人声做个伴奏
  • 高峰对话|深度探讨「多云与边缘」
  • 开发手册——一、编程规约_2.常量定义
  • Sandstorm 建设者亮点——2023 年 2 月
  • MyBatis快速入门
  • Mysql的一些提权方式(mysql提权、UDF)
  • 【2023】DevOps、SRE、运维开发面试宝典之Docker相关面试题
  • 圣杯布局的实现方式
  • RecastDemo用法
  • IIC总线式驱动开发(mpu6050)(二)
  • 盘点一下那些远程办公的神仙公司
  • Spring Cloud Alibaba全家桶(四)——微服务调用组件Feign
  • 安装pytorch
  • 自动化测试 Appium之Python运行环境搭建 Part2
  • LeetCode 2 - 两数相加