【FPGA开发】AXI-Stream总线协议解读

news/2024/11/17 18:41:32/

文章目录

  • AXI-Stream概述
    • 协议中一些定义
      • 字节定义
      • 流的定义
    • 数据流类别
      • 字节流
      • 连续对齐流
      • 连续不对齐流
      • 稀疏流
  • 协议的信号
    • 信号列表

文章为个人理解整理,如有错误,欢迎指正!

参考文献
ARM官方手册 《IHI0051B》

AXI-Stream概述

协议中一些定义

AXI-Stream是两个连接在一起的器件进行数据交换的标准协议,他是点对点协议,连接一个发送端和一个接收端。

字节定义

1、数据字节:包含有效信息的数据字节,数据字节在源端和目的端之间传输
2、位置字节:指示数据流中数据字节的相对位置,一个占位符,它不包含在源端和目的端之间传输的任何相关数据值。
3、空字节:不包含上述两种字节意义的第三种字节。

流的定义

1、Transfer:AXI-Stream协议中的一次数据传输。一次TVALIDTREADY的握手,就是一次transfer
2、Packet:AXI-Stream协议中传输的一组字节,一个Packet包含一个或多个Transfer,类似于AXI突发。
3、Frame:一个Frame包含整数个Packet,一个Frame可以有很多的字节,例如整个视频帧缓冲区。一个Frame是AXI—Stream协议中,字节分组的最高级别。
4、Data Stream:可以包含独立的字节传输,或者在Packet中组合在一起的一系列字节传输。

上述四个流的定义,从上到下,暗含了层级的概念。

数据流类别

AXI-Stream支持多种数据流形式。
本节中显示的示例包含4字节宽总线上的十六进制值,列按时间顺序从左到右排列

字节流

字节流是数据字节和空字节的传输,字节流传输可以传输任意数量的数据字节,这取决于数据宽度。
空字节可以在发送端和接收端之间的任何点从流中插入或删除。
图1-1给了两个字节流的例子,由于空字节没有任何有效信息,所以两个图传输的信息是一样的。
在这里插入图片描述

连续对齐流

连续对齐流是传输一定数量的数据字节,其中每个数据包没有位置字节或空字节,如图1-2所示。
在这里插入图片描述

连续不对齐流

连续不对齐流中,可以有任意数据的位置字节,但是位置字节不会插在数据字节中间,只会在包头或者包尾,或者同时在包头和包尾。
如图1-3左边的包,D-01至D-11的数据字节是连续的,在尾巴处有两个位置字节;
如图1-3右边的包,D-01至D-11的数据字节是连续的,在头部和尾巴处各有三个位置字节;
在这里插入图片描述

稀疏流

稀疏流传输数据字节和位置字节,所有的数据字节必须要从源端传到目的端,所有数据字节和位置字节的相对位置在源端和目的端之间不能改变,一般来说,数据流中的主体是数据字节。
图1-4所示,每两个数据字节后跟着一个位置字节。
在这里插入图片描述

协议的信号

信号列表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前四个信号不再赘述,时钟、复位、valid和ready握手,都是AXI协议中的老演员了,时序要求和AXI-FULL、AXI-Lite差不多。


TDATA:数据,位宽必须是字节的整数倍,推荐8, 16, 32, 64, 128, 256, 512 or 1024-bits。

字节位置:数据流中先传输的是数据流的低字节,对于一个没有空字节的满包流,位置满足如下规律

  • 字节序列n从0开始向上编号
  • 每次传输,t,按顺序从0往上编号
  • 数据总线的宽度为w字节
  • INT(x)是x的舍入整数值

字节n包含在传输t中,其中: t = INT(n/w) ,
在字节位置b,其中:b = n - (t * w)
它包含在:TDATA[(8b+7):8b]

字节类型:数据字节、位置字节和空字节。

数据合并、打包和宽度转换:其中的宽度转换,包括向上转换和向下转换。


TSTRB:可以理解为标识符,指示TDATA中的每个字节,是数据字节还是位置字节。
TKEEP:同样理解为标识符,指示TDATA中的每个字节,是否需要作为数据流的一部分被处理。
在这里插入图片描述


TLAST:指示Packet的边界。
TID:是数据流标识符,其位宽建议不大于8。
TDEST:为数据流提供路由信息,其位宽建议不大于8。
TUSER:是用户定义的边带信息,可以沿着数据流传输。其宽度建议为TDATA_WIDTH/8的整数倍。
TWAKEUP:标识与axis - stream接口相关的任何活动


http://www.ppmy.cn/news/1547779.html

相关文章

【C++】list 与 string 基础与实现字符串操作

【C】使用 list 与 string 实现基础字符串操作 文章目录 一、字符串的基础操作1.1 - startsWith1.2 - endsWith1.3 - trim1.4 - indexOf1.5 - replaceAll 二、list 基础操作2.1 - 遍历2.1.1 - 使用迭代器访问2.1.2 - 使用基于范围的 for 循环遍历2.1.3 - 使用标准算法库遍历 2.…

STM32G4的数模转换器(DAC)功能介绍

目录 概述 1 DAC介绍 1.1 功能 1.2 主要特征 1.3 DAC特性总结 ​2 DAC模块框架结构 3 DAC数据格式 3.1 单DAC通道 3.2 双通道数据格式 3.3 有符号、无符号数据 4 DAC数据转换 ​5 DAC输出电压 概述 本文主要介绍STM32G4的数模转换器(DAC)功能&a…

AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型

1. 引言 AI技术在电商平台的应用已不仅仅停留在基础的数据分析和自动化推荐上。随着人工智能的迅速发展,越来越多的电商平台开始将AI技术深度融合到用户体验、定价策略、供应链优化、客户服务等核心业务中,从而显著提升运营效率和用户满意度。在这篇文章…

vue3中使用 HTML5 Canvas 做一个案例总结笔记

这篇文章记录了在vue3中如何使用HTML5 Canvas做一个时钟的案例, 当然主要是HTML5 Canvas, 如何需要了解更多关于vue的知识前面也已经写过好几篇了,辛苦翻一下的... 开始写代码之前我们先来了解一下关于HTML5 Canvas 的基础知识 目录 一 .基础知识 1.了解canvas 1.1 基本用法…

Linux下useradd 和 adduser的区别

useradd 和 adduser 是在类 Unix 系统中用于添加新用户的命令,但它们之间存在一些差异,主要体现在不同的系统环境和命令的具体实现上。 useradd useradd 命令通常用于基于 sysvinit 的系统,如早期的 Linux 发行版(比如 CentOS 6…

Jmeter中的监听器(四)

13--用表格查看结果 功能特点 响应时间:显示每个请求的响应时间。响应码:显示每个请求的HTTP响应码。请求数据:显示发送的请求数据。响应数据:显示接收到的响应数据。错误信息:显示请求失败时的错误信息。详细信息&a…

【手撕 Spring】 -- 实现含构造函数的类实例化

🌈手写简化版 Spring 框架:通过构建一个精简版的 Spring 框架,深入理解 Spring 的核心机制,掌握其设计思想,进一步提升编程能力 🌈项目代码地址:https://github.com/YYYUUU42/mini-Spring 如果该…

计算机网络 (5)数据通信的基础知识

前言 数据通信是一种以信息处理技术和计算机技术为基础的通信方式,它通过数据通信系统将数据以某种信号方式从一处传送到另一处,为计算机网络的应用和发展提供了技术支持和可靠的通信环境,是现代通信技术的关键部分。 一、数据通信的基本概念…