F1--DDR3的应用总结(一)-2021.11.29

DDR3应用总结(一)

DDR3应用总结(二)
关于DDR3的使用,网上铺天盖地,看似热闹非凡,实则良莠不齐,鱼龙混杂。或遇滥竽充数,寻章摘句之人,不免误入歧途,费时费工。除此以外,网络文章多数对于DDR3的总结与描述或偏重原理,或偏重应用,尚不能统筹兼顾,做到井井有条,面面俱到。能够原理清晰,逻辑缜密,内容完整的描述DDR3的使用并非难事,然四通八达的网络上这样的文章如凤毛麟角,少之又少。吾将竭尽全力,述他人未尽之宜,追求全面与实用,不足之处,请各位批评指正。
下面附上镁光颗粒MT41K512M16HA-125AIT的datasheet,以及Xilinx官方的MIG使用手册,

1.从SDRAM到DDR

SDRAM: (Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步是指其时钟频率与CPU前端总线的系统时钟频率相同,并且内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失:随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写(区别于FIFO)。
DDR SDRAM 全称为 Double Data Rate SDRAM,中文名为“双倍数据流 SDRAM”。DDR SDRAM 在原有的 SDRAM 的基础上改进而来。如今,已经从最初的DDR1发展到DDR4、DDR5了。DDR(此处指DDR1代)的核心频率是等于工作频率的,之所以其速度是SDRAM的两倍是因为采用差分时钟的技术使得核心频率等于工作频率得情况下,读写速度是SDRAM的两倍,此时的1代DDR产品已经是两倍预取。从DDR1到DDR2实际上是从两倍预取变成了四倍预取,从DDR2到DDR3是从4倍预取变成了8倍预取。由此,使得在核心频率一致的情况下,DDR的新一代产品倍增了读写速度。DDR4的出现并没有像2代到3代时的那样,核心速率没变的情况下增加预取倍数。而是它将核心频率增加了一倍。(注:上述说的一倍的速度增加并不是绝对的。因为每一代DDR都会生产不同核心频率的颗粒)
那么什么是工作频率,核心频率,又怎么理解预取技术呢?且听下面分解。

2.以MT41K512M16HA-125AIT为例介绍DDR3颗粒

MT41K512M16HA-125AIT是镁光生产的DDR3颗粒。镁光(Micron)身为世界第二大内存颗粒制造商,常常在IBM等知名公司的产品上看到镁光的颗粒。

2.1介绍命名规则

截图取自(MT41K512M16HA-125AIT的datasheet)。
其中,MT41K字段表示镁光生产随机存储器;configuration字段代表存储容量的标识,512M16,512M代表物理地址个数,16代表每一个地址存储空间为16bit,MT41K512M16HA颗粒有16个行信号,10个列信号,3个banks,因此它的总共地址数为216x210x23=229=512x1024x1024=512Meg;Package字段代表的是封装类型,HA代表的即为96-ball 9.0mm x 14.0mm FBGA;Speed字段代表的是速度等级,CL即CAS Latency Control,指内存读写操作前列地址控制器的潜伏时间(这个内存颗粒的时序参数,想要深入学习,建议先从SDRAM学起)。125代表tck=1.25ns,CL = 11;其余字段顾名思义即可。
F1--DDR3的应用总结(一)-2021.11.29_第1张图片

2.2介绍物理管脚

ddr3_dq:DDR3双向数据总线(大多数颗粒都是16bit位宽)
ddr3_dqs_n、ddr3_dqs_p:DDR3数据选通差分信号
ddr3_addr:DDR3地址总线(地址线是行列复用的,因此就有了行列选通信号ras、cas)
ddr3_ba:DDR3 bank地址输入
ddr3_ras_n、ddr3_cas_n、ddr3_we_n:DDR3命令输入端
ddr3_reset_n:DDR3复位信号,低位有效,参考值是VSS,复位信号是异步于时钟的
ddr3_ck_p、ddr3_ck_n:DDR3输入时钟差分信号(这个时钟通常称之为“工作频率”)
ddr3_cke:DDR3时钟使能
ddr3_cs_n:DDR3片选,用于使能命令解释器
ddr3_dm:DDR3输入数据掩码(与SDRAM的掩码含义一样,就是屏蔽某几位,通常不用)
ddr3_odt:DDR3启用内部终端匹配电阻(大概意思是,当一个控制器连接多个DDR3颗粒时,由于数据线是各连各的,因此,相互之间会造成影响,通常在数据线上添加终端电阻消除这个辐射影响,从DDR3开始,这个电阻集成到了颗粒内部,并给出一个管脚供用户选择是否使能)
VREFCA:控制、命令、地址的参考电压。VREFCA所有时刻(包括自刷新)必须保持规定电压。(不同颗粒的要求不同,具体需要硬件工程师关注datasheet)
VREFDQ:数据的参考电压。VREFDQ在所有时刻(除了自刷新)都必须保持规定的电压。
VSS:接地
VSSQ:DQ地,为了降低噪声,在芯片上进行了隔离
ZQ:输出驱动校准的外部参考。这个脚应该接240ohm电阻到VSSQ
仅对颗粒的物理引脚做了介绍,并没有介绍读写操作的时序,这是因为,DDR3的读写操作相当复杂,xlinx,altera都提供了IP核帮助用户进行DDR3读写操作,因此,此处略去复杂的读写操作时序,如有兴趣想学习具体的操作时序,建议先从SDRAM学起。那么至于IP核怎么用,后面将会以xlinx的MIG IP核为例,详细介绍。

2.3内部结构

图1 存储单元示意 F1--DDR3的应用总结(一)-2021.11.29_第2张图片
F1--DDR3的应用总结(一)-2021.11.29_第3张图片
图2 存储单元内部结构示意
如图1所示为存储单元的示意图,此图代表一个bank中的存储单元。物理管脚的数据线的位宽实际上指的是这里的存储单元的位宽。如图2所示为图1中存储单元内部结构示意,bank地址、行地址与列地址选通使得存储电容与数据线导通,从而可进行放电读取与充电写入的操作。
F1--DDR3的应用总结(一)-2021.11.29_第4张图片
如图3截取自MT41K512M16HA-125AIT的datasheet,1、2号红色线框指的就是实际的物理引脚。中间的从Bank0~Bank7 memory array 的8个正方形就是是存储器内部的8个Bank。Row address MUX(行地址复用器)和Bank control logic(逻辑块控制器)共同控制Bank x row address latch and decoder(某逻辑块的行地址锁存),这样就锁定了将要操作的存储空间的Bank和row;再通过column address latch(列地址锁存)选通一列,这样就唯一地确定了DDR3中的一块存储空间。
1号框中的时钟线CK与CK#即为DDR的“工作频率(时钟)”,指的是实际的物理管脚时钟,数据线以及其他信号线应与此时钟对齐。“核心频率(时钟)”指的是3号红色框中的内核时钟,核心频率是指内存cell阵列的速度,是内存的真实运行速率,其值应该等于数据传输速率/DDR预取数(数据传输速率怎么计算,看后面)。结合这张图来说,每一个“核心频率”周期应该读(写)128bit数据给外围电路。一个存储单元只有16bit的空间,为啥能在一个时钟沿取到128bit数据,这就用到了预取技术。8倍预取技术(其他资料也称作8位预取,也描述为8n)是指,一个时钟沿可以取出8个地址的数据。所谓的预取技术指的是内核的一个时钟频率,可以连续读取多个地址空间的值。图中绿色椭圆框可以清楚看到使用FIFO进行位宽变换。
以核心频率为100Mhz(最高)举例,DDR3 8bit预取,因此每一个100M周期可以读(写)128bit数据。实际的物理管脚位宽是16bit,为了匹配内核产生的数据,一个100M周期在时间上等于4个400Mhz,加上管脚上的DDR(双沿模式),相当于管脚上有8次的数据可以处理,也就是16bit*8=128bit。这就是核心频率(时钟)与工作频率(时钟)的对应关系,这也是预取技术能够提升速率的关键原因。

那么换一个角度看,如果说某DDR3的数据IO可以运行在800Mhz,那么根据DDR,等效于1600Mhz单沿传输,那么8bit预取技术,就导致8个外部IO周期对应一个核心时钟周期,8个1600Mhz周期在时间上等于一个200M周期。在2.1节芯片的命名规则中,我们提到了speed字段,即速度等级,此处为125代表tck=1.25ns,取倒可得管脚IO可运行在800MHz下。
除此之外,核心频率还通过数据传输速率与工作频率相联系。核心频率值应该等于数据传输速率/DDR预取数,例如核心频率为100Mhz,8bit预取,那么传输速率为每一个800M(周期)传输16bit数据,通常说次速度为800MT\s,即每秒传输800M次,一次传输为16bit。
那么从值上看,800/8=100。这就是这个公式的来历。工作频率(又称IO缓冲器速度)指由于DDR是双沿触发,实际IO引脚的工作速率等于数据传输速率/2(400=800/2)。
图中还有一点是,绿色的矩形框中内容该如何理解?为啥要写成65535128128呢?不要忘了,这个图描述的是MT41K512M16HA-125AIT颗粒,该颗粒有16个行地址,10个列地址,3位bank地址表示的8个bank在图中一览无余。65535=216,就指的是行数;而128x128=210x16bit,也就是说65535x128x128这个式子的值等于一个bank的存储容量。写成128*x128的含义是,将128看作一个整体(这是因为8bit预取决定了每次读取16bitx8=128bit数据),而此式中的8可看作是连续的8个地址,也就是1行中的8列数据,也就是将23个地址看作整体,因此128x128=16bitx23x128。此时的128是因为原本10位的列地址,其中3位被当作一体,可配的只剩下7位,而27=128。仔细看,图中的列地址技术锁存器处也有体现。

3.问题

关于DDR3颗粒与内存条的区别。
内存条的位宽是直接可以和CPU相连的64bit,通常是有多片DDR颗粒组成,这就引入了物理Bank的概念(区别与上述的逻辑bank),物理 Bank是指传统内存系统为了保证 CPU 的正常工作,必须一次传输完 CPU 在一个传输周期内所需要的数据。而CPU 在一个传输周期能接受的数据容量就是 CPU 数据总线的位宽,单位是 bit(位)。当时控制内存与 CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于 CPU 数据总线的位宽,而这个位宽就称之为物理 Bank(Physical Bank)的位宽。另外,对于内存条的单通道和双通道技术应该是为了扩大内存条的容量而采用的技术。
还有一点是物理bank,即rank的含义RANK(物理Bank)。 目前以SDRAM系统为例,CPU与内存之间(就是CPU到DIMM槽)的接口位宽是64bit,也就意味着CPU一次会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条BANK,很多厂家的产品说明里称之为物理BANK(Physical BANK),目前绝大多数的芯片组都只能支持一根内存包含两个物理BANK,要准确知道内存条实际物理BANK数量,我们只要将单个芯片的逻辑BANK数量和位宽以及内存条上芯片个数搞清楚。各个芯片位宽之和为64就是单物理BANK,如果是128就是双物理BANK。
x86以上电脑的数据总线宽度都是64bit,即每次读取内存为64bit,SDRAM内存条的设计带宽也是64bit,内存条的带宽为条上各个内存芯片的带宽之和,基本条件为带宽之和应等于64bit或其倍数。假如出现了各个芯片位宽之和等于128。则分成两个64位,当读取一个64位部分时,另一个64位部分就不能读取,通常很多厂家就分别将这两部分放在内存的两面上。这就造成了许多人的错觉:双面是两个BANK的,单面是一个BANK的。实际根本不能这样认识,比如大多256MB内存,尽管两面16个芯片,但是由于内存芯片的位宽是4位(32Mbit×4),所以必须要有4×16=64才能达到系统所要求的位宽。这时由于芯片大小的限制,不可能将16颗芯片都放在一面上,所以只能设计成双面。对于64Mbit芯片 (4Mx16) 来说,芯片带宽16bit,8颗芯片带宽=16x8=128bit(即两个BANK),4颗芯片带宽=16x4=64bit(即一个BANK)。两个物理BANK的情况只有出现在位宽超出了64位的情况下(即位宽出现了富余),由于芯片组任一时刻只能处理一个64位,所以才分成两个物理BANK。

你可能感兴趣的:(FPGA积累——基础篇,ddr,sdram,fpga,verilog)