文章插图
什么是FIFO?FIFO一般用于不同时钟域之间的数据传输,也常用来实现不同位宽的接口的数据匹配 。
- “不同时钟域间传输数据”时,FIFO类似缓存,根据时钟A,向FIFO中写入数据,根据时钟B,读取FIFO数据 。
文章插图
- “不同位宽传输数据”时,FIFO同样类似缓存,将FIFO接收配置为8位数据,输出配置为16位数据 。FIFO接收到的8位数组,按照高低组合为16位数据进行输出 。
文章插图
配置FIFO的ip核参考:如何创建使用IP核-PPL?
在“菜单栏 - Tools - MegaWizard Plug-In Manage”创建“FIFO”核 。
文章插图
- 位宽与时钟配置
输入与输出均为8字节宽度,有256个字的缓存深度,输入与输出为不同时钟 。
文章插图
- DCFIFO1(FIFO优化,平衡性能与资源消耗)
文章插图
- DCFIFO2(控制标志信号)
“full”:表示缓存满“empty”:表示缓存空“usedw”:可被读取的缓存容量
文章插图
- 读请求模式、Blk类型
文章插图
正常模式:数据正常被读取
文章插图
前显模式:相比较正常模式前移一字节,导致处于读取状态下,实际读取的是第二个数据 。
文章插图
- 电路保护等选项
电路保护使用默认选项,不勾选即为开启电路保护 。资源使用默认选项,使用FIFO中自带的存储资源 - 仿真
altera_mf文件,提供仿真功能 。
文章插图
- summary总结界面
勾选后,可生产对应的文件 。需要“fifo_inst.v”例化文件
文章插图
- 例化
在工程文件夹下“paripcore”中的“fifo_inst.v”为例化文件,可在顶层文件中使用此例化,替换传参即可 。
文章插图
移植到顶层文件中
文章插图
工程配置工程框架:
通过写模块,向FIFO中写入数据;
通过读模块,从FIFO中获取数据;
文章插图
- 顶层文件
分别例化fifo的ip核、读模块、写模块
文章插图
- 读模块
通过状态机形式,默认处于“等待读取”状态,先检查是否存在读满信号,存在则进入“允许读取”状态;在“允许读取”状态下,判断是否存在读空信号,若存在读空信号,进入“等待读取”,若不存在读空信号,持续读取 。
文章插图
- 写模块
同样通过状态机的形式进行 。默认“等待写空”
文章插图
- 验证
编译后,通过“SignalTap”进行验证 。
推荐阅读
- 爬虫到底是什么?爬虫是否违法?简谈爬虫概念
- 喂~猜猜我是谁~
- 红茶水有什么功效作用,黄栀子配什么茶
- 养胃喝绿茶还是红茶,大红袍茶的功效与作用养胃
- 用工荒|又一岗位出现“用工荒”,月薪1.5万,为什么年轻人却不愿去做?
- 什么东西最伤胃呢
- 长期喝碳酸饮料有什么危害
- 咸香椿的做法是怎样的
- 药不能和什么在一起吃呢?
- 宫寒忌吃什么呢?