sdram基本原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sdram基本原理相关的知识,希望对你有一定的参考价值。

参考技术A 原文链接地址
http://www.360doc.com/content/11/0615/14/6105442_127114777.shtml

行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM数据接口将数据传到数据总线。

SRAM是“static RAM(静态随机存储器)”的简称,之所以这样命名是因为当数据被存入其中后不会消失(同DRAM动态随机存储器是不同,DRAM必须在一定的时间内不停的刷新才能保持其中存储的数据)

Enable(OE):有的SRAM芯片中也有这个引脚,但是上面的图中并没有。这个引脚同WE引脚的功能是相对的,它是让SRAM知道要进行读取操作而不是写入操作。从Dout引脚读取1bit数据需要以下的步骤:

SRAM读取操作:
1)通过地址总线把要读取的bit的地址传送到相应的读取地址引脚(这个时候/WE引脚应该没有激活,所以SRAM知道它不应该执行写入操作)。

2)激活/CS选择该SRAM芯片。

3)激活/OE引脚让SRAM知道是读取操作。
第三步之后,要读取的数据就会从DOut引脚传输到数据总线。怎么过程非常的简单吧?同样,写入1bit数据的过程也是非常的简单的。

SRAM写入操作:
1)通过地址总线确定要写入信息的位置(确定/OE引脚没有被激活)。

2)通过数据总线将要写入的数据传输到Dout引脚。

3)激活/CS引脚选择SRAM芯片。

4)激活/WE引脚通知SRAM知道要进行写入操作。

DRAM通过DRAM接口把地址一分为二,然后利用两个连续的时钟周期传输地址数据。这样就达到了使用一半的针脚实现同SGRAM同样的功能的目的,这种技术被称为多路技术(multiplexing)

那么为什么好减少地址引脚呢?这样做有什么好处呢?前面我们曾经介绍过,存储1bit的数据SRAM需要4-6个晶体管但是DRAM仅仅需要1个晶体管,那么这样同样容量的SRAM的体积比DRAM大至少4倍。这样就意味着你没有足够空间安放同样数量的引脚(因为针脚并没有因此减少4倍)。当然为了安装同样数量的针脚,也可以把芯片的体积加大,但是这样就提高芯片的生产成本和功耗,所以减少针脚数目也是必要的,对于现在的大容量DRAM芯片,多路寻址技术已经是必不可少的了。

当然多路寻址技术也使得读写的过程更加复杂了,这样在设计的时候不仅仅DRAM芯片更加复杂了,DRAM接口也要更加复杂,在我们介绍DRAM读写过程之前,请大家看一张DRAM芯片内部结构示意图:

首先为了能存储1字节(8 bit)的信息,就需要8个1bit RAM基本存储单元堆叠在一起,这也意味着这8颗芯片被赋予了同样的地址。下面的示意图可以帮助你比较形象的了解这一点(下图所示的图例中仅仅画了4个存储单元,大家当成8个来看就可以了)。

通常这8颗1bit芯片是通过地址总线和数据总线在PCB(印刷电路板)上连接而成的,对于CPU来说它就是一颗8bit的RAM芯片,而不再是独立的8个1 bit芯片。在上图所示的地址总线位宽是22bit,这样这个地址总线所能控制的存储模块的容量应该是222=4194304bit,也就是4MB的容量;数据总线的位宽是8bit,就是通过刚才提到的8个1bit的基本存储单元的Dout并联在一起实现的--这样也能够满足CPU的要求了。(对于这种存储颗粒我们称之为4194304 x 8模块或者4Mx8,注意这里的“M”不是“MByte”而是“Mbit”)。为了举例说明,我们用一条TI(德仪公司)出品的TM4100GAD8 SIMM内存为例来说明,因为这种内存的构造相对比较简单,便于大家理解。TM4100GAD8基于4M x 8模块制造,容量4MB,采用30线SIMM封装。如果前面我说的东西你看明白了,就应该知道这条内存采用了4Mx1 DRAM颗粒。下面的数据是我在TI官方网站上找到的(目前很少有公司的网站还提供自己以前产品的数据):构造:4194304 × 8。工作电压:5-V。30线SIMM(Single In-Line Memory Module:SIMM)。采用8片4Mbit DRAM内存颗粒,塑料SOJs封装。长刷新期16 ms(1024周期)。

如果一个DRAM芯片具有8个数据引脚,那么这个基本储存单元一次就可以输出8bit的数据,而不像是在原来的TM4100GAD8 SIMM芯片中每次仅仅能输出1bit数据了。这样的话,如果我们需要制造一个同TM4100GAD8一样容量的内存,那么我们可以不使用前面所使用的4M x 1bit芯片,而是采用1M x 8bit芯片,这样仅仅需要4片芯片就可以得到一个容量为4MB,位宽为32bit的模组。芯片数目减少最直接的好处当然是可以减少功耗了,当然也简化了生产过程

1、首先行地址被传送到行地址引脚,在/RAS引脚被激活之前,RAS处于预充电状态,CAS也处于预充电状态,当然/WE此时依然是高电平,FPM至少知道自己不会进行写操作。
  2、/RAS引脚被赋予低电平而被激活,行地址被送到行地址选通器,然后选择正确的行送到传感放大器,就在/RAS引脚被激活的同时,tRAC开始计时。
  3、CAS一直处于预充电状态,直到列地址被传送到列地址引脚并且/CAS引脚得到一个低电平而被激活(tCRC时间开始计时),然后下面的事情我们也应该很清楚了,列地址被送到列地址选通器,然后需要读取的数据位置被锁定,这个时候Dout引脚被激活,第一组数据就被传送到数据总线上。
  4、对于原来介绍的DRAM,这个时候一个读取周期就结束了,不过对于FPM则不同,在传送第一组数据期间,CAS失活(RAS依然保持着激活状态)并且进入预充电状态,等待第二组列地址被传送到列地址引脚,然后进行第二组数据的传输,如此周而复始直至4组数据全部找到并且传输完毕。
  5、当第四组数据开始传送的时候,RAS和CAS相继失活进入到预充电状态,这样FPM的一个完整的读取周期方告结束。FPM之所以能够实现这样的传输模式,就是因为所需要读取的4个字节的行地址是相同的但是列地址不同,所以它们不必为了得到一个相同的列地址而去做重复的工作。
  6、这样的工作模式显然相对于普通的DRAM模式节省了很多的时间,特别是节省了3次RAS预充电的时间和3个tRAC时间,从而进一步提高的效率。

那些t参数的意思

4.11 ACTIVE Command
The ACTIVE command is used to open (or activate) a row in a particular bank for a subsequent access.
(用于对一个特定的bank的行进行连续的访问,前提是open或者activate该行)
This row remains active (or open) for accesses until a precharge command is issued to that bank. A PRECHARGE command must be issued before opening a different row in the same bank
-----行active持续到一个precharge命令发出,在同一个bank中open不同行时需要发出一个precharge命令

4.12 PRECHARGE Command
The PRECHARGE command is used to deactivate the open row in a particular bank or the open row in all banks.
----PRECHARGE命令是用来deactivate行或者activate行 in all banks

SDRAM操作原理分析

芯片原理图

技术分享

引脚原理图

技术分享

技术分享

指令

技术分享

技术分享

????通过对上面指令的总结,简化出要用到的指令如下:

指令

常量名

CKE

CSn

RAS

CASn

WEn

备注

空操作

NOP

1

0

1

1

1

?

行激活

ACTIVE

1

0

0

1

1

?

读操作

READ

1

0

1

0

1

?

写操作

WRITE

1

0

1

0

0

?

预充电

PR

1

0

0

1

0

?

自刷新

AR

1

0

0

0

1

?

设置寄存器

LMR

1

0

0

0

0

?

突发停止

BURST_STOP

1

0

1

1

0

1

?

芯片配置

技术分享

技术分享

操作模式SDRAM内部有三种操作模式:单一的读写、突发读写、页读写(突发读写全页)

突发传输模式:一般情况下都采用顺序读写操作;

CAS潜伏期:即发出读指令之后,经过多少个时钟周期才可以读取数据,而在写数据中是没有这个概念的。

突发长度:突发就是连续读写的操作,如果没有突发操作,对SDRAM内部连续地址进行读写则要发送指令和地址,然后读取或写入数据,循环操作,有了突发操作后,就可以制定突发长度,发送读写的起始地址然后对SDRAM进行连续的读写,突发的长度可以设置,突发全页就是连续操作一行,就是256个存储单元。

初始化时序图

技术分享

初始化操作过程如下:

  1. 上电等待200us
  2. 发送PR命令
  3. 满足tRP时间要求至少20ns
  4. 发送ARAutoRefresh)命令
  5. 满足tRFCtRPC又名tRCC)时间要求至少63ns
  6. 发送ARAutoRefresh)命令
  7. 满足tRFCtRPC又名tRCC)时间要求至少63ns
  8. 发送LMRLodeModeRegister)命令和相关配置信息
  9. 满足tMRD 时间要求至少1个时钟

?

定时自动刷新

存储体中电容的数据有效保存期上限是64ms,也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms 。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms 8192 Refresh Cycles/64ms的标识,这里的40968192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625 μs8192行时就为7.8125 μs

刷新操作分为两种:Auto Refresh,简称ARSelf Refresh,简称SR。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。对于ARSDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新是针对一行中的所有存储体进行,所以无需列寻址,或者说CAS RAS 之前有效。所以,AR又称CBRCAS Before RAS,列提前于行定位)式刷新。由于刷新涉及到所有L-Bank,因此在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期(PC133 标准),之后就可进入正常的工作状态,也就是说在这9个时钟期间内,所有工作指令只能等待而无法执行。64ms之后则再次对同一行进行刷新,如此周而复始进行循环刷新。显然,刷新操作肯定会对SDRAM 的性能造成影响,但这是没办法的事情,也是DRAM 相对于SRAM (静态内存,无需刷新仍能保留数据)取得成本优势的同时所付出的代价。

技术分享

操作过程如下:

  1. 先发送Precharge命令,命SDRAM释放所有资源库。
  2. 相关操作需要消耗时间tRP-20ns
  3. 发送AutoRefresh命令,命SDRAM刷新内部逻辑的内容。
  4. 相关操作需要消耗时间tRFC-63ns
  5. 发送AutoRefresh命令,命SDRAM刷新内部逻辑的内容。
  6. 相关操作需要消耗时间tRFC-63ns

写操作

????SDRAM的写操作有两种模式,如下

技术分享

Write with Autopre-charge:每当一次性的写发生以后,SDRAM自动释放相关的资源库,以方便下一次的写操作。相反则需要手动进行释放,一般采用Write with Autopre-charge

两者的区别就是A10的电平高低。

技术分享

操作过程如下:

  1. 发送Active命令,发送库(Bank)和行(Row)地址信息。
  2. 满足tRCD时间要求,至少20ns
  3. 发送Write命令、库(Bank)和列(Column)地址;A10拉高代表With Auto Precharge
  4. 同时写入的一字数据。这时候DQM必须拉低。
  5. 满足tWRtDPL)时间要求,至少2个时钟。
  6. 满足tRP时间要求,至少20ns

经过时间tWRtDPL)以后,一字数据就成功被写入。随后SDRAM开始执行Auto Precharge的操作,释放当前相关的资源库。最后经过tRP以后(Auto Precharge的操作完成)。

?

读操作

技术分享

  1. 发送Active命令、行(Row)和库(Bank)地址。
  2. 满足时间要求tRCD-20ns
  3. 发送Read命令、列(Column)和库(Bank)地址,DQM拉低,拉高A10一个时钟,表示读操作后自动释放资源库(WithAutoPrecharge)。
  4. 满足CAS Latency时间要求
  5. CAS Latency满足之后,接下来满足时间要求tAC-6nstRP-20ns,然后读取数据。

以上是关于sdram基本原理的主要内容,如果未能解决你的问题,请参考以下文章

继续死磕SDRAM控制器

SDRAM简介

STM32 FMC原理详解

STM32 FMC原理详解

STM32 FMC原理详解

SDRAM操作原理分析