|
发表于 2017-2-9 17:10:45
|
显示全部楼层
本帖最后由 lisely 于 2017-2-9 17:12 编辑
我做个简单的回复吧,理解有误,还请大家多多指教,谢谢。
问题如下:异步FIFO读时钟是写时钟的100倍,或者写是读的100倍会出现什么问题?
答: 如果是前者,从快的时钟域读取慢的时钟域,可能会产生fifo空情况(如果两个端口连续进行数据传输,就会有空;如果写端口写到一定数据,再由读端口读,也可能不会产生空),不会产生fifo满的情况,需要注意根据fifo空标志来设计读取控制逻辑;
如果是后者,从慢的时钟域读取快的时钟域,可能会产生fifo满情况(同上),不会产生fifo空的情况,需要注意根据fifo的满标志来设计写入控制逻辑.
非答案:(此部分用于解释不用关心fifo本身内部的设计机制,我认为考官主要是在考察怎么用fifo(可能产生的现象),而不是设计)
异步fifo设计时,关键的就是如何正确的产生空和满指示。这部分,是通过分别在各自的读写两个时钟域下,对比读地址和写地址的值来输出。由于地址需要跨时钟采样,无法保证在各自时钟域采样下满足建立保持时间,且亚稳态只会发生在地址的变化过程中,因此,使用格雷码计数,可以使得前后相邻地址的变化只存在1bit,最终使得地址采样到另一个时钟域下,最多只有1bit的错误,因此,满时的读地址值可能是n-2,n,n-1(当前写地址值),空时的写地址值可能是n-1,n(当前读地址值),n+1。 |
|