本篇内容主要讲解“SDRAM是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SDRAM是什么”吧!
Synchronous Dynamic Random Access Memory: 同步动态随机存储器. 同步 : 由soc发送时钟给SDRAM, 通过该时钟的节拍来发送控制信号. 动态 : 存储器需要不断的刷新来保证数据不丢失. 随机 : 数据非线性存储, 可自由指定地址进行数据的读写
图1 本开发板用两片sdram来配置为32bit位宽的sdram.
sdram的检索原理和表格一样, 通过先指定行, 再指定列就能准确找到所需要的存储单元. 但是由于技术/成本的原因, 一个sdram内部不可能只有一个表格, 目前基本是4个, 这个类似表格一样的结构叫做 逻辑Bank, L-Bank. 这样要找到某个存储单元就要先确定是哪个bank, 然后选定行,再选定列.
行有效
必须先使能芯片, 选中相应的L-BANK, 再使能 行(ROW), 再使能 列(COLUMN)来对某个存储单元进行读写.
图2 行有效时序图
通过BA0\BA1来选中某个L-BANK, 通过RAS\CAS来区分 行 与 列. 这是同时进行的, 所以行有效也可以称为 L-BANK有效
列读写
行选通之后就可以发送列地址对存储单元进行读写了. 读/写 命令是通过 WE 信号线来区分的, WE = 1 : 写入 ; WE = 0 : 读取
图3 命令列表
由上表可知, SDRAM的各种指令都是通过 控制/地址线 的高低电平组合来完成的, 并没有命令字. 所以 读写命令 与 列地址 同时发出.
图4 读写操作示意图
CAS(ColumnAddress Strobe,列地址选通脉冲)信号配合A0-A9/A11(不固定)来确定具体的列地址.
图5
在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一 种状态变化的过程)所制定的延迟。tRCD是SDRAM的一个重要时序参数,广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100的SDRAM,tRCD=2,代表20ns的延迟,对于PC133则为15ns
BWSCON = 0x2201 1110
BWSCON[31] = 0, 禁止数据掩码引脚
数据掩码
在讲述读/写操作时,我们谈到了突发长度。如果BL=4,一次就传送4×64bit的数据。但是,如果第二笔 数据是不需要的,怎么办?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏 蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于16bit位宽芯片,则需要两个DQM引脚。SDRAM官方规定,在读取时DQM发出两个时钟周期后生效,而在写入时,DQM与写入命令一样是立即成效
BWSCON[30] = 0, 禁止WAIT信号
BWSCON[29:28] = 1:0; 设置BANK7数据总线宽度为32bit
(BANK6同BANK7)
BANKCONx = 0x0700
BANKCONx( 0 <= x <= 5)用来控制BANK0~BANK5外接设备的访问时序, 采用默认值即可
BANKCONx(6 <= x <= 7) = 0x0001 8005
BANKCONx[16:15] = 1:1, 设置存储器类型为 SDRAM
BANKCONx[3:0] = 0:1:0:1, 设置RAS到CAS的延迟(tRCD)为3个时钟, 设置列地址数为9bit
REFRESH = 0x008C 07A3
BANKCONx[23] = 1, 使能自动刷新功能
BANKCONx[22] = 0, Auto refresh, 等于1为 self refresh
BANKCONx[21:20] = 0:0, 预充电时间为2个时钟周期 (预充电见解释)
BANKCONx[19:18] = 1:1, 设置半行周期时间为7个时钟
BANKCONx[10:0] 设置刷新计数, 刷新计数= 2^11+1-12*7.8=1955( 0x07A3 )
刷新
之所以称为DRAM,就是因为它要不断进行刷新(Refresh)才能保留住数据,那么要隔多长时间进行一次刷新呢? 我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs. 刷新操作分为两种:Auto Refresh,简称AR与Self Refresh,简称SR。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。
预充电
由于SDRAM的寻址具有独占性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作) 的行关闭,重新发送 行/列地址。L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)
BANKSIZE = 0xB1
BANKCONx[7] = 1, 使能突发操作
BANKCONx[6] = 0, 保留
BANKCONx[5] = 1, 使能SDRAM掉电模式
BANKCONx[4] = 1, 设置只在访问SDRAM的时候发送时钟
BANKCONx[3] = 0, 保留
BANKCONx[2:0] = 0:0:1, BANK6/BANK7存储器映射大小 = 64MB/64MB
数据输入(写入)
图7
数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样 ,只是在列寻址时,WE#为有效状态。从图中可见,由于数据信号由控制端发出,输入时芯片无需做任何调校,只需直接传到数据输入寄存器中,然后再由写入驱动器进行对存储电容的充电操作,因此数据可以与CAS同时发送,也就是说写入延迟为0。不过,数据并不是即时地写入存储电容,因为选通三极管 (就如读取时一样)与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的 写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)。tWR至少占用一个时钟周期或再多一点(时钟频率越高,tWR占用周期越多),有关它的影响将在下文进一步讲述
突发长度
突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称BL)
非突发连续读取模式:依次单独寻址,此时可等效于BL=1。虽然可以让数据是连续的传输,但每次都要发送列地 址与命令信息,控制资源占用极大
突发连续读取模式:只要指定起始列地址与突发长度,寻址操作与数据的读取操作自动进行,只要控制好两段突发读取命令的间隔周期(与BL 相同)即可做到连续的突发传输
突发读/突发写,表示读与写操作 都是突发传输的,每次读/写操作持续BL所设定的长度,这也是常规的设定
突发读/单一写,表示读操作是突发传输,写操作则只是 一个个单独进行。突发传输模式代表着突发周期内所涉及到的存储单元的传输顺序
MRSR = 0x30
MRSR[6:4] = 0:1:1, 设置 发送读取命令到第一个数据输出的时间 为 3 个时钟周期
数据输出(读出)
在CAS 发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)。CL的单位与tRCD一样,为时钟周期数,具体耗时由时钟频率决定
图6 CL=2与tAC示意图
JZ2440的裸机SDRAM代码执行流程:
到此,相信大家对“SDRAM是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。