这篇文章的起因是想用FIFO去解决异步时钟源的问题。因为想用Spartan-6去从图像传感器采集图像,所以想直接用pclk做为FIFO的写时钟,传感器的行同步信号HS作为FIFO写是能输入,这样可以省去好多coding的工作。然而,事情往往不会那么顺利,我发现pclk的时钟是只有在有数据的时候才会从传感器输出,当传感器不输出数据时,pclk也就不会跳动了。具体时序可参考仿真图的wr_clk.
Xilinx自带仿真器,仿真结果截图:
FIFO复位后,经过两个wr_clk,Full 和almost_full信号才会复位,
![](https://i-blog.csdnimg.cn/blog_migrate/bd058eca0fbbcd7ec5a114a733c05383.png)
当初始不去reset时,会丢失第一个数据
![](https://i-blog.csdnimg.cn/blog_migrate/0cbabcf64aa77b8e3c796739c80a94ef.png)
下图为设置了Reset, 丢失了数据1,2,3
![](https://i-blog.csdnimg.cn/blog_migrate/e68120f8a85bf79fa22a94ffc1a63514.png)
从仿真结果看,这个写入过程,需要wr_clk比实际数据数要多1或跟多,不然,最后一个数据时写进不到FIFO里面的。
从下图可以发现,实际写入的最后一个数为150