在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1984|回复: 6

[求助] 问一个fifo的问题读写问题。

[复制链接]
发表于 2017-12-11 10:33:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
之前一直没有用到过fifo,觉得应该是很简单的事情,但是有一段不愉快的小插曲,它仍在我的脑海中余音绕梁。
事情是这样的。一个异步的fifo,读是写的4倍,读写时钟同源,由MMCU产生。我把0,1,2,3......写进fifo中,但是当读取fifo时,读到的数据却是0,2,3,4,5.............把1给漏掉了,我实在是想不清楚原因,到底应该怎么纠正。
573972088764537291.png

276044787339566414.png
贴图,一目了然。

还有一个问题呢。就是prog_full,prog_empty.当我生成ip核时,不生成prog_empty,只生成prog_full时,只要fifo一有时钟,就会置1,但是我设置的数值是512,这据我的一个朋友说是初始化造成的,很常见,可以加上其他的约束条件,比如非空来控制。后来我同时生成prog_full,prog_empty,还是同样只用prog_full,倒是不会出现前面的问题了。

当然重点集中在第一个问题。我实在是无从下手,可能是什么问题。
发表于 2017-12-11 12:41:55 | 显示全部楼层
我是觉得你0和1其实都没有写进去,我不知道你生成时候的具体参数是什么,你看看手册,读的时候数据是和fifo_rd_01一起出来的还是会延迟一个cycle

我怀疑你的问题是出在rst上面,你仔细看看手册,rst释放到fifo可以开始正常工作需要隔多久时间,你可以试着rst释放之后隔10个cycle再去操作fifo试试看
 楼主| 发表于 2017-12-11 16:02:30 | 显示全部楼层
回复 2# churchmice

问题诚如您所说。我复位结束后又延迟了256个时钟,结果就正确了,具体最小延迟是多少,我也没有试,
 楼主| 发表于 2017-12-11 17:16:22 | 显示全部楼层
回复 2# churchmice

另外,据我的观察,读使能之后的一个时钟之后才能读到正确的第一个写入fifo的数据。
这里就又有一个问题。怎么处理?
always@(posedge clk)
  if(rd_fifo_en)
    begin
    if(cnt==1)
      begin
      cnt<=cnt;
      data_in<=fifo_out;//一个时钟之后再读取fifo中的数据。
      end
    else
      cnt<=cnt+1'b1;
    end
感觉好愚蠢的程序。
 楼主| 发表于 2017-12-11 17:28:08 | 显示全部楼层
也可以用一下valid。
发表于 2017-12-18 11:24:34 | 显示全部楼层
回复 1# qiurijian

0和1没写进去,因为外部rst虽然释放了,但是rst进fifo后要进行处理,最后fifo里边实际用到的rst释放比外部rst晚几个时钟周期,貌似是3个,可以看fifo ipcore的使用手册。
 楼主| 发表于 2017-12-18 21:24:51 | 显示全部楼层
回复 6# xduryan


    恩,谢谢您的回答,非常有用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-18 15:21 , Processed in 0.028883 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表