HY57V561620FTP_SDRAM文档总结

文章目录

  • 前言
  • 一、sdram简介
    • 1、名称解释
    • 2、发展历史
    • 3、与原先学习的RAM区别
    • 4、SDRAM分类
  • 二、HY57V561620FTP
    • 1、描述
      • 1、内存划分
      • 2、特征
      • 3、引脚说明
      • 4、内部结构介绍
      • 5、交流特性
      • 6、可能涉及到的命令组合
    • 2、SDRAM 具体操作流程
      • 1、整体状态图
      • 2、SDRAM指令及时序图
      • 3、芯片初始化(这里开始介绍必要的操作流程)
      • 3、行激活
      • 4、列读写
      • 5、数据输出(读)
      • 6、数据输入(写)
      • 7、突发长度
      • 8、预充电
      • 9、刷新
      • 10、数据掩码
    • 3、几个需要明白的问题
      • 1、自动刷新与自刷新区别
        • 1、自动刷新
        • 2、自刷新
      • 2、预充电与自动预充电区别
        • 1、预充电
        • 2、自动预充电
      • 3、我的小tips
  • 三、总结
  • 四、参考资料


前言

随着深入的学习,前面学习的eeprom、flash的存储容量已不满足我们的使用,sdram能够提供相对比较大的存储空间、读写速度快、价格相对便宜等优点被广泛应用。需要注意的是,我们这里采用的是电容的存储方式,我们需要不断的刷新来保证我们的数据不丢失。


一、sdram简介

1、名称解释

对于我们学习的每种模块或器件,我们都应该掌握其名称的代含义:
SDRAM:全称是Synchronous Dynamic Random Access Memory,S表示我们的同步,D表示我们的动态,RAM表示我们的随机动态存储器,那么中文全称就应该是同步动态随机存储器。

2、发展历史

与前面介绍的一致,我们的sdram由于存储量大、读写速度快以及性价比等优点被广泛应用,历经数十载的发展,现已经迭代至第六代,由一代至六代依次是:
SDR SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM、DDR5 SDRAM等。

3、与原先学习的RAM区别

前面我们在学习存储器时,没有对动态ram进行介绍。实际上我们的ram随机存储器是分为两大类的,静态与动态,静态就是我们之前学习的,我们只需要将数据存入并根据需要通过地址取出即可不需要额外的操作,在动态随机存储器,由于采用的存储方式不同,我们需要不停的刷新来保证我们的数据不丢失。

4、SDRAM分类

HY57V561620FTP_SDRAM文档总结_第1张图片

这里我们需要对我们的核心频率、时钟频率进行一个区分:
核心频率:我们从内存阵列读取数据的时钟速率
时钟频率:iobuffer的一个时钟频率,相当于我们接收外界数据、存取内部数据的时钟。
数据传输率:分类不同传输速率不同,DDR中是双边沿采样,所以数据传输率要比我们的时钟频率快一倍。
预取设计:这里描述的是我们的iobuffer与我们的核心存储阵列块交互的数据位,位数越多越快。
突发长度表示我们的在进行操作之后会连续进行操作的位数。
CL:读潜伏周期,以读命令举例,我们读潜伏周期为2时,我们的读命令不会立马执行,而是会等待两个时钟周期。

以上就是我们对sdram的一个小的介绍,下面开始我们的手册阅读记录。

二、HY57V561620FTP

目前我了解到的sdram厂商有镁光和海力士,我的板子上使用的是海力士256M比特的SDRAM,下面是我们的总结:

1、描述

海力士 HY57V561620F(L)T(P) 同步 DRAM 是 268,435,456 位 CMOS 同步 DRAM,非常适合需要大内存密度和高带宽的消费类内存应用。它被组织为4,194,304 x 16 I/O 的 4 组。

1、内存划分

首先对于HY57V561620FTP型号,我们共有四个bank,每个bank有4M,内存单元的数据位是16,那么就是4x4x16=256M。再具体一点的话每一块中,行有8192行,列有512列,一块就刚好是4M。

2、特征

1、8,192 次刷新周期 / 64ms
2、可编程 CAS 延迟为 2 或 3
3、可编程突发长度和突发类型

1、2、4、8 或整页的顺序突发
1、2、4 或 8 用于交错突发
还有其他的一些特征,这里我们不进行过多介绍。

3、引脚说明

引脚 描述
CLK 系统时钟输入,需要与控制模块有相位上的差别
CKE 时钟使能:控制内部时钟信号,当停用时,SDRAM将成为掉电,挂起或自刷新状态之一
CS # 芯片选择:启用或禁用除 CLK、CKE 和 DQM 之外的所有输入
BA0, BA1 块地址,选择要在 RAS 活动期间激活的库 选择要在 CAS 活动期间读取/写入的库
A0 ~ A12 行地址:RA0 ~ RA12,列地址:CA0 ~ CA8 自动预充电标志:A10
RAS, CAS, WE 行地址选通脉冲、列地址选通脉冲、写使能信号
LDQM, UDQM 数据掩码:在读取模式下控制输出缓冲区,在写入模式下屏蔽输入数据
DQ0 ~ DQ15 数据输入/输出:多路复用数据输入/输出引脚

4、内部结构介绍

SDRAM 的内部是一个存储阵列,你可以把它想象成一张表格。我们在向这个表格中写入数据的时候,需要先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的“单元格”,这就是SDRAM 寻址的基本原理。

HY57V561620FTP_SDRAM文档总结_第2张图片
HY57V561620FTP_SDRAM文档总结_第3张图片

对 SDRAM 的读写是针对存储单元进行的,对 SDRAM 来说一个存储单元的容量等于数据总线的位宽,单位是 bit。那么 SDRAM 芯片的总存储容量我们就可以通过下面的公式计算出来:
SDRAM 总存储容量 = L-Bank 的数量×行数×列数×存储单元的容量

  • SDRAM 的结构框图:
    HY57V561620FTP_SDRAM文档总结_第4张图片

SDRAM 的结构框图,从框图中我们可以看到 SDRAM 主要是由时钟缓冲器(CLK BUFFER)、指令解码器(COMMAND DECODER)、地址缓冲器(ADDRESS BUFFER)、模式寄存器(MODE REGISTER)、 控 制 信 号 生 成 器 (CONTROL SIGNAL GENERATOR)、 四 个 存 储 BANK(BANK#0~ BANK#3)和数据控制电路(DATA CONTROL CIRCUIT)构成。SDRAM 接收外部输入的控制命令,并在指令解码器的控制下进行寻址、读写、刷新、预充电等操作。

5、交流特性

HY57V561620FTP_SDRAM文档总结_第5张图片
HY57V561620FTP_SDRAM文档总结_第6张图片

这张图我们不做过多的分析,在后续我们分析时序需要来回查看。

6、可能涉及到的命令组合

下面涉及到我们的模式寄存器、命令真值表以及不同状态下的真值表等,涉及到的比较多,我们只提取一部分。

  • 模式寄存器功能说明:
    HY57V561620FTP_SDRAM文档总结_第7张图片
    -命令真值表:
    HY57V561620FTP_SDRAM文档总结_第8张图片
  • 不同状态下的真值表:

这里同样先给出表格,后续我们介绍操作SDRAM的操作流程时会来回查看。

HY57V561620FTP_SDRAM文档总结_第9张图片
HY57V561620FTP_SDRAM文档总结_第10张图片
HY57V561620FTP_SDRAM文档总结_第11张图片
HY57V561620FTP_SDRAM文档总结_第12张图片

  • 注意:

1、 H:逻辑高电平,L:逻辑低电平,X:不在乎,BA:块地址,AP:自动预充
2、如果所有块都处于空闲状态并且CKE处于非活动状态,处于掉电周期、自刷新模式
3、不满足trcd、tras的要求是不合法的
4、必须满足突发中断条件

  • CKE 使能真值表:
    HY57V561620FTP_SDRAM文档总结_第13张图片
    HY57V561620FTP_SDRAM文档总结_第14张图片
    需要注意的是这里我们仅仅是将更重涉及到的命令真值贴出,方便我们后续写代码或者分析SDRAM操作流程时的进行对比学习,具体看结尾放置的手册为准。

2、SDRAM 具体操作流程

1、整体状态图

HY57V561620FTP_SDRAM文档总结_第15张图片

2、SDRAM指令及时序图

  • 取消、激活、无操作指令:

DESELECT:

DESELECT 功能(CS = 高)可防止 SDRAM 执行新命令,SDRAM 忽略时钟上的命令输入。但是,内部状态保持不变。同步 DRAM 已有效地取消选择。已在进行的操作不受影响。

NO OPERATION:

无操作 (NOP) 命令用于对选定的 SDRAM 执行 NOP (CS = 低,RAS = CAS = WE = 高)。此命令不是执行命令。但是,内部业务仍在继续。这可以防止在空闲或等待状态期间注册不需要的命令。已在进行的操作不受影响。(见下图)

ACTIVE:

激活命令用于激活特定块中的行,以便进行后续的读取或写入访问。

HY57V561620FTP_SDRAM文档总结_第16张图片

  • 读/写指令:

在执行读取或写入操作之前,必须通过激活命令激活相对应的块和行地址。并且要求我们的块激活命令输入与我们的读或写输入指令之间需要tRCD的时间间隔。

读命令:
READ 命令用于启动对活动行的突发读取。BA0 和 BA1 的值选择块,地址输入选择起始列位置。访问将在读取突发结束时预充电;如果未选择自动预充电,则该行将保持打开状态以供后续访问。发出 READ 命令后,有效的数据输出元素将可用 CAS 延迟。
写命令:
WRITE 命令用于启动对活动行的突发写入访问。BA0 的值,BA1 选择块,地址输入选择起始列位置。A10 的值确定是否使用自动预充电。如果未选择自动预充电,则该行将保持打开状态以供后续访问,否则在突发写入结束后开始预充电。

HY57V561620FTP_SDRAM文档总结_第17张图片

  • 读突发的cas延迟时序:

突发长度可以设置为 1、2、4 和 8。突发读取的开始地址由列地址和读取命令集周期的库选择地址指定。在读取操作中,数据输出在 /CAS 延迟指定的时钟数之后开始。/CAS 延迟可以设置为 2 或 3。当突发长度为 1、2、4 和 8 时,DOUT 缓冲器在输出连续突发长度数据后的下一个时钟自动变为 High-Z直到突发长度数据被完全输出。

HY57V561620FTP_SDRAM文档总结_第18张图片
HY57V561620FTP_SDRAM文档总结_第19张图片

  • 读到读的情况:

读到读包含有连续读、非连续读、Randum Read Burstssa、读突发终止。
来自读取突发的数据可以通过后续的 READ 命令连接或截断。来自新突发的第一个数据要么跟随已完成突发的最后一个元素,要么跟随被截断的较长突发的最后一个所需元素。当另一个读取命令与前面的读取命令执行在同一银行的同一 ROW 地址执行时,可以在不少于1个时钟的间隔后执行第二个读取。即使第一个命令是尚未完成的突发读取,第二个命令读取的数据也将有效。

连续突发读取:
HY57V561620FTP_SDRAM文档总结_第20张图片
非连续突发读取:
HY57V561620FTP_SDRAM文档总结_第21张图片
Randum Read Burstssa:
HY57V561620FTP_SDRAM文档总结_第22张图片
读突发终止:

来自任何读取突发的数据都可以使用 BURST 终止命令截断。突发终止延迟等于读取 (CAS) 延迟,即突发终止命令应在读取命令之后发出 X 个周期,其中 X 等于所需的数据输出元素。

HY57V561620FTP_SDRAM文档总结_第23张图片

  • 读到写:

来自读突发的数据必须先完成或截断,然后才能发出后续的 WRITE 命令。如果需要截断,则必须使用 BURST TERMINATE 命令,如下图所示。

HY57V561620FTP_SDRAM文档总结_第24张图片

  • 写指令:

输入数据出现在数据总线上,被写入存储器阵列受制于DM的输入逻辑电平,与数据重合。如果给定的DM信号被记录为低电平,则相应的数据将被写入存储器;如果DM信号注册为High,则相应的数据输入将被忽略,并且不会对该字节/列位置执行写入。

HY57V561620FTP_SDRAM文档总结_第25张图片

  • 写入到写入:

任何写入突发的数据都可以与后续的 WRITE 命令连接或截断。无论哪种情况,都可以保持输入数据的连续流动。新的 WRITE 命令可以在时钟的任何正边沿发出,遵循上一个 WRITE 命令。新突发中的第一个数据传入元素在已完成突发的最后一个元素或被截断的较长突发的最后一个所需数据元素之后应用。新的 WRITE 命令应在第一个 WRITE 命令之后发出 X 个周期,其中 X 等于所需的数据输入元素的数量。

连续写入:
HY57V561620FTP_SDRAM文档总结_第26张图片
随机写入:
HY57V561620FTP_SDRAM文档总结_第27张图片

  • 写入到读:

可以中止前面的突发写入操作,并且可以通过在写入周期中输入新的读取命令来启动新的突发读取操作。读取命令 (READ) 的数据在 /CAS 延迟延迟过后输出。前面的写入操作 (WRIT) 仅在读取命令之前写入数据输入。在输出最新数据之前,数据总线必须至少进入一个周期的高阻抗状态。

HY57V561620FTP_SDRAM文档总结_第28张图片
后续还有许多的命令,这里我们不进行太多的总结,后续需要再查手册吧。

3、芯片初始化(这里开始介绍必要的操作流程)

SDRAM 芯片上电之后需要一个初始化的过程,以保证芯片能够按照预期方式正常工作,初始化流程。
HY57V561620FTP_SDRAM文档总结_第29张图片

SDRAM 上电后要有 200us 的输入稳定期,在这个时间内不可以对 SDRAM 的接口做任何操作;200us结束以后给所有 Bank 预充电,然后是连续 8 次刷新操作,最后设置模式寄存器。初始化最关键的阶段就在于模式寄存器(MR,Mode Register)的设置,简称 MRS(MR Set)。我们通过不同位写入来设置我们的寄存器:

HY57V561620FTP_SDRAM文档总结_第30张图片

如上图所示,用于配置模式寄存器的参数由地址线提供,地址线不同的位分别用于表示不同的参数。SDRAM 通过配置模式寄存器来确定芯片的工作方式,包括突发长度(Burst Length)、潜伏期(CAS Latency)以及操作模式等。

时序图:
HY57V561620FTP_SDRAM文档总结_第31张图片

需要注意的是,在模式寄存器设置指令发出之后,需要等待一段时间才能够向 SDRAM 发送新的指令,这个时间我们称之为模式寄存器设置周期 tRSC(Register Set Cycle),查看数据手册我们可以知道 tRSC 至少要 2 个时钟周期的时间。配置模式寄存器还是比较简单的,只需要将四根指令线全部拉低即发送配置模式寄存器指令(4’b0000),同时在地址线上给出对应的配置数值就可以了

3、行激活

初始化完成后,无论是读操作还是写操作,都要先激活(Active)SDRAM 中的一行,使之处于活动状态(又称行有效)。在此之前还要进行 SDRAM 芯片的片选和 Bank 的定址,不过它们与行激活可以同时进行。

HY57V561620FTP_SDRAM文档总结_第32张图片

在片选 CS#(#表示低电平有效)、Bank 定址的同时,RAS(Row Address Strobe,行地址选通脉冲)也处于有效状态。此时 An 地址线则发送具体的行地址。我们板载的 SDRAM 共有共有13 个地址线,由于是二进制表示法,所以共有 8192 个行(2^13=4096),A0-A12 的不同数值就确定了具体的行地址。由于行激活的同时也会激活相应的 Bank,所以行激活也可称为 Bank 有效。

4、列读写

行地址激活之后,就要对列地址进行寻址了。由于在 SDRAM 中,地址线是行列共用的,因此列寻址时地址线仍然是 A0-A12。在寻址时,利用 RAS(Row Address Strobe,行地址选通脉冲)与 CAS(Column Address Strobe,列地址选通脉冲)来区分行寻址与列寻址,简单的来讲就是 RAS 拉低 CAS 拉高代表行地址,反过来就代表列地址。如下图所示。还有一点很重要就是在列寻址的时候地址线 A10 可以用来控制是否进行预充电(列地址最大只能用到地址线第 9 位,所以不用担心 A10 会不会和列地址冲突),因为已经都进入列寻址了那么此时就可以发送读写指令进行读写操作了,但是读写操作结束后我想读写下一行的时候就必须先进行预充电(关于预充电下文会有详细描述),因此我们一般会在列寻址的时候直接拉高A10 地址线,这样每完成一次读写操作就会自动进行一次预充电,这样读写下一行之前就不用再特地去进行预充电操作了。另外,列寻址信号与读写命令是同时发出的,读/写命令是通过 WE(Write Enable,写使能)信号来控制的,WE 为低时是写命令,为高时是读命令。

时序图:
HY57V561620FTP_SDRAM文档总结_第33张图片

发送列读写命令时必须要与行激活命令有一个时间间隔(其实就是行激活命令和列激活命令之间要间隔一段时间),这个间隔被定义为 tRCD,即 RAS to CAS Delay(RAS 至 CAS 延迟)。这是因为在行激活命令发出之后,芯片存储阵列电子元件响应需要一定的时间。tRCD 是 SDRAM 的一个重要时序参数,广义的 tRCD 以时钟周期(tCK,Clock Time)数为单位,比如 tRCD=3,就代表 RAS 至 CAS 延迟为三个时钟周期,具体来说还得看时钟频率。下图用于举例:

HY57V561620FTP_SDRAM文档总结_第34张图片

5、数据输出(读)

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

6、数据输入(写)

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

HY57V561620FTP_SDRAM文档总结_第36张图片

上图中可见,数据与写指令同时发送。不过,数据并不是即时地写入存储单元,数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back),我没记错的或此时应该是放置在一个buffer中缓存。tWR 至少占用一个时钟周期或再多一点(时钟频率越高,tWR 占用周期越多)。

7、突发长度

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称 BL)。前面讲到的读/写操作,都是一次对一个存储单元进行寻址。然而在现实中很少只对 SDRAM 中的单个存储空间进行读写,一般都需要完成连续存储空间中的数据传输。在连续读/写操作时,为了对当前存储单元的下一个单元进行寻址,需要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。

HY57V561620FTP_SDRAM文档总结_第37张图片

由上图可知,虽然由于读延迟相同可以让数据的传输在 I/O 端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的延时即可获得。

HY57V561620FTP_SDRAM文档总结_第38张图片

1、至于 BL 的数值,也是不能随便设或在数据进行传输前临时决定。在上文讲到的初始化过程中的模式寄存器配置(MRS)阶段就要对 BL 进行设置。突发长度(BL)可以为 1、2、4、8 和“全页(Full Page)”,其中“全页”是指突发传输一整行的数据量。
2、在 MRS 阶段除了要设定 BL 数值之外,还需要确定“读/写操作模式”以及“突发传输模式”。读/写操作模式分为“突发读/突发写”和“突发读/单一写”。 突发读/突发写表示读和写操作都是突发传输的,每次读/写操作持续 BL 所设定的长度,这也是常规的设定。突发读/单一写表示读操作是突发传输,写操作则只是一个个单独进行

8、预充电

1、在对 SDRAM 某一存储地址进行读写操作结束后,如果要对同一 L-Bank 的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发送行/列地址。L-Bank 关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。在读写过程中,工作行内的存储体由于“行激活”而使存储电容受到干扰,因此在关闭工作行前需要对本行所有存储体进行重写。预充电实际上就是对工作行中所有存储体进行数据重写,并对行地址进行复位,以准备新行工作的过程。
2、预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。现在我们再回过头看看读写操作时的命令时序图,从中可以发现地址线 A10 控制着是否进行在读写之后对当前 L-Bank 自动进行预充电,这就是上文所说的“辅助设定”。而在单独的预充电命令中,A10 则控制着是对指定的 L-Bank 还是所有的 L-Bank(当有多个 L-Bank 处于有效/活动状态时)进行预充电,前者需要提供 L-Bank 的地址,后者只需将 A10 信号置于高电平
3、在发出预充电命令之后,要经过一段时间才能发送行激活命令打开新的工作行,这个间隔被称为 tRP(Precharge command Period,预充电有效周期),如下图 所示。和 tRCD、CL 一样,tRP 的单位也是时钟周期数,具体值视时钟频率而定。

HY57V561620FTP_SDRAM文档总结_第39张图片

需要注意的是:写操作时,由于每笔数据的真正写入则需要一个足够的周期来保证,这段时间就是写回周期(tWR)。所以预充电不能与写操作同时进行,必须要在 tWR 之后才能发出预充电命令,以确保数据的可靠写入,否则重写的数据可能出错,如下图所示:

HY57V561620FTP_SDRAM文档总结_第40张图片

9、刷新

SDRAM 之所以称为同步“动态”随机存储器,就是因为它要不断进行刷新(Refresh)才能保留住数据,因此刷新是 SDRAM 最重要的操作。
1、刷新操作与预充电类似,都是重写存储体中的数据。但为什么有预充电操作还要进行刷新呢?因为预充电是对一个或所有 L-Bank 中的工作行(处于激活状态的行)操作,并且是不定期的;而刷新则是有固定的周期,并依次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。但与所有 L-Bank预充电不同的是,这里的行是指所有 L-Bank 中地址相同的行,而预充电中各 L-Bank 中的工作行地址并不是一定是相同的。
2、刷新操作分为两种:自动刷新(Auto Refresh,简称 AR)与自刷新(Self Refresh,简称 SR)。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于自动刷新(AR),SDRAM 内部有一个行地址生成器(也称刷新计数器)用来自动生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说 CAS 在 RAS 之前有效。所以,AR 又称 CBR(CAS Before RAS,列提前于行定位)式刷新。
3、在自动刷新过程中,所有 L-Bank 都停止工作。每次刷新操作所需要的时间为自动刷新周期(tRC),在自动刷新指令发出后需要等待 tRC 才能发送其他指令。64ms 之后再次对同一行进行刷新操作,如此周而复始进行循环刷新。显然,刷新操作肯定会对 SDRAM 的性能造成影响,但这是没办法的事情,也是DRAM 相对于 SRAM(静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。
4、自刷新(SR)主要用于休眠模式低功耗状态下的数据保存。在发出 AR 命令时,将 CKE 置于无效状态,就进入了 SR 模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在 SR 期间除了CKE 之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使 CKE 有效才能退出自刷新模式并进入正常工作状态。

10、数据掩码

在讲述读/写操作时,我们谈到了突发长度。如果 BL=4,那么也就是说一次就传送 4 笔数据。但是,如果其中的第二笔数据是不需要的,怎么办?还要传输吗?为了屏蔽不需要的数据,人们采用了数据掩码技术。通过 DQM,内存可以控制 I/O 端口取消哪些输出或输入的数据。为了精确屏蔽一个数据总线位宽中的每个字节,每个 DQM 信号线对应一个字节(8bit)。因此,对于数据总线为 16bit 的 SDRAM 芯片,就需要两个 DQM 引脚。SDRAM 官方规定,在读取时 DQM 发出两个时钟周期后生效,如图 42.1.17 所示。而在写入时,DQM
与写入命令一样是立即成效,如图 42.1.18 所示。

HY57V561620FTP_SDRAM文档总结_第41张图片
HY57V561620FTP_SDRAM文档总结_第42张图片

3、几个需要明白的问题

1、自动刷新与自刷新区别

1、自动刷新

此命令在海力士 SDR SDRAM 的正常操作期间使用。它是非持久性的,因此每次需要刷新时都必须发出。刷新寻址由内部刷新控制器生成。海力士 SDR SDRAM 需要以 tREF 的平均周期间隔执行自动刷新命令。为了提高调度和在任务之间切换的效率,在绝对刷新间隔方面提供了一定的灵活性。最多可以将八个自动刷新命令发布到任何给定的 SDR SDRAM,并且任何自动刷新命令和下一个自动刷新命令之间的最大绝对间隔为 8*tREF。

2、自刷新

“自刷新”命令的启动方式与“自动刷新”命令类似,但 CKE 处于禁用状态(低)。此状态将数据保留在 SDR SDRAM 中,即使系统的其余部分已关闭。请注意,处于自刷新模式时的刷新间隔计时在 SDR SDRAM 内部安排,可能会有所不同,并且可能不符合 tREF 时间。执行自刷新命令后,自刷新操作将继续,同时 CKE 保持低电平。在自我刷新操作期间,所有 ROW 地址都由内部刷新计时器刷新。自刷新由自刷新退出命令终止。在自刷新模式之前和之后,在下面的条件 1 和 2 中对 tREF(最大值)周期内或以内的所有刷新地址执行自动刷新。

在这里插入图片描述

2、预充电与自动预充电区别

1、预充电

预充电命令常被用于关闭打开的行或打开所有bank下的行。当发出预充命令时,地址为A10,高,则所有块都将预充,如果A10为低,则特定块中的开放行将被预充电。发出预充命令后,当达到最小 tRP 时间时,块将可用。

2、自动预充电

发出自动预充电命令用于在读取或写入操作后关闭特定块中的打开行。如果发出读取或写入命令时 A10 为高电平,则会启动具有自动预充电功能的读取或写入。

3、我的小tips

下面是我在看文档时零零散散总结的一些小点,仅供参考:

1、发送读写命令需要发送块地址、列地址
2、激活命令需要发送块地址、行地址
3、必须在64毫秒内对电容进行充电(可以快不能慢),sdram才会保持不掉电,数据也就不会丢失。
4、自动刷新在普通模式下,自刷新处于低功耗模式
5、在CKE(用于控制我们的)低电平时,我们的sdram停用,处于关机、暂停或自刷新状态
6、cs片选信号用于使能或失能除了CKE、DQM和CLK的信号
7、在读写操作时与激活不同,实际上只用到了A0到A8的,这时其余位是无用的,我们通过对A10拉高,在读写完成之后进行预充电
8、读写到预充电有时间要求
9、当发送预充电命令时,A10置高则对所有bank进行预充电,置低则对指定的bank预充电
10、在发读写命令的时候将A10置高,则在读写操作过后开启自动预充电
11、每一块中只能有一行是有效的,否则或访问冲突,因此我们需要在需要对新的行进行操作时需要执行预充电对行进行关闭,如果预充电命令有效时,我们的A10为低电平需要我们指定特定块地址进行预充电,否则直接对所有块进行预充电
12、在发送读写操作时,当A10为高时,自动预充电被打开,否则被取消。自动预充电与预充电的区别,自动预充电没有自己的命令,通过设置我们的A10来完成
13、刷新是为了让其有电、预充电是为了关闭行,本质上都是对内容进行重构,刷新是周期性的
14、激活命令(选中行)也是有时间的,等待trcd后才能进行下一步操作


三、总结

大概看了一遍的英文文档,其实还是一知半解,直到看了原子哥的对sdram的一些流程的总结才豁然开朗,就是上面我总结的一般操作流程哪里,看完接着对照表格、时序学习就能够在脑海中大致有构思。文章大家仅供参考,具体还是以文档为主,下面放置了手册。

四、参考资料

1、正点原子官方
2、手册:提取码:hzwj

你可能感兴趣的:(FPGA,fpga开发)