数据同步一般是指数据从不同时钟域之间传递的过程,是FPGA设计中的基础。数据同步中最常见的问题就是数据在同步过程中被改变,主要原因也就是异步时钟域之间的亚稳态问题(关于亚稳态的问题,网上有很多资料,这里不单独说明),那么在工程中如何有效的解决这个问题了?
数据同步一般有单bit同步和多bit同步2种场景,这2种场景的解决方案不太一样。
一、多bit数据的同步,该场景下的方案比较简单粗暴,就是采用异步FIFO来同步,如下图所示,数据要从50M的时钟域同步到125M的时钟域,只需要一个异步FIFO即可,通过50M的时钟域将数据写入,再由125M的时钟域将数据读出,即可实现同步。
![ff110ed8759426ed624d275a8ee1a6bd.png](https://i-blog.csdnimg.cn/blog_migrate/a092096430237784ddc927b50f185b70.jpeg)
异步FIFO时钟域同步
该方案在实际工程中,简单可靠。唯一需要注意的点就是:
(1)、写使能、写数据、满或者将满信号的处理都需要在写时钟域处理,比如上图中的50M时钟域处理;
(2)、读使能、读数据、空信号都需要在读时钟域处理,比如上图中的125M时钟域;
另外,多bit数据的同步也可以采用异步RAM的方式来同步,如果不需要考虑RAM中是否有数据,即仅仅作为表项的查询,那么使用RAM来同步也同样简单,如果需要考虑RAM中是否有数据,比如上图中的数据在