设计中涉及不同时钟域,采用ALTERA的异步FIFO IP核作为数据缓冲。。现在作为测试的话,FIFO写的时钟为系统主时钟clk,FIFO读的时钟也为clk。。
一开始往FIFO写数据,同时检测到rdempty为0,开始读FIFO。如果等到半满时(使用wrsuedw的最高位作为标志位)停止写,等到FIFO读出标志位不为1时再写。。这样的话是读写同时进行的。。。另外读FIFO的读使能信号周期性高低变化,周期为clk的一半,写使能不半满的情况下一直有效,所以写的速度是读的两倍。。我的疑问是我这样处理边读边写有没有问题,会有数据丢失吗?还是先写FIFO到一定容量再读然后再写,保证读写使能不同时有效。。。请大家解答一下。。。还有FIFO使用的注意事项。。。
另,我要实现的功能是从27M的时钟域采集数据到50M的时钟域从FIFO读出的数据要写到外部SRAM里面,读FIFO的使能信号由写SRAM产生,写使能的周期是25M,所以会出现写满FIFO的情况,因而我在上面的自己测试模块用了上述方法。。。
|