1.SDRAM基础知识

本篇文章是SDRAM读写控制器专栏的第一篇文章,主要介绍一下本专栏的设计目标和SDRAM相关的基础知识和模块划分等。

本专栏的实验目标为使用Verilog设计一个SDRAM读写控制器,最终能够在上位机上通过串口发送数据到SDRAM里面,并将存入数据读出到上位机串口助手。SDRAM 型号为 W9825G6KH , 存 储 容 量 为 256 Mbit(32MByte),地址位宽 13 位,数据位宽 16 位。

SDRAM存储原理:

SDRAM具有单位存储量大、高数据带宽、读写速度快、价格便宜等优点;SDRAM 英文全称“Synchronous Dynamic Random Access Memory”,译为“同步动态 随机存取内存”或“同步动态随机存储器”。同步(Synchronous):是指SDRAM 存在一个同步接口,其工作时钟的时钟频率与对应控制器(CPU/FPGA)的时钟频率相同,并且 SDRAM 内部的命令发送 与数据传输均以此时钟为基准,实现指令或数据的同步操作。动态(Dynamic)是指SDRAM 需要不断的刷新来保证存储阵列内数据不丢失。随机(Random)是指数据在 SDRAM 中并不是按照线性依次存储,而是可以自由指定地址 进行数据的读写。

SDRAM 内部可以理解为一个存储阵列,这是 SDRAM 区别于管道式存储,实现随机地址存取的结构特点。将 SDRAM 内部存储阵列类比于一张表格,表格中的每一个单元格可以类比为存储阵列的单个存储单元。若想要实现存 储阵列中的某一存储单元的数据读写操作,我们要通过行地址(Row Address)和列地址 (Column Address)(先行后列)精确定位到这一存储单元,进而进行数据的读写操作;示意图如下:

对于 SDRAM来说,将类比于单元格的存储空间称之为存储单元,N(行列个数乘积)个 存储单元构成一个存储阵列,这个存储阵列我们称之为一个逻辑 Bank(Logical Bank,简称 L-Bank、Bank)。SDRAM 内部并不是一个全容量的 L-Bank,而是分割为若干个 L-Bank, 目前大多为 4 个。若干 L-Bank 的分割,原因有二,一是技术、成本等诸多因素;二是由于 SDRAM 的工作原理限制,单一 L-Bank 可能会造成非常严重的寻址冲突,大幅度降低内存效率。这样一来,在对 SDRAM 进行数据存取时,要先确定 L-Bank 地址,定位到指定逻辑 Bank,再依次确定行地址和列地址,选中存储单元,进而进行数据的存取操作,而且一次 只能对一个 L-Bank 的一个存储单元进行操作。SDRAM 的基本存储单位是存储单元,而一个存储单元的容量为若干个 Bit,对于 SDRAM 而言就是芯片的位宽,每个 Bit 存放于一个单独的存储体中,存储体是利用电容能 够保持电荷以及可充放电的特性制成;电容所存储的电荷会随时间慢慢释放,这就需要不断刷新为电容充 电,以保证存储数据可靠性。

SDRAM的引脚介绍:

1.CLK: 位宽为1Bit,类型为 Input。它是系统时钟引脚:SDRAM 由系统时钟驱动,所有 SDRAM 输入 信号都在时钟上升沿采样,同时 CLK 还递增内部突发计 数器并控制输出寄存器。

2.CKE:位宽为1Bit,类型为 Input。它是时钟使能引脚:屏蔽系统时钟,冻结当前操作,高电平有 效,信号有效时,所有信号才能被正确送入 SDRAM。

3.CS# (CS_N) :位宽为1Bit,类型为 Input。它是片选信号:屏蔽和使能所有输入输出端口,CLK、 CKE、DQM 除外,低电平有效。为高电平时,屏蔽所有 命令,但已经突发的读/写操作不受影响。

4.CAS# (CAS_N) :位宽为1Bit,类型为Input 。它是列选通信号:低电平有效,为低电平时,A[8:0]输入的为列地址。

5.RAS# (RAS_N): 位宽为1Bit,类型为Input 。它是行选通信号:低电平有效,为低电平时,A[12:0]输入的 为行地址。

6.WE# (WE_N) :位宽为1Bit,类型为 Input。它是写使能信号:低电平有效,为低电平时,使能写操作和 预充电。 {CS#、CAS#、RAS#、WE#}构成 SDRAM 操作命令。

7.DQM[1:0]:位宽为1Bit,类型为Input 。它是数据掩码:DQML(H),低(高)字节掩码,若信号为高电平,在下一个时钟周期的时钟上升沿,数据总线的低(高) 字节为高阻态。

8.BA[1:0] :位宽为2Bit,类型为Input。它是 L-Bank 地址:选择不同的逻辑 Bank 进行相关数据操作。

9.A[12:0]: 位宽为13Bit ,类型为Input。它是地址总线:不同命令下含义不同,后文中会有详细介 绍。

10.DQ[15:0] :位宽为16Bit, 类型为Inout。它是数据总线:数据输入/输出复用。

命令介绍:

SDRAM 内部包含一个逻辑控制单元,内部包含模式寄存器和命令解 码器。外部通过 CS_N、RAC_N、CAS_N、WE_N 以及地址总线向逻辑控制单元输入命 令,命令经过命令解码器进行译码后,将控制参数保存到模式寄存器中,逻辑控制单元进 而控制逻辑运行。 外部通过地址总线输入地址信息,地址信息在逻辑控制单元进行逻辑控制时起到辅助 作用,除此之外,复用的地址总线与 Bank 控制逻辑、行地址复用器、列地址计数锁存 器、列地址解码器等内部器件共同作用,精确选定存储阵列中与行列地址相对应的存储单 元,进而进行数据存取操作。

SDRAM 常用的操作指令如下:

1.禁止命令 (Command Inhibit) ,其他数据手册也称为取消设备选择命令 (Device Deselect),控制指令为{CS_N,RAS_N,CAS_N,WE_N} = 4’b1XXX。不论 SDRAM 处于何种 状态,此命令均可被执行,无需顾及 CKE 是否有效,即 CLK 是否使能,无需关心 DQM、 ADDR、DQ 的信号输入;执行此命令后,SDRAM 芯片不被选择,新的命令无法写入,但 已经执行的命令不受影响。

2.无操作命令(No-operation),也可称为空命令,简称为 NOP 命令,控制指令为 {CS_N,RAS_N,CAS_N,WE_N} = 4’b0111。不论 SDRAM 处于何种状态,此命令均可被写 入,该命令给被选中的 SDRAM 芯片传递一个空操作信息,目的是为了防止 SDRAM 处于 空闲或等待状态时,其他命令被写入,此命令对正在执行的命令无影响。

3.配置模式寄存器命令(Load Mode Register),也被称为 Mode Reigister Set,简称 LMR 命 令,控制指令为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0000,此命令只有所有 L-Bank 均处于 空闲状态时才可被写入,否则配置出错,而且在执行此命令后,SDRAM 必须等待相应的 响应时间 tRSC(Register Set Cycle),模式寄存器配置周期)后,才可写入新的命令。 在写入此命令对 SDRAM 进行模式寄存器配置时,需要地址总线 A0-A11 辅助寄存器 的模式设置,A0-A11 赋值不同对应寄存器配置不同模式,未使用的地址总线设置为低电 平。下面介绍一下 A0-A11 的不同赋值所对应的寄存器不同模式:

突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉 及到存储单元(列)的数量就是突发长度(Burst Length,简称 BL)。地址总线的低三位 A0-A2 是突发长度的控制位,SDRAM 芯片的突发长度可设置为 1、2、4、8 和整页,单位为字节,整页表示一次突发传输一整行的数据量,具体数值视芯 片而定。 若在数据读/写操作时不使用突发传输,此时可等效为突发长度为 1 字节,每次读/写数 据时,都要对存储单元进行寻址,如果要实现连续的读/写操作,就要不断地发送列地址和 读/写命令,这种方法控制资源占用极大,效率较低。若使用突发传输,只要指定起始列地址和突发长度,内存就会依次地自动对后面相应 数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址,这样,除了第一笔数 据传输需要若干个周期外,其后的每个数据只要一个周期即可获得。突发的数据长度一般 是 4 或 8,如果传输时实际需要的数据长度小于设定的 BL 值,则调用“突发停止”命令结 束传输。突发类型的设置位为 A3,可将突发类型设置为两类,顺序和隔行。一般将 A3 设置为 低电平,选择顺序类型。

列选通潜伏期是指从读命令被寄存到数据总线上到出现第一个有效数据之间的时钟周 期间隔,列选通潜伏期可被设置为 2 个或 3 个时钟周期,设置位为 A6,A5,A4,当 { A6A5A4}=3’b010 时,潜伏期为 2 个时钟周期;当{ A6A5A4}=3’b011 时,潜伏期为 3 个 时钟周期。

运行模式(Operating Mode) :运行模式设置位为 A7,A8,SDRAM 存在标准模式、测试模式等多种模式,但对于普 通用户,只开放了标准模式,在使用 SDRAM 时只需将 A7,A8 设置为低电平进入标准模式 即可。

写模式:写模式设置位为 A9,控制 SDRAM 的写模式。当 A9 为低电平时,SDRAM 的读/写操 作均采用突发方式,突发长度由突发长度寄存器(A0-A2)设定;当 A9 位高电平时, SDRAM 的读操作依然采用突发方式,突发长度由突发长度寄存器(A0-A2)设定,但 SDRAM 的写操作不在使用突发方式,每一个写命令只能写入一个数据。 A10-A12 为保留位,对模式寄存器的配置不起作用,赋值为 0 即可。

4.预充电命令(Precharge), 预充电的作用就是关闭指定的 L-Bank 或者全部 L-Bank 中激活的行,预充电命令执行 后,必须等待对应的等待时间 tRP(tRP(Precharge command Period),预充电命令周期),相对 应的 L-Bank 将可以被重新操作。 预充电命令(Precharge)命令包括两类:全部预充电(Precharge All)和指定 L-Bank 预充电 (Precharge Bank),控制指令均为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0010,通过地址总线 中的 A10 和 L-Bank 地址线 BA[1:0]辅助控制预充电类型, 当 A10 为高电平时,执行全部 预充电命令,对所有的 L-Bank 进行预充电,无需关心 BA[1:0]信号的输入;当 A10 为低电 平时,只对由 BA[1:0]选定的 L-Bank 进行预充电。当某个 L-Bank 执行预充电操作后,该 L-Bank 处于空闲状态,在下次读写操作之前必须重新激活。

5. 刷新命令(Refresh) SDRAM 只有通过刷新操作才能保证数据的可靠性,当然不能一直进行刷新,那将变 得毫无意义,SDRAM 的刷新操作是周期性的,在两次刷新的间隔可以进行数据的相关操作。目前国际公认的标准是,存储体中电容的数据有效保存期上限是 64ms,也就是说每一 行刷新的循环周期最大为 64ms,那么刷新速度就是:行数/64ms。刷新命令(Refresh)分为两种:自动刷新命令(Auto Refresh)和自刷新(Self Refresh),控 制指令相同,为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0001,两种刷新方式均不需要外部提 供地址信息。 当 CKE 为高电平时,写入刷新指令,执行自动刷新操作。在执行自动刷新命令前,必 须先要执行预充电命令,将所有 L-Bank 关闭,SDRAM 内部刷新计数器会依次自动生成行 地址,刷新是针对一行中的所有存储单元,所以无需列寻址。由于刷新涉及到所有 LBank,因此在刷新过程中,所有 L-Bank 都停止工作,而每次刷新需要等待对应的时钟周 期,之后就可进入正常的工作状态,在此期间,所有工作指令只能等待而无法执行。 64ms 之后则再次对同一行进行刷新,如此周而复始进行循环刷新。 当 CKE 为低电平时,写入刷新指令,执行自刷新操作。自刷新操作主要用于休眠模式 低功耗状态下的数据保存,在发出刷新命令时,将 CKE 置于无效状态,就进入了自刷新模 式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在自刷新期间除了 CKE 之外的所有外部信号都是无效的,只有重新使 CKE 有效才能退出自刷新模式并进入 正常操作状态。

6.激活命令(Bank Active),控制命令为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0011,只有 SDRAM 处于空闲状态下才可被响应。激活命令是为后续操作激活某一特定 L-Bank 中的某 一行,逻辑 Bank 地址线 BA[1:0]和地址总线 A0-A12 选择要激活的特定 L-Bank 的特定行, 激活该行后,该行一直保持激活状态,并可以进行后续读/写操作,操作完成后,只有执行 一次预充电命令(Precharge)后,被激活的特定行被关闭。每次激活只能激活一个 L-Bank, 同一个 L-Bank 中每次只能激活一行,当需要对同一 L-Bank 中其他行进行操作时, 必须先 执行一个预充电命令关闭当前行,再激活另一行进行操作。

7.写命令(Write),控制命令为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0100,用来实现对已 激活的特定 L-Bank 的特定行的数据突发写入操作,BA[1:0]指定需要写入数据的特定 LBank,地址总线 A0-A9 指定需要写入存储单元的起始列地址,A10 的电平变化控制突发写 操作完成后是否立即执行自动预充电操作,若 A10 为高电平,突发写操作完成后,立即执 行自动预充电操作,关闭当前行;若 A10 为低电平,突发写操作完成后,当前行依然处于 激活状态,以便对当前行执行新的读/写操作,想要关闭当前激活行,需写入预充电指令。

8.读命令(Read),控制命令为{CS_N,RAS_N,CAS_N,WE_N} = 4’b0101,用来实现对已激 活的特定 L-Bank 的特定行的数据突发读取操作,BA[1:0]指定需要读取数据的特定 LBank,地址总线 A0-A9 指定需要读取存储单元的起始列地址,A10 的电平变化控制突发读 操作完成后是否立即执行自动预充电操作,若 A10 为高电平,突发读操作完成后,立即执 行自动预充电操作,关闭当前行;若 A10 为低电平,突发读操作完成后,当前行依然处于 激活状态,以便对当前行执行新的读/写操作,想要关闭当前激活行,需写入预充电指令。

9.突发终止 (Burst Terminate) ,也称为 Burst Stop ,控制命令 为 {CS_N,RAS_N,CAS_N,WE_N} = 4’b0110,SDRAM 处于读/写操作过程中可被写入,突发 停止操作被用来截断固定长度或者整页长度的突发,执行突发停止命令后,最近执行的数 据读/写操作被终止,此命令操作并不会通过预充电关闭当前激活行,需通过预充电操作关 闭被激活行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值