什么是FIFO?


什么是FIFO?

文章插图
 
什么是FIFO?FIFO一般用于不同时钟域之间的数据传输,也常用来实现不同位宽的接口的数据匹配 。
  1. “不同时钟域间传输数据”时,FIFO类似缓存,根据时钟A,向FIFO中写入数据,根据时钟B,读取FIFO数据 。

什么是FIFO?

文章插图
 
  1. “不同位宽传输数据”时,FIFO同样类似缓存,将FIFO接收配置为8位数据,输出配置为16位数据 。FIFO接收到的8位数组,按照高低组合为16位数据进行输出 。

什么是FIFO?

文章插图
 
配置FIFO的ip核参考:如何创建使用IP核-PPL?
在“菜单栏 - Tools - MegaWizard Plug-In Manage”创建“FIFO”核 。
什么是FIFO?

文章插图
 
  1. 位宽与时钟配置
    输入与输出均为8字节宽度,有256个字的缓存深度,输入与输出为不同时钟 。

什么是FIFO?

文章插图
 
  1. DCFIFO1(FIFO优化,平衡性能与资源消耗)

什么是FIFO?

文章插图
 
  1. DCFIFO2(控制标志信号)
    “full”:表示缓存满“empty”:表示缓存空“usedw”:可被读取的缓存容量

什么是FIFO?

文章插图
 
  1. 读请求模式、Blk类型

什么是FIFO?

文章插图
 
正常模式:数据正常被读取
什么是FIFO?

文章插图
 
前显模式:相比较正常模式前移一字节,导致处于读取状态下,实际读取的是第二个数据 。
什么是FIFO?

文章插图
 
  1. 电路保护等选项
    电路保护使用默认选项,不勾选即为开启电路保护 。资源使用默认选项,使用FIFO中自带的存储资源
  2. 仿真
    altera_mf文件,提供仿真功能 。

什么是FIFO?

文章插图
 
  1. summary总结界面
    勾选后,可生产对应的文件 。需要“fifo_inst.v”例化文件

什么是FIFO?

文章插图
 
  1. 例化
    在工程文件夹下“paripcore”中的“fifo_inst.v”为例化文件,可在顶层文件中使用此例化,替换传参即可 。

什么是FIFO?

文章插图
 
移植到顶层文件中
什么是FIFO?

文章插图
 
工程配置工程框架:
通过写模块,向FIFO中写入数据;
通过读模块,从FIFO中获取数据;
什么是FIFO?

文章插图
 
  1. 顶层文件
    分别例化fifo的ip核、读模块、写模块

什么是FIFO?

文章插图
 
  1. 读模块
    通过状态机形式,默认处于“等待读取”状态,先检查是否存在读满信号,存在则进入“允许读取”状态;在“允许读取”状态下,判断是否存在读空信号,若存在读空信号,进入“等待读取”,若不存在读空信号,持续读取 。

什么是FIFO?

文章插图
 
  1. 写模块
    同样通过状态机的形式进行 。默认“等待写空”

什么是FIFO?

文章插图
 
  1. 验证
    编译后,通过“SignalTap”进行验证 。


    推荐阅读