AXI-stream学习笔记(一)

目录

一.AXI-stream的基本概念

1.1关于AXI-stream

1.1.1字节定义

1.1.2传输定义

1.2数据流

1.2.1字节流

1.2.2持续对齐的流

 1.2.3持续非对齐流

1.2.4稀疏流

二.AXI-stream接口信号 

2.1信号列表

2.2握手信号

2.2.1TVALID在TREADY之前有效

 2.2.2TREADY在TVALID在之前有效

 2.2.3TREADY和TVALID同时有效

 2.3唤醒信号(wake-up signaling)

2.4数据信号

2.4.1字节位置(有疑问)

2.4.2字节类型

2.4.3数据合并、组包以及宽度转换

2.5限定字符

2.5.1TKEEP限定字符

2.5.1TSTRB限定字符

2.6包边界 

2.7源和目标信号

2.8时钟和复位信号

2.8.1 时钟

2.8.2 复位

2.9 用户信号

2.9.1决定用户信号的宽度


一.AXI-stream的基本概念

1.1关于AXI-stream

1.1.1字节定义

数据字节(Data byte):代表有效信息

位置字节(Position byte):仅表示相对位置不包括相关的有效信息

空字节(Null byte):不包括任何有效信息与位置信息

1.1.2传输定义

Transfer:transfer可定义为一次TVALID和TREADY信号有效的握手操作间的传输数据。

Packet:定义为一个或多个transfer操作,相当于AXI中的burst操作。

Frame:定义为一个或多个packet操作,是AXI-stream中的最高层次的字节组合。

Data stream:包含两种形式①一系列独立的transfer②一系列有transfer组合而成的packet

1.2数据流

1.2.1字节流

字节流的传输由数据字节和空字节构成,空字节可以在任何位置被插入or移除。下图为一个字节流的例子。

1.2.2持续对齐的流

意味这他传输过程中没有占位字节和空字节

 1.2.3持续非对齐流

指的是在每个packet的第一个数据字节和最后一个数据字节中没有位置字节,但在其开始之前或者结束之后可以有许多的位置字节。

1.2.4稀疏流

稀疏流中包含了数据字节和位置字节,数据字节在稀疏流中占主要部分,位置字节在,稀疏流中的位置保持不变。


二.AXI-stream接口信号 

2.1信号列表

①ACLK:来源于clock 位宽为1,上升沿有效。

②ARESERn:来源于reset, 位宽为1。

③TVALID:来源于数据发送端,位宽为1,该信号意味着发射端将发射有效的transfer。

④TREADY:来源于数据接收端,位宽为1,该信号意味着接收端将接受一个transfer。

⑤TDATA:来源于数据发送端,位宽为TDATA_WIDTH(8、16、32、64、128、256、512、1024-bits)。

⑥TSTRB:来源数据发射端,位宽为TDATA_WIDTH/8,该信号意味这TDATA是数据字节还是位置字节。

⑦TKEEP:来源数据发射端,位宽为TDATA_WIDTH/8,该信号意味相关字节的内容是否作为数据的一部分来处理。

⑧TLAST:来源数据发射端,位宽为1,该信号意味着packet的边界。

⑨TID:来源数据发射端,位宽为TID_WIDTH,该信号是数据流标识符。

⑩TDEST:来源数据发射端,位宽为TDEST_WIDTH,该信号提供了数据流的routing信息(暂未搞懂routing information指的是什么)。

①①TUSER:来源数据发射端,位宽为TUSER_WIDTH,该信号指的是用户定义的边带可以传送的信息数据流。

①②TWAKEUP:来源数据发射端,位宽为1,该信号指的是任何与axi-stream接口有关的活动。

2.2握手信号

握手过程依靠的是TVALID和TREADY两个信号,分成以下三种情况。

2.2.1TVALID在TREADY之前有效

当TVALID有效时来自数据发送端的数据字节和控制信息必须保持不变,当TREADY为高电平时接收器就可以接收数据和控制信息,transfer的过程发生在TREADY为高时,图中的T3时刻。

 2.2.2TREADY在TVALID在之前有效

当TREADY在数据信号有效之前有效,当TVALID为高电平时接收器就可以接收数据和控制信息,transfer的过程发生在TVALID为高时,图中的T3时刻。

 2.2.3TREADY和TVALID同时有效

TREADY和TVALID信号在同一个时钟上升沿有效,所以transfer发生在下图中的T2时刻。

 

 2.3唤醒信号(wake-up signaling)

TWAKEUP:暗示了AXI5-stream接口的任何活动,不多做解释具体可以参照ARM的AXI-stream手册。

2.4数据信号

TDATA是由数据发射端传输到数据接收端的数据。

2.4.1字节位置(有疑问)

在一个数据流中,数据总线的低位字节是流中的较早传输的。

对于一个没有空字节的packet,流中一个给定字节的位置可以使用以下方式来决定:

在一个数据流中:

1.字节 n 的序列 从 0 开始向上编号

2.序列中的每个transfer,t, 从 0 开始向上编号

3.数据总线的宽度为 w bytes

4.INT(x) 是数值 x 向下取整( rounded down 向绝对值减小的方向舍入取整)

因此字节n 被包含在传输 t 中:t = INT(n/w)

字节位置 b: b = n -(t *w)

字节位置b包含在:TDATA[(8b+7):8b]

举例当n=100bytes,w=32bytes时 t=3 b=4意味着需要传输3+1一次,第四次传输4byte(总线为32byte)

2.4.2字节类型

数据字节:在传输过程中不能修改的数据字节属性①数据字节的number②相关的TDATA信号的值③在数据流中数据字节的相对位置。

位置字节:在传输过程中不能修改的位置字节属性①位置字节的number②在数据流中位置字节的相对位置。

空字节:不包含任何信息,空字节在传输过程中可以插入或者移除。

互联不能修改流中的数据字节和位置字节的数量和相对位置,但是可以插入或者移除空字节。

2.4.3数据合并、组包以及宽度转换

推荐建立AXI-stream接口的时候是一个强适应性的数据位宽,因为这样可以根据系统去配置他的位宽。但当适应性强的位宽是不可能的时候他需要数据合并、组包以及宽度转换。

考虑数据合并

数据合并是指把两个来自不同的transfer的字节合并成一个transfer,数据合并需要考虑几个条件:

①只用满足TID和TDEST一致的transfer才可以被合并

②如果当前的transfer的TLAST信号有效,他将不能与后面的transfer合并,并且这个transfer不能被延迟。

③满足正确的数据字节以及位置字节的要求。

④满足正确的TLAST、TSTRB、TUSER信号要求。

考虑数据组包

数据组包的意思是移除数据流中的空字节,利用的是KEEP信号。

考虑数据压缩

通过给定的压缩给定的数据位宽(将数据位宽从给定的位宽压缩至更窄的数据总线位宽)通常涉及单输入到多输出。需要考虑以下条件:

①输出流的字节顺序与输入流的字节顺序必须match

②TSTRB必须以类似的方式缩小,保证数据字节以及位置字节的映射关系。

③TLAST只能与缩小后的最后一个transfer有关。

④所有输出transfer的TID和TDEST必须和输入的transfer的值相同。

⑤TUSER信息必须保持一样的字节。

⑥如果一个只包含空字节的transfer并且他的TKEEP和TLAST无效时是可以被压缩的。

考虑数据扩展操作


扩展是从一个给定的数据总线宽度转换到一个更宽的数据总线。

这一过程可以和合并操作混合进行,以便从多输入传输产生一个单个的输出传输。

如果扩展与合并操作混合进行,那么扩展操作可能会是一个更复杂的过程,因为在传输的接收端,扩展器不能始终判断下一个传输是否在一个相同的包中。

扩展的规则如下:
①输出流中的字节顺序必须与输入流中的字节顺序相同

②TSTRB 必须以类似的方式被扩展到数据的宽度,以保证数据字节和位置字节之间正确的关系被保持

③TLAST 必须被保持

④所有输出事物的 TID 和 TDEST 必须与输入事物的相同

⑤TUSER 信息必须与相同的字节保持关联
 

2.5限定字符

2.5.1TKEEP限定字符

TKEEP:来表示该byte的数据是否必须传输到目的地;

TKEEP为高代表他必须被传输到目的地,为低代表是可以被移除的NULL byte。

2.5.1TSTRB限定字符

TSTRB:来表示该byte数据是数据字节还是位置字节;

TSTRB为高代表是一个数据字节,TSTRB为低代表是一个位置字节。

2.6包边界 

包是通过接口传输的一组字节。通过处理组合成包的传输,可以使得基础组件更有效率。AXI4-stream packet类似于 AXI4-burst。在一个包传输过程中需要考虑的信号有TID 、 TDEST 以及 TLAST 。关于 TID 和 TDEST 的更多信息请参考源设备和目标设备信号 。

TLAST的使用如下:

①当取消断言时, TLAST 表示接下来可以进行另一个传输,因此当前传输可以被延迟,以进行扩展、缩小或合并操作

②当被断言时, TLAST 可以被一个目标设备用来表示包的边界

③当被断言时, TLAST 表示在一个共享链路上进行仲裁改变的有效点

2.7源和目标信号

与源设备和目标设备关联的信号有:

TID        提供了一个流标识符,可被用来区分通过相同接口传输的多流数据。

TDEST 提供了用于数据流的粗放的路由信息。

2.8时钟和复位信号

2.8.1 时钟

每个组件都使用一个单一的时钟信号ACLK 。所有输入信号都在 ACLK 的上升沿上采样。所有输出信号必须在 ACLK 上升沿之后发生改变。

2.8.2 复位

协议包含一个单一的低有效的复位信号ARESETn 。复位信号可以被异步断言,但取消断言必须是在 ACLK 上升沿之后、同步的。在复位期间,TVALID 必须被驱动为低。

2.9 用户信号

当m=2 n=3时,它意味着每个数据字节有2个用户信号与他相关,接口总宽度为2,用户bits为6,x=0-5

所以字节x=5的用户信号为TUSER[(5*2)+(2-1):(5*2)];

x=4的用户信号为TUSER[(4*2)+(2-1):(4*2)]

对于TUSER的扩展或者压缩补0法

2.9.1决定用户信号的宽度

决定TUSER 的宽度对于一个具有若干个主机接口和从机接口的互联,互联必须支持的每字节TUSER bit 数定义为:

MIN(MAX[ 主机每字节 TUSER 位数), MAX[ 从机每字节 TUSER 位数])

在实际中:

1. 找出 TDATA 的每字节 TUSER bit 数最大的主机
2. 找出 TDATA 的每字节 TUSER bit 数最大的从机
3. 使用以上两个值中的最小值,即为互联必须支持的每 TDATA 字节 TUSER bit 数

### AXI-Stream 协议使用场景 AXI-Stream 是 ARM AMBA (Advanced Microcontroller Bus Architecture) 协议的部分,主要用于高效传输大量数据,特别是在视频和高速数据流的应用中表现出色[^3]。这种协议特别适用于需要高带宽、低延迟的数据传输场合。 具体应用场景包括但不限于: - **图像处理**:在摄像头传感器到图像处理器之间的数据传输。 - **音频/视频编解码**:实时多媒体数据流的传递。 - **网络通信**:千兆以太网或其他高速网络接口卡内部的数据交换。 - **存储子系统**:SSD 控制器内部分区间的大批量数据搬运操作。 这些领域通常涉及连续不断的海量信息流动,在此背景下采用 AXI-Stream 可显著提升系统的性能表现。 ### 实现方式概述 为了有效利用 AXI-Stream 进行开发工作,开发者需关注以下几个方面: #### 设计准备阶段 1. 明确需求分析,确定所需支持的最大吞吐量及最小延时指标; 2. 选择合适的 FPGA 或 ASIC 平台作为硬件载体; 3. 根据实际任务规划好发送端(TX)/接收端(RX) 的逻辑架构; #### 接口配置与编程模型 AXI-Stream 定义了套简洁明了的手握握手机制(tHandshake),通过 TVALID 和 TREADY 两个信号完成双方状态同步确认流程[^4]。除此之外还有其他辅助性的控制位如 TLAST 来指示当前包结束位置等特性。 ```verilog // Verilog code snippet showing basic handshake mechanism module axi_stream_example ( input wire clk, input wire rst_n, output reg tvalid, // Data is valid when asserted input wire tready, // Receiver can accept data now ... ); always @(posedge clk or negedge rst_n) begin : proc_tvalid if (!rst_n) tvalid <= 0; else if(/* condition to send */ && !tvalid) tvalid <= 1'b1; // Asserting the signal means ready to transmit end assign /* some logic here */ = tready & tvalid; endmodule ``` #### 应用实例 - 数据FIFO集成 考虑到不同速率组件间的互连互通问题,常常会引入 FIFO 缓冲技术来缓解压力。对于基于 AXI-Stream 架构而言,则可选用专用 IP Core 如 Xilinx 提供的 `AXI4 Stream Data FIFO` ,该元件允许灵活调整深度大小,并提供多种模式选项满足多样化的工程实践要求[^2]。 ```python def configure_axi_fifo(fifo_instance): fifo_instance.set_property('DATA_WIDTH', 64) # Set width of each word fifo_instance.set_property('DEPTH', 1024) # Configure depth as required fifo_instance.set_property('ALMOST_FULL_OFFSET', 960) # Define threshold for almost full status fifo_instance.generate() # Apply settings and generate HDL files ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值