打印

FIFO与SDRAM问题

[复制链接]
6779|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mr.king|  楼主 | 2010-12-13 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天碰到两个怪事,一个是XILINX FIFO IP,先是写512个数据,然后读出,发现前面数据从第9个时钟才出来。二是美光的SDRAM全页突发写,按手册第一个数据与WE同时进去,但是我写后读,发现实际第一个数据是WE之后的那个数据

相关帖子

沙发
钻研的鱼| | 2010-12-14 16:30 | 只看该作者
如果你的fifo是异步的,因为fifo会有一些亚稳态的处理,写进数据过几个时钟再出来是正常的。
美光的sdram读写不对,一般有可能是你的时序没有设计对,仔细检查你的读时序,又没有可能cas等设计出现问题?

使用特权

评论回复
板凳
cw0wto| | 2010-12-14 17:58 | 只看该作者
;P

使用特权

评论回复
地板
mr.king|  楼主 | 2010-12-14 22:10 | 只看该作者
美光的sdram读写不对,一般有可能是你的时序没有设计对,仔细检查你的读时序,又没有可能cas等设计出现问题?--------我用逻辑分析仪看过,我用125M跑133的SDRAM,参数符合手册,表现就是WE对应的数据没写入,读出时我也是用逻辑分析仪监控,第一个数据是WE之后那个数据。FIFO真是奇怪,我以前也用过另一个XC3S,不过没在意读输出问题。这次试验我还特意试过复位FIFO,从IP的RDCOUNT看,复位有效时位0,但是我祎去除复位,马上变为2,此时读写使能都是无效的,但是写时钟一直接125M时钟。按理没有任何数据写入,表现却是有两个数据写入了

使用特权

评论回复
5
mr.king|  楼主 | 2010-12-14 22:13 | 只看该作者
而我前面写入的数据,在第8个时钟才出现,感觉好像FIFO在我写之前已经装入8个数据了,而复位后自动由两个数据更不好理解

使用特权

评论回复
6
mr.king|  楼主 | 2010-12-14 22:18 | 只看该作者
问题如果很普通我也不会发出来

使用特权

评论回复
7
SuperX-man| | 2010-12-14 22:49 | 只看该作者
能告知下FIFO IP的版本么? 我可以帮你问问同事

使用特权

评论回复
8
钻研的鱼| | 2010-12-15 10:03 | 只看该作者
sdram写时序,看看写的时候udm、ldm等是否有效?另外你还要满足很多时序要求,譬如active到读写命令之间的时间要求,还有就是你的物理接口时序,从fpga出来的数据和写信号等是否满足sdram要求?125M的频率不是很低,我只设计过100Mhz的sdram全页操作,问题不大。
     fifo的问题,xilinx的工具和器件用量这么大,原厂出的问题应该比较小。fifo的很多设计可能与我们最初的设想不一样。我主要用altera的fifio,也发现一些问题,譬如将满标记,我用signaltap抓过,quartus不同版本的设计很是不一样,我采用了一些变通的办法,fifo如果是同步的,问题不大,读写数据包括fifo里面的数量都是正确的,如果是异步fifo,我只用空和半满标记,提高设计裕量。

使用特权

评论回复
9
mr.king|  楼主 | 2010-12-15 11:43 | 只看该作者
能告知下FIFO IP的版本么? 我可以帮你问问同事-------4.3,我找时间继续试验下,计划添加用手动单次读的方式看输出,包括复位后为何RDCOUNT=2,我计划写时钟先去掉(实际我认为写EN无效时能禁止时钟的,没法,只好分步查).本来上面问题我设计可以绕过去,比如原来突发512,我只用500个数据,然后相应FIFO也偏移若干区取数据也是可以的,不过还是想搞懂.上面问题有结果我会贴出来

使用特权

评论回复
10
mr.king|  楼主 | 2010-12-15 11:45 | 只看该作者
所有时序要求我核对过,比如TRCD=20,我用三个时钟24ns,用空继续查.家里没有逻辑分析仪,只好在单试验

使用特权

评论回复
11
mr.king|  楼主 | 2010-12-15 14:51 | 只看该作者
重新编一个DCM,观察,现在第一个数据是对应WE出的了,奇怪DCM改之前上次反复看了好几次都是滞后一个数.而且我还把DCM频率将为100M也不对,重生成DCM加到工程,删了旧的DCM,现在SDRAM不错位了.125M.FIFO问题实验还是没进展

使用特权

评论回复
12
mr.king|  楼主 | 2010-12-15 16:34 | 只看该作者
现在实验结论是FIFO写入有3级流水线,读出有8级流水线,特性先进先出是没问题的,问题是如果复位FIFO,对于与SDRAM全页突发配套的FIFO,我本来意思突发写512到FIFO,然后另一个时钟域的模块
读出512个数据,实际上,开始有12个数据是以前读出流水线的没用数据,这样,我只读出500个SDRAM当前页的数据,还有12个在后面没读出,只有下次写512后读才将这12个数据输出(不过第二页也是12个数据留在后面了).这是我的实验分析.如果只在乎数据连贯性没有问题,如果在乎SDRAM与FIFO对应地址,就要考虑这个流水线问题.FIFO的IP说明书好像没提到这个流水线,是否真像我分析的这样不确定.此贴20分将送给提供更多相关参考信息的网友(倾向一次送出),如果两个人有价值,我新开一贴送分---------春节前没回复就结贴

使用特权

评论回复
13
钻研的鱼| | 2010-12-15 17:52 | 只看该作者
1、fifo的复位与时钟关系。我感觉首先dcm有稳定的时钟输出,然后再复位fifo
2、fifo的读写时钟应该一直持续,如果写EN无效时能禁止时钟,会出现一些其他问题,altera的就有这个问题

使用特权

评论回复
14
钻研的鱼| | 2010-12-16 08:41 | 只看该作者
另外,sdram的调试,可先降低时钟频率,免除物理接口时序问题

使用特权

评论回复
15
mr.king|  楼主 | 2010-12-16 08:53 | 只看该作者
100M我也试过表现一样

使用特权

评论回复
16
mr.king|  楼主 | 2010-12-16 11:34 | 只看该作者
下面是手动逐次访问FIFO监控WRCOUNT  RDCOUNT的变化数据.FIFO内容此次忘了显示下次再贴.

wrcount        rdcount       
0        0        上电
0        0        第1个WR
1        0        第2个WR
2        0        第3个WR
3        0        第4个WR
4        0        第5个WR
5        1        第6个WR
6        2        第7个WR
                按上面规律
…        …        …
n-1        n-5        第n个WR
n-1        n-4        第n+1个WR

k-1        k-5        第k个WR
                下面开始读
k        k-4        第1个RD
k        k-4        第2个RD
k        k-4        第3个RD
k        k-4        第4个RD
k        k-4        第5个RD
k-1        k-5        第6个RD
k-2        k-6        第7个RD
                下面再次写
k-3        k-7        第1个WR
k-3        k-7        第2个WR
k-3        k-7        第3个WR
k-3        k-7        第4个WR
k-3        k-7        第5个WR
k-2        k-6        第6个WR
k-1        k-5        第7个WR

使用特权

评论回复
17
钻研的鱼| | 2010-12-16 12:33 | 只看该作者
1、你一直没有说明你的fifo是同步的还是异步的?
2、这种情况也不能说明fifo是错误的,刚开始写完k个数据,即k-1        k-5        第k个WR
    ,等一会再去读,我想 rdcount 会变为K个。
根据fifo的表现,应该是异步的,异步之间有latency是非常正常的

使用特权

评论回复
18
mr.king|  楼主 | 2010-12-16 16:44 | 只看该作者
异步,读写之间间隔非常大.125M时钟写,延时多,低速时写,我后来用写通模式,只要数据至少有3个,读写之间数据是连贯的,但是当内部少于三个数据,在下次写后,读操作正常数据有延时,前面两个是上次的数据,比如数据1 2 3 4 5 6 7 8,读出1 2 3 4 5 6 7后写9 0  a b,再读出现数据是8 8 9 0 a b

使用特权

评论回复
19
shoreshore| | 2010-12-16 20:31 | 只看该作者
hao  ddddddddddd

使用特权

评论回复
20
钻研的鱼| | 2010-12-17 08:46 | 只看该作者
fifo的读这一端把空信号标记引出,fifo的读信号应该是你自己设计的读信号和(空信号标记的非信号)相与,其他地方用到的fifo真正读信号也应该是你自己设计的读信号和(空信号标记的非信号)相与,这样就不会出问题。读写之间有多少延迟不要考虑,这个是不固定的,同理在写端,应该把满标记引出

使用特权

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

本版积分规则

7

主题

790

帖子

0

粉丝