精华内容
下载资源
问答
  • DDR4原理及硬件设计

    千次阅读 多人点赞 2021-02-10 22:43:52
    DDR4的工作原理以及寻址方式 DDR4是什么? DDR4全称,DDR4-DRAM,与其他DDRDRAM一样,是当前电子系统架构中使用最为广泛的的RAM存储器。 这句话可以分解出3个关键字:存储器、DRAM、DDR4。 先说存储器, 说到存储,...

    DDR4的工作原理以及寻址方式

    DDR4是什么?

    DDR4全称,DDR4-DRAM,与其他DDRDRAM一样,是当前电子系统架构中使用最为广泛的的RAM存储器。
    这句话可以分解出3个关键字:存储器、DRAM、DDR4。

    先说存储器,
    说到存储,顾名思义,它是个动词,以生活为例,假如有个酸奶,你不想吃的时候,将酸奶存到某冰箱、某层、某个位置,当你想吃的时候,在某冰箱、某曾、某个位置中取出该酸奶。
    这个过程,我们称为存储,结合生活,我们可以看到存储要有3个关键动作:

    1.  酸奶放哪了,你得知道。如果不知道放哪了,酸奶就跟丢了一样。这个过程,映射到电子领域中,称为“寻址”。
      
    2.  存储酸奶、取出酸奶。你需要先走到某冰箱跟前,拉开某层抽屉,在具体某个位置,拿出酸奶,这个过程,映射到电子领域中,称为“读/写”
      
    3.  酸奶放到那个位置,在需要的时候,得还能吃。这个过程,映射到电子领域中,称为“数据保存”。
      

    所以,概括一下,存储器就是“可以寻址”、“能读写数据”、“能保存数据”的一种电子器件。

    我们再说说DRAM。
    DRAM全称Dynamic Random Access Memory,翻译过来为动态随机读取存储器。所谓随机,指的是“想存哪个位置,就存哪个位置”,听起来很自由,很灵活。所谓动态,指的是保存数据过程中,需要不断的补充电量,听起来很耗电,很费劲,为啥我们还要用DRAM结构?因为在电路结构上,DRAM结构比SRAM简单很多。

    最后说说DDR。
    我们聊到DDR,大家都会联想到存储器,但是实际上DDR并不指代存储器,DDR实际是一种技术,全称Double Data Rate,翻译过来为双倍速率,只是这都技术广泛使用在DRAM上,所以人们习惯将DDR代指为存储器,所以宝宝们在后续的硬件设计过程中,在其他总线上看到DDR,请不要惊慌,因为你看到的DDR可能不一定和存储有关。那双倍速率指的是什么?我们可以简要说下,初代存储器在读写数据时,每次都在时钟信号从低变高或从高变低时,采样数据,在1个时钟周期,只能采样1个数。后续聪明的人类在时钟从低到高时,采样一个数据,时钟从高到低时,再采样1个数据,一个时钟周期,可以采样2个数据。所以读写速度比以前快了2倍。这种技术手段,就指的是DDR。如果看不懂“时钟”和“采样”这段话的,那……

    所以,概括下:DDR4-DRAM是第四代支持双数据读取,支持随机位置存取的静态存储器

    DDR4-DRAM的工作原理
    在这里插入图片描述
    其引脚按照功能可以分为7类:前3类为电源、地、配置。
    在这里插入图片描述
    后4类为:控制信号、时钟信号、地址信号、数据信号
    在这里插入图片描述
    电源、地、配置信号的功能很简单,在此不赘述。控制信号主要是用来完成DDR4与DDR4 Controller之间的状态切换。

    DDR4中最重要的信号就是地址信号和数据信号。

    如上DDR4芯片有20根地址线(17根Address、2根BA、1根BG),16根数据线。在搞清楚这些信号线的作用以及地址信号为何还有复用功能之前,我们先抛出1个问题。假如我们用20根地址线,16根数据线,设计一款DDR,我们能设计出的DDR寻址容量有多大?

    按照课本中学到的最简单的单线8421编码寻址的方式,我们知道20根地址线(连读写控制信号都不考虑了)的寻址空间为2^20,16根数据线可以1次传输16位数据,我们能很容易计算出,如果按照单线8421编码寻址方式,DDR芯片的最大存储容量为:

    Size(max)=(2^20)x16=1048576x16=16777216bit=2097152B=2048KB=2MB。

    但是事实上,该DDR最大容量可以做到1GB,比传统的单线编码寻址容量大了整整512倍,它是如何做到的呢?
    答案很简单,分时复用

    我们把DDR存储空间可以设计成如下样式:
    首先将存储空间分成两个大块,分别为BANK GROUP0和BANK GROUP1,再用1根地址线(还剩19根),命名为BG,进行编码
    若BG拉高选择BANK GROUP0,拉低选择BANK GROUP1。(当然你也可以划分成4个大块,用2根线进行编码)
    在这里插入图片描述
    再将1个BANK GROUP区域分成4个BANK小区域,分别命名为BANK0、BANK1、BANK2、BANK3。然后我们挑出2根地址线(还剩余17根)命名为BA0和BA1,为4个小BANK进行地址编码。
    在这里插入图片描述
    此时,我们将DDR内存颗粒划分成了2个BANK GROUP,每个BANK GROUP又分成了4个BANK,共8个BANK区域,分配了3根地址线,分别命名为BG0,BA0,BA1。然后我们还剩余17根信号线,每个BANK又该怎么设计呢?这时候,就要用到分时复用的设计理念了。

    剩下的17根线,第一次用来表示行地址,第二次用来表示列地址。

    原本传输1次地址,就传输1次数据,寻址范围最多16KB(不要读写信号,(2^17/1024)/8=16KB)。
    现在修改为传输2次地址,在传输1次数据,寻址范围最多被扩展为2GB(2^17 * 2 ^17/2 ^30)/8=2GB)。虽然数据传输速度降低了一半,但是存储空间被扩展了很多倍。这就是改善空间。

    所以,剩下的17根地址线,留1根用来表示传输地址是否为行地址。

    在第1次传输时,行地址选择使能,剩下16根地址线,可以表示行地址范围,可以轻松算出行地址范围为2^16=65536个=64K个
    **在第2次传输时,行地址选择禁用,剩下16根地址线,留10根列地址线表示列地址范围,可以轻松表示的列地址范围为2^10=1024个=1K个,**剩下6根用来表示读写状态/刷新状态/行使能、等等复用功能。

    这样,我们可以把1个BANK划分成67108864个=64M个地址编号。如下所示:
    在这里插入图片描述
    在每个地址空间中,我们16根数据线全部用起来,一次存储16位数据
    在这里插入图片描述
    所以1个BANK可以分成65536行,每行1024列,每个存储单元16bit。
    每行可以存储1024x16bit=2048B=2KB。每行的存储的容量,称为Page Size。
    单个BANK共65536行,所以每个BANK存储容量为65536x2KB=128MB。
    单个BANK GROUP共4个BANK,每个BANK GROUP存储容量为512MB。
    单个DDR4芯片有2个BANK GROUP,故单个DDR4芯片的存储容量为1024MB=1GB。

    至此,20根地址线和16根数据线全部分配完成,我们用正向设计的思维方式,为大家讲解了DDR4的存储原理以及接口定义和寻址方式。

    DDR4硬件详细设计

    DDR的硬件设计步骤

    作为硬件工程师,我们通常收到需求是:该产品内存配置为DDR4,容量8Gb(1GB=8Gb)。
    而我们通常需要把这个“简陋”的需求,转化为具体的电路,该如何去实现呢?
    其实,很简单。DDR4的硬件设计过程可以总结为:为某个平台搭配一颗DDR内存颗粒,并保证平台与DDR内存颗粒均能正常工作
    所以可以分为2部分,如何为平台选型1颗DDR内存颗粒?如何保证DDR相关电路能正常工作?

    DDR内存颗粒选型

    目前很多芯片都会把CPU与外围控制电路(例如:FLASH控制电路,DDR控制电路,USB控制电路)集成到1颗芯片中,像高通MDM8909,类似这样的芯片,我们称为“平台芯片”。平台芯片中DDR控制电路,我们称为“DDR Controller”,翻译过来为:DDR控制器。
    为DDR控制器搭配它能控制的DDR内存颗粒,你就必须先了解下:DDR控制器需要什么样的内存颗粒?
    硬件设计第一步:查阅平台芯片规格书中,关于DDR控制器部分的描述。

    It has 16/32 bits DDR3L/4 up to 2400 MT/s, parallel NAND, serial NOR interfaces.
    在这里插入图片描述
    所以我们了解到了:

    该平台芯片,支持DDR3L或者DDR4内存颗粒,数据位宽为16位或者32位,最高数据传输速度为2400MT/s,即频率为1200MHz(DDR是双边沿数据传输,1个时钟周期传输2次数据,1s传输了2400M次,即意味着1s时钟变化了1200次,即频率为1200MHz)。

    结合产品需求:容量8Gb,那我们基本可以锁定DDR的详细规格了。

    在正式选型之前,还要引入1个概念“RANK”。我们知道,DDR即支持多个内存颗粒扩展容量,又支持多个内存颗粒扩展数据位宽。
    例如,我们的DDR控制器支持32位数据位宽,那我们可以用8个4位DDR,或者4个8位DDR,或者2个16位DDR,或者1个32位DDR进行数据位扩展。假如我们用8个4位DDR颗粒进行设计,我们的RANK数量就是8,我们戏称为“8-RANK设计”,当然实际生活中,我们肯定不会这么蠢,拿8个4位DDR去扩展32位。

    所以,再确定我们的RANK数量后,需求被锁定了。
    容量设定为8Gb,类型为DDR4,数据宽度为32位,最高频率为1200MHz。由于目前大部分DDR内存颗粒最高支持16位数据宽度,所以RANK数量为2,即我们说的Dual-RANK设计。
    根据这个需求,可以在DDR官网上去寻找合适的“DDR芯片”了。例如在镁光官网产品页,选定DRR4-SDRAM,选定8Gb,DDR4。
    在这里插入图片描述
    网页会为你推荐很多型号。像数据位宽是8位的,可以直接跳过。
    在这里插入图片描述
    数据位宽为16位,频率为1200Mhz(2400MT/s)的,仍然有很多。这时候就是考验硬件工程师职业素养的时候了,我们不仅要考虑硬件性能,还要考虑下物料成本,物料采购周期。考虑成本,就尽量不要有“过设计”的地方,所以速率为3200MT/s的器件排除掉。如果我们是消费类商规产品,所以温度范围选择较窄的商业级器件,其次,为了增进你和采购的感情,

    在这里插入图片描述
    这样下来,我们选型基本就锁定到MT40A512M16JY-083E了,用量为2片(容量16Gb了)。
    此时,开始阅览器件规格书,了解电气性能,设计外围电路,让DDR控制器和DDR内存颗粒都欢快的运行起来。

    DDR的硬件电路搭建

    设计逻辑器件电路,就要有逻辑思维,最简单的逻辑思维,就是分组。
    所以,先了解DDR控制器的硬件接口。控制器硬件PIN脚可以分为电源组,配置组,控制组,时钟组,地址组,数据组。

    电源组和配置组接口如下,供电,接电阻就可以完成,1.2V的供电,尽可能要平稳,此处忽略。ZQ电阻是用来校准ODT阻抗的,我们后面会讲到。
    在这里插入图片描述
    控制组接口如下。
    在这里插入图片描述
    分好组后,就要根据DDR的工作原理来进行外围硬件设计了。

    控制信号中,需要注意CS0和CS1,2个片选信号的可以用来进行多RANK内存容量扩展的,说明DDR控制器,最多支持2组RANK
    每组RANK分配单独的片选信号。我们此处设计2个16位芯片组成1个RANK,即CS0要同时接在目前选的2个DDR颗粒的CS上,组成菊花链。其余控制信号一般无时序要求,能传递逻辑即可。

    地址信号通常要参考时钟信号,来进行寻址,所以地址信号要严格与时钟信号保持长度一致,来保证所有地址位在采样的时候同时到达。因为同一块单板上,每根线上电子的传递速度是一样的,所以信号线长度约长,信号越晚到达,信号线长度越短,信号越早到达,地址采样的时候,是有时间期限的,所以,所有的地址信号必须保证在采样时间范围内,全部到达,因此要求地址线相对时钟线进行长度控制。前面一节我们讲了内存寻址原理,先用BG信号选择BANK GROUP,再用BA信号进行BANK选择,再用A[0:16]进行行选择,再用A[0:16]进行列选择,完成寻址。可以看到,Address信号在进行行选择和列选择时,BG和BA信号都是保持的,所以BG信号和BA信号的等长要求会相对略宽。

    DDR控制器有2根BG信号,2根BA信号,17根Address信号。
    同一个RANK有2个DDR颗粒,每个DDR颗粒有1根BG信号,2根BA信号,17根Address信号,前面CS0同时连接了2个DDR颗粒的片选,所以寻址时两颗DDR会被同时片选,那么DDR控制器如何区分开寻址其中1颗DDR颗粒呢?硬件又该怎么连接?

    其实很简单,根据上节讲的内存寻址原理,我们知道每个DDR颗粒有2个BANK GROUP(1根BG信号),4个BANK(2根BA信号),与CS扩展容量的原理一致,我们把BG0接在DDR颗粒1上,BG0拉高拉低,我们可以寻址CHIP1的8个BANK。BG1接在DDR颗粒2上,BG1拉高拉低,我们可以寻址CHIP1的8个BANK。BA、ADDR进行菊花链连接,同时接在2颗DDR芯片上。

    接下来,我们看看数据信号的链接,数据信号是内部分组的,由于DDR数据信号传输的时候双边沿数据传输,而且如果所有信号都参考时钟去做等长,会导致等长控制非常困难,增加DDR的设计难度,所以聪明的人类想出了另外一招,额外增加数据选通信号来作为数据信号的采样时钟,每8位信号,参考一组差分。
    所以我们很轻易可以看出DDR控制器有4组DQS差分信号,32根数据信号。我们的RANK中有2个DDR颗粒,每个颗粒有2组DQS差分信号,16根数据信号。
    所以

    控制器的DQS[0:1]连接DDR CHIP0的DQS[0:1],
    控制器的DQ[0:15]连接DDR CHIP0的DQ[0:15]。
    控制器的DQS[2:3]连接DDR CHIP1的DQS[0:1],
    控制器的DQ[16:31]连接DDR CHIP1的DQ[0:15]。

    至此所有信号连接完成。

    接下来是阻抗匹配,地址信号都需要外部加49欧姆匹配电阻到电源或者GND,数据信号,则不需要。因为DDR内部集成ODT功能,只需要通过配置,即可完成每组数据线的阻抗匹配。

    特性与电气参数

    DDR4有哪些特性?

    DDR系列有DDR,DDR2、DDR3、DDR4、DDR2L、DDR3L、DDR4L、以及最新出现的DDR5。虽然技术在不断进步,但是每一代之间又有很多相似之处。我们观察下DDR主流系列产品的特色,就不难发现规律。
    在这里插入图片描述
    很明显,电压越来越低了,频率越来越高了,数据总线由单端发展为差分了。我们发现这与总线的发展史有异曲同工之妙。

    科技的根源仍旧是人类最普通的智慧,不信?那我们来举个不恰当的李子,栗子,例子。假如河的这边有很多李子,河的对面有很多栗子,如果只用人力,尽可能快的把河对面的栗子和这边的李子来回搬运,你有哪些办法?你会很轻易地提出若干方案,多找人同时搬;找游泳快的兄弟;在河比较窄的地方搬;2个人为一组,A扔李子,B扔栗子….

    你想你故在,聪明的前辈们也和你一样,把这种思维运用在了DDR的设计上。最开始找了很多人一起搬,所以DDR最开始是并行走线设计;后来找游泳快的人,所以DDR的频率在不断提高;游泳快但是累啊,得找窄点的地方游,所以DDR工作电平越来越低(电流传输速度是一定的,所以电压越低,耗时越短)。一直来回游泳也不是个事啊,能不能两人成组,你负责搬0,我负责搬1,所以DDR总线逐渐也在由并行向差分演进。

    如上就是DDR的技术发展规律,也是很多总线的发展规律。掌握规律,我们再来看特性,DDR4电平1.2V,DQS信号走差分,频率在1600Mbps~3200Mbps.

    DDR4有哪些关键信号?

    DDR4都有哪些关键信号呢?一张图就可以看明白。有CK,ADDR,DQS,DQ,DQM信号,在电路之外,还能看到使能,复位,ODT,ZQ。
    在这里插入图片描述
    那么这些信号都有什么作用?我们接下来做简要介绍。

    1. CK,Address,DQS,DQ,DM信号都有哪些作用?
      CK是DDR的数据通信时钟信号,当CK和Address信号配合工作时,可以进行CMD(命令)操作和Address(地址)信号传输。由于地址信号和命令信号在DDR操作过程中属于控制信号,相对DDR的数据传输,属于小众场景,所以DDR的地址信号和CMD信号目前仍然走的是单端走线,工作频率比起数据传输也比较低。所以我们不难发现,ADDR信号仍然是单端信号,且大部分匹配电阻仍然外置。

    由于数据传输才是DDR的主要业务,所以在DDR进行数据传输时,需要增加额外的措施来保证数据传输,所以DDR4增加了新的角色,DQS,DQ,DM信号。

    数据选取脉冲(DQS)是DDR中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由CPU发来的DQS信号,读取时,则由DDR生成DQS向CPU发送。完全可以说,它就是数据的同步信号。甚至可以这么说,CK和DQS配合起来,作为DQ数据线的参考时钟,这也是为什么走线时,DQS和DQ要放到一起考虑的原因。

    在数据连续传输过程中,随着时钟的变化,CPU可能会读取到DDR中位置1,位置2,位置3,位置4的数据,假如在这个连续传输过程中,CPU不想要位置2的数据,又不想中断数据传输,那么有什么办法呢?DQM就派上用场了,在传输到位置2时**,DQM使能,就可以屏蔽掉位置2 的数据。**

    1. 什么是ODT?
      芯片终端端接匹配电阻On-Die Termination简称为ODT。ODT是从DDR2后期的产品才开始出现的,并随着产品的升级,ODT呈现更多的数值。当前,ODT主要是用于数据(data,DQ)、数据选通(DQS/DQS#)和数据掩码(Data Mask,DM)三类信号线。ODT的功能就是代替了常规的电路匹配设计,使原本在芯片外部的分立端接电阻集成到芯片内部,其简化电路结构如下图所示。
      在这里插入图片描述

    ODT电路的引入,是DDR发展的里程碑,ODT有如下优势:

    去掉了PCB板上的分立端接电阻元件,降低了硬件设计成本。
    由于没有端接电阻,使PCB设计有更多的布线空间,方便EDA布线。
    由于ODT通过内部的寄存器进行调节,可以通过软件开启和关闭,减少了调试工作量。
    芯片内部端接比板级端接更加有效,这样没有过多的寄生效应。
    减少了外部元件的数量,在可靠性上也获得了优化。

    ODT的引入,为进一步提高DDRx内存的工作频率做了铺垫。当然,ODT也并不都是优点,因为使用了ODT,匹配电阻的种类和数值已经确定并无法修改;在某种程度上也会带来一定的功耗增加,所以在一些消费类的产品上也并不都是开启ODT功能。

    1. 什么是ZQ校准?
      ZQ是DDR3之后新增的一个引脚,而DDR3正是通过ZQ进行输出电阻(Ron)和 ODT的校准,这个校准过程在DRAM初始化过程中都会完成。ZQ在原理设计上比较简单,ZQ引脚通过一个低公差240Ω(一般公差为1%)的电阻直接连接到地即可。

    除了眼图,DDR4还看那些电气参数?

    DDR4设计是否设计OK,就需要看DDR4的量测参数是否满足JEDEC规范。那规范中都定义了哪些电气参数呢?每个电气参数又代表了什么意义?接下来我们做简要介绍。

    1. 过冲与下冲。
      信号如果在传输过程中阻抗不连续,就会出现反射,反射表现在示波器波形上,就是信号上冲和下冲,在DDR设计过程中,我们关注的不是信号在某个时间点的过冲幅值,而是过冲在时间维度的积分。关注的是一个过程,而不是一个点。
      在这里插入图片描述
      对于每个信号,协议规范都会在这4个维度上对信号完整性进行定义规范。
      在这里插入图片描述
      在这里插入图片描述
    2. 信号的高电平和低电平。
      在高速信号传输中,信号能否达到协议规定的高电平最低门限和低电平最高门限,也直接决定了产品的稳定性。在DDR规范中,单端地址和控制命令、单端数据和数据掩码信号的AC和DC输入电平,差分时钟和数据选通信号的AC和DC输入电平都会被明确定义。仿真和测试过程中,只需要关注特定场景下的实测值有无达到协议规定值即可。

    在这里插入图片描述
    3. 差分信号交叉点电压。
    为了满足信号的建立和保持时间,差分信号单端交叉点必须保证在一定的范围内。
    在这里插入图片描述
    交叉点以V DD/2作为参考电压,测量的是相对于V DD/2的偏离,偏离得越小越好。
    在这里插入图片描述
    4. 时序要求。
    有时序关系要求的主要有3组:地址、控制和命令信号与时钟信号之间;数据选通信号与时钟信号之间;数据、数据掩码与数据选通信号之间。所以在PCB设计时,也按信号进行分组设计,地址、控制和命令信号与时钟信号作为一组,数据、数据掩码信号与数据选通信号每一个字节作为一组,相同组的信号在设计时基本会保持长度相差在一定的范围之内,并且设计的方式基本一样(如同组布线在同层、有相同的过孔数等),这样才能保证满足时序的要求。

    1. 斜率降额。
      总线的规范中有两种测量斜率的方式,分别是常规的测量方式和切线测量方式,以地址、控制和命令信号为例,其定义如下图所示。
      在这里插入图片描述
      这两种测量方式主要由获得波形的质量决定,如果波形的单调性比较好,则以常规方式测量;如果单调性不好,出现一些回钩或台阶,则用切线方式测量。
      图中红色框框代表常规斜率测量方法,绿色箭头代表切线方式测量方法。在DDR中,信号的建立和保持时间并不是唯一不变的,会随着斜率的变化而变化,为了弥补斜率造成的影响,在仿真最终的“建立和保持时间”时,测量的时序参数需要与降额参数相加。降额参数与信号的斜率和时钟/数据选通的斜率有关。

    转自-------每日硬知识

    展开全文
  • 计算机原理学习 内存工作原理计算机原理学习之内存工作原理1. 内存工作原理CPU 和内存是计算机中最重要的两个组件,前面已经知道了CPU 是如何工作的,上一篇也介绍了内存采用的DRAM 的存储原理。CPU 工作需要知道...

    计算机原理学习 内存工作原理

    计算机原理学习之内存工作原理

    1. 内存工作原理

    CPU 和内存是计算机中最重要的两个组件,前面已经知道了CPU 是如何工作的,

    上一篇也介绍了内存采用的DRAM 的存储原理。CPU 工作需要知道指令或数据的内存地

    址,那么这样一个地址是如何和内存这样一个硬件联系起来的呢?现在就看看内存到的是

    怎么工作的。

    1.1 DRAM 芯片结构

    上图是DRAM 芯片一个单元的结构图。一个单元被分为了N 个超单元(可以叫做cell ),

    每个单元由M 个DRAM 单元组成。我们知道一个DRAM 单元可以存放1bit 数据,所以描

    述一个DRAM 芯片可以存储N*M 位数据。上图就是一个有16 个超单元,每个单元8 位的

    存储模块,我们可以称为16*8bit 的DRAM 芯片。而超单元(2,1 )我们可以通过如矩阵的

    方式访问,比如data = DRAM[2.1] 。这样每个超单元都能有唯一的地址,这也是内存地址

    的基础。

    每个超单元的信息通过地址线和数据线传输查找和传输数据。如上图有2 根地址线和8 根

    数据线连接到存储控制器(注意这里的存储控制器和前面讲的北桥的内存控制器不是一回

    事),存储控制器电路一次可以传送M 位数据到DRAM 芯片或从DRAM 传出M 位数据。

    为了读取或写入【i,j】超单元的数据,存储控制器需要通过地址线传入行地址i 和列地址

    j 。这里我们把行地址称为RAS(Row Access Strobe)请求, 列地址称为(Column Access

    Strobe)请求。

    但是我们发现地址线只有2 为,也就是寻址空间是0-3 。而确定一个超单元至少需要4 位

    地址线,那么是怎么实现的呢?

    解决这个问题采用的是分时传送地址码的方法。看上图我们可以发现在DRAM 芯片内部有

    一个行缓冲区,实际上获取一个cell 的数据,是传送了2 次数据,第一次发送RAS,将一

    行的数据放入行缓冲区,第二期发送CAS,从行缓冲区中取得数据并通过数据线传出。这

    些地址线和数据线在芯片上是以管脚(PIN)与控制电路相连的。将DRAM 电路设计成二

    维矩阵而不是一位线性数组是为了降低芯片上的管脚数量。入上图如果使用线性数组,需

    要4 根地址管脚,而采用二维矩阵并使用RAS\CAS 两次请求的方式只需要2 个地址管

    脚。但这样的缺点是增加了访问时间。

    1.2 内存模块

    内存模块也就是我们常说的内存条。我们在购买内存是经常会听到我这个内存采用的是什

    么颗粒,如下左图,我们看到内存PCB 上的一块块的就是内存颗粒。也就是我们DRAM

    芯片。通过管脚和PCB 连接。不同厂商,不同类型的内存可以的大小,管脚,性能,封装

    都不一样,但是原理都是一样。这里我们就不展开介绍了。而下有图展示了一个1M*4bit

    的DRAM 芯片的管脚图。

    对于一个内存颗粒来说,它的容量和字长是有限的,所以我们使用内存是会把多个颗粒组

    成内存模块来对内存进行字长和容量的扩展。目前的内存一般内存条上面会有多颗内存颗

    粒,比如一条64M 的内存可能是由8 个8M*8bit 的SDRAM 内存颗粒组成。

    1.2.1 字长位数扩展

    位扩展的方法很简单,只需将多片RAM 的相应地址端、读/写控制端和片选信号CS 并接

    在一起,而各片RAM 的I/O 端并行输出即可。如上图,我们采用了8 个DRAM 芯片分,

    别编号为0-7,每个超单元中存储8 位数据。在获取add (row=i,col=j )地址的数据的时

    候,从每个DRAM 芯片的【i, j】单元取出一个字节的数据,这样传送到CPU 的一共是

    8*8b = 64b 的数据。我们通过8 个8M*8b 的内存颗粒扩展为了8M*64b 的内存模块。

    1.2.2 字存储容量扩展

    RAM 的字扩展是利用译码器输出控制各片RAM 的片选信号CS 来实现的。RAM 进行字扩

    展时必须增加地址线,而增加的地址线作为高位地址与译码器的输入相连。同时各片RAM

    的相应地址端、读/写控制端、相应I/O 端应并接在一起使用。下图是我们通过4 个2M*8b

    的内存颗粒,将内存容量扩展到了8M,字长为8 位。

    最后,内存通过主板上的内存插槽DIMM 和内存总线相连接。对于不同内存比如SDRAM

    和DDR 他们内存金手指的定义是不同的。这里就不需要详细介绍了。

    2. 内存编址

    前面我们知道了DRAM 颗粒以及内存模块是如何扩展字长和容量的。一个内存可能是8

    位,也可能是64 位,容量可能是1M,也可能是1G。那么内存是如何编地的呢?和地址

    总线,计算机字长之间又有什么关系呢?

    2.1 字长

    计算机在同一

    展开全文
  • 调试DDR3 SO-DIMM 陆陆续续花了好几天,其中的过程比较坎坷。为了避免后面调试的朋友再次踩坑,决定从拿到板子和内存条...看看板卡原理图内存条插槽几个引脚,不同引脚数对应的规范不一样。这是"204-Pin DDR3 SDRAM U

    调试DDR3 SO-DIMM 陆陆续续花了好几天,其中的过程比较坎坷。为了避免后面调试的朋友再次踩坑,决定从拿到板子和内存条开始到调试成功中的一些步骤线性的记录下来。

    1 内存条上标识的含义

    拿到一块内存条,让我们用FPGA去控制,可能一开始挺茫然的。以我使用的内存条型号为例,先观察外观:

    在这里插入图片描述

    1.1 内存条标识

    正面标签写了:4GB 1Rx8 PC3L - 12800S - 11 - 11 - B2

    看看板卡原理图内存条插槽几个引脚,不同引脚数对应的规范不一样。这是"204-Pin DDR3 SDRAM Unbuffered SO-DIMM Design Specification"规定的 DDR3 “End-User” DIMM类型统一的标签格式:ggggg eRxff PC3-wwwwwm-aa-bb-ccd

    • ggggg: 模块总容量,以字节为单位
      • 256MB, 512MB, 1GB, 2GB, 4GB等等。
    • eR: 安装的颗粒排列数(rank)
      • 1R: 1rank DDR3 SDRAM
      • 2R: 2rank
      • 4R: 4rank
    • xff: 内存条上单个DDR3 SDRAM颗粒的数据位宽(也叫Device organization)
      • x4: x4 organization, 即4位
      • x8: x8 organization
      • x16: x16 organization
    • wwwww: 带宽,单位为MB/s,对于数据总线64bit,这个也可认为代表了不同的工作频率。
      • 6400: = 6.40 GB/s, (PC3-800 SDRAM, 数据总线8字节宽)
      • 8500: = 8.53 GB/s, (PC3-1066 SDRAM, 数据总线8字节宽)
      • 10600: = 10.66 GB/s, (PC3-1333 SDRAM, 数据总线8字节宽)
      • 12800: = 12.80 GB/s, (PC3-1600 SDRAM, 数据总线8字节宽)
    • m:类型,字面意思,包含有无缓存、寄存器,尺寸等类型
      • E:无缓冲Unbuffered DIMM (“UDIMM”),带ECC(x72位模块数据总线)
      • F: 全缓冲Fully Buffered DIMM (“FB-DIMM”)
      • M: Micro-DIMM
      • R: Registered DIMM (“RDIMM”)
      • S: Small Outline DIMM(“SO-DIMM”)
      • U: 无缓冲DIMM (“UDIMM”),无ECC(x64位模块数据总线)
        一般板卡要用DIMM形式的SDRAM,用的也是SO-DIMM,小型DIMM。
    • aa: DDR3 SDRAM 最大工作频率时钟的CAS延迟
    • bb: 用于此DIMM的JEDEC SPD修订编码和添加级别
    • cc: 设计使用的参考设计(如适用)
      • A: 使用规范给出的参考设计:raw card ‘A’
      • B: 使用规范给出的参考设计:raw card ‘B’
      • AV: 使用规范给出的参考设计:raw card ‘AV’
      • ZZ: 未使用规范给出的参考设计
    • d: 所使用的参考设计的修订编号
      • 0: 初始发行版
      • 1: 第一次修订
      • 2: 第二次修订
      • P: 预发布或工程示例
      • Z: 当字段cc = ZZ时使用

    所以,我用的这张卡,4GB 1Rx8 PC3L - 12800S - 11 - 11 - B2代表规格为:
    4GB DDR3 SO-DIMM,使用1 rank的8bit SDRAM颗粒组成,以DDR3-1600的性能运行,CAS延迟= 11,使用JEDEC DDR3 SPD revision 1.1,参考设计第二次修订版本。

    1.2 颗粒标识

    内存颗粒的丝印可以看到DDR3 SDRAM颗粒的型号为:K4B4G0846E-BYK0

    从卡上的三星标志可以知道这个颗粒是三星的。想要初略了解,直接看型号是最直观的。关于三星DDR3命名规范可以在其官网查到:

    在这里插入图片描述

    所以这是

    K4B4G0846E-BYK0
    三星DRAMDDR3 SDRAM4Gb8bit 数据位宽8 bankSSTL电平第6代-FBGA封装商业级温度范围DDR3-1600 (800MHz @ CL=11, tRCD=11, tRP=11)

    一目了然。

    2 204-pin SO-DIMM 规范

    大概了解后,就要学习怎么使用这个内存条。

    DIMM全称Dual-Inline-Memory-Modules,中文名叫双列直插式存储模块,是指奔腾CPU推出后出现的新型内存条,它提供了64位的数据通道。DIMM(Dual Inline Memory Module,双列直插内存模块)与SIMM(single in-line memory module,单边接触内存模组)相当类似,不同的只是DIMM的金手指两端不像SIMM那样是互通的,它们各自独立传输信号,因此可以满足更多数据信号的传送需要。

    各种类型的DIMM内存条都有响应的规范设计文件,我使用的这张内存条符合“PC3-6400/PC3-8500/PC3-10600/PC3-12800 DDR3 Unbuffered SO-DIMM Reference Design Specification”,所以需要从这个规范开始学习。

    规范提到,参考规范定义了PC3-12800内存模块的电气和机械要求,一个204引脚,800MHz时钟(1600MT/s数据速率),64位宽,无缓冲同步双倍数据数据(Double Data Rate 3,DDR3)DRAM,小型双列直插式存储模块(Small outline Dual In-Line Memory Module, SO-DIMM)DDR3 SDRAM。它还定义了一个较慢的版本,PC3-10600,使用667MHz时钟(1333 MT/s数据速率)DDR3 SDRAM, PC3-8500,使用533MHz时钟(1066 MT/s数据速率)DDR3 SDRAM, PC3-6400,使用400MHz时钟(800 MT/s数据速率)DDR3 SDRAM。这些DDR3 SDRAM so-dimm用于安装在移动个人电脑等系统中作为主内存使用。

    2.1 找到本卡在规范中的具体分类

    在这里插入图片描述

    可以看到,我使用的内存条为 8个、x8 数据位宽的颗粒,1 rank 。所以属于B类。

    2.2 找到本分类对应的引脚定义与连接

    首先,可以看到统一的引脚描述,这里只简单列出一下关键引脚,因为我们能看懂原理图各信号的含义与连接即可使用MIG开发。如果要自己写控制器,需要详细学习。

    引脚功能描述
    CK[1:0]差分时钟输入系统时钟输入。所有地址和指令在CK上升沿和~CK下降沿。
    ~CK[1:0]差分时钟输入
    CKE[1:0]时钟使能用于低功耗或自刷新模式
    ~RASRow Address Stobe行地址选通
    ~CASRow Address Stobe列地址选通
    ~WE写使能
    ~S[1:0]芯片选择低时启用相关的DDR3 SDRAM命令解码器,高时禁用命令解码器。当命令解码器被禁用时,新的命令将被忽略,但之前的操作将继续。rank 0由S0选择;rank 1是由S1选择的
    A[9:0],A11,A[15:13]地址输入
    A10/AP地址输入/Autoprecharge自动预充电用于在突发读或写周期结束时调用自动预充电操作。
    A12/~BC地址输入/Burst chop在READ和WRITE命令期间采样,以确定是否将执行突发
    BA[2:0]SDRAM Bank Address
    DQ[63:0]Data Input/Output
    DM[7:0]写模式数据掩码每位控制一个byte,不影响读
    DQS[7:0]差分数据选通每位控制一个byte,写数据时输入,读数据时输出
    ~DQS[7:0]差分数据选通
    RESET复位

    每个引脚在金手指中的位置,了解即可,硬件工程师会设计好:

    在这里插入图片描述

    关键的是要熟悉内存条对应的分类的具体引脚连接。不同类型的引脚功能都一样,但是在比较简单的分类中,一些控制引脚是没用到的。所以这个我们需要知晓一下我们的卡的控制信号的连接。

    在这里插入图片描述

    关注点:

    • 结构为8片颗粒进行位宽扩展。
    • S0信号连接到CS。
    • 控制信号高位空载或者直接接了一个负载,未使用,因为只有1 rank。

    总结一下A、B、C、D类的颗粒排布:
    在这里插入图片描述

    到这里,就可以很好的理解rank的含义了,rank的增加可以理解为在深度上的拓展。有两种方式,一种是平面排布(A),一种是堆叠设计(D)。

    3 找到颗粒的关键时序参数

    其实知道了内存条的类型和容量,颗粒的位宽、容量等参数就已经确定了。

    对于我们用的B类,以内存条容量为4GB为例,因为数据位宽固定为64位,所以深度为512M。又因为B类只是位宽拓展,所以颗粒的规格为512Mx8bit,容量为512MB。

    MIG的例化还需要设置一些时序参数,其中的值为K4B4G0846E-BYK0的时序参数。关于怎么找这些参数,翻到数据手册Timing Parameters的章节然后搜索就行。

    参数描述
    tckeCKE最小脉冲宽度8ns
    tfawfour address width,在这个宽度内只能访问不超过四个地址40ns
    trasActive to Precharge conmmand, Active信号与预充电命令直接的最小间隔37.5ns
    trcdActive to Read or Write delay, 读或写延迟于Active信号的最小间隔15.0ns
    trefiAverage periodic refresh interval, 平均周期刷新的最大间隔7.8us
    trfcRefresh to Active or Refresh to Refresh, 刷新到active或刷新之间的最小间隔260ns
    trpPrecharge conmmand period, Precharge命令的处理周期15.0ns
    trrdActive minimum command period, 不同bank的Active命令间的最小延迟6.0ns
    trtpRead following a Precharge to the same device, 读命令到Precharge命令间的延迟10.0ns
    twtrRead following a write to the same device, 写切换到读的最小延迟7.5ns

    具体了解这些参数的含义需要看“DDR3 SDRAM Standard(JESD79-3F)”

    4 参考资料

    1. 204-Pin DDR3 SDRAM Unbuffered SO-DIMM Design Specification
    2. DS_K4B4G0846E_BY_M_Rev1_31-0
    3. DDR3 SDRAM Standard(JESD79-3F)

    可在下面公众号回复21112801获取:

    在这里插入图片描述

    展开全文
  • 图解内存的工作原理及时序介绍

    千次阅读 2021-01-13 15:11:35
    并且,内存原理、结构与时序多年不会改变,无论将来内存技术如何进步,相信这篇文章的存在价值都不会打折扣。本文亦希望能通过对DRAM基本原理以及时序的介绍,在内存设置以及XMP的制作上有所帮助


    前言

    内存是PC配件中结构最简单的,但在BIOS中却是最难调的,很多玩家超频都卡在内存上。并且,内存的原理、结构与时序多年不会改变,无论将来内存技术如何进步,相信这篇文章的存在价值都不会打折扣。本文亦希望能通过对DRAM基本原理以及时序的介绍,在内存设置以及XMP的制作上有所帮助。


    第一部分:工作原理

    DRAM基本组成

    • 内存是由DRAM(动态随机存储器)芯片组成的。DRAM的内部结构可以说是PC芯片中最简单的,是由许多重复的“单元”——cell组成,每一个cell由一个电容和一个晶体管(一般是N沟道MOSFET)构成,电容可储存1bit数据量,充放电后电荷的多少(电势高低)分别对应二进制数据0和1。
    • 由于电容会有漏电现象,因此过一段时间之后电荷会丢失,导致电势不足而丢失数据,因此必须经常进行充电保持电势,这个充电的动作叫做刷新,因此动态存储器具有刷新特性,这个刷新的操作一直要持续到数据改变或者断电。而MOSFET则是控制电容充放电的开关。DRAM由于结构简单,可以做到面积很小,存储容量很大。
      在这里插入图片描述

    内存地址

    • 内存中的cell按矩阵形排列,每一行和每一列都会有一个对应的行地址线路(正规叫法叫做word line)和列地址线路(正规叫法是bit line),每个具体的cell就挂接在这样的行地址线路和列地址线路上,对应一个唯一的行号和列号,把行号和列号组合在一起,就是内存的地址。
      在这里插入图片描述
    • 上图是Thaiphoon Burner的一个SPD dump,每个地址是一个字节。不过我们可以把这些数据假设成只有一个bit,当成是一个简单的内存地址表,左边竖着的是行地址,上方横着的是列地址。例如我们要找第七行、倒数第二列(地址为7E)的数据,它就只有一个对应的值:FD。当然了,在内存的cell中,它只能是0或者1。

    寻址

    • 数据要写入内存的一个cell,或者从内存中的一个cell读取数据,首先要完成对这个cell的寻址。寻址的过程,首先是将需要操作的cell的对应行地址信号和列地址信号输入行/列地址缓冲器,然后先通过行解码器(Row Decoder)选择特定的行地址线路,以激活特定的行地址。
    • 每一条行地址线路会与多条列地址线路和cell相连接,为了侦测列地址线路上微弱的激活信号,还需要一个额外的感应放大器(Sense Amplifier)放大这个信号。
    • 当行激活之后,列地址缓冲器中的列地址信号通过列解码器(Column Decoder)确定列地址,并被对应的感应放大器通过连接IO线路,这样cell就被激活,并可供读写操作,寻址完成。从行地址激活,到找到列地址这段时间,就是tRCD。
      在这里插入图片描述

    内存cell的基本操作

    • 内存中的cell可以分为3个基本操作,数据的储存、写入与读取。为了便于理解,我不打算直接从电路控制上对cell操作进行说明,而是希望通过模型类比来达到说明问题的目的,如有不严谨之处,高手勿怪。要对内存cell进行读写操作,首先要完成上述寻址过程,并且电容的充电状态信号要被感应放大器感应到,并且放大,然后MOSFET打开,电容放电,产生电势变化,把电荷输送到IO线路,导致线路的电势也变化。当然,这只是个简单的描述,以下我们先来了解硅晶体中“电容”的结构和MOSFET的控制原理。

    硅晶体中的“电容”

    • 这里之所以“电容”两个字被打上引号,是因为硅晶体中并没有真正意义上的电容。硅晶体中的电容是由两个对置的触发器组成的等效电容。例如两个非门(Nor Gate)用如下图的方式对接。它可以通过周期性施加特定的输入信号,以把电荷保留在电路中,充当电容的作用。如下图,两个非门的输入端R和S互相交替做0和1输入,就可以把电荷储存在电路中。整个动态过程就是这样:
      在这里插入图片描述
    • 而R和S的波形就是如下图所示,刚好互为反相,差半个周期:
      在这里插入图片描述
    • 要让电容放电,我们只需要把R和S同时输入1或者0即可。因此这种电容的逻辑关系很简单:在同一时刻R和S输入状态不同(即存在电势差)时,电容为充电状态;在同一时刻R和S输入状态相同(即电势差为0)时,电容为放电状态。
      在这里插入图片描述

    MOSFET的控制原理——水库模型

    • 要说明这个MOSFET的控制原理,我们借助一个水库的模型来说明。MOSFET有三个极,分别是源极(Source)、漏极(Drain)和栅极(Gate)。下图左边就是一个MOSFET的电路图,右边是我们画出的一个水库模型。
      在这里插入图片描述
    • 图中S为源极,D为漏极,G为栅极。S极连接着电容,D级连接列地址线路,并接到数据IO,G则是控制电荷流出的阀门,连接行地址线路。电容在充电后电势会改变,这样S极的电势就会跟着改变,与D极形成电势差,而G极的电势,就决定了S极有多少电荷可以流入D极。
    • 由于电子是带负电荷,因此电子越多电势就越低。为了不至于混淆概念,我们把水池顶部电势定为0V,水池底部电势定为5V(仅举例说明,DRAM中的电容实际电压未必是5V)。当电子数量越多时,电势越低,接近0V,电子数量越少时,电势越高,接近5V。
      在这里插入图片描述
    • 用水库模型说明,就是左边的水池水量升高(电容充电后),当阀门关闭时,左边的水是不会往右边流的。然后阀门打开(降低,电势升高),左边的水就可以往右边流,阀门的高度就决定了有多少水能流去右边的水道(但是在数字电路中,MOSFET只有开和关两种状态,因此下文提到的打开MOSFET就是全开);
    • 同样道理如果右边水多,阀门打开之后也可以向左边流。因此在水库模型中,电容就充当了左边的水池,而MOSFET的栅极就充当了阀门,列地址线路和IO则充当了右边的水道。

    储存数据

    • MOSFET栅极电势为0V时,电容的电荷不会流出,因此数据就可以保存我们可以用2.5V为参考分界线,电容电势低于2.5V时,表示数据0,电势高于2.5V时,表示数据1。例如上一楼水库模型的左图,电容中储存的电子数高于一半的高度,电势低于2.5V,因此可以表示数据0。
    • 但以上只是理论情况,实际上电容会自然漏电,电子数量会逐渐减少,电势就会逐渐升高,当电势升高到2.5V以上时,数据就会出错,因此每隔一段时间必须打开MOSFET往电容中充电,以保持电势,这就是刷新。因此,数据的储存主要就是对电容中电势的保持操作。

    写入数据

    • 数据写入的操作分为写入0和写入1两种情况。写入前,电容原有的情况可能是高电势与低电势的状态,我们不用管它。写入0和写入1对cell的操作不尽相同,我们分别来看。
    • 先来看写入0的操作。写入开始时,IO线路上电势为0(水道处于水位最高点),MOSFET栅极电势升高到5V(水库阀门降到最低),阀门打开,电容中的电势就跟着降低(水位升高),直到接近0V(水池被灌满),写入0完成,栅极电势降回0V,阀门关闭。
      在这里插入图片描述
    • 再看写入1的操作。写入开始时,IO线路上的电势为5V(水道水位为最低点),MOSFET栅极电势升高到5V(水库阀门降到最低),阀门打开,电容中的电势跟着升高(水流出并降低水位)到接近5V,写入1完成,栅极电势回到0V,阀门关闭。
      在这里插入图片描述

    读取数据

    • 读取的时候,对漏极的电压操作跟写入有些不同。因为水道中的水比水池中的多,或者说水道的容量比水池要大得多。如果水道(漏极)的水为满或者空,在阀门打开的时候很容易出现水道的水倒灌进水池的现象,或是水池的水全部流去水道,这样就有可能导致电容中的电势状态改变,电容对应储存的0或者1也会改变。所以读取数据的时候,IO线路的电压应为1/2的满电势,即2.5V。
    • 读取也同样分读取0和1两种情况。在读取之前,电容中的电势应该是大于或者小于2.5V的,分别代表存储了1和0。由于刷新机制的存在,应该不会允许出现等于2.5V的情况。
    • 首先看读取0操作。电容中为低电势(假设为0V,水池为高水位),IO线路上电势升高至2.5V(这时水道水位比水池低),MOSFET栅极电势升高到5V(水库阀门降到最低),阀门打开,电容中电势升高(水位降低),但由于水道容量较大,因此水位不会升高太多,但是总归也会有个电势的变低,最终电容与IO线路上的电势都变成0-2.5V的一个中间值,并且接近2.5V(假设为2.3V)。这时候感应放大器检测到IO线路上电势低于2.5V,因此识别出0读出。
      在这里插入图片描述
    • 再看读取1操作。电容中为高电势(假设为5V,水池空),IO线路上电势升高至2.5V(这时候水道水位比水池高),MOSFET栅极电势升高到5V(水库阀门降到最低),阀门打开,电容中电势降低(水位升高),但由于水道容量较大,水位不会降低太多,不过多少也会降低一点(电势会升高),假设升高到2.7V。这时候感应放大器检测到IO线路的电势高于2.5V,识别出1读出。
      在这里插入图片描述
    • 以上讲述的只是从cell到内存IO线路的读写操作,至于CPU-IMC-内存的读写操作,不在本文讨论范围。

    二、时序介绍

    时序及相关概念

    • 以下我把时序分为两部分,只是为了下文介绍起来作为归类,非官方分类方法。
    • 第一时序:CL-tRCD-tRP-tRAS-CR,就是我们常说的5个主要时序。
    • 第二时序:(包含所有XMP时序)
    • 在讲时序之前,我想先让大家明白一些概念。内存时钟信号是方波,DDR内存在时钟信号上升和下降时各进行一次数据传输,所以会有等效两倍传输率的关系。
    • 例如DDR3-1333的实际工作频率是666.7MHz,每秒传输数据666.7*2=1333百万次,即1333MT/s,也就是我们说的等效频率1333MHz,再由每条内存位宽是64bit,那么它的带宽就是:
    1333MT/s*64bit/8(8bit是一字节)=10667MB/s。
    
    • 所谓时序,就是内存的时钟周期数值,脉冲信号经过上升再下降,到下一次上升之前叫做一个时钟周期,随着内存频率提升,这个周期会变短。例如CL9的意思就是CL这个操作的时间是9个时钟周期。
    • 另外还要搞清楚一些基本术语:

    Cell:颗粒中的一个数据存储单元叫做一个Cell,由一个电容和一个N沟道MOSFET组成。
    Bank:8bit的内存颗粒,一个颗粒叫做一个bank,4bit的颗粒,正反两个颗粒合起来叫做一个bank。一根内存是64bit,如果是单面就是8个8bit颗粒,如果是双面,那就是16个4bit的颗粒分别在两面,不算ECC颗粒。
    Rank:内存PCB的一面所有颗粒叫做一个rank,目前在Unbuffered台式机内存上,通常一面是8个颗粒,所以单面内存就是1个rank,8个bank,双面内存就是2个rank,8个bank。Bank与rank的定义是SPD信息的一部分,在AIDA64中SPD一栏可以看到。
    DIMM:指一条可传输64bit数据的内存PCB,也就是内存颗粒的载体,算上ECC芯片,一条DIMM PCB最多可以容纳18个芯片。

    第一时序

    • CAS Latency(CL):CAS即Column Address Strobe,列地址信号,它定义了在读取命令发出后到数据读出到IO接口的间隔时间。由于CAS在几乎所有的内存读取操作中都会生效(除非是读取到同一行地址中连续的数据,4bit颗粒直接读取间隔3个地址,8bit颗粒直接读取间隔7个地址,这时候CAS不生效),因此它是对内存读取性能影响最强的。如下图,蓝色的Read表示读取命令,绿色的方块表示数据读出IO,中间间隔的时间就是CL。
      在这里插入图片描述
    • 已知CL时钟周期值CAS,我们可以使用以下公式来计算实际延迟时间tCAS:
    tCAS(ns)=(CAS*2000)/内存等效频率
    
    • 例如,DDR3-1333 CL9内存实际CAS延迟时间=(9*2000)/1333=13.50 ns
      或者反过来算,假如已知你的内存可以在7.5ns延迟下稳定工作,并且你想要DDR3-2000的频率,那么你可以把CL值设为8T(实际上8ns,大于7.5ns即可),如果你想要DDR3-1600的频率,那么你的CL值可以设到6T(实际7.5ns)。
      这个公式对于所有用时钟周期表示延迟的内存时序都可以用。
    • 说到这个公式,我想顺便说说大家对频率和时序的纠结问题。首先来回顾一下DDR一代到三代的一些典型的JEDEC规范,并按照上边那个公式算一下它的CL延迟时间:
    DDR-400 3-3-3-8:(3*2000)/400=15 ns
    DDR2-800 6-6-6-18:(6*2000)/800=15 ns
    DDR3-1333 9-9-9-24:刚才算了是13.5 ns
    
    • 再来看看每一代的超频内存的最佳表现(平民级,非世界纪录):
    DDR1 Winbond BH-5 DDR-500 CL1.5:(1.5*2000)/500=6 ns
    DDR2 Micron D9GMH DDR2-1400 CL4:(4*2000)/1400=5.71 ns
    DDR3 PSC A3G-A DDR3-2133 CL6:(6*2000)/2133=5.63 ns
    
    • 发现什么?不管是哪一代内存,随着频率提升,CL周期也同步提升,但是最后算出来的CL延迟时间却差不多。那么到了DDR4,JEDEC规范频率去到DDR4-4266,如果按照差不多的延迟,那么按照13ns多一些来算,那么CL值将达到28T!如果按照我们的极限超频延迟来算,DDR4-4266下的延迟也将达到12T。所以到了下一代DDR4,两位数的时钟周期将不可避免。
    • 所以,我想说的是,不要再去想什么DDR3的频率,DDR2的时序,在频宽严重过剩,IMC成为瓶颈的今天,它对性能没太多的提升。
    • DRAM RAS to CAS Delay(tRCD):RAS的含义与CAS类似,就是行(Row)地址信号。它定义的是在内存的一个rank(内存的一面)之中,行地址激活(Active)命令发出之后,内存对行地址的操作所需要的时间。
    • 每一个内存cell就是一个可存储数据的地址,每个地址都有对应的行号和列号,每一行包含1024个列地址,当某一行地址被激活后,多个CAS请求会被发送以进行读写操作。简单的说,已知行地址位置,在这一行中找到相应的列地址,就可以完成寻址,进行读写操作,从已知行地址到找到列地址过去的时间就是tRCD。当内存中某一行地址被激活时,我们称它为“open page”。
    • 在同一时刻,同一个rank可以打开8个行地址(8个bank,也就是8个颗粒各一个)。下图显示一个行地址激活命令发出,到寻找列地址并发出读取指令,中间间隔的时间就是tRCD。tRCD值由于是最关键的寻址时间,它对内存最大频率影响最大,一般想要上高频,在加电压和放宽CL值不奏效的时候,我们都要放宽这个延迟。
      在这里插入图片描述
    • DRAM RAS Precharge Time(tRP):RAS预充电时间。它定义的是前一个行地址操作完成并在行地址关闭(page close)命令发出之后,准备对同一个bank中下一个行地址进行操作,tRP就是下一个行地址激活信号发出前对其进行的预充电时间。由于在行地址关闭命令发出之前,一个rank中的多个行地址可能正在被读写,tRP对内存性能影响不如CL和tRCD。
    • 虽然tRP的影响会随着多个行地址激活与关闭信号频繁操作一个bank而加大,但是它的影响会被bank interleaving(bank交叉操作)和command scheduling(命令调配)所削弱。交叉读写会交替使用不同的bank进行读写,减少对一个bank的操作频率;
    • 命令调配则是由CPU多线程访问不同的内存地址,同样是减少对一个bank的频繁操作次数。例如SNB CPU的内存控制器可以对读写操作命令进行有效地重新分配,以使得行地址激活命中率最大化(如果重复激活一个已经处于激活状态的行地址,那就是RAS激活命令未命中),所以tRP在SNB平台对性能的影响不大,并且放宽它有可能可以帮助提升稳定性。下图显示的是一个即将被激活的行地址开始预充电,到它被激活间隔的时间,就是tRP。
      在这里插入图片描述
    • DRAM RAS Active Time(tRAS):行地址激活的时间。它其实就是从一个行地址预充电之后,从激活到寻址再到读取完成所经过的整个时间,也就是tRCD+tCL的意思。这个操作并不会频繁发生,只有在空闲的内存新建数据的时候才会使用它。太紧的tRAS值,有可能会导致数据丢失或不完整,太宽的值则会影响内存性能,尤其是在内存使用量增加的时候。所以一般为了稳定性,我们设置tRAS≥tRTP+tRCD+CL即可(tRTP不是tRP,将在第二时序中介绍),尤其是PCB不好或者跑高频的时候,多几个周期比较稳妥。
    • DRAM Command Mode(Command Rate,CR):首命令延迟,也就是我们平时说的1T/2T模式。是指从选定bank之后到可以发出行地址激活命令所经过的时间。
    • CR可能对性能的影响有比较大的变数:如果CPU所需要的数据都在内存的一个行地址上,就不需要进行重复多次的bank选择,CR的影响就很小;但是如果一个rank中同时多个bank要激活行地址,或者不同的rank中不同bank需要同时激活的时候,CR对性能的影响就会提升。但是随着内存频率的提升,CR=1T/2T的时间差越短,它的影响就会越来越小,这就是我们看到DDR1的时候1T/2T对性能影响挺大,但是到了DDR3影响就很小的其中一个原因。但是为了性能最大化,我们尽量把CR设为1T,但是如果bank数很多的时候,例如插满四条内存,就有32个bank,bank选择随机性增大,1T的首命令时间可能会不稳定。
    • 所以,内存的基本读取操作的时序角度流程就是把上面那三张图合起来:预充电-激活行地址并寻找列地址-发送读取命令-读出数据,这四步操作中间的三个延迟就分别是tRP、tRCD和CL。和我们常说的时序顺序刚好是反过来的。

    第二时序——XMP

    • DRAM CAS Write Latency(tWCL):列地址写入延迟,也就是DRAM的最小写入操作时间,与CL刚好是读写对应关系,一般跟CL值设为同一个值就是可以稳定的。由于内存读取之前必须先写入,所以这个值可以说与CL一样重要。但是在BIOS里一般没得设置,可能是与CL绑定了。
    • DRAM Row Cycle Time(tRC):行周期时间。定义了同一bank两次行激活命令所间隔的最小时间,或者说是一个bank中完成一次行操作周期(Row Cycle)的时间,即tRP+tRAS(预充电加上激活的整个过程),tRC设得太紧可能会直接点开不了机,一般只要能进系统再多加一两个周期都是可以稳定的。下图显示的就是tRC的时间。
      在这里插入图片描述
    • DRAM Row Refresh Cycle Time(tRFC):行地址刷新周期,定义了一个bank中行地址刷新所需要的时间。重提一下刷新的含义,由于cell中电容的电荷在MOSFET关闭之后一段时间就会失去,为了维持数据,每隔很短一段时间就需要重新充电。
    • 这里多提一句,Intel平台和AMD平台对tRFC的含义不一样,AMD平台的tRFC是DRAM刷新延迟时间,单位是ns,通常有90/110/160/300几个值可以调整,也就是说它的tRFC时钟周期会随着频率的提升而提升;而Intel平台的单位则直接是时钟周期,相反地延迟时间会随着频率的提升而降低。容量大的bank行地址和cell会更多,刷新时间也更长,因此tRFC也要更高。另外,tRFC如果太快会导致数据出错,太慢则影响性能,但可以增加稳定性。
    • DRAM Refresh Interval(tREFI):内存刷新时间间隔,也就是内存的刷新命令生效前要经过的时间。刷新的时间间隔一般取决于内存颗粒的容量(density),容量越大,就越需要频繁刷新,tREFI值就要越低。另外tREFI的时间也会受到内存工作温度与内存电压(Vdimm)影响,因为温度越高电容漏电越快。
    • 一般在AMD主板的BIOS里,这个值只有3.9us和7.8us可选,而在SNB平台,则是按时钟周期算,例如DDR3-1333下默认值为5199T,换算过来就是2000/1333x5199=7800ns,也就是7.8us。一般DRAM颗粒的spec中都是规定工作温度大于85度时采用3.9us。
    • DRAM RAS to RAS Delay(tRRD):行地址间延迟,定义的是同一rank不同bank间两个连续激活命令的最短延迟,在DDR3时代一般最小是4T。它的作用和CR有点像,不过比CR更多的时候对性能有较大的影响,所以这个时序可尽量缩小。
    • DRAM Write Recovery Time(tWR):内存写入恢复时间,它定义了内存从写入命令发出(从开始写入算起)到下一次预充电间隔的时间,也就是tRP的前一个操作。如果这个时间设得太短,可能会导致前一次写入未完成就开始下一次预充电,进行寻址,那么前一次写入的数据就会不完整,造成丢数据的情况。这个周期也是第二时序中比较长的,DDR3-2000一般需要10-14个周期,甚至更高。
    • DRAM Read to Precharge Time(tRTP):与tWR类似,定义了同一rank上内存从读取命令发出到tRP之前的间隔时间,但是它在读取完成并且行地址关闭之后才会生效。单颗128MB的内存颗粒可以在DDR3-2000下运行在4到6个时钟周期,如果bank容量增大时,这个时序有可能要放宽。
    • DRAM Four Active Window(tFAW):它定义了同一rank中允许同时发送大于四个行激活命令的间隔时间,因此最小值应该不小于tRRD的四倍。在DDR3上,tRRD的最小值是4T,因此tFAW的最小值就是16T。这个tFAW由于是在一个rank中大于四个bank同时激活之后才生效,因此在内存不是很繁忙的时候,它对性能的影响并不是很大。但是对一些频繁读写内存的操作(例如SuperPI 32M),tFAW对性能的影响可能会加大。
    • 由于现在内存用满的几率非常非常小,两根双面的内存更是有4个rank,配合上interleaving,一个rank中同时激活大于四个bank的几率应该不大,所以通常我们把它设为tRRD的四倍应该就不会出问题。
    • DRAM Write to Read Delay(tWTR):内存写-读延迟,它定义的是内存写入命令发出后到下一个读取命令之间的时间间隔,最小为4T,与tRTP类似,提升内存的频率或者容量提升时,这个值需要提高。

    总结

    看完以上内容,我们已经对时序有了个大致的了解,现在应该可以知道一些时序设置时要注意什么了。比如tFAW要设为tRRD的四倍,tRAS不能设太低等等。还是那句话,内存是辅助CPU超频的,时序设置只是为了放开内存更多的超频空间,时序本身对性能的影响很小,并且随着频率的提升,或者bank数的增加,这种影响可能会进一步减小。具体不同的内存颗粒也会有不同的设置情况,还请大家多关注本站的颗粒汇总以及最新内存颗粒测试报告!。

    展开全文
  • 如何选择合适的内存条?如何查看自己电脑内存条的内存大小和主频呢?
  • 小张有一定的计算机背景知识,最近他在京东上买了两DDR3的内存,打算把笔记本升级成8G。可是一拆开包装到就傻眼了: 4GB看起来很好,两根刚好8GB。2Rx8是啥,PC3又是啥,10600似乎和他想买的1333的差好远,...
  • 一、volatile关键字介绍及底层原理 1.volatile的特性(内存语义) 当一个变量被定义成volatile之后,它将具备两项特性:第一项是保证此变量对所有线程的可见性,这里的“可见性”是指当一线程修改了这个变量的值,...
  • 27. DDR内存基本原理 -1

    2020-12-18 06:19:49
    uboot.16k, 要做的最主要的事情就是完成DDR的初始化,然后把u-boot.bin从flash加载到内存中,然后PC指针跳转到DDR中,开始运行。 DDR SDRAM:Double Data Rate,同步动态随机存取内存(synchronous dynamic random-...
  • 目录 SCH Inspector面板 SCH Filter面板 “SCH Filter”面板简介 “Query Helper”对话框 “SCH Filter”面板的使用 “选择内存”面板 “选择内存”面板介绍 “选择内存”使用 联合与片段 层次式原理图设计 层次是...
  • 快速充电:了解内存的重要性首先,在讨论内存容量的问题之前,我们先来看一下内容的工作原理。从功能上理解,我们可以将内存看作是内存控制器与CPU之间的桥梁,内存也就相当于“仓库”。显然,内存的容量决定“仓库...
  • 特别是对于我们程序员来说每天都在计算机上编写各种程序,所以对于了解计算机的各部分原理是非常必要的,了解原理才能够写出更好的程序。让我们来聊聊现代计算机的组成架构和各部分的工作原理。著名的计算机之父——...
  • 介绍内存与CPU的连接
  • 这里需要看原理图,硬件工程师怎么设计的就怎么选。虽然存储器颗粒的数据手册说支持多种电压。 Data Width 默认64位 ECC 默认 Data Mask 此选项在选定时分配数据掩码引脚。取消选择该选项以释放数据掩码引脚并提高...
  • 计算机组成原理内存计算机组成原理;存储子系统;存储系统层次结构;主存储器(内存)辅助存储器(外存)高速缓冲存储器Cache;物理存储器和虚拟存储器主存-外存层次:增大容量CPU 主存 外存:为虚拟存储器提供条件虚拟...
  • 物理内存:也就是装置在计算机中的内存条,比方装置了 2GB 大小的内存条,那么物理内存地址的范畴就是 0 ~ 2GB。虚拟内存:虚构的内存地址。因为 CPU 只能应用物理内存地址,所以须要将虚拟内存地址转换为物理内存...
  • 5、内存条的选购一、内存的分类:1、按内存的工作原理分类按内存的工作原理分为:ROM(Read Only Memory,只读存储器)RAM(Random Access Memory,随机存储器)。这两种基本类型的内存分别有不同的用途,以完成不同的...
  • 内存对齐的原理 内存对齐的原因 1.平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2.性能原因: 内存对齐最...
  • 课程设计(论文),课程名称,计算机组成原理,主题名称,内存扩展和CPU连接,学生部(系)计算机艺术与设计系,课程07网络工程课程,编号1071981,学生名称讲师卢国华2009 6目录,简介11.1设计思想11.2设计主题11.3设计...
  • 本文的目的是对电脑型号为联想G510型号的朋友们更新硬件提供帮助,本人在具体操作的时候由于网络上有...——2020年1月 硬件更新记录本人2014年初入了一款笔记本电脑,具体型号为联想G510(自带4g内存,500G机械硬盘)...
  • 文章目录系列文章目录虚拟内存作用(续)简化内存管理保护内存地址翻译基本原理利用高速缓存利用TLB多级页表具体实例虚拟内存具体案例 虚拟内存作用(续) 简化内存管理 进程、虚拟内存、物理内存之间的关系 简化...
  • 在电脑已经全面普及的今天,几乎每个家庭或者是每个人都有了自己的电脑了,不管是台式电脑还是 笔记本电脑 。我们对电脑的认识应该是再熟悉不过了。但是如果突然需要你讲述一些关于计算机...2、内存内存就是RAM,...
  • 这个经典内存淘汰算法也被很多其它地方使用,经常作为缓存的淘汰策略,缓存作为一种提升查询速度的手段,本身就是为了将持久化到硬盘上的数据中的热点部分加载到读取速度更快的内存中(局部性原理),而内存肯定是加载...
  • 物理内存:也就是安装在计算机中的内存条,比如安装了 2GB 大小的内存条,那么物理内存地址的范围就是 0 ~ 2GB。虚拟内存:虚拟的内存地址。由于 CPU 只能使用物理内存地址,所以需要将虚拟内存地址转换为物理内存...
  • 接下来我们进入volatile原理分析的正题 JVM层面 在JVM层面,定义了一种抽象的内存模型(JMM)来规范并控制重排序,从而解决可见性问题。 JMM(Java内存模型) JMM全称是Java Memory Model(Java内存模型),什么是JMM呢?...
  • 之前的几篇文章里面,我们相应介绍了计算机内部的进程,磁盘,cpu,网络等相关知识点,今天主要来一起探讨下关于计算机的内存分配问题。 有限的物理内存 计算机在运行的时候,其所拥有的内存空间其实是有限的。在...
  • 南京信息工程大学 实验(实习)报告实验(实习)名称 方框语言 实验(实习)日期 2012-11-14 得分 指导教师 林美华 系 计算机 专业 计算机科学与技术 年级 三 班次 10计科2班 姓名 王浩冰 学号 201023089181. 实验目的(1...
  • 显存和内存的关系和区别

    千次阅读 2021-07-26 09:19:57
    显存和内存是什么关系?显存和内存有什么区别?接下来我们来讨论一下。通常说到显存和内存的时候,还会说一下缓存、存储,我们一起介绍一下。1、显存即显卡内存,也叫帧缓存,是用来存储显卡芯片处理过或者即将提取...
  • 近期笔者遇到了很多从单通道内存升级到双通道内存的用户,普遍反映性能提升不如预期,甚至有人感觉根本没有提升,笔者的第一反应是:一定是你内存插入的方式不对!很多人就惊讶了,内存安装插法也会影响性能?实际上...
  • 内存调用详解

    2021-03-22 15:11:45
    对于计算机的认识,如果仅仅停留在装机时的内存条以及各类内存频率和协议是远不够的,为了深入了解在编程的时候每一个变量 虚拟内存 虚拟内存的基本结构 虚拟内存在存储变量的时候,其主要使用到的结构可以大致分为...
  • 计算机组成原理 内存扩充与CPU连接广东工业大学华立学院本科课程设计计算机组成原理课题名称 计算机组成原理题目名称 内存扩充与CPU连接学生系别 计算机科学与技术专业班级 09计算机2班学 号 11010902060学生姓名 张...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,779
精华内容 89,911
关键字:

内存条原理图