明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 149420|回复: 0

14 IP核(FIFO)编号:003200000075

[复制链接]
发表于 2019-9-26 19:11:19 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
14  IP核(FIFO)

本案例的编号为:003200000075,如果有疑问,请按编号在下面贴子查找答案:MDY案例交流【汇总贴】_FPGA-明德扬科教 (mdy-edu.com)
本文为明德扬原创及录用文章,转载请注明出处

本项目介绍FIFO IP核的使用过程及功能原理。FIFO是(First InputFirst Output)的缩写,即先入先出队列。FIFO可以说是FPGA里最常用的IP核之一,其功能主要有:

a.        数据的缓冲。如果数据的写入速率高,但间隔大,且会有突发;读出速率小,但相对均匀。则通过设置相应深度的FIFO,可以起到数据暂存的功能,且能够使后续处理流程平滑,避免前级突发时,后级来不及处理而丢弃数据。

b.        时钟域的隔离。对于不同时钟域的数据传递,则数据可以通过FIFO进行隔离,避免跨时钟域的数据传输带来的设计与约束上的复杂度。

c.        不同宽度的数据接口。例如单片机8位数据输出,而DSP是16位数据输入,在单片机和DSP连接时就可以使用FIFO来达到数据匹配的目的。

通过一个具体的事例来描述FIFO的功能:

当模块A要发送数据给模块B,其中模块A的工作时钟是100MHz,模块B的工作时钟是80MHz。若要直接将A数据送给B,由于时钟不同,B模块势必会丢失数据或多采集数据,解决这一问题的方案便是使用FIFO,示意图如下:



微信截图_20190908100049.png



由于FIFO内部可以做跨时钟域处理,读写时钟可以不同,因此非常适合解决这类问题。

模块C的功能如下:

1)模块内部包含一个FIFO,该FIFO数据位宽16bit,深度是64,有rdusedw、wrusedw、empty等指示信号。

2)输入数据data_in和data_in_vld都是在属于clk_in时钟域的,模块首先将数据写入到内部FIFO中,等待被模块B读取。

3)如果内部FIFO快满时(wrusedw>=61),仍然有数据要写入,为了防止FIFO溢出,丢弃该数据,不再写入FIFO。

4)Data_out、data_out_vld和b_rdy都是属于clk_out时钟域的。

5)B_rdy是模块B产生的接收数据准备好信号,当此信号为1时,表示模块B已经准备好接收数据,本模块可以将数据发给模块B。如果为0,表示未准备好,不能将数据送过来。

6)当b_rdy为1,且FIFO内有数据(rdempy==0)时,将数据送给模块B。

使用FIFO时要保证当FIFO已经处于满状态时,就不再往FIFO里写数据;当FIFO处于空状态时,不再读FIFO的数据。

FIFO IP核设计的产生过程在以下文档里有详细的说明。


以下是本工程基于点拨板的工程文件
基于点拨板工程文件.zip (5.1 KB, 下载次数: 55, 售价: 1 金币)
FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-22 19:09 , Processed in 0.053845 second(s), 25 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表