zoukankan      html  css  js  c++  java
  • FPGA的SDRAM操作

    SDRAM的所有操作同步与时钟。根据时钟上升沿控制管脚和地址输入的状态,可以产生多种输入命令。

    SDRAM的初始化

    SDRAM的初始化过程如上图,但是要具体到操作,还要更具体的来讲:

    (1)200US的延时,只要用一个时钟计数器,等待期间发送NOP命令即可;

    (2)所有L-BANK的预充电,根据我看到的资料,说只要给出一个预充电的命令,保持一个时钟周期即可然后

    再回到空操作的命令(NO Operation);

    (3)8个刷新周期,第个刷新周期大约为6个时钟周期,有的资料也说是9个周期,所以在发出刷新的命令后要等待

      6个时钟周期,期间回到空操作状态,然后再次刷新

    (4)模式寄存器的设置(MRS),

    以上为模式寄存器设置的设置码,设置好即可,等待一两个时钟周期。下图为HY57V641620HG中对模式

    寄存器设置后,等待时钟的要求,为一个或两个时钟,

     SDRAM读写操作

    初始化之后就进入了读写操作状态,无论是读还是写都要先写入行有效命令。

    (1)写入行有效命令,

    从上图我们可以看出,行有效的写入与CS和L-Bank的地址线信号是同时写入的,同时,写信号

    为高电平。

    (2)tRCD延时

    在写入行有效和列有效之间,要有一段延称之为tRCD延时(#RAC to #CAS Delay),这是根据

    芯片存储阵列电子元件响应时间(从一种状态到另一种状态的变化过程)所制定的延时。在延时期间发

    送空操作命令。如下图;

    上图为HY57V641620HG芯片资料里给出tRCD延时参数。

    (3)读写操作

    经过tRCD延时之后,就开始读写操作了。下图为读写操作过程,只是#WE不同而已,读写操作命令和

    地址信号同时发出。

     (4)只是在CAS命令发出后,仍要经过一定时间才能有数据输出,这段时间被定义为CL(CAS Latency

    CAS潜伏期),由于CL只在读取时出现,所以CL又被称为读取潜伏期。(CL又分成两部分,一是CAS触发后,在存储体

    中晶体管的反应时间会造成数据不会与CAS在同一上升沿触发,肯定要延后至少一个时钟周期;二是数据触发后传向S-AMP

    但要经过一段准备时间才能保证信号的发送强度,也需要一个周期,这段时间被称为tAC(Access Time from CLK,时钟

    触发后的访问时间))所以在发出读操作命令之后,还要有一个延时,如下图

    (5)在读完之后要进行预充电,即要等待tRP时间,下图为HY57V641620HG芯片资料里给出tRP延时参数

     (6)在数据写入SDRAM之后,也要有一个延时,再预充电,下下图为HY57V641620HG芯片资料里给出

    数据写入之后和预充电的延时。此后才能再输入其它的命令。

    (7)自刷新的处理,SDRAM公认每64ms要刷新一次,而64M的SDRAM共有4096行,那么64ms/4096约

    为15us,即每15us刷新一行,在这里的刷新的初始化的刷新是一样延时。

    除了自刷新命令外,所有命令都是默认CKE有效。

     行激活命令选择处于空闲状态存储体的任意一个行,使之进入准备读/写状态。从体激活

    到允许输入读/写命令的间隔时钟节拍数取决于内部特征延时和时钟频率。

    2---预充电

      在进行完读写之后,如果要对同一L—BANK的另一行进行寻址,就要将原来有效的行关闭。

    重新发送行/列地址,L—BANK关闭现有的工作行,准备打开新行的操作就是预充电,预充电命

    令可以作用于单个体也可以作用于所有体(通过所有体预充电命令)对于猝发写操作必须保证在

    写入预充电命令前,写操作已经完成。并使用DQM禁继续写入数据。

    自:预充电是在打开新的行之前的操作,在发出预充电命令之后,要经过一段时间才能 允许发送RAS

    行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)

    3---自动预充电

      如果在猝发读或猝发写命令中,A10/AP位置为“1”,在猝发读写操作完成后自动附加一个预

    充电动作。

    4----猝发读

    猝发读命令允许某个体中的一行被激活后,连续读出若干个数据。第一个数据会在指定的CAS延时节拍后

    出现在数据线上,这个指定的节拍就是CAS的潜伏期(CL),以后个时钟节拍最会输出一个新的数据。猝发读操

    作结束后数据总线呈高阻态,可以在适当的节拍上再次发出猝发读命令使数据线上保持没有空隙。猝发读

    操作可以被同体或不同体的新的猝发读/写命令或同一体的预充电命令及猝发停止命令中止。

    上图指定CL为2,BL为4。

    5---猝发写

      与猝发读命令类似,第一个写数据与猝发写命令同时在数据线给出,以后每个时钟节拍给出一个新的数据,

    输入缓冲在猝发数据量满足要求后停止接受数据。猝发写操作可以被猝发读/写命令或DQM数据输入屏蔽命令和

    预充电命令或猝发停止命令中止。

    6---写命令

      列寻址信号与写命令是同时发出的。WE有效时,就是写命令。

    7---读命令

      读取命令与列地址一块发出,WE#无效时,就是读命令,

      在发送列读写命令时必须要与行有效命令有一个间隔 ,这个间隔被定义为tRCD,即RAS to CAS Delay

    以时钟周期数为单位。在CAS命令发出后,仍要经过一定时间才能有数据输出,这段时间被定义为CL(CAS Latency

    CAS潜伏期),由于CL只在读取时出现,所以CL又被称为读取潜伏期。(CL又分成两部分,一是CAS触发后,在存储体

    中晶体管的反应时间会造成数据不会与CAS在同一上升沿触发,肯定要延后至少一个时钟周期;二是数据触发后传向S-AMP

    但要经过一段准备时间才能保证信号的发送强度,也需要一个周期,这段时间被称为tAC(Access Time from CLK,时钟

    触发后的访问时间))

    8---数据输入

    据写入的操作也是在tRCD之后进行的,但此时没有CL,数据信号由控制端发出,输入时芯片无需做任何调校,可以与CAS

    同时发送,即写入延时为0,不过,数据并不是即时地写入存储电容,因为选通三极管(和读时一样)与电容的充电必须有一段

    时间,所以数据的真正写入需要一定的周期,这段时间就是写回周期(tWR)同时也因为写回周期的存在,使预充电操作延后

    9---刷新操作

    刷新操作与预充电中重写的操作是一样的,都是用S-AMP先读再写。但因为预充电是对一个或所有L-BANK中的工作行操作,并且

    是不定期的,而刷新则是有固定的周期,依次对所有行进行操作,保留那些久久没经历重写的存储体中的数据。但与所有L-BANK

    预充电不同的是,这里的行是指所有L-BANK中地址相同的行,而预充电中各L-BANK中的工作行地址并不是一定是相同的。

    刷新分为自动刷新AR和自我刷新SR,不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。

    10---数据掩膜(Data I/O Mask 简称DQM)

    通过DQM,内在可以控制I/O端口取消哪些输出或输入的数据。在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”

    处被屏蔽,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即生效。

    读取时数据掩码操作,DQM在两个周期后生效,突发周期的第二笔数据被取消。

    当DQM为高电平时有效,猝发周期的第二笔数据被取消。

    (参考:高手进阶,终极内在技术指南——完整进阶版)

    **************************************************************************************

    **************************************************************************************

    1、模式寄存器设置(MRS)

    SDRAM上有一个模式寄存器,用户通过它来设置突发长度、突发类型,读潜伏期。上电后必须对它进行设置来初始化器件,

    这个命令只有在所有的bank都处于空闲时才可以发送,且CKE在该命令发送之前,必须至少保持一个时钟周期的高电平。这

    个命令的发送是在RAS、CAS、CS、WE为低电时钟的上长沿触发,

    且数据口设置为输入。数据写入模式寄存器需要两个时钟,这写时间任何命令都不能被发送。

    注:所有的bank

    2、行有效

    空闲bank的任意一行都可以通过一个激活命令来激活。激活命令的初始化是通过激活CS,RAS

    和使CAS、WE无效,并和bank地址和行地址在同一个时钟的上升沿触发。一旦一个行有效命令

    被发送到对应所选择的bank的地址,被选的bank离开空闲状态,进入行有效状态,于是,行地址

    被锁存,对应的行被选择,行内的数据被选定并被送到读出放大器,用作以后的读写操作。再经过

    最少的tRCD时间的延时后,突发读/写命令才能被发送,不同的BANK可以同时被激活。当激活另

    一个BANK时,需要最小的tRRD延时。如果一个BANK已经激活就不能再发送行激活命令,同样,

    如果SDRAM处在掉电模式、自刷新、自动刷新状态(tRC),和时钟悬浮状态行激活命令也不能被发送。

    读BANK

    这个命令用来对激活的行进行突发读数据,这个命令的开始时通过激活CS,CAS(拉低),并把

    WE拉高,在时钟的上升沿触发的,经过CAS潜伏期后,数据开始有效,突发长度和潜伏期是在模式寄

    存器中设置的,突发读可以由突发停止命令来控制,在突发长度的末尾,数据输出会变为高阻,并且BANK

    会重新行有效状态。

    写BANK

    写命令是把CS、CAS和WE拉低,并赋上列地址,在同一时钟的上升沿触发,第一个数据可以和写命令

    和列地址在同一时钟钟被输入,突发写长度也是在MRS中设置的。

     预充电(PRECHARGE)

    这个命令是通过逻辑块地址对逻辑块进行预充电,预充电过程是把#CS,#RAS,#WE拉低,同时把AP和块地址一起送出,

    当AP为高时,所有的BANK通过预充电命令进行充电;当AP为低时,

    只有被块地址选中的逻辑块进行预充电。在预充电命令被发出后,需要经过最小的tRP延时之后,

    才能再次激活逻辑块。经过tRP延时之后,逻辑块进行空闲状态。

    注:在突发写之后,要经过tDPL延时才能执行,预充电命令,当·#CAS潜伏期为2和3时,

    tDPL = 1CLK;

    自动预充电(AUTO PRECHARGE)

    自动预充电是给激活的逻辑块进行充电,并且不需要预充电命令,一个读/写与自动预刷新是在

    一个tRAS周期之内完成的。自动预刷新是和读/写命令在同一个时钟的上升沿发送的。如果读/

    写伴随AP为高电平,那么在一个读/写周期后逻辑块将进入空闲状态。伴随有自动预刷新的读/写

    是不能被另一个读/写、预充电和突发停止命令所终止的。所以在伴有自动刷新的读写期间这些

    命令是禁止的。

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

       SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR(Suspend to RAM,休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并进入正常操作状态。

  • 相关阅读:
    vue组件详解(四)——使用slot分发内容
    vue组件详解(三)——组件通信
    vue组件详解(二)——使用props传递数据
    vue组件详解(一)——组件与复用
    vue表单详解——小白速会
    vue class与style 绑定详解——小白速会
    vue内置指令详解——小白速会
    vue计算属性详解——小白速会
    SQL查询当天、本周、本月记录详解
    SQL Server中使用convert进行日期转换
  • 原文地址:https://www.cnblogs.com/zhongguo135/p/2671573.html
Copyright © 2011-2022 走看看