SDRAM 学习笔记(二)

来源:互联网 时间:2016-01-20

本篇博客还是以hynix的芯片为主。下载hynix任意一款数据手册,在http://www.alldatasheet.com 网站上可以进行下载。掌握一款芯片的驱动方法,可以类推同类芯片驱动方法。

1.命令集合

  先介绍一些会用到的命令集合,如下图所示:

  上述的指令集和是在芯片手册中经常提及的,再此做个总结。

2. 模式寄存器

  上述是模式寄存器相关设定,具体的设定内容手册中有如下解释:

  SDRAM的模式配置要求比较高,必须正确配置,否则有可能配置失败,读不出想要的数据。

  上述表中的突发读写长度,典型的为全页读写,指的是从L-Bank里一行的所有存储单元从头到尾进行传输,不同的型号的SDRAM传输单元数不一样,比如64Mbit的SDRAM,位宽为4,8,16的芯片一页为1024,512,256个存储单元。

  为了实现更高的带宽,可以采用突发 连续读/写方式来实现海量数据的高速读/写。

  突发读写方式,突发指的是在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度,只要指定起始列地址与突发长度,寻址与数据的读取将自动进行,只需控制好两端突发读取命令的间隔周期就能做到连续的突发传输。突发长度在模式寄存器的配置中有1.2.4.8,以及256个数据的操作模式。

  突发读写实现的是连续的读写操作,在结束完一次突发读写前,不需要进行地址的索引,但需要注意的是,这个连续的读写操作是操作的连续,不是地址的连续。

  在模式寄存器配置中还可以设定SDRAM突发读写方式为顺序读写或者交错读写。其中A3是配置突发类型。

  下图展示了突发长度的配置方式。

  为了达到最大的视频数据流的传送,这里设定为顺序读/写模式,同时以全页读/写的方式进行突发读/写操作,能够达到最大的带宽和更高的效率。但这样做必须每次前都要准备好256个数据的缓存器(这里依据你所用的芯片的存储单元的位数决定),以保证数据的读写能够连续进行。

3.不同型号驱动频率的对比

  上图是对应的型号和所需时钟频率以及CAS潜伏周期设定,此型号兼容LVTTL电平,由4个区,每个区有4Mbits,每个存储单元为16bit。这里以H57V256GTR-75C作介绍,下述内容摘自数据手册。

4. 引脚说明 

  CKE为时钟使能信号,控制内部时钟,CS是片选信号,BA0,BA1是bank地址,用来选择4个对应的分区。A0~A11是SDRAM地址,用来对行和列进行预解码,注意其中A10是自动预充电标志。RAS和CAS分别对应行和列地址的选通。WE控制写使能。UDQM,LDQM可以对不想用到的数据进行掩模,这样就可以不读出不想要的数据。

  地址线A10控制着是否进行在读写之后当前L-bank自动进行预充电,在单独的预充电命令中,A10控制着对指定的L-bank还是对所有的L-bank进行预充电。在发出预充电命令后,要经过一段时间才能允许RAS行有效命令打开新的工作,称为tRP(预充电有效周期),单位是时钟周期数。下图是SDRAM时序图。

5.SDRAM的初始化时序

   有严格的流程:

   板卡上电初始化-->200us等待SDRAM启动(手册中至少需要100us)-->所有L-BANK预充电(给所有L-BANK的电容充电,准备预刷新)-->8个预先刷新周期(手册规定至少2个周期来刷新逻辑块,在设计中一般直接给8个周期)-->模式寄存器的配置(寄存器配置完毕后,输出SDRAM_init_done信号标志,初始化完毕)。

6.友晶公司DE2-115代码SDRAM结构

  如下图是DE2-115板卡所带的SDRAM参考程序结构框架。

    传感器捕获后的数据为640*480,每个数据单元占用16比特,那么摄像头传送的数据是将近30万个16比特,为达到最大数据流的传送,设置SDRAM为顺序读/写模式,同时以全页读/写的方式进行突发读/写操作,并采用SDRAM内部乒乓机制,实现最大视频流的传送,上图为SDRAM模块结构框架。其中为了保持时钟的全局性,采用外部PLL来生成SDRAM驱动时钟和SDRAM控制时钟,其中两个时钟均为100MHz,相位差在-3ns~+1ns之间。由于数据读入与数据读出来自两个不同的时钟域,RD_FIFO读模块和WR_FIFO写模块用来作为跨时钟域数据缓存模块。SDRAM逻辑控制模块中,实现乒乓操作,达到最大数据流传送。SDRAM命令接口和控制接口在外部PLL的控制下,完成SDRAM初始化,预充电,读写控制,以及刷新等操作,最后将数据送给VGA显示模块或者USB传输模块。

7.潜伏周期、刷新频率和突发长度和类型

  第6点已经说明了常用的类型,即使用全页连续顺序读写方式,上图中每64ms刷新一个区,即将一个区的所有行都刷新完毕。

  SDRAM之所以要刷新,是因为要不断刷新才能保留住数据,依次对所有行进行操作,以保留那些久久没经历过重写的存储体中的数据,因此它是DRAM最重要的操作。要隔多长时间刷新一次呢?目前公认的标准是上限64ms,刷新速度是 行数量/64ms,上图中刷新一个L-bank刷新时间为 64 /8192 = 7.8125us.

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

  这里提及一下关于容量的计算和DQM的计算;

  总容量 = 行数 x 列数 x bank 数 x 位宽 = 1 bank单元数 x bank 数 x 位宽 ;

  DQM的位宽 = 数据宽度/8,如32bit的SDRAM,DQM[2]对应DQ[23:16].

  关于DQM的作用是起到掩膜作用,就是指定输出时候,某一段是不输出的。下图是DQM时序图

 

 

//=======================================================================

更多详细的资料下载可以登录笔者百度网盘:

网址:http://pan.baidu.com/s/1bnwLaqF

密码:fgtb

//=======================================================================

相关阅读:
Top