
异步FIFO概述
异步FIFO是用来在两个异步时钟域间传输数据。

其中fifo_full和fifo_empty分别是满标志和空标志,用于说明数据状态,当fifo_full时,不再进行数据的写入,当fifo_empty时不再进行数据的读取。
格雷码(gray code)的使用
在产生FIFO满信号时,要将写指针和读指针进行比较,由于两个指针分别在各自的时钟域,彼此之间是异步的,在使用二进制进行计数器实现指针时,就会导致用于比较的指针取样错误。
使用自然二进制码计数时,相邻数据之间可能会产生多bit的变化。这会产生较大的尖峰电流以及其他问题。
比如,二进制计数器的值会从FFF变为000。这时所有位会同时改变。虽然能通过同步计数器避免亚稳态,但是仍然能得到极不相关的取样值,所以同步计数器不是最终的解决方案。
从FFF 到000可能的转换:
- FFF→000
- FFF→001<
本文介绍了异步FIFO在跨时钟域数据传输中的作用,强调了使用格雷码避免指针比较错误。通过Verilog实现格雷码编码,讨论了基于格雷码的fifo空满判断,并提供了异步FIFO的仿真实例。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



