ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SDRAM/DDR是怎么寻址的?

2019-11-09 20:02:52  阅读:301  来源: 互联网

标签:SDRAM DDR 地址 寻址 内存 DDR3 16bit CPU D0


SDRAM/DDR是怎么寻址的?

为了读取特定单元格的数据,在寻址时要首先确定是哪一个bank,然后在这个选定的bank中进行行列的寻址。在实际工作中,bank的地址与相应的行地址是同时发出的,此时这个命令称之为"行有效"或者“行激活”。在此之后,发送列地址寻址命令和具体的操作命令(读或写),这两个命令也是同时发送的。行列地址是可以复用的,一般来说DDR芯片的地址线为A0~A15,低地址线会被行列复用。以K4B4G1646B 4Gbit 256MB x 16bit内存芯片为例,A0~A14用做行地址,A0~A9用做列地址,这款芯片同时含有B0~B2用来选择bank。

在实际工作中,Bank地址与相应的行地址是同时发出的,此时这个命令称之为“行激活”(Row Active)。在此之后,将发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址。根据相关的标准,从行有效到读/写命令发出之间的间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲),我们可以理解为行选通周期。tRCD是DDR的一个重要时序参数,广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=3,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,DDR3-800,tRCD=3,代表30ns的延迟。 
 
图中显示的是tRCD=3 
接下来,相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的 I/O 接口之间还需要一定的时间(数据触发本身就有延迟,而且还需要进行信号放大),这段时间就是非常著名的 CL

下面来看一个具体例子。
该例子中,用两个16bit的DDR3内存拼成了一个32bit的DDR3.
每块16bit DDR3的大小为512M Bytes.
看看硬件上连接,我们这儿只关心地址线和数据线,CS, CK, CKE, CAS, RAS等暂时不考虑。
第一片16bit DDR3的BA0, BA1, BA2连接到了CPU的BA0, BA1, BA2。
第二片16bit DDR3的BA0, BA1, BA2也连接到了CPU的BA0, BA1, BA2。
第一片16bit DDR3的A0~A14连接到了CPU的A0~A14。
第二片16bit DDR3的A0~A14连接到了CPU的A0~A14。
第一片16bit DDR3的D0~D15连接到了CPU的D0~D15。
第二片16bit DDR3的D0~D15连接到了CPU的D16~D31。

分析下该实例。
bank address有三个bit,所以单个16bit DDR3内部有8个bank.
表示行的有A0~A14,共15个bit,说明一个bank中有2^15个行。
表示列的有A0~A9,共10个bit,说明一个bank中有2^10个行。
来看看单块16bit DDR3容量:
2^3*2^15*2^10=2^28=256M
我们的内存是512M,到这儿怎么变成256M了?被骗了?
呵呵,当然没有。
忘了我们前面一直提到的16bit。
16bit是2个byte对吧。
访问一个地址,内存认为是访问16bit的数据,也就是两个字节的数据。
256M个地址,也就是对应512M的数据了。
真相大白。卖内存的没骗俺。

再来看看两个16bit是如何组成一个32bit的。
有一个概念一定要清楚,这儿所说的两个16bit组成一个32bit,指的是数据,与地址没有关系。
我开始这一块没搞清楚,一直认为是两个16bit的地址组成了一个32bit的地址。然后高位地址,地位地址,七七八八。。。
之后没一点头绪。
将16bit/32bit指的是数据宽度之后,就非常明了了。
每一块16bit DDR3中有8个bank,2^15个row,2^10个column。也就是有256M个地址。
看前面的连线可知,两块16bit DDR3的BA0~BA2和D0~D14其实是并行连接到CPU。
也就是说,CPU其实认为只有一块内存,访问的时候按照BA0~BA2和D0~D14给出地址。
两块16bit DDR3都收到了该地址。
它们是怎么响应的呢?
两块内存都是16bit,它们收到地址之后,给出的反应是要么将给定地址上2个字节送到数据线上,要么是将数据线上的两个字节写入到指定的地址。
再看数据线的连接,第一片的D0~D15连接到了CPU的D0~D15,第二片的D0~D15连接到了CPU的D16~D31。
CPU认为自己访问的是一块32bit的内存,所以CPU每给出一个地址,将访问4个字节的数据,读取/写入。
这4字节数据对应到CPU的D0~D31,又分别被连接到两片内存的D0~D15,这样一个32bit就被拆成了两个16bit.
反过来,也就是两个16bit组成了一个32bit.
CPU访问的内存地址有256M个,每访问一个地址,将访问4个字节,这样CPU能访问的内存即为1G.

标签:SDRAM,DDR,地址,寻址,内存,DDR3,16bit,CPU,D0
来源: https://www.cnblogs.com/songwu/p/11827487.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有