AXI4-Stream去掉了地址项,允许无限制的数据突发传输规模;
现总结一下axi_stream:
1) valid 和ready实现握手;
2) strb按照byte指定data中的哪个byte是地址信息或者数据信息;
3) keep按照byte指定data中的哪个byte是字节修饰符,哪个是有效的;
4) last用于声明最后一个,可有可没有
5) 不同于一般数据流的是,这stream可以将空白的字节进行两个包之间的合并,不同的传输stream之间可以通过tid区分,然后交叉传输;如果是相同id,没有last信号,那么他们可以合并;
6) 另外还有usr信号用于标记位置或者特殊数据项,提供辅助信息(奇偶性,控制信号),识别一个包的段
看起来很像spi i2c的那种,不过增加了交错,合并的功能。增加了信号线可以识别空白字符和地址位置的字符。
一、接口信号描述
信号 | 源 | 描述 |
ACLK | 时钟源 | 全局时钟信号。所有信号在ACLK信号上升沿采样。 |
ARESETn | 复位源 | 全局复位信号。ARESETn低电平有效。 |
TVALID | 主 | TVALID表示主设备正在驱动一个有效的传输。当TVALID和TREADY都置位时,发生一个传输。 |
TREADY | 从 | TREADY表示从设备在当前周期能够接收一次传输。 |
TDATA[(8n-1):0] | 主 | TDATA是基本的有效载荷,用来提供跨越接口的数据。数据为整数个字节。 |
TSTRB[(n-1):0] | 主 | TSTRB位字节修饰符。用来描述TDATA相关字节内容作为一个数字字节或者一个位置字节被处理。 |
TKEEP[(n-1):0] | 主 | TKEEP是字节修饰符。用来表明TDATA相关字节的内容是否作为数据流的一部分被处理。TKEEP字节修饰符未被确认的那些相关字节是空字节,可以从数据流中去除。 |
TLAST | 主 | TLAST表明了包的边界。 |
TID[(i-1):0] | 主 | TID是数据流的标识符,用来表明不同的数据流。 |
TDEST[(d-1):0] | 主 | TDEST为据流提供路由信息。 |
TUSER[(n-1):0] | 主 | TUSER是用户定义的边带信息,这它能伴随数据流进行发送。 |
二、握手机制
只有当VALID 和READY 同时为高时,才能进行传输。
VALID和READY信号的先后顺序有一下三种形式:
2.1 VALID早于READY信号
2.2 READY信号早于VALID信号
2.3 VALID 信号与 READY 信号同时
三、基本事务
AXI4-Stream跟AXI4的区别就是AXI4-Stream去除了地址线,这样就不涉及读写数据的概念了,只有简单的发送与接收说法,减少了延时。由于AXI4-Stream协议(amba4_axi4_stream_v1_0_protocol_spec.pdf)没有时序图,因此,我使用XILINX公司的产品指导手册(pg007_srio_gen2_v3_1.pdf)里的一个时序图来演示AXI4-Stream各个信号的关系。如下图所示:
上图中,tready信号一直处于高电平,表示从设备做好了接收数据准备。tvalid变为高电平的同时,tdata、tkeep、tuser也同时进行发送。在tdata最后一个字节数据时,tlast发送一个高电平脉冲。数据发送完成后,tvalid变为低电平。这样一次传输就完成了。