原创 sdram的学习心得——与初学者共勉

2011-8-4 21:24 2306 4 12 分类: 工程师职场

   最近刚走出校园,走向工作的岗位,哎,说实话,这个难啊,其实我还有一年半才能研究生毕业呢,不过早点走出来也是为了更好的学习,学校的环境太安逸啦,好了,废话少说还是进入正题吧。

  关于SDRAM熟悉的人可能都知道,sdram是随即的动态的存储器,关于它的基本构架组成以及等等参数也不需要我更多的解释,网上的资料很多,但是我建议大家下载文章或者代码时一定要注意,好的文章和代码可以让你很顺利的走上sdram的学习研究之路,而不好的则会让你事倍功半,关于这一点我也是深有体会。

   由于项目需要,接触SDRAM也有一月有余,最先接触SDRAM的介绍和代码是特权同学《深入浅出》那本书中介绍的,而后不断断续续下载过好几个不同版本的SDRAM,其中也有一俩个是仿照特权同学的代码改编,还有些根本就是官方代码,详细,但逻辑关系复杂。因为每套代码都有作者自己的思维,很难完全凭代码理解作者的意图,所以建议初学者确定一到两个方案,深入研究,免得做无用功。

   目前为止我研究SDRAM碰见先后几个不同的问题,或者说是心得,和大家分享一下,特别的新手,大侠们就不要见笑,绕路而行喽。首先SDRAM内部有极其复杂的时序关系,所以一些大公司如ALTERA,

XILINX公司等都有自己的SDRAM controller代码,sdram controller就是一个模块,这个模块把复杂的时序封装在模块内部,我们只需控制输入就能得到想要的输出,不过controller编写也是相当麻烦,一般都是从前人那里改编,其次利用状态机分别描述SDRAM的初始化状态和工作状态是个不错的选择。另外SDRAM的时序延时参数的设定也让人大伤脑筋,另外让我感到最头疼的就是sdram的仿真测试,在这上面花费的时间已远远大于研究代码的时间,目前思绪比较乱,后续我会把做仿真的整体思路整理一下发到网上和新手分享,今天这篇文章比较仓促,过不久我会重新整理一次,希望真能把自己碰到的问题和大家分享出来。

 

附:几个重要的延时参数

1, tRCD(即RAS to CAS Delay) 可以理解为行选通周期,也就是发行地址后要过几个时钟才能发列地址。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

   2,CL(CAS Latency,CAS潜伏期)在发送CAS之后,仍要经过一定时间才能使数据通过I/O通道(DQ)输出到内存总线上,才能读数据(CL延时里面已经包括了tAC),切忌这个CL延时是在读操作的时候才有,在写操作的时候没有这个。

 

   3,在写操作的时候数据可以和CAS同时发出,但电容充电需要一定的时间。为了保证数据的可靠写入都会留一点时间(tWR,Write Recovery Time),这个操作也被称为写回(Write Back).

 

  4,tRP(Precharge command period) 预充电有效周期,也就是说在发出预充电命令之后,要经过一段时间才允许发送RAS行有效或则是其他的命令。

 

  5刷新,预充电是对一个BANK或则是全部BANK中的工作行进行操作,并且是不定期的,而刷新时有固定周期的,依次对所有行进行操作,以保留那些久久没有经历重写的存储体中的数据。但与所有L-BANK预充电不同的是,这里的行是指所有L-BANK中地址相同的行,而预充电中各L-BANK中的工作行地址并不一定是相同的。公认的刷新周期是64ms每行,如果一个存储体有N行,那你就要每隔N/64ms发一次刷新命令。刷新命令一次只对一行有效,发送间隔也总是随着行数的变化而变化。刷新的操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR),无论哪种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。

  对于AR,SDRAM内部有行地址生成器,不需要列地址因为它是对一行中所有的都刷新。由于刷新涉及到所有的BANK,所以在刷新过程中,所有BANK 都停止工作,而每次刷新的周期是9个时钟周期,在此期间所有的工作指令自能等待。

SR则主要用于休眠模式低功耗状态下的数据保存。

 

 

  6,预充电:由于SDRAM的寻址具有独占性,所以在进行完读操作后,如果要对同一L-BANK的另一行进行寻址,就要关闭原来的工作行,重新发送行/列地址。L-BANK关闭现有工作行,准备打开新行的操作就是预充电(precharge).预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。实际上预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位。

 

 

 

 

PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1716180 2011-9-18 23:16

一直在研究sdram仿真测试的编写,可否参考一下啊。xdylang@163.com不胜感激

用户364627 2011-9-14 08:56

共同努力,相互交流呗……留个联系方式啊QQ362819795

用户389336 2011-9-8 10:21

你也是一年半后研究生毕业啊, 貌似我们情况差不多哦,我也是刚走上工作岗位,才接触FPGA,貌似感觉好有难度呀!以后多多请你指教呀

用户364627 2011-8-17 14:02

看你用的什么芯片,研究一下它的datasheet,参考《高手进阶,终极内存技术指南》或者特权同学的代码,然后一点点研究,一点点找出来,datasheet里一般都有这些参数的时间……

用户335453 2011-8-17 13:00

时序延时参数的设定,你能简单的介绍一下吗

用户382208 2011-8-6 17:12

特权推荐过一篇文章《高手进阶 终极内存技术指南.pdf》,里面讲的非常详细跟透彻,推荐你看看。我刚看完不久,觉得很不错。

用户364627 2011-8-6 16:18

你在做sdram啊,具体准备实现什么功能呢,外加别的模块吗?

用户1623934 2011-8-6 01:29

参考一下  我的还得调
相关推荐阅读
用户364627 2011-09-07 08:50
Quartus II中 warning
Quartus II中 warning  以下内容转载自EDACN 1.Found clock-sensitive change during active clock edge at ti...
用户364627 2011-08-12 12:32
关于sdram双向控制线inout疑问的解决
    芯片外部引脚很多都使用inout类型的,为的是节省管腿。一般信号线用做总线等双向数据传输的时候就要用到INOUT类型了。就是一个端口同时做输入和输出。Inout类型在使用和仿真时需要将其理解为...
用户364627 2011-08-10 14:01
sdram里面关于双向数据线控制的疑问
    在做sdram的modelsim仿真时,遇到这么一个问题,如有高手路过,求解答 在testbench文件中加上model后做仿真,目的是在写信号时给出一串地址和对应的数据,然后在读信号状态下随...
用户364627 2011-08-07 15:39
多种方式表达全加器
全加器 全加器能进行家数,被加数和低位来的进位信号相加,并根据求和结果给出该进位信号。真值表如下:   输入       输出 a  b  c    s  co 0  0  0    0  0 0...
用户364627 2011-08-07 15:12
行为建模与基本的行为建模语句
1.过程语句   并发执行,时序条件或事件触发。每个模块中可以含任意个initial和always语句,块内部可顺序执行,块间的语句可以交叉执行。较适合的做法是在always语句中描述硬件行为,在年...
我要评论
8
4
关闭 站长推荐上一条 /3 下一条