Skip to content

Latest commit

 

History

History
263 lines (154 loc) · 11.5 KB

200908a_sdram.md

File metadata and controls

263 lines (154 loc) · 11.5 KB

有关SDRAM以及DDR的工作原理概括,学习备忘

参考自 https://max.book118.com/html/2015/0830/24325867.shtm

部分理解可能不是很正确,待修正

目录

  • 1 SDRAM简记
    • 1.1 SDRAM存储编址
    • 1.2 SDRAM逻辑引脚定义
    • 1.3 常用命令
    • 1.4 关键参数
    • 1.5 突发传输(Burst)
    • 1.6 预充电(Precharge)
    • 1.7 刷新(Refresh)
    • 1.8 DQM信号(DQ Mask)
  • 2 关于DDR
    • 2.1 DDR SDRAM存储编址
    • 2.2 DDR SDRAM初始化过程
    • 2.3 SDRAM逻辑引脚定义
    • 2.4 参数
    • 2.5 信号线
    • 2.6 写入延迟
    • 2.7 突发长度
    • 2.8 DLL延迟锁定回路
  • 3 进阶:关于DDR2,DDR3等较新的DDR
    • 3.1 DDR2和DDR的区别
    • 3.2 支持的一些新功能
    • 3.3 DDR3

1 SDRAM简记

1.1 SDRAM存储编址

可以分为BANK-ROW-COLUMN三级,对于SDRAM来说芯片位宽和数据单元大小相等,而DDR位宽是芯片数据单元大小的二分之一

1.2 SDRAM逻辑引脚定义

注:#低电平有效

名称 作用描述
CS# 片选
RAS# 行地址选
CAS# 列地址选
WE# 写允许
CK 时钟
CKE 时钟有效
DQn 数据IO,数量由芯片位宽决定
BAn Bank地址线
An 地址线,行地址和列地址复用,A10一般用于控制预充电
DQMH/DQML 即DQ Mask,用于屏蔽数据高半部分/低半部分

SDRAM初始化过程:SDRAM在启动上电后,首先等待200us使时钟稳定,再对所有L-Bank预充电,8个刷新周期后再进行MRS(即模式寄存器设置)

行启用:RAS有效,CAS无效,WE无效,在时钟上升沿触发,同时锁存An行地址以及BAn Bank地址

列读写:RAS无效,CAS有效,WE视情况,在时钟上升沿触发,随后读出DQ/输入DQ

1.3 常用命令

功能 RAS# CAS# WE# BAn An DQn
无操作 1 1 1 X X
行有效 0 1 1 Bank+行地址 X
列读取 1 0 1 Bank+列地址 输出
列写入 1 0 0 Bank+列地址 输入
Burst终止 1 1 0 X 活动
预充电 0 1 0 A10 X
MRS 0 0 0 操作码 X

1.4 关键参数

注:平时一般的内存参数以tCL-tRCD-tRP表示;另外,注意延时(Delay)和潜伏期(Latency)的概念不同

数据读

tRCD:RAS to CAS Delay,RAS选通以后到可以允许输入CAS的延时,延时期间保持无操作命令,单位nCK

tCL:CAS Latency,CAS输入以后到DQ有输出的潜伏期,单位nCK

tAC:数据已经从存储单元发送到S-AMP,直到从数据总线输出经历的时间,单位ns

tRP:预充电周期,见预充电,单位nCK

数据写

注:SDRAM进行数据写时是没有tCL的,因为是输入,但是tRCD还是有的

tWR:触发CAS后直到稳定写入占用的时间,一般占用一个或者更多的时钟周期,单位也是nCK

1.5 突发传输(Burst)

突发传输,即连续传输,就是给定一个地址,之后SDRAM将该地址及之后共n个存储单元内的数据依次传出,无需再依次CAS,CAS一次以后保持NOP无操作n-1个时钟即可

参数

BL:即n,指定一次连续读取的存储单元数,有些芯片是定死的不可更改的,一般为4或者8

模式

顺序/交错:在SDRAM中,突发传输可以1234顺序进行,也可以1324交错进行,通过MRS设置

突发读突发写/突发读单一写:字面意思,好理解,通过MRS设置

1.6 预充电(Precharge)

在SDRAM中,如果要到一个Bank的不同行进行寻址,就要将当前行关闭,重新发送新行/列地址。预充电就是关闭当前行并且准备打开新行的过程,对一个行进行重写

自动预充电:在CAS中,若A10有效则在CAS读取BL个时钟周期后自动进行预充电,预充电时间为tRP,单位nCK,否则在CAS结束之后需要单独的预充电命令

写入时的预充电需要在CAS写入BL个时钟周期以后再加等待tWR写回延迟以后才能进行预充电,这点和读取不同

1.7 刷新(Refresh)

刷新操作是DRAM区别于SRAM的最主要特征之一

刷新依次对所有行进行刷新重写,一般认为数据可以在SDRAM的微电容里面保存的时间为64ms,刷新参数也是以64ms为标准,如4096 Refresh Cycles/64ms。

自动刷新(AR)

又称为CBR,即CAS Before RAS式刷新,对一行进行刷新,不需要列寻址,涉及到所有L-Bank,所有L-Bank停止工作,等待刷新所需n个时钟周期

自刷新(SR)

常用于待机状态,特殊的AR命令,发出命令同时将CKE拉低,SDRAM将使用自带的时钟刷新,恢复只要拉高CKE

1.8 DQM信号(DQ Mask)

用于屏蔽输入输出,有的可以分别屏蔽高位和低位数据线,分别为DQMH/DQML

读取屏蔽

读取屏蔽在CAS输入时进行采样,在突发读时在CAS及之后BL周期内采样,并且在CL时间后生效,在读取结果中显现出来

写入屏蔽

写入屏蔽即时生效

2 关于DDR

DDR SDRAM,即Double Data Rate SDRAM,由SDRAM改进得来,相比SDRAM拥有双倍数据速率

2.1 DDR SDRAM存储编址

基本和SDRAM相同,不同点是DDR内部存储单元位宽是数据线的2倍 (2-bit Prefetch),传输时一个单元的数据在一个时钟分两次输出,传输频率是时钟的2倍

2.2 DDR SDRAM初始化过程

相比SDRAM的MRS,DDR还有EMRS,用以控制DLL使能,QFC使能,输出驱动强度

注:QFC即FET开关控制,低电平有效,已经基本淘汰

2.3 SDRAM逻辑引脚定义

相比SDRAM,DDR不同的信号

名称 作用描述
CLK# 和CLK反相,高频下利于增强时钟的稳定性,用于内部使用二者差分信号产生校准后时钟增强抗干扰能力保证稳定性,某种意义上也方便倍频输出的实现
DQS 数据同步脉冲
DQM DDR只支持写入屏蔽,不支持输出屏蔽

2.4 参数

tCL:在DDR中,tCL可以不为整数,比如2.5,数据输出可以在CK半周期开始,另外这里的tCL指的是从CAS发送到DQS有输出的潜伏期,有关DQS见下

tAC:由于以上原因,DDR的tAC定义和SDRAM不同,实际上DQ有数据输出可能比DQS触发早,tAC表示的就是这段时间

tDQSS:重要参数,和SDRAM不同,DDR有写入延迟,即从发送写入命令到可以触发DQS的延迟,见下写入延迟

tWR:DDR的tWR相比SDRAM更长,因为内部需要更多时间处理输入的数据,存储到单元内

2.5 信号线

2.5.1 DQS信号

是一条双向IO,基本就是数据同步信号,可以发出时钟也可以接收时钟

读操作

读取数据时,DQS为输出模式,和CK或CK#同步,上下沿分隔数据周期

写操作

写入数据时,DQS为输入模式,一般和CK或CK#同步(不同步也可以),发送CAS后负跳变,在DQS上下沿之间选取数据分割点,使用上下沿触发输入数据

2.5.2 DQM信号

同SDRAM,但是只能屏蔽输入,和数据同步,在DQS跳变时被采样

2.6 写入延迟

从发送写入命令到可以触发DQS的延迟tDQSS,一般为一个时钟周期左右,用于等待DDR为接收数据做准备,这个参数导致DDR读后写变慢

2.7 突发长度

DDR的突发长度定义和SDRAM不同,由于DDR一个周期传输两次数据,DDR的突发长度是定义在单次数据传输而不是内部数据单元位宽。举个栗子,如果BL=2,则DDR传输了两次数据,计一个存储单元的数据量

另外,DDR不支持BL=1的单一操作(原理限制,好理解)

2.8 DLL延迟锁定回路

相比SDRAM,虽然DDR也有内部和外部时钟(两者理论上同步),但是由于DDR频率较高,容易导致两者不同步(tAC就是因此产生),DLL就是基于外部时钟修正内部时钟使两者同步;DLL在DDR中默认开启

有两种类型的DLL,一种是CFM,一种是CC

CFM时钟测量:字面意思,测量外部时钟周期长度设置到内部时钟,调节速度快,易受干扰出错

CC时钟比较:逐步逼近法,负反馈调节,据外部内部时钟时间差调节内部时钟,调节速度慢,稳定

3 进阶:关于DDR2,DDR3等较新的DDR

由于专栏的时效性,当时DDR2还没正式公布,更别说DDR3了,就简单一点,遇到问题以后补充,不过区别不大就是了x,而且DDR2和DDR3基本相同,有些ARM SoC或者芯片组支持这两者

3.1 DDR2和DDR的区别

从2bit预取改成了4bit预取,一个时钟依然传输2次,外部时钟可以翻倍,存储单元位宽是数据线的4倍,外部数据传输频率是内部存储阵列频率的4倍

L-Bank最多可以8个

内部时钟频率为外部时钟一半,因为内部一次传输可以供外部传4次

工作电压有所降低

增加DQS#构成DQS差分信号

CL不能取小数

个人理解:DDR2相比DDR的提升基本就是由于存储单元容量翻了一倍,相同宽度总线可以一次实现4bit预取,内部存储阵列的频率提升可能不是很大,而外部逻辑部分工作速度翻倍,所以DDR2表面貌似支持更高的频率,其实内部存储阵列工作频率甚至可能比DDR还低,比如 DDR2 667 (166) 和 DDR 400 (200),DDR和DDR2在相同外部频率下带宽相同,DDR2需要DDR两倍的外部频率才能实现性能翻倍,这就是变相的提速,用更大的并行弥补核心频率的不足,看似性能提升很多,其实根本上还是在数量红利下挤牙膏,SDRAM到DDR基本也同理(其实也是好事,减少了功耗,降低技术难度,只提高逻辑单元频率是一种更经济合理的方式,不然也不会这么设计了)

3.2 支持的一些新功能

OCD片外驱动调校

在EMRS时设置,在IO增加上拉下拉电阻,一般只在服务器有用,就不讨论了

ODT片内终结

比较重要的一个特性,在EMRS时设置,用于吸收信号残余电荷防止对之后的操作造成干扰,将信号线拉至中电位。之前在DDR中这是通过主板上的终结电阻实现的,为简化主板设计引入ODT,在芯片内实现,可以对DQS,DQ,DM进行终结

一般有150,75ohm两档

写入时有两条内存就75,单条150

前置CAS以及AL附加潜伏期,WL写入潜伏期

DDR2允许CAS紧随RAS,但是输出时间不会变,读取潜伏期RL=AL+CL,写入潜伏期WL=RL-1(写入潜伏期以数据输入而不是DQS触发为标准),消除命令冲突提高速度

AL=tRCD+CL-1

AL=0禁用CAS前置,可以设为1-4

默认0,启用的情况也只在服务器常见,日常还是传统模式居多

3.3 DDR3

DDR3相比DDR2速度再翻倍,使用8bit预取,外部数据传输频率是核心频率的8倍,但是有一个冷知识是相同频率下DDR3性能一般是不如DDR2的,因为DDR3延迟大