本文来自自学过程中所记的笔记,可能有不少错漏与胡言乱语,仅供参考,建议主要以ARM官方文件进行参考。原参考文档官网可下载,为了方便各位,我也上传了,需要的自取;
链接:https://pan.baidu.com/s/1voHyFmkpGqABcKH8OSF_Ng
提取码:izix

信号类型:

  • 信号的宽度有以下几类:

n:数据总线的宽度(按byte);

i:8-bits;

d:4-bits;

u:线宽的整数倍(按byte);

握手:

TVALID与TREADY握手决定了数据传输的时间。双向传输的机制允许主机或从机都可以控制传输的速率与信息。要建立传输,TVALID与TREADY都必须被声明,双方都可以先进行声明,也可以在同一个ACLK周期内同时声明;

如果主机要进行数据传输,其不可以等待TREADY出现后再声明TVALID,当声明了TVALID后这个声明必须在TREADY的声明出现之前保持;

从机可以在等待TVALID出现之后再声明TREADY; 同时,从机也可以先声明TREADY并等待TVALID;

以下是几个例子,箭头指示的时间节点发生信息传递:



信息传输:

  1. 数据在数据流中的位置:

    在一波数据流中,低阶总线传递的数据应该较早出发;

    当所有数据被完全打包好(没有空包),给定Byte在数据流中的位置如下:

    1. n表示为第n byte;
    2. t表示为第t次传输;
    3. 数据总线宽度为w bytes;
    4. INT(x)代表对x向下取整;
    5. b代表byte的位置;

    t = L N T ( n / w ) t = LNT(n/w) t=LNT(n/w);

    b = n − t ∗ w b = n-t*w b=n−t∗w;

  2. 数据型(Byte types)详解:

    Data byte: Data byte必须从信源被传输至目标地;data byte的数量,相关的TDATA数据值,数据流中数据位的相对位置都应在传输过程中保持不变;

    Position byte: Position byte必须从信源被传输至目标地;Position byte的数量与数据流中数据位的相对位置都应在传输过程中保持不变;

    Null byte: 不包含任何数据,也没有任何限制;

    在连接传输过程中,链接不被允许对Data Byte与Position Byte的相对位置与数量进行调整。但链接传输过程中可以对空字节进行增减,以匹配更宽或更窄的总线。需要注意的是,主从机都无需支持空字节,所以在到达需要处理的位置之前,所有空字节都需要被删除;

  3. 数据合并、打包与宽度转换

    在设计时,数据总线被希望可以适应不同宽度的接口。这样不同接口设计的总线可以被连接,多个设备也可以接入统一接口;

    对多数应用来说,接口应该是2^N个字节的宽度,但对于协议来说,只需为整数Byte宽度即可;

    所有增大与缩小操作,都需要保留所有声明过TKEEP数据的byte;如果增大或减小操作后没有足够的宽度进行输出,可以增加额外的无TKEEP声明的位数;

    合并考虑: 合并指两个来自不同传输的两组数据合并为一个传输;在一个传输中存在可以被移除的空指针时,合并就有条件发生; 合并的规则如下:

    a: 只有具有相匹配的TID与TDEST标识符的传输可以被合并;

    b: 如果现在的传输被标注为TLAST,则其不能与后一次传输合并。也因此如果一个传输被标注为TLAST,便意味着其后没有可以合并的传输,也意味着其不应被延迟传输;

    c: 必须保持位置与数据byte的正确位置;

    d: 必须保持TLAST, TSTRB与TUSER的正确关系;

    部分合并是被允许的;

    打包考虑:打包是从数据流中删除空字节的过程,往往出现在放大、缩小与合并等操作中; 空字节无需被全部移除,所以打包前后都可能出现空字节;

    缩小考虑: 缩小用于适配更窄的端口,这个过程通常伴随着单个输入/输出变为多个输入/输出;这个比例一般是2/1,但也不一定; 缩减的规则如下:

    a: 输入输出顺序匹配;

    b: TSTRB必须使用与data相似的方法缩小,以确保位置关系不会出现错误;

    c: TLAST必须在缩减后也最后传输;

    d: 输出传输的所有TID与TDEST都必须与输入的相匹配;

    e: TUEST必须与相同字节匹配;

    #只含空字节,没有TKEEP与TLAST字节的数据流可以被阻断;

    放大考虑: 一般用于单转多。如果包含合并,放大过程将是一个很复杂的过程,因为上游难以随时确定下游数据是否来自一个paket;放大的规则如下:

    a: 输入输出顺序匹配;

    b: TSTRB必须使用与data相似的方法放大,以确保位置关系不会出现错误;

    c: TLAST必须被保留;

    d: 输出传输的所有TID与TDEST都必须与输入的相匹配;

    e: TUEST必须与相同字节匹配;

字节限制符:

在AXI-4 Stream中有两个字节限制符:

TKEEP: 一个用于显示该字节是否一定要被传输至目的地的限制符;

TSTRB: 一个用于展示相关字节是位置字节还是数据字节的限制符;

每一个字节限制符都与一个byte相关:

TKEEP[x](TSTRB[x])与TDATA[(8x+7):8x]相关;

TKEEP限定: TKEEP被约束为0时表示其为一个空字节,反之则表示其一定要被传输至目的地。一个TKEEP全部为0的传输是合法的。除非TLAST位被约束为1,否则阻断一个全部TKEEP为0的传输是合法的; 主从机都无需支持空字节,所以在到达需要处理的位置之前,所有空字节都需要被删除;

TSTRB限定: 当TSTRB被约束为1时,代表这是一个有意义的数据字节,反之则为一个无意义的位置字节。位置字节被用于在传输中确定正确的相对位置,在信息流需要在目的地位置进行部分更新时常用。由于与位置相关的数据是无效的,所以TSTRB为LOW的时候,TADTA上的数据不被传输;

Packet边界:

Packet的解释上面已经给过了,在将信号打包时,需要考虑的信号有: TID, TDEST, TLAST; TLAST的用法如下:

a: 当其未被声明时,表示后面还会有后续传输跟进,因此为了完成增大、缩小或合并的延迟是可接受的;

b: 当其被声明时,目标地点可以将其作为packet的边界;

c: 当其被声明时,其可以作为共享链路上进行仲裁改变的有效依据;

在用于传输时,Packet的数量与TLAST的数量必须在主服务器与从服务器上保留;

虽然有结尾包,但packet的开始边界并未被定义一般判断一个包开始传输的依据有:

  1. 复位后第一次出现TID与TDSET;
  2. 一个包结束后收到的第一个有TID与TDSET的包;

所有有相同来源与目标地址的包都具有完全相同的TID与TDSET值;

两个不同的数据包不能合并,故如果早一步的传输收到了TLAST,哪怕具有完全相同的TID与TDSET值,也不能将两个字节合并传输; 若TID与TDSET不同,则不能将两个字节合并;

传输可以声明TLAST,但不包含任何数据\位置位,以用于:

  1. 当没有多余的数据需要传输时,结束包的传输;
  2. 遍历在缓存区中存储的数据;
  3. 完成一个在等待TLAST的操作;

不包含任何数据\位置位的TLAST声明,可以与只包含任何数据\位置位的字节结合;

信源与目的地信号:

信源与目的地信号有以下几种:

TID: 对流进行标记,用于区分通过一个数据接口的多个数据流;

TDEST: 为数据流提供大致的路由信息;

具有相同的TID与TDEST的数据来自同一个流,只有来自同一个数据流的数据才能被合并;

在非TLAST边界处,不同数据流的交叉是可以被允许的;

新的TID可以被生成,用于将一个数据流分成两个;

新的TDEST可以被生成,用于为数据流指明路由信息;

任何对TID和TDEST的操作都不能用于将两个数据流合成一个;

一个常见的模型是一个链接基于数据流的TID为其分配TDEST;

时钟和复位:

Clock: 每个组件都是用一个单独的时钟信号ACLK,所有输入的采样都必须在时钟的上升沿,所有输出的变化都必须在时钟的上升沿之后;

Reset: 异步复位,同步释放,active-LOW;

在复位阶段,TVALID必须被驱动为LOW,而其他信号可以随意变化;

在ARESETn解除后的第一个时钟上升沿,TVALID可以被驱动为HIGH;

用户信号:

用户使用边带接口传输一些byte,packet或给予fream的信息是一种常见的用法。用户信号有多种用法,如:

  1. 标记特殊数据项的位置与类型;
  2. 提供必须与数据伴随的辅助信息,如:奇偶校验、标志位;
  3. 识别数据包的段;

用户信号的传输以字节为单位;

按照建议,信号TUSER的位数应当与TDATA信号的Byte数成整数倍关系,每个字节所对应的用户信号必须从相邻的TUSER链路打包发送; 用户信号的定义如下:

  • 假设每个数据Byte对应m位User Signal;
  • 数据线的宽度为n Bytes;
  • User Bits的总宽度就应为 m*n
  • 如果User Bits的数量小于这个值,则会将其与前几位byte的总线相对应,后面的总线的User Bits会被默认为0(非协议内容,来源互联网);

如果对应的TKEEP位为0,则TUSER位的内容也无需传输。如果对应的空字节被删除,则其TUSER位也必须删除。当空字节被插入时,对应数量的TUSER也必须被插入,后插入的TUSER应被统一置为0;

TUSER也可以直接针对整个传输进行定义,而不是只能对单个字节。当整个传输都使用相同的某项配置时,只声明该配置一次明显好于在每次传输上都进行声明;

TUSER可以被用于对整个传输进行定义,但传输机制会基于传输机制划分TRUST信息。可信的基于传输的TUSER信息只有在满足以下条件时才成立:

  1. 连接的输入与输出接口必须相互匹配;
  2. 连接处的任何数据宽度转化都不涉及拆包;

当传输经过复杂的互联时,TUSER信号有时会经过支持不同TRUST宽度的互联部分。此时便需要填充(Padding)与修剪(Trimming)TUSER信息;

修剪和填充时,是在每一bit的前一位上进行增减。要进行填充时,填入的位数必须为0;示例如下:


按单BIT操作的PADDING


按单BIT操作的TRIMMING


按双BIT操作的PADDING


按双BIT操作的TRIMMING

设置TUSER的宽度:

对于有多个主从接口参与的互联,TUSER宽度的定义为:

MIN(MAX[主机每byte对应的TUSER的最小bit数],MAXP[从机每byte对应的TUSER的最小bit数]);

任何主从机发送的数据所对应的TUSER宽度都不能小于这个值;

TUSER的使用遵循以下守则:

  1. 主机的TUSER接口比链接接口窄,则必须增加置零的TUSER位来匹配链接;
  2. 主机的TUSER接口宽于最宽的链接接口,则必须修建接口以匹配链接;
  3. 在互联中任何比下游窄的TUSER接口,都必须补零进行连接;
  4. 在互联中任何比下游最宽的接口宽的TUSER接口,都必须进行修建以匹配链接;
  5. 在到达从机端时,如果从机接口比链接中的窄,则必须进行修剪;
  6. 在到达从机端时,如果从机接口比链接中的宽,则必须置零加宽;

如果在互联中附带了通信的主从机各自的信息,则对TUSER传输还可以进行进一步的优化;

AXI4_Stream入门(2): 接口与信号相关推荐

  1. Koa2调用java接口_入门koa2接口开发

    入门koa2接口开发 依赖安装 安装koa2 安装koa-router koa-router 提供了 .get..post..put 和 .del 接口来处理各种请求 代码分层 这里按照MVC的思想来 ...

  2. java函数式 new_java8简单入门--函数式接口 @FunctionalInterface

    1.介绍 看了几篇关于 java8 入门的例子,其中引入了许多令人期待已久的特性(虽然我没有过这样的体会),但不管你的代码是普通青年款还是文艺青年款,你都可以从被 java8 的重新组织的代码看到她的 ...

  3. java 接口入门,Java接口入门教程解读

    Java接口入门教程解读,学习Java技术开发是一个长期的过程,今天小编介绍Java接口相关知识内容 接口 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法 ...

  4. 电脑显卡html接口无信号,笔记本电脑HDMI连接电视机显示无信号的解决方法

    记本HDMI连接电视机显示无信号,怎么处理?现在的液晶电视,HDMI(高清晰度多媒体接口)是标配,通常是用PC或是平板电脑输出影像,通过电视屏幕来显示,当遇到笔记本HDMI连接电视机显示无信号该怎么解 ...

  5. Qt入门(3)——信号和槽

    信号和槽用于对象间的通讯.信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分. 在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件.更一般地,我们希 ...

  6. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.6 自定义信号槽

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1gA4y1d7gz 上节课,我们讲解了标准信号槽,标准信号槽中,信号和槽函数,都是 Qt 框架定 ...

  7. java入门之接口----以电脑USB为灯供电为例

    接口简述: 接口可以简单理解为规范,规则.接口是一种特殊的类. 代码格式: interface 接口名{ 规则属性,规则的行为 } 规则属性为常量,接口行为是抽象方法. 接口性质: 所谓的接口,可以简 ...

  8. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.5 标准信号槽

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1vW4y1676Q 本节讲解信号和槽的概念,以及标准的信号槽 1. 什么是信号槽 1.1 信号 ...

  9. 基于74HC14芯片与ADM2483芯片实现RS-485接口的信号隔离自收发设计

    http://www.elecfans.com/emb/jiekou/20190222874054.html

最新文章

  1. 你不知道的阿里人工智能:618机器人客服帮单店挣1亿
  2. 谈谈eclipse使用技巧一
  3. 微众WeCross 跨链平台(6)UBI通用区块链接口
  4. QPushButton 点击信号分析
  5. 向日葵远程使用备忘录
  6. 跟我一起屏蔽百度搜索页面右侧的内容
  7. 文件上传 jqueryForm
  8. centos6.5 源码安装php7
  9. 如何在Mac上创建和使用符号链接?
  10. python中的多线程(一)
  11. 野村证券分析师称微软不会收购雅虎和RIM
  12. 【运动学】基于matlab计步【含Matlab源码 524期】
  13. vue根据拼音选择城市better-scroll
  14. 【开源】3串锂电池充放电保护板设计参考
  15. VHDL实现矩阵键盘
  16. Cadence Allegro如何复用设计参数?
  17. 微信小程序day01
  18. 蓝牙远距离,一对多解决方案
  19. windows系统中安装monkey环境
  20. tomcat出现“localhost拒绝了我们的请求”问题

热门文章

  1. 最新不安装百度云管家就可以下载网盘资源的方法及各种浏览器修改JavaScript开关方法
  2. C Primer Plus 6th Edition第三章编程练习上溢下溢
  3. 使用Python扫描受损的MP3文件_OverJerry
  4. 基于STM32的VEML6040颜色传感器应用
  5. java lrucache 使用_LRUCache 具体解释
  6. OTP动态口令的Java实现
  7. Intel处理器Family、Model、Stepping等的学习
  8. Silverlight 2.5D RPG游戏技巧与特效处理:HLSL渲染动画
  9. react项目报出警告Warning: Cannot update during an existing state transition (such as within `render`).
  10. 2015年2月27日