双倍数据速率架构本质上是一个2n预取架构,其接口设计用于在I / O引脚上每个时钟周期传输两次数据。
信号线:
时钟控制:
时钟信号 CK/nCK input 系统时钟差分输入引脚,所有的地址和控制信号在CK的上升沿或者nCK的下降沿采样,输出数据在CK或者nCK的电平发生变化时被采样
时钟使能信号 CKE input 内部时钟使能信号,高电平有效,当系统处于掉电、挂机等状态时关闭SDRAM
数据信号 DQ[0:7] input/output 双向数据输入输出引脚
数据输入/输出 控制位(数据选通) DQS/nDQS input/output 在数据读模式下控制数据输出/在数据写模式下禁止写数据 数据选通:输出读数据,输入写数据。 与读取数据边缘对齐,以写入数据为中心。 用于捕获写入数据。
输入数据控制信号(屏蔽) DM input 当向SDRAM写入数据时来控制数据的输入,在高电平时被采样,如果有不想存入的数据,可以运用此引脚信号来屏蔽
命令控制:
片选信号 nCS input 使能(低电平)或者禁止(高电平)所有的引脚,当该引脚为高电平时,所有命令失效.
读写信号 nWE input 低电平表示写,高电平表示读操作
行地址信号 nRAS input 行地址信号
列地址信号 nCAS input 列地址信号
地址线:
bank选择控制信号 BA0-BA2 input 在ACTIVE、READ、WRITE、PRECHARGE命令下用来定义哪一块bank被选中
A0-A12(地址)input 在ACTIVE命令下提供行地址,在READ、WRITE命令下提供列地址,且A10被用来定义是否开启auto precharge。在PRECHARGE命令下A10决定PRECHARGE命令是应用在某一个bank还是所有的bank。
DDR SDRAM 全称为 Double Data Rate SDRAM,中文名为“双倍数据流 SDRAM”。DDR SDRAM 在原有的 SDRAM 的基础上改进而来。也正因为如此,DDR 能够凭借着转产成本优势来打败昔日的对手RDRAM,成为当今的主流。由于 SDRAM 的结构与操作在前一章已有详细阐述,所以本文只着重讲讲 DDR 的原理和 DDR SDRAM 相对于传统 SDRAM(又称 SDR SDRAM)的不同。
2.1 DDR 的基本原理
2.2 DDR SDRAM与SDRAM的不同
2.3 差分时钟
2.4 数据选取脉冲(DQS)
2.5 写入延迟
2.6 突发长度与写入掩码
2.7 延迟锁定回路(DLL)
DDR SDRAM 的 tAC 就是因为内部时钟与外部时钟有偏差而引起的,它很可能造成因数据不同步而产生错误的恶果。
鉴于外部时钟周期也不会绝对统一,所以需要根据外部时钟动态修正内部时钟的延迟来实现与外部时钟的同步,这就是 DLL 的任务。
DLL有两种实现方法,一个是时钟频率测量法(CFM,Clock Frequency Measurement),一个是时钟比较法(CC,Clock Comparator)。
第三章 DDR- II 的原理和新技术
3.1 DDR-II内存结构
3.2 DDR-II的新操作与新时序设计
3.2.1 片外驱动调校(OCD,Off-Chip Driver)
3.2.2 片内终结(ODT,On-Die Termination)
3.2.3 前置 CAS、附加潜伏期与写入潜伏期
前置 CAS(Posted CAS)是为了解决 DDR 内存中指令冲突而设计的功能。它允许 CAS 信号紧随 RAS发送,相对于以往的 DDR 等于将 CAS 前置了。
3.3 DDR-II 的发展计划
3.3.1 DDR-II未来发展
3.3.2 DDR-II时代的封装技术
1.
SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输;而DDR内存则是一个时钟周期内传输两次数据,它能够在时钟的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。DDR内存可以在与SDRAM相同的总线频率下达到更高的数据传输率。
2.
DDR核心频率、工作频率,等效频率
内存主频和CPU主频一样,习惯上被用来表示内存的速度,它代表着该内存所能达到的最高工作频率。
DDR内存和DDR2内存的频率可以用工作频率和等效频率两种方式表示,工作频率是内存颗粒实际的工作频率,但是由于DDR内存可以在脉冲的上升和下降沿都传输数据,因此传输数据的等效频率是工作频率的两倍。
内存工作频率=内存颗粒核心频率x2
内存频率在一定程度上决定了内存的实际性能,内存频率越高,说明该内存在正常工作下的速度越快
等效频率和内存预读,DDR内存的预读取是2bit,DDR2的预读取是4bit,DDR3则提升为8bit
3.预取
2bit预取架构允许内部的队列(column)工作频率仅仅为外部数据传输频率的一半.比如内部核心频率是100MHZ,外部时钟200MHZ就可以实现一个周期传输两次数据。
2-bit数据得先从存储单元预取出来才行(一个时间周期)。一次读2-bit的数据,然后在I/O时钟上升沿和下降沿传输出去,这就是2-bit Prefetch技术。
在DDR2时代,使用了4-bit预取技术,一次从存储单元预取4-bit的数据,然后在I/O时钟上升沿和下降沿传输出去,由于4-bit需要2个时钟周期才能完成传输,这就是为什么DDR2的I/O时钟频率为存储单元频率两倍的原因。
到了DDR3,8-bit预取技术也自然水到渠成,一次从存储单元预取8-bit的数据,在I/O端口处上下沿触发传输,8-bit需要4个时钟周期完成,所以DDR3的I/O时钟频率是存储单元核心频率的4倍,由于是上下沿都在传输数据,所以实际有效的数据传输频率达到了核心频率的8倍。比如,核心频率为200MHz的DDR3-1600,其I/O时钟频率为800MHz,有效数据传输频率为1600MHz。显然,通过使用Prefetch架构可以解决存储单元内部数据总线频率(核心频率)较低的瓶颈。8-bit预取,正是DDR3提升带宽的关键技术。同样的核心频率,DDR3能提供两倍于DDR2的带宽。
4.L-BANK 芯片位宽
逻辑BANK(L-BANK):DDR内部是一个存储阵列(row,column).一个颗粒一般有4个L-BANK组成。每个L-BANK里面有若干个存储单元组成。
位宽就是内存或显存一次能传输的数据量。
5.芯片规格32Mx4bit = 128Mbit的DDR
以本芯片为例,在读取时,L-Bank 在内部时钟信号的触发下一次传送 8bit 的数据给读取锁存器,再分成两路 4bit 数据传给复用器,由后者将它们合并为一路 4bit 数据流,然后由发送器在 DQS的控制下在外部时钟上升与下降沿分两次传输 4bit 的数据给北桥。这样,如果时钟频率为 100MHz,那么在 I/O 端口处,由于是上下沿触发,那么就是传输频率就是 200MHz。
现在大家基本明白 DDR SDRAM 的工作原理了吧,这种内部存储单元容量(也可以称为芯片内部总线位宽)=2×芯片位宽(也可称为芯片 I/O 总线位宽)的设计,就是所谓的两位预取( 2-bitPrefetch),有的公司则贴切的称之为 2-n Prefetch(n 代表芯片位宽)。
SDRAM 控制器的解析
1.Precharge与Refresh的区别?
plj:两者都是对存储单元的电容进行充电、回写。但差异在于:
Precharge是对(一个或所有Bank)的所有工作行(active row)操作,并且是随机的,被操作工作行的地址在各Bank中不一相同。
Refresh是对所有行依次操作,且是有固定周期的,被操作行在各Bank中均相同。
2.AutoRefresh与SelfRefresh的区别?
plj:AutoRefresh是user依照指定周期发给芯片的刷新命令
SelfRefresh是芯片内部逻辑发给自己的刷新命令
无论何种Refresh均不需要提供地址,它是芯片内部的自动操作。
3.R/W带与不带Auto Precharge的区别?
plj:带AutoPrecharge时:在R时,芯片自动在(最后一个有效输出数据)前(CL-1)个时钟时产生Precharge命令。
在W时,芯片自动在(最后一个有效输出数据)后(Twr)时间产生Precharge命令。
不带AutoPrecharge时,需要user在上述时刻自己产生Precharge命令。
4.CL参数只有效于Read操作。
5. 每个Bank中只能有一个Row处于active状态,且可以进行R/W。
如果想操作同Bank中的另外一个Row,必须使用Precharge关闭当前工作Row,然后再active目的Row,这样才能R/W
6. 每个Bank均active一个Row,依次在各个Bank间操作Row,这样避免R/W时消耗的多余时钟周期,可以提高数据传输带宽
1.正常Read时的Precharge
Auto_Precharge和手动Precharge都在最后一个有效数据(LVD)前CL-1个时钟上升沿发出
2. 手动Precharge终结Read
手动Precharge在最后一个有效数据(LVD)前CL-1个时钟上升沿发出
3.手动Burst Terminate终结Read
Burst Terminate在最后一个有效数据(LVD)前CL-1个时钟上升沿发出
4.正常Write时的Precharge
Auto_Precharge和手动Precharge都在最后一个有效数据(LVD)后tWR/tDPL时间的时钟上升沿发出
5. 手动Precharge终结Write
手动Precharge在最后一个有效数据(LVD)后tWR/tDP时间的时钟上升沿发出
或者在Precharge同时使能DQM屏蔽掉同时刻写入的数据
6.手动Burst Terminate终结Write
Burst Terminate在最后一个有效数据(LVD)后1个时钟上升沿发出
7.Burst Terminate与手动Precharge在终结Read/Write中的区别?
带AutoPrecharge的R/W过程中,禁止使用BT和手动Precharge命令。
Burst Terminate适用于 全页R/W、不带AutoPrecharge的突发R/W
1.SDRAM的burst mode
SDRAM是一种命令型动作的设备,就算读写资料只有一个也要先下命令才可以用,为了增加工作效率,就产生了一种传送一个命令,写多个数据的模式,这就是burst mode。
burst mode是一种利用内部列地址发生器来工作的高速读写模式,只要设置最开始的列地址,后面的地址就可以通过内部的列地址发生器来自动生成。
2.为什么要做precharge动作?
关闭正在作用的SDRAM bank,算是一种结束命令,后面可以下新的命令。我想这是和SDRAM内部管理有关。(这是从网上查到的,感觉不够详细,也不太理解)
3.自动刷新功能?
动态存储器(Dynamic RAM)都存在刷新问题。这里主要采用自动刷新方式,每隔一段时间向SDRAM发一条刷新命令。
4.SDRAM的地址线
在我们一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址线,然后可以算出寻址空间,比如有11根地址线,那寻址空间就是2的11次方减1。但是SDRAM是分列地址和行地址的,行、列地址线是复用的,所以有时候我们看到说寻址空间有多大多大,但是看看地址线怎么就那么几根啊,呵呵。SDRAM一般还有2根BANK的线,分成4个BANK,在有的处理器的SDRAM控制模块中,这两根线可能映射到地址线的某两根去。一般芯片常按照以下方式写芯片的配置,比如4Meg x 4 x 16,那这个芯片就是256Mbits。其中16指数据线是16根,中间一个4是只分4个BANK, 每个BANK是4Meg。
5.SDRAM的初始化
SDRAM上电后使用前必须要经过一段初始化操作才可以使用。这个操作过程是标准的过程。这个过程如下
precharge
auto-refresh
Load Mode Register
Normal Read/Write
在上电后输入初始化命令之前,最少要100us延迟(这个其实很容易满足,呵呵)。
在输入precharge命令后,因为必须是对所有BANK进行Precharge,所以A10这个管脚要设置成高,因此在Precharge后面要做一个读的操作,这个操作最主要的是在SDRAM的寻址空间里设置的地址必须是A10是高的。
在输入Auto-refresh命令后,一般要跟几句空操作或者读什么之类的,反正要达到延迟的目的,以使得SDRAM有时间来完成refresh。
之后就是要设置SDRAM的模式寄存器,这个寄存器里一般设置了burst长度,CAS,burst类型,操作模式,还有是设置SDRAM是工作在单个读写操作还是burst操作下。而这个寄存器的设置也是通过地址线来设置的,所以在发出Load Mode Register命令后要做一个操作可是使得在SDRAM的地址线上出线的值就是你要设置的值。这里很有必要提醒的一下的是,这个操作是8位的操作,切记切记。
设置完模式寄存器后就进入正常操作模式。
实际上具体的操作要跟选用的处理器的SDRAM控制模块相结合来设置。对于这些初始化命令比较直观的理解就是拿逻辑分析仪来分析。
在这里需要提醒一下CAS这个参数很重要。还有SDRAM必须要刷新的,因此刷新频率可以按照手册算出来的,但是设置的高一点也是可以的。常常SDRAM都有工作频率,但是也可以工作在低一点的频率上,比如PC133的,你工作到100也是可以的,设置基本不需要修改。
6.基本读写操作
SDRAM的基本读操作需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD(SDRAM的RAS到CAS的延迟指标)时间后,发出读命令字。CL(CAS延迟值)个工作时钟后,读出数据依次出现在数据总线上。在读操作的最后,要向SDRAM发出预充电(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHAREG命令后,相隔tRP时间,才可再次访问该行)后,可以开始下一次的读、写操作。SDRAM的读操作只有突发模式(Burst Mode),突发长度为1、2、4、8可选。
SDRAM的基本写操作也需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD的时间后,发出写命令字。写命令可以立即写入,需写入数据依次送到DQ(数据线)上。在最后一个数据写入后延迟tWR时间。发出预充电命令,关闭已经激活的页。等待tRP时间后,可以展开下一次操作。写操作可以有突发写和非突发写两种。突发长度同读操作。
7.其他
我们有时候看到有的原理图上数据线有倒过来接的,其实这个无所谓的,反过接,写进去的就是反的,但是读出又反了一下,反反两次正好没反。
延伸一下到DDR,其实DDR就是SDRAM外面加了一个乌龟壳。因此初始化是一样的。当然DDR一是多了一个把时钟频率反相的时钟,因此有2个相位差180度的时钟。这两个一般都是用同一个时钟源产生,一致性会比较好。还有多了2个DQS,这个也是一个时序要求,一般CPU的控制模块都有设置好了。如果你使用的CPU不含有控制模块,那用FPGA去做一个控制模块的话,那就要好好研究时序了。
在有些处理器的控制模块中,由于EMI的设置,地址线映射关系复杂,因此推算会比较麻烦,一般如果没有什么映射的话,还是很容易操作的。
刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。
对于AR, SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说CAS在RAS之前有效。所以,AR又称CBR(CAS Before RAS,列提前于行定位)式刷新。由于刷新涉及到所有L-Bank,因此在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期(PC133标准),之后就可进入正常的工作状态,也就是说在这9 个时钟期间内,所有工作指令只能等待而无法执行。64ms之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对SDRAM的性能造成影响,但这是没办法的事情,也是DRAM相对于SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。
SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR(Suspend to RAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。