搜索
bottom↓
回复: 17

如何高效的读写SDRAM?

[复制链接]

出0入0汤圆

发表于 2012-9-11 15:28:10 | 显示全部楼层 |阅读模式
rt, 对SDRAM我们一般需要读写同时进行。
理论上比如,143MHz, 16bits的SDRAM的带宽可以达到286MB

但对我来说这又很难去实现这个理论值。
因为每次对SDRAM简单的读写都需要active, percharge之类的操作,基本上单次读写的效率都很低。

要是用突发读写,瞬时的数据量会很大,需要用FIFO来达到缓冲作用,有时又不适宜把FIFO做的过大,这样会很占资源

我看到读写不同的Bank可以覆盖掉active,percharge的时间,但在控制上又造成了难度,一般数据都是顺序读写的。

大家来讨论讨论有什么高效的方法把SDRAM用起来。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-9-11 16:06:25 | 显示全部楼层
FPGA做全页突发资源消耗没多少,CPLD就惨了,做8字突发吧

出0入0汤圆

 楼主| 发表于 2012-9-11 16:48:46 | 显示全部楼层
NJ8888 发表于 2012-9-11 16:06
FPGA做全页突发资源消耗没多少,CPLD就惨了,做8字突发吧

确实惨不忍睹,呵呵

FPGA生成的SDRAM_CLK会有相位偏移么。

CPLD内部有时延,产生的时钟好像有相位偏移,时钟上升沿落不到数据的有效窗口上。

不知道你用FPGA做的时候有这种现象么,还是用PLL调节了输出时钟相位。

出0入0汤圆

发表于 2012-9-11 16:58:36 | 显示全部楼层
125M看了下,然后反相了下时钟,没有特意再控制相位

出0入0汤圆

 楼主| 发表于 2012-9-11 17:26:53 | 显示全部楼层
NJ8888 发表于 2012-9-11 16:58
125M看了下,然后反相了下时钟,没有特意再控制相位

你说的这个情况对我很有用

我之前看到的很多文章关于FPGA_CLK,SDRAM_CLK的相位关系的文章,根据FPGA寄存器的建立保持时间,和SDRAM的建立保持时间,分别计算读,写SDRAM时的有效窗口,我记得大概情况是这样


                                         |<------------------------->|  读有效窗口                          
                                                      |<------------------------->|   写有效窗口
                                                      |<------------>| 有效窗口
                        ___________                     ___________
_____________|                   |__________|                    |__________               

                                                    SDRAM时钟上升沿

当时钟频率越高时,这个有效窗口越窄。

说说我的情况,开始我用的是80MHz晶振给CPLD时钟,然后直通给SDRAM(没有反向),数据读写不稳定。后来我换成48M晶振,还是一样的问题,不稳定。
然后我把时钟反相,问题就解决了。我对这样的情况理解就是,当时钟频率下降,读写窗口都变宽,在SDRAM下降沿处又产生了一个有效窗口,所以当反相的时候,刚好数据落到这个有效窗口内。(但我不清楚这样的想法对不)

我看你说你用125M的时钟,也是反相时钟。数据读写稳定。所以这点我很困惑,高频率时钟很难在下降沿处有有效窗口交集。

你对这方面怎么看?

出0入0汤圆

发表于 2012-9-11 20:22:50 | 显示全部楼层
geff 发表于 2012-9-11 17:26
你说的这个情况对我很有用

我之前看到的很多文章关于FPGA_CLK,SDRAM_CLK的相位关系的文章,根据FPGA寄 ...

我是用示波器观察CLK和DATA相位定的,FPGA中时钟输出路径和时钟控制CAS RAS WE等等路径不一样。

出0入8汤圆

发表于 2012-9-11 21:01:48 | 显示全部楼层
我用的是68M的时钟    SDRAM_CLK的时钟和内部的时钟是一样的。不用取反的  如果取反的话  相当于时序上严了一倍。

出0入0汤圆

 楼主| 发表于 2012-9-11 23:09:12 | 显示全部楼层
NJ8888 发表于 2012-9-11 20:22
我是用示波器观察CLK和DATA相位定的,FPGA中时钟输出路径和时钟控制CAS RAS WE等等路径不一样。 ...

时钟是通过组合电路直接输出
控制和数据是寄存器在上升沿输出,对么

你就是用示波器观察数据和时钟的关系,然后反相时钟,并没有调节时钟的相位对么?(这个方法我不是很理解)因为你的时钟频率很高,只用反向就能稳定读写,我不是很能理解了,这方面我没有太多的经验。

我有个问题,用示波器能准确地判断SDRAM CLK上升沿时,数据稳定么。示波器里看到的时钟上升沿时间比较宽,那应该怎么判断采样点的时间。

我现在就感觉反向后,写SDRAM时,数据有时不稳定,尤其相邻数据从0x0000->0xFFFF或0xFFFF->0x0000,有时数据会出错,一般情况下都正常;读是正常的

时钟不反向的时候,读有时不稳定

CPLD不知道有没有较好的方法来控制时钟?还是说SDRAM对时钟并不敏感,是模块其他地方有问题。

出0入0汤圆

 楼主| 发表于 2012-9-11 23:12:21 | 显示全部楼层
kebaojun305 发表于 2012-9-11 21:01
我用的是68M的时钟    SDRAM_CLK的时钟和内部的时钟是一样的。不用取反的  如果取反的话  相当于时序上严了 ...

我同意不能取反。但我现在的情况是时钟频率低的时候去反是稳定的。

但时序严格一倍是怎么推算的呢?我感觉理论上,时钟频率上去,SDRAM CLK就不能反向了。这时候如果方向,读或写应该满足不了时序要求的。

出0入8汤圆

发表于 2012-9-12 08:50:19 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-9-12 08:55 编辑
geff 发表于 2012-9-11 23:12
我同意不能取反。但我现在的情况是时钟频率低的时候去反是稳定的。

但时序严格一倍是怎么推算的呢?我感 ...


你的感觉是对的  你分析下 你如果取反的话   相当于SDRAM的时钟频率=2倍的逻辑频率    就是说  你的逻辑电路在一个上升沿 修改数据和命令  因取反了  所以  SDRAM就是在逻辑电路的下降沿锁存了(因你的时钟取反,所以SDRAM的时钟的上升沿实际上对应的逻辑时钟的下降沿), 这样分析的话  所有的输入到SDRAM的数据和命令,时序要求都严格了一倍。

我刚开始也是取反的(因理解不深) 100M的时钟  当时板子的线就是随便连的  这个板子可以调好   换个板子就不行了,仔细想了下时序  才理解 不用反相就对了。

出0入0汤圆

 楼主| 发表于 2012-9-12 08:57:26 | 显示全部楼层
kebaojun305 发表于 2012-9-12 08:50
你的感觉是对的  你分析下 你如果取反的话   相当于SDRAM的时钟频率=2倍的逻辑频率    就是说  你的逻辑 ...

我明白你的意思

我觉得会不会因为我的SDRAM_CLK是晶振通过CPLD直通给SDRAM的,在CPLD里会不会产生了延时,pin to pin delay之类的。

而数据是通过寄存器输出,两者之间产生了相位差。

大家控制SDRAM的时候,时钟没出现过这类问题么?

出0入8汤圆

发表于 2012-9-12 09:01:49 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-9-12 09:08 编辑
geff 发表于 2012-9-12 08:57
我明白你的意思

我觉得会不会因为我的SDRAM_CLK是晶振通过CPLD直通给SDRAM的,在CPLD里会不会产生了延时 ...


应该就是这样问题  时序约束的问题   你可以把  SDRM_CLK的时钟  添加几个缓冲器 来人为的延时一点时间。  或者约束下输出到SDRAM管教的输入输出脚   
我现在的做法是 SDRAM_CLK的时钟比内部逻辑的驱动时钟提前了0.2ns (因我这带有PLL  如果没有带的话 可以添加缓冲器 来手动调节)



你用的啥CPLD

出0入0汤圆

 楼主| 发表于 2012-9-12 09:31:01 | 显示全部楼层
kebaojun305 发表于 2012-9-12 09:01
应该就是这样问题  时序约束的问题   你可以把  SDRM_CLK的时钟  添加几个缓冲器 来人为的延时一点时间 ...

MAXII EPM1270

缓冲器是怎么添加的?这个我还不会

出0入8汤圆

发表于 2012-9-12 12:07:09 | 显示全部楼层
geff 发表于 2012-9-12 09:31
MAXII EPM1270

缓冲器是怎么添加的?这个我还不会

加上2个非门  然后加上关键字 不让优化    俺用的是A3P125  100脚的 价格14元左右。很超值

出0入0汤圆

 楼主| 发表于 2012-9-12 13:24:59 | 显示全部楼层
kebaojun305 发表于 2012-9-12 12:07
加上2个非门  然后加上关键字 不让优化    俺用的是A3P125  100脚的 价格14元左右。很超值 ...

多谢了

我去查一查,verilog怎么防止优化的语句

出0入8汤圆

发表于 2012-9-12 16:44:22 | 显示全部楼层
geff 发表于 2012-9-12 13:24
多谢了

我去查一查,verilog怎么防止优化的语句

我说反了  应该是驱动CPLD内部的逻辑时钟加们电路  手动延时      如果频率不高的话  取反也问题不大  只是pcb布线 要注意。

出0入0汤圆

发表于 2012-9-12 20:42:23 | 显示全部楼层
http://xjhit.spaces.eepw.com.cn/articles/article/item/88031
防止FPGA设计中综合后的信号被优化
2011-07-11 22:37:11

      这不是一个新话题了,写这个也是当作自己的一个小小的笔记吧!觉得挺有用的。

      一般在做前仿真(即功能仿真)时,不会考虑信号被优化的问题。最近做一个关于运算的小程序,前仿真的数据没有问题,但是实际出来的数据总是有错误,所以不得不要进行后仿真。而后仿真一个很大的问题就是设计中很多信号在综合的过程中都优化掉了,所以需要添加相应的综合属性,让软件在综合的工程中,保留这些信号。另外,在利用SignalTap II观察信号时也会遇到相同的问题。

      在Verilog描述的程序中,通常包括两种类型的信号,即wire型,和reg型。对于不行类型的信号,需要使用不同的综合属性。

(1)对于wire型信号,使用/* synthesis keep="1" */综合属性,例如下面的语句:

      wire[7:0] data_in/* synthesis keep="1" */;

(2)对于reg型信号,使用/* synthesis preserve = 1 */综合属性,例如下面的语句:

      reg[7:0] data_in/* synthesis preserve = 1 */;

      需要注意的是:描述综合属性的语句一定要添加在“;”前面。

      其中,/* synthesis keep="1" */是Quartus II自带综合器的综合属性,对应于Synplify的综合属性是/* synthesis syn_keep=1 */。不过现在Quartus II也支持/* synthesis syn_keep=1 */


在这个BUF两端的信号线上加上下面的属性(Verilog HDL版本):
wire bufin  /* synthesis syn_keep=1 xc_props="X" */;
具体解释:
1、syn_keep=1就是保留这个信号线,是它成为一个instance(synplify的),然后就可以对它添加XILINX的约束属性;
2、xc_props=“”是synplify为XILINX保留留的约束属性,可以透传到ISE的实现中去,从而约束实现过程。
3、“X”属性是在MAP时识别的KEEP属性,如果用XST综合就只需要在信号线的两端加上X属性就可以透传到MAP中去。但是synplify并不能识别,因此需要通过以上的方法将X属性透传到MAP中去。
类似在 VHDL中也适用
attribute syn_keep of temp01 : signal is true;
attribute xc_props of temp01 : signal is "X";

出0入0汤圆

发表于 2014-4-30 21:38:38 | 显示全部楼层
收益了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表