SDRAM的时序问题,

本文详细解析了SDRAM的关键时序参数,包括CAS潜伏期(CL)、RAS至CAS延迟(tRCD)及预充电时间(tRP),并介绍了SDRAM的工作流程,如初始化、行有效、列读写等步骤,帮助读者深入了解SDRAM的工作原理。

转载:https://blog.youkuaiyun.com/chenhongfeng1122/article/details/24876045

https://blog.youkuaiyun.com/shijiemazhenda/article/details/6774914

SDRAM的时序主要关注三个时间:

CL=2:CAS Latency,CAS 潜伏期,CAS与读取命令发出到第一笔数据输出的时间  ----读操作
tRCD=2:RAS to CAS Delay(RAS 至 CAS 延迟),行地址发完后,再发列地址的延迟时间  ----行列地址延迟
tRP=2:关闭现有工作行,准备打开新行,经过一段时间才能允许发送 RAS 行有效命令打开新的工作行的时间 ----预充电时间
OK,至此三个时间全部清清楚楚了。

在外部接口采用的是行地址和列地址复用的方式,为此增加了两个接口:行地址选通RAS,列地址选通CAS。tRCD(一般为2-3个周期)是行选通RAS和列选通CAS之间的等待时间,CL是列地址选通到第一个数据读出的延迟(一般为2-3个周期),

DDR出身自SDRAM,严格的说应该叫DDR SDRAM,DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思,所以,有很大一部分,两者是一样的,理解SDRAM,然后再来理解DDR在SDRAM上的改进,效果应该更好一些,这里要感谢Chinaunix.net的大神--Tekkaman Ninja,我的内存的学习资料都是Tekkaman Ninja的博客中介绍的。以下是我对大神推荐文档的一些个人整理,OK,先上一张SDRAM的结构图。


下面上一张我画的简易的SDRAM工作流程图

图中用红色标明的就是我们需要找的几个主要时间,现在开始看图说话。
1.芯片初始化
SDRAM 芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时 SDRAM 都要先对这个控制逻辑核心进行初始化。

2.行有效 
初始化完成后,要想对一个 L-Bank 中的阵列进行寻址,首先就要确定行(Row),使之处于活动状态(Active),然后再确定列。简单点理解就先传行地址过来。

3.列读写
行地址确定之后,就要对列地址进行寻址了。读写的信号和列地址是同时发过来的,读写的操作取决于WE#引脚,当他使能则为写,否则为读。
在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为 tRCD,即RAS to CAS Delay(RAS 至 CAS 延迟),大家也可以理解为行选通周期,简单点理解就是说,在发完行地址后,再发列地址和读写信号时,需要延迟一下,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。
广义的 tRCD 以时钟周期(tCK,Clock Time)数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100 SDRAM,tRCD=2,代表1000/100 * 2 = 20ns 的延迟,下图是tRCD=3的时序图。

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

5.数据输入(写)
数据写入的操作也是在 tRCD 之后进行,但此时没有了 CL(记住,CL 只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。 
为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR 至少占用一个时钟周期或再多一点(时钟频率越高,tWR 占用周期越多)
 

6.突发长度--(Burst Lengths)

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称 BL)。 

只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是 tRCD+CL)外,其后每个数据只需一个周期的即可获得。


7.预充电
由于 SDRAM 的寻址具体独占性,所以在进行完读写操作后,如果要对同一个Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。Bank 关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。 
在发出预充电命令之后,要经过一段时间才能允许发送 RAS 行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)。和 tRCD、CL 一样,tRP 的单位也是时钟周期数,具体值视时钟频率而定。

8.刷新
之所以称为 DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最重要的操作。刷新操作与预充电中重写的操作一样,都是用 S-AMP 先读再写。 
但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有L-Bank 中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank 预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。比如我有四片,刷新是我依次刷新四片内存中的某个地址,然后再刷下一个;而预充电的工作行地址可以不同。
那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000 秒),也就是说每一行刷新的循环周期是 64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到 4096 Refresh Cycles/64ms 或 8192 RefreshCycles/64ms 的标识,这里的 4096 与 8192 就代表这个芯片中每个 L-Bank 的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096 行时为 15.625μs(微秒,1/1000 毫秒),8192 行时就为 7.8125μs。 
刷新操作分为两种:自动刷新(Auto Refresh,简称 AR)与自刷新(Self Refresh,简称 SR)。
SR 则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是 STR(Suspend to RAM,休眠挂起于内存)。在发出 AR 命令时,将 CKE 置于无效状态,就进入了 SR 模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在 SR 期间除了 CKE 之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使 CKE 有效才能退出自刷新模式并进入正常操作状态。
 

 

以上就是SDRAM是主要工作步骤,对比一下最上面的简易工作流程图,时间是不是就很清楚了呢?

CL=6:CAS Latency,CAS 潜伏期,CAS与读取命令发出到第一笔数据输出的时间  ----读操作
tRCD=6:RAS to CAS Delay(RAS 至 CAS 延迟),行地址发完后,再发列地址的延迟时间  ----行列地址延迟
tRP=6:关闭现有工作行,准备打开新行,经过一段时间才能允许发送 RAS 行有效命令打开新的工作行的时间 ----预充电时间
OK,至此三个时间全部清清楚楚了。

<think>嗯,用户想了解SDRAM时序相关信息。查询了站内资料后发现有三个相关引用,需要综合分析这些材料来组织回答。 引用[1]提到刷新操作是对整行进行的同步充电,附带了刷新时序图说明。引用[2]详细描述了初始化流程:100us延时->预充电->至少两次自刷新->模式寄存器设置。引用[3]则补充了芯片位宽的基础概念,指出常见SDRAM多为8bit位宽。 用户明确要求的是"时序介绍",应该重点突出操作流程的时间特性。考虑将内容分为四个逻辑模块:初始化时序强调100us等待和命令序列,刷新时序解释整行刷新机制,读写时序注意行列地址切换,还有模式寄存器配置的细节。 需要特别注意技术描述的准确性:预充电命令使用A10控制单个/全部Bank,模式寄存器通过地址线配置参数。在刷新部分要强调"整行同步刷新"这个关键点来自引用[1]。 还要补充些实用建议:比如实际开发时需要查芯片手册获取具体参数,以及FPGA控制时状态机设计要点。最后准备的相关问题要覆盖优化方法和常见错误排查,帮助用户深化理解。 </think>以下是关于SDRAM时序的详细介绍,结合关键操作流程和时序图要点: --- ### **一、初始化时序(必须严格遵循)** 1. **上电稳定期** - 电源(Vdd/Vddq)开启后需保持时钟稳定,拉高 `DQM` 和 `CKE` 信号 - **关键延迟**:等待至少 `100µs`,期间禁止发送任何命令 [^2] 2. **预充电阶段** ```mermaid timeline title 预充电时序 时刻 0 : 发送预充电命令(Precharge) 时刻 tRP : 经过预充电时间后,所有Bank进入空闲状态 ``` - 通过地址线 `A10` 选择单Bank或全Bank预充电 3. **自刷新周期** - 执行至少 **2次自刷新命令**(Auto Refresh) - 每次刷新需满足时序参数 `tRFC`(Refresh Cycle Time)[^2] 4. **配置模式寄存器(MRS)** ```plaintext ┌─────────┬─────┬─────┬──────┐ | 命令 | A0 | A1 | ... | ├─────────┼─────┼─────┼──────┤ | MRS命令 | 0 | 1 | ... | → 设置突发长度/潜伏期等 └─────────┴─────┴─────┴──────┘ ``` - 地址线配置参数:突发长度(Burst Length)、CAS延迟(CAS Latency)等 --- ### **二、刷新时序(核心机制)** 1. **刷新原理** - 每次刷新操作对**整行电容同步充电**(非单个电容)[^1] - 典型刷新周期:**64ms内完成8192次刷新**(针对8K行标准SDRAM) 2. **刷新时序图要点** ```mermaid timeline title 刷新操作流程 时刻 T0 : 激活CKE并发出刷新命令 时刻 T1 : 保持命令有效直到tRFC满足 时刻 T2 : 可执行后续操作 ``` - 刷新期间禁止访问存储器,需等待 `tRFC`(通常60-70ns) --- ### **三、读写时序关键点** 1. **读操作时序** - 激活命令(ACT)→ 发送行地址 - 延迟 `tRCD`(RAS to CAS Delay)后发送读命令 + 列地址 - 数据在 `CAS Latency(CL)` 个周期后输出 2. **写操作时序** - 激活命令(ACT)→ 发送行地址 - 延迟 `tRCD` 后发送写命令 + 列地址 - 数据与写命令**同时输入** 3. **突发传输** - 基于模式寄存器设置的突发长度(1/2/4/8)连续传输数据 --- ### **四、关键时序参数表** | 参数 | 符号 | 作用 | 典型值 | |--------|-------|--------------------------|------------| | 行地址选通时间 | tRCD | 行激活到列命令的延迟 | 15-20ns | | 行预充电时间 | tRP | 预充电命令的执行时间 | 15-20ns | | 刷新周期 | tRFC | 刷新操作所需时间 | 60-70ns | | CAS延迟 | CL | 列命令到数据输出的延迟 | 2-3个时钟周期 | --- ### **五、实际应用注意** 1. **位宽扩展** - 单芯片位宽通常为 **8bit** 或 **16bit** - 系统位宽需通过多芯片并联实现(如32位系统需4片8bit SDRAM)[^3] 2. **时序收敛** - FPGA/控制器需严格满足 `tRCD`、`tRP`、`CL` 等参数 - 信号完整性要求:时钟抖动<±5%,地址/命令建立保持时间>1ns > 📌 **提示**:具体参数请以芯片手册为准(如IS42S16400J规格书中tRCD=18ns@133MHz) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值