aikimi7 发表于 2013-5-21 15:55:29

ALTERA的FIFO IP核使用遇到的问题求助


设计中涉及不同时钟域,采用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的情况,因而我在上面的自己测试模块用了上述方法。。。

wangjun403 发表于 2013-5-21 17:57:52

FIFO必然是可以同时读写的,不然就没有意义了

Freezing_ 发表于 2013-5-21 19:45:26

是的,可以边读边写,官方手册有介绍

aikimi7 发表于 2013-5-21 20:37:20

Freezing_ 发表于 2013-5-21 19:45 static/image/common/back.gif
是的,可以边读边写,官方手册有介绍

那向我这样最高位最为半满标志位有无问题呢,半满之后基本是满的状态。。我写少量数据可行,如果大量数据的话我怀疑是不是这个半满标志的问题

aikimi7 发表于 2013-5-21 20:38:38

wangjun403 发表于 2013-5-21 17:57 static/image/common/back.gif
FIFO必然是可以同时读写的,不然就没有意义了

你说的对,我现在出现了问题,所以想知道是不是我半满的这个问题。。。因为我写大量数据后续SRAM读出有问题,我看是不是FIFO的原因

huatong 发表于 2013-5-25 15:08:23

你本身的思路有问题,数据釆集不是这样的,你这种釆集方法不知道数据中哪部分数据丢失了。

aikimi7 发表于 2013-5-25 21:13:49

huatong 发表于 2013-5-25 15:08 static/image/common/back.gif
你本身的思路有问题,数据釆集不是这样的,你这种釆集方法不知道数据中哪部分数据丢失了。 ...

首先感谢你的解答。。我这个采集思路也是自己想的,现在我把读信号使能一直拉高,通过时钟二分频实现读取FIFO值。。。读SRAM的时序也有改了下,发现可以实现,但是数据保持时间太短。。。
有个小问题想问你,就是同一地址我读SRAM两次,那么第二次读出来的数据还是上一次的数据吗?
此外,请根据我的描述能给一个采集数据的思路吗?谢谢!~

huatong 发表于 2013-5-26 00:17:54

你的FIFO时钟是50M,数据是8位,一般的SRAM都是16位的,你可以从FIFO中读出2次后再合并一个16位数据写入到SRAM中,那样相当于提速一倍,不用考虑溢出了。

aikimi7 发表于 2013-5-26 14:50:16

huatong 发表于 2013-5-26 00:17 static/image/common/back.gif
你的FIFO时钟是50M,数据是8位,一般的SRAM都是16位的,你可以从FIFO中读出2次后再合并一个16位数据写入到S ...

非常感谢!~FIFO正好有不同位数输出的,再次表示感谢!
还有个问题的话,在我这个测试模块中,这样处理后,读写FIFO正好都是50M就避免了读空和写满的状况。。。
那如果是写满或者读空的情况下,使用FIFO有什么好建议吗?谢谢!~使用rdempty和wrfull推荐嘛?
页: [1]
查看完整版本: ALTERA的FIFO IP核使用遇到的问题求助