集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4603|回复: 7

关于异步FIFO的问题

[复制链接]
ANG 发表于 2010-6-28 00:03:54 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-7-6 05:28 编辑

关于异步FIFO的问题:
一般来说异步FIFO有两个独立的读写信号和时钟比如这些信号data,wren,wraddre

ss,rdaddress,wrclock,rdclock,q;data是输入数据,q是输出数据
对于异步FIFO来说,由于读写时钟(wrclock,rdclock)是不同时钟域,所以异步

FIFO控制器里面一般都要把他们同步,比如把rdaddress同步到写时钟(wrclock

)这边以计算FIFO是否被写满,把wraddress同步到读时钟(rdclock)以计算FIF

O是否被读空,而一般的同步的方法是对另一时钟域的信号进行两次采样,比如要

同步到写时钟这边,那么,可用写时钟(wrclock)对rdaddress进行两次采样。

现在的问题就是由于同步问题(对另一时钟域的信号采样两次)那么rdaddress将

会延迟两个写时钟才被使用(用于求FIFO是否已经写满或半空),然而如果在这

两个写时钟的时间里rdaddress已经变化了,那么可能会出现这种情况,其实现在

FIFO已经满了,但控制器还是要往里面塞数据,因为它是根据旧的rdaddress信号

作出反应?
大家讨论一下这个问题是如何解决的,谢谢
HANG 发表于 2010-6-28 01:14:08 | 显示全部楼层
异步FIFO的重点是及时的产生满空信号,也就是说在FIFO满甚至将满的时候一定要产生full信号(空同理 以下只针对满来说明),在写端口的wrclock域中,应该有专门的逻辑通过比较写指针wraddress和由读端口同步过来的读指针rdaddress产生full信号。写指针不需要同步,从而不会有延时,相反读指针由于同步过程会有延时。也就是说,在连读的情况下,同步之后的读指针并不是当前真正的读指针。形象一些解释,就是说如果现在已经读走了6个数据,而此时wrclk端经同步之后的读指针可能是读走4个数据时的读指针。但幸运的是,这并不影响full信号的及时产生,只会对full信号从有效变为无效的这一转变延迟。举个简单的例子,当FIFO满时,full信号有效,此后,如果wr信号一直无效(一直没有写),而rd信号从无效变为有效,并维持了一个rdclk(读走一个数据),此时,读指针随着数据的读出将发生变化,但更新之后的读指针要有一定的延时才能到达写端口,所以,在经过这段延时之后,写端口才能将满信号变为非满。不知道我解释得够不够清楚
UFP 发表于 2010-6-28 03:08:31 | 显示全部楼层
被同步的地址,在同步后可以加一个数字,比如2,然后在进行空满判断。<br>
也可以把fifo的门限设置的稍微小一点阿。<br>
比如在差2个的时候就判断快满,快空等
CCIE 发表于 2010-6-28 05:00:06 | 显示全部楼层
hao 很清楚了
CHAN 发表于 2010-6-28 05:44:04 | 显示全部楼层
楼上说的对,其实对异步FIFO来讲,主要就是full和empty信号的产生问题!对于full和empty的产生,一般都采用gray码!这方面的资料很多!
HANG 发表于 2010-6-28 05:58:10 | 显示全部楼层
精辟,不错,
longt 发表于 2010-6-28 06:42:00 | 显示全部楼层
嗯,确实不错
han840121 发表于 2011-4-18 14:42:02 | 显示全部楼层
初学,不太理解
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 03:20 , Processed in 0.065257 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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