FPGA 读写 sdram文档整理

整体介绍

256MbSDRAM是一种高速CMOS,动态随机存取存储器,设计工作在3.3V Vdd
每个67,108,864位的存储区被组织为8,192行,512列,16位或8,192行数1,024列乘8位。
256MbSDRAM具有同步突发的能力具有自动列地址的高数据速率的数据生成,内部bank之间交错的能力隐藏预充电时间和随机能力在每个时钟周期内更改列地址突然访问。

端口介绍

CKE Clock Enable
CS# Chip Select
RAS# Row Address Strobe Command
CAS# Column Address Strobe Command
WE# Write Enable

CKE 输入确定是否启用CLK输入。 当CKE为高电平时,CLK信号的下一个上升沿有效,低电平时无效。 当CKE为低电平时,器件将处于掉电模式,时钟挂起模式或自刷新模式。 CKE是一个异步输入。

命令介绍

  1. READ命令从BA0,BA1输入中选择bank,并启动对活动行的突发读访问。 输入A0-A9(x8); A0-A8(x16)提供起始列位置。当A10为HIGH时,此命令用作 AUTO - PRECHARGE命令。 选择自动充电后,正在访问的行将在READ突发结束时预充电。未选择AUTO PRECHARGE时,该行将保持打开状态以供后续访问。DQ的读数据在两个时钟之前受DQM输入的逻辑电平限制。 当给定DQM时信号注册为HIGH,相应的DQ将在两个时钟之后为High-Z。当DQM信号注册为低电平时,DQ将提供有效数据。
  2. WRITE命令启动对活动行的突发写访问。 BA0,BA1输入选择bank,起始列位置由输入A0-A9(x8)提供; A0-A8(x16)。是否使用AUTO-PRECHARGE由A10决定。 如果选择了AUTO PRECHARGE,则正在访问的行将在WRITE突发结束时预充电。 如果未选择AUTO PRECHARGE,则该行将保持打开状态以供后续访问。写入存储器阵列,同时在DQ和DQM输入逻辑电平上出现相应的输入数据。当DQM信号为低电平时,数据将写入存储器。 当DQM为高电平时,相应的数据输入将被忽略,并且不会对该突发访问的字节/列位置执行WRITE。
  3. PRECHARGE命令用于关闭特定打开的bank或者所有bank。 BA0,BA1可用于选择哪个bank关闭或被视为“不在乎”。 A10确定一个或所有bank是否预充电。 在执行该命令之后,在经过时段tRP之后执行所选存储体的下一个命令,该时段是存储体预充电所需的时段。一旦bank被预充电,它就处于空闲状态,并且必须在向该bank发出任何READ或WRITE命令之前激活。

  4. AUTO PRECHARGE功能可确保在突发期间的最早有效阶段启动预充电。 该功能允许单个bank预充电,而无需显式命令。 A10与特定的READ或WRITE命令一起启用AUTOPRECHARGE功能。 对于每个单独的READ或WRITE命令,启用或禁用自动预充电。 除了full-page模式外,AUTO PRECHARGE不适用。 在完成READ或WRITE突发时,自动执行被寻址的bank/行的预充电。

  5. BURST TERMINATE命令强制终止通过截断任一个来进行突发读写操作固定长度或整页突发和在突发之前配置寄存器READ或WRITE命令结束。
  6. COMMAND INHIBIT阻止新命令执行。 除此之外,正在进行的操作不受影响从CLK信号是否启用
  7. 无动作NO OPERATION  当CS为低电平时,NOP命令可防止不需要的操作命令在空闲或等待期间配置状态。
  8. LOAD MODE REGISTER加载模式寄存器 在LOAD MODE REGISTER命令期间执行模式寄存器从A0-A12加载。 此命令只能在所有bank闲置时发行。
  9. ACTIVE COMMAND 活动的命令 激活ACTIVECOMMAND时,BA0,BA1输入选择要访问的bank和地址A0-A12上的输入选择行。 直到PRECHARGE命令发给bank,行仍然打开用于访问。

命令详情

Bank/row activation :在向SDRAM中的bank发出任何READ或WRITE命令之前,必须“打开”该bank中的一行。这是通过ACTIVE命令完成的,该命令选择存储区和要激活的行。在打开一行(发出ACTIVE命令)之后,可以根据trcd规范向该行发出READ或WRITE命令。 A,只有在前一个活动行被“关闭”(预充电)之后,才能发出对同一bank中不同行的后续ACTIVE命令。连续的ACTIVE命令到同一个bank之间的最小时间间隔由trc定义。 B,在访问第一个bank时,可以发出对另一个bank的后续ACTIVE命令,这导致总行访问开销的减少。连续的ACTIVE命令到不同存储体之间的最小时间间隔由trrd确定。ACT[0] to ACT[1]

READ

1.png

  1. 使用READ命令提供起始列和存储区地址,并为该突发访问启用或禁用自动预充电。如果启用了自动预充电,则正在访问的行在突发完成时预充电。
  2. 完成突发后,假设没有启动其他命令,DQ将变为高阻态。 整页爆发将持续到终止。 (在页面的末尾,它将换行到第0列并继续。)
  3. 来自任何READ突发的数据可以用随后的READ命令截断,并且来自固定长度的READ突发的数据可以紧接着来自READ命令的数据。
  4. 在任何一种情况下,都可以保持连续的数据流。即:来自新突发的第一个数据元素跟随完成突发的最后一个元素或者被截断的较长突发的最后一个所需数据元素。

5.png

  1. 新的READ命令应在最后一个所需数据元素有效的时钟边沿之前x个周期发出,其中x等于CAS延迟减1。 对于CAS延迟为2和3的连续READ突发显示了这一点; 数据元素n + 3或者是4个突发中的最后一个,或者是较长突发的最后期望。
  2. 256Mb SDRAM使用流水线架构,因此不需要与预取架构相关联的2n规则。可以在先前READ命令之后的任何时钟周期启动READ命令。 可以对同一存储体执行全速随机读取访问,如随机读取访问中所示,或者可以对不同的存储体执行每个后续读取。
    7.png

  3. 来自任何READ突发的数据可以用随后的WRITE命令截断,并且来自固定长度的READ突发的数据可以紧跟来自WRITE命令的数据(受总线周转限制)。 如果可以避免I / O争用,则可以在紧接在READ突发的最后(或最后期望的)数据元素之后的时钟边缘上启动WRITE突发。在给定的系统设计中,在SDRAM DQ变为高阻态之前,驱动输入数据的设备可能会变为低-Z。 在这种情况下,在最后读取数据和WRITE命令之间应至少发生单周期延迟。DQM输入用于避免I / O争用,如图RW1和RW2所示。 必须在WRITE命令(DQM延迟为输出缓冲器的两个时钟)之前至少三个时钟置位(高电平)DQM信号,以抑制READ数据输出。 一旦WRITE命令被注册,DQ将变为High-Z(或保持High-Z),无论DQM信号是否处于何处,只要DQM在WRITE命令截断READ命令之前的时钟上处于活动状态。 如果不是,则第二个WRITE将是无效的WRITE。 例如,如果在图RW2中的T4期间DQM为低,那么T5和T7处的WITE将是有效的,而T6处的WRITE将是无效的。必须在WRITE命令之前取消置位DQM信号(DQM延迟为输入缓冲器的零时钟),以确保写入的数据不被屏蔽

  1. 对于固定长度的READ突发的数据可能后面跟着一个预充命令,也可能被截断(假设未激活自动预充电),并且可以使用PRECHARGE命令将整页突发截断到同一存储区。 PRECHARGE命令应在最后一个所需数据元素有效的时钟边沿之前x个周期发出,其中x等于CAS延迟减1。 对于每个可能的CAS延迟,这在READto PRECHARGE图中显示; 数据元素n + 3或者是4个突发中的最后一个,或者是较长突发的最后期望。 在PRECHARGE命令之后,在满足trp之前,不能发出对同一存储体的后续命令。 注意,在访问最后一个数据元素期间隐藏了部分行预充电时间。

9.png

  1. 在执行固定长度脉冲串的情况下,在最佳时间发出的PRECHARGE命令(如上所述)提供了与具有自动预充电的相同固定长度脉冲串相同的操作。 PRECHARGE命令的缺点是它要求命令总线和地址总线在适当的时候可用以发出命令;PRECHARGE命令的优点是它可以用于截断固定长度或整页突发

  2. 可以使用BURSTTERMINATE命令截断整页READ突发,并且可以使用BURSTTERMINATE命令截断固定长度的READ突发,前提是不会激活.BURST TERMINATE命令应在最后一个所需数据元素的时钟边沿之前x个周期发出是有效的,其中x等于CAS延迟减1。 对于每个可能的CAS延迟,这在READBurst Termination图中示出;数据元素n + 3是较长突发的最后期望数据元素。
    10.png

WRITE :

  1. 使用WRITE命令提供起始列和存储区地址,并为该访问启用或禁用自动预充电。 如果启用了自动预充电,则正在访问的行在突发完成时预充电。在WRITE突发期间,第一个有效数据输入元素将与WRITE命令一致地注册。后续数据元素将在每个连续的正时钟边沿上注册。完成固定长度脉冲串后,假设没有启动其他命令,DQ将保持高阻态,并且将忽略任何其他输入数据(参见WRITE Burst)。 整页爆发将持续到终止。 (在页面的末尾,它将换行到第0列并继续。)
    2.png

  2. 可以使用随后的WRITE命令截断任何WRITE突发的数据,并且可以紧接着写入WRITE命令的数据用于固定长度的WRITE突发的数据。 可以在前一个WRITE命令之后的任何时钟发出新的WRITE命令,并且与new命令一致的数据应用于新命令
    3.png

  3. 任何WRITE突发的数据可以用随后的READ命令截断,并且固定长度WRITE突发的数据可以紧接着随后的READ命令。 注册READ命令后,将忽略数据输入,并且不会执行WRITE。 WRITE to READ中显示了一个示例。 数据n + 1或者是两个突发中的最后一个,或者是较长突发的最后期望。
    4.png

  4. 对于固定长度的WRITE突发的数据可能后面跟着一个预充命令,也可能被截断。(假设未激活自动预充电),并且可以使用PRECHARGE命令将整页突发截断到同一存储区。PRECHARGE命令应在最后一个所需输入数据元素注册的时钟边沿之后发出tdpl。 无论频率如何,自动预充电模式都需要至少一个时钟加时间的tdpl。此外,当截断WRITE突发时,必须使用DQM信号来屏蔽PRECHARGE命令之前的时钟边沿的输入数据,并且时钟边沿与PRECHARGE命令一致。 WRITE到PRECHARGE图中显示了一个示例。 数据n + 1或者是两个突发中的最后一个,或者是较长突发的最后期望。 在PRECHARGE命令之后,在满足trp之前,不能发出对同一存储体的后续命令。
    5.png

  1. 可以使用BURSTTERMINATE命令截断固定长度或整页WRITE突发。 截断WRITE突发时,将忽略与BURST TERMINATE命令一致的输入数据。 写入的最后一个数据(假设此时DQM为低电平)将是在BURST TERMINATE命令之前一个时钟应用的输入数据。

6.png

  1. BURST READ/SINGLE WRITE
    通过将模式寄存器中的写突发模式位(M9)编程为逻辑1来进入突发读/单写模式。在此模式下,所有WRITE命令都会导致访问单个列位置(突发1), 无论编
    READ命令根据编程的脉冲串长度和顺序访问列,就像在正常操作模式下一样(M9 = 0)
    注:常规读和写:

7.png
8.png
9.png
10.png
11.png

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2019-04-27 08:57:17 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它