前言fifo?还是fifo ip核?这也需要写总结吗?太容易了吧。如果我是一个正在处于面试找工作中的年轻人,肯定关注的是如何手撕fifo,这也是当时校招时候干过的事情。但是作为一个fpga工程师,我们更常使用的是fifo的ip核,或者必然使用的是fifo ip核,简单快捷优化。使用fifo ip核的时候,或者设计电路使用fifo ip的时候,对于新手或者不是精通的情况下,个人建议一点是对自己定制的fifo仿真一下(或者严格遵守数据手册),做到时序关系清晰后,再设计电路。注意:不要不屑于此!
下面讲解几点关于fifo ip核使用时的注意事项,想到哪里到哪里!
位宽转换分布式ram资源的fifo不能变换位宽
block ram资源可以变化位宽
builtin fifo资源不能变化位宽
fifo 安全电路fifo定制页面存在一个enable safety circuit,如下:
选择此选项,存在两个额外输出信号:
如果不选择enable safety circuit,则不存在这两个信号输出:
此选项仅仅针对基于bram资源的fifo定制,如果使用分布式ram资源,则不可选择:
同理builtin fifo资源的fifo也不可选择。
假如使用的是此block ram资源的fifo,选择此信号,有什么作用呢?多出来的两个信号是什么意思?有什么用途?笔者曾在仿真中犯过一个错误,就是在复位后的几个时钟直接给写使能,可是怎么写也写不进去数据,后来发现是wr_rst_busy处于高电平状态,自然是不能写的。所以判断写使能有效,可以将此信号作为判断条件之一,如果该信号为高,则不能写入。
这就引发一个疑问?既然存在这样一个问题,那么多久之后才能对fifo写入数据呢?那就要看复位无效之后多久这个信号才能被拉低,且仿真看看:
可见,大概20多个时钟周期之后,这个信号就拉低无效了。这样会不会对我们使用fifo有影响呢?可以想象下20多个时钟才多长时间,周期ns级别,况且写使能可以以此信号作为写使能有效条件,因此可以很容易规避这个问题,这里列出来的原因就是为了仿真时候,如果遇到了写不进去的情况时,考虑下这个问题,以免莫名其妙,百思不得其解。
xilinx对安全电路的使用还有一条建议,就是选择异步复位时,有可能导致bram数据的损坏,此时推荐使用安全电路。
对于异步fifo而言,好像也只能使用异步复位,这就更有必要性了。
fifo消耗资源定制fifo消耗资源与使用什么资源生成fifo有关,对于block ram资源的fifo使用的自然是block ram资源,7系列的用于生成fifo的block ram资源大小有两种,18kbit以及36kbit两种,一般默认bit,可以说是18k以及36k。
fifo位宽乘深度小于18k,自然是使用了一个18k的bram,如下:
使用block ram资源:
大于18k的自然是一个36kblock ram:
使用bram资源:
大于36k,情况多变,是18k以及36k的组合:
输出延迟read latency为1的含义使用分布式ram资源以及block ram资源的fifo可以选择输出寄存器打拍一次,这样自然read latency为2,使用builtin fifo资源无法选择输出寄存器打拍。
假如都不寄存器输出,即输出不寄存一拍,那么这里的read latency = 1具体是什么含义呢?我想时序图最能说明一切:
实际仿真看一下:fifo ip生成总结:
因此如果需要使用rd_data数据的话,需要对读使能延迟一拍,判断rd_en_r1有效时使用读数据的实际值:
read latency为2的含义知道了read latency为1的含义,为2的情况自然很容易理解,在添加了寄存器输出的时候,就会使得read latency为2,如下:
同样仿真实现下:
fifo 读写计数器的含义在fifo定制页面有如下选择:write data count,read data count这两个选择,是什么意思呢?
那我们写进去一个数据,看看两者数据的变化:
写计数器
从写计数有效开始,延迟一个时钟,计数器值更新为1,意思就是写入了一个数据;注意:我们在实际使用fifo输出参数之前,一定要仿真看下时序关系,以防用错。
我们尝试写入两个数据,来验证下这种关系:
关系一致。
读计数器读计数器的含义是fifo内部存放了多少数据?但这个数据的更新需要一定的时间,例如:
数据的更新需要至少4个读时钟周期,因此,这个数据我们不能写入之后立即使用;这个延迟是异步fifo内部跨时钟域的结果。
注意:使用fifo ip核内部输出信号的时候,保险起见,需要自己仿真下,认识下时序关系后再设计电路。
例如写入了两个数据,之后又读出了一个,那这个值最终一定是1;
仿真验证了这个结果。
上面说了这些情况,其实都在数据手册中有体现,但是对于一个fifo,大家都倾向于直接使用,不屑于看数据手册,不得不说,这都是年轻气盛的表现,或者天赋异禀。
因此,对于这种情况,我们有两个选择:一是看数据手册;二是自己仿真自己定制的ip核,看清时序后设计电路。
智能电池电量计如何有效改进动态血糖监视仪的电池使用寿命
雷军在微博公布了个好消息:创业9年,小米进入世界500强
基于单片机的DS1302实时时钟实验 实时时钟芯片DS1302的工作原理
基于555的眼睛疲劳消除器原理图
智慧家医优化协同模式助力社区医院分级诊疗
讲解几点关于FIFO IP核使用时的注意事项
关于以色列芯片的性能分析和应用
干式变压器的工程选型及应用知识
Android手机3D扫描、人脸识别技术 竟被立普思研发出来了
开学季!学生党手机的最佳搭配!续航蓝牙耳机推荐!
供应R&S罗德与施瓦茨UPV音频分析仪
石墨烯基超级快充电池是黑科技还是大忽悠?电池技术靠谱吗? 市场是否认可?
将FPGA应用到国家仪器公司(NI)的CompactRIO(一款可重新配置的嵌入式测控系统)系统会帮助国家实验室的研究人
冯军细描三年哥窑之梦:主题专卖店将开到巴黎香榭丽舍大街
工业机器人的粘合剂它能起到什么作用
大数据杀熟现象需加强算法应用遏制
【赋能IoT生态系列5之2】羽量级远程智控升级方案
“倒春寒”来临是下马威还是警醒?国产机器人什么时候才能迎来春天?
退耦电容为什么不一定要100nF
选择红外测温仪的重要参数有哪些