学习笔记20151211——AXI4 STREAM DATA FIFO
AXI4 STREAM DATA FIFO是输入输出接口均为AXIS接口的数据缓存器,和其他fifo一样是先进先出形式。可以在跨时钟域的应用中用于数据缓冲,避免亚稳态出现。支持数据的分割和数据拼接。在使用该IP核之前,我们应该熟悉该IP核的各种参数设定的含义。
上图则是该IP核的参数设定界面(开发环境为VIVADO2015.1),点击左上角的Documentation,下拉框中选择Product Guide,打开该IP核的说明文档。
链接如下:
http://www.xilinx.com/support/documentation/ip_documentation/axis_infrastructure_ip_suite/v1_1/pg085-axi4stream-infrastructure.pdf
Component Name:
元件名字:该IP核生成后的模块名;
FIFO Depth:
FIFO深度:该设定为指定例化FIFO的深度。当FIFO的深度为16或者32时利用基于FIFO的LUTRAM,其他深度的FIFO将利用BLOCK RAM实现。
Enable Packet Mode:
使能包模式:设置为Yes将使能包模式。此项设定需要TLAST信号被使能。FIFO的操作在包模式下被修改为存储传送的数据,知道TLAST信号被断言(响应)。当TLAST信号被响应或者FIFO满了,存储的传送数据将被送至AXI4-Stream master interface。
Asynchronous Clocks:
异步时钟:如果设定了Yes,S_AXIS_ACLK和M_AXIS_ACLK被设定为与彼此异步,该IP将在异步模式进行操作。
Synchronization Stages across Cross Clock Domain Logic:
跨交叉时钟域逻辑的同步阶段:
当S_AXIS_ACLK和M_AXIS_ACLK是与彼此异步的,此项参数指定了用于跨时钟域逻辑的同步阶段的阶数。增加这个值可以增加设计的MTBF,但是会增加延迟时间和逻辑利用。参考the FIFO Generator Product Guide(PG075)获得该参数的更多信息。
ACLKEN Conversion Mode
ACLKEN转换模式:
这个下拉选项为ACLKEN信号的转换模式。当ACLKEN转换执行时会消耗额外的延迟和逻辑。这个选项有:
None - 这里没有ACLKEN信号关联于IP。
S AXIS Only - 一个S_AXIS_ACLKEN信号关联到S_AXIS_ACLK时钟信号和没M_AXIS_ACLKEN信号。
M AXIS Only - 一个M_AXIS_ACLKEN信号关联到M_AXIS_ACLK时钟信号和没有S_AXIS_ACLKEN信号。
S AXIS & M AXIS - 两边时钟都有 ACLKEN信号关联到他们。
Signal Properties:
信号特性:
当使用IP集成器是,Vivado IDE会自动计算这些参数的值。
TDATA Width(bytes):
TDATA位宽(字节为最小单位):
该参数指定了所有AXI4-Stream interfaces中的TDATA信号的位宽,以字节为最小单位。该参数为整数,在0到512之间。设为0将省略TDATA信号。如果TDATA信号被省略,TKEEP和TSTRB信号也会被省略。接口数据的位宽按bits计算,需要乘以8。
Enable TSTRB
使能TSTRB信号
如果设定为Yes,这个参数指定是否在所有AXI4-Stream interfaces使用可选的TSTRB信号。这个选项只能在TDATA Width(bytes)参数大于0时才可以使能。
Enable TKEEP
使能TKEEP信号
如果设定为Yes,这个参数指定是否在所有AXI4-Stream interfaces使用可选的TKEEP信号。这个选项只能在TDATA Width(bytes)参数大于0时才可以使能。
Enable TLAST:
使能TLAST:
如果设定为Yes,这个参数指定是否在所有AXI4-Stream interfaces使用可选的TLAST信号。对于TLAST信号要重点说明,因为在使用STREAM FIFO时TLAST的作用特别的重要。对于STREAM FIFO来说,TLAST信号的作用是指示一次传输数据流的最后一个数据,也指示着该数据流的结束。其会记录下TLAST信号的位置,及当其SLAVE接口(SFIFO的数据写入接口)的某一个数据写入的同时TLASET信号也为高的话,当MASTER接口(SFIFO的数据读出接口)读出该数据的同时也会将TLAST信号拉高。总结起来就是,进的数据有TLAST,该数据出的时候就会有TLAST。
TID Width(bits):
TID位宽(比特为单位):
如果该参数大于0,这个参数指定是否在所有的AXI4-Stream interfaces中使用TID信号。值大于0省略这个信号。
TDEST Width(bits):
TDEST位宽(bits):
如果该参数大于0,这个参数指定是否在所有的AXI4-Stream interfaces中使用TDEST信号。值大于0省略这个信号。
TUSER Width(bits):
TUSER 位宽(bits):
如果该参数大于0,这个参数指定是否在所有的AXI4-Stream interfaces中使用TDEST信号。值大于0省略这个信号。
这里重点说下Synchronization Stages across Cross Clock Domain Logic,这个参数的出现是由于在进行跨时钟域操作时,即FIFO的读写时钟异步时,在读时钟域与写时钟域进行数据交互时可能会存在亚稳态,而通过在数据交换节点插入连续的寄存器进行时钟同步,而这个参数的数值就是插入的同步寄存器的个数,或者叫做阶数。阶数越高,MTBF(Mean Time Between Failures,平均无故障时间)越大,则出现亚稳态的几率越小,但是同时也会增加信号传输的延迟和增加额外的逻辑资源。
还有一个参数Packet Mode,当开启整包发送模式后,FIFO会一直检测当前接收数据量,只有当数据量到达FIFO的深度时,即FIFO满的时候(在实际测试中发现当STREAM FIFO满的时候不会输出TLAST信号),或者是FIFO的SLAVE接口接收到TLAST信号时,该FIFO的MASTER接口才可以输出有效数据,及才会允许后级模块接收FIFO内数据。
在使用STREAM FIFO的应用中只应用到了TDATA、TVALID、TREADY以及TLAST信号,所以接下来对STREAM FIFO的功能说明只要是针对只是用以上信号的条件下的。
STREAM FIFO的复位信号为低有效,当复位信号拉高后的第三个时钟上升沿s_axis_tready信号会自动拉高,该fifo处于等待接收数据状态。
当STREAM FIFO的前端有数据需要发送时,在s_axis_tready为高时拉高s_axis_tvalid信号,在下个时钟上升沿,STREAM FIFO便开始收数。
当STREAM FIFO内部的数据达到fifo的深度时,在接收进最后一个数据的同时,s_axis_tready将会变为低,告诉前级fifo已满,不能在收数据了。其实S_axis_tready信号相当于普通FIFO的full与empty信号的综合体。
对STREAM FIFO 的MASTER接口为FIFO的数据输出接口。当STREAM FIFO接收到数据并传到MASTER接口上时,m_axis_tvalid便会拉高,由于使用的STREAM FIFO为异步时钟模式,数据写入时钟比数据读出时钟要快,而读数据计数器的刷新是在读数据时钟的上升沿,所以可以从图中看到读数据计数器的值是跳跃上升的。当FIFO的后端将m_axis_tready拉高时,MASTER接口便会将数据送出去。
最后再来观测下TLAST信号:
为了说明TLAST信号的传输特点,我们在SLAVE的写入数据时在数据1023 和数据1024的时候将s_axis_tlast拉高。然后打开MASTER接口将STREAM FIFO内部的数据读出。
从MASTER接口的数据流可以看出,将数据1023和数据1024读出的同时也会将m_axis_tlast信号拉高。
最后说明一下STREAM FIFO的Packet mode包模式,开启包模式必须是采用同步时钟,而且TLAST信号必须使用。
在包模式下,数据将是以包的单位,而包内数据的数量由TVALID、TREADY和TLAST信号控制,TVALID信号和TREADY信号一起为包数据的开始,TLAST信号为包数据的结束。当STREAM FIFO里面没有收到一包的数据时,FIFO的MASTER接口将处于关闭状态,即m_axis_tvalid将一直保持为低。当STREAM FIFO内部数据有至少一包及以上的数据时,MASTER接口将开启,m_axis_tvalid将会拉高,当后级将存的包数据取完之后,MASTER接口又将关闭,m_axis_tvalid将拉低,直到接收到下一包数据之后才会重新打开。
转载:http://blog.csdn.net/qq_20748649/article/details/50265141
学习笔记20151211——AXI4 STREAM DATA FIFO的更多相关文章
- AXI4 STREAM DATA FIFO
参考:http://www.xilinx.com/support/documentation/ip_documentation/axis_infrastructure_ip_suite/v1_1/pg ...
- .NET MVC 学习笔记(五)— Data Validation
.NET MVC 学习笔记(五)—— Data Validation 在实际应用中,我们需要对数据进行增查改删业务,在添加和修改过程中,无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...
- vue学习笔记之:为何data是一个方法
vue学习笔记之:为何data是一个方法 在vue开发中,我们可以发现,data中的属性值是在function中return出来的.可为何data必须是一个函数呢?我们先看官方的解释: 当一个组件被定 ...
- scala学习笔记:理解stream和view
先来个正常的: scala> (0 to 5).map((x:Int)=>{println(x);x*2}).foreach(println) 0 1 2 3 4 5 0 2 4 6 8 ...
- Haskell语言学习笔记(93)Data.Text
Data.Text.Read Prelude> :set -XOverloadedStrings Prelude> :m +Data.Text.Read Prelude Data.Text ...
- 学习笔记之Python for Data Analysis
Python for Data Analysis, 2nd Edition https://www.safaribooksonline.com/library/view/python-for-data ...
- 学习笔记之Introduction to Data Visualization with Python | DataCamp
Introduction to Data Visualization with Python | DataCamp https://www.datacamp.com/courses/introduct ...
- Haskell语言学习笔记(81)Data.Typeable
Data.Typeable 利用 Data.Typeable,可以打印动态类型信息. class Typeable (a :: k) where typeRep# :: TypeRep a typeR ...
- Haskell语言学习笔记(77)Data.HashSet
安装 unordered-containers $ cabal install unordered-containers Installed unordered-containers-0.2.9.0 ...
随机推荐
- Mysql varchar 把默认值设置为null和空的区别
'\0',这个表示空,需要消耗存储空间的.NULL,则表示连这个\0都没有. NULL,你可以近似理解为变量未赋值(定义了变量,但是未使用,变量不指向具体存储空间,因此,理论上不消耗存储空间),同时, ...
- Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制
Linux中的Buffer Cache和Page Cache echo 3 > /proc/sys/vm/drop_caches Slab内存管理机制 SLUB内存管理机制 http://w ...
- Spark ListenerBus 和 MetricsSystem 体系分析
转载自:https://yq.aliyun.com/articles/60196 摘要: Spark 事件体系的中枢是ListenerBus,由该类接受Event并且分发给各个Listener.Met ...
- samba安装测试
1.检查是否系统有自带的samba安装包 2.关闭防火墙 Iptables -F Systemctl disable firewalld Systemctl stop firewalld System ...
- C++中的RAII介绍 资源管理
摘要 RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全.简洁的状态管理,编写出优雅的异常安全的代码. 资源管理 RAII是C++的发明者Bjarne Stro ...
- Scrapy:学习笔记(1)——XPath
Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...
- 20155307 2016-2017-2 《Java程序设计》第8周学习总结
20155307 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 日志API:使用日志的起点是Logger类,要取得Logger类,必须使用Logger的静态 ...
- Java backup
待补充 ........ 0:常用头文件(待补充) import java.util.Arrays; import java.util.HashSet; import java.util.TreeSe ...
- linux_一些shell命令分析记录
一.用于shell脚本的界面命令交互 echo "请输入css-dist下载地址:" read addcss echo "开始下载css的zip包"( wget ...
- P1174 打砖块
P1174 打砖块 普通分组背包:50pts 题解说的啥????(大雾) 看了半天 $s[0/1][i][j]$表示第$i$列用$j$发子弹,最后一发是1/否0打在该列上的价值 $f[0/1][i][ ...