标题: FIFO写满时,产生的数据放在哪儿啊? [打印本页]
作者: 1001 时间: 2007-11-22 10:41 标题: FIFO写满时,产生的数据放在哪儿啊?
数据产生模块:实时产生数据
如果FIFO写满时,数据产生模块产生的数据怎么办?应该放哪啊?需要写个RAM吗?
FIFO中的数据是循环存储的吗?即是不是某个地址的数据被读出后,这个地址就变空了,可以继续向里写数据那?
具体的说,当FIFO中某个地址的数据被读出后,那么这个地址是不是可以再次被写入??
急啊!大侠救命啊!
[此贴子已经被作者于2007-11-22 10:43:19编辑过]
作者: vincent 时间: 2007-11-22 10:58
fifo的主要目的一般来讲有两个: 数据速率的适配; 时钟的适配.
fifo的容量有有限的, 而且一般来讲都比较小, 容量大的那是缓存/队列, 虽然缓存/队列也可以做成"先进先出"的形式, 但主要目的已经是缓存数据了.
fifo会输出full标志给写端口, empty标志给读端口, 前面的数据产生模块在full信号置位后就应该停止数据发送, 否则fifo会溢出, 数据会丢失, 如果不做这样的处理, 那你认为fifo的容量应该做几GB或TB才能绝对不溢出呢?
外面的模块不需要关心fifo内部的读写地址, 只需要根据full/empty进行正常的写/读操作就行, fifo内部要维护读写地址, 是循环往复的, 数据读出后, 这个地址单位就会被释放, 就可以再写一个新的数据进去了, 但还没有释放的地址单位不能被覆盖. 但fifo有多种设计, 有的fifo的读地址还能回退, 比如MAC half-duplex的重传.
作者: vincent 时间: 2007-11-22 10:59
另外,我觉得你可以使用双时钟,可以控制数据量,保证不被溢出
作者: caopengly 时间: 2007-11-22 11:52
楼上说得很对,我补充一下。
一般对于fifo的满的值都设为fifo深度的一半,这样在超过这个值后,你要足够的时间判断是否满了。
不至于数据丢失。当然75%也可以。
作者: 1001 时间: 2007-11-22 12:01
非常感谢!谢谢两位大虾!
作者: zhuang305 时间: 2007-11-22 14:51
学习。纯顶
作者: cczmzm 时间: 2008-8-3 20:42
高手高手,学习ING
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |