《本文摘自华为《FIFO经验谈》》
1 引言
先进先出缓存电路FIFO在大规模逻辑设计当中,得到普遍地使用。几乎每个芯片都会涉及到它。也就是说每个大规模逻辑设计者都必须掌握该种电路的设计方法。但在实际应用中。FIFO的类型又不尽相同。有的电路需要的是同步FIFO (即: 读写时钟为同一个时钟),有的需要异步FIFO 即 读写时钟的频率或相位不一样,有的电路对FIFO的速度要求不高,有的则需要高速FIFO 比如工作频率在100MHz以上,同时具体电路对FIFO的空满标志的产生也有一定的要求。有按一个深度进行读写的,也有连续读写一块的(Burst read/write ),有读写位宽一致的(256深80bit <==> 256深 80bit 也有读写位宽是倍数关系的 (256深 80bit<==>1024深 20bit)) 。异步FIFO的读写地址转变为格雷码再进行比较,产生空满标志,从而保证电路的可靠性。XILINX的Coregen软件可以生成一些通用的同步和异步 FIFO,如果它不能满足你的特定要求,只好你自己动手了!不管是什么类型的FIFO,其关键点是产生读、写地址和空、满标志。 好的FIFO设计的基本要求是:写满而不溢出,读空又不多读。2 同步FIFO的设计
同步FIFO的读写时钟为相同的一个,所以读写地址是同步的。通过判断FIFO中已经存在多少个没有被读走的数据Cnt_fifo ,来判断读空了,还是写满了。Cnt_fifo的产生:当FIFO进行读但不写时,自减1,当FIFO进行写但不读时,自增加1,如果FIFO又读又写或不