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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7916|回复: 4

[原创] 请教大家一个异步FIFO的问题

[复制链接]
发表于 2010-9-28 15:39:03 | 显示全部楼层 |阅读模式

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

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

x

未命名2.bmp

最近在做一个异步的fifo,有一些疑问想请教大家:

首先,我使用的SRAM模型是这样的:在写时钟wrclk的上升沿检测写使能valid_wr,如果有效,则在相应的地址wraddr中写入数据datain,在读时钟rclk的上升沿检测读使能valid_rd,如果有效,则读出相应地址raddr的数据dataout。(valid_wr和使能wr_enfull_n有关,valid_rd和使能rd_enempty_n有关),我在空满标志位产生上有一个疑问,比如说写数据吧,如下图所示:

在这个图中,假设只写数据没有读数据,假设外部总线其所发出的数据为DATAINWREN,(注意到所给数据只在clk的上升沿变化),在clk第一个上升沿(如图)发送第一个数据,此时wr_ptrM-2,而同步后的读指针syn_rd_ptrM,且不变,在第二个上升沿fifo检测到rwen,并且full无效且valid_wr有效,则写入数据data1wr_ptr1变为M-1full不变,与此同时外部总线检测(也在上升沿,即在clk2这点)full,没有满,则继续发数据data2,注意,这时候两个指针只差一个,在第3clk上升沿,fifo检测到wr_en,且valid_wr有效,则写入data2,而由于写信号引起了指针相等,则此时ful有效,即表示fifo满了,问题来了,此时(clk3上升沿)外部总线要检测full信号以决定是否继续发数据,但监测点full为高,即表示未满,则外部总线还可以继续发送数据,而此时valid_wr已经无效,数据不会写进SRAM中。我就很奇怪,这样做确实可以防止fifo被重复写,但总线上发出的数据并没有被写进去,好像丢了一样,我自己分析是不是总线在检测full信号时并不是在上升沿去做,如果在下降沿来检测full信号,则就可以看到full的变化,在上图中就是wr_endata_in都向后推半个周期,这样就看似合理了,就像iic总线中主机和从机的关系那样,主机下降沿发数据,从机上升沿接数据,但现在的电路中很少使用双沿,搞不明白,还请大家帮助一下。

未命名2.bmp
发表于 2010-9-29 08:33:10 | 显示全部楼层
发表于 2010-10-4 21:11:10 | 显示全部楼层
在圈1的地方   不会写进去的 ,地址也不会加,  
你的setup时间是不够的,   从图来看,你的WREN  是根据 WCLK产生的
发表于 2010-10-5 03:45:31 | 显示全部楼层
这个时序图太理想了。不要在时钟上升沿的时候改变信号,要在上升沿来之前把信号准备好。比如在1的时候,时钟捕获到的WREN和Valid_wr都是1,而不是0
发表于 2010-10-12 23:31:26 | 显示全部楼层
不知道理解你意思没有。
异步FIFO都会预留一些容量。而且空满标志应该是有组合逻辑来实现,从而避免误判。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 00:38 , Processed in 0.020319 second(s), 7 queries , Gzip On, Redis On.

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