同步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满之后不能继续写入。\