同步FIFO
fifo是 first input first output 的缩写,即先进先出队列,fifo一般用作不同时钟域的缓冲器。fifo根据读和写的时钟是否为同一时钟分为同步fifo和异步fifo。异步fifo相比同步fifo来说,设计更加复杂一点。本文中先讲同步fifo的一种设计方法。下图是同步fifo的结构图:
设计fifo的时候一般需要考虑的有两点:
1.fifo的大小
fifo的大小指就是双端口ram的大小,这个可以根据设计需要来设置。
2.fifo空满状态的判断
fifo空满状态的判断通常有两种方法。
a、fifo中的ram一般是双端口ram,所以有独立的读写地址。因此可以一种是设置读,写指针,写指针指向下一个要写入数据的地址,读指针指向下一个要读的地址,最后通过比较读指针和写指针的大小来确定空满状态。
b、设置一个计数器,当写使能有效的时候计数器加一;当读使能有效的时候,计数器减一,将计数器与ram的size进行比较来判断fifo的空满状态。这种方法设计比较简单,但是需要的额外的计数器,就会产生额外的资源,而且当fifo比较大时,会降低fifo最终可以达到的速度。
格雷码:
inc可以理解为读写使能,和非满非空决定,读写地址是否继续加一,(bin到bnext就是二进制地址加一),使用了两个触发器,一个时二进制寄存,用于下一次地址加一,一个是给格雷码寄存,防止毛刺