了解完通道握手的依赖关系,我们再看看传输事务的结构。首先看传输的地址结构。AXI协议是基于突发(burst)传输的。所谓突发传输,就是在一次事务中,连续地传输多个地址相邻的数据。一次突发传输中可以包含一至多次数据(Transfer)。每个 transfer 因为使用一个周期,又被称为一拍数据(Beat)。每个数据可以是多个Byte构成。
协议规定,每次突发传输的累计地址不能跨4KB边界。至于为啥是4KB而不是别的数值,这是最初操作系统的问题,以4KB为一个页(page),对于某些设备而言,跨了4KB边界可能就是另外一个设备了。
ARLEN用于读地址通道的突发长度,AWLEN用于写地址通道的突发长度。下文中AxLEN指ARLEN或AWLEN, x指代R或者W,对于其它信号也类似,以后不再赘述。在AXI3中,对于所有的突发类型,都支持1-16的突发传输。AXI4中,INCR类型支持1-256突发传输,其它类型依然是1-16。所以对于AXI3来说,AxLEN信号是4bit宽度;而在AXI4中,AxLEN是8bit宽度。一次突发传输的长度是AxLEN+1,因此,最小长度就是1了(毕竟0的话没有任何意义)。
AxSIZE信号指示突发传输中的数据位宽。数据位宽不能超过数据总线本身的位宽,而当数据总线位宽大于突发传输的位宽时,将根据协议的相关规定,将数据在部分数据线上传输。

突发传输有以下几种类型:
FIXED,所有数据都使用起始地址。该模式适合对某个固定地址进行多次数据更新,比如读写一个 fifo 时,读写地址就是固定的。
INCR,后续数据的地址在初始地址的基础上进行递增,递增幅度与传输宽度相同。适合对于RAM 等通过地址映射(mapped memory)的存储介质进行读写操作。
WRAP,首先根据起始地址得到绕回边界地址与最高地址。当前地址小于最高地址时,WRAP 与 INCR 类型完全相同,地址递增。但到递增后的地址到达最高地址后,地址直接回到绕回边界地址,再进行递增,就这样循环往复。最高地址由绕回边界地址计算得到。这种传输类型适用于对缓存行(cache line)的操作。
突发传输类型是通过AxBURST信号来指示的,具体参考下图:

好了,到这里,我们知道了每次突发的起始地址是主机发出的。AxLEN用于指示要传输多少次数据(beat);AxSIZE用于指示每个数据有多少Byte;AxBURST用于指示突发类型,除去首次传输的地址,下次传输的地址可以根据AxBURST和首地址计算得出。
协议中规定,通信双方都不能在传输事务的所有 Transfer 完成前提前结束。哪怕发生错误,也要走完整个传输事务的流程。但是主机有办法减少传输的数据。在写传输事务中,发送方可以通过置低所有写有效位的方式,使得写数据无效。在读传输事务中,主机可以直接丢弃读取到的数据。
分析完传输的地址结构,再来看看读写数据的结构。主要是涉及窄传输(Narrow transfers),非对齐传输(unaligned transfer)和混合大小端(mixed-endian)传输等话题。
WSTRB信号用于指示WDATA中的哪些数据byte是有效的。WSTRB[n] 对应的是WDATA[8n+7:8n],也就是:当 WSTRB[n] 为 1 时,WDATA[8n+7:8n]有效。
当主机发起的传输位宽小于总线宽度时,就是一次窄传输。如果是INCR或者WRAP类型,可以每拍(beat)使用不同的字节位置(byte lane),如果是FIXED类型就不可以了。协议中给出了两个例子,我们看一个就好了,如下图:

突发长度是5
起始地址0
每次传输8bit
数据总线宽度32bit
突发类型是INCR
图中灰色表示该byte无效,我们可以看到,每次传输的有效字节位置是不同的。在窄传输中,主机可以调整有效数据的字节位置,以及给出字节有效信号 WSTRB,能够使从机无需进行数据重组等工作。
AXI中还有一个问题是大小端问题,之前的文章讲过什么是大端和小端。其根本不同就是高字节数据存在低地址位还是高地址位。AXI协议定义了一种字节顺序不变端序(byte-invariant endianness)方案。
1.无论大端或小端模式,每个数据结构存储空间的分配方式是相同的
2.该数据结构按照其大端或小端模式决定字节存储的地址顺序
3.在传输过程中不考虑数据结构的大小端,按照字节原先存储的顺序,原样传输并存放至对端
AXI 协议支持地址非对齐的传输,允许突发传输的首字节地址,即起始地址与突发传输位宽不对齐。比如,总线位宽为 32bit,也就是4byte,这时要保证对齐,起始地址的最低两位必须是2‘b00。如果起始地址为 0x1002,则产生了非对齐现象。
主机可以使用低阶地址行表示未对齐的起始地址,然后提供一个对齐的地址,并使用字节通道选通信号通知未对齐的起始地址。下面是协议中给出的例子:

看完了数据结构。就剩下读写响应结构了。读写响应信号分别是RRESP/BRESP,各2bit,总共4种状态:
OKAY ,常规访问成功
EXOKAY,独占(exclusive)访问成功
SLVERR,从机错误,从机接收到了访问请求,但因为种种原因向主机返回了一个错误状态
DECERR,解码错误,一般由互连(interconnect)组件产生,表示主机发送的传输事务地址无效,无法将传输事务发送给某个从机。

原文地址:https://mp.weixin.qq.com/s/I8YrDEB5f-B0URGnYl1BYA

AXI协议解析(三)相关推荐

  1. AXI协议解析(四)

    来看看事务属性(Transaction Attributes),主要是对cache,buffer和memory controller的规定.按照协议,从机分为存储从机(memory slave)和外设 ...

  2. AXI协议解析(五)

    今天先来看一下传输标识(transaction identifier)的概念,主要是ID信号. 开始之前先讲几个概念,首先是outstanding(想不好怎么翻译,有的人译为超前)传输.如果没有out ...

  3. AXI协议解析(二)

    前面说到AXI的五个通道是独立的,但通道间必须保持一定的约定关系: 写回复必须在一次写事务的最后一个写数据之后 读数据必须在接收到读地址信号之后 通道间握手必须满足一定的依赖关系 前两条好理解,重点看 ...

  4. AXI协议解析(一)

    AXI的全称是Advanced eXtensible Interface.在spec里面是这么自夸的: •用于高带宽和低延迟设计. •提供高频操作,无需使用复杂电桥. •协议满足各种组件的接口要求. ...

  5. AXI协议解析(六)

    有朋友提出希望讲一下AXI的原子访问(Atomic Accesses).其实这部分我在前面特意没提及,一是个人感觉这块牵扯的基本概念太多,而且晦涩难懂,二是工作中真需要用到的机会也不多.今天简单介绍一 ...

  6. AXI协议详解(1)-协议简介

    协议简介 0 绪论 AXI--Advanced Xtensible Interface(高级可扩展接口)是为了满足高性能系统设计而定义的一套独立通道协议,在AMBA3.0中提出,AMBA4.0将其修改 ...

  7. AMBA协议之AXI协议——中文翻译

    AMBA协议之AXI协议--中文翻译 本规范的编写是为了帮助那些想要熟悉高级微控制器总线架构(AMBA)和设计与AXI协议兼容的系统和模块的硬件和软件工程师. 文章目录 AMBA协议之AXI协议--中 ...

  8. AXI协议(五)-AXI-STREAM及接入思路解析

    AXI协议(五)-AXI-STREAM及接入思路解析 在本文中,你将可能学会: AXI-STREAM协议的梗概(下简称axis) 尝试编写出普通摄像头接入AXIS的思路 本来想讲完怎么接入的,由于篇幅 ...

  9. Xilinx AXI Interconnect相关知识汇总-AXI协议理解(三)

    xilinx的IP核很多都用到了AXI总线进行数据和指令传输.如果有多个设备需要使用AXI协议对AXI接口的BRAM进行读写,总线之间该如何进行仲裁,通信? Vivado有一个叫做AXI Interc ...

最新文章

  1. 中国是全球AI停车最大市场
  2. hbase把表删除后又新建该表提示表已存在,解决方案
  3. word2vec原理(三): 基于Negative Sampling的模型
  4. 人工智能必看的 45 篇论文(附下载地址)
  5. 多线程—生产者消费者模式、银行家算法
  6. Docker精华问答 | 如何让一个容器连接两个网络?
  7. selenium windows 下面环境搭建(Eclipse)
  8. 数据结构上机实践第八周项目3-顺序串算法
  9. html获取url后面的参数_【python量化】用Python获取基金历史净值数据
  10. 玩转基金(1)基金基础
  11. webpack配置路径问题 1
  12. Java基础学习总结(70)——开发Java项目常用的工具汇总
  13. 分支定界法解TSP问题(one-tree算法定界)附java代码
  14. leetcode-分糖果问题-84
  15. IP地址、网关地址、子网掩码地址
  16. 一图看懂Python生态圈图像格式转换
  17. PDN仿真笔记5-电容走线影响寄生电感的因素分析
  18. 关于学术文献推荐系统的调研报告
  19. 30个HTML+CSS前端开发案例(四)
  20. 企业实战LNMP-安装wordpress论坛

热门文章

  1. K - Krystalova‘s Trivial Problem (lazytag线段树)
  2. 一个程序员可以差到什么程度?真诚地感激曾经没有当面嘲笑我的每一个同事
  3. 【分享】身为一个资深的“收藏程序猿”必须知道的一些网址(建议收藏)
  4. SAP MM 自动化处理之公司间STO交货单自动创建
  5. LeetCode-M-Copy List with Random Pointe
  6. 两部电影和数不清的认识到,离开这个浏览器秕
  7. 云信小课堂 | 如何管理音视频的通话状态?
  8. 程序设计大赛---多米诺效应
  9. Docker 安装 Redis 方法一、通过 Dockerfile 构建 创建Dockerfile 首先,创建目录redis,用于存放后面的相关东西。 runoob@runoob:~$ mkdir -
  10. welcome-file 不能配置action的解决方法