打印

请教一个FIFO时序是否会发生冲突

[复制链接]
4013|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这几天搭了一个FIFO乒乓操作的电路,FIFO控制用的是状态机,状态机的时钟和FIFO的读时钟是同一个时钟,部分时序图见下,

问题如下:
白圈1和2,在FIFO控制器的时钟的上升沿改变rdreq的电平,那么如果FIFO控制器的时钟和FIFO读时钟rdclk之间存在延时(但它们是同一个时钟),会不会有一次误读?

相关帖子

沙发
钻研的鱼| | 2012-2-9 15:17 | 只看该作者
不明白:同一个时钟为何还有延迟?

使用特权

评论回复
板凳
bityoung| | 2012-2-9 15:34 | 只看该作者
时钟的抖动肯定是存在的吧?不过在FPGA中使用的全局时钟抖动可以忽略;也就说你说的这种情况是不用考虑的。个人看法,请高手指正。

使用特权

评论回复
地板
lizardno1|  楼主 | 2012-2-9 15:37 | 只看该作者
2# 钻研的鱼

因为同一个时钟到2个模块的CLK端一般都有时间差

使用特权

评论回复
5
jakfens| | 2012-2-9 16:09 | 只看该作者
看看

使用特权

评论回复
6
Backkom80| | 2012-2-9 16:36 | 只看该作者
不会,
1,时钟走的是全局网络,抖动,延时全部都会最小。
2,数据的延时一般会比时钟延时长。
3,时钟采的是前沿信号值。
在1的位置:第一个时钟采到的值是:rden=0,q3=59;第二个时钟采到的值:rden=1,q3=59;
在2的位置:倒数第二个时钟时钟采到的值是:rden=1,q3=74;最后一个时钟采到的值:rden=1,q3=75;

使用特权

评论回复
7
lizardno1|  楼主 | 2012-2-9 19:24 | 只看该作者
6# Backkom80
q3是从fifo中读出的值,如果按第三条所说,那么2处在rdclk的上升沿,rdreq1跳变时,对于fifo来说,应该是读有效(高电平)咯?

使用特权

评论回复
8
leoph| | 2012-2-9 21:44 | 只看该作者
如果是同源时钟,如果全局时许约束过了,是不会有问题的,布线工具会自动考虑并避免问题。

使用特权

评论回复
9
lizardno1|  楼主 | 2012-2-9 22:49 | 只看该作者
8# leoph

谢谢!

使用特权

评论回复
10
钻研的鱼| | 2012-2-10 08:47 | 只看该作者
fpga内部会考虑这种抖动,如果你做fpga设计,低速情况下,这种抖动就不用考虑了

使用特权

评论回复
11
Backkom80| | 2012-2-10 12:57 | 只看该作者
Q3是输出值对吗?ok,没有问题啊
输出的数晚一个时钟出来,
你rden高电平的有较的时间(9个时钟周期),对应的Q3输出的9个数为这么几个:68,69,70,71,72,73,74,75,75

使用特权

评论回复
12
lizardno1|  楼主 | 2012-2-10 13:20 | 只看该作者
11# Backkom80

其实我的疑惑主要就是是否会有第9次读操作,因为在你所说的第9次读操作时钟上升沿的时候(也就是图中圈2的地方),rdreq1跳低,同时FIFO的读操作在这个时间会判读rdreq1的电平来决定是不是要读。
原来我只考虑了时钟的偏斜对这个操作的影响,忘了rdreq1也同时存在延迟,而且只会比时钟的Skew大,那么存在第9次读操作是无疑的了。还好FIFO用的是内置ip,有读保护,不然就出错了。我现在打算用一个高频时钟来驱动状态机,而不是用读时钟来驱动状态机,这样应该能达到预期的效果(只读8次)

使用特权

评论回复
13
Backkom80| | 2012-2-10 15:43 | 只看该作者
呵呵,没有必要在用一个高频时钟来驱动,读时钟可的,
你将生成rden信号的逻辑少一个时钟不就行了哈。时钟域太多,对布局布线不利,FPGA中分区域的,每个区域能布的全局时钟数有限。

使用特权

评论回复
14
daisyly| | 2012-2-10 18:10 | 只看该作者
谢谢。 6# Backkom80

使用特权

评论回复
15
lizardno1|  楼主 | 2012-2-11 17:24 | 只看该作者
本帖最后由 lizardno1 于 2012-2-11 17:28 编辑

13# Backkom80
加个计数器提前一个CLK跳状态确实可行。不过反正我后面要还要写USB的控制器,用的是30Mhz/48Mhz的外部时钟(USB芯片产生的),应该也可以拿那个时钟做FPGA内部的一个全局时钟吧?不知道这样的时钟质量行不行,到时候看看再说吧。还有我这板子速度不快,50Mhz以下,里面用3个时钟布线应该不是很复杂的吧(其实我用的是Cyclone iii系列内置的pll做的时钟。。。猴哥我不是来砸场子的。。。)

使用特权

评论回复
16
Backkom80| | 2012-2-12 23:27 | 只看该作者
恩,没有问题的,50M以下,且只有3个时钟,布线上让时序紧张这个不是问题。

使用特权

评论回复
17
lirfv| | 2012-3-13 22:41 | 只看该作者
嗯,
大家分析的很不错
学习了

使用特权

评论回复
18
edacsoft| | 2012-3-14 09:31 | 只看该作者
呵呵,没有必要在用一个高频时钟来驱动,读时钟可的,
你将生成rden信号的逻辑少一个时钟不就行了哈。时钟域太多,对布局布线不利,FPGA中分区域的,每个区域能布的全局时钟数有限。 ...
Backkom80 发表于 2012-2-10 15:43

Backkom80,请问rden信号是用fifo的读计数器or写计数器产生?

使用特权

评论回复
19
oucchina| | 2013-3-27 14:35 | 只看该作者
好像一般来说,读请求之后,需要缓一个周期再读,以前看一篇**介绍说fifo内部是时钟下降沿动作的。

使用特权

评论回复
20
oucchina| | 2013-3-27 14:38 | 只看该作者
好像读空后再读一个周期才是最后一个数据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

55

帖子

0

粉丝