fifo

233 阅读2分钟

同步fifo

双端口ram -----full和empty信号的产生

异步fifo

1 双口ram

2 控制地址自增

3 二进制码转格雷码

4 格雷码跨时钟域

5 对同步后的格雷码转二进制码

6 full和empty的产生

异步fifo格雷码

格雷码每两个相邻码字之间只有1bit的变化,将多bit的地址抓换成格雷码。然后进行跨时钟域的传递, 就可以直接使用两级寄存器 进行同步。由于只有1bit的变化,即使采样错误也只有一种错误的可能,最多也就是保持原来的状态,不会出现其他不稳定的状态,

由于异步fifo的读指针和写指针分别属于不同的时钟域,这样指针在进行同步的过程中容易出错,采用格雷码,相邻每位只有一位发生变化,这样在进行指针同步时候,就会产生同步正确。 即使同步出错,出错的结果也是写指针的跳变不变。

对于读空判断,最多导致fifo在不是真空的时候产生,而不会出现读空。 格雷码保证即使读写指针同步后出错,也不影响fifo功能的正确性。

格雷码同步

异步FIFO通过比较读写地址进行满空判断,但是读写地址属于不同的时钟域,所以在比较之前需要先将读写地址进行同步处理,

将写地址同步到读时钟域再和读地址比较进行FIFO空状态判断(同步后的写地址一定是小于或者等于当前的写地址,所以此时判断FIFO为空不一定是真空,这样更保守)。

将读地址同步到写时钟域再和写地址比较进行FIFO满状态判断(同步后的读地址一定是小于或者等于当前的读地址,所以此时判断FIFO为满不一定是真满,这样更保守),这样可以保证FIFO的特性:FIFO空之后不能继续读取,FIFO满之后不能继续写入。\