Altera FIFO IP核时序说明
ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO)。FIFO主要应用在需要数据缓冲且数据符合先进先出规律的同步或异步场合。LPM中的FIFO包含以下几种:
1.SCFIFO:单时钟FIFO;
2.DCFIFO:双时钟FIFO,数据输入和输出的宽度相同;
3.DCFIFO_MIXED_WIDTHS:双时钟FIFO,输入输出数据位宽可以不同。
配置不细说,直接看时序来理解。
1. 同步FIFO验证时序

IP核设置说明:
开辟空间8bits*8words;almost_full设置为“6”;almost_empty设置为“2”;采用普通同步FIFO模式(the data becomes available before “rdreq” is asserted)。
引脚说明:
- aclr和sclr:
aclr为异步清零,不管何时,只要出现上升沿,立刻清除q中数据,q<=8’bx。emtpy为1;full为0;almost_empty为1(根据参数判断);almost_full为0。
sclr为同步清零,只有sclr在clock上升沿时为“1”才能执行清除,效果同aclr。 - wrreq和rdreq:读写使能,高电平有效,clock上升沿执行读、写操作。
- full:当写入数据量达到最大空间时,clock上升沿写入最后一个数据同时full拉高;读取数据时随clock上升沿触发同时拉低。
- empty:与full相反。写入数据同时拉低;读到最后一个数据同时拉高。
- almost_full:当usedw的数值≥almost_full参数设置值almost_full_value时为1,其余时刻保持0(不管是读操作还是写操作,只与数值比较有关)。
- almost_empty:当usedw的数<almost_empty参数设置值almost_empty_value时为1,其余时刻保持0(不管是读操作还是写操作,只与数值比较有关)。
- usedw:显示当前FIFO中已存数据个数,与写入数据的个数是同步的,即写第一个数据时就置1,空或满时值为0(满是因为寄存器溢出)。
2. 异步FIFO验证时序

从时序图上说明DCFIFO的工作情况,虽然网上也有相关的时序图,但是写得不是很清晰。
建立一个位宽为8位,深度为4的DCFIFO。wr_clk与系统时钟同频,但是相移180°(反向)。rd_clk = 2*wr_clk。先写满,再读空的方式验证。从时序图上看,感觉DCFIFO内部存在两个存储空间,接下来解释。
T1时刻,写使能wr置高。
T2时刻,第一个wr_clk上升沿到来,第一个数据8’h01写入到FIFO中,此时wr_empty立即拉低,表明此刻FIFO不为空(写部分)。wr_usedw此时还是为0,与单时钟FIFO(SCFIFO)不同的是,SCFIFO第一个数据写入的时候,usedw会为1,说明wr_usedw有1个时钟周期的滞后(user guide里面说wrreq to wrusedw会滞后2个wr_clk,不太明白这与写入数据有什么之间的联系)。写满时usedw溢出后变为0。
T3时刻,rd_empty也被拉低,这就有点像“写”部分的存储空间的数据copy到了“读”部分的存储空间,而延迟时间正好就是T2与T3之间的时间间隔。随即rdusedw开始从0递增,但是递增周期感觉是以wr_clk为基准。
T4时刻,最后一个数据8’h04写入FIFO,wr_full被拉高,表明FIFO(写入部分)已经满了。wr_usedw计数为3。随后结束写使能,即wr拉低。
T5时刻,“写”部分的存储空间的数据全部copy至“读”部分的存储空间,此时rd_full也就被拉高了。
T6时刻,读使能信号拉高,即rd信号拉高。
T7时刻,读时钟信号rd_clk的第一个有效上升沿到来,读出第一个数据8’h01。此时“读”存储空间的满信号rd_full被拉低,表明“读”空间不满。
T8时刻,“写”存储空间的满信号wr_full才被拉低,表明与“读”存储空间之间有延迟。
T9时刻,最后一个数据8’h04被读出,此时“读”存储空间的空信号rd_empty立即被拉高,表明已经空了。rdusedw滞后1个rd_clk减为0。
T10时刻,在“读”存储空间已经空了之后,经过一定时间的延迟,“写”存储空间才知道FIFO已空。注意在T10时刻前后,可能存在wrusedw的不稳定,在wr_empty重新拉高一个周期之后,wrusedw才重新置零。
经过上述时序的“直译”,发现DCFIFO的读和写像是两个独立的内部存储空间,存在一个“copy”或者握手的过程,所以导致双方的空、满信号存在一定的延迟。这就需要考虑,在实际项目中要用到DCFIFO时,采用什么信号来判断,此刻FIFO能否安全的读写(也可以将almost相关的信号添加进来)。DCFIFO的优势在于写端和读端时钟不一样,安全的边写边读,但是得注意读写时钟频率差异,以便控制FIFO深度以及相应的控制信号。
rd_clk = 2*wr_clk,不写满,读空

rd_clk = 3*wr_clk时

3、遇到问题
在实际设计中,有个模块控制FIFO写入数据A,假设全局时钟global_clk以时序逻辑的方式驱动FIFO的写使能(fifo_wr)和写数据(data),而FIFO的时钟信号就直接赋上global_clk,那么就会得到如图1所示的时序图。
写使能和数据都在global_clk上升沿发生变化。

那么问题就来了,按道理说,FIFO写入数据是在wr拉高前提下,在fifo_clk上升沿写入数据。那么是不是这样设计就不满足数据的保持时间?
换一种设计,FIFO的写使能(fifo_wr)和写数据(data)依然基于global_clk的时序逻辑,但是fifo_clk相对于global_clk有个相移,比如说反相。那么就得到了图2的时序图,这样就满足设计需求了吗?

我想请问的是,一般工程设计,怎样设计FIFO的时序(主要是时钟吧)是怎样的呢?
Altera FIFO IP核时序说明的更多相关文章
- FIFO IP核
转载: 说白了,IP核就是别人做好了的硬件模块,提供完整的用户接口和说明文档,更复杂的还有示例工程,你只要能用好这个IP核,设计已经完成一半了.说起来容易,从冗长的英文文档和网上各个非标准教程中汲取所 ...
- FIFO IP核仿真
FIFO IP核仿真 1.FIFO IP核配置 2.FIFO测试逻辑代码 首先往FIFO里面写入512个数据(FIFO深度的一半),然后再开始同时往FIFO里面写入,读出数据.FIFO读和写的时钟域不 ...
- Altera DDR2 IP核学习总结3-----------DDR2 IP核的使用
根据上一篇生成的IP核,例化之后如上图,Local开头的数据是用户侧数据,其他数据暂时不用纠结,不用管. 这些是需要关注的信号,但是初学阶段很难对这些信号形成具体的概念,这里参考明德扬的代码进行二次封 ...
- FPGA基础学习(2) -- FIFO IP核(Quartus)
ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).FIFO主要应用在需要数据 ...
- altera DDR2 IP核之仿真
在生成的IP核文件夹下,有一个testbench文件夹,里面包含了一个example测试激励和DDR2仿真模型. 如下 20 -rw-r--r-- 1 Administrator 197121 171 ...
- 如何使用和了解ALTERA的IP核
可以通过直接对IP核进行仿真验证,通过波形来分析IP核的功能和工作方式,以及各个寄存器之间的工作关系. 也可以通过查看用户指导手册来学习IP核,如下图.
- 关于ALTERA生成IP核卡住
最近搞fft,用的quartus13.1版本,发现quartus和modelism存在各种各样的坑啊,fftIP核大家可能也遇到过ip核 生成到一半就卡住的问题,之前我是通过换系统解决的,但是好景不长 ...
- Altera DDR2 IP核学习总结2-----------DDR2 IP核的生成
打开IP核工具,然后选择Verilog HDL选项,填写路径,写入文件名DDR2_IP.V,点击next PLL reference clock frequency填入板子晶振的频率50MHZ,这里设 ...
- ALTERA DDRII IP核使用
提到DDRII,大家应该都不陌生,DDRII SDRAM是第二代双倍速率同步动态RAM.今天小编给大家介绍一下QUARTUS II 下调用DDRII软核. 新建QUARTUSII工程之后,在tool下 ...
随机推荐
- cocos2dx - v2.3.3编辑器骨骼动画
接上一节内容:cocos2dx - v2.3.3编辑器简单使用及不同分辨率适配 本节主要Cocos骨骼动画的创建及使用 一.新建 用Cocos Studio工具新建一个状态栏项目.如下图: 当然也可以 ...
- visio流程图软件
microsoft visio 2013 64位 链接:http://pan.baidu.com/s/1bnjWa1T 密码:9ylc 标准图表 使用现有的数据,您可以生成许多种类的 Visio 标准 ...
- PE格式第九讲,资源表解析
PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...
- PLSQL Developer oracle导入导出表及数据
1.进入PLSQL Developer 2.创建新用户(如需要新表空间则需先创建新表空间再创建用户) 3.打开菜单Tools->Export User Objects 导出表及视图等创建SQL ...
- 【转】C语言中动态分配数组
原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html 如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老 ...
- emacs 配置
个人的Emacs配置,环境是archlinux,参考了不少网上资料,因为太多,就不一一列举了,在这里感谢那些作者的辛苦经验劳动. (custom-set-variables ;; custom-set ...
- 脱壳第二讲,手动脱壳PECompact 2.x
脱壳第二讲,手动脱壳PECompact 2.x PS: 此博客涉及到PE格式.所以观看此博客你要熟悉PE格式 首先,逆向inc2l这个工具,汇编中可能会用的 inc头文件转换为lib的工具 但是他有壳 ...
- 【20171028早】ubuntu 16.04 LTS 安装php遇到的问题
背景: 10月28日的一个早上,老黑一如往常地练习,我测试不破坏,当时我找到sqli-libs 游戏,可是我没有立即开始,于是,奇妙的事情就由php开始了.ubuntu16.04安装相关环境 apac ...
- Leetcode题解(十四)
39.Combination Sum 题目 题目要求找出和为target的数字组合,并且每个整数可以多次使用.仔细思考可以发现,这道题目可以采用递归的方法来完成,比如举的例子,target=7,一开始 ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest H. Delete Them
H. Delete Them time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...