主要内容:DDR寻址容量设计的概念理解示例。
DDR的数据存储在不同的bank上,你知道具体是如何通过数据总线和地址总线的配合,拿到所需的数据吗?通过下面这样一个简单的问题,我们来逐渐了解这个过程的实现。
DDR寻址容量设计
假如我们用20根地址线,16根数据线,设计一款DDR,我们能设计出的DDR寻址容量有多大?
传统的单线编码寻址的DDR容量是计算的:2^20 * 16bit = 2BM? 显然这个内存空间太小了。
实际上如果DDR的内存颗粒位宽是16bit,通过设计,20根地址线可以把该DDR最大容量做到1GB。利用的是分时复用技术。
1)首先我们可以把存储空间分成两个大块,分别是BANK GROUP0(BG0) 和BANK GROUP1(BG1)。用1根地址线表示是BG0,还是BG1。
2)然后再让1个BANK GROUP区域分成4个BANK小区域,分别命令为:BANK0、BANK1、BANK2、BANK3。用2根地址线为这4个小BANK进行地址编码。
3)此时,20根地址线已经用取了3根,还有17根。系统信号设计为传输2次地址,再传输一次数据为一个周期(原来是1次地址+1次数据)。我们将这17根拿出1根用来表示行地址,和列地址的区分。
在第1次传输时,行地址选择使能,剩下16根线表示行地址范围,可以得到行地址范围为2^16=64K个。
在第2次传输时,行地址选择使能关闭,表示列地址,16根线使用10根表示列地址范围,剩下6根用来表示读写状态/刷新状态/复用等功能。列地址的表示范围为2^10=1K个。
这样1个BANK就划分成了64K*1K=64M个地址编号。每个存储单元是16bit,所以这个DDR芯片可以表示的内存容量就是:64M * 16bit * 4BANK * 2BANK GROUOP = 1GB。
每行存储1K*16bit = 2KB, 每行的存储容量称为Page Size。
至此,20根地址线和16根数据线全部分配完成,我们用正向设计的思维方式,为大家讲解了DDR4的存储原理以及接口定义和寻址方式。
Burst Type 按对Burst Order的概念
下面引入另外一个和地址线的分配相关的Burst的概念。
你可能会发现,一个DDR4标记的列地址数据范围很可能不是上面分析的10bit,而是7bit。这是为什么呢?
上图中明显可以看出,列地址编码只使用了7bit。在JESD79-3规范中有如下的这个表格,可以发现,Column Address的A2,A1,A0三位被用于Burst Order功能,并且A3也被用于Burst Type功能。
形象地理解就是对于一个Bank里面的Memory Array,每个Memory Cell可以看作是一个Byte的集合体。CA[9:3]选中一行中的一个特定Byte,再由CA[2:0]选择从这个Byte的哪个位置开始操作。CA3既参与了列地址译码,也决定Burst是连续读取还是交错读取。(感觉CA3的指示有点像是否把连续2个位置的值颠倒一下?)
来源:深入浅出:全面解读DDR内存原理 - 墨天轮