FIFO读数据异常分析

FIFO是FPGA设计中最常用的IP,读写时序相对简单,可能正是因为这个原因,通常不会去细读FIFO手册,具体怎么操作大概清楚,上手就写,一般不会出什么问题。最近却遇到读FIFO异常的情况,特意记录一下,顺便细读了一下PG057。

FIFO读操作异常

数据写入FIFO后,读取数据,没有输出。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vliWRQkZ-1652091842675)(./pic/2.png)]

FIFO 读时序

下图是pg057读时序图,在文档中读到这样一句话:

shows a standard read access. When you write at least one word into the FIFO,
empty is deasserted — indicating that the data is available to be read。

当FIFO中的empyt信号为0时,才可以读FIFO。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xBFL3do-1652091842677)(./pic/1.png)]

为什么原来不出这种错误呢

仔细观察抓到的时序图发现,从写使能有效到empty由高变低经历了几个时钟周期,之前使用FIFO时,empty应该是在写使能下一个周期就置低了。差异就在于以前FIFO读写都是8bit数据,这次是64bit数据。应该是输入位宽导致empty的变化。

读写位宽不同时

FIFO输入为64bit,输出为32bit。

当向FIFO写入64‘h090a0b0c0d0e0f10时,从输出端先读出32’h090a0b0c,后读出32‘h0d0e0f10。

使用valid信号

valid不是必须使用信号,但该信号指示读出数据有效状态,非常有用。

First-Word Fall-Through与Show-ahead

在读使能信号有效之前,FIFO输出数据,这个功能在Xilinx叫First-Word Fall-Through,Intel叫Show-ahead。功能类似,在使用First-Word Fall-Through时,valid信号不再能准确只是输出有效。在有效情况下使用First-Word Fall-Through会更方便,但我有时更愿意麻烦点,使用标准FIFO,因为遇到做器件移植的情况,要移植的器件不支持这种模式,需要修改时序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Msf3uGge-1652091842679)(./pic/3.png)]

Underflow 与Overflow

Underflow

Underflow用来指示读操作不成功,当FIFO为空时,进行读操作,该信号触发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5BM5TdF7-1652091842680)(./pic/5.png)]

Overflow

Overflow用来指示写操作不成功,当FIFO为满时,进行写操作,该信号触发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hizT4lNp-1652091842681)(./pic/4.png)]

FIFO实现

Intel FPGA的FIFO通常由两种资源实现,Block RAM和 Distributed RAM。Xilinx有如下四种资源实现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0X4qPGH0-1652091842681)(./pic/6.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬码农二毛哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值