SDRAM及DDR3复习笔记及FPGA实现(一)

本文详细介绍了SDRAM的基本概念、内部结构、寻址方式和工作时序,强调了其同步、动态特性和银行寻址机制。内容涵盖芯片初始化、行有效、列读写、数据输出、数据输入、突发长度、预充电、刷新以及数据掩码等关键操作。此外,还提及了DDR3作为SDRAM的演进,两者之间的区别将在后续笔记中探讨。
摘要由CSDN通过智能技术生成

SDRAM及DDR3复习笔记及FPGA实现(一)

DDR的祖宗SDRAM

一、SDRAM是个啥?
SDRAM:Synchronous Dynamic Random Access Memory,同步 动态 随机 存储器。同步是指其时钟频率和CPU前端总线的系统时钟相同,并且内部命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。

二、SDRAM内存芯片的内部结构
什么时bank什么是芯片位宽?
说到这个就不得不提SDRAM的寻址方式
SDRAM的寻址方式可以想象成在一个表格钟寻找单元格,先指定一行(Row),再指定一列(Column),我们就可以准确的找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格叫什么呢?它就是逻辑Bank(简称L-Bank)。下图是存储阵列(L-Bank)示意图。
此图百度一个SDRAM基本上是四个BANK也就是四个单元格,为啥不搞成一个呢????
答案就是
1.芯片制造工艺和成本
2.我个人认为这个才是主要的大家指导寻址就是先激活一行再激活一列。这个行和列的单元格变长了激活的时间也就长了
官方:由于SDRAM的工作原理限制,单一L-Bank将会造成非常严重的寻址冲突,大幅度降低内存效率。
所以现阶段大家普遍把一个SDRAM变成四个bank或者两个bank,
最终寻址方式就是先选bank号在选行地址再选列地址

而SDRAM内存芯片一次传输的数据量就是芯片的位宽,那么这个存储单元的容量就是芯片的位宽,但是要主要,这种关系仅对SDRAM有效。原因将在下文中说明。
等效电路为(正点原子copy)
在这里插入图片描述
DRAM的存储原理示意图:行选与列选信号将使存储电容与外界间的传输电路导通,从而可进行放电(读取)与充电(写入)。真正的电路不是这样的涉及到IC电路设计本人不懂GG

芯片的存储容量是多大?
理解了整天的结构就是看看有多少个单元格么。计算有多少个存储单元和计算表格中单元数量的方法是一样的:

存储单元数量 = 行数 * 列数 * L-Bank的数量
表示方法:
在很多内存产品介绍文档中,都会用MW的方式来表示芯片的容量。M是给芯片中存储单元的总数,单位是兆(应为写M),W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)。比如8M*8,就是一个8bit位宽芯片,有8M个存储单元,总容量是64Mbit(8MB)。

三、芯片的引脚定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最重要的来了,因为你是使用的人这个你必须要会
四、SDRAM的内部基本操作与工作时序:
在这里插入图片描述整体来说就是时钟线输入差分时钟(啥是差分百度),四个命令线组成命令对SDRAM进行控制,模式寄存器就是规定这个SDRAM以何种方式进行工作(提前设置好的),行地址和列地址线还有bank控制逻辑用来选择你想要选的单元格也就是存储单元,数据线用来读取和写入数据。
数据掩码:
顾名思义就是遮掩,你不想哪个数据就把哪个挡起来,但是实际还是会写入数据和读出数据。

(1)芯片的初始化:

可能很多人想象不到,在SDRAM芯片内部还有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时SDRAM都要先对这个控制逻辑核心进行初始化。有关预充电和刷新的含义在下文有讲述。关键的阶段就在与模式寄存器(Mode Register)的设置,简称MRS。这一工作由内存控制器进行,寄存器的信息由地址线来提供。
在这里插入图片描述SDRAM在开机时的初始化时序图
在这里插入图片描述
SDRAM模式寄存器所控制的操作参数:地址线提供不同的0/1信号来获得不同的参数。在设置到MR之后,就开始了进入正常的工作状态,图中相关参数将结合下文具体讲述。

(2)行有效:
在初始化完成之后,要想对一个L-Bank中的阵列进行寻址,首先就要确定行(Row),使之处于活动状态(Active),然后在确定列。虽然之前要进行片选和L-Bank的定址,但它们与行有效可以同时进行。
在这里插入图片描述
行有效时序图

从图中可以看出,在CS#、L-Bank定址的同时,RAS(Row Address Strobe,行地址选通脉冲)也处于有效状态。此时An地址线则发送具体的行地址,所以共有4096个行,A0-A11的不同数值就确定了具体的行地址。由于行有效的同时也是相应L-Bank有效,所以行有效也可称为L-Bank有效

(3)列读写
行地址确定后,就要对列地址进行寻址了。但是,地址线仍然是行地址所用的A0-A11。没错,在SDRAM中,行地址与列地址线是共用的。不过,读/写命令是怎么发出的呢?其实没有一个信号是发送读或写的明确命令的,而是通过芯片的可写状态的控制来达到读/写的目的。显然WE#信号就是一个关键。WE#信号无效时,当然就是读取命令。
在这里插入图片描述SDRAM基本操作命令,通过各种控制/地址信号的组合来完成的(H代表高电平,L代表低电平,X表示高低电平均没有影响)。此表中,除了自刷新命令外,所有命令都是默认CKE有效。对于自刷新命令,下文有详解。

列寻址信号与读写命令是同时发出的。虽然地址线与行寻址共用,但CAS信号则可以区分开行与列寻址的不同,配合A0-A9,A11来确定具体的列地址。

在这里插入图片描述

然而,在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS到CAS延迟),大家也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间所定制的延迟。tRCD是SDRAM的一个重要时序参数,可以通过设置SoC的内存控制器进行调整,但不能超过厂商的预定范围。广义的tRCD以时钟周期数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定。

(4)数据输出(读)

在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道输出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读潜伏期。CL的单位与tRCD一样,为时钟周期数,具体耗时有时钟频率决定。

不过,CAS并不是在经过CL周期之后才送达存储单元。实际上CAS和RAS一样是瞬间到达的,但CAS的响应时间要更快一些。为什么呢?假设芯片的位宽为n个bit,列数为c,那么一个行地址要选通n*c个存储体,而一个列地址只需选通n个存储体。但存储体中晶体管的反映时间仍会造成数据不可能与CAS在同一上升沿触发,肯定要延后至少一个时钟周期。

由于芯片体积的原因,存储单元中的电容容量很小,所以信号要经过放大来保证其有效的识别性,这个放大/驱动工作由S-AMP负责,一个存储体对应一个S-AMP通道。但它要有一个准备时间才能保证信号的发送强度,因此从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据即已传向S-AMP,也就是说此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出,这段时间我们称之为tAC(Access Time from CLK,时钟触发后的访问时间)。tAC的单位是ns,对于不同的频率各有不同的明确规定,但必须要小于一个时钟周期,否则会因访问时间过长而使效率降低。需要强调的是,每个数据在读取时都有tAC,包括在连续读取中,只是在进行第一个数据传输的同时就开始了第二个数据的tAC。

CL的数值不能超过芯片的设计规范,否则会导致内存的不稳定,设置无法开机,而且它也不能在数据读取前临时更改。CL周期在开机初始化过长中的MRS阶段进行设置。

不过,从存储体的结构图上可以看出,原本逻辑状态为1的电容在读取操作后,会因放电而变为逻辑0。所以,以前的DRAM为了在关闭当前行时保证数据的可靠性。要对存储体中原有的信息进行重写,这个任务由数据所经过的刷新放大器完成,它根据逻辑电平状态,将数据进行重写,由于这个操作与数据的输出是同步进行互补冲突,所以不会产生新的重写延迟。后来通过技术的改良,刷新放大器被取消,其功能由S-AMP取代,因为在读取时它会保持数据的逻辑状态,起到一个Cache的作用,再次读取时由它直接发送即可,不同在进行新的寻址输出,此时数据重新操作则可在预充电阶段完成。

(5)数据输入(写)

数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。

数据写入的时序图

从图中可见,由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入寄存器中,然后再由写入驱动器进行对存储电容的充电操作,因此数据可以与CAS同时发送,也就是说写入延迟为0。不过,数据并不是及时地写入存储电容,因为选通三极管与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校准时间(tWR,Write Recovery Time),这个操作也被称为写回。tWR至少占用一个时钟周期或再多一点,有关它的影响将下文进一步讲述。

(6)突发长度

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元的数量就是突发长度。在目前,由于内存控制器一次读/写一定位宽的数据,也就是8个字节,但是在现实中小于8个字节的数据很少见,所以一般都要经过多个周期进行数据的传输。上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读写命令。虽然由于读/写延迟相同可以让数据的传输在I/O端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。为此,人们开发了突发传输技术,只有指定起始地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期外,其后每个数据只需一个周期的即可获得。

非突发连续读取模式:不采用突发传输而是依次单独寻址,此时可等效于 BL=1。虽然可以让数据是连续的传输,但每次都要发送列地址与命令信息,控制资源占用极大。

至于BL的数值,也是不能随便设或在数据进行传输前临时决定。在上文讲到的初始化过程中的MRS阶段就要对BL进行设置。目前可用的选项是1、2、4、8和全页;常见的设定是4或8。顺便说一下,BL能否更改与内存控制器的设计有很大的关系,有的可能不支持。

另外,在MRS阶段除了要设定BL数值之外,还要具体确定读/写操作的模式以及突发传输的模式。突发读/突发写,表示读与写操作都是突发传输的,每次读/写操作只需BL所设定的长度,这也是常规的设定。突发读/单一写,表示读操作是突发传输,写操作则只是一个个单独进行。突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序。顺序传输是指从起始单元开始顺序读取。假如BL=4,起始单元编号是n,顺序就是n+1、n+2、n+3。交错传输就是打乱正常的顺序进行数据传输(比如第一个进行传输的单元是n,而第二个传输的单元是n+2而不是n+1),至于交错的规则在SDRAM规范中有详细的定义表,但在这此出于必要性与篇幅的考虑就不列出了。

7.预充电

由于SDRAM的寻址具有独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效的行关闭,重新发送行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。实际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,同时释放S-AMP(重新加入比较电压,一般是电容电压的1/2,以帮助判断读数据的逻辑电平,因为S-AMP是通过一个参考电压与存储体位线电压的比较来判断逻辑值的),以准备新行的工作。具体而言,就是将S-AMP中的数据回写。即使是没有工作过的存储体也会因为选通而使存储电容受到干扰,所以需要S-AMP进行读后重写。此时,电容的电量将是判断逻辑状态的依据,为此要设定一个临界值,一般为电容电量的1/2,超过它的为逻辑1,进行重写;否则为逻辑0,不进行重写。为此,现在基本都将电容的另一端接入一个指定的电压,而不是接地,以帮助重写时的比较与判断。

现在我们再回头看看读写操作时的命令时序图,从中可以发现地址线A10控制着是否进行读写之后当前L-Bank自动进行预充电,这就是上文所说的"辅助设定"。而在单独的预充电命令中,A10则控制着是对指定的L-Bank还是所有L-Bank进行预充电,前者需要提供L-Bank的地址,后者只需要将A10信号置于高电平。

在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔称为tRP(Precharge command Period,预充电命令周期)。和tRCD、CL一样,tRP的单位也是时钟周期,具体值视时钟频率而定。

读取时预充电时序图:图中设定:CL=2,BL=4,tRP=2。自动预充电时的开始时间与此图一样,只是没有了单独的预充电命令,并在发出读取命令时,A10地址线要设为高电平(允许自动预充电)。可见控制好预充电启动时间很重要,它可以在读取操作结束后立即进入新行的寻址,保证允许效率。

8.刷新
之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。刷新操作与预充电中重写的操作一样,都是用S-AMP先读再写。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没有经历重写的存储体中的数据。但与所有L-Bank预充电不同的是,这里的行是指所有L-Bank中地址相同的行,而预充电中各L-Bank中的工作行地址并不一定是相同的。

那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms,也就是说每一行刷新的循环周期是64ms,这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625us,8192行时就为7.8125us。

刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对AR,SDRAM内部有一个行地址生成器(也称为行刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说CAS在RAS之前有效。所以,AR又称为CBR式刷新。由于刷新涉及到所有L-Bank,因此在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期,之后就可以进入正常的工作状态,也就是说在这9个时钟周期内,所有工作指令只能等待而无法执行。64ms之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对SDRAM的性能造成影响,但这是没办法的事情,也是DRAM相对于SRAM取得成本优势的同时所付出的代价。

SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR。在发出AR命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外所有外部信号都是无效的,只有重新是CKE有效才能退出自刷新模式并进入正常操作状态。

9.数据掩码

在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4*64bit的数据。但是,如果其中的第二笔数据时不需要的,怎么办?还能传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是。这里需要强调的是,在读取数据时,被屏蔽的数据仍然会从存储体传出,只是在"掩码逻辑单元"处被屏蔽。DQM由内存控制器控制。

SDRAM官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即生效。

读取时数据掩码操作,DQM在两个周期后生效,突发周期的第二笔数据被取消。

写入时数据掩码操作,DQM立即生效,突发周期的第二笔数据被取消。

有关内存内部的基本操作就到此结束,其实还有很多内存的操作没有描述,但都不是很重要了,限于篇幅与必要性,我们不在此介绍,有兴趣的读者可以自行查看相关资料。

备注:本文的内容是从《高手进阶_终极内存技术指南》中抄写的。如果有疑问,欢迎留言讨论。强烈建议阅读。

DDR及SDRAM的区别下一个笔记讲述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值