SDRAM 介绍

SDRAM 介绍

前言

本文通过镁光 SDRAM 芯片(型号:MT48LC16M8A2TG)手册来学习 SDRAM 的工作原理。

结构框图

在这里插入图片描述

引脚及定义

名称类型(对于 SDRAM)定义
CLKInput时钟
CKEInputCLK 时钟使能,高有效
CS#Input片选信号,低有效
CAS#,RAS#,WE#Input命令信号,同 CS# 组成不同操作命令
x4,x8: DQM ; x16: DQML,DQMHInput数据掩码,高有效
BA[1:0]Inputbank 地址
A[11:0]Input① 激活命令时,A[11:0] 作为行地址;② 读/写命令时,A[9:0] 和 A[11] 作为列地址,A[10] 用来指示是否使能自动预充电(高电平有效);③ 预充电命令时,A[10] 高电平表示对所有 bank 进行预充电,低电平表示只对 BA[1:0] 指示的 bank 进行预充电; ④ 加载模式寄存器命令时,A[11:0] 用来表示操作码
x16: DQ[15:0]; x8: DQ[7:0]; x4: DQ[3:0]Inout数据
VDDQSupplyDQ 电源
VSSQSupplyDQ 地
VDDSupply芯片电源
VSSSupply芯片地

命令

命令真值表

在这里插入图片描述

注释:

  1. CKE 除了自刷新命令(SELF REFRESH) 为高电平,其余命令下均为低电平

  2. A[11:0] 用于指示行地址,BA[0:1] 用于指示 bank 地址

  3. 读/写命令时,A[9:0] 和 A[11] 作为列地址,A[10] 用来指示是否使能自动预充电(高电平有效)

  4. BURST TERMINATE 表示中断突发命令

  5. 预充电命令时,A[10] 高电平表示对所有 bank 进行预充电,低电平表示只对 BA[1:0] 指示的 bank 进行预充电

  6. 自动刷新(AUTOREFRESH): CKE = 1; 自刷新(SELF REFRESH):CKE = 0

  7. 加载模式寄存器命令时,通过 A[11:0] 将操作码写入寄存器

  8. 写命令时,DQ 与 DQM 同时有效;读命令时,DQ 相对 DQM 延时 2 个时钟周期(即 DQM 需提前两个时钟周期)

① COMMAND INHIBIT

禁止执行新命令,不管 CLK 是否使能。但是正在进行的操作不会受影响

② NO OPERATION (NOP)

空闲命令,可防止在空闲或等待状态下使用不合规的命令

③ LOAD MODE REGISTER (LMR)

加载模式寄存器命令时,通过 A[11:0] 将操作码写入寄存器。此命令只能在所有bank闲置时发出,并且在 TMRD 后才能进行其他操作。

④ ACTIVE

在读写操作之前,一般要进行激活操作,这是因为 SDRAM 的行列地址线是同一组地址线,分时复用,读写操作发送的是列地址,所以在此之前需要确定读写操作的行地址以及 bank,这就是激活操作,在告知 SDRAM 行地址之后,SDRAM 还需要 TRCD 时间才能把该行激活,之后就可以对该行数据进行读写操作了。

激活命令时,通过 BA[1:0] 选择要访问的 bank,通过 A[11:0] 选择访问的行。在向 bank 发出预充电命令之前,该行将保持激活状态以供访问。

若要访问同一 bank 的其他行,必须先对该 bank 进行预充电,然后再激活待访问行,最后才能进行读写操作。

⑤ READ

读命令时,A[9:0] 和 A[11] 作为列地址,A[10] 用来指示是否使能自动预充电(高电平有效)。

当选择自动预充电时,正在访问的行将在读突发结束时自动进行预充电操作。未选择自动预充电时,该行将保持激活状态,后续仍可访问。

发送读指令后,SDRAM 会在 2~3 个时钟周期才会给出数据,这段时间称为潜伏期,具体时间可以通过模式寄存器设置。

DQ 的读取数据受两个时钟前(与潜伏期无关)的 DQM 状态影响,如图29所示。当 DQM 为高电平时,相应的 DQ 将在两个时钟后变为高阻态。当 DQM 为低电平时,DQ 将输出有效数据。

⑥ WRITE

写命令时,A[9:0] 和 A[11] 作为列地址,A[10] 用来指示是否使能自动预充电(高电平有效)。

当选择自动预充电时,正在访问的行将在写突发结束时自动进行预充电操作。未选择自动预充电时,该行将保持激活状态,后续仍可访问。

写入存储器时,DQ 和 DQM 同时作用,如下面时序图所示。当 DQM 低电平时,数据将写入存储器;当 DQM 为高电平时,将忽略相应的数据输入,且不会对该字节/列位置执行写入操作。

⑦ PRECHARGE

A[10] 高电平表示对所有 bank 进行预充电,低电平表示只对 BA[1:0] 指示的 bank 进行预充电。执行此命令后 TRP 才能进行其他操作。

若某个 bank 执行了预充电命令,那么读写操作前必须先执行激活命令。

若要访问同一 bank 的其他行,必须先对该 bank 进行预充电,然后再激活待访问行,最后才能进行读写操作。

⑧ BURST TERMINATE

突发中断命令,用于中断固定长度或者连续页突发操作,可以通过此命令结合全页读写模式实现任意长度的读写操作。

⑨ AUTO REFRESH

DRAM 通过电容存储电荷,但是电容会放电,为了防止电容存储的电荷丢失,就需要在电容存储器还没有丢失的时候把它存储的数据读出来,再重新写进去,这样电容存储的电荷又可以保存一段时间,这个操作就被称为自刷新。

AUTO REFRESH 在 SDRAM 的正常运行期间使用,此命令是非永久性的,因此每次需要刷新时都必须发出该命令。

在发出 AUTO REFRESH 命令之前,必须对所有活动的 bank 进行预充电。AUTO REFRESH 命令在 PRECHARGE 命令后 TRP 时间才能发出。寻址由内部刷新控制器生成。这使得地址在 AUTO REFRESH 命令期间为“Don’t Care”。无论器件接口位宽多少,128Mb SDRAM 每 64ms(商业级或工业级) 或每 16 ms(车规级) 需要 4096 次自动刷新周期。

自动刷新(AUTOREFRESH): CKE = 1

⑩ SELF REFRESH

启用自刷新模式后,SDRAM 会提供自己的内部时钟,使其执行自己的自动刷新周期,此时只需要保证 CKE 为低电平,其余信号状态不关心。

自刷新模式的最短时间为 TRAS

退出自刷新模式步骤:

  1. 等待CLK 时钟稳定;
  2. CKE 置位;
  3. 至少执行两次 NOP 命令,等待完成内部刷新进程
  4. 最后执行一次 AUTO REFRESH 命令

自刷新(SELF REFRESH):CKE = 0

命令切换真值表

在这里插入图片描述

在这里插入图片描述

注:Idle 状态表示 当前 bank 已完成预充电操作

CKE 真值表

  • CKE 前后都为高电平状态切换如 “命令切换真值表” 章节对应的两个表所示

在这里插入图片描述

操作时序

初始化及加载模式寄存器

在这里插入图片描述

具体步骤如下:

  1. VDD 和 VDDQ 供电正常,输入时钟 CLK 稳定
  2. 等待至少 100 us,期间只能执行 COMMAND INHIBIT 或 NOP 命令
  3. 在这 100us 内置位 CKE 信号后,至少执行 1 次 COMMAND INHIBIT 或 NOP 命令
  4. 对所有 bank 进行预充电
  5. 等待 TRP 时间后所有 bank 进入 idle 状态(期间执行 NOP 命令)
  6. 执行 AUTO REFRESH 命令,并等待 TRFC 时间(期间只能执行 COMMAND INHIBIT 或 NOP 命令)
  7. 再次执行 AUTO REFRESH 命令,并等待 TRFC 时间(期间只能执行 COMMAND INHIBIT 或 NOP 命令)
  8. 执行加载模式寄存器命令(模式寄存器值上电时为未知状态,需进行设置,设置后只有设备断电或者重新执行加载模式寄存器命令才会改变)
  9. 等待 TMRD 时间后就初始化完成,可进行其他操作了

注:步骤 6 至少执行两次(即步骤 6 和 步骤 7),也可以根据实际使用场景重复多次执行

bank/row 激活

  • 执行激活命令后 TRCD 才可以执行读写操作
  • TRCD 可通过芯片手册得知,根据 CLK 频率换算成时钟周期(周期数向上取整)
    • 例如:TRCD 为 20ns, CLK 为 125MHz(对应 8 ns),则 TRCD 对应最小时钟周期数为 20ns/8ns = 2.5 ≈ 3
      在这里插入图片描述

读操作

  • 执行页突发读取后会一直输出数据,除非执行 BURST TERMINATE 中断突发,当地址到达页尾时自动回卷

在这里插入图片描述

Consecutive READ Bursts

在这里插入图片描述

Random READ Accesses

在这里插入图片描述

READ-to-WRITE

DQM 用于避免 I/O 争用

如图 23 如果写突发长度为 1 时,不需要考虑

如图 24 所示,DQM 信号必须在写命令前至少 2 个时钟置位,以抑制从 SDRAM 中输出读取的数据,让数据总线处于空闲状态。否则,第二次写入无效。

例如,如果DQM在图RW2中的T4拉低,则T5和T7处的写入将有效,而T6处的写入将无效。DQM信号必须在写入命令之前取消断言(DQM延迟是输入缓冲区的零时钟),以确保写入数据未被屏蔽;时序如下图:

在这里插入图片描述

READ-to-WRITE With Extra Clock Cycle

在这里插入图片描述

READ-to-PRECHARGE
  • 预充电命令需在最后一个突发数据输出前(CL-1)个时钟周期执行
  • 预充电命令可以截断固定长度或者页突发,但是需要在合适时间执行预充电命令

在这里插入图片描述

Terminating a READ Burst

在这里插入图片描述

Alternating Bank Read Accesses

在这里插入图片描述

READ Continuous Page Burst

执行页突发读取后会一直输出数据,除非执行 BURST TERMINATE 中断突发,当地址到达页尾时自动回卷

在这里插入图片描述

READ – DQM Operation

DQ 的读取数据受两个时钟前(与潜伏期无关)的 DQM 状态影响,如下面时序图所示。当 DQM 为高电平时,相应的 DQ 将在两个时钟后变为高阻态。当 DQM 为低电平时,DQ 将输出有效数据。

在这里插入图片描述

写操作

在这里插入图片描述

WRITE Burst
  • 突发长度为 2,写突发完成后没有其他命令,则 DQ 保持高阻态

在这里插入图片描述

WRITE-to-WRITE

在这里插入图片描述

Random WRITE Cycles

在这里插入图片描述

WRITE-to-READ

在这里插入图片描述

WRITE-to-PRECHARGE

在这里插入图片描述

Terminating a WRITE Burst

在这里插入图片描述

Alternating Bank Write Accesses

在这里插入图片描述

WRITE – Continuous Page Burst

在这里插入图片描述

WRITE – DQM Operation

在这里插入图片描述

Burst Read/Single Write

由模式寄存器的写入突发模式字段决定

  • M9 = 0:读写突发长度由 M[2:0] 决定
  • M9 = 1:读突发长度由 M[2:0] 决定,写不支持突发操作

预充电

A[10] 高电平表示对所有 bank 进行预充电,低电平表示只对 BA[1:0] 指示的 bank 进行预充电。执行此命令后 TRP 才能进行其他操作。

若某个 bank 执行了预充电命令,那么读写操作前必须先执行激活命令。

若要访问同一 bank 的其他行,必须先对该 bank 进行预充电,然后再激活待访问行,最后才能进行读写操作。

在这里插入图片描述

READ With Auto Precharge Interrupted by a READ

在这里插入图片描述

READ With Auto Precharge Interrupted by a WRITE

在这里插入图片描述

READ With Auto Precharge

在这里插入图片描述

READ Without Auto Precharge

在这里插入图片描述

Single READ With Auto Precharge

在这里插入图片描述

Single READ Without Auto Precharge

在这里插入图片描述

WRITE With Auto Precharge Interrupted by a READ

在这里插入图片描述

WRITE With Auto Precharge Interrupted by a WRITE

在这里插入图片描述

WRITE With Auto Precharge

在这里插入图片描述

WRITE Without Auto Precharge

在这里插入图片描述

Single WRITE With Auto Precharge

在这里插入图片描述

Single WRITE Without Auto Precharge

在这里插入图片描述

自动刷新 (AUTO REFRESH)

在这里插入图片描述

自刷新 (SELF REFRESH)

退出自刷新模式步骤:

  1. 等待CLK 时钟稳定;
  2. CKE 置位;
  3. 至少执行两次 NOP 命令,等待完成内部刷新进程
  4. 最后执行一次 AUTO REFRESH 命令

在这里插入图片描述

节电模式

  • 进入节电模式后 SDRAM 不会进行自刷新,所以需要周期退出节电模式进行刷新

在这里插入图片描述

时钟挂起

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

模式寄存器定义

在这里插入图片描述

  • 突发长度(BL):突发长度确定单次读或写命令可访问的最大列数。1、2、4 或 8 的突发长度可用于顺序突发类型和交错突发类型,而整页突发仅可用于顺序类型

  • 突发类型(BT):
    在这里插入图片描述

  • CAS 潜伏期(CL):执行读命令至 DQ 输出有效数据的时间延迟

在这里插入图片描述

  • 写入突发模式

    • M9 = 0:读写突发长度由 M[2:0] 决定
    • M9 = 1:读突发长度由 M[2:0] 决定,写不支持突发操作

SDRAM 带宽及容量计算

在这里插入图片描述

芯片参数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA的花路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值