[攻克存储] 掌握SDRAM/DDR的结构与寻址

  [攻克存储] 掌握SDRAM/DDR的结构与寻址
2011-10-12 20:45:24
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://ticktick.blog.51cto.com/823160/686447

     本系列前面两篇文章《[攻克存储] SRAM地址线的连接》和 《[攻克存储] 存储芯片的写屏蔽及扩展》已经介绍了SRAM芯片的地址线连接方法以及存储芯片的写屏蔽扩展,这两篇文章基本上是从SRAM的角度在进行讲解和描述,其中许多原理在SDRAM/DDR芯片中也同样适用,不过,SDRAM/DDR 存储芯片的结构和寻址方式相对于ROM、SRAM、DRAM而言,还是有很大的变化和不同的,本文就着重介绍SDRAM/DDR的相关知识点和应用注意事项。

    在存储结构上,SDRAM/DDR采取了多Bank方式,每一个逻辑Bank即为一个存储阵列,一般一个SDRAM芯片有2~8个Bank。我们可以把Bank想象为一个表格,如下:    

      图中的Bank是一个14行17列的逻辑存储结构,假设该SDRAM芯片有4个Bank,则其存储空间为:4 x 2^14 x 2^17  bit = 2^33 bit =  1GB

     在寻址方式上,首先,多了几个Bank选择引脚,例如对于4个Bank的SDRAM,则有2个引脚(BA0~BA1)进行Bank选择。当具体Bank选定后,再给出行列地址从而定位到具体的存储位置。而行列地址值由相应的地址线引脚分时复用得到。

     下面研究一个具体的SDRAM电路图,如下图所示,该图为ARM芯片s3c2440与SDRAM芯片HY57V561620的连接示意图。
 
   
    该SDRAM芯片为 HY57V561620 ,有4个Bank,16位宽数据线,32M的存储空间。该芯片的引脚功能描述如下:
 
 
    重点关注地址线 A0~A12的说明,我们可以到,该芯片每一个Bank有13行(RA0~RA12),9列(CA0~CA8),行寻址时使用A0~A12,列寻址分时复用,只使用了CA0~CA8。并且,相比于SRAM芯片,多了nRAS、nCAS引脚,用于标识当前是行寻址还是列寻址,从而实现地址线的分时复用。
 
    我们可以通过下面的时序图,来更加直观地了解一下SDRAM是如何寻址的:

[第一步] 选择Bank,同时给出行地址 
 

    

[第二步] 给出列地址,得到数据
 

   

 
   到此,基本上算是把 SDRAM/DDR 的结构和寻址讲完了,当然,关于SDRAM/DDR还有很多其他的相关知识点,比如 CAS 延时,比如 时钟频率,比如 DRAM/SDRAM/DDR2 的详细区别等等,将在后面的文章中陆续讲述。
 
   最后,再补充点内容,关于上面ARM芯片s3c2440与SDRAM芯片HY57V561620的连接图,有一个细节,即为什么SDRAM芯片的BA0~BA1连接的是ARM芯片的LADDR24~LADDR25引脚?
 
   因为,HY57V561620为32MB的SDRAM芯片,我们知道,32MB的存储空间是需要 25 根地址线寻址的,由于BA0~BA1引脚决定了访问第几个Bank,即决定了存储空间的最高两位,因此,需要使用ARM的25根地址线中的最高两位来连接 BA0~BA1,这样就可以满足寻址的映射要求了。
 
   SDRAM/DDR的结构与寻址就介绍到这里,欢迎对文中错误以及不够清楚的地方提出意见和建议,留言或者来信lujun.hust@gmail.com进一步交流。
 



 在嵌入式系统设计过程中,由于主控芯片(如ARM、PPC、MIPS等)片上的存储空间不够大,经常需要外接存储器芯片(如ROM、SRAM、SDRAM、DDR2、Nand Flash等),因此,弄清楚主控芯片与外界存储芯片的引脚连接原理至关重要,由于Nand Flash的引脚连接比较简单,不涉及地址线的连接,而SDRAM和DDR2访问原理与ROM和SRAM有一些不同,故以后再专门讲述,这里我将主要介绍ARM与ROM、SRAM这两种存储芯片的连接。
     首先,我们看一个电路图。

    这个电路图为三星公司的ARM芯片s3c2440与1片128KB的SRAM芯片的连接原理图。其中,SRAM芯片的引脚与图中芯片方框图中所标示,而ARM芯片的引脚则为导线上的标号。
 
    初学者可能会有几个疑问,为什么SRAM芯片的A0地址引脚连接的是ARM芯片的A1引脚呢?那什么情况下SRAM芯片的A0连接ARM芯片的A0引脚呢?
 
    首先,我们分析一下图中的 SRAM芯片,该芯片有A0~A15一共16根地址线,有D0~D15一共16根数据线,故其存储空间为 2^16 * 16 bit = 2^17 * 8 bit = 2^17 byte = 128KB
 
    我们知道,要寻址 128KB 需要 17 根地址线(128 = 2^17 ),然而SRAM芯片的地址引脚却只有16根,ARM端该如何给地址线呢?
 
    由图可以看出,SRAM芯片的数据总线是16位宽,即一次传输2个字节的数据。因此,我们可以这样理解,即 一个地址空间其实对应着2个字节的数据,实际上真正的寻址空间只有64KB而已,16根地址线足够。这样ARM端并不需要将17根地址线全部连接到SRAM芯片上,只需要给出高16位地址(A1~A16),然后,SRAM芯片即根据这16根地址找到对应的地址空间,将该地址空间的2个字节发送到数据总线上,然后ARM端根据未连接到SRAM芯片的A0的电平,来决定具体是取高字节,还是低字节。
 
     由这些分析可以推出一个规律,即 ARM端的地址线到底是 A0 、A1 还是 A2 连接 存储芯片的 A0,取决于存储系统的数据总线位宽,如果是 8位则A0->A0,如果是16位则A1->A0,如果是32位则A2->A0。
 
     大致搞清楚了上面的原理后,ARM与存储芯片的连接方法也就很清晰了,下面给几张分别描述了各种情况下的ARM与存储芯片的连接示意图(截取自s3c2440的datasheet)。

   

【说明】:上图的ROM为 2^16 x 8 bit = 64KB ,由于数据总线为8位宽,故一个地址空间对应着1个字节,故ARM端的A0连接ROM的A0

【说明】:上图中,由两片8位宽64KB的ROM构成了一个16位宽的存储系统。

【说明】:上图中,由四片8位宽的ROM构成了一个32位宽的存储系统。

   那么,留一个小问题供大家思考,如果将ARM的A0~A15引脚连接一个16位宽的SRAM的A0~A15引脚,会发生什么现象?
 
   注,本文讨论的ARM芯片是没有类似SDRAM Controller这样的存储器控制器的ARM芯片,对于有类似SDRAM Controller模块的ARM芯片,它会根据寄存器配置的外接DDR芯片数据位宽,在硬件上将ARM的地址线引脚进行的左移操作,例如当数据位宽为16位时,硬件上将ARM的A1脚的电平移至A0,依次类推。所以,这样的ARM芯片不需要根据本文的方法连接,而直接将ARM端的A0~Ax 连接到存储器的 A0~Ax 即可。
 
   后记:最近研究了一下嵌入式存储系统,包括SRAM,SDRAM,DDR2等,准备写几篇总结的文章,本文为第一篇,简单讲述了一下SRAM和ROM芯片与ARM的地址线连接,如果有写得不清楚或者不正确的地方,希望各位不吝赐教,留言或者发送邮件到lujun.hust@gmail.com探讨。

 

本文出自 “对影成三人” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/686447


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值