ANG 发表于 2010-6-28 00:03:54

关于异步FIFO的问题

本帖最后由 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]
查看完整版本: 关于异步FIFO的问题