SDRAM学习(一)SDRAM理论学习

为什么要学习SDRAM?

 SDRAM是一种存储器,具有存储容量大,且读写速度快,在后面进行FPGA处理数据时具有十分重要的作用。然而现在的存储设备大都使用DDR存储器,DDR和SDRAM十分相似可以为后面学习使用DDR打下坚实的基础。

如何学习SDRAM呢?

我打算跟着野火学习SDRAM,感觉野火比较用心。首先是理论的学习,然后对于项目的逻辑框图学习,然后绘制波形图,最后代码的编写,上版验证。

SDRAM是啥?

Synchronous Dynamic Random Access Memory 同步动态随机存储器,是DRAM的一份子。可能会听说过DDR3,DDR4,现在笔记本电脑都用到了DDR5,我这台笔记本电脑就是DDR5的,DDR_也是动态随机存储器的一种。例如DDR5的全称(Double data rate fifth-generation synchronous Dynamic Random Access Memory)第五代双倍数据率同步动态随机存储器。两个同步表示,存储器与主控芯片(也就是我的FPGA)共用一个工作时钟。而DDR5中第一个D是因为DDR采用双边沿采样(可降低干扰的差分信号)的数据存储而SDRAM仅仅单边沿(上升沿)进行数据的存储,这也表明了DDR在速度上更优于SDRAM,后来都没人在开发SDRAM,都在DDR的基础上进行更新迭代设计才有了DDR、DDR2、DDR3、DDR4、DDR5。动态与存储器内部的原理有关,此存储器的存储是通过电容进行存储电荷,而电荷会随着时间的推移不断释放因此需要动态的进行充电刷新,保证数据的稳定性。随机就是可以任意指定地址,而行地址和列地址是共用的,采用分时复用。PS:看到B站一个博主使用了SDRAM设计了一款CCD相机,SDRAM也是够用的。(自制一台全画幅CCD无反相机_哔哩哔哩_bilibili)博主是和光Channel

一代:SDR SDRAM

二代:DDR SDRAM

三代:DDR2 SDRAM

四代:DDR3 SDRAM

五代:DDR4 SDRAM

六代:DDR5 SDRAM

SDRAM存储容量与速度

SDRAM是一个存储阵列,与其他存储器的管道存储有着本质的区别。利用行地址和列地址可以精确定位存储地址。

N个存储单元构成一个阵列。

N= 行*列

这个存储阵列叫做BANK,一般SDRAM会分为4个BANK

首先进行BANK进行寻址,然后在行,在列,最后确定了这个存储单元,

一个存储单元有若干个比特组成,由位宽决定。

参考镁光SDR SDRAM 

MT48LC16M16A2 - 4 Meg x 16 x 4 bank

Meg 是单个bank包含的存储单元=行*列,

 4194304表示4Meg, x16表示16位 ,x4表示4个bank,

 正好是256Mbit

 上面Speed Grade是时钟等级的介绍, Clock Frequency(MHz)代表了工作时的最大速度。

Target tRCD - tRP - CL 与周期相乘是与后面三个参数相等的。单位是最小时钟周期数。

tRCD:自激活命令到开始数据进行读写中间等待的时间,单位是纳秒,最小值。

tRP:自预充电指令写入到预充电完成需要等待的时间

CL:列选通潜伏期,自数据读指令写入到第一个有效数据读出所需要的一个等待时间

SDRAM的引脚说明

 54引脚的TSOP封装,由于这本说明书兼容三种位宽类型的SDRAM芯片,所以在引脚定义的时候有x4(4位)、x8(8位)和x16(16位),

按重点依次介绍:

38pin:CLK——同步时钟信号,系统时钟,在上升沿进行采样,输入信号

37pin:CKE——时钟使能信号,高电平有效,可以屏蔽CLK信号,只有为高电平,CLK才能起作用

19pin:CS#——片选信号,低电平有效,屏蔽和使能所有的输入输出信号(除了CLK,CKE,DQMH,DQML),在高电平的时候可以屏蔽所有的写入写出命令,但是已经进行的突发写入写出是不受影响的。这个也可以写成CS_N

18pin:RAS#——行选通信号,低有效用于判断A12——A0时分复用,输出行地址

17pin:CAS#——列选通信号,低有效用于判断A12——A0时分复用

16pin:WE#——写使能信号,低有效,使能写操作和预充电操作。

正是这四个引脚可以构成SDRAM的一个操作命令(CS#,RAS#,CAS#,WE#)

15pin和39pin:DQML和DQMH——数据掩码信号,可以对数据进行一个掩码操作,在16位数据中DQML是控制低8位的数据,DQMH是控制高8位的数据。当(DQML,DQMH)=(0,0)数据输出是xx_xx(这里的x不一定是不定态,可以是0可以是1可以是不定态);当(DQML,DQMH)=(0,1)数据输出是xx_zz;当(DQML,DQMH)=(1,0)数据输出是zz_xx;当(DQML,DQMH)=(1,1)数据输出是zz_zz;由于8位宽和4位宽只需要一个DQM控制就行了,所以只有39pin。

20pin和21pin:BA0和BA1——因为有四个BNAK,所以有两个引脚控制BANK

23pin、24pin、25pin、26pin、29pin、30pin、31pin、32pin、33pin、34pin、35pin、36pin和22pin:A0、A1、A2、A3、A4、A5、A6、A7、A8、A9、A11、A12和A10——不仅是地址总线而且还有特殊的含义,尤其是A10。在后面寄存器模式配置有详细介绍。

2pin、4pin、5pin、7pin、8pin、10pin、11pin、13pin、42pin、44pin、45pin、47pin、48pin、50pin、51pin和53pin:DQ0-DQ15——是16位数据端口,既是输入也是输出。

剩下就是电源。下面的图更加详细的介绍了芯片的引脚

SDRAM的操作命令

这四路信号构成了SDRAM操作指令集。

 一、COMMAND INHIBIT(命令禁止)

 在此命令下禁止新的命令执行,而正在执行的命令并不受影响=(H X X X)

二、NO OPERATION (NOP)(无操作命令)

此命令用于设备进入无操作,就是占据一条命令,不执行任何操作,在一些空闲和等待的时间内占着命令行,这样可以防止出现别的命令。=(L H H H)

三、LOAD MODE REGISTER (LMR)(配置模式寄存器命令)

此命令=(L L L L)只有在所有的BANK都处于空闲状态是才可以被写入,否则会出现配置错误,在执行这个命令后必须等待一个响应tMRD(模式配置寄存器周期)时间。并且需要地址总线进行辅助配置。下面是模式配置定义图。

 从右往左进行介绍(这里用M替代A)

(M2 M1 M0)决定了突发长度,可以是1(不使用突发,即每次进行读写数据的时候都要进行选址),2,4,8个存储单元也可以是一整行(full page),(burst length)(指在一次突发传输中进行的数据传输次数)

M3决定了突发类型,(burst type)(M3 = 0)为顺序的突发类型,(M3 = 1)为隔行的突发类型,一般使用顺序的突发类型。

(M6 M5 M6)是CAS Latency决定了列选通潜伏期,是指读命令被寄存到数据总线到出现第一个数据之间的时钟周期间隔

 (M8 M7)是Op Mod(操作模式,运行模式) (M8 M7)=(0 0)是标准模式,其他模式并没有开放。

M9是WB,Write Burst Mode(写突发模式),当M9 = 0时,读和写操作都是突发方式,长度有原先的(M2 M1 M0)决定,当M9 = 1时,读仍然是突发的方式,但是写只能在一条命令下对一个存储单元进行写操作。

(M12 M10 M9)保留并未使用

四、PRECHARGE (Deactivate row in bank or banks) 预充电命令

关闭指定的逻辑Bank或者所有逻辑Bank的行,在预充电命令执行后必须必须等待一段时间,这称之为预充电时钟周期(tRP),完成此操作后,这个逻辑Bank可以被重新的操作;可以全部Bank都进行预充电也可以单个Bank预充电,需要A10,BA0和BA1进行辅助配置,在A10为H,对所有的Bank进行预充电。在A10为L时,由BA0和BA1决定哪一个Bank进行预充电。并且执行预充电后,这个Bank就处于空状态,如果要进行读或者写的操作就必须提前进行激活操作。=(L L H L)

五、AUTO REFRESH or SELF REFRESH (enter self refresh mode)刷新命令

因为如果想要保证SDRAM内部数据的可靠性则必须对SDRAM进行刷新操作。在国际上公认的存储体电容能够保存电荷的时间是64ms,因此要在64ms内完成一次刷新,由于每一个Bank是进行独立刷新的,一次进行一行的刷新,刷新速度就是 行/64ms,以本次16位的256MSDRAM为例,每一个逻辑Bank有8192行,则完成每行的刷新时间为7.8125us 

 = (L L L H)当时钟使能信号CKE为高电平的时候,执行的自动刷新命令;当时钟使能信号CKE为第电平的时候,执行的自刷新命令。两种命令都不需要提供地址,因为其内部自动生成地址,是对整个bank进行的刷新操作。在执行自动刷新命令之前必须执行预充电命令,并且需要等待一个预充电时钟周期才能执行自动刷新命令。注意这里是一行一行进行刷新,在进行本行刷新的时候此行进行的读写命令必须停止操作,只有等到这一行刷新结束后才能进行读写操作,所以在7.8125us内不能进行操作,在接下来的(64ms - 7.8125us)才可以进行操作。在CKE为低电平的时候下,主要用在低功耗模式下,进行自刷新。此时除了时钟使能信号有效外,其他信号都无效。

六、ACTIVE (select bank and activate row) 激活命令

  = (L L H H)此命令只在空闲状态下使用,只能用来激活某一Bank下某一行。在激活命令之前必须有一个预充电命令

七、WRITE (select bank and column, and start WRITE burst)写命令

 = (L H L L)此命令对特定的逻辑Bank,列进行写操作,写操作后还要看一下A10,如果A10为高电平则立即进行预充电操作,否则不进行预充电等待下一次的写。

八、READ (select bank and column, and start READ burst) 读命令

= (L H L H)此命令对特定的逻辑Bank,列进行读操作,读操作后还要看一下A10,如果A10为高电平则立即进行预充电操作,否则不进行预充电等待下一次的读。

九、BURST TERMINATE 突发终止命令

 = (L H H L)终止突发操作,用于读写操作命令之中,用于阶段固定长度或者整页长度的突发,此命令后并不会通过预充电关闭当前的激活行,相关闭当前的行还要通过一个预充电命令。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值