Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2275858
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2008-05-29 20:12:23

我了解事物喜欢从底层根本去了解,而不是你说什么我照做就行了,我会形成一些探寻究竟的念头,也会产生很多疑问。

讨论之前当然要先看过某厂的datasheet,我看的是Micron。

按上面说,terminate和precharge都能掐断burst读或写。我也是第一次用Sdram,根据我做的项目数据流特点,我一上来就只选用了full-page模式。因为full-page读写不带auto-precharge,而且要用户自己来终止,比较了一下,对于full- page而言,用terminate显得直接方便(时序清晰明了),而precharge和时间有关(不单单是时钟周期的个数关系),datasheet 的时序图中有一张是full-page write,用的也是terminate,所以就选用了terminate。

结果实验下来,写入的数据一个也没读出来,全是FF。心理没谱了。揣摸了几天,猜想问题在precharge上,尝试在terminate后面加上 precharge,实验就成功了!原来尽管terminate和precharge都能终止页爆发,但terminate只是单纯的终止,不能完全代替 precharge,用了terminate后还要跟上precharge才行。资料上时序图恰好在页模式时只画了terminate,没跟上 precharge,在文字讲解页模式写的时候光说都能终止,也没强调还要precharge。

导致误会的根本原因是这份datasheet只是应用方面的说教,而不是sdram原理的详细描述。但SDRAM原理的详细讲解到现在也没找着,看到的资料都是外文翻译过来后互相抄的!千篇一律!比如precharge,从字面看是“预充电”,可资料上的解释都是“Deactivate row in bank or banks”及其中文翻译。后来在论坛上也看到新手们在问:precharge和refresh到底都作了什么,有什么区别?

我根据存动态内存存储单元的基本原理

某些电路相当于“口线供能电容”,此电容容量远比数据存储电容大,用于给口线的读写驱动提供能量,器件数据位宽是几位就只需要几乘以4个(4来源于有4个banks)。下面就来自圆其说:

初始化按照要求就先precharge了,以后每次读写之前都要active。active做两件事,既选通了相关行,又将驱动的能源准备好。当具体读写时,就选通列,给数据电容充电或放电。1个爆发读写完成后,就拨回precharge,给“供能电容”补足电能。因为“供能电容”在 active时要被消耗能量并且也存在自漏电问题,所以有了资料上的(active to precharge command)tRAS<120微秒的要求。而拨回precharge时,“供能电容”是一直接着电源的,所以资料上就没有(precharge to active command)的要求了。因为“供能电容”比较大,从硬件设计角度出发充电电流不能做太大,所以tWR和tRP就相对要长。真正的顺序是 precharge-〉active-〉读写-〉终止,因为tRP较长,所以初始化时先precharge,并且每次读写完后马上precharge,以便下次读写时只需active以提高响应速度,反正放在那precharge又不影响什么。这就是precharge(预充电)的真正含义所在!至于何必这么麻烦要“供能电容”倒一手,可能是因为数据单元太脆弱,经不起电源直接冲击或干扰,呵呵。而且根据动态内存原理,数据线复用,反正必须先active 选通行,顺便再附加个供能功能;而爆发需要终止,特别是页模式更不会自动终止,那么就将“终止”和“预充电”合并到“precharge”,设计人员真会动脑筋。而资料只管说终止功能,没提预充电的作用,反正时序是通的。

 

想出所谓“供能电容”的还有个原因是:有两个和时钟无关的长时间参数,刷新周期64ms,tRAS 120微秒,不都是电容漏电的体现吗。所以内存可以降频使用,但不能太低,以至于64ms内你只能完成4096次刷新,别的什么都没时间干;或者tRAS 期间你连1次读写或写都完不成。

 

至于refresh,就是1次先读后写的过程,用于保持数据电容的电位。如果在自己的系统中,特别是数据采集系统,1组数据流在64ms内完成了先写入sdram暂存后读入主机,并且sdram中的数据就不再需要了,整个过程不需要插入任何刷新命令。延伸开来,可以做出很适合你的最简单的sdram 控制器。做个基本的SDRAM控制器很简单,关键是要根据你的系统特点合理安排好读、写、刷新等操作。

 

以上是我这几天的心得,希望没有误导大家继续推测:在“auto refresh”命令执行的末端隐含了“precharge”,所以资料上要求“auto refresh”前要保证已经“precharge”,而“auto refresh”却可以放在一起连续发出,“auto refresh”之后却直接可以“active”而不再需要“precharge”。还可能在“auto refresh”命令执行的前端隐含了“active”,行地址由刷新寄存器自动计数并加1。“auto refresh”就是对某行所有列同时 “active”“read”“write”“precharge”,正好7个周期。器件共有4096行,所以要求在64ms内刷新4096次,4个 banks是并行同时操作的,所以资料显示耗电高峰发生在自动刷新期间。实际上read已经隐含了write,就是一次完整的读或自动刷新操作的第5个周期,时序正好吻合。不同的是自动刷新的第5个周期不需对外在DQ上输出。

充电放在前面叫charge,放在后面是为下一次操作提前做好准备就叫precharge,以前面分析prechage能提高断续操作的响应速度,所以最终设计就采用了“precharge” 如果对我说的都很清楚,那么操作内存应该是游刃有余了

打电话问了Micron的技术人员,模式寄存器的内容在掉电前始终有效,中途更改无需再等待120us,但建议稍等一下,具体多少没说。这些内容如果是试验出来的也不敢肯定就一定正确,必须打电话问。

打电话问了Micron的技术人员,模式寄存器的内容在掉电前始终有效,中途更改无需再等待120us,但建议稍等一下,具体多少没说。这些内容如果是试验出来的也不敢肯定就一定正确,必须打电话问。 active 和 precharge 是互为反向的信号;其实可能就是同一信号,管子一个是N沟道另一个是P沟道而已。

 

Q1负责读放大,Q2负责写,不需要专用控制信号,自反馈。这样每个单元只要4个管子!

 

选通行地址就实现了读放大和自刷新,当列地址也选通就实现了对数据线的输入输出。

 

AutoRefresh时专用计数器自加1并选通某行地址,所有列地址不选通。如果上图正确,那么读写某地址的数据时,同1页的其他数据单元都得到了刷新。

验证此推测的一个办法是:对某一行第1列写入某数据,等64ms或更长时间(期间不用任何刷新命令,只是反复去读/写同一行的第128列),再来读第1列,数据应该还在。

以上推断都建立在第1幅图的基础上,今看到两页IC设计的资料,发觉这幅图已是 陈旧的“单管动态存储电路”,但现在国内大部分教案和资料用的都是它!!!东南大学的电子教案用它讲解DRAM地址复用的内容甚至是错误的!!!误人子弟

 

稍后我把现在SDRAM的单元及推导的阵列画给大家。这个单元资料上给的是0.35微米的IC设计版图,那就是真正的电路了。

 

我前面的推导不是真实的电路形式,但我自认为还是蛮合逻辑的但所说的试验可能会失败,因为真的读放大电路不在存储单元中。问题:

 

按照datasheet定义的命令真值表:

 

--------------------------/CS ---/RAS---/CAS---/WE

 

PRECHARGE--------L ------- L  -------H -------L

 

REFRESH-------------L --------L -------- L -------H

 

那么好象是PRECHARGE是对每个行"写"入数据?

 

REFRESH则通过内部计数器进行逐行刷新? turkyrun: ras cas we 应该是复用的,不然加载模式时全低又怎么解释呢,8种状态全用完了

sunnybird:因为datasheet是介绍器件的,而不是理论教材。

另:我的项目搞定了,说明对SDRAM的理解是对的,我降频在48MHz使用。

以下三张图是资料提供的,第4张图是我自己推导的: SDRAM 的IC设计版图:

此主题相关图片如下:

注意:现在的SDRAM设计,存储电容另一端的参考电平是二分之一Vcc wordline理解为字线,digiline(bitline)理解为位线

此主题相关图片如下:

此主题相关图片如下:

  以现在的0.35um工艺,存储电容大约有300fF(1pF=1000fF)。现在的单颗芯片的容量越来越大,分到每个存储电容的芯片面积越来越小,电容容量也越来越小。这么小的电容存储的电量远不足以去开关mos管(因不了解芯片制造工艺,所以我有上面第12楼那不切实际的推导),采用的办法是用两个电容,一个正相存储,一个反相存储,这也是参考电压选vcc/2的原因;要读出数据时,用的是运放差分放大,一个电容搭在正相端,另一个搭在反相端,这样就把微弱的电量读出来了;而且由于电容电量实在太小,在向运放正反相端充放电时就几乎把电耗尽,也就是把自身的数据破坏了。  那么 precharge的任务之一就是将位线及运放正反向端搭在参考电位(Vcc/2)上,active时脱离此参考电位。

阅读(2628) | 评论(3) | 转发(0) |
0

上一篇:电平与分贝

下一篇:常用电平标准介绍

给主人留下些什么吧!~~

chinaunix网友2011-05-25 16:36:49

refresh is dump read ? dummy read 吧.

chinaunix网友2009-02-04 17:52:48

建议以下,要注意研究的方向和深度,太深会失去整体感,大方向,感觉杂而无规律等。

chinaunix网友2008-12-11 23:48:59

佩服版主的求知精神,推导能力! 但是有些理解是错的。比如“供能电容”。Precharge是使得bitline、bitlineB处于vcc/2,还有SAN,SAP也是。 refresh是dump read。 建议看看SA的资料。